[tbb] 01/01: Import Upstream version 2017~U7

Steven Capper capper-guest at moszumanska.debian.org
Sun Jul 23 11:37:12 UTC 2017


This is an automated email from the git hooks/post-receive script.

capper-guest pushed a commit to branch danger/upstream
in repository tbb.

commit 1713448d7992b383772aec1280ca3162cb1f79e6
Author: Steven Capper <steven.capper at gmail.com>
Date:   Sun Jul 9 13:21:15 2017 +0100

    Import Upstream version 2017~U7
---
 .gitattributes                                     |    45 +
 .gitignore                                         |    86 +
 CHANGES                                            |   476 +-
 COPYING                                            |   353 -
 LICENSE                                            |   201 +
 Makefile                                           |    34 +-
 README.md                                          |    30 +
 build/AIX.gcc.inc                                  |    30 +-
 build/AIX.inc                                      |    30 +-
 build/FreeBSD.clang.inc                            |    44 +-
 build/FreeBSD.gcc.inc                              |    37 +-
 build/FreeBSD.inc                                  |    38 +-
 build/Makefile.rml                                 |    42 +-
 build/Makefile.tbb                                 |    40 +-
 build/Makefile.tbbmalloc                           |    44 +-
 build/Makefile.tbbproxy                            |    36 +-
 build/Makefile.test                                |    76 +-
 build/SunOS.gcc.inc                                |    32 +-
 build/SunOS.inc                                    |    30 +-
 build/SunOS.suncc.inc                              |    32 +-
 build/android.clang.inc                            |   118 +
 build/android.gcc.inc                              |    62 +-
 build/android.icc.inc                              |   120 +
 build/android.inc                                  |    67 +-
 build/android.linux.inc                            |    39 +-
 build/android.linux.launcher.sh                    |    41 +-
 build/android.macos.inc                            |    39 +-
 build/android.windows.inc                          |    39 +-
 build/big_iron.inc                                 |    30 +-
 build/common.inc                                   |    63 +-
 build/common_rules.inc                             |    38 +-
 build/detect.js                                    |   331 +-
 build/generate_tbbvars.bat                         |    42 +-
 build/generate_tbbvars.sh                          |    40 +-
 build/index.html                                   |   132 +-
 build/ios.clang.inc                                |    23 +
 build/ios.macos.inc                                |    36 +
 build/linux.clang.inc                              |    43 +-
 build/linux.gcc.inc                                |    60 +-
 build/linux.icc.inc                                |    55 +-
 build/linux.inc                                    |    52 +-
 build/linux.pathcc.inc                             |    35 +-
 build/linux.xl.inc                                 |    30 +-
 build/macos.clang.inc                              |    51 +-
 build/macos.gcc.inc                                |    30 +-
 build/macos.icc.inc                                |    62 +-
 build/macos.inc                                    |    66 +-
 build/mic.icc.inc                                  |    56 +-
 build/mic.linux.inc                                |    30 +-
 build/mic.linux.launcher.sh                        |    40 +-
 build/mic.offload.inc                              |    53 +-
 build/test_launcher.bat                            |    30 +-
 build/test_launcher.sh                             |    37 +-
 build/version_info_aix.sh                          |    34 +-
 build/version_info_android.sh                      |    36 +-
 build/version_info_linux.sh                        |    34 +-
 build/version_info_macos.sh                        |    34 +-
 build/version_info_sunos.sh                        |    34 +-
 build/version_info_windows.js                      |    77 +-
 build/vs2010/index.html                            |    30 -
 build/vs2010/makefile.sln                          |    78 -
 build/vs2010/tbb.vcxproj                           |   712 -
 build/vs2010/tbbmalloc.vcxproj                     |   584 -
 build/vs2010/tbbmalloc_proxy.vcxproj               |   421 -
 build/vs2012/index.html                            |    30 +
 build/vs2012/makefile.sln                          |    78 +
 build/vs2012/tbb.vcxproj                           |   696 +
 build/vs2012/tbbmalloc.vcxproj                     |   558 +
 build/vs2012/tbbmalloc_proxy.vcxproj               |   425 +
 build/{vs2010 => vs2012}/version_string.ver        |     0
 build/windows.cl.inc                               |    53 +-
 build/windows.gcc.inc                              |    46 +-
 build/windows.icl.inc                              |    48 +-
 build/windows.inc                                  |    34 +-
 build/xbox360.cl.inc                               |    85 -
 build/xbox360.inc                                  |    72 -
 cmake/README.rst                                   |   285 +
 cmake/TBBBuild.cmake                               |   197 +
 cmake/TBBGet.cmake                                 |   298 +
 cmake/TBBMakeConfig.cmake                          |   162 +
 cmake/templates/TBBConfig.cmake.in                 |    89 +
 cmake/templates/TBBConfigForSource.cmake.in        |    82 +
 cmake/templates/TBBConfigVersion.cmake.in          |    28 +
 doc/Release_Notes.txt                              |   143 +-
 doc/html/a00001.html                               |     4 +-
 doc/html/a00002.html                               |    29 +-
 doc/html/a00003.html                               |    20 +-
 doc/html/a00004.html                               |    22 +-
 doc/html/a00005.html                               |    24 +-
 doc/html/a00006.html                               |    24 +-
 doc/html/a00007.html                               |    22 +-
 doc/html/a00008.html                               |    37 +-
 doc/html/a00009.html                               |   102 +-
 doc/html/{a00010.png => a00009.png}                |   Bin
 doc/html/a00010.html                               |    96 +-
 doc/html/a00011.html                               |    79 +-
 doc/html/{a00012.png => a00011.png}                |   Bin
 doc/html/a00012.html                               |    92 +-
 doc/html/a00012.png                                |   Bin 1067 -> 843 bytes
 doc/html/a00013.html                               |   110 +-
 doc/html/a00013.png                                |   Bin 843 -> 1567 bytes
 doc/html/a00014.html                               |    97 +-
 doc/html/a00014.png                                |   Bin 1567 -> 0 bytes
 doc/html/a00015.html                               |    51 +-
 doc/html/{a00018.png => a00015.png}                |   Bin
 doc/html/a00016.html                               |    57 +-
 doc/html/a00016.png                                |   Bin 1259 -> 688 bytes
 doc/html/a00017.html                               |   153 +-
 doc/html/a00017.png                                |   Bin 3777 -> 0 bytes
 doc/html/a00018.html                               |    42 +-
 doc/html/a00018.png                                |   Bin 595 -> 490 bytes
 doc/html/a00019.html                               |    44 +-
 doc/html/a00019.png                                |   Bin 688 -> 0 bytes
 doc/html/a00020.html                               |    43 +-
 doc/html/a00020.png                                |   Bin 490 -> 2213 bytes
 doc/html/a00021.html                               |    54 +-
 doc/html/{a00023.png => a00021.png}                |   Bin
 doc/html/a00022.html                               |   293 +-
 doc/html/a00022.png                                |   Bin 2213 -> 0 bytes
 doc/html/a00023.html                               |   114 +-
 doc/html/a00024.html                               |   318 +-
 doc/html/a00025.html                               |    80 +-
 doc/html/a00026.html                               |   103 +-
 doc/html/{a00029.png => a00026.png}                |   Bin
 doc/html/a00027.html                               |   103 +-
 doc/html/a00028.html                               |   262 +-
 doc/html/a00028.png                                |   Bin 1875 -> 0 bytes
 doc/html/a00029.html                               |    58 +-
 doc/html/a00030.html                               |   574 +-
 doc/html/a00030.png                                |   Bin 5237 -> 1101 bytes
 doc/html/a00031.html                               |    54 +-
 doc/html/a00031.png                                |   Bin 1158 -> 1102 bytes
 doc/html/a00032.html                               |   239 +-
 doc/html/{a00035.png => a00032.png}                |   Bin
 doc/html/a00033.html                               |    80 +-
 doc/html/a00034.html                               |    32 +-
 doc/html/a00035.html                               |   361 +-
 doc/html/a00035.png                                |   Bin 835 -> 766 bytes
 doc/html/a00036.html                               |  1071 +-
 doc/html/{a00043.png => a00036.png}                |   Bin
 doc/html/a00037.html                               |    46 +-
 doc/html/{a00044.png => a00037.png}                |   Bin
 doc/html/a00038.html                               |   631 +-
 doc/html/a00038.png                                |   Bin 1890 -> 0 bytes
 doc/html/a00039.html                               |   232 +-
 doc/html/a00039.png                                |   Bin 1634 -> 872 bytes
 doc/html/a00040.html                               |   175 +-
 doc/html/a00040.png                                |   Bin 1636 -> 2163 bytes
 doc/html/a00041.html                               |    55 +-
 doc/html/a00042.html                               |   437 +-
 doc/html/a00042.png                                |   Bin 766 -> 2174 bytes
 doc/html/a00043.html                               |  1111 +-
 doc/html/a00043.png                                |   Bin 1052 -> 2109 bytes
 doc/html/a00044.html                               |   118 +-
 doc/html/a00044.png                                |   Bin 1068 -> 2095 bytes
 doc/html/a00045.html                               |   596 +-
 doc/html/a00046.html                               |   834 +-
 doc/html/a00046.png                                |   Bin 872 -> 1057 bytes
 doc/html/a00047.html                               |   179 +-
 doc/html/a00047.png                                |   Bin 2163 -> 1888 bytes
 doc/html/a00048.html                               |    70 +-
 doc/html/a00049.html                               |   355 +-
 doc/html/a00049.png                                |   Bin 2174 -> 1525 bytes
 doc/html/a00050.html                               |   134 +-
 doc/html/a00050.png                                |   Bin 2109 -> 621 bytes
 doc/html/a00051.html                               |   144 +-
 doc/html/a00051.png                                |   Bin 2095 -> 1262 bytes
 doc/html/a00052.html                               |    63 +-
 doc/html/a00053.html                               |   805 +-
 doc/html/a00053.png                                |   Bin 1057 -> 1009 bytes
 doc/html/a00054.html                               |    98 +-
 doc/html/a00054.png                                |   Bin 1888 -> 0 bytes
 doc/html/a00055.html                               |    29 +-
 doc/html/a00056.html                               |   150 +-
 doc/html/a00056.png                                |   Bin 2359 -> 0 bytes
 doc/html/a00057.html                               |   241 +-
 doc/html/a00057.png                                |   Bin 1010 -> 1053 bytes
 doc/html/a00058.html                               |   235 +-
 doc/html/a00058.png                                |   Bin 621 -> 1259 bytes
 doc/html/a00059.html                               |   132 +-
 doc/html/{a00062.png => a00059.png}                |   Bin
 doc/html/a00060.html                               |    72 +-
 doc/html/a00060.png                                |   Bin 1053 -> 0 bytes
 doc/html/a00061.html                               |   206 +-
 doc/html/a00061.png                                |   Bin 1259 -> 0 bytes
 doc/html/a00062.html                               |   107 +-
 doc/html/a00062.png                                |   Bin 757 -> 574 bytes
 doc/html/a00063.html                               |   115 +-
 doc/html/a00064.html                               |    40 +-
 doc/html/a00065.html                               |    48 +-
 doc/html/a00065.png                                |   Bin 574 -> 839 bytes
 doc/html/a00066.html                               |   106 +-
 doc/html/a00067.html                               |    69 +-
 doc/html/a00068.html                               |   137 +-
 doc/html/a00068.png                                |   Bin 2810 -> 0 bytes
 doc/html/a00069.html                               |    57 +-
 doc/html/a00069.png                                |   Bin 0 -> 1045 bytes
 doc/html/a00070.html                               |   337 +-
 doc/html/a00070.png                                |   Bin 596 -> 0 bytes
 doc/html/a00071.html                               |   100 +-
 doc/html/{a00074.png => a00071.png}                |   Bin
 doc/html/a00072.html                               |   110 +-
 doc/html/a00072.png                                |   Bin 14405 -> 0 bytes
 doc/html/a00073.html                               |    68 +-
 doc/html/{a00086.png => a00073.png}                |   Bin
 doc/html/a00074.html                               |    45 +-
 doc/html/a00074.png                                |   Bin 495 -> 952 bytes
 doc/html/a00075.html                               |    52 +-
 doc/html/a00075.png                                |   Bin 1382 -> 0 bytes
 doc/html/a00076.html                               |    63 +-
 doc/html/a00076.png                                |   Bin 995 -> 671 bytes
 doc/html/a00077.html                               |   153 +-
 doc/html/a00077.png                                |   Bin 1042 -> 0 bytes
 doc/html/a00078.html                               |   104 +-
 doc/html/a00078.png                                |   Bin 1119 -> 0 bytes
 doc/html/a00079.html                               |    74 +-
 doc/html/a00079.png                                |   Bin 1168 -> 0 bytes
 doc/html/a00080.html                               |    55 +-
 doc/html/a00080.png                                |   Bin 1214 -> 489 bytes
 doc/html/a00081.html                               |   204 +-
 doc/html/a00081.png                                |   Bin 1263 -> 960 bytes
 doc/html/a00082.html                               |   140 +-
 doc/html/a00082.png                                |   Bin 1307 -> 680 bytes
 doc/html/a00083.html                               |    82 +-
 doc/html/a00083.png                                |   Bin 1330 -> 1052 bytes
 doc/html/a00084.html                               |    75 +-
 doc/html/a00084.png                                |   Bin 1358 -> 704 bytes
 doc/html/a00085.html                               |    86 +-
 doc/html/{a00102.png => a00085.png}                |   Bin
 doc/html/a00086.html                               |    37 +-
 doc/html/a00087.html                               |   100 +-
 doc/html/a00087.png                                |   Bin 0 -> 1152 bytes
 doc/html/a00088.html                               |   104 +-
 doc/html/a00088.png                                |   Bin 1710 -> 1136 bytes
 doc/html/a00089.html                               |   154 +-
 doc/html/a00089.png                                |   Bin 1729 -> 0 bytes
 doc/html/a00090.html                               |   107 +-
 doc/html/a00090.png                                |   Bin 1762 -> 0 bytes
 doc/html/a00091.html                               |   343 +-
 doc/html/a00091.png                                |   Bin 1877 -> 0 bytes
 doc/html/a00092.html                               |    51 +-
 doc/html/a00092.png                                |   Bin 671 -> 696 bytes
 doc/html/a00093.html                               |   173 +-
 doc/html/a00093.png                                |   Bin 0 -> 644 bytes
 doc/html/a00094.html                               |   127 +-
 doc/html/a00094.png                                |   Bin 0 -> 1132 bytes
 doc/html/a00095.html                               |    54 +-
 doc/html/a00096.html                               |    45 +-
 doc/html/a00096.png                                |   Bin 489 -> 1396 bytes
 doc/html/a00097.html                               |   192 +-
 doc/html/a00097.png                                |   Bin 960 -> 1388 bytes
 doc/html/a00098.html                               |   116 +-
 doc/html/a00098.png                                |   Bin 3820 -> 1267 bytes
 doc/html/a00099.html                               |   151 +-
 doc/html/a00099.png                                |   Bin 680 -> 854 bytes
 doc/html/a00100.html                               |    78 +-
 doc/html/a00100.png                                |   Bin 1052 -> 0 bytes
 doc/html/a00101.html                               |   112 +-
 doc/html/a00101.png                                |   Bin 704 -> 1150 bytes
 doc/html/a00102.html                               |   132 +-
 doc/html/a00102.png                                |   Bin 724 -> 612 bytes
 doc/html/a00103.html                               |    95 +-
 doc/html/a00104.html                               |   279 +-
 doc/html/a00104.png                                |   Bin 2529 -> 0 bytes
 doc/html/a00105.html                               |    55 +-
 doc/html/a00105.png                                |   Bin 625 -> 0 bytes
 doc/html/a00106.html                               |   138 +-
 doc/html/a00106.png                                |   Bin 612 -> 754 bytes
 doc/html/a00107.html                               |   127 +-
 doc/html/{a00112.png => a00107.png}                |   Bin
 doc/html/a00108.html                               |   190 +-
 doc/html/{a00113.png => a00108.png}                |   Bin
 doc/html/a00109.html                               |   391 +-
 doc/html/a00109.png                                |   Bin 4089 -> 0 bytes
 doc/html/a00110.html                               |   388 +-
 doc/html/a00110.png                                |   Bin 4406 -> 0 bytes
 doc/html/a00111.html                               |    65 +-
 doc/html/a00111.png                                |   Bin 754 -> 0 bytes
 doc/html/a00112.html                               |    71 +-
 doc/html/a00113.html                               |   185 +-
 doc/html/a00114.html                               |    19 +-
 doc/html/a00115.html                               |    18 +-
 doc/html/a00116.html                               |    19 +-
 doc/html/a00117.html                               |    17 +-
 doc/html/a00118.html                               |    19 +-
 doc/html/a00119.html                               |   193 +-
 doc/html/a00119.png                                |   Bin 0 -> 978 bytes
 doc/html/a00120.html                               |    48 +-
 doc/html/a00120.png                                |   Bin 0 -> 1039 bytes
 doc/html/a00121.html                               |   117 +-
 doc/html/{a00125.png => a00121.png}                |   Bin
 doc/html/a00122.html                               |    23 +-
 doc/html/a00123.html                               |    23 +-
 doc/html/a00124.html                               |   136 +-
 doc/html/a00124.png                                |   Bin 4592 -> 0 bytes
 doc/html/a00125.html                               |   317 +-
 doc/html/a00125.png                                |   Bin 766 -> 616 bytes
 doc/html/a00126.html                               |   101 +-
 doc/html/a00127.html                               |    44 +-
 doc/html/a00128.html                               |   290 +-
 doc/html/a00128.png                                |   Bin 616 -> 622 bytes
 doc/html/a00129.html                               |   119 +-
 doc/html/{a00138.png => a00129.png}                |   Bin
 doc/html/a00130.html                               |   106 +-
 doc/html/{a00134.png => a00130.png}                |   Bin
 doc/html/a00131.html                               |    12 +-
 doc/html/a00132.html                               |    99 +-
 doc/html/a00132.png                                |   Bin 622 -> 798 bytes
 doc/html/a00133.html                               |    70 +-
 doc/html/a00133.png                                |   Bin 798 -> 645 bytes
 doc/html/a00134.html                               |   163 +-
 doc/html/a00134.png                                |   Bin 594 -> 655 bytes
 doc/html/a00135.html                               |   175 +-
 doc/html/a00135.png                                |   Bin 655 -> 542 bytes
 doc/html/a00136.html                               |     8 +-
 doc/html/a00137.html                               |    12 +-
 doc/html/a00138.html                               |    63 +-
 doc/html/a00138.png                                |   Bin 604 -> 839 bytes
 doc/html/a00139.html                               |   172 +-
 doc/html/a00139.png                                |   Bin 645 -> 903 bytes
 doc/html/a00140.html                               |   154 +-
 doc/html/a00140.png                                |   Bin 542 -> 729 bytes
 doc/html/a00141.html                               |   203 +-
 doc/html/a00141.png                                |   Bin 839 -> 777 bytes
 doc/html/a00142.html                               |   146 +-
 doc/html/a00142.png                                |   Bin 4584 -> 961 bytes
 doc/html/a00143.html                               |   348 +-
 doc/html/a00143.png                                |   Bin 4401 -> 0 bytes
 doc/html/a00144.html                               |   497 +-
 doc/html/a00144.png                                |   Bin 1770 -> 656 bytes
 doc/html/a00145.html                               |   181 +-
 doc/html/a00145.png                                |   Bin 729 -> 891 bytes
 doc/html/a00146.html                               |   216 +-
 doc/html/a00146.png                                |   Bin 777 -> 1324 bytes
 doc/html/a00147.html                               |   129 +-
 doc/html/a00147.png                                |   Bin 5227 -> 0 bytes
 doc/html/a00148.html                               |    81 +-
 doc/html/a00148.png                                |   Bin 961 -> 538 bytes
 doc/html/a00149.html                               |    28 +-
 doc/html/{a00155.png => a00149.png}                |   Bin
 doc/html/a00150.html                               |   345 +-
 doc/html/a00150.png                                |   Bin 656 -> 565 bytes
 doc/html/a00151.html                               |   270 +-
 doc/html/a00151.png                                |   Bin 891 -> 906 bytes
 doc/html/a00152.html                               |   173 +-
 doc/html/a00152.png                                |   Bin 1324 -> 906 bytes
 doc/html/a00153.html                               |   116 +-
 doc/html/a00154.html                               |    71 +-
 doc/html/a00154.png                                |   Bin 538 -> 0 bytes
 doc/html/a00155.html                               |   176 +-
 doc/html/a00155.png                                |   Bin 620 -> 1423 bytes
 doc/html/a00156.html                               |   164 +-
 doc/html/a00156.png                                |   Bin 565 -> 0 bytes
 doc/html/a00157.html                               |   282 +-
 doc/html/a00157.png                                |   Bin 906 -> 0 bytes
 doc/html/a00158.html                               |   163 +-
 doc/html/a00158.png                                |   Bin 906 -> 757 bytes
 doc/html/a00159.html                               |   136 +-
 doc/html/{a00166.png => a00159.png}                |   Bin
 doc/html/a00160.html                               |    80 +-
 doc/html/{a00167.png => a00160.png}                |   Bin
 doc/html/a00161.html                               |   207 +-
 doc/html/a00161.png                                |   Bin 1423 -> 857 bytes
 doc/html/a00162.html                               |    85 +-
 doc/html/{a00169.png => a00162.png}                |   Bin
 doc/html/a00163.html                               |    60 +-
 doc/html/a00164.html                               |   222 +-
 doc/html/a00164.png                                |   Bin 0 -> 2094 bytes
 doc/html/a00165.html                               |   171 +-
 doc/html/a00165.png                                |   Bin 757 -> 916 bytes
 doc/html/a00166.html                               |    57 +-
 doc/html/a00167.html                               |    70 +-
 doc/html/a00168.html                               |    62 +-
 doc/html/a00168.png                                |   Bin 857 -> 468 bytes
 doc/html/a00169.html                               |    91 +-
 doc/html/a00169.png                                |   Bin 1409 -> 638 bytes
 doc/html/a00170.html                               |    77 +-
 doc/html/{a00178.png => a00170.png}                |   Bin
 doc/html/a00171.html                               |    69 -
 doc/html/a00172.html                               |    66 -
 doc/html/a00173.html                               |    81 -
 doc/html/a00173.png                                |   Bin 468 -> 0 bytes
 doc/html/a00174.html                               |    91 -
 doc/html/a00174.png                                |   Bin 1711 -> 0 bytes
 doc/html/a00175.html                               |    56 -
 doc/html/a00176.html                               |   325 -
 doc/html/a00176.png                                |   Bin 2522 -> 0 bytes
 doc/html/a00177.html                               |   133 -
 doc/html/a00177.png                                |   Bin 638 -> 0 bytes
 doc/html/a00178.html                               |   102 -
 doc/html/a00188.html                               |   156 +
 doc/html/a00193.html                               |    99 +
 doc/html/a00196.html                               |   271 -
 doc/html/a00198.html                               |    99 -
 doc/html/a00212.html                               |   194 +
 doc/html/a00217.html                               |   191 -
 doc/html/a00230.html                               |   116 +
 doc/html/a00233.html                               |   681 +
 doc/html/a00237.html                               |   113 -
 doc/html/a00240.html                               |   692 -
 doc/html/a00252.html                               |  2187 +++
 doc/html/a00253.html                               |    67 +
 doc/html/a00254.html                               |   382 +
 doc/html/a00255.html                               |  1987 +--
 doc/html/a00256.html                               |    25 +-
 doc/html/a00257.html                               |   342 +-
 doc/html/a00258.html                               |   125 -
 doc/html/a00259.html                               |    31 +-
 doc/html/a00260.html                               |    43 +-
 doc/html/a00261.html                               |    58 +
 doc/html/a00262.html                               |    15 +-
 doc/html/a00263.html                               |    21 +-
 doc/html/a00264.html                               |    25 +-
 doc/html/a00265.html                               |    24 +-
 doc/html/a00266.html                               |    26 +-
 doc/html/a00267.html                               |    42 +-
 doc/html/a00268.html                               |    21 +-
 doc/html/a00269.html                               |    25 +-
 doc/html/a00270.html                               |    28 +-
 doc/html/a00271.html                               |    21 +-
 doc/html/a00272.html                               |    45 +-
 doc/html/a00273.html                               |    87 +-
 doc/html/a00274.html                               |    22 +-
 doc/html/a00275.html                               |    27 +-
 doc/html/a00276.html                               |    49 +-
 doc/html/a00277.html                               |    90 +-
 doc/html/a00278.html                               |    18 +-
 doc/html/a00279.html                               |    29 +-
 doc/html/a00280.html                               |    23 +-
 doc/html/a00281.html                               |    13 +-
 doc/html/a00282.html                               |    15 +-
 doc/html/a00283.html                               |    17 +-
 doc/html/a00284.html                               |    21 +-
 doc/html/a00285.html                               |    22 +-
 doc/html/a00286.html                               |    21 +-
 doc/html/a00287.html                               |    14 +-
 doc/html/a00288.html                               |    19 +-
 doc/html/a00289.html                               |    19 +-
 doc/html/a00290.html                               |    28 +-
 doc/html/a00291.html                               |    32 +-
 doc/html/a00292.html                               |    20 +-
 doc/html/a00293.html                               |    33 +-
 doc/html/a00294.html                               |    15 +-
 doc/html/a00295.html                               |    19 +-
 doc/html/a00296.html                               |    21 +-
 doc/html/a00297.html                               |    24 +-
 doc/html/a00298.html                               |    34 +-
 doc/html/a00299.html                               |    26 +-
 doc/html/a00300.html                               |    22 +-
 doc/html/a00301.html                               |    14 +-
 doc/html/a00302.html                               |    32 +-
 doc/html/a00303.html                               |    27 +-
 doc/html/a00304.html                               |    36 +-
 doc/html/a00305.html                               |    42 +-
 doc/html/a00306.html                               |    14 +-
 doc/html/a00307.html                               |    26 +-
 doc/html/a00308.html                               |    21 +-
 doc/html/a00309.html                               |    31 +-
 doc/html/a00310.html                               |    32 +-
 doc/html/a00311.html                               |    13 +-
 doc/html/a00312.html                               |    12 +-
 doc/html/a00313.html                               |    11 +-
 doc/html/a00314.html                               |    21 +-
 doc/html/a00315.html                               |    10 +-
 doc/html/a00316.html                               |    13 +-
 doc/html/a00317.html                               |    10 +-
 doc/html/a00318.html                               |    17 +-
 doc/html/a00319.html                               |    22 +-
 doc/html/a00320.html                               |    23 +-
 doc/html/a00321.html                               |    13 +-
 doc/html/a00322.html                               |    18 +-
 doc/html/a00323.html                               |    40 +-
 doc/html/a00324.html                               |    54 +-
 doc/html/a00325.html                               |    58 +-
 doc/html/a00326.html                               |    15 +-
 doc/html/a00327.html                               |    22 +-
 doc/html/a00328.html                               |    44 +-
 doc/html/a00329.html                               |    41 +-
 doc/html/a00330.html                               |    70 +-
 doc/html/a00331.html                               |    54 +-
 doc/html/a00332.html                               |    29 +-
 doc/html/a00333.html                               |    52 +-
 doc/html/a00334.html                               |    56 +-
 doc/html/a00335.html                               |    54 +-
 doc/html/a00336.html                               |    32 +-
 doc/html/a00337.html                               |    29 +-
 doc/html/a00338.html                               |    43 +-
 doc/html/a00339.html                               |    50 +-
 doc/html/a00340.html                               |    85 +-
 doc/html/a00341.html                               |    71 +-
 doc/html/a00342.html                               |    57 +-
 doc/html/a00343.html                               |   120 +-
 doc/html/a00344.html                               |    22 +-
 doc/html/a00345.html                               |    60 +
 doc/html/a00346.html                               |   109 +-
 doc/html/a00347.html                               |   112 +-
 doc/html/a00348.html                               |   121 +-
 doc/html/a00349.html                               |    20 +-
 doc/html/a00350.html                               |    20 +-
 doc/html/a00351.html                               |    22 +-
 doc/html/a00352.html                               |    22 +-
 doc/html/a00353.html                               |    33 +-
 doc/html/a00354.html                               |    36 +-
 doc/html/a00355.html                               |   101 +-
 doc/html/a00356.html                               |    24 +-
 doc/html/a00357.html                               |    15 +-
 doc/html/a00358.html                               |    18 +-
 doc/html/a00359.html                               |    18 +-
 doc/html/a00360.html                               |    26 +-
 doc/html/a00361.html                               |    24 +-
 doc/html/a00362.html                               |    57 +-
 doc/html/a00363.html                               |    36 +-
 doc/html/a00364.html                               |    57 +-
 doc/html/a00365.html                               |    63 +-
 doc/html/a00366.html                               |    25 +-
 doc/html/a00367.html                               |    40 +-
 doc/html/a00368.html                               |   122 +-
 doc/html/a00369.html                               |    32 +-
 doc/html/a00370.html                               |    14 +-
 doc/html/a00371.html                               |    17 +-
 doc/html/a00372.html                               |    14 +-
 doc/html/a00373.html                               |    21 +-
 doc/html/a00374.html                               |    27 +-
 doc/html/a00375.html                               |    39 +-
 doc/html/a00376.html                               |    22 +-
 doc/html/a00377.html                               |    16 +-
 doc/html/a00378.html                               |    78 +-
 doc/html/a00379.html                               |    52 +-
 doc/html/a00380.html                               |    42 +-
 doc/html/a00381.html                               |    36 +-
 doc/html/a00382.html                               |    46 +-
 doc/html/a00383.html                               |    23 +-
 doc/html/a00384.html                               |    15 +-
 doc/html/a00385.html                               |    15 +-
 doc/html/a00386.html                               |    12 +-
 doc/html/a00387.html                               |    18 +-
 doc/html/a00388.html                               |    33 +-
 doc/html/a00389.html                               |    26 +-
 doc/html/a00390.html                               |    24 +-
 doc/html/a00391.html                               |    23 +-
 doc/html/a00392.html                               |    46 +-
 doc/html/a00393.html                               |    43 +-
 doc/html/a00394.html                               |    39 +-
 doc/html/a00395.html                               |    18 +-
 doc/html/a00396.html                               |    21 +-
 doc/html/a00397.html                               |    10 +-
 doc/html/a00398.html                               |    21 +-
 doc/html/a00399.html                               |    19 +-
 doc/html/a00400.html                               |    15 +-
 doc/html/a00401.html                               |    19 +-
 doc/html/a00402.html                               |    29 +-
 doc/html/a00403.html                               |    29 +-
 doc/html/a00404.html                               |    26 +-
 doc/html/a00405.html                               |    38 +-
 doc/html/a00406.html                               |    22 +-
 doc/html/a00407.html                               |    49 +-
 doc/html/a00408.html                               |    63 -
 doc/html/a00409.html                               |    65 -
 doc/html/a00410.html                               |    58 -
 doc/html/a00411.html                               |    57 -
 doc/html/a00412.html                               |    67 -
 doc/html/a00413.html                               |    65 -
 doc/html/a00414.html                               |    61 -
 doc/html/a00415.html                               |    58 -
 doc/html/a00416.html                               |    61 -
 doc/html/a00417.html                               |    62 -
 doc/html/a00418.html                               |    63 -
 doc/html/a00419.html                               |    75 -
 doc/html/a00420.html                               |    66 -
 doc/html/a00421.html                               |    83 -
 doc/html/annotated.html                            |   335 +-
 doc/html/classes.html                              |   121 +-
 doc/html/dir_525f2cc589630bacbdc3bb450847427e.html |     2 +-
 doc/html/dir_63fb2cc293d133785b96e521fa051167.html |     2 +-
 doc/html/dir_87119f26c7695cbc270003e99bc7f49f.html |   122 +-
 doc/html/dir_b9976680b2be72d2d0b8fca1c31202a2.html |     2 +-
 doc/html/files.html                                |     8 +-
 doc/html/functions.html                            |    63 +-
 doc/html/functions_0x62.html                       |    31 +-
 doc/html/functions_0x63.html                       |    77 +-
 doc/html/functions_0x64.html                       |    46 +-
 doc/html/functions_0x65.html                       |    81 +-
 doc/html/functions_0x66.html                       |    24 +-
 doc/html/functions_0x67.html                       |    24 +-
 doc/html/functions_0x68.html                       |     4 +-
 doc/html/functions_0x69.html                       |    66 +-
 doc/html/functions_0x6a.html                       |     4 +-
 doc/html/functions_0x6c.html                       |    25 +-
 doc/html/functions_0x6d.html                       |    39 +-
 doc/html/functions_0x6e.html                       |    14 +-
 doc/html/functions_0x6f.html                       |    68 +-
 doc/html/functions_0x70.html                       |    36 +-
 doc/html/functions_0x71.html                       |     9 +-
 doc/html/functions_0x72.html                       |   100 +-
 doc/html/functions_0x73.html                       |    80 +-
 doc/html/functions_0x74.html                       |    95 +-
 doc/html/functions_0x75.html                       |    16 +-
 doc/html/functions_0x76.html                       |    14 +-
 doc/html/functions_0x77.html                       |    14 +-
 doc/html/functions_0x7e.html                       |    74 +-
 doc/html/functions_enum.html                       |    10 +-
 doc/html/functions_eval.html                       |    20 +-
 doc/html/functions_func.html                       |    56 +-
 doc/html/functions_func_0x62.html                  |    28 +-
 doc/html/functions_func_0x63.html                  |    69 +-
 doc/html/functions_func_0x64.html                  |    35 +-
 doc/html/functions_func_0x65.html                  |    58 +-
 doc/html/functions_func_0x66.html                  |    16 +-
 doc/html/functions_func_0x67.html                  |    24 +-
 doc/html/functions_func_0x68.html                  |     4 +-
 doc/html/functions_func_0x69.html                  |    51 +-
 doc/html/functions_func_0x6a.html                  |     4 +-
 doc/html/functions_func_0x6c.html                  |    25 +-
 doc/html/functions_func_0x6d.html                  |    29 +-
 doc/html/functions_func_0x6e.html                  |    10 +-
 doc/html/functions_func_0x6f.html                  |    60 +-
 doc/html/functions_func_0x70.html                  |    27 +-
 doc/html/functions_func_0x71.html                  |     9 +-
 doc/html/functions_func_0x72.html                  |    90 +-
 doc/html/functions_func_0x73.html                  |    62 +-
 doc/html/functions_func_0x74.html                  |    92 +-
 doc/html/functions_func_0x75.html                  |    16 +-
 doc/html/functions_func_0x77.html                  |    14 +-
 doc/html/functions_func_0x7e.html                  |    74 +-
 doc/html/functions_rela.html                       |    14 +-
 doc/html/functions_type.html                       |    81 +-
 doc/html/functions_vars.html                       |    36 +-
 doc/html/globals.html                              |    24 +-
 doc/html/globals_func.html                         |    24 +-
 doc/html/hierarchy.html                            |   465 +-
 doc/html/index.html                                |     4 +-
 doc/html/modules.html                              |    14 +-
 doc/html/namespacemembers.html                     |    39 +-
 doc/html/namespacemembers_enum.html                |     6 +-
 doc/html/namespacemembers_eval.html                |    10 +-
 doc/html/namespacemembers_func.html                |    23 +-
 doc/html/namespacemembers_type.html                |     6 +-
 doc/html/namespaces.html                           |     6 +-
 doc/html/pages.html                                |     4 +-
 examples/GettingStarted/index.html                 |   360 +-
 examples/GettingStarted/sub_string_finder/Makefile |    38 +-
 .../sub_string_finder/Makefile.windows             |    42 +-
 .../GettingStarted/sub_string_finder/index.html    |    67 -
 .../sub_string_finder/msvs/sub_string_finder.sln   |    92 +-
 .../msvs/sub_string_finder.vcxproj                 |   390 +-
 .../msvs/sub_string_finder_extended.vcxproj        |   390 +-
 .../msvs/sub_string_finder_pretty.vcxproj          |   390 +-
 .../GettingStarted/sub_string_finder/readme.html   |   416 +
 .../sub_string_finder/sub_string_finder.cpp        |   113 +-
 .../sub_string_finder_extended.cpp                 |   265 +-
 .../sub_string_finder/sub_string_finder_pretty.cpp |   154 +-
 examples/Makefile                                  |    40 +-
 examples/common/copy_libraries.bat                 |    37 +-
 examples/common/examples-common.inc                |    38 +
 examples/common/gui/Makefile.gmake                 |    34 +-
 examples/common/gui/Makefile.win                   |    30 +-
 examples/common/gui/convideo.cpp                   |    42 +-
 examples/common/gui/d2dvideo.cpp                   |    42 +-
 examples/common/gui/dxcheck.bat                    |    34 +-
 examples/common/gui/gdivideo.cpp                   |    38 +-
 examples/common/gui/macvideo.cpp                   |    70 +-
 examples/common/gui/video.h                        |    44 +-
 examples/common/gui/winvideo.h                     |    40 +-
 examples/common/gui/xcode/tbbExample/Info.plist    |    59 -
 examples/common/gui/xcode/tbbExample/OpenGLView.h  |    58 +-
 examples/common/gui/xcode/tbbExample/OpenGLView.m  |   106 +-
 .../gui/xcode/tbbExample/en.lproj/MainMenu.xib     |   339 +-
 .../common/gui/xcode/tbbExample/iOS.storyboard     |    28 +
 examples/common/gui/xcode/tbbExample/main.m        |    59 +-
 .../common/gui/xcode/tbbExample/tbbAppDelegate.h   |    50 +-
 .../common/gui/xcode/tbbExample/tbbAppDelegate.m   |    59 +-
 .../gui/xcode/tbbExample/tbbExample-Info.ios.plist |    44 +
 .../gui/xcode/tbbExample/tbbExample-Info.plist     |    16 +-
 .../gui/xcode/tbbExample/tbbExample-Prefix.pch     |    43 +-
 examples/common/gui/xvideo.cpp                     |    55 +-
 examples/common/index.html                         |   457 +-
 examples/common/toolset.props                      |    18 +-
 examples/common/utility/fast_random.h              |    30 +-
 examples/common/utility/utility.h                  |    63 +-
 .../concurrent_hash_map/count_strings/Makefile     |    32 +-
 .../count_strings/Makefile.windows                 |    30 +-
 .../count_strings/count_strings.cpp                |    34 +-
 .../concurrent_hash_map/count_strings/index.html   |    55 -
 .../count_strings/msvs/count_strings.sln           |    52 +-
 .../count_strings/msvs/count_strings.vcxproj       |   396 +-
 .../concurrent_hash_map/count_strings/readme.html  |   401 +
 examples/concurrent_hash_map/index.html            |   360 +-
 examples/concurrent_priority_queue/index.html      |   344 +
 .../concurrent_priority_queue/shortpath/Makefile   |    44 +-
 .../shortpath/Makefile.windows                     |    30 +-
 .../concurrent_priority_queue/shortpath/index.html |    82 -
 .../shortpath/msvs/shortpath.sln                   |    52 +-
 .../shortpath/msvs/shortpath.vcxproj               |   396 +-
 .../shortpath/readme.html                          |   427 +
 .../shortpath/shortpath.cpp                        |    86 +-
 examples/graph/binpack/Makefile                    |    36 +-
 examples/graph/binpack/Makefile.windows            |    30 +-
 examples/graph/binpack/binpack.cpp                 |   103 +-
 examples/graph/binpack/index.html                  |    72 -
 examples/graph/binpack/msvs/binpack.sln            |    52 +-
 examples/graph/binpack/msvs/binpack.vcxproj        |   396 +-
 examples/graph/binpack/readme.html                 |   415 +
 examples/graph/cholesky/Makefile                   |    56 +
 examples/graph/cholesky/Makefile.windows           |    50 +
 examples/graph/cholesky/cholesky.cpp               |   715 +
 examples/graph/cholesky/init.cpp                   |   138 +
 examples/graph/cholesky/msvs/cholesky.sln          |    26 +
 examples/graph/cholesky/msvs/cholesky.vcxproj      |   206 +
 examples/graph/cholesky/readme.html                |   415 +
 .../xcode/cholesky.xcodeproj/project.pbxproj       |   309 +
 examples/graph/dining_philosophers/Makefile        |    32 +-
 .../graph/dining_philosophers/Makefile.windows     |    30 +-
 .../dining_philosophers/dining_philosophers.cpp    |    34 +-
 examples/graph/dining_philosophers/index.html      |    43 -
 .../msvs/dining_philosophers.sln                   |    52 +-
 .../msvs/dining_philosophers.vcxproj               |   396 +-
 examples/graph/dining_philosophers/readme.html     |   383 +
 examples/graph/fgbzip2/Makefile                    |    57 +
 examples/graph/fgbzip2/Makefile.windows            |    54 +
 examples/graph/fgbzip2/blocksort.cpp               |  1146 ++
 examples/graph/fgbzip2/bzlib.cpp                   |  1624 ++
 examples/graph/fgbzip2/bzlib.h                     |   334 +
 examples/graph/fgbzip2/bzlib_private.h             |   561 +
 examples/graph/fgbzip2/compress.cpp                |   724 +
 examples/graph/fgbzip2/crctable.cpp                |   156 +
 examples/graph/fgbzip2/decompress.cpp              |   698 +
 examples/graph/fgbzip2/fgbzip2.cpp                 |   501 +
 examples/graph/fgbzip2/huffman.cpp                 |   257 +
 examples/graph/fgbzip2/msvs/fgbzip2.sln            |    26 +
 examples/graph/fgbzip2/msvs/fgbzip2.vcxproj        |   216 +
 examples/graph/fgbzip2/randtable.cpp               |   136 +
 examples/graph/fgbzip2/readme.html                 |   466 +
 .../xcode/fgbzip2.xcodeproj/project.pbxproj        |   265 +
 examples/graph/index.html                          |   380 +-
 examples/graph/logic_sim/D_latch.h                 |    34 +-
 examples/graph/logic_sim/Makefile                  |    32 +-
 examples/graph/logic_sim/Makefile.windows          |    30 +-
 examples/graph/logic_sim/basics.h                  |    34 +-
 examples/graph/logic_sim/four_bit_adder.h          |    35 +-
 examples/graph/logic_sim/index.html                |    67 -
 examples/graph/logic_sim/msvs/logic_sim.sln        |    52 +-
 examples/graph/logic_sim/msvs/logic_sim.vcxproj    |   396 +-
 examples/graph/logic_sim/one_bit_adder.h           |    34 +-
 examples/graph/logic_sim/readme.html               |   406 +
 examples/graph/logic_sim/test_all.cpp              |    49 +-
 examples/graph/logic_sim/two_bit_adder.h           |    34 +-
 examples/graph/matmult/Makefile                    |    56 +
 examples/graph/matmult/Makefile.windows            |    53 +
 examples/graph/matmult/matmult.cpp                 |   374 +
 examples/graph/matmult/msvs/matmult.sln            |    26 +
 examples/graph/matmult/msvs/matmult.vcxproj        |   145 +
 examples/graph/matmult/readme.html                 |   414 +
 examples/graph/som/Makefile                        |    32 +-
 examples/graph/som/Makefile.windows                |    46 +
 examples/graph/som/Makefile.windows.windows        |    46 -
 examples/graph/som/index.html                      |    51 -
 examples/graph/som/msvs/som.sln                    |    52 +-
 examples/graph/som/msvs/som.vcxproj                |   428 +-
 examples/graph/som/readme.html                     |   391 +
 examples/graph/som/som.cpp                         |    34 +-
 examples/graph/som/som.h                           |    34 +-
 examples/graph/som/som_graph.cpp                   |    36 +-
 examples/graph/stereo/Makefile                     |    72 +
 examples/graph/stereo/Makefile.windows             |    57 +
 examples/graph/stereo/imageEffects.cl              |    56 +
 examples/graph/stereo/lodepng.cpp                  |  6227 ++++++++
 examples/graph/stereo/lodepng.h                    |  1778 +++
 examples/graph/stereo/msvs/stereo.sln              |    26 +
 examples/graph/stereo/msvs/stereo.vcxproj          |   163 +
 examples/graph/stereo/readme.html                  |   445 +
 examples/graph/stereo/stereo.cpp                   |   435 +
 examples/graph/stereo/utils.h                      |   104 +
 .../stereo/xcode/stereo.xcodeproj/project.pbxproj  |   321 +
 examples/index.html                                |   733 +-
 examples/parallel_do/index.html                    |   360 +-
 examples/parallel_do/parallel_preorder/Graph.cpp   |    30 +-
 examples/parallel_do/parallel_preorder/Graph.h     |    36 +-
 examples/parallel_do/parallel_preorder/Makefile    |    32 +-
 .../parallel_do/parallel_preorder/Makefile.windows |    32 +-
 examples/parallel_do/parallel_preorder/Matrix.h    |    34 +-
 examples/parallel_do/parallel_preorder/index.html  |    99 -
 examples/parallel_do/parallel_preorder/main.cpp    |    30 +-
 .../parallel_preorder/msvs/parallel_preorder.sln   |    52 +-
 .../msvs/parallel_preorder.vcxproj                 |   408 +-
 .../parallel_preorder/parallel_preorder.cpp        |    34 +-
 examples/parallel_do/parallel_preorder/readme.html |   444 +
 examples/parallel_for/game_of_life/Makefile        |    32 +-
 .../parallel_for/game_of_life/Makefile.windows     |    30 +-
 examples/parallel_for/game_of_life/index.html      |    54 -
 .../game_of_life/msvs/Game_of_life.sln             |    76 +-
 .../game_of_life/msvs/Game_of_life.vcxproj         |   892 +-
 examples/parallel_for/game_of_life/msvs/resource.h |    20 +
 examples/parallel_for/game_of_life/readme.html     |   392 +
 .../parallel_for/game_of_life/src/AssemblyInfo.cpp |    34 +-
 examples/parallel_for/game_of_life/src/Board.h     |    34 +-
 .../parallel_for/game_of_life/src/Evolution.cpp    |    34 +-
 examples/parallel_for/game_of_life/src/Evolution.h |    34 +-
 examples/parallel_for/game_of_life/src/Form1.h     |    30 +-
 .../parallel_for/game_of_life/src/Game_of_life.cpp |    34 +-
 .../parallel_for/game_of_life/src/Update_state.cpp |    34 +-
 examples/parallel_for/index.html                   |   372 +-
 examples/parallel_for/polygon_overlay/Makefile     |    40 +-
 .../parallel_for/polygon_overlay/Makefile.windows  |    30 +-
 examples/parallel_for/polygon_overlay/index.html   |   121 -
 .../polygon_overlay/msvs/polygon_overlay.sln       |    38 +
 .../parallel_for/polygon_overlay/msvs/pover.sln    |    38 -
 .../polygon_overlay/msvs/pover.vcxproj             |   886 +-
 .../parallel_for/polygon_overlay/msvs/resource.h   |    20 +
 examples/parallel_for/polygon_overlay/polymain.cpp |    34 +-
 examples/parallel_for/polygon_overlay/polymain.h   |    34 +-
 examples/parallel_for/polygon_overlay/polyover.cpp |    34 +-
 examples/parallel_for/polygon_overlay/polyover.h   |    34 +-
 .../parallel_for/polygon_overlay/pover_global.h    |    34 +-
 .../parallel_for/polygon_overlay/pover_video.cpp   |    34 +-
 .../parallel_for/polygon_overlay/pover_video.h     |    34 +-
 examples/parallel_for/polygon_overlay/readme.html  |   476 +
 examples/parallel_for/polygon_overlay/rpolygon.h   |    34 +-
 .../polygon_overlay.xcodeproj/project.pbxproj      |   198 +-
 .../xcshareddata/xcschemes/tbbExample.ios.xcscheme |    91 +
 .../xcshareddata/xcschemes/tbbExample.xcscheme     |    18 +-
 examples/parallel_for/seismic/Makefile             |    40 +-
 examples/parallel_for/seismic/Makefile.windows     |    30 +-
 examples/parallel_for/seismic/index.html           |   112 -
 examples/parallel_for/seismic/main.cpp             |    34 +-
 .../seismic/msvs/SeismicSimulation.sln             |    38 -
 .../seismic/msvs/SeismicSimulation.vcxproj         |   892 +-
 examples/parallel_for/seismic/msvs/resource.h      |    20 +
 examples/parallel_for/seismic/msvs/seismic.sln     |    38 +
 examples/parallel_for/seismic/readme.html          |   471 +
 examples/parallel_for/seismic/seismic_video.cpp    |    34 +-
 examples/parallel_for/seismic/seismic_video.h      |    34 +-
 examples/parallel_for/seismic/universe.cpp         |    34 +-
 examples/parallel_for/seismic/universe.h           |    34 +-
 .../xcode/seismic.xcodeproj/project.pbxproj        |   271 +-
 .../xcshareddata/xcschemes/tbbExample.ios.xcscheme |   119 +
 .../xcshareddata/xcschemes/tbbExample.xcscheme     |    18 +-
 examples/parallel_for/tachyon/Makefile             |    36 +-
 examples/parallel_for/tachyon/Makefile.windows     |    30 +-
 examples/parallel_for/tachyon/android/.classpath   |     8 -
 examples/parallel_for/tachyon/android/.cproject    |   223 -
 examples/parallel_for/tachyon/android/.project     |    98 -
 .../tachyon/android/AndroidManifest.xml            |    26 -
 .../parallel_for/tachyon/android/assets/data.dat   | 14804 -------------------
 .../parallel_for/tachyon/android/jni/Android.mk    |    90 -
 .../tachyon/android/jni/Application.mk             |    23 -
 .../tachyon/android/jni/jni-engine.cpp             |   279 -
 .../tachyon/android/project.properties             |    14 -
 .../tachyon/android/res/menu/main_screen_menu.xml  |    16 -
 .../tachyon/android/res/values/strings.xml         |     4 -
 .../src/com/intel/tbb/example/tachyon/tachyon.java |   307 -
 examples/parallel_for/tachyon/index.html           |   220 -
 examples/parallel_for/tachyon/msvs/resource.h      |    20 +
 .../tachyon/msvs/tachyon.serial.vcxproj            |   776 +-
 examples/parallel_for/tachyon/msvs/tachyon.sln     |   184 +-
 .../parallel_for/tachyon/msvs/tachyon.tbb.vcxproj  |   880 +-
 .../tachyon/msvs/tachyon.tbb1d.vcxproj             |   880 +-
 examples/parallel_for/tachyon/msvs/tachyon.vcxproj |   900 +-
 .../parallel_for/tachyon/msvs/win8ui/App.xaml.cpp  |    34 +-
 .../parallel_for/tachyon/msvs/win8ui/App.xaml.h    |    34 +-
 .../tachyon/msvs/win8ui/DirectXBase.cpp            |    34 +-
 .../parallel_for/tachyon/msvs/win8ui/DirectXBase.h |    34 +-
 .../tachyon/msvs/win8ui/DirectXPage.xaml.cpp       |    34 +-
 .../tachyon/msvs/win8ui/DirectXPage.xaml.h         |    34 +-
 .../msvs/win8ui/copy_libraries_and_assets.bat      |    35 +-
 examples/parallel_for/tachyon/msvs/win8ui/pch.h    |    34 +-
 .../tachyon/msvs/win8ui/tbbTachyon.vcxproj         |   476 +-
 .../tachyon/msvs/win8ui/tbbTachyonRenderer.cpp     |    34 +-
 .../tachyon/msvs/win8ui/tbbTachyonRenderer.h       |    34 +-
 examples/parallel_for/tachyon/readme.html          |   572 +
 examples/parallel_for/tachyon/src/api.cpp          |    34 +-
 examples/parallel_for/tachyon/src/api.h            |    34 +-
 examples/parallel_for/tachyon/src/apigeom.cpp      |    34 +-
 examples/parallel_for/tachyon/src/apitrigeom.cpp   |    34 +-
 examples/parallel_for/tachyon/src/apitrigeom.h     |    34 +-
 examples/parallel_for/tachyon/src/bndbox.cpp       |    34 +-
 examples/parallel_for/tachyon/src/bndbox.h         |    30 +-
 examples/parallel_for/tachyon/src/box.cpp          |    34 +-
 examples/parallel_for/tachyon/src/box.h            |    30 +-
 examples/parallel_for/tachyon/src/camera.cpp       |    34 +-
 examples/parallel_for/tachyon/src/camera.h         |    34 +-
 examples/parallel_for/tachyon/src/coordsys.cpp     |    34 +-
 examples/parallel_for/tachyon/src/coordsys.h       |    34 +-
 examples/parallel_for/tachyon/src/cylinder.cpp     |    34 +-
 examples/parallel_for/tachyon/src/cylinder.h       |    34 +-
 examples/parallel_for/tachyon/src/extvol.cpp       |    34 +-
 examples/parallel_for/tachyon/src/extvol.h         |    30 +-
 examples/parallel_for/tachyon/src/global.cpp       |    34 +-
 examples/parallel_for/tachyon/src/global.h         |    34 +-
 examples/parallel_for/tachyon/src/grid.cpp         |    34 +-
 examples/parallel_for/tachyon/src/grid.h           |    34 +-
 examples/parallel_for/tachyon/src/imageio.cpp      |    34 +-
 examples/parallel_for/tachyon/src/imageio.h        |    30 +-
 examples/parallel_for/tachyon/src/imap.cpp         |    34 +-
 examples/parallel_for/tachyon/src/imap.h           |    34 +-
 examples/parallel_for/tachyon/src/intersect.cpp    |    34 +-
 examples/parallel_for/tachyon/src/intersect.h      |    30 +-
 examples/parallel_for/tachyon/src/jpeg.cpp         |    34 +-
 examples/parallel_for/tachyon/src/jpeg.h           |    34 +-
 examples/parallel_for/tachyon/src/light.cpp        |    34 +-
 examples/parallel_for/tachyon/src/light.h          |    30 +-
 examples/parallel_for/tachyon/src/machine.h        |    30 +-
 examples/parallel_for/tachyon/src/macros.h         |    34 +-
 examples/parallel_for/tachyon/src/main.cpp         |    92 +-
 examples/parallel_for/tachyon/src/objbound.cpp     |    34 +-
 examples/parallel_for/tachyon/src/objbound.h       |    30 +-
 examples/parallel_for/tachyon/src/parse.cpp        |   186 +-
 examples/parallel_for/tachyon/src/parse.h          |    34 +-
 examples/parallel_for/tachyon/src/plane.cpp        |    34 +-
 examples/parallel_for/tachyon/src/plane.h          |    30 +-
 examples/parallel_for/tachyon/src/ppm.cpp          |    34 +-
 examples/parallel_for/tachyon/src/ppm.h            |    34 +-
 examples/parallel_for/tachyon/src/pthread.cpp      |    34 +-
 examples/parallel_for/tachyon/src/pthread_w.h      |    34 +-
 examples/parallel_for/tachyon/src/quadric.cpp      |    34 +-
 examples/parallel_for/tachyon/src/quadric.h        |    30 +-
 examples/parallel_for/tachyon/src/render.cpp       |    34 +-
 examples/parallel_for/tachyon/src/render.h         |    34 +-
 examples/parallel_for/tachyon/src/ring.cpp         |    34 +-
 examples/parallel_for/tachyon/src/ring.h           |    30 +-
 examples/parallel_for/tachyon/src/shade.cpp        |    34 +-
 examples/parallel_for/tachyon/src/shade.h          |    34 +-
 examples/parallel_for/tachyon/src/sphere.cpp       |    34 +-
 examples/parallel_for/tachyon/src/sphere.h         |    34 +-
 .../parallel_for/tachyon/src/tachyon_video.cpp     |    34 +-
 examples/parallel_for/tachyon/src/tachyon_video.h  |    34 +-
 examples/parallel_for/tachyon/src/texture.cpp      |    34 +-
 examples/parallel_for/tachyon/src/texture.h        |    30 +-
 examples/parallel_for/tachyon/src/tgafile.cpp      |    34 +-
 examples/parallel_for/tachyon/src/tgafile.h        |    34 +-
 examples/parallel_for/tachyon/src/trace.h          |    34 +-
 examples/parallel_for/tachyon/src/trace.serial.cpp |    34 +-
 examples/parallel_for/tachyon/src/trace.simple.cpp |    39 +-
 examples/parallel_for/tachyon/src/trace.tbb.cpp    |    34 +-
 examples/parallel_for/tachyon/src/trace.tbb1d.cpp  |    34 +-
 examples/parallel_for/tachyon/src/trace_rest.cpp   |    34 +-
 examples/parallel_for/tachyon/src/triangle.cpp     |    34 +-
 examples/parallel_for/tachyon/src/triangle.h       |    34 +-
 examples/parallel_for/tachyon/src/types.h          |    34 +-
 examples/parallel_for/tachyon/src/ui.cpp           |    34 +-
 examples/parallel_for/tachyon/src/ui.h             |    30 +-
 examples/parallel_for/tachyon/src/util.cpp         |    34 +-
 examples/parallel_for/tachyon/src/util.h           |    30 +-
 examples/parallel_for/tachyon/src/vector.cpp       |    34 +-
 examples/parallel_for/tachyon/src/vector.h         |    30 +-
 examples/parallel_for/tachyon/src/vol.cpp          |    97 +-
 examples/parallel_for/tachyon/src/vol.h            |    34 +-
 .../xcode/tachyon.xcodeproj/project.pbxproj        |   309 +-
 .../xcshareddata/xcschemes/tachyon.serial.xcscheme |    18 +-
 .../xcschemes/tachyon.tbb.ios.xcscheme             |    97 +
 .../xcshareddata/xcschemes/tachyon.tbb.xcscheme    |    18 +-
 .../xcshareddata/xcschemes/tachyon.tbb1d.xcscheme  |    18 +-
 examples/parallel_reduce/convex_hull/Makefile      |    32 +-
 .../parallel_reduce/convex_hull/Makefile.windows   |    34 +-
 examples/parallel_reduce/convex_hull/convex_hull.h |    34 +-
 .../convex_hull/convex_hull_bench.cpp              |    34 +-
 .../convex_hull/convex_hull_sample.cpp             |    34 +-
 examples/parallel_reduce/convex_hull/index.html    |    52 -
 .../convex_hull/msvs/convex_hull.sln               |    72 +-
 .../convex_hull/msvs/convex_hull_benchmark.vcxproj |   406 +-
 .../convex_hull/msvs/convex_hull_sample.vcxproj    |   400 +-
 examples/parallel_reduce/convex_hull/readme.html   |   400 +
 examples/parallel_reduce/index.html                |   364 +-
 examples/parallel_reduce/primes/Makefile           |    32 +-
 examples/parallel_reduce/primes/Makefile.windows   |    32 +-
 examples/parallel_reduce/primes/index.html         |    63 -
 examples/parallel_reduce/primes/main.cpp           |    38 +-
 examples/parallel_reduce/primes/msvs/primes.sln    |    52 +-
 .../parallel_reduce/primes/msvs/primes.vcxproj     |   404 +-
 examples/parallel_reduce/primes/primes.cpp         |    38 +-
 examples/parallel_reduce/primes/primes.h           |    34 +-
 examples/parallel_reduce/primes/readme.html        |   407 +
 examples/pipeline/index.html                       |   360 +-
 examples/pipeline/square/Makefile                  |    32 +-
 examples/pipeline/square/Makefile.windows          |    32 +-
 examples/pipeline/square/gen_input.cpp             |    34 +-
 examples/pipeline/square/index.html                |    71 -
 examples/pipeline/square/msvs/square.sln           |    52 +-
 examples/pipeline/square/msvs/square.vcxproj       |   398 +-
 examples/pipeline/square/readme.html               |   417 +
 examples/pipeline/square/square.cpp                |    42 +-
 examples/task/index.html                           |   360 +-
 examples/task/tree_sum/Makefile                    |    32 +-
 examples/task/tree_sum/Makefile.windows            |    30 +-
 .../task/tree_sum/OptimizedParallelSumTree.cpp     |    32 +-
 examples/task/tree_sum/SerialSumTree.cpp           |    34 +-
 examples/task/tree_sum/SimpleParallelSumTree.cpp   |    36 +-
 examples/task/tree_sum/TreeMaker.h                 |    36 +-
 examples/task/tree_sum/common.h                    |    34 +-
 examples/task/tree_sum/index.html                  |    76 -
 examples/task/tree_sum/main.cpp                    |    34 +-
 examples/task/tree_sum/msvs/tree_sum.sln           |    52 +-
 examples/task/tree_sum/msvs/tree_sum.vcxproj       |   410 +-
 examples/task/tree_sum/readme.html                 |   423 +
 examples/task_arena/fractal/Makefile               |    87 +
 examples/task_arena/fractal/Makefile.windows       |    66 +
 examples/task_arena/fractal/fractal.cpp            |   305 +
 examples/task_arena/fractal/fractal.h              |   163 +
 examples/task_arena/fractal/fractal_video.h        |    90 +
 examples/task_arena/fractal/main.cpp               |    92 +
 examples/task_arena/fractal/msvs/fractal.sln       |    38 +
 examples/task_arena/fractal/msvs/fractal.vcxproj   |   450 +
 .../fractal/msvs/gui.ico                           |   Bin
 .../fractal/msvs/gui.rc                            |     0
 examples/task_arena/fractal/msvs/resource.h        |    28 +
 .../fractal/msvs/small.ico                         |   Bin
 examples/task_arena/fractal/readme.html            |   447 +
 .../xcode/fractal.xcodeproj/project.pbxproj        |   529 +
 .../xcshareddata/xcschemes/tbbExample.ios.xcscheme |    91 +
 .../xcshareddata/xcschemes/tbbExample.xcscheme     |     0
 examples/task_arena/index.html                     |   343 +
 examples/task_group/index.html                     |   360 +-
 examples/task_group/sudoku/Makefile                |    44 +-
 examples/task_group/sudoku/Makefile.windows        |    30 +-
 examples/task_group/sudoku/index.html              |    76 -
 examples/task_group/sudoku/msvs/sudoku.sln         |    52 +-
 examples/task_group/sudoku/msvs/sudoku.vcxproj     |   396 +-
 examples/task_group/sudoku/readme.html             |   417 +
 examples/task_group/sudoku/sudoku.cpp              |    46 +-
 examples/task_priority/fractal/Makefile            |    85 -
 examples/task_priority/fractal/Makefile.windows    |    66 -
 examples/task_priority/fractal/fractal.cpp         |   273 -
 examples/task_priority/fractal/fractal.h           |   114 -
 examples/task_priority/fractal/fractal_video.h     |    72 -
 examples/task_priority/fractal/index.html          |    66 -
 examples/task_priority/fractal/main.cpp            |    92 -
 examples/task_priority/fractal/msvs/fractal.sln    |    38 -
 .../task_priority/fractal/msvs/fractal.vcxproj     |   442 -
 examples/task_priority/fractal/msvs/resource.h     |     8 -
 .../xcode/fractal.xcodeproj/project.pbxproj        |   349 -
 examples/task_priority/index.html                  |    23 -
 examples/test_all/fibonacci/Fibonacci.cpp          |   106 +-
 examples/test_all/fibonacci/Makefile               |    32 +-
 examples/test_all/fibonacci/Makefile.windows       |    30 +-
 examples/test_all/fibonacci/index.html             |    51 -
 examples/test_all/fibonacci/msvs/fibonacci.sln     |    52 +-
 examples/test_all/fibonacci/msvs/fibonacci.vcxproj |   396 +-
 examples/test_all/fibonacci/readme.html            |   402 +
 examples/test_all/index.html                       |   360 +-
 include/index.html                                 |     4 +-
 include/serial/tbb/parallel_for.h                  |    67 +-
 include/serial/tbb/tbb_annotate.h                  |    34 +-
 include/tbb/aggregator.h                           |    54 +-
 include/tbb/aligned_space.h                        |    36 +-
 include/tbb/atomic.h                               |    44 +-
 include/tbb/blocked_range.h                        |    34 +-
 include/tbb/blocked_range2d.h                      |    34 +-
 include/tbb/blocked_range3d.h                      |    34 +-
 include/tbb/cache_aligned_allocator.h              |    38 +-
 include/tbb/combinable.h                           |    65 +-
 include/tbb/compat/condition_variable              |    34 +-
 include/tbb/compat/ppl.h                           |    34 +-
 include/tbb/compat/thread                          |    54 +-
 include/tbb/compat/tuple                           |    34 +-
 include/tbb/concurrent_hash_map.h                  |    70 +-
 include/tbb/concurrent_lru_cache.h                 |    38 +-
 include/tbb/concurrent_priority_queue.h            |    53 +-
 include/tbb/concurrent_queue.h                     |    80 +-
 include/tbb/concurrent_unordered_map.h             |   113 +-
 include/tbb/concurrent_unordered_set.h             |   115 +-
 include/tbb/concurrent_vector.h                    |    57 +-
 include/tbb/critical_section.h                     |    40 +-
 include/tbb/enumerable_thread_specific.h           |   351 +-
 include/tbb/flow_graph.h                           |  2275 +--
 include/tbb/flow_graph_abstractions.h              |    57 +
 include/tbb/flow_graph_opencl_node.h               |  1537 ++
 include/tbb/gfx_factory.h                          |   359 +
 include/tbb/global_control.h                       |    37 +-
 include/tbb/index.html                             |     2 +-
 include/tbb/internal/_aggregator_impl.h            |    62 +-
 include/tbb/internal/_concurrent_queue_impl.h      |    58 +-
 include/tbb/internal/_concurrent_unordered_impl.h  |   262 +-
 include/tbb/internal/_flow_graph_async_msg_impl.h  |   221 +
 include/tbb/internal/_flow_graph_impl.h            |   408 +-
 include/tbb/internal/_flow_graph_indexer_impl.h    |   129 +-
 .../tbb/internal/_flow_graph_item_buffer_impl.h    |    85 +-
 include/tbb/internal/_flow_graph_join_impl.h       |  1099 +-
 include/tbb/internal/_flow_graph_node_impl.h       |   538 +-
 include/tbb/internal/_flow_graph_streaming_node.h  |   745 +
 .../tbb/internal/_flow_graph_tagged_buffer_impl.h  |   170 +-
 include/tbb/internal/_flow_graph_trace_impl.h      |   191 +-
 include/tbb/internal/_flow_graph_types_impl.h      |   273 +-
 include/tbb/internal/_mutex_padding.h              |    34 +-
 include/tbb/internal/_range_iterator.h             |    34 +-
 include/tbb/internal/_tbb_hash_compare_impl.h      |   109 +
 include/tbb/internal/_tbb_strings.h                |    30 +-
 include/tbb/internal/_tbb_windef.h                 |    32 +-
 include/tbb/internal/_template_helpers.h           |    60 +-
 include/tbb/internal/_x86_eliding_mutex_impl.h     |    34 +-
 include/tbb/internal/_x86_rtm_rw_mutex_impl.h      |    36 +-
 include/tbb/machine/gcc_armv7.h                    |    42 +-
 include/tbb/machine/gcc_generic.h                  |   103 +-
 include/tbb/machine/gcc_ia32_common.h              |    44 +-
 include/tbb/machine/gcc_itsx.h                     |    40 +-
 include/tbb/machine/ibm_aix51.h                    |    34 +-
 include/tbb/machine/icc_generic.h                  |    40 +-
 include/tbb/machine/linux_common.h                 |    34 +-
 include/tbb/machine/linux_ia32.h                   |    40 +-
 include/tbb/machine/linux_ia64.h                   |    58 +-
 include/tbb/machine/linux_intel64.h                |    34 +-
 include/tbb/machine/mac_ppc.h                      |    34 +-
 include/tbb/machine/macos_common.h                 |    44 +-
 include/tbb/machine/mic_common.h                   |    38 +-
 include/tbb/machine/msvc_armv7.h                   |    34 +-
 include/tbb/machine/msvc_ia32_common.h             |   232 +-
 include/tbb/machine/sunos_sparc.h                  |    36 +-
 include/tbb/machine/windows_api.h                  |    40 +-
 include/tbb/machine/windows_ia32.h                 |    85 +-
 include/tbb/machine/windows_intel64.h              |    77 +-
 include/tbb/machine/xbox360_ppc.h                  |   119 -
 include/tbb/memory_pool.h                          |    44 +-
 include/tbb/mutex.h                                |    49 +-
 include/tbb/null_mutex.h                           |    54 +-
 include/tbb/null_rw_mutex.h                        |    52 +-
 include/tbb/parallel_do.h                          |   268 +-
 include/tbb/parallel_for.h                         |    82 +-
 include/tbb/parallel_for_each.h                    |   100 +-
 include/tbb/parallel_invoke.h                      |    41 +-
 include/tbb/parallel_reduce.h                      |    86 +-
 include/tbb/parallel_scan.h                        |    90 +-
 include/tbb/parallel_sort.h                        |   127 +-
 include/tbb/parallel_while.h                       |    66 +-
 include/tbb/partitioner.h                          |   487 +-
 include/tbb/pipeline.h                             |   124 +-
 include/tbb/queuing_mutex.h                        |    34 +-
 include/tbb/queuing_rw_mutex.h                     |    34 +-
 include/tbb/reader_writer_lock.h                   |    34 +-
 include/tbb/recursive_mutex.h                      |    48 +-
 include/tbb/runtime_loader.h                       |    34 +-
 include/tbb/scalable_allocator.h                   |    44 +-
 include/tbb/spin_mutex.h                           |    36 +-
 include/tbb/spin_rw_mutex.h                        |    46 +-
 include/tbb/task.h                                 |    64 +-
 include/tbb/task_arena.h                           |   148 +-
 include/tbb/task_group.h                           |    41 +-
 include/tbb/task_scheduler_init.h                  |    92 +-
 include/tbb/task_scheduler_observer.h              |    63 +-
 include/tbb/tbb.h                                  |    39 +-
 include/tbb/tbb_allocator.h                        |    50 +-
 include/tbb/tbb_config.h                           |   498 +-
 include/tbb/tbb_exception.h                        |    80 +-
 include/tbb/tbb_machine.h                          |    77 +-
 include/tbb/tbb_profiling.h                        |    79 +-
 include/tbb/tbb_stddef.h                           |    70 +-
 include/tbb/tbb_thread.h                           |   104 +-
 include/tbb/tbbmalloc_proxy.h                      |    42 +-
 include/tbb/tick_count.h                           |    38 +-
 index.html                                         |    46 +
 index.src.html                                     |    41 -
 jni/Android.mk                                     |    65 +-
 jni/Application.mk                                 |    85 +-
 python/Makefile                                    |    38 +
 python/index.html                                  |    75 +
 python/setup.py                                    |   117 +
 python/tbb.i                                       |   146 +
 python/tbb.src.py                                  |   840 ++
 src/Makefile                                       |    33 +-
 src/index.html                                     |    48 +-
 src/old/concurrent_queue_v2.cpp                    |    44 +-
 src/old/concurrent_queue_v2.h                      |    40 +-
 src/old/concurrent_vector_v2.cpp                   |    30 +-
 src/old/concurrent_vector_v2.h                     |    34 +-
 src/old/spin_rw_mutex_v2.cpp                       |    34 +-
 src/old/spin_rw_mutex_v2.h                         |    34 +-
 src/old/task_v2.cpp                                |    34 +-
 src/old/test_concurrent_queue_v2.cpp               |    30 +-
 src/old/test_concurrent_vector_v2.cpp              |    34 +-
 src/old/test_mutex_v2.cpp                          |    34 +-
 src/old/test_task_scheduler_observer_v3.cpp        |    40 +-
 src/perf/coarse_grained_raii_lru_cache.h           |    32 +-
 src/perf/cpq_pdes.cpp                              |    45 +-
 src/perf/fibonacci_impl_tbb.cpp                    |    30 +-
 src/perf/perf.cpp                                  |    34 +-
 src/perf/perf.h                                    |    34 +-
 src/perf/perf_sched.cpp                            |    34 +-
 src/perf/run_statistics.sh                         |    34 +-
 src/perf/statistics.cpp                            |    30 +-
 src/perf/statistics.h                              |    34 +-
 src/perf/statistics_xml.h                          |    34 +-
 src/perf/time_cpq_throughput_test.cpp              |    45 +-
 src/perf/time_fibonacci_cutoff.cpp                 |    34 +-
 src/perf/time_framework.h                          |    36 +-
 src/perf/time_hash_map.cpp                         |    38 +-
 src/perf/time_hash_map_fill.cpp                    |    52 +-
 src/perf/time_hash_map_fill.html                   |    10 +-
 src/perf/time_locked_work.cpp                      |    38 +-
 src/perf/time_lru_cache_throughput.cpp             |    39 +-
 src/perf/time_parallel_for_each.cpp                |    70 +
 src/perf/time_sandbox.h                            |    30 +-
 src/perf/time_split_node.cpp                       |   120 +
 src/perf/time_vector.cpp                           |    56 +-
 src/rml/client/index.html                          |    20 +-
 src/rml/client/library_assert.h                    |    34 +-
 src/rml/client/omp_dynamic_link.cpp                |    34 +-
 src/rml/client/omp_dynamic_link.h                  |    34 +-
 src/rml/client/rml_factory.h                       |    34 +-
 src/rml/client/rml_omp.cpp                         |    34 +-
 src/rml/client/rml_tbb.cpp                         |    34 +-
 src/rml/include/index.html                         |     2 +-
 src/rml/include/rml_base.h                         |    34 +-
 src/rml/include/rml_omp.h                          |    34 +-
 src/rml/include/rml_tbb.h                          |    34 +-
 src/rml/index.html                                 |     2 +-
 src/rml/perfor/omp_nested.cpp                      |    34 +-
 src/rml/perfor/omp_simple.cpp                      |    34 +-
 src/rml/perfor/tbb_multi_omp.cpp                   |    34 +-
 src/rml/perfor/tbb_simple.cpp                      |    34 +-
 src/rml/perfor/thread_level.h                      |    34 +-
 src/rml/server/index.html                          |     2 +-
 src/rml/server/irml.rc                             |    32 +-
 src/rml/server/job_automaton.h                     |    42 +-
 src/rml/server/lin-rml-export.def                  |    34 +-
 src/rml/server/rml_server.cpp                      |   184 +-
 src/rml/server/thread_monitor.h                    |    34 +-
 src/rml/server/wait_counter.h                      |    30 +-
 src/rml/server/win32-rml-export.def                |    30 +-
 src/rml/server/win64-rml-export.def                |    30 +-
 src/rml/test/rml_omp_stub.cpp                      |    55 +-
 src/rml/test/test_job_automaton.cpp                |    40 +-
 src/rml/test/test_rml_mixed.cpp                    |    69 +-
 src/rml/test/test_rml_omp.cpp                      |    38 +-
 src/rml/test/test_rml_omp_c_linkage.c              |    34 +-
 src/rml/test/test_rml_tbb.cpp                      |    42 +-
 src/rml/test/test_server.h                         |    64 +-
 src/rml/test/test_thread_monitor.cpp               |    30 +-
 src/tbb/arena.cpp                                  |   595 +-
 src/tbb/arena.h                                    |   317 +-
 src/tbb/cache_aligned_allocator.cpp                |    59 +-
 src/tbb/cilk-tbb-interop.h                         |    44 +-
 src/tbb/concurrent_hash_map.cpp                    |    36 +-
 src/tbb/concurrent_monitor.cpp                     |    38 +-
 src/tbb/concurrent_monitor.h                       |    42 +-
 src/tbb/concurrent_queue.cpp                       |    82 +-
 src/tbb/concurrent_vector.cpp                      |    59 +-
 src/tbb/condition_variable.cpp                     |    34 +-
 src/tbb/critical_section.cpp                       |    34 +-
 src/tbb/custom_scheduler.h                         |   193 +-
 src/tbb/dynamic_link.cpp                           |   157 +-
 src/tbb/dynamic_link.h                             |    38 +-
 src/tbb/governor.cpp                               |   188 +-
 src/tbb/governor.h                                 |    89 +-
 src/tbb/ia32-masm/atomic_support.asm               |    30 +-
 src/tbb/ia32-masm/itsx.asm                         |    30 +-
 src/tbb/ia32-masm/lock_byte.asm                    |    30 +-
 src/tbb/ia64-gas/atomic_support.s                  |    30 +-
 src/tbb/ia64-gas/ia64_misc.s                       |    30 +-
 src/tbb/ia64-gas/lock_byte.s                       |    30 +-
 src/tbb/ia64-gas/log2.s                            |    30 +-
 src/tbb/ia64-gas/pause.s                           |    30 +-
 src/tbb/ibm_aix51/atomic_support.c                 |    34 +-
 src/tbb/index.html                                 |     2 +-
 src/tbb/intel64-masm/atomic_support.asm            |    30 +-
 src/tbb/intel64-masm/intel64_misc.asm              |    30 +-
 src/tbb/intel64-masm/itsx.asm                      |    30 +-
 src/tbb/intrusive_list.h                           |    52 +-
 src/tbb/itt_notify.cpp                             |    44 +-
 src/tbb/itt_notify.h                               |    42 +-
 src/tbb/lin32-tbb-export.def                       |    34 +-
 src/tbb/lin32-tbb-export.lst                       |    44 +-
 src/tbb/lin64-tbb-export.def                       |    34 +-
 src/tbb/lin64-tbb-export.lst                       |    44 +-
 src/tbb/lin64ipf-tbb-export.def                    |    34 +-
 src/tbb/lin64ipf-tbb-export.lst                    |    42 +-
 src/tbb/mac32-tbb-export.def                       |    34 +-
 src/tbb/mac32-tbb-export.lst                       |    44 +-
 src/tbb/mac64-tbb-export.def                       |    34 +-
 src/tbb/mac64-tbb-export.lst                       |    44 +-
 src/tbb/mailbox.h                                  |    99 +-
 src/tbb/market.cpp                                 |   427 +-
 src/tbb/market.h                                   |   136 +-
 src/tbb/mutex.cpp                                  |    75 +-
 src/tbb/observer_proxy.cpp                         |    58 +-
 src/tbb/observer_proxy.h                           |    40 +-
 src/tbb/pipeline.cpp                               |    38 +-
 src/tbb/private_server.cpp                         |    92 +-
 src/tbb/queuing_mutex.cpp                          |    35 +-
 src/tbb/queuing_rw_mutex.cpp                       |    53 +-
 src/tbb/reader_writer_lock.cpp                     |    36 +-
 src/tbb/recursive_mutex.cpp                        |    60 +-
 src/tbb/scheduler.cpp                              |   900 +-
 src/tbb/scheduler.h                                |   251 +-
 src/tbb/scheduler_common.h                         |    99 +-
 src/tbb/scheduler_utility.h                        |    42 +-
 src/tbb/semaphore.cpp                              |    36 +-
 src/tbb/semaphore.h                                |    56 +-
 src/tbb/spin_mutex.cpp                             |    34 +-
 src/tbb/spin_rw_mutex.cpp                          |    36 +-
 src/tbb/task.cpp                                   |    82 +-
 src/tbb/task_group_context.cpp                     |    82 +-
 src/tbb/task_stream.h                              |    36 +-
 src/tbb/tbb_assert_impl.h                          |    34 +-
 src/tbb/tbb_main.cpp                               |   117 +-
 src/tbb/tbb_main.h                                 |    46 +-
 src/tbb/tbb_misc.cpp                               |   113 +-
 src/tbb/tbb_misc.h                                 |    46 +-
 src/tbb/tbb_misc_ex.cpp                            |   161 +-
 src/tbb/tbb_resource.rc                            |    32 +-
 src/tbb/tbb_statistics.cpp                         |    42 +-
 src/tbb/tbb_statistics.h                           |    64 +-
 src/tbb/tbb_thread.cpp                             |    36 +-
 src/tbb/tbb_version.h                              |    34 +-
 src/tbb/tls.h                                      |    34 +-
 src/tbb/tools_api/disable_warnings.h               |    34 +-
 src/tbb/tools_api/internal/ittnotify.h             |   210 -
 src/tbb/tools_api/ittnotify.h                      |   167 +-
 src/tbb/tools_api/ittnotify_config.h               |    90 +-
 src/tbb/tools_api/ittnotify_static.c               |   428 +-
 src/tbb/tools_api/ittnotify_static.h               |    36 +-
 src/tbb/tools_api/ittnotify_types.h                |    30 +-
 src/tbb/tools_api/legacy/ittnotify.h               |    59 +-
 src/tbb/tools_api/prototype/ittnotify.h            |   213 -
 src/tbb/win32-tbb-export.def                       |    30 +-
 src/tbb/win32-tbb-export.lst                       |    40 +-
 src/tbb/win64-gcc-tbb-export.def                   |    35 +-
 src/tbb/win64-gcc-tbb-export.lst                   |    42 +-
 src/tbb/win64-tbb-export.def                       |    30 +-
 src/tbb/win64-tbb-export.lst                       |    41 +-
 src/tbb/winrt-tbb-export.lst                       |    37 +-
 src/tbb/x86_rtm_rw_mutex.cpp                       |    51 +-
 src/tbb/xbox360-tbb-export.def                     |   226 -
 src/tbbmalloc/Customize.h                          |    40 +-
 src/tbbmalloc/MapMemory.h                          |    40 +-
 src/tbbmalloc/Statistics.h                         |    34 +-
 src/tbbmalloc/TypeDefinitions.h                    |    34 +-
 src/tbbmalloc/backend.cpp                          |   225 +-
 src/tbbmalloc/backref.cpp                          |    81 +-
 src/tbbmalloc/frontend.cpp                         |   635 +-
 src/tbbmalloc/index.html                           |     2 +-
 src/tbbmalloc/large_objects.cpp                    |   183 +-
 src/tbbmalloc/lin32-proxy-export.def               |    35 +-
 src/tbbmalloc/lin32-tbbmalloc-export.def           |    31 +-
 src/tbbmalloc/lin64-proxy-export.def               |    35 +-
 src/tbbmalloc/lin64-tbbmalloc-export.def           |    31 +-
 src/tbbmalloc/lin64ipf-proxy-export.def            |    35 +-
 src/tbbmalloc/lin64ipf-tbbmalloc-export.def        |    31 +-
 src/tbbmalloc/mac32-tbbmalloc-export.def           |    35 +-
 src/tbbmalloc/mac64-tbbmalloc-export.def           |    35 +-
 src/tbbmalloc/proxy.cpp                            |   267 +-
 src/tbbmalloc/proxy.h                              |    43 +-
 src/tbbmalloc/proxy_overload_osx.h                 |    67 +-
 src/tbbmalloc/shared_utils.h                       |    34 +-
 src/tbbmalloc/tbb_function_replacement.cpp         |    94 +-
 src/tbbmalloc/tbb_function_replacement.h           |    36 +-
 src/tbbmalloc/tbbmalloc.cpp                        |    45 +-
 src/tbbmalloc/tbbmalloc.rc                         |    32 +-
 src/tbbmalloc/tbbmalloc_internal.h                 |   367 +-
 src/tbbmalloc/tbbmalloc_internal_api.h             |    35 +-
 src/tbbmalloc/win32-gcc-tbbmalloc-export.def       |    35 +-
 src/tbbmalloc/win32-tbbmalloc-export.def           |    31 +-
 src/tbbmalloc/win64-gcc-tbbmalloc-export.def       |    35 +-
 src/tbbmalloc/win64-tbbmalloc-export.def           |    31 +-
 src/tbbmalloc/xbox360-tbbmalloc-export.def         |    35 -
 src/tbbproxy/tbbproxy-windows.asm                  |    30 +-
 src/tbbproxy/tbbproxy.cpp                          |    45 +-
 src/test/harness.h                                 |   144 +-
 src/test/harness_allocator.h                       |    60 +-
 src/test/harness_allocator_overload.h              |    39 +
 src/test/harness_assert.h                          |    38 +-
 src/test/harness_bad_expr.h                        |    40 +-
 src/test/harness_barrier.h                         |    69 +-
 src/test/harness_checktype.h                       |    38 +-
 src/test/harness_concurrency.h                     |    36 +-
 src/test/harness_concurrency_checker.h             |    80 -
 src/test/harness_concurrency_tracker.h             |   132 +-
 src/test/harness_cpu.h                             |    48 +-
 src/test/harness_defs.h                            |   102 +-
 src/test/harness_dynamic_libs.h                    |    36 +-
 src/test/harness_eh.h                              |    50 +-
 src/test/harness_fp.h                              |    34 +-
 src/test/harness_graph.h                           |   189 +-
 src/test/harness_inject_scheduler.h                |    36 +-
 src/test/harness_iterator.h                        |   195 +-
 src/test/harness_m128.h                            |    36 +-
 src/test/harness_memory.h                          |    83 +-
 src/test/harness_mic.h                             |    34 +-
 src/test/harness_preload.h                         |    39 +
 src/test/harness_report.h                          |    44 +-
 src/test/harness_runtime_loader.h                  |    34 +-
 src/test/harness_task.h                            |    42 +-
 src/test/harness_tbb_independence.h                |    45 +-
 src/test/harness_test_cases_framework.h            |    36 +-
 src/test/harness_tls.h                             |    79 +
 src/test/harness_tsx.h                             |    42 +-
 src/test/test_ScalableAllocator.cpp                |    72 +-
 src/test/test_ScalableAllocator_STL.cpp            |    34 +-
 src/test/test_aggregator.cpp                       |    42 +-
 src/test/test_aligned_space.cpp                    |    59 +-
 src/test/test_allocator.h                          |    82 +-
 src/test/test_allocator_STL.h                      |    40 +-
 src/test/test_assembly.cpp                         |    60 +-
 src/test/test_async_msg.cpp                        |   652 +
 src/test/test_async_node.cpp                       |   625 +-
 src/test/test_atomic.cpp                           |    78 +-
 src/test/test_blocked_range.cpp                    |    34 +-
 src/test/test_blocked_range2d.cpp                  |    38 +-
 src/test/test_blocked_range3d.cpp                  |    40 +-
 src/test/test_broadcast_node.cpp                   |    78 +-
 src/test/test_buffer_node.cpp                      |    59 +-
 src/test/test_cache_aligned_allocator.cpp          |    34 +-
 src/test/test_cache_aligned_allocator_STL.cpp      |    34 +-
 src/test/test_cilk_common.h                        |    36 +-
 src/test/test_cilk_dynamic_load.cpp                |    38 +-
 src/test/test_cilk_interop.cpp                     |    36 +-
 src/test/test_combinable.cpp                       |   401 +-
 src/test/test_composite_node.cpp                   |   267 +-
 src/test/test_concurrent_hash_map.cpp              |    40 +-
 src/test/test_concurrent_lru_cache.cpp             |    34 +-
 src/test/test_concurrent_monitor.cpp               |    36 +-
 src/test/test_concurrent_priority_queue.cpp        |    69 +-
 src/test/test_concurrent_queue.cpp                 |   198 +-
 src/test/test_concurrent_queue_whitebox.cpp        |    30 +-
 src/test/test_concurrent_unordered_common.h        |   111 +-
 src/test/test_concurrent_unordered_map.cpp         |    58 +-
 src/test/test_concurrent_unordered_set.cpp         |    48 +-
 src/test/test_concurrent_vector.cpp                |    75 +-
 src/test/test_condition_variable.h                 |    34 +-
 src/test/test_container_move_support.h             |    45 +-
 src/test/test_continue_node.cpp                    |    88 +-
 src/test/test_critical_section.cpp                 |    56 +-
 src/test/test_dynamic_link.cpp                     |    32 +-
 src/test/test_eh_algorithms.cpp                    |    70 +-
 src/test/test_eh_flow_graph.cpp                    |   111 +-
 src/test/test_eh_tasks.cpp                         |   130 +-
 src/test/test_enumerable_thread_specific.cpp       |   131 +-
 src/test/test_examples_common_utility.cpp          |    40 +-
 src/test/test_fast_random.cpp                      |    42 +-
 src/test/test_flow_graph.cpp                       |    52 +-
 src/test/test_flow_graph_whitebox.cpp              |   100 +-
 src/test/test_fp.cpp                               |    42 +-
 src/test/test_function_node.cpp                    |   118 +-
 src/test/test_gfx_factory.cpp                      |   309 +
 src/test/test_global_control.cpp                   |   651 +-
 src/test/test_global_control_whitebox.cpp          |    34 +-
 src/test/test_halt.cpp                             |    40 +-
 src/test/test_handle_perror.cpp                    |    36 +-
 src/test/test_hw_concurrency.cpp                   |    34 +-
 src/test/test_indexer_node.cpp                     |   112 +-
 src/test/test_initializer_list.h                   |    36 +-
 src/test/test_inits_loop.cpp                       |    34 +-
 src/test/test_intrusive_list.cpp                   |    38 +-
 src/test/test_ittnotify.cpp                        |    34 +-
 src/test/test_join_node.cpp                        |   887 +-
 src/test/test_lambda.cpp                           |    36 +-
 src/test/test_limiter_node.cpp                     |   117 +-
 src/test/test_malloc_atexit.cpp                    |    50 +-
 src/test/test_malloc_compliance.cpp                |   223 +-
 src/test/test_malloc_init_shutdown.cpp             |    34 +-
 src/test/test_malloc_lib_unload.cpp                |    40 +-
 src/test/test_malloc_overload.cpp                  |   155 +-
 src/test/test_malloc_pools.cpp                     |   529 +-
 src/test/test_malloc_pure_c.c                      |    34 +-
 src/test/test_malloc_regression.cpp                |    34 +-
 src/test/test_malloc_used_by_lib.cpp               |    34 +-
 src/test/test_malloc_whitebox.cpp                  |   201 +-
 src/test/test_model_plugin.cpp                     |    68 +-
 src/test/test_multifunction_node.cpp               |   124 +-
 src/test/test_mutex.cpp                            |    34 +-
 src/test/test_mutex_native_threads.cpp             |    43 +-
 src/test/test_opencl_kernel_32.spir                |   Bin 0 -> 1440 bytes
 src/test/test_opencl_kernel_64.spir                |   Bin 0 -> 1468 bytes
 src/test/test_opencl_node.cl                       |   189 +
 src/test/test_opencl_node.cpp                      |   851 ++
 src/test/test_opencl_precompiled_kernel_gpu_32.ir  |   Bin 0 -> 4110 bytes
 src/test/test_opencl_precompiled_kernel_gpu_64.ir  |   Bin 0 -> 4186 bytes
 src/test/test_openmp.cpp                           |   127 +-
 src/test/test_overwrite_node.cpp                   |    38 +-
 src/test/test_parallel_do.cpp                      |   225 +-
 src/test/test_parallel_for.cpp                     |   157 +-
 src/test/test_parallel_for_each.cpp                |    46 +-
 src/test/test_parallel_for_vectorization.cpp       |    68 +-
 src/test/test_parallel_invoke.cpp                  |    42 +-
 src/test/test_parallel_pipeline.cpp                |    88 +-
 src/test/test_parallel_reduce.cpp                  |   137 +-
 src/test/test_parallel_scan.cpp                    |   114 +-
 src/test/test_parallel_sort.cpp                    |   189 +-
 src/test/test_parallel_while.cpp                   |    54 +-
 src/test/test_partitioner.h                        |    37 +-
 src/test/test_partitioner_whitebox.cpp             |   125 +-
 src/test/test_partitioner_whitebox.h               |    54 +-
 src/test/test_pipeline.cpp                         |    66 +-
 src/test/test_pipeline_with_tbf.cpp                |    94 +-
 src/test/test_priority_queue_node.cpp              |    58 +-
 src/test/test_queue_node.cpp                       |    76 +-
 src/test/test_range_based_for.h                    |    30 +-
 src/test/test_reader_writer_lock.cpp               |    34 +-
 src/test/test_runtime_loader.cpp                   |    38 +-
 src/test/test_rwm_upgrade_downgrade.cpp            |    32 +-
 src/test/test_semaphore.cpp                        |    36 +-
 src/test/test_sequencer_node.cpp                   |    64 +-
 src/test/test_source_node.cpp                      |   178 +-
 src/test/test_split_node.cpp                       |    34 +-
 src/test/test_static_assert.cpp                    |    34 +-
 src/test/test_std_thread.cpp                       |    34 +-
 src/test/test_streaming_node.cpp                   |   895 ++
 src/test/test_tagged_msg.cpp                       |    59 +-
 src/test/test_task.cpp                             |    70 +-
 src/test/test_task_arena.cpp                       |   815 +-
 src/test/test_task_assertions.cpp                  |    38 +-
 src/test/test_task_auto_init.cpp                   |    36 +-
 src/test/test_task_enqueue.cpp                     |    87 +-
 src/test/test_task_group.cpp                       |    51 +-
 src/test/test_task_leaks.cpp                       |    48 +-
 src/test/test_task_priority.cpp                    |   185 +-
 src/test/test_task_scheduler_init.cpp              |   291 +-
 src/test/test_task_scheduler_observer.cpp          |    47 +-
 src/test/test_task_steal_limit.cpp                 |    34 +-
 src/test/test_tbb_condition_variable.cpp           |    34 +-
 src/test/test_tbb_fork.cpp                         |   176 +-
 src/test/test_tbb_header.cpp                       |   107 +-
 src/test/test_tbb_thread.cpp                       |    34 +-
 src/test/test_tbb_version.cpp                      |    55 +-
 src/test/test_thread.h                             |    92 +-
 src/test/test_tick_count.cpp                       |    44 +-
 src/test/test_tuple.cpp                            |    80 +-
 src/test/test_write_once_node.cpp                  |    46 +-
 src/test/test_yield.cpp                            |    34 +-
 1515 files changed, 102950 insertions(+), 76347 deletions(-)

diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..039edb3
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,45 @@
+# Set the default behavior, in case people don't have core.autocrlf set.
+* text=auto
+
+# Explicitly declare text files you want to always be normalized and converted
+# to native line endings on checkout.
+*.c text
+*.h text
+*.cpp text
+*.def text
+*.rc text
+*.i text
+*.sh text
+*.csh text
+*.mk text
+*.java text
+*.csv text
+*.lst text
+*.asm text
+*.cfg text
+*.css text
+*.inc text
+*.js text
+*.rb text
+*.strings text
+*.txt text
+*export.lst text
+*.xml text
+*.py text
+*.md text
+*.classpath text
+*.cproject text
+*.project text
+*.properties text
+*.java text
+*.gradle text
+
+# Declare files that will always have CRLF line endings on checkout.
+*.sln text eol=crlf
+*.bat text eol=crlf
+
+# Denote all files that are truly binary and should not be modified.
+*.png binary
+*.jpg binary
+*.ico binary
+*.spir binary
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..0182b14
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,86 @@
+# Ignore the debug and release directories created with Makefile builds #
+#########################################################################
+build/*_debug/
+build/*_release/
+
+# Compiled source #
+###################
+*.com
+*.class
+*.dll
+*.lib
+*.pdb
+*.exe
+*.o
+*.so
+*.so.1
+*.so.2
+*.dylib
+*.a
+*.obj
+*.pyc
+
+*.orig
+*.raw
+*.sample
+*.slo
+*.swp
+*.config
+*.la
+*.lai
+*.lo
+*.nhdr
+*.nii.gz
+*.nrrd
+
+# Packages #
+############
+# it's better to unpack these files and commit the raw source
+# git has its own built in compression methods
+*.7z
+*.dmg
+*.gz
+*.iso
+*.jar
+*.rar
+*.tar
+*.tgz
+*.zip
+
+# Logs and databases #
+######################
+*.log
+*.sql
+*.sqlite
+
+# OS generated files #
+######################
+.DS_Store
+.DS_Store?
+._*
+.Spotlight-V100
+.Trashes
+ehthumbs.db
+Thumbs.db
+
+# IDE generated files #
+######################
+/.ninja_deps
+/.ninja_log
+/build.ninja
+/rules.ninja
+*~
+.emacs.desktop
+
+# Build system generated files #
+################################
+CMakeCache.txt
+CMakeFiles/
+
+# Other #
+#########
+.clang_complete
+.idea
+.svn
+crash*
+*.tmp
diff --git a/CHANGES b/CHANGES
index 81dfc91..ab1d1a1 100644
--- a/CHANGES
+++ b/CHANGES
@@ -2,10 +2,444 @@
 The list of most significant changes made over time in
 Intel(R) Threading Building Blocks (Intel(R) TBB).
 
+Intel TBB 2017 Update 7
+TBB_INTERFACE_VERSION == 9107
+
+Changes (w.r.t. Intel TBB 2017 Update 6):
+
+- In the huge pages mode, the memory allocator now is also able to use
+    transparent huge pages.
+
+Preview Features:
+
+- Added support for Intel TBB integration into CMake-aware
+    projects, with valuable guidance and feedback provided by Brad King
+    (Kitware).
+
+Bugs fixed:
+
+- Fixed scalable_allocation_command(TBBMALLOC_CLEAN_ALL_BUFFERS, 0)
+    to process memory left after exited threads.
+
+------------------------------------------------------------------------
+Intel TBB 2017 Update 6
+TBB_INTERFACE_VERSION == 9106
+
+Changes (w.r.t. Intel TBB 2017 Update 5):
+
+- Added support for Android* NDK r14.
+
+Preview Features:
+
+- Added a blocking terminate extension to the task_scheduler_init class
+    that allows an object to wait for termination of worker threads.
+
+Bugs fixed:
+
+- Fixed compilation and testing issues with MinGW (GCC 6).
+- Fixed compilation with /std:c++latest option of VS 2017
+    (https://github.com/01org/tbb/issues/13).
+
+------------------------------------------------------------------------
+Intel TBB 2017 Update 5
+TBB_INTERFACE_VERSION == 9105
+
+Changes (w.r.t. Intel TBB 2017 Update 4):
+
+- Added support for Microsoft* Visual Studio* 2017.
+- Added graph/matmult example to demonstrate support for compute offload
+    to Intel(R) Graphics Technology in the flow graph API.
+- The "compiler" build option now allows to specify a full path to the
+    compiler.
+
+Changes affecting backward compatibility:
+
+- Constructors for many classes, including graph nodes, concurrent
+    containers, thread-local containers, etc., are declared explicit and
+    cannot be used for implicit conversions anymore.
+
+Bugs fixed:
+
+- Added a workaround for bug 16657 in the GNU C Library (glibc)
+    affecting the debug version of tbb::mutex.
+- Fixed a crash in pool_identify() called for an object allocated in
+    another thread.
+
+------------------------------------------------------------------------
+Intel TBB 2017 Update 4
+TBB_INTERFACE_VERSION == 9104
+
+Changes (w.r.t. Intel TBB 2017 Update 3):
+
+- Added support for C++11 move semantics in parallel_do.
+- Added support for FreeBSD* 11.
+
+Changes affecting backward compatibility:
+
+- Minimal compiler versions required for support of C++11 move semantics
+    raised to GCC 4.5, VS 2012, and Intel(R) C++ Compiler 14.0.
+
+Bugs fixed:
+
+- The workaround for crashes in the library compiled with GCC 6
+    (-flifetime-dse=1) was extended to Windows*.
+
+------------------------------------------------------------------------
+Intel TBB 2017 Update 3
+TBB_INTERFACE_VERSION == 9103
+
+Changes (w.r.t. Intel TBB 2017 Update 2):
+
+- Added support for Android* 7.0 and Android* NDK r13, r13b.
+
+Preview Features:
+
+- Added template class gfx_factory to the flow graph API. It implements
+    the Factory concept for streaming_node to offload computations to
+    Intel(R) processor graphics.
+
+Bugs fixed:
+
+- Fixed a possible deadlock caused by missed wakeup signals in
+    task_arena::execute().
+
+Open-source contributions integrated:
+
+- A build fix for Linux* s390x platform by Jerry J.
+
+------------------------------------------------------------------------
+Intel TBB 2017 Update 2
+TBB_INTERFACE_VERSION == 9102
+
+Changes (w.r.t. Intel TBB 2017 Update 1):
+
+- Removed the long-outdated support for Xbox* consoles.
+
+Bugs fixed:
+
+- Fixed the issue with task_arena::execute() not being processed when
+    the calling thread cannot join the arena.
+- Fixed dynamic memory allocation replacement failure on macOS* 10.12.
+
+------------------------------------------------------------------------
+Intel TBB 2017 Update 1
+TBB_INTERFACE_VERSION == 9101
+
+Changes (w.r.t. Intel TBB 2017):
+
+Bugs fixed:
+
+- Fixed dynamic memory allocation replacement failures on Windows* 10
+    Anniversary Update.
+- Fixed emplace() method of concurrent unordered containers to not
+    require a copy constructor.
+
+------------------------------------------------------------------------
+Intel TBB 2017
+TBB_INTERFACE_VERSION == 9100
+
+Changes (w.r.t. Intel TBB 4.4 Update 5):
+
+- static_partitioner class is now a fully supported feature.
+- async_node class is now a fully supported feature.
+- Improved dynamic memory allocation replacement on Windows* OS to skip
+    DLLs for which replacement cannot be done, instead of aborting.
+- Intel TBB no longer performs dynamic memory allocation replacement
+    for Microsoft* Visual Studio* 2008.
+- For 64-bit platforms, quadrupled the worst-case limit on the amount
+    of memory the Intel TBB allocator can handle.
+- Added TBB_USE_GLIBCXX_VERSION macro to specify the version of GNU
+    libstdc++ when it cannot be properly recognized, e.g. when used
+    with Clang on Linux* OS. Inspired by a contribution from David A.
+- Added graph/stereo example to demostrate tbb::flow::async_msg.
+- Removed a few cases of excessive user data copying in the flow graph.
+- Reworked split_node to eliminate unnecessary overheads.
+- Added support for C++11 move semantics to the argument of
+    tbb::parallel_do_feeder::add() method.
+- Added C++11 move constructor and assignment operator to
+    tbb::combinable template class.
+- Added tbb::this_task_arena::max_concurrency() function and
+    max_concurrency() method of class task_arena returning the maximal
+    number of threads that can work inside an arena.
+- Deprecated tbb::task_arena::current_thread_index() static method;
+    use tbb::this_task_arena::current_thread_index() function instead.
+- All examples for commercial version of library moved online:
+    https://software.intel.com/en-us/product-code-samples. Examples are
+    available as a standalone package or as a part of Intel(R) Parallel
+    Studio XE or Intel(R) System Studio Online Samples packages.
+
+Changes affecting backward compatibility:
+
+- Renamed following methods and types in async_node class:
+    Old                   New
+    async_gateway_type => gateway_type
+    async_gateway()    => gateway()
+    async_try_put()    => try_put()
+    async_reserve()    => reserve_wait()
+    async_commit()     => release_wait()
+- Internal layout of some flow graph nodes has changed; recompilation
+    is recommended for all binaries that use the flow graph.
+
+Preview Features:
+
+- Added template class streaming_node to the flow graph API. It allows
+    a flow graph to offload computations to other devices through
+    streaming or offloading APIs.
+- Template class opencl_node reimplemented as a specialization of
+    streaming_node that works with OpenCL*.
+- Added tbb::this_task_arena::isolate() function to isolate execution
+    of a group of tasks or an algorithm from other tasks submitted
+    to the scheduler.
+
+Bugs fixed:
+
+- Added a workaround for GCC bug #62258 in std::rethrow_exception()
+    to prevent possible problems in case of exception propagation.
+- Fixed parallel_scan to provide correct result if the initial value
+    of an accumulator is not the operation identity value.
+- Fixed a memory corruption in the memory allocator when it meets
+    internal limits.
+- Fixed the memory allocator on 64-bit platforms to align memory
+    to 16 bytes by default for all allocations bigger than 8 bytes.
+- As a workaround for crashes in the Intel TBB library compiled with
+    GCC 6, added -flifetime-dse=1 to compilation options on Linux* OS.
+- Fixed a race in the flow graph implementation.
+
+Open-source contributions integrated:
+
+- Enabling use of C++11 'override' keyword by Raf Schietekat.
+
+------------------------------------------------------------------------
+Intel TBB 4.4 Update 6
+TBB_INTERFACE_VERSION == 9006
+
+Changes (w.r.t. Intel TBB 4.4 Update 5):
+
+- For 64-bit platforms, quadrupled the worst-case limit on the amount
+    of memory the Intel TBB allocator can handle.
+
+Bugs fixed:
+
+- Fixed a memory corruption in the memory allocator when it meets
+    internal limits.
+- Fixed the memory allocator on 64-bit platforms to align memory
+    to 16 bytes by default for all allocations bigger than 8 bytes.
+- Fixed parallel_scan to provide correct result if the initial value
+    of an accumulator is not the operation identity value.
+- As a workaround for crashes in the Intel TBB library compiled with
+    GCC 6, added -flifetime-dse=1 to compilation options on Linux* OS.
+
+------------------------------------------------------------------------
+Intel TBB 4.4 Update 5
+TBB_INTERFACE_VERSION == 9005
+
+Changes (w.r.t. Intel TBB 4.4 Update 4):
+
+- Modified graph/fgbzip2 example to remove unnecessary data queuing.
+
+Preview Features:
+
+- Added a Python* module which is able to replace Python's thread pool
+    class with the implementation based on Intel TBB task scheduler.
+
+Bugs fixed:
+
+- Fixed the implementation of 64-bit tbb::atomic for IA-32 architecture
+    to work correctly with GCC 5.2 in C++11/14 mode.
+- Fixed a possible crash when tasks with affinity (e.g. specified via
+    affinity_partitioner) are used simultaneously with task priority
+    changes.
+
+------------------------------------------------------------------------
+Intel TBB 4.4 Update 4
+TBB_INTERFACE_VERSION == 9004
+
+Changes (w.r.t. Intel TBB 4.4 Update 3):
+
+- Removed a few cases of excessive user data copying in the flow graph.
+- Improved robustness of concurrent_bounded_queue::abort() in case of
+    simultaneous push and pop operations.
+
+Preview Features:
+
+- Added tbb::flow::async_msg, a special message type to support
+    communications between the flow graph and external asynchronous
+    activities.
+- async_node modified to support use with C++03 compilers.
+
+Bugs fixed:
+
+- Fixed a bug in dynamic memory allocation replacement for Windows* OS.
+- Fixed excessive memory consumption on Linux* OS caused by enabling
+    zero-copy realloc.
+- Fixed performance regression on Intel(R) Xeon Phi(tm) coprocessor with
+    auto_partitioner.
+
+------------------------------------------------------------------------
+Intel TBB 4.4 Update 3
+TBB_INTERFACE_VERSION == 9003
+
+Changes (w.r.t. Intel TBB 4.4 Update 2):
+
+- Modified parallel_sort to not require a default constructor for values
+    and to use iter_swap() for value swapping.
+- Added support for creating or initializing a task_arena instance that
+    is connected to the arena currently used by the thread.
+- graph/binpack example modified to use multifunction_node.
+- For performance analysis, use Intel(R) VTune(TM) Amplifier XE 2015
+    and higher; older versions are no longer supported.
+- Improved support for compilation with disabled RTTI, by omitting its use
+    in auxiliary code, such as assertions. However some functionality,
+    particularly the flow graph, does not work if RTTI is disabled.
+- The tachyon example for Android* can be built using Android Studio 1.5
+    and higher with experimental Gradle plugin 0.4.0.
+
+Preview Features:
+
+- Added class opencl_subbufer that allows using OpenCL* sub-buffer
+    objects with opencl_node.
+- Class global_control supports the value of 1 for
+    max_allowed_parallelism.
+
+Bugs fixed:
+
+- Fixed a race causing "TBB Warning: setaffinity syscall failed" message.
+- Fixed a compilation issue on OS X* with Intel(R) C++ Compiler 15.0.
+- Fixed a bug in queuing_rw_mutex::downgrade() that could temporarily
+    block new readers.
+- Fixed speculative_spin_rw_mutex to stop using the lazy subscription
+    technique due to its known flaws.
+- Fixed memory leaks in the tool support code.
+
+------------------------------------------------------------------------
+Intel TBB 4.4 Update 2
+TBB_INTERFACE_VERSION == 9002
+
+Changes (w.r.t. Intel TBB 4.4 Update 1):
+
+- Improved interoperability with Intel(R) OpenMP RTL (libiomp) on Linux:
+    OpenMP affinity settings do not affect the default number of threads
+    used in the task scheduler. Intel(R) C++ Compiler 16.0 Update 1
+    or later is required.
+- Added a new flow graph example with different implementations of the
+    Cholesky Factorization algorithm.
+
+Preview Features:
+
+- Added template class opencl_node to the flow graph API. It allows a
+    flow graph to offload computations to OpenCL* devices.
+- Extended join_node to use type-specified message keys. It simplifies
+    the API of the node by obtaining message keys via functions
+    associated with the message type (instead of node ports).
+- Added static_partitioner that minimizes overhead of parallel_for and
+    parallel_reduce for well-balanced workloads.
+- Improved template class async_node in the flow graph API to support
+    user settable concurrency limits.
+
+Bugs fixed:
+
+- Fixed a possible crash in the GUI layer for library examples on Linux.
+
+------------------------------------------------------------------------
+Intel TBB 4.4 Update 1
+TBB_INTERFACE_VERSION == 9001
+
+Changes (w.r.t. Intel TBB 4.4):
+
+- Added support for Microsoft* Visual Studio* 2015.
+- Intel TBB no longer performs dynamic replacement of memory allocation
+    functions for Microsoft Visual Studio 2005 and earlier versions.
+- For GCC 4.7 and higher, the intrinsics-based platform isolation layer
+    uses __atomic_* built-ins instead of the legacy __sync_* ones.
+    This change is inspired by a contribution from Mathieu Malaterre.
+- Improvements in task_arena:
+    Several application threads may join a task_arena and execute tasks
+    simultaneously. The amount of concurrency reserved for application
+    threads at task_arena construction can be set to any value between
+    0 and the arena concurrency limit.
+- The fractal example was modified to demonstrate class task_arena
+    and moved to examples/task_arena/fractal.
+
+Bugs fixed:
+
+- Fixed a deadlock during destruction of task_scheduler_init objects
+    when one of destructors is set to wait for worker threads.
+- Added a workaround for a possible crash on OS X* when dynamic memory
+    allocator replacement (libtbbmalloc_proxy) is used and memory is
+    released during application startup.
+- Usage of mutable functors with task_group::run_and_wait() and
+    task_arena::enqueue() is disabled. An attempt to pass a functor
+    which operator()() is not const will produce compilation errors.
+- Makefiles and environment scripts now properly recognize GCC 5.0 and
+    higher.
+
+Open-source contributions integrated:
+
+- Improved performance of parallel_for_each for inputs allowing random
+    access, by Raf Schietekat.
+
+------------------------------------------------------------------------
+Intel TBB 4.4
+TBB_INTERFACE_VERSION == 9000
+
+Changes (w.r.t. Intel TBB 4.3 Update 6):
+
+- The following features are now fully supported:
+    tbb::flow::composite_node;
+    additional policies of tbb::flow::graph_node::reset().
+- Platform abstraction layer for Windows* OS updated to use compiler
+    intrinsics for most atomic operations.
+- The tbb/compat/thread header updated to automatically include
+    C++11 <thread> where available.
+- Fixes and refactoring in the task scheduler and class task_arena.
+- Added key_matching policy to tbb::flow::join_node, which removes
+    the restriction on the type that can be compared-against.
+- For tag_matching join_node, tag_value is redefined to be 64 bits
+    wide on all architectures.
+- Expanded the documentation for the flow graph with details about
+    node semantics and behavior.
+- Added dynamic replacement of C11 standard function aligned_alloc()
+    under Linux* OS.
+- Added C++11 move constructors and assignment operators to
+    tbb::enumerable_thread_specific container.
+- Added hashing support for tbb::tbb_thread::id.
+- On OS X*, binaries that depend on libstdc++ are not provided anymore.
+    In the makefiles, libc++ is now used by default; for building with
+    libstdc++, specify stdlib=libstdc++ in the make command line.
+
+Preview Features:
+
+- Added a new example, graph/fgbzip2, that shows usage of
+    tbb::flow::async_node.
+- Modification to the low-level API for memory pools:
+    added a function for finding a memory pool by an object allocated
+    from that pool.
+- tbb::memory_pool now does not request memory till the first allocation
+    from the pool.
+
+Changes affecting backward compatibility:
+
+- Internal layout of flow graph nodes has changed; recompilation is
+    recommended for all binaries that use the flow graph.
+- Resetting a tbb::flow::source_node will immediately activate it,
+    unless it was created in inactive state.
+
+Bugs fixed:
+
+- Failure at creation of a memory pool will not cause process
+    termination anymore.
+
+Open-source contributions integrated:
+
+- Supported building TBB with Clang on AArch64 with use of built-in
+    intrinsics by David A.
+
+------------------------------------------------------------------------
 Intel TBB 4.3 Update 6
 TBB_INTERFACE_VERSION == 8006
 
 Changes (w.r.t. Intel TBB 4.3 Update 5):
+
 - Supported zero-copy realloc for objects >1MB under Linux* via
     mremap system call.
 - C++11 move-aware insert and emplace methods have been added to
@@ -13,6 +447,7 @@ Changes (w.r.t. Intel TBB 4.3 Update 5):
 - install_name is set to @rpath/<library name> on OS X*.
 
 Preview Features:
+
 - Added template class async_node to the flow graph API. It allows a
     flow graph to communicate with an external activity managed by
     the user or another runtime.
@@ -21,6 +456,7 @@ Preview Features:
 - extract() method of graph nodes now takes no arguments.
 
 Bugs fixed:
+
 - concurrent_unordered_{set,map} behaves correctly for degenerate
     hashes.
 - Fixed a race condition in the memory allocator that may lead to
@@ -31,9 +467,11 @@ Intel TBB 4.3 Update 5
 TBB_INTERFACE_VERSION == 8005
 
 Changes (w.r.t. Intel TBB 4.3 Update 4):
+
 - Added add_ref_count() method of class tbb::task.
 
 Preview Features:
+
 - Added class global_control for application-wide control of allowed
     parallelism and thread stack size.
 - memory_pool_allocator now throws the std::bad_alloc exception on
@@ -42,6 +480,7 @@ Preview Features:
     std::bad_alloc to std::invalid_argument and std::runtime_error.
 
 Bugs fixed:
+
 - scalable_allocator now throws the std::bad_alloc exception on
     allocation failure.
 - Fixed a race condition in the memory allocator that may lead to
@@ -50,6 +489,7 @@ Bugs fixed:
     might be unable to modify the number of worker threads.
 
 Open-source contributions integrated:
+
 - (Added but not enabled) push_front() method of class tbb::task_list
     by Raf Schietekat.
 
@@ -58,6 +498,7 @@ Intel TBB 4.3 Update 4
 TBB_INTERFACE_VERSION == 8004
 
 Changes (w.r.t. Intel TBB 4.3 Update 3):
+
 - Added a C++11 variadic constructor for enumerable_thread_specific.
     The arguments from this constructor are used to construct
     thread-local values.
@@ -69,6 +510,7 @@ Changes (w.r.t. Intel TBB 4.3 Update 3):
     concurrent unordered containers.
 
 Preview Features:
+
 - Interface-breaking change: typedefs changed for node predecessor and
     successor lists, affecting copy_predecessors and copy_successors
     methods.
@@ -78,6 +520,7 @@ Preview Features:
     automatically using the node port with index 0 for an edge.
 
 Open-source contributions integrated:
+
 - Draft code for enumerable_thread_specific constructor with multiple
     arguments (see above) by Adrien Guinet.
 - Fix for GCC invocation on IBM* Blue Gene*
@@ -305,7 +748,7 @@ Bugs fixed:
 
 - Fixed data races in preview extensions of task_scheduler_observer.
 - Added noexcept(false) for destructor of task_group_base to avoid
-    crash on cancelation of structured task group in C++11.
+    crash on cancellation of structured task group in C++11.
 
 Open-source contributions integrated:
 
@@ -321,7 +764,7 @@ TBB_INTERFACE_VERSION == 7003
 Changes (w.r.t. Intel TBB 4.2 Update 2):
 
 - Added support for Microsoft* Visual Studio* 2013.
-- Improved Microsoft* PPL-compatible form of parallel_for for better 
+- Improved Microsoft* PPL-compatible form of parallel_for for better
     support of auto-vectorization.
 - Added a new example for cancellation and reset in the flow graph:
     Kohonen self-organizing map (examples/graph/som).
@@ -387,7 +830,7 @@ Preview Features:
 - Class task_arena no longer requires linking with a preview library,
     though still remains a community preview feature.
 - The method task_arena::wait_until_empty() is removed.
-- The method task_arena::current_slot() now returns -1 if 
+- The method task_arena::current_slot() now returns -1 if
     the task scheduler is not initialized in the thread.
 
 Changes affecting backward compatibility:
@@ -568,7 +1011,7 @@ Changes (w.r.t. Intel TBB 4.1):
     any platform supported by compiler version 12.1 and newer.
 - Using GetNativeSystemInfo() instead of GetSystemInfo() to support
     more than 32 processors for 32-bit applications under WOW64.
-- The following form of parallel_for: 
+- The following form of parallel_for:
     parallel_for(first, last, [step,] f[, context]) now accepts an
     optional partitioner parameter after the function f.
 
@@ -639,7 +1082,7 @@ Changes (w.r.t. Intel TBB 4.0 Update 4):
 
 Bugs fixed:
 
-- Fixed a tv_nsec overflow bug in condition_variable::wait_for. 
+- Fixed a tv_nsec overflow bug in condition_variable::wait_for.
 - Fixed execution order of enqueued tasks with different priorities.
 - Fixed a bug with task priority changes causing lack of progress
     for fire-and-forget tasks when TBB was initialized to use 1 thread.
@@ -708,7 +1151,7 @@ Changes (w.r.t. Intel TBB 4.0 Update 2):
 Backward-incompatible API changes:
 
 - a graph reference parameter is now required to be passed to the
-    constructors of the following flow graph nodes: overwrite_node, 
+    constructors of the following flow graph nodes: overwrite_node,
     write_once_node, broadcast_node, and the CPF or_node.
 - the following tbb::flow node methods and typedefs have been renamed:
        Old                             New
@@ -729,10 +1172,10 @@ TBB_INTERFACE_VERSION == 6002
 
 Changes (w.r.t. Intel TBB 4.0 Update 1 commercial-aligned release):
 
-- concurrent_bounded_queue now has an abort() operation that releases 
-    threads involved in pending push or pop operations. The released 
+- concurrent_bounded_queue now has an abort() operation that releases
+    threads involved in pending push or pop operations. The released
     threads will receive a tbb::user_abort exception.
-- Added Community Preview Feature:  concurrent_lru_cache container, 
+- Added Community Preview Feature:  concurrent_lru_cache container,
     a concurrent implementation of LRU (least-recently-used) cache.
 
 Bugs fixed:
@@ -823,8 +1266,8 @@ TBB_INTERFACE_VERSION == 5006 (forgotten to increment)
 
 Changes (w.r.t. Intel TBB 3.0 Update 6 commercial-aligned release):
 
-- Added implementation of the platform isolation layer based on 
-    GCC atomic built-ins; it is supposed to work on any platform 
+- Added implementation of the platform isolation layer based on
+    GCC atomic built-ins; it is supposed to work on any platform
     where GCC has these built-ins.
 
 Community Preview Features:
@@ -901,9 +1344,9 @@ Changes (w.r.t. Intel TBB 3.0 Update 3 commercial-aligned release):
 - Fixed library loading to avoid possibility for remote code execution,
     see http://www.microsoft.com/technet/security/advisory/2269637.mspx.
 - Added support of more than 64 cores for appropriate Microsoft*
-    Windows* versions. For more details, see 
+    Windows* versions. For more details, see
     http://msdn.microsoft.com/en-us/library/dd405503.aspx.
-- Default number of worker threads is adjusted in accordance with 
+- Default number of worker threads is adjusted in accordance with
     process affinity mask.
 
 Bugs fixed:
@@ -988,7 +1431,7 @@ Bugs fixed:
     was a temporary object.
 - Incorrect usage of memory fences on PowerPC and XBOX360 platforms.
 - A subtle issue in task group context binding that could result
-    in cancelation signal being missed by nested task groups.
+    in cancellation signal being missed by nested task groups.
 - Incorrect construction of concurrent_unordered_map if specified
     number of buckets is not power of two.
 - Broken count() and equal_range() of concurrent_unordered_map.
@@ -1909,7 +2352,8 @@ Packaging:
     are provided separately on Intel(R) Premier.
 
 ------------------------------------------------------------------------
-Intel and Cilk are registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
+Intel, the Intel logo, Xeon, Intel Xeon Phi, and Cilk are registered
+trademarks or trademarks of Intel Corporation or its subsidiaries in
+the United States and other countries.
 
 * Other names and brands may be claimed as the property of others.
diff --git a/COPYING b/COPYING
deleted file mode 100644
index 5af6ed8..0000000
--- a/COPYING
+++ /dev/null
@@ -1,353 +0,0 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.)  You can apply it to
-your programs, 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 software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, 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 redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-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 give any other recipients of the Program a copy of this License
-along with the Program.
-
-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 Program or any portion
-of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-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 Program, 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 Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) 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; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, 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 executable.  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.
-
-If distribution of executable or 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 counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program 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.
-
-  5. 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 Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program 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.
-
-  7. 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 Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program 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 Program.
-
-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.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program 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.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the 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 Program
-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 Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, 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
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "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 PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. 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 PROGRAM 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 PROGRAM (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 PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), 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 Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  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 program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    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.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
-----------------     END OF Gnu General Public License     ----------------
-
-The source code of Threading Building Blocks is distributed under version 2
-of the GNU General Public License, with the so-called "runtime exception,"
-as follows (or see any header or implementation file):
-
-   As a special exception, you may use this file as part of a free software
-   library without restriction.  Specifically, if other files instantiate
-   templates or use macros or inline functions from this file, or you compile
-   this file and link it with other files to produce an executable, this
-   file does not by itself cause the resulting executable to be covered by
-   the GNU General Public License.  This exception does not however
-   invalidate any other reasons why the executable file might be covered by
-   the GNU General Public License.
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/Makefile b/Makefile
index bc45989..40ca412 100644
--- a/Makefile
+++ b/Makefile
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 tbb_root?=.
 include $(tbb_root)/build/common.inc
@@ -54,6 +54,10 @@ rml: mkdir
 examples: tbb tbbmalloc
 	$(MAKE) -C examples -r -f Makefile tbb_root=.. release test
 
+python: mkdir
+	$(MAKE) -C "$(work_dir)_release"  -r -f $(tbb_root)/build/Makefile.tbb cfg=release
+	bash -c ". $(work_dir)_release$(SLASH)tbbvars.sh && $(MAKE) -rC '$(full_tbb_root)/python' CXX=$(compiler) install test-install"
+
 .PHONY: clean clean_examples mkdir info
 
 clean: clean_examples
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..c32c668
--- /dev/null
+++ b/README.md
@@ -0,0 +1,30 @@
+# Intel(R) Threading Building Blocks 2017 Update 7
+[![Stable release](https://img.shields.io/badge/version-2017_U7-green.svg)](https://github.com/01org/tbb/releases/tag/2017_U7)
+[![Apache License Version 2.0](https://img.shields.io/badge/license-Apache_2.0-green.svg)](LICENSE)
+
+Intel(R) Threading Building Blocks (Intel(R) TBB) lets you easily write parallel C++ programs that take
+full advantage of multicore performance, that are portable, composable and have future-proof scalability.
+
+## Release Information
+Here are the latest [Changes](CHANGES) and [Release Notes](doc/Release_Notes.txt) (contains system requirements and known issues).
+
+## Documentation
+* Intel(R) TBB [tutorial](https://software.intel.com/en-us/tbb-tutorial)
+* Intel(R) TBB general documentation: [stable](https://software.intel.com/en-us/tbb-documentation)
+and [latest](https://www.threadingbuildingblocks.org/docs/help/index.htm)
+
+## Support
+Please report issues and suggestions via
+[GitHub issues](https://github.com/01org/tbb/issues) or start a topic on the
+[Intel(R) TBB forum](http://software.intel.com/en-us/forums/intel-threading-building-blocks/).
+
+## How to Contribute
+Please, read the instructions on the official [Intel(R) TBB open source site](https://www.threadingbuildingblocks.org/submit-contribution).
+
+## Engineering team contacts
+* [E-mail us.](mailto:inteltbbdevelopers at intel.com)
+
+------------------------------------------------------------------------
+Intel and the Intel logo are trademarks of Intel Corporation or its subsidiaries in the U.S. and/or other countries.
+
+\* Other names and brands may be claimed as the property of others.
diff --git a/build/AIX.gcc.inc b/build/AIX.gcc.inc
index 3b19a6d..18e6e6a 100644
--- a/build/AIX.gcc.inc
+++ b/build/AIX.gcc.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 COMPILE_ONLY = -c -MMD
 PREPROC_ONLY = -E -x c++
diff --git a/build/AIX.inc b/build/AIX.inc
index 5f87361..abe12d5 100644
--- a/build/AIX.inc
+++ b/build/AIX.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 ifndef arch
         arch:=$(shell uname -p)
diff --git a/build/FreeBSD.clang.inc b/build/FreeBSD.clang.inc
index 5cee5d7..3579603 100644
--- a/build/FreeBSD.clang.inc
+++ b/build/FreeBSD.clang.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 COMPILE_ONLY = -c -MMD
 PREPROC_ONLY = -E -x c++
@@ -35,7 +35,7 @@ CPLUS = clang++
 CONLY = clang
 LIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY)
 LIBS += -lpthread -lrt
-LINK_FLAGS = -Wl,-rpath-link=. -rdynamic
+LINK_FLAGS = -Wl,-rpath-link=. -Wl,-rpath=. -rdynamic
 C_FLAGS = $(CPLUS_FLAGS)
 
 ifeq ($(cfg), release)
@@ -45,15 +45,9 @@ ifeq ($(cfg), debug)
         CPLUS_FLAGS = -DTBB_USE_DEBUG $(ITT_NOTIFY) -g -O0 -DUSE_PTHREAD
 endif
 
-ifeq (libc++,$(stdlib))
-    CPLUS_FLAGS += -stdlib=libc++
-    LIB_LINK_FLAGS += -stdlib=libc++
-endif
-
-CPP11_FLAGS = -std=c++11 -D_TBB_CPP0X
-
-ifneq (00,$(lambdas)$(cpp0x))
-    CXX_ONLY_FLAGS += $(CPP11_FLAGS)
+ifneq (,$(stdlib))
+    CPLUS_FLAGS    += -stdlib=$(stdlib)
+    LIB_LINK_FLAGS += -stdlib=$(stdlib)
 endif
 
 TBB_ASM.OBJ=
diff --git a/build/FreeBSD.gcc.inc b/build/FreeBSD.gcc.inc
index 20f0027..794cb7c 100644
--- a/build/FreeBSD.gcc.inc
+++ b/build/FreeBSD.gcc.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 COMPILE_ONLY = -c -MMD
 PREPROC_ONLY = -E -x c++
@@ -34,6 +34,13 @@ LIB_LINK_FLAGS = -shared
 LIBS = -lpthread 
 C_FLAGS = $(CPLUS_FLAGS)
 
+# gcc 6.0 and later have -flifetime-dse option that controls
+# elimination of stores done outside the object lifetime
+ifneq (,$(shell gcc -dumpversion | egrep  "^([6-9])"))
+    # keep pre-contruction stores for zero initialization
+    DSE_KEY = -flifetime-dse=1
+endif
+
 ifeq ($(cfg), release)
         CPLUS_FLAGS = -g -O2 -DUSE_PTHREAD
 endif
diff --git a/build/FreeBSD.inc b/build/FreeBSD.inc
index 11d125e..3bd6a06 100644
--- a/build/FreeBSD.inc
+++ b/build/FreeBSD.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 ifndef arch
         ifeq ($(shell uname -m),i386)
@@ -29,14 +29,14 @@ ifndef arch
 endif
 
 ifndef runtime
-        gcc_version:=$(shell gcc -dumpversion)
+        clang_version:=$(shell clang -v 2>&1 | grep version | sed "s/.*version \([0-9]*\.[0-9]*\).*/\1/")
         os_version:=$(shell uname -r)
         os_kernel_version:=$(shell uname -r | sed -e 's/-.*$$//')
-        export runtime:=cc$(gcc_version)_kernel$(os_kernel_version)
+        export runtime:=cc$(clang_version)_kernel$(os_kernel_version)
 endif
 
-native_compiler := gcc
-export compiler ?= gcc
+native_compiler := clang
+export compiler ?= clang
 debugger ?= gdb
 
 CMD=$(SHELL) -c
diff --git a/build/Makefile.rml b/build/Makefile.rml
index 43cba2d..241d4bf 100644
--- a/build/Makefile.rml
+++ b/build/Makefile.rml
@@ -1,20 +1,23 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+# TODO: investigate why version_string.ver is not complete when $(RML_SERVER.OBJ) is being compiled.
+.NOTPARALLEL:
 
 tbb_root ?= $(TBBROOT)
 BUILDING_PHASE=1
@@ -78,18 +81,18 @@ R_CPLUS_FLAGS =  $(subst DO_ITT_NOTIFY,DO_ITT_NOTIFY=0,$(CPLUS_FLAGS)) $(WARNING
 		 $(DEFINE_KEY)TBB_USE_THREADING_TOOLS=0 $(DEFINE_KEY)__TBB_RML_STATIC=1 $(DEFINE_KEY)__TBB_NO_IMPLICIT_LINKAGE=1
 
 %.$(OBJ): %.cpp
-	$(CPLUS) $(COMPILE_ONLY) $(R_CPLUS_FLAGS) $(PIC_KEY) $(INCLUDES) $<
+	$(CPLUS) $(COMPILE_ONLY) $(R_CPLUS_FLAGS) $(PIC_KEY) $(DSE_KEY) $(INCLUDES) $<
 
 ifeq (linux,$(tbb_os))
 omp_dynamic_link.$(OBJ): CPLUS_FLAGS+=-fno-exceptions
 endif
 
-tbb_misc_rml.$(OBJ): version_string.ver
+tbb_misc_rml.$(OBJ) $(RML_SERVER.OBJ): version_string.ver
 
 RML_TEST.OBJ = test_job_automaton.$(OBJ) test_thread_monitor.$(OBJ) test_rml_tbb.$(OBJ) test_rml_omp.$(OBJ) test_rml_mixed.$(OBJ)
 
 $(RML_TBB_DEP): %_rml.$(OBJ): %.cpp
-	$(CPLUS) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(R_CPLUS_FLAGS) $(PIC_KEY) $(INCLUDES) $<
+	$(CPLUS) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(R_CPLUS_FLAGS) $(PIC_KEY) $(DSE_KEY) $(INCLUDES) $<
 
 $(RML_TEST.OBJ): %.$(OBJ): %.cpp
 	$(CPLUS) $(COMPILE_ONLY) $(R_CPLUS_FLAGS) $(PIC_KEY) $(T_INCLUDES) $<
@@ -102,6 +105,7 @@ LIB_LINK_FLAGS += $(EXPORT_KEY)rml.def
 $(RML.DLL): rml.def
 endif
 
+$(RML.DLL): CPLUS_FLAGS += $(SDL_FLAGS)
 $(RML.DLL): BUILDING_LIBRARY = $(RML.DLL)
 $(RML.DLL): $(RML_TBB_DEP) $(RML_SERVER.OBJ) $(RML.RES) $(RML_NO_VERSION.DLL) $(RML_ASM.OBJ)
 	$(LIB_LINK_CMD) $(LIB_OUTPUT_KEY)$(RML.DLL) $(RML_SERVER.OBJ) $(RML_TBB_DEP) $(RML_ASM.OBJ) $(RML.RES) $(LIB_LINK_LIBS) $(LIB_LINK_FLAGS)
@@ -158,5 +162,5 @@ rml_test: $(call cross_suffix,$(RML.DLL)) $(TEST_PREREQUISITE) $(RML_TESTS) $(RM
 # End of rules for making the TBBMalloc unit tests
 #------------------------------------------------------
 
-# Include automatically generated dependences
+# Include automatically generated dependencies
 -include *.d
diff --git a/build/Makefile.tbb b/build/Makefile.tbb
index 06e76e2..857aacc 100644
--- a/build/Makefile.tbb
+++ b/build/Makefile.tbb
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 #------------------------------------------------------------------------------
 # Define rules for making the TBB shared library.
@@ -23,6 +23,7 @@
 tbb_root ?= "$(TBBROOT)"
 BUILDING_PHASE=1
 include $(tbb_root)/build/common.inc
+CPLUS_FLAGS += $(SDL_FLAGS)
 DEBUG_SUFFIX=$(findstring _debug,_$(cfg))
 
 #------------------------------------------------------------
@@ -36,12 +37,7 @@ default_tbb: $(TBB.DLL)
 
 VPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb $(tbb_root)/src/old $(tbb_root)/src/rml/client
 
-CPLUS_FLAGS += $(PIC_KEY) $(DEFINE_KEY)__TBB_BUILD=1
-
-# suppress warnings for build of itt_notify by GCC3
-ifneq (,$(findstring gcc_cc3., $(compiler)_$(runtime)))
-KNOWN_WARNINGS += itt_notify.$(OBJ)
-endif
+CPLUS_FLAGS += $(PIC_KEY) $(DSE_KEY) $(DEFINE_KEY)__TBB_BUILD=1
 
 # Object files (that were compiled from C++ code) that gmake up TBB
 TBB_CPLUS.OBJ = concurrent_hash_map.$(OBJ) \
@@ -118,5 +114,5 @@ endif
 #clean:
 #	$(RM) *.$(OBJ) *.$(DLL) *.res *.map *.ilk *.pdb *.exp *.manifest *.tmp *.d core core.*[0-9][0-9] *.ver
 
-# Include automatically generated dependences
+# Include automatically generated dependencies
 -include *.d
diff --git a/build/Makefile.tbbmalloc b/build/Makefile.tbbmalloc
index f2be65e..d4b84b3 100644
--- a/build/Makefile.tbbmalloc
+++ b/build/Makefile.tbbmalloc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # default target
 default_malloc: malloc malloc_test
@@ -60,16 +60,16 @@ $(MALLOC.OBJ): M_CPLUS_FLAGS += $(WARNING_SUPPRESS)
 $(PROXY.OBJ): CPLUS_FLAGS += $(WARNING_SUPPRESS)
 
 frontend.$(OBJ): frontend.cpp version_string.ver
-	$(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(PIC_KEY) $(M_INCLUDES) $(INCLUDE_KEY). $<
+	$(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(PIC_KEY) $(DSE_KEY) $(M_INCLUDES) $(INCLUDE_KEY). $<
 
 $(PROXY.OBJ): %.$(OBJ): %.cpp
-	$(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS) $(PIC_KEY) $(DEFINE_KEY)__TBBMALLOC_BUILD=1 $(M_INCLUDES) $<
+	$(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS) $(PIC_KEY) $(DSE_KEY) $(DEFINE_KEY)__TBBMALLOC_BUILD=1 $(M_INCLUDES) $<
 
 $(MALLOC_CPLUS.OBJ): %.$(OBJ): %.cpp
-	$(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(PIC_KEY) $(M_INCLUDES) $<
+	$(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(PIC_KEY) $(DSE_KEY) $(M_INCLUDES) $<
 
 itt_notify_malloc.$(OBJ): itt_notify.cpp
-	$(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(PIC_KEY) $(OUTPUTOBJ_KEY)$@ $(INCLUDES) $<
+	$(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(PIC_KEY) $(DSE_KEY) $(OUTPUTOBJ_KEY)$@ $(INCLUDES) $<
 
 MALLOC_LINK_FLAGS = $(LIB_LINK_FLAGS)
 PROXY_LINK_FLAGS = $(LIB_LINK_FLAGS)
@@ -82,6 +82,8 @@ MALLOC_LINK_FLAGS += $(EXPORT_KEY)tbbmalloc.def
 $(MALLOC.DLL): tbbmalloc.def
 endif
 
+$(MALLOC.DLL) $(MALLOCPROXY.DLL): CPLUS_FLAGS += $(SDL_FLAGS)
+$(MALLOC.DLL) $(MALLOCPROXY.DLL): M_CPLUS_FLAGS += $(SLD_FLAGS)
 $(MALLOC.DLL): BUILDING_LIBRARY = $(MALLOC.DLL)
 $(MALLOC.DLL): $(MALLOC.OBJ) $(MALLOC.RES) $(MALLOC_NO_VERSION.DLL)
 	$(subst $(CPLUS),$(CONLY),$(LIB_LINK_CMD)) $(LIB_OUTPUT_KEY)$(MALLOC.DLL) $(MALLOC.OBJ) $(MALLOC.RES) $(LIB_LINK_LIBS) $(MALLOC_LINK_FLAGS)
@@ -176,7 +178,7 @@ test_malloc_overload_proxy.$(TEST_EXT): LINK_FLAGS+=$(LIBDL)
 test_malloc_atexit_dll.$(DLL): CPLUS_FLAGS=$(subst /MT,/MD,$(M_CPLUS_FLAGS))
 test_malloc_atexit.$(TEST_EXT): CPLUS_FLAGS=$(subst /MT,/MD,$(M_CPLUS_FLAGS))
 test_malloc_atexit.$(TEST_EXT): LINK_FLAGS+=$(LIBDL)
-# on Ubuntu 11.10 linker called with --as-needed, so dependence on libtbbmalloc_proxy
+# on Ubuntu 11.10 linker called with --as-needed, so dependency on libtbbmalloc_proxy
 # is not created, and malloc overload via linking with -ltbbmalloc_proxy is not working.
 # Overcome with --no-as-needed.
 ifeq (linux.gcc,$(tbb_os).$(compiler))
@@ -230,5 +232,5 @@ endif
 # End of rules for making the TBBMalloc unit tests
 #------------------------------------------------------
 
-# Include automatically generated dependences
+# Include automatically generated dependencies
 -include *.d
diff --git a/build/Makefile.tbbproxy b/build/Makefile.tbbproxy
index 706037e..eb2e0fd 100644
--- a/build/Makefile.tbbproxy
+++ b/build/Makefile.tbbproxy
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # default target
 default_tbbproxy: tbbproxy tbbproxy_test
@@ -33,7 +33,7 @@ VPATH += $(PROXY_ROOT) $(PROXY_SOURCE_ROOT)
 CPLUS_FLAGS += $(DEFINE_KEY)__TBB_DLL_NAME=$(TBB.DLL)
 CPLUS_FLAGS += $(DEFINE_KEY)__TBB_LST=$(TBB.LST)
 CPLUS_FLAGS += $(foreach dir,$(VPATH),$(INCLUDE_KEY)$(dir))
-CPLUS_FLAGS += $(PIC_KEY)
+CPLUS_FLAGS += $(PIC_KEY) $(DSE_KEY)
 
 include $(tbb_root)/build/common_rules.inc
 
@@ -46,7 +46,7 @@ PROXY_CPLUS.OBJ = tbbproxy.$(OBJ)
 PROXY_ASM.OBJ   = tbbproxy-asm.$(OBJ)
 PROXY.OBJ := $(PROXY_CPLUS.OBJ) $(PROXY_ASM.OBJ)
 
-# Not using intrinsics prevents undesired dependence from ICL libraries (e.g. libirc).
+# Not using intrinsics prevents undesired dependence on ICL libraries (e.g. libirc).
 # Not using default libs prevents link issues caused by different CRT versions in tbbproxy and in an app.
 $(PROXY.OBJ): CPLUS_FLAGS += $(DEFINE_KEY)ARCH_$(arch) $(DEFINE_KEY)OS_$(tbb_os) $(NOINTRINSIC_KEY) $(NODEFAULTLIB_KEY)
 
@@ -105,5 +105,5 @@ $(PROXY_TESTS_OBJS): %.$(OBJ): %.cpp
 # End of rules for making the TBB Proxy unit tests
 #------------------------------------------------------
 
-# Include automatically generated dependences
+# Include automatically generated dependencies
 -include *.d
diff --git a/build/Makefile.test b/build/Makefile.test
index 8fe080c..b96fa4d 100644
--- a/build/Makefile.test
+++ b/build/Makefile.test
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 #------------------------------------------------------------------------------
 # Define rules for making the TBB tests.
@@ -69,8 +69,9 @@ SCHEDULER_DIRECTLY_INCLUDED = test_task_leaks.$(TEST_EXT) \
  test_concurrent_queue_whitebox.$(TEST_EXT)
 
 # Necessary to locate version_string.ver referenced from directly included tbb_misc.cpp
-INCLUDES += $(INCLUDE_KEY).
+INCLUDES += $(INCLUDE_KEY). $(INCLUDE_TEST_HEADERS)
 
+$(SCHEDULER_DIRECTLY_INCLUDED): CPLUS_FLAGS += $(DSE_KEY)
 $(SCHEDULER_DIRECTLY_INCLUDED): WARNING_KEY += $(WARNING_SUPPRESS)
 $(SCHEDULER_DIRECTLY_INCLUDED): LIBS += $(LIBDL)
 #tbb.lib must not be linked to scheduler white box tests in order to not violate ODR
@@ -78,15 +79,6 @@ $(SCHEDULER_DIRECTLY_INCLUDED): LINK_TBB.LIB =
 $(SCHEDULER_DIRECTLY_INCLUDED): LINK_FILES += $(SCHEDULER_DEPENDENCIES)
 $(SCHEDULER_DIRECTLY_INCLUDED): $(SCHEDULER_DEPENDENCIES)
 
-# Tests that use some features of C++11
-TEST_TBB_CPP11 = test_lambda.$(TEST_EXT) test_cache_aligned_allocator_STL.$(TEST_EXT)
-
-ifneq (0,$(cpp0x))
-# Made CPP11 tests use NOSTRICT flags because -strict-ansi combined with
-# -std=c++0x on ICC 13.0 results in a compile error when stdlib is included
-$(TEST_TBB_CPP11):  CPLUS_FLAGS := $(CPLUS_FLAGS_NOSTRICT)
-endif
-
 # test_tbb_header detects "multiple definition" linker error using the test that covers the whole library
 TWICE_LINKED_TESTS = test_tbb_header.$(TEST_EXT) \
                      test_concurrent_unordered_set.$(TEST_EXT)
@@ -105,13 +97,25 @@ $(TWICE_LINKED_TESTS): LINK_FILES+=$(@:.$(TEST_EXT)=_secondary.$(OBJ))
 %_compiler_builtins.$(TEST_EXT): LINK_TBB.LIB =
 %_compiler_builtins.$(OBJ): CPLUS_FLAGS+=$(DEFINE_KEY)__TBB_TEST_BUILTINS=1 $(DEFINE_KEY)TBB_USE_ASSERT=0
 
-# The test_dynamic_link test doesn't depend on the TBB library
-test_dynamic_link.$(TEST_EXT): LINK_TBB.LIB =
+# dynamic_link tests don't depend on the TBB library
+test_dynamic_link%.$(TEST_EXT): LINK_TBB.LIB =
 test_dynamic_link.$(TEST_EXT): LIBS += $(LIBDL)
 
+# Resolving issue with the number of sections that an object file can contain
+ifneq (,$(BIGOBJ_KEY))
+TEST_BIGOBJ = test_opencl_node.$(TEST_EXT)      \
+    test_join_node.$(TEST_EXT)                  \
+    test_atomic.$(TEST_EXT)                     \
+    test_concurrent_unordered_set.$(TEST_EXT)   \
+    test_concurrent_unordered_map.$(TEST_EXT)   \
+    test_join_node.$(TEST_EXT)
+$(TEST_BIGOBJ): override CXXFLAGS += $(BIGOBJ_KEY)
+endif
+
+# TODO: remove repetition of .$(TEST_EXT) in the list bellow
 # The main list of TBB tests
 TEST_TBB_PLAIN.EXE = test_assembly.$(TEST_EXT)   \
-        test_global_control.$(TEST_EXT)              \
+	test_global_control.$(TEST_EXT)              \
 	test_tbb_fork.$(TEST_EXT)                    \
 	test_assembly_compiler_builtins.$(TEST_EXT)  \
 	test_aligned_space.$(TEST_EXT)               \
@@ -134,6 +138,7 @@ TEST_TBB_PLAIN.EXE = test_assembly.$(TEST_EXT)   \
 	test_mutex_native_threads.$(TEST_EXT)        \
 	test_rwm_upgrade_downgrade.$(TEST_EXT)       \
 	test_cache_aligned_allocator.$(TEST_EXT)     \
+	test_cache_aligned_allocator_STL.$(TEST_EXT) \
 	test_parallel_for.$(TEST_EXT)                \
 	test_parallel_reduce.$(TEST_EXT)             \
 	test_parallel_sort.$(TEST_EXT)               \
@@ -143,6 +148,7 @@ TEST_TBB_PLAIN.EXE = test_assembly.$(TEST_EXT)   \
 	test_pipeline.$(TEST_EXT)                    \
 	test_pipeline_with_tbf.$(TEST_EXT)           \
 	test_parallel_pipeline.$(TEST_EXT)           \
+	test_lambda.$(TEST_EXT)                      \
 	test_task_scheduler_init.$(TEST_EXT)         \
 	test_task_scheduler_observer.$(TEST_EXT)     \
 	test_task.$(TEST_EXT)                        \
@@ -202,10 +208,9 @@ TEST_TBB_PLAIN.EXE = test_assembly.$(TEST_EXT)   \
 	test_flow_graph_whitebox.$(TEST_EXT)         \
 	test_composite_node.$(TEST_EXT)              \
 	test_async_node.$(TEST_EXT)                  \
+	test_async_msg.$(TEST_EXT)                   \
 	test_tbb_version.$(TEST_EXT)                 # insert new files right above
 
-TEST_TBB_PLAIN.EXE += $(TEST_TBB_CPP11)
-
 # skip mode_plugin for now
 skip_tests += test_model_plugin
 
@@ -220,22 +225,21 @@ test_tbb_openmp:
 endif
 
 ifdef CILK_AVAILABLE
-test_cilk_dynamic_load.$(TEST_EXT): LIBS += $(LIBDL)
-test_cilk_dynamic_load.$(TEST_EXT): test_cilk_dynamic_load_dll.$(DLL)
-
 # Workaround on cilkrts linkage known issue (see Intel(R) C++ Composer XE 2011 Release Notes)
 # The issue reveals itself if a version of binutils is prior to 2.17
 ifeq (linux_icc,$(tbb_os)_$(compiler))
 test_cilk_interop.$(TEST_EXT): LIBS += -lcilkrts
+test_gfx_factory.$(TEST_EXT): LIBS += -lcilkrts
 endif
-test_tbb_cilk: test_cilk_interop.$(TEST_EXT) test_cilk_dynamic_load.$(TEST_EXT)
+test_tbb_cilk: test_cilk_interop.$(TEST_EXT)
 	$(run_cmd) ./test_cilk_interop.$(TEST_EXT) $(args)
-	$(run_cmd) ./test_cilk_dynamic_load.$(TEST_EXT) $(args)
 else
 test_tbb_cilk:
 	@echo "Intel(R) Cilk(TM) Plus is not available"
 endif
 
+test_opencl_node.$(TEST_EXT): LIBS += $(OPENCL.LIB)
+
 $(TEST_TBB_PLAIN.EXE): WARNING_KEY += $(TEST_WARNING_KEY)
 
 # Run tests that are in SCHEDULER_DIRECTLY_INCLUDED and TEST_TBB_PLAIN.EXE but not in skip_tests (which is specified by user)
@@ -298,5 +302,5 @@ clean_%:
 clean:
 	$(RM) *.$(OBJ) *.exe *.$(DLL) *.$(LIBEXT) *.res *.map *.ilk *.pdb *.exp *.manifest *.tmp *.d pgopti.* *.dyn core core.*[0-9][0-9] *.ver
 
-# Include automatically generated dependences
+# Include automatically generated dependencies
 -include *.d
diff --git a/build/SunOS.gcc.inc b/build/SunOS.gcc.inc
index 65df43c..d487015 100644
--- a/build/SunOS.gcc.inc
+++ b/build/SunOS.gcc.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 COMPILE_ONLY = -c -MMD
 PREPROC_ONLY = -E -x c++
@@ -25,7 +25,7 @@ OUTPUTOBJ_KEY = -o #
 PIC_KEY = -fPIC
 WARNING_AS_ERROR_KEY = -Werror
 WARNING_KEY = -Wall
-TEST_WARNING_KEY = -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor $(if $(findstring cc4., $(runtime)),-Wextra)
+TEST_WARNING_KEY = -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor -Wextra
 WARNING_SUPPRESS = -Wno-parentheses -Wno-non-virtual-dtor
 DYLIB_KEY = -shared
 LIBDL = -ldl
diff --git a/build/SunOS.inc b/build/SunOS.inc
index 6f46bab..447e059 100644
--- a/build/SunOS.inc
+++ b/build/SunOS.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 ifndef arch
         arch:=$(shell uname -p)
diff --git a/build/SunOS.suncc.inc b/build/SunOS.suncc.inc
index 4d88192..a99e86b 100644
--- a/build/SunOS.suncc.inc
+++ b/build/SunOS.suncc.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 COMPILE_ONLY = -c -xMMD -errtags
 PREPROC_ONLY = -E -xMMD
@@ -33,6 +33,8 @@ tbb_strict=0
 
 CPLUS = CC
 CONLY = cc
+
+OPENMP_FLAG = -xopenmp
 LIB_LINK_FLAGS = -G -R . -M$(tbb_root)/build/suncc.map.pause
 LINK_FLAGS += -M$(tbb_root)/build/suncc.map.pause
 LIBS = -lpthread -lrt -R .
diff --git a/build/android.clang.inc b/build/android.clang.inc
new file mode 100644
index 0000000..89c03d2
--- /dev/null
+++ b/build/android.clang.inc
@@ -0,0 +1,118 @@
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+
+COMPILE_ONLY = -c -MMD
+PREPROC_ONLY = -E -x c++
+INCLUDE_KEY = -I
+DEFINE_KEY = -D
+OUTPUT_KEY = -o #
+OUTPUTOBJ_KEY = -o #
+PIC_KEY = -fPIC
+WARNING_AS_ERROR_KEY = -Werror
+WARNING_KEY = -Wall
+SDL_FLAGS = -fPIE -fPIC -fstack-protector -Wformat -Wformat-security
+TEST_WARNING_KEY = -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor -Wextra
+
+WARNING_SUPPRESS = -Wno-parentheses -Wno-non-virtual-dtor
+DYLIB_KEY = -shared
+EXPORT_KEY = -Wl,--version-script,
+LIBDL = -ldl
+
+CPLUS = $(TARGET_CXX)
+CONLY = $(TARGET_CC)
+
+# -soname is necessary for proper linkage to TBB prebuilt libraries when building application with Android SDK
+LIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY) -z relro -z now
+
+# pie is necessary for test executables to work and might be removed if newer NDK will add it implicitly
+PIE_FLAG = -pie
+ifeq ($(APP_PIE), false)
+    PIE_FLAG=
+endif
+
+LINK_FLAGS = -Wl,-rpath-link=. -rdynamic 
+C_FLAGS = $(CPLUS_FLAGS)
+
+ifeq ($(cfg), release)
+    SDL_FLAGS += -D_FORTIFY_SOURCE=2
+    CPLUS_FLAGS = -O2
+endif
+ifeq ($(cfg), debug)
+    CPLUS_FLAGS = -g -O0 $(DEFINE_KEY)TBB_USE_DEBUG
+endif
+
+CPLUS_FLAGS += $(DEFINE_KEY)USE_PTHREAD $(DEFINE_KEY)_GLIBCXX_HAVE_FENV_H
+
+ifneq (,$(findstring $(arch),ia32 intel64))
+    CPLUS_FLAGS += $(DEFINE_KEY)DO_ITT_NOTIFY
+endif
+
+ifeq (0, $(dynamic_load))
+     CPLUS_FLAGS += $(DEFINE_KEY)__TBB_DYNAMIC_LOAD_ENABLED=0
+endif
+
+# Paths to the NDK prebuilt tools and libraries
+CPLUS_FLAGS    += --sysroot=$(SYSROOT)
+LIB_LINK_FLAGS += --sysroot=$(SYSROOT)
+LIBS           = -L$(CPLUS_LIB_PATH) -lc++_shared
+ifneq (,$(findstring $(ndk_version),r12 r12b r13 r13b r14 r14b))
+    LIBS +=  -lc++abi
+    ifeq (arm,$(arch))
+        LIBS += -lunwind 
+    endif
+endif
+
+ifeq (arm,$(arch))
+    CPLUS_FLAGS += $(DEFINE_KEY)__TBB_64BIT_ATOMICS=0
+endif
+
+CPLUS_FLAGS += $(TARGET_CFLAGS)
+LIB_LINK_FLAGS += $(TARGET_CFLAGS) $(TARGET_LDFLAGS) -L$(CPLUS_LIB_PATH)
+
+#------------------------------------------------------------------------------
+# Setting assembler data.
+#------------------------------------------------------------------------------
+TBB_ASM.OBJ=
+MALLOC_ASM.OBJ=
+
+ASM = $(tbb_tool_prefix)as
+ifeq (intel64,$(arch))
+    ASM_FLAGS += --64
+endif
+ifeq (ia32,$(arch))
+    ASM_FLAGS += --32
+endif
+ifeq ($(cfg),debug)
+    ASM_FLAGS += -g
+endif
+
+ASSEMBLY_SOURCE=$(arch)-gas
+#------------------------------------------------------------------------------
+# End of setting assembler data.
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+
+M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions
+
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
diff --git a/build/android.gcc.inc b/build/android.gcc.inc
index fd4607a..973ca3f 100644
--- a/build/android.gcc.inc
+++ b/build/android.gcc.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 
 COMPILE_ONLY = -c -MMD
@@ -45,15 +45,9 @@ ifeq ($(APP_PIE), false)
     PIE_FLAG=
 endif
 
-LINK_FLAGS = -Wl,-rpath-link=. -rdynamic $(PIE_FLAG)
+LINK_FLAGS = -Wl,-rpath-link=. -rdynamic 
 C_FLAGS = $(CPLUS_FLAGS)
 
-# gcc 4.4 and higher support C++11
-ifneq (,$(shell $(CPLUS) -dumpversion | egrep  "^(4\.[4-9]|[5-9])"))
-    # On Android/gcc 4.4.3, -std=c++0x causes ::int64_t and ::uint64_t to be undefined.
-    CPP11_FLAGS = -std=gnu++0x $(DEFINE_KEY)_TBB_CPP0X
-endif
-
 ifeq ($(cfg), release)
     CPLUS_FLAGS = -O2
 endif
@@ -67,14 +61,6 @@ ifneq (,$(findstring $(arch),ia32 intel64))
     CPLUS_FLAGS += $(DEFINE_KEY)DO_ITT_NOTIFY
 endif
 
-ifneq (0, $(dlopen_workaround))
-    CPLUS_FLAGS += $(DEFINE_KEY)__TBB_USE_DLOPEN_REENTRANCY_WORKAROUND=1
-    CPLUS_FLAGS += $(DEFINE_KEY)__TBB_USE_DLOPEN_MAIN_PROGRAM_WORKAROUND=1
-else
-    CPLUS_FLAGS += $(DEFINE_KEY)__TBB_USE_DLOPEN_REENTRANCY_WORKAROUND=0
-    CPLUS_FLAGS += $(DEFINE_KEY)__TBB_USE_DLOPEN_MAIN_PROGRAM_WORKAROUND=0
-endif
-
 ifeq (0, $(dynamic_load))
      CPLUS_FLAGS += $(DEFINE_KEY)__TBB_DYNAMIC_LOAD_ENABLED=0
 endif
@@ -85,25 +71,17 @@ CPLUS_FLAGS    += --sysroot=$(SYSROOT)
 LIB_LINK_FLAGS += --sysroot=$(SYSROOT)
 LIBS           = -L$(CPLUS_LIB_PATH) -lgnustl_shared
 
-# This causes CPP11_FLAGS to be issued twice for test_lambda.cpp
-# TODO: Fix this in general for all platforms once the correct strategy is determined.
-ifneq (00,$(lambdas)$(cpp0x))
-    CXX_ONLY_FLAGS += $(CPP11_FLAGS)
-endif
-
 ifeq (ia32,$(arch))
     # TODO: Determine best setting of -march and add to CPLUS_FLAGS
     CPLUS_FLAGS += -m32 
     LIB_LINK_FLAGS += -m32
-endif
-
-ifeq (intel64,$(arch))
+else ifeq (intel64,$(arch))
     CPLUS_FLAGS += -m64
     LIB_LINK_FLAGS += -m64
-endif
-
-ifeq (arm,$(findstring arm,$(arch)))
+else ifeq (arm,$(arch))
     CPLUS_FLAGS += -march=armv7-a $(DEFINE_KEY)TBB_USE_GCC_BUILTINS=1 $(DEFINE_KEY)__TBB_64BIT_ATOMICS=0
+else ifeq (arm64,$(arch))
+    CPLUS_FLAGS += -march=armv8-a
 endif
 
 #------------------------------------------------------------------------------
diff --git a/build/android.icc.inc b/build/android.icc.inc
new file mode 100644
index 0000000..64da9fd
--- /dev/null
+++ b/build/android.icc.inc
@@ -0,0 +1,120 @@
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+
+COMPILE_ONLY = -c -MMD
+PREPROC_ONLY = -E -x c++
+INCLUDE_KEY = -I
+DEFINE_KEY = -D
+OUTPUT_KEY = -o #
+OUTPUTOBJ_KEY = -o #
+PIC_KEY = -fPIC
+WARNING_AS_ERROR_KEY = -Werror
+WARNING_KEY =
+TEST_WARNING_KEY = -Wshadow -Woverloaded-virtual -Wextra
+
+WARNING_SUPPRESS = -Wno-parentheses -Wno-non-virtual-dtor
+DYLIB_KEY = -shared
+EXPORT_KEY = -Wl,--version-script,
+LIBDL = -ldl
+
+CPLUS = icpc
+CONLY = icc
+
+# -soname is necessary for proper linkage to TBB prebuilt libraries when building application with Android SDK
+LIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY)
+
+# pie is necessary for test executables to work and might be removed if newer NDK will add it implicitly
+PIE_FLAG = -pie
+ifeq ($(APP_PIE), false)
+    PIE_FLAG=
+endif
+
+LINK_FLAGS = -Wl,-rpath-link=. -rdynamic 
+C_FLAGS = $(CPLUS_FLAGS)
+
+ifeq ($(cfg), release)
+    CPLUS_FLAGS = -O2
+endif
+ifeq ($(cfg), debug)
+    CPLUS_FLAGS = -g -O0 $(DEFINE_KEY)TBB_USE_DEBUG
+endif
+
+CPLUS_FLAGS += $(DEFINE_KEY)USE_PTHREAD $(DEFINE_KEY)_GLIBCXX_HAVE_FENV_H 
+
+ifneq (,$(findstring $(arch),ia32 intel64))
+    CPLUS_FLAGS += $(DEFINE_KEY)DO_ITT_NOTIFY
+endif
+
+ifeq (0, $(dynamic_load))
+     CPLUS_FLAGS += $(DEFINE_KEY)__TBB_DYNAMIC_LOAD_ENABLED=0
+endif
+
+
+# Paths to the NDK prebuilt tools and libraries
+CPLUS_FLAGS    += --sysroot=$(SYSROOT)
+LIB_LINK_FLAGS += --sysroot=$(SYSROOT)
+# the -static-intel flag is to remove the need to copy Intel-specific libs to the device.
+LIBS           = -L$(CPLUS_LIB_PATH) -lgnustl_shared -static-intel
+
+ifeq (ia32,$(arch))
+    # TODO: Determine best setting of -march and add to CPLUS_FLAGS
+    CPLUS_FLAGS += -m32 -march=pentium4 -falign-stack=maintain-16-byte
+    LIB_LINK_FLAGS += -m32
+else
+    ifeq (intel64,$(arch))
+        CPLUS_FLAGS += -m64
+        LIB_LINK_FLAGS += -m64
+    endif
+endif
+
+ifeq (arm,$(findstring arm,$(arch)))
+    $(error "Unsupported architecture $(arch) for icc compiler")
+endif
+
+#------------------------------------------------------------------------------
+# Setting assembler data.
+#------------------------------------------------------------------------------
+TBB_ASM.OBJ=
+MALLOC_ASM.OBJ=
+
+ASM = $(tbb_tool_prefix)as
+ifeq (intel64,$(arch))
+    ASM_FLAGS += --64
+endif
+ifeq (ia32,$(arch))
+    ASM_FLAGS += --32
+endif
+ifeq ($(cfg),debug)
+    ASM_FLAGS += -g
+endif
+
+ASSEMBLY_SOURCE=$(arch)-gas
+#------------------------------------------------------------------------------
+# End of setting assembler data.
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+
+M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions
+
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
diff --git a/build/android.inc b/build/android.inc
index fbe68a7..aeeb68c 100644
--- a/build/android.inc
+++ b/build/android.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 #
 # Extra gmake command-line parameters for use with Android:
@@ -28,33 +28,34 @@ ifeq (android,$(findstring android,$(tbb_os)))
     $(error TBB only supports cross-compilation for Android. Specify "target=android" instead.)
 endif
 
-ifneq ("command line","$(origin arch)")
-    ifeq (icc,$(compiler))
-        export COMPILER_VERSION := ICC: $(shell icc -V </dev/null 2>&1 | grep 'Version')
-        ifneq (,$(findstring IA-32, $(COMPILER_VERSION)))
-            export arch:=ia32
-        else
-            $(error "No support for Android in $(COMPILER_VERSION)")
-        endif
-
-    else
-        ifdef ANDROID_SERIAL
-            uname_m:=$(shell adb shell uname -m)
-            ifeq (i686,$(uname_m))
+ifndef BUILDING_PHASE
+    ifneq ("command line","$(origin arch)")
+        ifeq (icc,$(compiler))
+            export COMPILER_VERSION := ICC: $(shell icc -V </dev/null 2>&1 | grep 'Version')
+            ifneq (,$(findstring running on IA-32, $(COMPILER_VERSION)))
                 export arch:=ia32
+            else ifneq (,$(findstring running on Intel(R) 64, $(COMPILER_VERSION)))
+                export arch:=intel64
             else
-                export arch:=$(uname_m)
+                $(error "No support for Android in $(COMPILER_VERSION)")
             endif
+
         else
-            ifndef arch
-                $(error "No target architecture specified and \'ANDROID_SERIAL\' environment variable specifying target device not set")
+            ifdef ANDROID_SERIAL
+                uname_m:=$(shell adb shell uname -m)
+                ifeq (i686,$(uname_m))
+                    export arch:=ia32
+                else
+                    export arch:=$(uname_m)
+                endif
             endif
         endif
     endif
 endif
 
-# Many OS versions (Android 4.0.[0-3] for example) need workaround for dlopen to avoid non-recursive loader lock hang
-export dlopen_workaround = 1
+ifeq ("$(arch)","")
+    $(error "No target architecture specified and \'ANDROID_SERIAL\' environment variable specifying target device not set")
+endif
 
 # Android platform only supported from TBB 4.1 forward
 NO_LEGACY_TESTS = 1
diff --git a/build/android.linux.inc b/build/android.linux.inc
index ab40bcc..7d02243 100644
--- a/build/android.linux.inc
+++ b/build/android.linux.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 ####### Detections and Commands ###############################################
 
@@ -29,17 +29,14 @@ ifeq (64,$(findstring 64,$(arch)))
     def_prefix = lin64
 endif
 
-gcc_version = $(shell $(tbb_tool_prefix)g++ -dumpversion)
-
-ifdef ANDROID_NDK_ROOT
-    $(warning "NDK version $(ANDROID_NDK_ROOT)")
-    ndk_version:= $(lastword $(subst -, ,$(ANDROID_NDK_ROOT)))
+ifdef ndk_version
+    $(warning "NDK version $(ndk_version)")
 else
     $(warning "NDK version not set in environment, using \'unknown\' instead.")
     ndk_version:=unknown
 endif
 
-export runtime:=$(target)_cc$(gcc_version)_NDK$(ndk_version)_version_$(target_os_version)
+export runtime:=$(target)_NDK$(ndk_version)_version_$(target_os_version)
 
 AR = $(tbb_tool_prefix)ar
 MAKE_VERSIONS=sh $(tbb_root)/build/version_info_android.sh $(VERSION_FLAGS) >version_string.ver
diff --git a/build/android.linux.launcher.sh b/build/android.linux.launcher.sh
index 5de025c..b3cf876 100644
--- a/build/android.linux.launcher.sh
+++ b/build/android.linux.launcher.sh
@@ -1,22 +1,22 @@
 #!/bin/sh
 #
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # Usage:
 # android.linux.launcher.sh [-v] [-q] [-s] [-r <repeats>] [-u] [-l <library>] <executable> <arg1> <arg2> <argN>
@@ -77,18 +77,18 @@ trap do_trap_cleanup INT  # if someone hits control-c, cleanup the device
 # Collect the list of files to transfer to the target device, starting with executable itself.
 fnamelist="$exename" #
 # Add the C++ standard library from the NDK, which is required for all tests on Android.
-if [ ! -z "${LIB_GNU_STL_ANDROID}" ]; then #
-	fnamelist="$fnamelist ${LIB_GNU_STL_ANDROID}/libgnustl_shared.so" #
+if [ ! -z "${LIB_STL_ANDROID}" ]; then #
+	fnamelist="$fnamelist ${LIB_STL_ANDROID}" #
 else #
-	fnamelist="$fnamelist libgnustl_shared.so" #
+	fnamelist="$fnamelist libc++_shared.so" #
 fi #
 # Find the TBB libraries and add them to the list.
 # Add TBB libraries from the current directory that contains libtbb* files
-files="$(/bin/ls libtbb* 2> /dev/null)" #
+files="$(ls libtbb* 2> /dev/null)" #
 [ -z "$files" ] || fnamelist="$fnamelist $files" #
 # Add any libraries built for specific tests.
 exeroot=${exename%\.*} #
-files="$(/bin/ls ${exeroot}*.so ${exeroot}*.so.* 2> /dev/null)" #
+files="$(ls ${exeroot}*.so ${exeroot}*.so.* 2> /dev/null)" #
 [ -z "$files" ] || fnamelist="$fnamelist $files" #
 # TODO: Add extra libraries from the Intel(R) Compiler for certain tests
 # found=$(echo $exename | egrep 'test_malloc_atexit\|test_malloc_lib_unload' 2> /dev/null)
@@ -137,6 +137,7 @@ for fullname in "$@"; do { #
 [ -z "$ldpreload" ] || run_prefix="LD_PRELOAD='$ldpreload' $run_prefix" #
 [ $verbose ] && echo Running $run_prefix ./$exename $* #
 run_env="$run_env cd $targetdir; export LD_LIBRARY_PATH=." #
+[ -z "$VIRTUAL_MACHINE" ] || run_env="$run_env; export VIRTUAL_MACHINE=$VIRTUAL_MACHINE" #
 # The return_code file is the best way found to return the status of the test execution when using adb shell.
 eval 'adb shell "$run_env; $run_prefix ./$exename $* || echo -n \$? >error_code"' "${OUTPUT}" #
 # Capture the return code string and remove the trailing \r from the return_code file contents
diff --git a/build/android.macos.inc b/build/android.macos.inc
index 2f1b348..bf84578 100644
--- a/build/android.macos.inc
+++ b/build/android.macos.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 ####### Detections and Commands ###############################################
 
@@ -29,17 +29,14 @@ ifeq (64,$(findstring 64,$(arch)))
     def_prefix = lin64
 endif
 
-gcc_version = $(shell $(tbb_tool_prefix)g++ -dumpversion)
-
-ifdef ANDROID_NDK_ROOT
-    $(warning "NDK version $(ANDROID_NDK_ROOT)")
-    ndk_version:= $(lastword $(subst -, ,$(ANDROID_NDK_ROOT)))
+ifdef ndk_version
+    $(warning "NDK version $(ndk_version)")
 else
     $(warning "NDK version not set in environment, using \'unknown\' instead.")
     ndk_version:=unknown
 endif
 
-export runtime:=$(target)_cc$(gcc_version)_NDK$(ndk_version)_version_$(target_os_version)
+export runtime:=$(target)_NDK$(ndk_version)_version_$(target_os_version)
 
 AR = $(tbb_tool_prefix)ar
 MAKE_VERSIONS=sh $(tbb_root)/build/version_info_android.sh $(VERSION_FLAGS) >version_string.ver
diff --git a/build/android.windows.inc b/build/android.windows.inc
index 742f240..fec1dbe 100644
--- a/build/android.windows.inc
+++ b/build/android.windows.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 ####### Detections and Commands ###############################################
 
@@ -29,17 +29,14 @@ ifeq (64,$(findstring 64,$(arch)))
     def_prefix = lin64
 endif
 
-gcc_version = $(shell $(tbb_tool_prefix)g++ -dumpversion)
-
-ifdef ANDROID_NDK_ROOT
-    $(warning "NDK version $(ANDROID_NDK_ROOT)")
-    ndk_version:= $(lastword $(subst -, ,$(ANDROID_NDK_ROOT)))
+ifdef ndk_version
+    $(warning "NDK version $(ndk_version)")
 else
     $(warning "NDK version not set in environment, using \'unknown\' instead.")
     ndk_version:=unknown
 endif
 
-export runtime:=$(target)_cc$(gcc_version)_NDK$(ndk_version)_version_$(target_os_version)
+export runtime:=$(target)_NDK$(ndk_version)_version_$(target_os_version)
 
 AR = $(tbb_tool_prefix)ar
 MAKE_VERSIONS = cmd /C cscript /nologo /E:jscript $(subst \,/,$(tbb_root))/build/version_info_windows.js $(CONLY) $(arch) $(subst \,/,"$(VERSION_FLAGS)") > version_string.ver
diff --git a/build/big_iron.inc b/build/big_iron.inc
index 9bafc78..efed212 100644
--- a/build/big_iron.inc
+++ b/build/big_iron.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 #------------------------------------------------------------------------------
 # Defines settings for building the TBB run-time as a static library.
diff --git a/build/common.inc b/build/common.inc
index 6aa702d..bbffa71 100644
--- a/build/common.inc
+++ b/build/common.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 ifndef tbb_os
 
@@ -43,6 +43,25 @@ ifeq ($(tbb_cpf),1)
   export CPF_SUFFIX ?=_preview
 endif
 
+ifdef cpp0x
+    $(warning "Warning: deprecated cpp0x=$(cpp0x) is used, stdver must be used instead. Building in stdver=c++0x mode.")
+    export stdver?=c++0x
+    override cpp0x=
+endif
+
+ifneq (,$(stdver))
+    ifeq (,$(findstring ++, $(stdver)))
+        $(warning "Warning: unexpected stdver=$(stdver) is used.")
+    endif
+
+    CXX_STD_FLAGS=-std=$(stdver) -D_TBB_CPP0X
+endif
+
+# The requested option is added unconditionally.
+# If it is not supported, a compiler warning or error is expected.
+# Note that CXX_STD_FLAGS can be changed in <os>.<compiler>.inc.
+CXX_ONLY_FLAGS+=$(CXX_STD_FLAGS)
+
 ifeq (,$(wildcard $(tbb_root)/build/$(tbb_os).inc))
   $(error "$(tbb_os)" is not supported. Add build/$(tbb_os).inc file with os-specific settings )
 endif
@@ -81,27 +100,23 @@ cross_cfg = $(if $(crosstest),$(call flip_cfg,$(1)),$(1))
 # Setting default configuration to release
 cfg?=release
 
+compiler_name=$(notdir $(compiler))
 ifdef BUILDING_PHASE
- # No lambdas or other C++0x extensions by default for compilers that implement them as experimental features
- # TODO: it should become unnecessary when all relevant tests are "moved" to the TEST_TBB_CPP11 set
- lambdas ?= 0
- cpp0x ?= 0
-
  ifndef target
   target:=$(tbb_os)
  endif
  # process host/target compiler-dependent build configuration
- ifeq (,$(wildcard $(tbb_root)/build/$(target).$(compiler).inc))
-  $(error "$(compiler)" is not supported on $(target). Add build/$(target).$(compiler).inc file with compiler-specific settings. )
+ ifeq (,$(wildcard $(tbb_root)/build/$(target).$(compiler_name).inc))
+  $(error "$(compiler_name)" is not supported on $(target). Add build/$(target).$(compiler_name).inc file with compiler-specific settings. )
  endif
- include $(tbb_root)/build/$(target).$(compiler).inc
+ include $(tbb_root)/build/$(target).$(compiler_name).inc
 endif
 
 ifneq ($(BUILDING_PHASE),1)
  # definitions for top-level Makefiles
  origin_build_dir:=$(origin tbb_build_dir)
  tbb_build_dir?=$(tbb_root)$(SLASH)build
- export tbb_build_prefix?=$(tbb_os)_$(arch)_$(compiler)_$(runtime)$(CPF_SUFFIX)
+ export tbb_build_prefix?=$(tbb_os)_$(arch)_$(compiler_name)_$(runtime)$(CPF_SUFFIX)
  work_dir=$(tbb_build_dir)$(SLASH)$(tbb_build_prefix)
 endif  # BUILDING_PHASE != 1
 
diff --git a/build/common_rules.inc b/build/common_rules.inc
index 410bd9a..8e758a4 100644
--- a/build/common_rules.inc
+++ b/build/common_rules.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 
 ifeq ($(tbb_strict),1)
@@ -51,7 +51,6 @@ CPLUS_FLAGS += $(DEFINE_KEY)__TBB_CPF_BUILD=1
 endif
 LINK_FLAGS += $(LDFLAGS)
 LIB_LINK_FLAGS += $(LDFLAGS)
-CPLUS_FLAGS_NOSTRICT = $(subst -strict-ansi,-ansi,$(CPLUS_FLAGS))
 
 LIB_LINK_CMD ?= $(CPLUS) $(PIC_KEY)
 ifeq ($(origin LIB_OUTPUT_KEY), undefined)
@@ -92,7 +91,7 @@ endef
 LINK_FILES+=$(TEST_LIBS)
 # Rule for generating executable test
 %.$(TEST_EXT): %.$(OBJ) $(TEST_LIBS) $(TEST_PREREQUISITE) $(if $(use_proxy),$(PROXY.LIB))
-	$(call make-test-binary,$@,$< $(LINK_FILES))
+	$(call make-test-binary,$@,$< $(LINK_FILES) $(PIE_FLAG))
 
 # Rules for generating a test DLL
 %_dll.$(DLL): LINK_FLAGS += $(PIC_KEY) $(DYLIB_KEY)
@@ -112,7 +111,8 @@ LINK_FILES+=$(TEST_LIBS)
 	$(ASM) $(ASM_FLAGS) -o $@ $*.tmp
 
 # Rule for generating .E file if needed for visual inspection
-# Note that due to mapping for ICL all uses of PREPROC_ONLY should be immediately followed by a file name
+# Note that ICL treats an argument after PREPROC_ONLY as a file to open,
+# so all uses of PREPROC_ONLY should be immediately followed by a file name
 %.E: %.cpp
 	$(CPLUS) $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(INCLUDES) $(PREPROC_ONLY) $< >$@
 
@@ -149,7 +149,7 @@ $(TBB.MANIFEST):
 version_string.ver: $(TBB.MANIFEST)
 	$(MAKE_VERSIONS)
 	cmd /C "echo #define TBB_MANIFEST 1 >> version_string.ver"
-# TODO: fix parallel build by writting to a temporary file and rename it when complete
+# TODO: fix parallel build by writing to a temporary file and rename it when complete
 else
 # TODO: make version strings directly representative for all the libraries
 version_string.ver:
diff --git a/build/detect.js b/build/detect.js
index 9315fe2..a5b5d82 100644
--- a/build/detect.js
+++ b/build/detect.js
@@ -1,181 +1,188 @@
-// Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+// Copyright (c) 2005-2017 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
 //
-// This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-// you can redistribute it and/or modify it under the terms of the GNU General Public License
-// version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-// Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 //
-// As a special exception,  you may use this file  as part of a free software library without
-// restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-// functions from this file, or you compile this file and link it with other files to produce
-// an executable,  this file does not by itself cause the resulting executable to be covered
-// by the GNU General Public License. This exception does not however invalidate any other
-// reasons why the executable file might be covered by the GNU General Public License.
-
-function doWork() {
-		var WshShell = WScript.CreateObject("WScript.Shell");
-
-		var fso = new ActiveXObject("Scripting.FileSystemObject");
 
-		var tmpExec;
-		tmpExec = WshShell.Run("cmd /c echo int main(){return 0;} >detect.c", 0, true);
+function readAllFromFile(fname) {
+    var fso = new ActiveXObject("Scripting.FileSystemObject");
+    var file = null;
+    try {
+        file = fso.OpenTextFile(fname, 1, 0);
+        return (file.readAll());
+    } finally {
+        // Close the file in the finally section to guarantee that it will be closed in any case
+        // (if the exception is thrown or not).
+        file.Close();
+    }
+}
 
-		// The next block deals with GCC (MinGW)
-		if ( WScript.Arguments.Count() > 1 && WScript.Arguments(1) == "gcc" ) {
-			if ( WScript.Arguments(0) == "/arch" ) {
-				// Get predefined macros
-				tmpExec = WshShell.Run("cmd /C gcc -dM -E detect.c > detect.map", 0, true);
-				var file = fso.OpenTextFile("detect.map", 1, 0);
-				var defs = file.readAll();
-				file.Close();
+function doWork() {
+    var WshShell = WScript.CreateObject("WScript.Shell");
 
-				//detect target architecture
-				var intel64=/x86_64|amd64/mgi;
-				var ia32=/i386/mgi;
-				if ( defs.match(intel64) ) {
-					WScript.Echo( "intel64" );
-				} else if ( defs.match(ia32) ) {
-					WScript.Echo( "ia32" );
-				} else {
-					WScript.Echo( "unknown" );
-				}
-			} else {
-				tmpExec = WshShell.Exec("gcc -dumpversion");
-				var gcc_version = tmpExec.StdOut.ReadLine();
-				if ( WScript.Arguments(0) == "/runtime" ) {
-					WScript.Echo( "mingw"+gcc_version );
-				}
-				else if ( WScript.Arguments(0) == "/minversion" ) {
-					// Comparing strings, not numbers; will not work for two-digit versions
-					if ( gcc_version >= WScript.Arguments(2) ) {
-						WScript.Echo( "ok" );
-					} else {
-						WScript.Echo( "fail" );
-					}
-				}
-			}
-			return;
-		}
+    var tmpExec = WshShell.Run("cmd /c echo int main(){return 0;} >detect.c", 0, true);
 
-		//Compile binary
-		tmpExec = WshShell.Exec("cl /MD detect.c /link /MAP");
-		while ( tmpExec.Status == 0 ) {
-			WScript.Sleep(100);
-		}
-		//compiler banner that includes version and target arch was printed to stderr
-		var clVersion = tmpExec.StdErr.ReadAll();
+    // The next block deals with GCC (MinGW)
+    if (WScript.Arguments.Count() > 1) {
+        var compilerPath = WScript.Arguments(1);
+        // The RegExp matches everything up to and including the last slash (it uses a greedy approach.)
+        var compilerName = compilerPath.replace(/^.*[\/\\]/, "");
+        if (compilerName.match(/gcc/i) != null) {
+            if (WScript.Arguments(0) == "/arch") {
+                // Get predefined macros
+                tmpExec = WshShell.Run("cmd /C " + compilerPath + " -dM -E detect.c > detect.map", 0, true);
+                var defs = readAllFromFile("detect.map");
+                //detect target architecture
+                var intel64 = /x86_64|amd64/mgi;
+                var ia32 = /i386/mgi;
+                if (defs.match(intel64)) {
+                    WScript.Echo("intel64");
+                } else if (defs.match(ia32)) {
+                    WScript.Echo("ia32");
+                } else {
+                    WScript.Echo("unknown");
+                }
+            } else {
+                tmpExec = WshShell.Exec(compilerPath + " -dumpversion");
+                var gccVersion = tmpExec.StdOut.ReadLine();
+                if (WScript.Arguments(0) == "/runtime") {
+                    WScript.Echo("mingw" + gccVersion);
+                }
+                else if (WScript.Arguments(0) == "/minversion") {
+                    // Comparing strings, not numbers; will not work for two-digit versions
+                    if (gccVersion >= WScript.Arguments(2)) {
+                        WScript.Echo("ok");
+                    } else {
+                        WScript.Echo("fail");
+                    }
+                }
+            }
+            return;
+        }
+    }
 
-		if ( WScript.Arguments(0) == "/arch" ) {
-			//detect target architecture
-			var intel64=/AMD64|EM64T|x64/mgi;
-			var ia32=/[80|\s]x86/mgi;
-			var arm=/ARM/mgi;
-			if ( clVersion.match(intel64) ) {
-				WScript.Echo( "intel64" );
-			} else if ( clVersion.match(ia32) ) {
-				WScript.Echo( "ia32" );
-			} else if ( clVersion.match(arm) ) {
-				WScript.Echo( "armv7" );
-			} else {
-				WScript.Echo( "unknown" );
-			}
-			return;
-		}
+    //Compile binary
+    tmpExec = WshShell.Exec("cl /MD detect.c /link /MAP");
+    while (tmpExec.Status == 0) {
+        WScript.Sleep(100);
+    }
+    //compiler banner that includes version and target arch was printed to stderr
+    var clVersion = tmpExec.StdErr.ReadAll();
 
-		if ( WScript.Arguments(0) == "/runtime" ) {
-			//read map-file
-			var map = fso.OpenTextFile("detect.map", 1, 0);
-			var mapContext = map.readAll();
-			map.Close();
+    if (WScript.Arguments(0) == "/arch") {
+        //detect target architecture
+        var intel64 = /AMD64|EM64T|x64/mgi;
+        var ia32 = /[80|\s]x86/mgi;
+        var arm = /ARM/mgi;
+        if (clVersion.match(intel64)) {
+            WScript.Echo("intel64");
+        } else if (clVersion.match(ia32)) {
+            WScript.Echo("ia32");
+        } else if (clVersion.match(arm)) {
+            WScript.Echo("armv7");
+        } else {
+            WScript.Echo("unknown");
+        }
+        return;
+    }
 
-			//detect runtime
-			var vc71=/MSVCR71\.DLL/mgi;
-			var vc80=/MSVCR80\.DLL/mgi;
-			var vc90=/MSVCR90\.DLL/mgi;
-			var vc100=/MSVCR100\.DLL/mgi;
-			var vc110=/MSVCR110\.DLL/mgi;
-			var vc120=/MSVCR120\.DLL/mgi;
-			var vc140=/VCRUNTIME140\.DLL/mgi;
-			var psdk=/MSVCRT\.DLL/mgi;
-			if ( mapContext.match(vc71) ) {
-				WScript.Echo( "vc7.1" );
-			} else if ( mapContext.match(vc80) ) {
-				WScript.Echo( "vc8" );
-			} else if ( mapContext.match(vc90) ) {
-				WScript.Echo( "vc9" );
-			} else if ( mapContext.match(vc100) ) {
-				WScript.Echo( "vc10" );
-			} else if ( mapContext.match(vc110) ) {
-				WScript.Echo( "vc11" );
-			} else if ( mapContext.match(vc120) ) {
-				WScript.Echo( "vc12" );
-			} else if ( mapContext.match(vc140) ) {
-				WScript.Echo( "vc14" );
-			} else {
-				WScript.Echo( "unknown" );
-			}
-			return;
-		}
+    if (WScript.Arguments(0) == "/runtime") {
+        //read map-file
+        var mapContext = readAllFromFile("detect.map");
+        //detect runtime
+        var vc71 = /MSVCR71\.DLL/mgi;
+        var vc80 = /MSVCR80\.DLL/mgi;
+        var vc90 = /MSVCR90\.DLL/mgi;
+        var vc100 = /MSVCR100\.DLL/mgi;
+        var vc110 = /MSVCR110\.DLL/mgi;
+        var vc120 = /MSVCR120\.DLL/mgi;
+        var vc140 = /VCRUNTIME140\.DLL/mgi;
+        var psdk = /MSVCRT\.DLL/mgi;
+        if (mapContext.match(vc71)) {
+            WScript.Echo("vc7.1");
+        } else if (mapContext.match(vc80)) {
+            WScript.Echo("vc8");
+        } else if (mapContext.match(vc90)) {
+            WScript.Echo("vc9");
+        } else if (mapContext.match(vc100)) {
+            WScript.Echo("vc10");
+        } else if (mapContext.match(vc110)) {
+            WScript.Echo("vc11");
+        } else if (mapContext.match(vc120)) {
+            WScript.Echo("vc12");
+        } else if (mapContext.match(vc140)) {
+            WScript.Echo("vc14");
+        } else {
+            WScript.Echo("unknown");
+        }
+        return;
+    }
 
-		if ( WScript.Arguments(0) == "/minversion" ) {
-			var compiler_version;
-			if ( WScript.Arguments(1) == "cl" ) {
-				compiler_version = clVersion.match(/Compiler Version ([0-9.]+)\s/mi)[1];
-				// compiler_version is in xx.xx.xxxxx.xx format, i.e. a string.
-				// It will compare well with major.minor versions where major has two digits,
-				// which is sufficient as the versions of interest start from 13 (for VC7).
-			} else if ( WScript.Arguments(1) == "icl" ) {
-				// Get predefined ICL macros
-				tmpExec = WshShell.Run("cmd /C icl /QdM /E detect.c > detect.map", 0, true);
-				var file = fso.OpenTextFile("detect.map", 1, 0);
-				var defs = file.readAll();
-				file.Close();
-				// In #define __INTEL_COMPILER XXYY, XX is the major ICL version, YY is minor
-				compiler_version = defs.match(/__INTEL_COMPILER[ \t]*([0-9]+).*$/mi)[1]/100;
-				// compiler version is a number; it compares well with another major.minor
-				// version number, where major has one, two, and perhaps more digits (9.1, 11, etc).
-			}
-			if ( compiler_version >= WScript.Arguments(2) ) {
-				WScript.Echo( "ok" );
-			} else {
-				WScript.Echo( "fail" );
-			}
-			return;
-		}
+    if (WScript.Arguments(0) == "/minversion") {
+        var compilerVersion;
+        if (WScript.Arguments(1) == "cl") {
+            compilerVersion = clVersion.match(/Compiler Version ([0-9.]+)\s/mi)[1];
+            // compilerVersion is in xx.xx.xxxxx.xx format, i.e. a string.
+            // It will compare well with major.minor versions where major has two digits,
+            // which is sufficient as the versions of interest start from 13 (for VC7).
+        } else if (WScript.Arguments(1) == "icl") {
+            // Get predefined ICL macros
+            tmpExec = WshShell.Run("cmd /C icl /QdM /E detect.c > detect.map", 0, true);
+            var defs = readAllFromFile("detect.map");
+            // In #define __INTEL_COMPILER XXYY, XX is the major ICL version, YY is minor
+            compilerVersion = defs.match(/__INTEL_COMPILER[ \t]*([0-9]+).*$/mi)[1] / 100;
+            // compiler version is a number; it compares well with another major.minor
+            // version number, where major has one, two, and perhaps more digits (9.1, 11, etc).
+        }
+        if (compilerVersion >= WScript.Arguments(2)) {
+            WScript.Echo("ok");
+        } else {
+            WScript.Echo("fail");
+        }
+        return;
+    }
 }
 
 function doClean() {
-		var fso = new ActiveXObject("Scripting.FileSystemObject");
-		// delete intermediate files
-		if ( fso.FileExists("detect.c") )
-			fso.DeleteFile ("detect.c", false);
-		if ( fso.FileExists("detect.obj") )
-			fso.DeleteFile ("detect.obj", false);
-		if ( fso.FileExists("detect.map") )
-			fso.DeleteFile ("detect.map", false);
-		if ( fso.FileExists("detect.exe") )
-			fso.DeleteFile ("detect.exe", false);
-		if ( fso.FileExists("detect.exe.manifest") )
-			fso.DeleteFile ("detect.exe.manifest", false);
+    var fso = new ActiveXObject("Scripting.FileSystemObject");
+    // delete intermediate files
+    if (fso.FileExists("detect.c"))
+        fso.DeleteFile("detect.c", false);
+    if (fso.FileExists("detect.obj"))
+        fso.DeleteFile("detect.obj", false);
+    if (fso.FileExists("detect.map"))
+        fso.DeleteFile("detect.map", false);
+    if (fso.FileExists("detect.exe"))
+        fso.DeleteFile("detect.exe", false);
+    if (fso.FileExists("detect.exe.manifest"))
+        fso.DeleteFile("detect.exe.manifest", false);
 }
 
-if ( WScript.Arguments.Count() > 0 ) {
-	
-	try {
-		doWork();
-	} catch( error ) {
-		WScript.Echo( "unknown" );
-	}
-	doClean();
+if (WScript.Arguments.Count() > 0) {
+
+    try {
+        doWork();
+    } catch (error) {
+        WScript.Echo("unknown");
+    }
+    doClean();
 
 } else {
-	WScript.Echo( "Supported options:\n"
-	              + "\t/arch [compiler]\n"
-	              + "\t/runtime [compiler]\n"
-	              + "\t/minversion compiler version" );
+    WScript.Echo("Supported options:\n"
+                  + "\t/arch [compiler]\n"
+                  + "\t/runtime [compiler]\n"
+                  + "\t/minversion compiler version");
 }
 
diff --git a/build/generate_tbbvars.bat b/build/generate_tbbvars.bat
index 2eb47c1..41d207d 100644
--- a/build/generate_tbbvars.bat
+++ b/build/generate_tbbvars.bat
@@ -1,22 +1,22 @@
 @echo off
 REM
-REM Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+REM Copyright (c) 2005-2017 Intel Corporation
+REM
+REM Licensed under the Apache License, Version 2.0 (the "License");
+REM you may not use this file except in compliance with the License.
+REM You may obtain a copy of the License at
+REM
+REM     http://www.apache.org/licenses/LICENSE-2.0
+REM
+REM Unless required by applicable law or agreed to in writing, software
+REM distributed under the License is distributed on an "AS IS" BASIS,
+REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+REM See the License for the specific language governing permissions and
+REM limitations under the License.
+REM
+REM
 REM
-REM This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-REM you can redistribute it and/or modify it under the terms of the GNU General Public License
-REM version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is
-REM distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
-REM implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-REM See  the GNU General Public License for more details.   You should have received a copy of
-REM the  GNU General Public License along with Threading Building Blocks; if not, write to the
-REM Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 REM
-REM As a special exception,  you may use this file  as part of a free software library without
-REM restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-REM functions from this file, or you compile this file and link it with other files to produce
-REM an executable,  this file does not by itself cause the resulting executable to be covered
-REM by the GNU General Public License. This exception does not however invalidate any other
-REM reasons why the executable file might be covered by the GNU General Public License.
 REM
 setlocal
 for %%D in ("%tbb_root%") do set actual_root=%%~fD
@@ -26,7 +26,6 @@ set fslash_bin_dir=%bin_dir:\=/%
 set _INCLUDE=INCLUDE& set _LIB=LIB
 if not x%UNIXMODE%==x set _INCLUDE=CPATH& set _LIB=LIBRARY_PATH
 
-if exist tbbvars.bat goto skipbat
 echo Generating local tbbvars.bat
 echo @echo off>tbbvars.bat
 echo SET TBBROOT=%actual_root%>>tbbvars.bat
@@ -36,9 +35,7 @@ echo SET %_INCLUDE%=%%TBBROOT%%\include;%%%_INCLUDE%%%>>tbbvars.bat
 echo SET %_LIB%=%bin_dir%;%%%_LIB%%%>>tbbvars.bat
 echo SET PATH=%bin_dir%;%%PATH%%>>tbbvars.bat
 if not x%UNIXMODE%==x echo SET LD_LIBRARY_PATH=%bin_dir%;%%LD_LIBRARY_PATH%%>>tbbvars.bat
-:skipbat
 
-if exist tbbvars.sh goto skipsh
 echo Generating local tbbvars.sh
 echo #!/bin/sh>tbbvars.sh
 echo export TBBROOT="%fslash_root%">>tbbvars.sh
@@ -48,9 +45,7 @@ echo export %_INCLUDE%="${TBBROOT}/include;$%_INCLUDE%">>tbbvars.sh
 echo export %_LIB%="%fslash_bin_dir%;$%_LIB%">>tbbvars.sh
 echo export PATH="%fslash_bin_dir%;$PATH">>tbbvars.sh
 if not x%UNIXMODE%==x echo export LD_LIBRARY_PATH="%fslash_bin_dir%;$LD_LIBRARY_PATH">>tbbvars.sh
-:skipsh
 
-if exist tbbvars.csh goto skipcsh
 echo Generating local tbbvars.csh
 echo #!/bin/csh>tbbvars.csh
 echo setenv TBBROOT "%actual_root%">>tbbvars.csh
@@ -60,10 +55,11 @@ echo setenv %_INCLUDE% "${TBBROOT}\include;$%_INCLUDE%">>tbbvars.csh
 echo setenv %_LIB% "%bin_dir%;$%_LIB%">>tbbvars.csh
 echo setenv PATH "%bin_dir%;$PATH">>tbbvars.csh
 if not x%UNIXMODE%==x echo setenv LD_LIBRARY_PATH "%bin_dir%;$LD_LIBRARY_PATH">>tbbvars.csh
-:skipcsh
 
-REM Workaround for copying Android* specific libgnustl_shared.so library to work folder
-if not x%LIB_GNU_STL_ANDROID%==x copy /Y "%LIB_GNU_STL_ANDROID%"\libgnustl_shared.so
+if not x%LIB_STL_ANDROID%==x (
+REM Workaround for copying Android* specific stl shared library to work folder
+copy /Y "%LIB_STL_ANDROID:/=\%" .
+)
 
 endlocal
 exit
diff --git a/build/generate_tbbvars.sh b/build/generate_tbbvars.sh
index 2f15e1a..0ca0965 100644
--- a/build/generate_tbbvars.sh
+++ b/build/generate_tbbvars.sh
@@ -1,29 +1,29 @@
 #!/bin/bash
 #
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # Script used to generate tbbvars.[c]sh scripts
 bin_dir="$PWD"  # 
 cd "$tbb_root"  # keep this comments here
 tbb_root="$PWD" # to make it unsensible
 cd "$bin_dir"   # to EOL encoding
-[ -f ./tbbvars.sh ] || cat >./tbbvars.sh <<EOF
+cat >./tbbvars.sh <<EOF
 #!/bin/bash
 export TBBROOT="${tbb_root}" #
 tbb_bin="${bin_dir}" #
@@ -44,7 +44,7 @@ else #
 fi #
 ${TBB_CUSTOM_VARS_SH} #
 EOF
-[ -f ./tbbvars.csh ] || cat >./tbbvars.csh <<EOF
+cat >./tbbvars.csh <<EOF
 #!/bin/csh
 setenv TBBROOT "${tbb_root}" #
 setenv tbb_bin "${bin_dir}" #
@@ -65,7 +65,7 @@ else #
 endif #
 ${TBB_CUSTOM_VARS_CSH} #
 EOF
-# Workaround for copying Android* specific libgnustl_shared.so library to "."
-if [ ! -z "${LIB_GNU_STL_ANDROID}" ]; then #
-	cp ${LIB_GNU_STL_ANDROID}/libgnustl_shared.so . #
+# Workaround for copying Android* specific stl shared library to "."
+if [ ! -z "${LIB_STL_ANDROID}" ]; then #
+	cp ${LIB_STL_ANDROID} . #
 fi #
diff --git a/build/index.html b/build/index.html
index a78e32d..5189b0d 100644
--- a/build/index.html
+++ b/build/index.html
@@ -5,7 +5,7 @@
 This directory contains the internal Makefile infrastructure for Intel® Threading Building Blocks (Intel® TBB).
 
 <P>
-See below for how to <A HREF=#build>build</A> Intel TBB and how to <A HREF=#port>port</A> Intel TBB
+See below for how to <A HREF="#build">build</A> Intel TBB and how to <A HREF="#port">port</A> Intel TBB
 to a new platform, operating system or architecture.
 </P>
 
@@ -14,13 +14,13 @@ The files here are not intended to be used directly.  See below for usage.
 <DL>
 <DT><A HREF="Makefile.tbb">Makefile.tbb</A>
 <DD>Main Makefile to build the Intel TBB library.
-    Invoked via 'make tbb' from <A HREF=../Makefile>top-level Makefile</A>.
+    Invoked via 'make tbb' from <A HREF="../Makefile">top-level Makefile</A>.
 <DT><A HREF="Makefile.tbbmalloc">Makefile.tbbmalloc</A>
 <DD>Main Makefile to build the Intel TBB scalable memory allocator library as well as its tests.
-    Invoked via 'make tbbmalloc' from <A HREF=../Makefile>top-level Makefile</A>.
+    Invoked via 'make tbbmalloc' from <A HREF="../Makefile">top-level Makefile</A>.
 <DT><A HREF="Makefile.test">Makefile.test</A>
 <DD>Main Makefile to build and run the tests for the Intel TBB library.
-    Invoked via 'make test' from <A HREF=../Makefile>top-level Makefile</A>.
+    Invoked via 'make test' from <A HREF="../Makefile">top-level Makefile</A>.
 <DT><A HREF="common.inc">common.inc</A>
 <DD>Main common included Makefile that includes OS-specific and compiler-specific Makefiles.
 <DT><os>.inc
@@ -28,14 +28,14 @@ The files here are not intended to be used directly.  See below for usage.
 <DT><os>.<compiler>.inc
 <DD>Compiler-specific Makefile for a particular <os> / <compiler> combination.
 <DT>*.sh
-<DD>Infrastructure utilities for Linux* OS, OS X*, and UNIX*-related operating systems.
+<DD>Infrastructure utilities for Linux* OS, macOS*, and UNIX*-related operating systems.
 <DT>*.js, *.bat
 <DD>Infrastructure utilities for Windows* OS.
 </DL>
 
-<A NAME=build><H2>To Build</H2></A>
+<A NAME="build"><H2>To Build</H2></A>
 <P>
-To port Intel TBB to a new platform, operating system or architecture, see the <A HREF=#port>porting directions</A> below.
+To port Intel TBB to a new platform, operating system or architecture, see the <A HREF="#port">porting directions</A> below.
 </P>
 
 <H3>Software prerequisites:</H3>
@@ -43,40 +43,43 @@ To port Intel TBB to a new platform, operating system or architecture, see the <
 <LI>C++ compiler for the platform, operating system and architecture of interest.
     Either the native compiler for your system, or, optionally, the appropriate Intel® C++ compiler, may be used.
 <LI>GNU make utility. On Windows OS, if a UNIX* emulator is used to run GNU make,
-    it should be able to run Windows OS utilities and commands. On Linux OS, OS X, etc.,
+    it should be able to run Windows OS utilities and commands. On Linux OS, macOS, etc.,
     shell commands issued by GNU make should execute in a Bourne or BASH compatible shell.
+    In the following examples, replace <TT>make</TT> with the correct GNU make command for
+    your system (for example, <TT>gmake</TT>). GNU make version 3.80 and more recent are supported.
 </OL>
 
 <P>
 Intel TBB libraries can be built by performing the following steps.
 On systems that support only one ABI (e.g., 32-bit), these steps build the libraries for that ABI.
 On systems that support both 64-bit and 32-bit libraries, these steps build the 64-bit libraries
-(Linux OS, OS X, and related systems) or whichever ABI is selected in the development environment (Windows OS).
+(Linux OS, macOS, and related systems) or whichever ABI is selected in the development environment (Windows OS).
 </P>
 <OL>
-<LI>Change to the <A HREF=../index.html>top-level directory</A> of the installed software.
+<LI>Change to the <A HREF="../index.html">top-level directory</A> of the installed software.
 <LI>If using the Intel® C++ compiler, make sure the appropriate compiler is available in your PATH
     (e.g., by sourcing the appropriate iccvars script for the compiler to be used).
-<LI>Invoke GNU make using no arguments, for example, 'gmake'.
+<LI>Invoke GNU make using no arguments, for example, <TT>make</TT>.
 </OL>
 
 <P>
-To build Intel TBB libraries for other than the default ABI (e.g., to build 32-bit libraries on Linux OS, OS X,
+To build Intel TBB libraries for other than the default ABI (e.g., to build 32-bit libraries on Linux OS, macOS,
 or related systems that support both 64-bit and 32-bit libraries), perform the following steps:
 </P>
 <OL>
-<LI>Change to the <A HREF=../index.html>top-level directory</A> of the installed software.
+<LI>Change to the <A HREF="../index.html">top-level directory</A> of the installed software.
 <LI>If using the Intel® C++ compiler, make sure the appropriate compiler is available in your PATH
     (e.g., by sourcing the appropriate iccvars script for the compiler to be used).
-<LI>Invoke GNU make as follows, 'gmake arch=ia32'.
+<LI>Explicitly specify the architecture when invoking GNU make, e.g. <TT>make arch=ia32</TT>.
 </OL>
 
 <P>The default make target will build the release and debug versions of the Intel TBB library.</P>
 <P>Other targets are available in the top-level Makefile. You might find the following targets useful:
 <UL>
-<LI>'make test' will build and run Intel TBB <A HREF=../src/test>unit-tests</A>;
-<LI>'make examples' will build and run Intel TBB <A HREF=../examples/index.html>examples</A>;
-<LI>'make all' will do all of the above.
+<LI><TT>make test</TT> will build and run Intel TBB <A HREF="../src/test">unit-tests</A>;
+<LI><TT>make examples</TT> will build and run Intel TBB <A HREF="../examples/index.html">examples</A>. Available in the open-source version only.
+For the commercial version, you can download Intel TBB Samples at the <a href="https://software.intel.com/en-us/product-code-samples?topic=20828">Intel® Software Product Samples and Tutorials</a> website;
+<LI><TT>make all</TT> will do all of the above. Available in the open-source version only.
 </UL>
 See also the list of other targets below.
 </P>
@@ -85,7 +88,7 @@ See also the list of other targets below.
 By default, the libraries will be built in sub-directories within the build/ directory.
 The sub-directories are named according to the operating system, architecture, compiler and software environment used
 (the sub-directory names also distinguish release vs. debug libraries).  On Linux OS, the software environment comprises
-the GCC, libc and kernel version used.  On OS X, the software environment comprises the GCC and OS version used.
+the GCC, libc and kernel version used.  On macOS, the software environment comprises the GCC and OS version used.
 On Windows OS, the software environment comprises the Microsoft* Visual Studio* version used.
 See below for how to change the default build directory.
 </P>
@@ -94,15 +97,15 @@ See below for how to change the default build directory.
 To perform different build and/or test operations, use the following steps.
 </P>
 <OL>
-<LI>Change to the <A HREF=../index.html>top-level directory</A> of the installed software.
+<LI>Change to the <A HREF="../index.html">top-level directory</A> of the installed software.
 <LI>If using the Intel® C++ compiler, make sure the appropriate compiler is available in your PATH
     (e.g., by sourcing the appropriate iccvars script for the compiler to be used).
 <LI>Invoke GNU make by using one or more of the following commands.
     <DL>
     <DT><TT>make</TT>
-    <DD>Default build.  Equivalent to 'make tbb tbbmalloc'.
+    <DD>Default build.  Equivalent to <TT>make tbb tbbmalloc</TT>.
     <DT><TT>make all</TT>
-    <DD>Equivalent to 'make tbb tbbmalloc test examples'.
+    <DD>Equivalent to <TT>make tbb tbbmalloc test examples</TT>. Available in the open-source version only.
     <DT><TT>cd src;make release</TT>
     <DD>Build and test release libraries only.
     <DT><TT>cd src;make debug</TT>
@@ -114,44 +117,46 @@ To perform different build and/or test operations, use the following steps.
     <DT><TT>make test</TT>
     <DD>Compile and run unit-tests
     <DT><TT>make examples</TT>
-    <DD>Build libraries and run all examples, like doing 'make debug clean release' from
-	<A HREF=../examples/Makefile>the general example Makefile</A>.
+    <DD>Build libraries and run all examples, like doing <TT>make debug clean release</TT> from <A HREF="../examples/Makefile">the general example Makefile</A>.
+        Available in the open-source version only.
+    <DT><TT>make python</TT>
+    <DD>Build, install, and test Python* API for Intel TBB. See <A HREF="../python/index.html">details here</A>.
     <DT><TT>make compiler=<B>{</B>icl, icc, gcc, clang<B>}</B> <B>[</B>(above options or targets)<B>]</B></TT>
     <DD>Build and run as above, but use specified compilers instead of default, native compilers
-    <LI><TT><B> {</B>icl, icc<B>}</B> </TT> - to use Intel® compilers (<TT>icl</TT> on Windows OS,  <TT>icc</TT>  on Linux OS or OS X). </LI>
-    <LI><TT>gcc</TT>  - to use g++ (e.g. MinGW on Windows OS)</LI>
-    <LI><TT>clang</TT> - to use Clang compiler</LI>
-    <DT><TT>make compiler=clang stdlib=libc++ </B> <B>[</B>(above options or targets)<B>]</B></TT>
+    <ol>
+        <li><tt><b> {</b>icl, icc<b>}</b> </tt> - to use Intel® compilers (<tt>icl</tt> on Windows OS,  <tt>icc</tt>  on Linux OS or macOS). </li>
+        <li><tt>gcc</tt>  - to use g++ (e.g. MinGW on Windows OS)</li>
+        <li><tt>clang</tt> - to use Clang compiler</li>
+    </ol>
+    <DT><TT>make compiler=clang stdlib=libc++ <B>[</B>(above options or targets)<B>]</B></TT>
     <DD>Build and run as above, but use <TT>libc++</TT> as a standard c++ library for clang.
-    <DT><TT>make target_ui=win8ui [target_ui_mode=production]</B> <B>[</B>(above options or targets)<B>]</B></TT>
+    <DT><TT>make stdver=<B>{</B>c++11, c++14, ...<B>}</B> <B>[</B>(above options or targets)<B>]</B></TT>
+    <DD>Build and run as above, but additionally specify the version of the C++ standard or dialect to be used by
+      the compiler. The specified value of <TT>stdver</TT> will be used as a parameter to the appropriate
+      compiler option (such as <TT>-std</TT>); the behavior in case of unsupported value is compiler-specific.
+    <DT><TT>make target_ui=win8ui [target_ui_mode=production] <B>[</B>(above options or targets)<B>]</B></TT>
     <DD>Build and run as above, but use API that is compliant with Windows Store* applications. 
-	<TT>target_ui_mode=production</TT> is used to produce binaries that are compliant with Windows Store* application container.
-	In later case they won't with Intel TBB unit tests but work only with Windows Store* applications. 
-    <DT><TT>ndk-build target=android</B> <B>[</B>(above options or targets)<B>]</B></TT>
+    <TT>target_ui_mode=production</TT> is used to produce binaries that are compliant with Windows Store* application container. In later case they won't with Intel TBB unit tests but work only with Windows Store* applications. 
+    <DT><TT>ndk-build target=android <B>[</B>(above options or targets)<B>]</B></TT>
     <DD>Build and run as above, but build libraries for Android* OS by Android NDK that should be installed. Makefiles were tested with revision 8.
     <DT><TT>make arch=<B>{</B>ia32, intel64, ia64<B>}</B> <B>[</B>(above options or targets)<B>]</B></TT>
     <DD>Build and run as above, but build libraries for the selected ABI.
         Might be useful for cross-compilation; ensure proper environment is set before running this command.
     <DT><TT>make tbb_root=<B>{</B>(Intel TBB directory)<B>}</B> <B>[</B>(above options or targets)<B>]</B></TT>
-    <DD>Build and run as above; for use when invoking 'make' from a directory other than
-	the <A HREF=../index.html>top-level directory</A>.
+    <DD>Build and run as above; for use when invoking <TT>make</TT> from a directory other than the <A HREF="../index.html">top-level directory</A>.
     <DT><TT>make tbb_build_dir=<B>{</B>(build directory)<B>}</B> <B>[</B>(above options or targets)<B>]</B></TT>
-    <DD>Build and run as above, but place the built libraries in the specified directory, rather than in the default
-	sub-directory within the build/ directory. This command might have troubles with the build in case the sources 
-	installed to the directory with spaces in the path.
+    <DD>Build and run as above, but place the built libraries in the specified directory, rather than in the default sub-directory within the build/ directory. This command might have troubles with the build in case the sources installed to the directory with spaces in the path.
     <DT><TT>make tbb_build_prefix=<B>{</B>(build sub-directory)<B>}</B> <B>[</B>(above options or targets)<B>]</B></TT>
-    <DD>Build and run as above, but place the built libraries in the specified sub-directory within the build/ directory,
-	rather than using the default sub-directory name.
+    <DD>Build and run as above, but place the built libraries in the specified sub-directory within the build/ directory, rather than using the default sub-directory name.
     <DT><TT>make tbb_cpf=1 <B>[</B>(above options or targets)<B>]</B></TT>
-    <DD>Build and run as above, but build and use libraries with the Community Preview Features enabled, 
-    rather than the default libraries.
+    <DD>Build and run as above, but build and use libraries with the Community Preview Features enabled, rather than the default libraries.
     <DT><TT>make <B>[</B>(above options)<B>]</B> clean</TT>
     <DD>Remove any executables or intermediate files produced by the above commands.
         Includes build directories, object files, libraries and test executables.
     </DL>
 </OL>
 
-<A NAME=port><H2>To Port</H2></A>
+<A NAME="port"><H2>To Port</H2></A>
 <P>
 This section provides information on how to port Intel TBB to a new platform, operating system or architecture.
 A subset or a superset of these steps may be required for porting to a given platform.
@@ -161,21 +166,21 @@ A subset or a superset of these steps may be required for porting to a given pla
 <OL>
 <LI>If porting to a new architecture, create a file that describes the architecture-specific details for that architecture.
     <UL>
-    <LI>Create a <os>_<architecture>.h file in the <A HREF=../include/tbb/machine>include/tbb/machine</A> directory
+    <LI>Create a <os>_<architecture>.h file in the <A HREF="../include/tbb/machine">include/tbb/machine</A> directory
 	that describes these details.
 	<UL>
 	<LI>The <os>_<architecture>.h is named after the operating system and architecture as recognized by
-	    <A HREF=../include/tbb/tbb_machine.h>include/tbb/tbb_machine.h</A> and the Makefile infrastructure.
+	    <A HREF="../include/tbb/tbb_machine.h">include/tbb/tbb_machine.h</A> and the Makefile infrastructure.
 	<LI>This file defines the implementations of synchronization operations, and also the
 	    scheduler yield function, for the operating system and architecture.
 	<LI>Several examples of <os>_<architecture>.h files can be found in the
-	    <A HREF=../include/tbb/machine>include/tbb/machine</A> directory.
+	    <A HREF="../include/tbb/machine">include/tbb/machine</A> directory.
 	    <UL>
 	    <LI>A minimal implementation defines the 4-byte and 8-byte compare-and-swap operations,
-		and the scheduler yield function.  See <A HREF=../include/tbb/machine/mac_ppc.h>include/tbb/machine/mac_ppc.h</A>
+		and the scheduler yield function.  See <A HREF="../include/tbb/machine/mac_ppc.h">include/tbb/machine/mac_ppc.h</A>
 		for an example of a minimal implementation.
 	    <LI>More complex implementation examples can also be found in the
-		<A HREF=../include/tbb/machine>include/tbb/machine</A> directory
+		<A HREF="../include/tbb/machine">include/tbb/machine</A> directory
 		that implement all the individual variants of synchronization operations that Intel TBB uses.
 		Such implementations are more verbose but may achieve better performance on a given architecture.
 	    <LI>In a given implementation, any synchronization operation that is not defined is implemented, by default,
@@ -183,22 +188,22 @@ A subset or a superset of these steps may be required for porting to a given pla
 		the performance of an implementation.
 	    <LI>In most cases, synchronization operations are implemented as inline assembly code; examples also exist,
 		(e.g., for Intel® Itanium® processors) that use out-of-line assembly code in *.s or *.asm files
-		(see the assembly code sub-directories in the <A HREF=../src/tbb>src/tbb</A> directory).
+		(see the assembly code sub-directories in the <A HREF="../src/tbb">src/tbb</A> directory).
 	    </UL>
 	</UL>
-    <LI>Modify <A HREF=../include/tbb/tbb_machine.h>include/tbb/tbb_machine.h</A>, if needed, to invoke the appropriate
-	<os>_<architecture>.h file in the <A HREF=../include/tbb/machine>include/tbb/machine</A> directory.
+    <LI>Modify <A HREF="../include/tbb/tbb_machine.h">include/tbb/tbb_machine.h</A>, if needed, to invoke the appropriate
+	<os>_<architecture>.h file in the <A HREF="../include/tbb/machine">include/tbb/machine</A> directory.
     </UL>
-<LI>Add an implementation of DetectNumberOfWorkers() in <A HREF=../src/tbb/tbb_misc.h>src/tbb/tbb_misc.h</A>,
+<LI>Add an implementation of DetectNumberOfWorkers() in <A HREF="../src/tbb/tbb_misc.h">src/tbb/tbb_misc.h</A>,
     that returns the number of cores found on the system in case it is not supported by the current implementation.  
     This is used to determine the default number of threads for the Intel TBB task scheduler.
 <LI>Either properly define FillDynamicLinks for use in
-    <A HREF=../src/tbb/cache_aligned_allocator.cpp>src/tbb/cache_aligned_allocator.cpp</A>,
+    <A HREF="../src/tbb/cache_aligned_allocator.cpp">src/tbb/cache_aligned_allocator.cpp</A>,
     or hardcode the allocator to be used.
 <LI>Additional types might be required in the union defined in
-    <A HREF=../include/tbb/aligned_space.h>include/tbb/aligned_space.h</A>
+    <A HREF="../include/tbb/aligned_space.h">include/tbb/aligned_space.h</A>
     to ensure proper alignment on your platform.
-<LI>Changes may be required in <A HREF=../include/tbb/tick_count.h>include/tbb/tick_count.h</A>
+<LI>Changes may be required in <A HREF="../include/tbb/tick_count.h">include/tbb/tick_count.h</A>
     for systems that do not provide gettimeofday.
 </OL>
 
@@ -206,25 +211,21 @@ A subset or a superset of these steps may be required for porting to a given pla
 Modify the appropriate files in the Makefile infrastructure to add a new platform, operating system or architecture as needed.
 See the Makefile infrastructure files for examples.
 <OL>
-<LI>The <A HREF=../Makefile>top-level Makefile</A> includes <A HREF=common.inc>common.inc</A> to determine the operating system.
+<LI>The <A HREF="../Makefile">top-level Makefile</A> includes <A HREF="common.inc">common.inc</A> to determine the operating system.
     <UL>
-    <LI>To add a new operating system, add the appropriate test to <A HREF=common.inc>common.inc</A>,
-	and create the needed <os>.inc and <os>.<compiler>.inc files (see below).
+    <LI>To add a new operating system, add the appropriate test to <A HREF="common.inc">common.inc</A>, and create the needed <os>.inc and <os>.<compiler>.inc files (see below).
     </UL>
 <LI>The <os>.inc file makes OS-specific settings for a particular operating systems.
     <UL>
-    <LI>For example, <A HREF=linux.inc>linux.inc</A> makes settings specific to Linux operating systems.
-    <LI>This file performs OS-dependent tests to determine the specific platform and/or architecture,
-	and sets other platform-dependent values.
+    <LI>For example, <A HREF="linux.inc">linux.inc</A> makes settings specific to Linux operating systems.
+    <LI>This file performs OS-dependent tests to determine the specific platform and/or architecture, and sets other platform-dependent values.
     <LI>Add a new <os>.inc file for each new operating system added.
     </UL>
 <LI>The <os>.<compiler>.inc file makes compiler-specific settings for a particular
     <os> / <compiler> combination.
     <UL>
-    <LI>For example, <A HREF=linux.gcc.inc>linux.gcc.inc</A> makes specific settings for using GCC on Linux OS,
-	and <A HREF=linux.icc.inc>linux.icc.inc</A> makes specific settings for using the Intel® C++ compiler on Linux OS.
-    <LI>This file sets particular compiler, assembler and linker options required when using a particular
-	<os> / <compiler> combination.
+    <LI>For example, <A HREF="linux.gcc.inc">linux.gcc.inc</A> makes specific settings for using GCC on Linux OS, and <A HREF="linux.icc.inc">linux.icc.inc</A> makes specific settings for using the Intel® C++ compiler on Linux OS.
+    <LI>This file sets particular compiler, assembler and linker options required when using a particular <os> / <compiler> combination.
     <LI>Add a new <os>.<compiler>.inc file for each new <os> / <compiler> combination added.
     </UL>
 </OL>
@@ -232,10 +233,9 @@ See the Makefile infrastructure files for examples.
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <P></P>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <P></P>
-Intel and Itanium are registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
+Intel, the Intel logo and Itanium are trademarks of Intel Corporation or its subsidiaries in the U.S. and/or other countries.
 <p></p>
 * Other names and brands may be claimed as the property of others.
 </BODY>
diff --git a/build/ios.clang.inc b/build/ios.clang.inc
new file mode 100644
index 0000000..265e9fa
--- /dev/null
+++ b/build/ios.clang.inc
@@ -0,0 +1,23 @@
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+include $(tbb_root)/build/macos.clang.inc
+
+CPLUS_FLAGS += -miphoneos-version-min=8.0
+LINK_FLAGS += -miphoneos-version-min=8.0
+LIB_LINK_FLAGS += -miphoneos-version-min=8.0
diff --git a/build/ios.macos.inc b/build/ios.macos.inc
new file mode 100644
index 0000000..ae723bd
--- /dev/null
+++ b/build/ios.macos.inc
@@ -0,0 +1,36 @@
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+ifneq ($(arch),$(filter $(arch),ia32 intel64 armv7 armv7s arm64))
+  $(error $(arch) is unknown architecture. Known arhitechtures are ia32 intel64 armv7 armv7s arm64)
+endif
+
+# If target is ios but arch is ia32/intel64 then build for 32/64 simulator!
+ifeq (,$(SDKROOT))
+  ifeq ($(arch),$(filter $(arch),ia32 intel64))
+    export SDKROOT:=$(shell xcodebuild -sdk -version | grep -o -E '/.*SDKs/iPhoneSimulator.*' 2>/dev/null)
+  else
+    export SDKROOT:=$(shell xcodebuild -sdk -version | grep -o -E '/.*SDKs/iPhoneOS.*' 2>/dev/null)
+  endif
+endif
+ifeq (,$(SDKROOT))
+  $(error iOS* SDK not found)
+endif
+
+ios_version:=$(shell echo $(SDKROOT) | sed -e "s/.*[a-z,A-Z]\(.*\).sdk/\1/")
+runtime:=cc$(clang_version)_ios$(ios_version)
diff --git a/build/linux.clang.inc b/build/linux.clang.inc
index de9aee5..edabab2 100644
--- a/build/linux.clang.inc
+++ b/build/linux.clang.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 COMPILE_ONLY = -c -MMD
 PREPROC_ONLY = -E -x c++
@@ -45,15 +45,14 @@ ifeq ($(cfg), debug)
         CPLUS_FLAGS = -DTBB_USE_DEBUG $(ITT_NOTIFY) -g -O0 -DUSE_PTHREAD
 endif
 
-ifeq (libc++,$(stdlib))
-    CPLUS_FLAGS += -stdlib=libc++
-    LIB_LINK_FLAGS += -stdlib=libc++
+ifneq (,$(stdlib))
+    CPLUS_FLAGS    += -stdlib=$(stdlib)
+    LIB_LINK_FLAGS += -stdlib=$(stdlib)
 endif
 
-CPP11_FLAGS = -std=c++11 -D_TBB_CPP0X
-
-ifneq (00,$(lambdas)$(cpp0x))
-    CXX_ONLY_FLAGS += $(CPP11_FLAGS)
+ifneq (,$(gcc_version))
+    # TODO: do not assume that GCC minor and patchlevel versions are always single-digit.
+    CPLUS_FLAGS += -DTBB_USE_GLIBCXX_VERSION=$(subst .,0,$(gcc_version))
 endif
 
 TBB_ASM.OBJ=
diff --git a/build/linux.gcc.inc b/build/linux.gcc.inc
index 4b7122b..348bac0 100644
--- a/build/linux.gcc.inc
+++ b/build/linux.gcc.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 COMPILE_ONLY = -c -MMD
 PREPROC_ONLY = -E -x c++
@@ -25,7 +25,7 @@ OUTPUTOBJ_KEY = -o #
 PIC_KEY = -fPIC
 WARNING_AS_ERROR_KEY = -Werror
 WARNING_KEY = -Wall
-TEST_WARNING_KEY = -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor $(if $(findstring cc4., $(runtime)),-Wextra)
+TEST_WARNING_KEY = -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor
 
 WARNING_SUPPRESS = -Wno-parentheses -Wno-non-virtual-dtor
 DYLIB_KEY = -shared
@@ -38,10 +38,6 @@ LIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY)
 LIBS += -lpthread -lrt
 LINK_FLAGS = -Wl,-rpath-link=. -rdynamic
 C_FLAGS = $(CPLUS_FLAGS)
-# gcc 4.4 and higher support -std=c++0x
-ifneq (,$(shell gcc -dumpversion | egrep  "^(4\.[4-9]|[5-9])"))
-    CPP11_FLAGS = -std=c++0x -D_TBB_CPP0X
-endif
 
 # gcc 4.2 and higher support OpenMP
 ifneq (,$(shell gcc -dumpversion | egrep  "^(4\.[2-9]|[5-9])"))
@@ -49,10 +45,28 @@ ifneq (,$(shell gcc -dumpversion | egrep  "^(4\.[2-9]|[5-9])"))
 endif
 
 # gcc 4.8 and later support RTM intrinsics, but require command line switch to enable them
-ifneq (,$(shell gcc -dumpversion | egrep  "^4\.[8-9]"))
+ifneq (,$(shell gcc -dumpversion | egrep  "^(4\.[8-9]|[5-9])"))
     RTM_KEY = -mrtm
 endif
 
+# gcc 4.0 and later have -Wextra that is used by some our customers.
+ifneq (,$(shell gcc -dumpversion | egrep  "^([4-9])"))
+    TEST_WARNING_KEY += -Wextra
+endif
+
+# gcc 5.0 and later have -Wsuggest-override option
+# enable it via a pre-included header in order to limit to C++11 and above
+ifneq (,$(shell gcc -dumpversion | egrep  "^([5-9])"))
+    INCLUDE_TEST_HEADERS = -include $(tbb_root)/src/test/harness_preload.h
+endif
+
+# gcc 6.0 and later have -flifetime-dse option that controls
+# elimination of stores done outside the object lifetime
+ifneq (,$(shell gcc -dumpversion | egrep  "^([6-9])"))
+    # keep pre-contruction stores for zero initialization
+    DSE_KEY = -flifetime-dse=1
+endif
+
 ifeq ($(cfg), release)
         CPLUS_FLAGS = $(ITT_NOTIFY) -g -O2 -DUSE_PTHREAD
 endif
@@ -60,10 +74,6 @@ ifeq ($(cfg), debug)
         CPLUS_FLAGS = -DTBB_USE_DEBUG $(ITT_NOTIFY) -g -O0 -DUSE_PTHREAD
 endif
 
-ifneq (00,$(lambdas)$(cpp0x))
-    CXX_ONLY_FLAGS += $(CPP11_FLAGS)
-endif
-
 TBB_ASM.OBJ=
 MALLOC_ASM.OBJ=
 
diff --git a/build/linux.icc.inc b/build/linux.icc.inc
index d4b7f1c..c1830f5 100644
--- a/build/linux.icc.inc
+++ b/build/linux.icc.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 COMPILE_ONLY = -c -MMD
 PREPROC_ONLY = -E -x c++
@@ -29,25 +29,30 @@ DYLIB_KEY = -shared
 EXPORT_KEY = -Wl,--version-script,
 NOINTRINSIC_KEY = -fno-builtin
 LIBDL = -ldl
+ifneq (,$(shell icc -dumpversion | egrep "1[2-9]\."))
+SDL_FLAGS = -fstack-protector -Wformat -Wformat-security
+endif
 
 CPLUS = icpc
 CONLY = icc
 
 ITT_NOTIFY = -DDO_ITT_NOTIFY
 ifeq (release,$(cfg))
+SDL_FLAGS += -D_FORTIFY_SOURCE=2
 CPLUS_FLAGS = $(ITT_NOTIFY) -O2 -g -DUSE_PTHREAD
 else
 CPLUS_FLAGS = $(ITT_NOTIFY) -O0 -g -DUSE_PTHREAD -DTBB_USE_DEBUG
 endif
 
-OPENMP_FLAG = -openmp
-LIB_LINK_FLAGS = -shared -i-static -Wl,-soname=$(BUILDING_LIBRARY)
+LIB_LINK_FLAGS = -shared -static-intel -Wl,-soname=$(BUILDING_LIBRARY) -z relro -z now
 LIBS += -lpthread -lrt
 LINK_FLAGS = -rdynamic
 C_FLAGS = $(CPLUS_FLAGS)
-# ICC 11.0 and higher support -std=c++0x
-ifneq (,$(shell icc -dumpversion | egrep  "^1[1-9]\."))
-    CPP11_FLAGS = -std=c++0x -D_TBB_CPP0X
+
+ifneq (,$(shell icc -dumpversion | egrep  "^1[6-9]\."))
+OPENMP_FLAG = -qopenmp
+else
+OPENMP_FLAG = -openmp
 endif
 
 # ICC 12.0 and higher provide Intel(R) Cilk(TM) Plus
@@ -69,16 +74,14 @@ ifeq (ia64,$(arch))
 # strict-ansi does not work with <signal.h> on RHEL 4 AS
     CPLUS_FLAGS += $(PIC_KEY) $(if $(findstring cc3.,$(runtime)),-ansi,-strict-ansi)
 else
-    CPLUS_FLAGS += -strict-ansi
+# For ICC 16 and older, in std=c++14 mode -strict-ansi does not work with GNU C++ library headers
+# egrep returns 0 or 1, compare it in concatenation
+    CPLUS_FLAGS += $(if $(findstring c++14_1,$(stdver)_$(shell icc -dumpversion| egrep -c "^1[1-6]\.")),-ansi,-strict-ansi)
 endif
 
 ifneq (,$(codecov))
 # no tool support for code coverage, need profile data generation
-    ITT_NOTIFY = -prof-genx
-endif
-
-ifneq (00,$(lambdas)$(cpp0x))
-	CXX_ONLY_FLAGS += $(CPP11_FLAGS)
+    ITT_NOTIFY = -prof-gen=srcpos
 endif
 
 #------------------------------------------------------------------------------
diff --git a/build/linux.inc b/build/linux.inc
index 631c520..daeaaf9 100644
--- a/build/linux.inc
+++ b/build/linux.inc
@@ -1,33 +1,35 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 ####### Detections and Commands ###############################################
 
 ifeq (icc,$(compiler))
   export COMPILER_VERSION := ICC: $(shell icc -V </dev/null 2>&1 | grep 'Version')
-  ifneq (,$(findstring IA-32, $(COMPILER_VERSION)))
+  ifneq (,$(findstring running on IA-32, $(COMPILER_VERSION)))
     export arch:=ia32
-  endif
-  ifneq (,$(findstring Intel(R) 64, $(COMPILER_VERSION)))
-    export arch:=intel64
-  endif
-  ifneq (,$(findstring IA-64, $(COMPILER_VERSION)))
-    export arch:=ia64
+  else
+    ifneq (,$(findstring running on Intel(R) 64, $(COMPILER_VERSION)))
+      export arch:=intel64
+    else
+      ifneq (,$(findstring IA-64, $(COMPILER_VERSION)))
+        export arch:=ia64
+      endif
+    endif
   endif
   ifeq (,$(arch))
     $(warning "Unknown Intel compiler")
@@ -57,7 +59,7 @@ ifndef arch
 endif
 
 ifndef runtime
-        gcc_version:=$(shell gcc -dumpversion)
+        export gcc_version:=$(shell gcc -dumpversion)
         os_version:=$(shell uname -r)
         os_kernel_version:=$(shell uname -r | sed -e 's/-.*$$//')
         export os_glibc_version_full:=$(shell getconf GNU_LIBC_VERSION | grep glibc | sed -e 's/^glibc //')
@@ -97,7 +99,7 @@ SONAME_SUFFIX =$(shell grep TBB_COMPATIBLE_INTERFACE_VERSION $(tbb_root)/include
 ifeq ($(arch),ia64)
         def_prefix = lin64ipf
 endif
-ifeq ($(arch),sparc)
+ifneq (,$(findstring $(arch),sparc s390x))
         def_prefix = lin64
 endif
 ifeq ($(arch),armv7)
@@ -136,3 +138,5 @@ RML.DLL = $(RML_NO_VERSION.DLL).1
 RML.LIB = $(RML_NO_VERSION.DLL)
 
 TEST_LAUNCHER=sh $(tbb_root)/build/test_launcher.sh $(largs)
+
+OPENCL.LIB = -lOpenCL
diff --git a/build/linux.pathcc.inc b/build/linux.pathcc.inc
index 477de03..948f231 100644
--- a/build/linux.pathcc.inc
+++ b/build/linux.pathcc.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 COMPILE_ONLY = -c -MMD
 PREPROC_ONLY = -E -x c++
@@ -39,7 +39,6 @@ LIBS += -lstl -lpthread -lrt
 LINK_FLAGS = -Wl,-rpath-link=. -rdynamic
 C_FLAGS = $(CPLUS_FLAGS)
 
-CPP11_FLAGS = -std=c++0x -D_TBB_CPP0X
 OPENMP_FLAG = -openmp
 
 ifeq ($(cfg), release)
@@ -49,10 +48,6 @@ ifeq ($(cfg), debug)
         CPLUS_FLAGS = -DTBB_USE_DEBUG $(ITT_NOTIFY) -g -O0 -DUSE_PTHREAD
 endif
 
-ifneq (00,$(lambdas)$(cpp0x))
-    CXX_ONLY_FLAGS += $(CPP11_FLAGS)
-endif
-
 TBB_ASM.OBJ=
 MALLOC_ASM.OBJ=
 
diff --git a/build/linux.xl.inc b/build/linux.xl.inc
index 083b883..fccb559 100644
--- a/build/linux.xl.inc
+++ b/build/linux.xl.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 ####### Detections and Commands ###############################################
 
diff --git a/build/macos.clang.inc b/build/macos.clang.inc
index 3aacdeb..3237705 100644
--- a/build/macos.clang.inc
+++ b/build/macos.clang.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 CPLUS = clang++
 CONLY = clang
@@ -51,15 +51,9 @@ ifneq (,$(shell grep xtest `echo "\#include<immintrin.h>" | clang -E -M - 2>&1 |
     RTM_KEY = -mrtm
 endif
 
-ifeq (libc++,$(stdlib))
-    CPLUS_FLAGS    += -stdlib=libc++
-    LIB_LINK_FLAGS += -stdlib=libc++
-endif
-
-CPP11_FLAGS = -std=c++11 -D_TBB_CPP0X
-    
-ifneq (00,$(lambdas)$(cpp0x))
-    CXX_ONLY_FLAGS += $(CPP11_FLAGS)
+ifneq (,$(stdlib))
+    CPLUS_FLAGS    += -stdlib=$(stdlib)
+    LIB_LINK_FLAGS += -stdlib=$(stdlib)
 endif
 
 ifeq (intel64,$(arch))
@@ -86,14 +80,15 @@ ifeq (ppc32,$(arch))
     LIB_LINK_FLAGS += -arch ppc
 endif
 
-ifeq (armv7,$(arch))
-    CPLUS_FLAGS += -arch armv7
-    LINK_FLAGS += -arch armv7
-    LIB_LINK_FLAGS += -arch armv7
+ifeq ($(arch),$(filter $(arch),armv7 armv7s arm64))
+    CPLUS_FLAGS += -arch $(arch)
+    LINK_FLAGS += -arch $(arch)
+    LIB_LINK_FLAGS += -arch $(arch)
 endif
 
 ifdef SDKROOT
     CPLUS_FLAGS += -isysroot $(SDKROOT)
+    LINK_FLAGS += -L$(SDKROOT)/usr/lib/system -L$(SDKROOT)/usr/lib/
     LIB_LINK_FLAGS += -L$(SDKROOT)/usr/lib/system -L$(SDKROOT)/usr/lib/
 endif
 
diff --git a/build/macos.gcc.inc b/build/macos.gcc.inc
index 75a9b8c..65c7047 100644
--- a/build/macos.gcc.inc
+++ b/build/macos.gcc.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 CPLUS = g++
 CONLY = gcc
diff --git a/build/macos.icc.inc b/build/macos.icc.inc
index 970e73b..cfdd007 100644
--- a/build/macos.icc.inc
+++ b/build/macos.icc.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 CPLUS = icpc
 CONLY = icc
@@ -27,18 +27,23 @@ OUTPUTOBJ_KEY = -o #
 PIC_KEY = -fPIC
 WARNING_AS_ERROR_KEY = -Werror
 WARNING_KEY = -w1
+ifneq (,$(shell icc -dumpversion | egrep "1[2-9]\."))
+SDL_FLAGS = -fstack-protector -Wformat -Wformat-security
+endif
+
 DYLIB_KEY = -dynamiclib
 EXPORT_KEY = -Wl,-exported_symbols_list,
 LIBDL = -ldl
 
-OPENMP_FLAG = -openmp
 LIBS = -lpthread
 LINK_FLAGS =
-LIB_LINK_FLAGS = -dynamiclib -i-static -install_name @rpath/$(BUILDING_LIBRARY)
+LIB_LINK_FLAGS = -dynamiclib -static-intel -install_name @rpath/$(BUILDING_LIBRARY)
 C_FLAGS = $(CPLUS_FLAGS)
-# ICC 11.0 and higher support -std=c++0x
-ifneq (,$(shell icc -dumpversion | egrep  "^1[1-9]\."))
-    CPP11_FLAGS = -std=c++0x -D_TBB_CPP0X
+
+ifneq (,$(shell icc -dumpversion | egrep  "^1[6-9]\."))
+OPENMP_FLAG = -qopenmp
+else
+OPENMP_FLAG = -openmp
 endif
 
 # ICC 12.0 and higher provide Intel(R) Cilk(TM) Plus
@@ -47,6 +52,7 @@ ifneq (,$(shell icc -dumpversion | egrep  "^1[2-9]\."))
 endif
 
 ifeq ($(cfg), release)
+    SDL_FLAGS += -D_FORTIFY_SOURCE=2
     CPLUS_FLAGS = -g -O2 -fno-omit-frame-pointer
 else
     CPLUS_FLAGS = -g -O0 -DTBB_USE_DEBUG
@@ -55,21 +61,17 @@ endif
 CPLUS_FLAGS += -DUSE_PTHREAD
 
 ifneq (,$(codecov))
-    CPLUS_FLAGS += -prof-genx
-endif
-
-ifneq (00,$(lambdas)$(cpp0x))
-	CXX_ONLY_FLAGS += $(CPP11_FLAGS)
+    CPLUS_FLAGS += -prof-gen=srcpos
 endif
 
 # ICC 14.0 and higher support usage of libc++, clang standard library
+# Extending minimal deployment version of official binaries to unsupported 10.8
+# per customer requests. TODO: make a dedicated variable for this
 ifneq (,$(shell icc -dumpversion | egrep  "^1[4-9]\."))
-    LIBCPP_KEY = -stdlib=libc++
+ifneq (,$(stdlib))
+    CPLUS_FLAGS    += -stdlib=$(stdlib) -mmacosx-version-min=10.8
+    LIB_LINK_FLAGS += -stdlib=$(stdlib) -mmacosx-version-min=10.8
 endif
-
-ifeq (libc++,$(stdlib))
-    CPLUS_FLAGS    += $(LIBCPP_KEY)
-    LIB_LINK_FLAGS += $(LIBCPP_KEY)
 endif
 
 #------------------------------------------------------------------------------
diff --git a/build/macos.inc b/build/macos.inc
index b4e3ef8..8df5bbd 100644
--- a/build/macos.inc
+++ b/build/macos.inc
@@ -1,30 +1,31 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 ####### Detections and Commands ###############################################
 
 ifeq (icc,$(compiler))
   export COMPILER_VERSION := ICC: $(shell icc -V </dev/null 2>&1 | grep 'Version')
-  ifneq (,$(findstring IA-32, $(COMPILER_VERSION)))
+  ifneq (,$(findstring running on IA-32, $(COMPILER_VERSION)))
     export arch:=ia32
-  endif
-  ifneq (,$(findstring Intel(R) 64, $(COMPILER_VERSION)))
-    export arch:=intel64
+  else
+    ifneq (,$(findstring running on Intel(R) 64, $(COMPILER_VERSION)))
+      export arch:=intel64
+    endif
   endif
   ifeq (,$(arch))
     $(warning "Unknown Intel compiler")
@@ -47,28 +48,19 @@ ifndef arch
  endif
 endif
 
-ifeq (ios,$(target))
-  ifneq (armv7, $(arch))
-    $(error $(arch) not supported for target 'ios')
-  endif
-  export SDKROOT?=$(shell xcodebuild -sdk -version | grep -o -E '/.*SDKs/iPhoneOS.*' 2>/dev/null)
-  ifeq (,$(SDKROOT))
-    $(error iOS SDK not found)
-  endif
-  # next, use a single compiler include file for both iOS* and OS X* builds.
-  override target:=macos
-  export target
-endif
-
 ifndef runtime
- gcc_version:=$(shell gcc -dumpversion)
- os_version:=$(shell /usr/bin/sw_vers -productVersion)
- export runtime:=cc$(gcc_version)_os$(os_version)
+  clang_version:=$(shell clang -v 2>&1 >/dev/null | grep version | sed -e "s/.*version \(.*[0-9]\) .*/\1/")
+  ifndef os_version
+    os_version:=$(shell /usr/bin/sw_vers -productVersion)
+  endif
+  export runtime:=cc$(clang_version)_os$(os_version)
 endif
 
 native_compiler := clang
 export compiler ?= clang
-debugger ?= gdb
+debugger ?= lldb
+
+export stdlib ?= libc++
 
 CMD=$(SHELL) -c
 CWD=$(shell pwd)
@@ -111,3 +103,5 @@ MALLOCPROXY.LIB = $(MALLOCPROXY.DLL)
 LINK_MALLOCPROXY.LIB = $(MALLOCPROXY.LIB)
 
 TEST_LAUNCHER=sh $(tbb_root)/build/test_launcher.sh $(largs)
+
+OPENCL.LIB = -framework OpenCL
diff --git a/build/mic.icc.inc b/build/mic.icc.inc
index 941fd66..5574a8d 100644
--- a/build/mic.icc.inc
+++ b/build/mic.icc.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 COMPILE_ONLY = -c -MMD
 PREPROC_ONLY = -E -x c++
@@ -25,51 +25,45 @@ OUTPUTOBJ_KEY = -o #
 PIC_KEY = -fPIC
 WARNING_AS_ERROR_KEY = -Werror
 WARNING_KEY = -w1
-# Several options (e.g. -opt-streaming-stores) were deprecated in Intel(R) Compiler 15.0.
-# When Intel(R) Compiler 14.0 support is dropped consider enabling remark 10009 and replacing deprecated options with
-# new ones (e.g. -qopt-streaming-stores never).
-WARNING_SUPPRESS = -diag-disable 10009
-TEST_WARNING_KEY = -diag-disable 10009
 DYLIB_KEY = -shared -Wl,-soname=$@
 EXPORT_KEY = -Wl,--version-script,
 NOINTRINSIC_KEY = -fno-builtin
 LIBDL = -ldl
-
+SDL_FLAGS = -fstack-protector -Wformat -Wformat-security
 CPLUS = icpc
 CONLY = icc
 
 ifeq (release,$(cfg))
+    SDL_FLAGS += -D_FORTIFY_SOURCE=2
     CPLUS_FLAGS = -O2 -g -DUSE_PTHREAD
 else
     CPLUS_FLAGS = -O0 -g -DUSE_PTHREAD -DTBB_USE_DEBUG
 endif
 
 ifneq (,$(codecov))
-    CPLUS_FLAGS += -prof-genx
+    CPLUS_FLAGS += -prof-gen=srcpos
 endif
 
+ifneq (,$(shell icc -dumpversion | egrep  "^1[6-9]\."))
+OPENMP_FLAG = -qopenmp
+else
 OPENMP_FLAG = -openmp
-LIB_LINK_FLAGS = -shared -i-static -Wl,-soname=$(BUILDING_LIBRARY)
+endif
+
+LIB_LINK_FLAGS = -shared -static-intel -Wl,-soname=$(BUILDING_LIBRARY) -z relro -z now
 LIBS += -lpthread -lrt
 C_FLAGS = $(CPLUS_FLAGS)
-CPP11_FLAGS = -std=c++0x -D_TBB_CPP0X
 CILK_AVAILABLE = yes
 
 TBB_ASM.OBJ=
 MALLOC_ASM.OBJ=
 
-ifneq (00,$(lambdas)$(cpp0x))
-    CXX_ONLY_FLAGS += $(CPP11_FLAGS)
-endif
-
-CPLUS_FLAGS += -DHARNESS_INCOMPLETE_SOURCES=1 -D__TBB_MIC_NATIVE -DTBB_USE_EXCEPTIONS=0 -opt-streaming-stores never
+CPLUS_FLAGS += -DHARNESS_INCOMPLETE_SOURCES=1 -D__TBB_MIC_NATIVE -DTBB_USE_EXCEPTIONS=0 -qopt-streaming-stores never
 CPLUS += -mmic
 CONLY += -mmic
 LINK_FLAGS = -Wl,-rpath-link=. -rdynamic
 # Tell the icc to not link against libcilk*. Otherwise icc tries to link and emits a warning message.
 LIB_LINK_FLAGS += -no-intel-extensions
-# Do not depend on libirc etc dynamic libs. It makes 'native' execution easier for the users.
-LIB_LINK_FLAGS += -static-intel
 
 #------------------------------------------------------------------------------
 # Setting tbbmalloc data.
diff --git a/build/mic.linux.inc b/build/mic.linux.inc
index 00b28e4..b739d61 100644
--- a/build/mic.linux.inc
+++ b/build/mic.linux.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 ifeq ($(tbb_os),mic)
   $(error MIC supports only cross-compilation.  Specify "target=mic" instead.)
diff --git a/build/mic.linux.launcher.sh b/build/mic.linux.launcher.sh
index 0409f76..ac69a43 100644
--- a/build/mic.linux.launcher.sh
+++ b/build/mic.linux.launcher.sh
@@ -1,22 +1,22 @@
 #!/bin/bash
 #
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-#
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-#
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
 
 # Usage:
 # mic.linux.launcher.sh [-v] [-q] [-s] [-r <repeats>] [-u] [-l <library>] <executable> <arg1> <arg2> <argN>
@@ -72,6 +72,7 @@ targetdir="`$RSH mktemp -d /tmp/tbbtestXXXXXX 2>/dev/null`" #
 hostdir="`mktemp -d /tmp/tbbtestXXXXXX 2>/dev/null`" #
 #
 function copy_files { #
+    [ $verbose ] && echo Going to copy $* #
     eval "cp $* $hostdir/ $SUPPRESS 2>/dev/null || exit \$?" #
     eval "$RCP $hostdir/* $MICDEV:$targetdir/ $SUPPRESS 2>/dev/null || exit \$?" #
     eval "rm $hostdir/* $SUPPRESS 2>/dev/null || exit \$?" #
@@ -100,8 +101,11 @@ fnamelist="" #
 # For example, go through MIC_LD_LIBRARY_PATH and add TBB libraries from the first
 # directory that contains tbb files
 mic_dir_list=`echo .:$MIC_LD_LIBRARY_PATH | tr : " "` #
+[ $verbose ] && echo Searching libraries in $mic_dir_list
 for name in $ldd_list; do # adds the first matched name in specified dirs
-    fnamelist+="`find $mic_dir_list -name $name -a -readable -print -quit 2>/dev/null` "||: #
+    found="`find -L $mic_dir_list -name $name -a -readable -print -quit 2>/dev/null` "||: #
+    [ $verbose ] && echo File $name: $found
+    fnamelist+=$found
 done #
 #
 # Remove extra spaces.
diff --git a/build/mic.offload.inc b/build/mic.offload.inc
index 0cf51a2..96f0800 100644
--- a/build/mic.offload.inc
+++ b/build/mic.offload.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 ifneq (mic,$(offload))
   $(error File mic.offload.inc should not be included directly. Use offload=mic instead.)
@@ -32,11 +32,11 @@ ifdef BUILDING_PHASE
     # Tests
     export MIC_OFFLOAD_NATIVE_PATH
     LINK_TBB_NATIVE.LIB=$(MIC_OFFLOAD_NATIVE_PATH)/$(TBB.LIB)
-    LINK_TBB.LIB=-offload-option,mic,ld,"$(LINK_TBB_NATIVE.LIB)" $(TBB.LIB)
+    LINK_TBB.LIB=-qoffload-option,mic,ld,"$(LINK_TBB_NATIVE.LIB)" $(TBB.LIB)
     LINK_MALLOC_NATIVE.LIB=$(MIC_OFFLOAD_NATIVE_PATH)/$(MALLOC.DLL)
-    LINK_MALLOC.LIB=-offload-option,mic,ld,"$(LINK_MALLOC_NATIVE.LIB)" $(MALLOC.LIB)
+    LINK_MALLOC.LIB=-qoffload-option,mic,ld,"$(LINK_MALLOC_NATIVE.LIB)" $(MALLOC.LIB)
     LINK_MALLOCPROXY_NATIVE.LIB=$(MIC_OFFLOAD_NATIVE_PATH)/$(MALLOCPROXY.DLL)
-    LINK_MALLOCPROXY.LIB=-offload-option,mic,ld,"$(LINK_MALLOCPROXY_NATIVE.LIB)" $(MALLOCPROXY.LIB)
+    LINK_MALLOCPROXY.LIB=-qoffload-option,mic,ld,"$(LINK_MALLOCPROXY_NATIVE.LIB)" $(MALLOCPROXY.LIB)
 
     # Export extensions for test_launcher
     export DLL
@@ -50,23 +50,18 @@ ifdef BUILDING_PHASE
     WARNING_AS_ERROR_KEY = Warning as error
     WARNING_KEY = -diag-warning 2426 -w0
 
-    # Several options (e.g. -offload-attribute-target, -offload-option and so on) were deprecated in Intel(R) Compiler 15.0.
-    # When Intel(R) Compiler 14.0 support is dropped consider enabling remark 10009 and replacing deprecated options with
-    # new ones (e.g. -qoffload-attribute-target, -qoffload-option and so on).
-    WARNING_KEY += -diag-disable 10009
-
-    CXX_MIC_STUFF = -offload-attribute-target=mic -D__TBB_MIC_OFFLOAD=1 -offload-option,mic,compiler,"-D__TBB_MIC_OFFLOAD=1 $(CXX_MIC_NATIVE_STUFF)"
+    CXX_MIC_STUFF = -qoffload-attribute-target=mic -D__TBB_MIC_OFFLOAD=1 -qoffload-option,mic,compiler,"-D__TBB_MIC_OFFLOAD=1 $(CXX_MIC_NATIVE_STUFF)"
     CXX_MIC_NATIVE_STUFF = -DHARNESS_INCOMPLETE_SOURCES=1 -D__TBB_MIC_NATIVE -DTBB_USE_EXCEPTIONS=0
     CPLUS_FLAGS += $(CXX_MIC_STUFF)
 
     # Some tests require that an executable exports its symbols.
-    LINK_FLAGS += -offload-option,mic,ld,"--export-dynamic"
+    LINK_FLAGS += -qoffload-option,mic,ld,"--export-dynamic"
 
     # libcoi_device.so is needed for COIProcessProxyFlush used in Harness.
-    LINK_FLAGS += -offload-option,mic,ld,"-lcoi_device"
+    LINK_FLAGS += -qoffload-option,mic,ld,"-lcoi_device"
 
     # DSO-linking semantics forces linking libpthread and librt to a test.
-    LINK_FLAGS += -offload-option,mic,ld,"-lpthread -lrt"
+    LINK_FLAGS += -qoffload-option,mic,ld,"-lpthread -lrt"
 
     .PHONY: FORCE
     FORCE:
@@ -78,7 +73,7 @@ ifdef BUILDING_PHASE
 
     .PRECIOUS: $(MIC_OFFLOAD_NATIVE_PATH)/%_dll.$(DLL)
 
-    %.$(TEST_EXT): LINK_FILES+=-offload-option,mic,ld,"$(addprefix $(MIC_OFFLOAD_NATIVE_PATH)/,$(TEST_LIBS))"
+    %.$(TEST_EXT): LINK_FILES+=-qoffload-option,mic,ld,"$(addprefix $(MIC_OFFLOAD_NATIVE_PATH)/,$(TEST_LIBS))"
 
     TEST_LAUNCHER=sh $(tbb_root)/build/test_launcher.sh $(largs)
 
@@ -111,7 +106,7 @@ else
   # Add the dependency on target libraries
   $(call addsuffixes, _debug _release,$(LIB_TARGETS)): %: %_mic
 
-  # tbb_build_prefix should be overriden since we want to restart make in "clear" environment
+  # tbb_build_prefix should be overridden since we want to restart make in "clear" environment
   $(call addsuffixes, _debug_mic _release_mic,$(LIB_TARGETS)): override tbb_build_prefix=
   $(call addsuffixes, _debug_mic _release_mic,$(LIB_TARGETS)): %_mic:
 	@$(MAKE) --no-print-directory -C "$(full_tbb_root)/src" $* target=mic tbb_root=..
diff --git a/build/test_launcher.bat b/build/test_launcher.bat
index 35bbf43..88c43dc 100644
--- a/build/test_launcher.bat
+++ b/build/test_launcher.bat
@@ -1,22 +1,22 @@
 @echo off
 REM
-REM Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+REM Copyright (c) 2005-2017 Intel Corporation
+REM
+REM Licensed under the Apache License, Version 2.0 (the "License");
+REM you may not use this file except in compliance with the License.
+REM You may obtain a copy of the License at
+REM
+REM     http://www.apache.org/licenses/LICENSE-2.0
+REM
+REM Unless required by applicable law or agreed to in writing, software
+REM distributed under the License is distributed on an "AS IS" BASIS,
+REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+REM See the License for the specific language governing permissions and
+REM limitations under the License.
+REM
+REM
 REM
-REM This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-REM you can redistribute it and/or modify it under the terms of the GNU General Public License
-REM version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is
-REM distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
-REM implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-REM See  the GNU General Public License for more details.   You should have received a copy of
-REM the  GNU General Public License along with Threading Building Blocks; if not, write to the
-REM Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 REM
-REM As a special exception,  you may use this file  as part of a free software library without
-REM restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-REM functions from this file, or you compile this file and link it with other files to produce
-REM an executable,  this file does not by itself cause the resulting executable to be covered
-REM by the GNU General Public License. This exception does not however invalidate any other
-REM reasons why the executable file might be covered by the GNU General Public License.
 REM
 
 set cmd_line=
diff --git a/build/test_launcher.sh b/build/test_launcher.sh
index 02f7686..831136f 100644
--- a/build/test_launcher.sh
+++ b/build/test_launcher.sh
@@ -1,22 +1,22 @@
 #!/bin/sh
 #
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # Usage:
 # test_launcher.sh [-v] [-q] [-s] [-r <repeats>] [-u] [-l <library>] <executable> <arg1> <arg2> <argN>
@@ -71,13 +71,18 @@ stressed() { echo Doing stress testing. Press Ctrl-C to terminate #
 repeated() { #
     i=0; while [ "$i" -lt $repeat ]; do i=`expr $i + 1`; echo $i of $repeat:; $*; done #
 } #
+# DYLD_LIBRARY_PATH can be purged on OS X 10.11, set it again
+if [ `uname` = 'Darwin' -a -z "$DYLD_LIBRARY_PATH" ] ; then #
+    DYLD_LIBRARY_PATH=. #
+    export DYLD_LIBRARY_PATH #
+fi #
 # Run the command line passed via parameters
 [ $verbose ] && echo Running $run_prefix $* #
 if [ -n "$LD_PRELOAD" ] ; then #
     export LD_PRELOAD #
 elif [ -n "$DYLD_INSERT_LIBRARIES" ] ; then #
     export DYLD_INSERT_LIBRARIES #
-fi
+fi #
 exec 4>&1 # extracting exit code of the first command in pipeline needs duplicated stdout
 # custom redirection needs eval, otherwise shell cannot parse it
 err=`eval '( $run_prefix $* || echo \$? >&3; )' ${OUTPUT} 3>&1 >&4` #
diff --git a/build/version_info_aix.sh b/build/version_info_aix.sh
index 5df78af..622a22e 100644
--- a/build/version_info_aix.sh
+++ b/build/version_info_aix.sh
@@ -1,22 +1,22 @@
 #!/bin/sh
 #
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-#
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-#
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
 
 # Script used to generate version info string
 echo "#define __TBB_VERSION_STRINGS(N) \\"
diff --git a/build/version_info_android.sh b/build/version_info_android.sh
index 55af4ea..2439207 100644
--- a/build/version_info_android.sh
+++ b/build/version_info_android.sh
@@ -1,29 +1,29 @@
 #!/bin/sh
 #
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-#
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-#
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
 
 # Script used to generate version info string
 echo "#define __TBB_VERSION_STRINGS(N) \\"
 echo '#N": BUILD_HOST'"\t\t"`hostname -s`" ("`uname -m`")"'" ENDL \'
 # find OS name in *-release and issue* files by filtering blank lines and lsb-release content out
 echo '#N": BUILD_OS'"\t\t"`lsb_release -sd 2>/dev/null | grep -ih '[a-z] ' - /etc/*release /etc/issue 2>/dev/null | head -1 | sed -e 's/["\\\\]//g'`'" ENDL \'
-echo '#N": BUILD_GCC'"\t\t"`${tbb_tool_prefix}g++ --version | grep 'g++'`'" ENDL \'
+echo '#N": BUILD_TARGET_CXX'"\t"`$TARGET_CXX --version | head -n1`'" ENDL \'
 [ -z "$COMPILER_VERSION" ] || echo '#N": BUILD_COMPILER'"\t"$COMPILER_VERSION'" ENDL \'
 [ -z "$ndk_version" ] || echo '#N": BUILD_NDK'"\t\t$ndk_version"'" ENDL \'
 echo '#N": BUILD_LD'"\t\t"`${tbb_tool_prefix}ld -v 2>&1 | grep 'ld'`'" ENDL \'
diff --git a/build/version_info_linux.sh b/build/version_info_linux.sh
index 5df78af..622a22e 100644
--- a/build/version_info_linux.sh
+++ b/build/version_info_linux.sh
@@ -1,22 +1,22 @@
 #!/bin/sh
 #
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-#
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-#
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
 
 # Script used to generate version info string
 echo "#define __TBB_VERSION_STRINGS(N) \\"
diff --git a/build/version_info_macos.sh b/build/version_info_macos.sh
index 2db20af..397b108 100644
--- a/build/version_info_macos.sh
+++ b/build/version_info_macos.sh
@@ -1,22 +1,22 @@
 #!/bin/sh
 #
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-#
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-#
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
 
 # Script used to generate version info string
 echo "#define __TBB_VERSION_STRINGS(N) \\"
diff --git a/build/version_info_sunos.sh b/build/version_info_sunos.sh
index 3ac838c..96cd9ba 100644
--- a/build/version_info_sunos.sh
+++ b/build/version_info_sunos.sh
@@ -1,22 +1,22 @@
 #!/bin/sh
 #
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-#
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-#
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
 
 # Script used to generate version info string
 echo "#define __TBB_VERSION_STRINGS(N) \\"
diff --git a/build/version_info_windows.js b/build/version_info_windows.js
index b0df098..5fd8b8a 100644
--- a/build/version_info_windows.js
+++ b/build/version_info_windows.js
@@ -1,20 +1,20 @@
-// Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+// Copyright (c) 2005-2017 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
 //
-// This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-// you can redistribute it and/or modify it under the terms of the GNU General Public License
-// version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-// Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 //
-// As a special exception,  you may use this file  as part of a free software library without
-// restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-// functions from this file, or you compile this file and link it with other files to produce
-// an executable,  this file does not by itself cause the resulting executable to be covered
-// by the GNU General Public License. This exception does not however invalidate any other
-// reasons why the executable file might be covered by the GNU General Public License.
 
 var WshShell = WScript.CreateObject("WScript.Shell");
 
@@ -40,7 +40,13 @@ WScript.echo( "#N \": BUILD_OS\\t\\t" +
 
 if ( WScript.Arguments(0).toLowerCase().match("gcc") ) {
     tmpExec = WshShell.Exec(WScript.Arguments(0) + " --version");
-    WScript.echo( "#N \": BUILD_COMPILER\\t" + 
+    WScript.echo( "#N \": BUILD_GCC\\t\\t" + 
+                  tmpExec.StdOut.ReadLine() + 
+                  "\" ENDL \\" );
+
+} else if ( WScript.Arguments(0).toLowerCase().match("clang") ) {
+    tmpExec = WshShell.Exec(WScript.Arguments(0) + " --version");
+    WScript.echo( "#N \": BUILD_CLANG\\t" + 
                   tmpExec.StdOut.ReadLine() + 
                   "\" ENDL \\" );
 
@@ -87,42 +93,3 @@ WScript.echo( "#define __TBB_DATETIME \"" + date.toUTCString() + "\"" );
 WScript.echo( "#define __TBB_VERSION_YMD " + date.getUTCFullYear() + ", " + 
               (date.getUTCMonth() > 8 ? (date.getUTCMonth()+1):("0"+(date.getUTCMonth()+1))) + 
               (date.getUTCDate() > 9 ? date.getUTCDate():("0"+date.getUTCDate())) );
-
-
-/*
-
-Original strings
-
-#define __TBB_VERSION_STRINGS \
-"TBB: BUILD_HOST\t\tvpolin-mobl1 (ia32)" ENDL \
-"TBB: BUILD_OS\t\tMicrosoft Windows XP [Version 5.1.2600]" ENDL \
-"TBB: BUILD_CL\t\tMicrosoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86" ENDL \
-"TBB: BUILD_COMPILER\tIntel(R) C++ Compiler for 32-bit applications, Version 9.1 Build 20070109Z Package ID: W_CC_C_9.1.034 " ENDL \
-"TBB: BUILD_TARGET\t" ENDL \
-"TBB: BUILD_COMMAND\t" ENDL \
-
-#define __TBB_DATETIME "Mon Jun 4 10:16:07 UTC 2007"
-#define __TBB_VERSION_YMD 2007, 0604
-
-
-
-# The script must be run from two directory levels below this level.
-x='"TBB: '
-y='" ENDL \'
-echo "#define __TBB_VERSION_STRINGS \\"
-echo $x "BUILD_HOST\t\t"`hostname`" ("`../../arch.exe`")"$y
-echo $x "BUILD_OS\t\t"`../../win_version.bat|grep -i 'Version'`$y
-echo >empty.cpp
-echo $x "BUILD_CL\t\t"`cl -c empty.cpp 2>&1 | grep -i Version`$y
-echo $x "BUILD_COMPILER\t"`icl -c empty.cpp 2>&1 | grep -i Version`$y
-echo $x "BUILD_TARGET\t"$TBB_ARCH$y
-echo $x "BUILD_COMMAND\t"$*$y
-echo ""
-# A workaround for MKS 8.6 where `date -u` crashes.
-date -u > date.tmp
-echo "#define __TBB_DATETIME \""`cat date.tmp`"\""
-echo "#define __TBB_VERSION_YMD "`date '+%Y, %m%d'`
-rm empty.cpp
-rm empty.obj
-rm date.tmp
-*/
diff --git a/build/vs2010/index.html b/build/vs2010/index.html
deleted file mode 100644
index f638157..0000000
--- a/build/vs2010/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<HTML>
-<BODY>
-
-<H2>Overview</H2>
-This directory contains the visual studio* 2010 solution to build Intel&reg Threading Building Blocks.
-
-
-<H2>Files</H2>
-<DL>
-<DT><A HREF="makefile.sln">makefile.sln</A>
-<DD>Solution file.
-<DT><A HREF="tbb.vcxproj">tbb.vcxproj</A>
-<DD>Library project file.
-<DT><A HREF="tbbmalloc.vcxproj">tbbmalloc.vcxproj</A>
-<DD>Scalable allocator library project file. Allocator sources are expected to be located in <A HREF="../../src/tbbmalloc">../../src/tbbmalloc</A> folder.
-<DT><A HREF="tbbmalloc_proxy.vcxproj">tbbmalloc_proxy.vcxproj</A>
-<DD>Standard allocator replacement project file. 
-</DL>
-
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<P></P>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
diff --git a/build/vs2010/makefile.sln b/build/vs2010/makefile.sln
deleted file mode 100644
index 1174098..0000000
--- a/build/vs2010/makefile.sln
+++ /dev/null
@@ -1,78 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{8898CE0B-0BFB-45AE-AA71-83735ED2510D}"
-	ProjectSection(SolutionItems) = preProject
-		index.html = index.html
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tbb", "tbb.vcxproj", "{F62787DD-1327-448B-9818-030062BCFAA5}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tbbmalloc", "tbbmalloc.vcxproj", "{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tbbmalloc_proxy", "tbbmalloc_proxy.vcxproj", "{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
-		Debug-MT|Win32 = Debug-MT|Win32
-		Debug-MT|x64 = Debug-MT|x64
-		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
-		Release-MT|Win32 = Release-MT|Win32
-		Release-MT|x64 = Release-MT|x64
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{F62787DD-1327-448B-9818-030062BCFAA5}.Debug|Win32.ActiveCfg = Debug|Win32
-		{F62787DD-1327-448B-9818-030062BCFAA5}.Debug|Win32.Build.0 = Debug|Win32
-		{F62787DD-1327-448B-9818-030062BCFAA5}.Debug|x64.ActiveCfg = Debug|x64
-		{F62787DD-1327-448B-9818-030062BCFAA5}.Debug|x64.Build.0 = Debug|x64
-		{F62787DD-1327-448B-9818-030062BCFAA5}.Debug-MT|Win32.ActiveCfg = Debug-MT|Win32
-		{F62787DD-1327-448B-9818-030062BCFAA5}.Debug-MT|Win32.Build.0 = Debug-MT|Win32
-		{F62787DD-1327-448B-9818-030062BCFAA5}.Debug-MT|x64.ActiveCfg = Debug-MT|x64
-		{F62787DD-1327-448B-9818-030062BCFAA5}.Debug-MT|x64.Build.0 = Debug-MT|x64
-		{F62787DD-1327-448B-9818-030062BCFAA5}.Release|Win32.ActiveCfg = Release|Win32
-		{F62787DD-1327-448B-9818-030062BCFAA5}.Release|Win32.Build.0 = Release|Win32
-		{F62787DD-1327-448B-9818-030062BCFAA5}.Release|x64.ActiveCfg = Release|x64
-		{F62787DD-1327-448B-9818-030062BCFAA5}.Release|x64.Build.0 = Release|x64
-		{F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|Win32.ActiveCfg = Release-MT|Win32
-		{F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|Win32.Build.0 = Release-MT|Win32
-		{F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|x64.ActiveCfg = Release-MT|x64
-		{F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|x64.Build.0 = Release-MT|x64
-		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug|Win32.ActiveCfg = Debug|Win32
-		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug|Win32.Build.0 = Debug|Win32
-		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug|x64.ActiveCfg = Debug|x64
-		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug|x64.Build.0 = Debug|x64
-		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug-MT|Win32.ActiveCfg = Debug-MT|Win32
-		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug-MT|Win32.Build.0 = Debug-MT|Win32
-		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug-MT|x64.ActiveCfg = Debug-MT|x64
-		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug-MT|x64.Build.0 = Debug-MT|x64
-		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release|Win32.ActiveCfg = Release|Win32
-		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release|Win32.Build.0 = Release|Win32
-		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release|x64.ActiveCfg = Release|x64
-		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release|x64.Build.0 = Release|x64
-		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release-MT|Win32.ActiveCfg = Release-MT|Win32
-		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release-MT|Win32.Build.0 = Release-MT|Win32
-		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release-MT|x64.ActiveCfg = Release-MT|x64
-		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release-MT|x64.Build.0 = Release-MT|x64
-		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug|Win32.ActiveCfg = Debug|Win32
-		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug|Win32.Build.0 = Debug|Win32
-		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug|x64.ActiveCfg = Debug|x64
-		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug|x64.Build.0 = Debug|x64
-		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug-MT|Win32.ActiveCfg = Debug-MT|Win32
-		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug-MT|Win32.Build.0 = Debug-MT|Win32
-		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug-MT|x64.ActiveCfg = Debug-MT|x64
-		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug-MT|x64.Build.0 = Debug-MT|x64
-		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release|Win32.ActiveCfg = Release|Win32
-		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release|Win32.Build.0 = Release|Win32
-		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release|x64.ActiveCfg = Release|x64
-		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release|x64.Build.0 = Release|x64
-		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release-MT|Win32.ActiveCfg = Release-MT|Win32
-		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release-MT|Win32.Build.0 = Release-MT|Win32
-		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release-MT|x64.ActiveCfg = Release-MT|x64
-		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release-MT|x64.Build.0 = Release-MT|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
diff --git a/build/vs2010/tbb.vcxproj b/build/vs2010/tbb.vcxproj
deleted file mode 100644
index 4ba5a59..0000000
--- a/build/vs2010/tbb.vcxproj
+++ /dev/null
@@ -1,712 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-	<ItemGroup Label="ProjectConfigurations">
-		<ProjectConfiguration Include="Debug-MT|Win32">
-			<Configuration>Debug-MT</Configuration>
-			<Platform>Win32</Platform>
-		</ProjectConfiguration>
-		<ProjectConfiguration Include="Debug-MT|x64">
-			<Configuration>Debug-MT</Configuration>
-			<Platform>x64</Platform>
-		</ProjectConfiguration>
-		<ProjectConfiguration Include="Debug|Win32">
-			<Configuration>Debug</Configuration>
-			<Platform>Win32</Platform>
-		</ProjectConfiguration>
-		<ProjectConfiguration Include="Debug|x64">
-			<Configuration>Debug</Configuration>
-			<Platform>x64</Platform>
-		</ProjectConfiguration>
-		<ProjectConfiguration Include="Release-MT|Win32">
-			<Configuration>Release-MT</Configuration>
-			<Platform>Win32</Platform>
-		</ProjectConfiguration>
-		<ProjectConfiguration Include="Release-MT|x64">
-			<Configuration>Release-MT</Configuration>
-			<Platform>x64</Platform>
-		</ProjectConfiguration>
-		<ProjectConfiguration Include="Release|Win32">
-			<Configuration>Release</Configuration>
-			<Platform>Win32</Platform>
-		</ProjectConfiguration>
-		<ProjectConfiguration Include="Release|x64">
-			<Configuration>Release</Configuration>
-			<Platform>x64</Platform>
-		</ProjectConfiguration>
-	</ItemGroup>
-	<PropertyGroup Label="Globals">
-		<ProjectGuid>{F62787DD-1327-448B-9818-030062BCFAA5}</ProjectGuid>
-		<RootNamespace>tbb</RootNamespace>
-		<Keyword>Win32Proj</Keyword>
-	</PropertyGroup>
-	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props"/>
-	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'" Label="Configuration">
-		<ConfigurationType>DynamicLibrary</ConfigurationType>
-		<CharacterSet>NotSet</CharacterSet>
-		<WholeProgramOptimization>true</WholeProgramOptimization>
-	</PropertyGroup>
-	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'" Label="Configuration">
-		<ConfigurationType>DynamicLibrary</ConfigurationType>
-		<CharacterSet>NotSet</CharacterSet>
-	</PropertyGroup>
-	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-		<ConfigurationType>DynamicLibrary</ConfigurationType>
-		<CharacterSet>NotSet</CharacterSet>
-		<WholeProgramOptimization>true</WholeProgramOptimization>
-	</PropertyGroup>
-	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-		<ConfigurationType>DynamicLibrary</ConfigurationType>
-		<CharacterSet>NotSet</CharacterSet>
-	</PropertyGroup>
-	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'" Label="Configuration">
-		<ConfigurationType>DynamicLibrary</ConfigurationType>
-		<CharacterSet>NotSet</CharacterSet>
-		<WholeProgramOptimization>true</WholeProgramOptimization>
-	</PropertyGroup>
-	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'" Label="Configuration">
-		<ConfigurationType>DynamicLibrary</ConfigurationType>
-		<CharacterSet>NotSet</CharacterSet>
-	</PropertyGroup>
-	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-		<ConfigurationType>DynamicLibrary</ConfigurationType>
-		<CharacterSet>NotSet</CharacterSet>
-		<WholeProgramOptimization>true</WholeProgramOptimization>
-	</PropertyGroup>
-	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-		<ConfigurationType>DynamicLibrary</ConfigurationType>
-		<CharacterSet>NotSet</CharacterSet>
-	</PropertyGroup>
-	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props"/>
-	<ImportGroup Label="ExtensionSettings">
-		<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props"/>
-	</ImportGroup>
-	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'" Label="PropertySheets">
-		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/>
-	</ImportGroup>
-	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'" Label="PropertySheets">
-		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/>
-	</ImportGroup>
-	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/>
-	</ImportGroup>
-	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/>
-	</ImportGroup>
-	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'" Label="PropertySheets">
-		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/>
-	</ImportGroup>
-	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'" Label="PropertySheets">
-		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/>
-	</ImportGroup>
-	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/>
-	</ImportGroup>
-	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/>
-	</ImportGroup>
-	<PropertyGroup Label="UserMacros"/>
-	<PropertyGroup>
-		<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-		<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)ia32\$(Configuration)\</OutDir>
-		<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)ia32\$(Configuration)\</IntDir>
-		<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-		<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)intel64\$(Configuration)\</OutDir>
-		<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)intel64\$(Configuration)\</IntDir>
-		<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
-		<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)ia32\$(Configuration)\</OutDir>
-		<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)ia32\$(Configuration)\</IntDir>
-		<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-		<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)intel64\$(Configuration)\</OutDir>
-		<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)intel64\$(Configuration)\</IntDir>
-		<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-		<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(SolutionDir)ia32\$(Configuration)\</OutDir>
-		<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(SolutionDir)ia32\$(Configuration)\</IntDir>
-		<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">false</LinkIncremental>
-		<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(SolutionDir)intel64\$(Configuration)\</OutDir>
-		<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(SolutionDir)intel64\$(Configuration)\</IntDir>
-		<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">false</LinkIncremental>
-		<OutDir Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">$(SolutionDir)ia32\$(Configuration)\</OutDir>
-		<IntDir Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">$(SolutionDir)ia32\$(Configuration)\</IntDir>
-		<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">false</LinkIncremental>
-		<OutDir Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">$(SolutionDir)intel64\$(Configuration)\</OutDir>
-		<IntDir Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">$(SolutionDir)intel64\$(Configuration)\</IntDir>
-		<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">false</LinkIncremental>
-		<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-		<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'"/>
-		<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'"/>
-		<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-		<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'"/>
-		<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'"/>
-		<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-		<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"/>
-		<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"/>
-		<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-		<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"/>
-		<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"/>
-		<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-		<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'"/>
-		<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'"/>
-		<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-		<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'"/>
-		<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'"/>
-		<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-		<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"/>
-		<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"/>
-		<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-		<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'"/>
-		<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'"/>
-		<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_debug</TargetName>
-		<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(ProjectName)_debug</TargetName>
-		<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_debug</TargetName>
-		<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(ProjectName)_debug</TargetName>
-	</PropertyGroup>
-	<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-		<ClCompile>
-			<AdditionalOptions>  /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /volatile:iso /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include</AdditionalOptions>
-			<Optimization>Disabled</Optimization>
-			<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-			<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
-			<MinimalRebuild>true</MinimalRebuild>
-			<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-			<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-			<PrecompiledHeader>
-			</PrecompiledHeader>
-			<WarningLevel>Level4</WarningLevel>
-			<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-		</ClCompile>
-		<Link>
-			<AdditionalOptions>/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)tbb.def" %(AdditionalOptions)</AdditionalOptions>
-			<OutputFile>$(OutDir)tbb_debug.dll</OutputFile>
-			<GenerateDebugInformation>true</GenerateDebugInformation>
-			<SubSystem>Windows</SubSystem>
-			<RandomizedBaseAddress>false</RandomizedBaseAddress>
-			<DataExecutionPrevention>
-			</DataExecutionPrevention>
-			<TargetMachine>MachineX86</TargetMachine>
-		</Link>
-	</ItemDefinitionGroup>
-	<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-		<Midl>
-			<TargetEnvironment>X64</TargetEnvironment>
-		</Midl>
-		<ClCompile>
-			<AdditionalOptions>  /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /volatile:iso /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include</AdditionalOptions>
-			<Optimization>Disabled</Optimization>
-			<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-			<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
-			<MinimalRebuild>true</MinimalRebuild>
-			<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-			<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-			<BufferSecurityCheck>false</BufferSecurityCheck>
-			<PrecompiledHeader>
-			</PrecompiledHeader>
-			<WarningLevel>Level4</WarningLevel>
-			<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-			<ShowIncludes>false</ShowIncludes>
-		</ClCompile>
-		<Link>
-			<AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)tbb.def" %(AdditionalOptions)</AdditionalOptions>
-			<OutputFile>$(OutDir)tbb_debug.dll</OutputFile>
-			<GenerateDebugInformation>true</GenerateDebugInformation>
-			<SubSystem>Windows</SubSystem>
-			<RandomizedBaseAddress>false</RandomizedBaseAddress>
-			<DataExecutionPrevention>
-			</DataExecutionPrevention>
-			<TargetMachine>MachineX64</TargetMachine>
-			<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
-		</Link>
-	</ItemDefinitionGroup>
-	<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-		<ClCompile>
-			<AdditionalOptions>  /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /volatile:iso /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include</AdditionalOptions>
-			<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-			<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
-			<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-			<PrecompiledHeader>
-			</PrecompiledHeader>
-			<WarningLevel>Level4</WarningLevel>
-			<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-		</ClCompile>
-		<Link>
-			<AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)tbb.def" %(AdditionalOptions)</AdditionalOptions>
-			<OutputFile>$(OutDir)tbb.dll</OutputFile>
-			<GenerateDebugInformation>true</GenerateDebugInformation>
-			<SubSystem>Windows</SubSystem>
-			<OptimizeReferences>true</OptimizeReferences>
-			<EnableCOMDATFolding>true</EnableCOMDATFolding>
-			<RandomizedBaseAddress>false</RandomizedBaseAddress>
-			<DataExecutionPrevention>
-			</DataExecutionPrevention>
-			<TargetMachine>MachineX86</TargetMachine>
-		</Link>
-	</ItemDefinitionGroup>
-	<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-		<Midl>
-			<TargetEnvironment>X64</TargetEnvironment>
-		</Midl>
-		<ClCompile>
-			<AdditionalOptions>  /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /volatile:iso /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include</AdditionalOptions>
-			<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-			<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
-			<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-			<BufferSecurityCheck>false</BufferSecurityCheck>
-			<PrecompiledHeader>
-			</PrecompiledHeader>
-			<WarningLevel>Level4</WarningLevel>
-			<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-		</ClCompile>
-		<Link>
-			<AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)tbb.def" %(AdditionalOptions)</AdditionalOptions>
-			<OutputFile>$(OutDir)tbb.dll</OutputFile>
-			<GenerateDebugInformation>true</GenerateDebugInformation>
-			<SubSystem>Windows</SubSystem>
-			<OptimizeReferences>true</OptimizeReferences>
-			<EnableCOMDATFolding>true</EnableCOMDATFolding>
-			<RandomizedBaseAddress>false</RandomizedBaseAddress>
-			<DataExecutionPrevention>
-			</DataExecutionPrevention>
-			<TargetMachine>MachineX64</TargetMachine>
-			<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
-		</Link>
-	</ItemDefinitionGroup>
-	<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">
-		<ClCompile>
-			<AdditionalOptions>  /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /volatile:iso /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include</AdditionalOptions>
-			<Optimization>Disabled</Optimization>
-			<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-			<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
-			<MinimalRebuild>true</MinimalRebuild>
-			<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-			<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-			<PrecompiledHeader>
-			</PrecompiledHeader>
-			<WarningLevel>Level4</WarningLevel>
-			<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-		</ClCompile>
-		<Link>
-			<AdditionalOptions>/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)tbb.def" %(AdditionalOptions)</AdditionalOptions>
-			<OutputFile>$(OutDir)tbb_debug.dll</OutputFile>
-			<GenerateDebugInformation>true</GenerateDebugInformation>
-			<SubSystem>Windows</SubSystem>
-			<RandomizedBaseAddress>false</RandomizedBaseAddress>
-			<DataExecutionPrevention>
-			</DataExecutionPrevention>
-			<TargetMachine>MachineX86</TargetMachine>
-		</Link>
-	</ItemDefinitionGroup>
-	<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">
-		<Midl>
-			<TargetEnvironment>X64</TargetEnvironment>
-		</Midl>
-		<ClCompile>
-			<AdditionalOptions>  /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /volatile:iso /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include</AdditionalOptions>
-			<Optimization>Disabled</Optimization>
-			<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-			<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
-			<MinimalRebuild>true</MinimalRebuild>
-			<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-			<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-			<BufferSecurityCheck>false</BufferSecurityCheck>
-			<PrecompiledHeader>
-			</PrecompiledHeader>
-			<WarningLevel>Level4</WarningLevel>
-			<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-			<ShowIncludes>false</ShowIncludes>
-		</ClCompile>
-		<Link>
-			<AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)tbb.def" %(AdditionalOptions)</AdditionalOptions>
-			<OutputFile>$(OutDir)tbb_debug.dll</OutputFile>
-			<GenerateDebugInformation>true</GenerateDebugInformation>
-			<SubSystem>Windows</SubSystem>
-			<RandomizedBaseAddress>false</RandomizedBaseAddress>
-			<DataExecutionPrevention>
-			</DataExecutionPrevention>
-			<TargetMachine>MachineX64</TargetMachine>
-			<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
-		</Link>
-	</ItemDefinitionGroup>
-	<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">
-		<ClCompile>
-			<AdditionalOptions>  /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /volatile:iso /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include</AdditionalOptions>
-			<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-			<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
-			<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-			<PrecompiledHeader>
-			</PrecompiledHeader>
-			<WarningLevel>Level4</WarningLevel>
-			<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-		</ClCompile>
-		<Link>
-			<AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)tbb.def" %(AdditionalOptions)</AdditionalOptions>
-			<OutputFile>$(OutDir)tbb.dll</OutputFile>
-			<GenerateDebugInformation>true</GenerateDebugInformation>
-			<SubSystem>Windows</SubSystem>
-			<OptimizeReferences>true</OptimizeReferences>
-			<EnableCOMDATFolding>true</EnableCOMDATFolding>
-			<RandomizedBaseAddress>false</RandomizedBaseAddress>
-			<DataExecutionPrevention>
-			</DataExecutionPrevention>
-			<TargetMachine>MachineX86</TargetMachine>
-		</Link>
-	</ItemDefinitionGroup>
-	<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">
-		<Midl>
-			<TargetEnvironment>X64</TargetEnvironment>
-		</Midl>
-		<ClCompile>
-			<AdditionalOptions>  /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /volatile:iso /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include</AdditionalOptions>
-			<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-			<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
-			<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-			<BufferSecurityCheck>false</BufferSecurityCheck>
-			<PrecompiledHeader>
-			</PrecompiledHeader>
-			<WarningLevel>Level4</WarningLevel>
-			<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-		</ClCompile>
-		<Link>
-			<AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)tbb.def" %(AdditionalOptions)</AdditionalOptions>
-			<OutputFile>$(OutDir)tbb.dll</OutputFile>
-			<GenerateDebugInformation>true</GenerateDebugInformation>
-			<SubSystem>Windows</SubSystem>
-			<OptimizeReferences>true</OptimizeReferences>
-			<EnableCOMDATFolding>true</EnableCOMDATFolding>
-			<RandomizedBaseAddress>false</RandomizedBaseAddress>
-			<DataExecutionPrevention>
-			</DataExecutionPrevention>
-			<TargetMachine>MachineX64</TargetMachine>
-			<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
-		</Link>
-	</ItemDefinitionGroup>
-	<ItemGroup>
-		<MASM Include="..\..\src\tbb\ia32-masm\atomic_support.asm">
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">/coff /Zi</AdditionalOptions>
-			<UseSafeExceptionHandlers Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">true</UseSafeExceptionHandlers>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">true</ExcludedFromBuild>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">/coff /Zi</AdditionalOptions>
-			<UseSafeExceptionHandlers Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</UseSafeExceptionHandlers>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">/coff</AdditionalOptions>
-			<UseSafeExceptionHandlers Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">true</UseSafeExceptionHandlers>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">true</ExcludedFromBuild>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">/coff</AdditionalOptions>
-			<UseSafeExceptionHandlers Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</UseSafeExceptionHandlers>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-		</MASM>
-		<CustomBuild Include="..\..\src\tbb\intel64-masm\atomic_support.asm">
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">building atomic_support.obj</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">ml64 /Fo"intel64\Debug-MT\atomic_support.obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">intel64\Debug-MT\atomic_support.obj;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">building atomic_support.obj</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">ml64 /Fo"intel64\Debug\atomic_support.obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">intel64\Debug\atomic_support.obj;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">building atomic_support.obj</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">ml64 /Fo"intel64\Release-MT\atomic_support.obj"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">intel64\Release-MT\atomic_support.obj;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">building atomic_support.obj</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">ml64 /Fo"intel64\Release\atomic_support.obj"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">intel64\Release\atomic_support.obj;%(Outputs)</Outputs>
-		</CustomBuild>
-		<CustomBuild Include="..\..\src\tbb\intel64-masm\intel64_misc.asm">
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">building intel64_misc.obj</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">ml64 /Fo"intel64\Debug-MT\intel64_misc.obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/intel64_misc.asm
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">intel64\Debug-MT\intel64_misc.obj;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">building intel64_misc.obj</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">ml64 /Fo"intel64\Debug\intel64_misc.obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/intel64_misc.asm
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">intel64\Debug\intel64_misc.obj;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">building intel64_misc.obj</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">ml64 /Fo"intel64\Release-MT\intel64_misc.obj"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/intel64_misc.asm
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">intel64\Release-MT\intel64_misc.obj;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">building intel64_misc.obj</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">ml64 /Fo"intel64\Release\intel64_misc.obj"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/intel64_misc.asm
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">intel64\Release\intel64_misc.obj;%(Outputs)</Outputs>
-		</CustomBuild>
-		<MASM Include="..\..\src\tbb\ia32-masm\itsx.asm">
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">/coff /Zi</AdditionalOptions>
-			<UseSafeExceptionHandlers Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">true</UseSafeExceptionHandlers>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">true</ExcludedFromBuild>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">/coff /Zi</AdditionalOptions>
-			<UseSafeExceptionHandlers Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</UseSafeExceptionHandlers>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">/coff</AdditionalOptions>
-			<UseSafeExceptionHandlers Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">true</UseSafeExceptionHandlers>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">true</ExcludedFromBuild>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">/coff</AdditionalOptions>
-			<UseSafeExceptionHandlers Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</UseSafeExceptionHandlers>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-		</MASM>
-		<CustomBuild Include="..\..\src\tbb\intel64-masm\itsx.asm">
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">building itsx.obj</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">ml64 /Fo"intel64\Debug-MT\itsx.obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/itsx.asm
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">intel64\Debug-MT\itsx.obj;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">building itsx.obj</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">ml64 /Fo"intel64\Debug\itsx.obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/itsx.asm
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">intel64\Debug\itsx.obj;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">building itsx.obj</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">ml64 /Fo"intel64\Release-MT\itsx.obj"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/itsx.asm
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">intel64\Release-MT\itsx.obj;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">building itsx.obj</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">ml64 /Fo"intel64\Release\itsx.obj"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/itsx.asm
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">intel64\Release\itsx.obj;%(Outputs)</Outputs>
-		</CustomBuild>
-		<MASM Include="..\..\src\tbb\ia32-masm\lock_byte.asm">
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">/coff /Zi</AdditionalOptions>
-			<UseSafeExceptionHandlers Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">true</UseSafeExceptionHandlers>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">true</ExcludedFromBuild>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">/coff /Zi</AdditionalOptions>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">/coff /Zi</AdditionalOptions>
-			<UseSafeExceptionHandlers Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</UseSafeExceptionHandlers>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">/coff /Zi</AdditionalOptions>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">/coff</AdditionalOptions>
-			<UseSafeExceptionHandlers Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">true</UseSafeExceptionHandlers>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">true</ExcludedFromBuild>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">/coff</AdditionalOptions>
-			<UseSafeExceptionHandlers Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</UseSafeExceptionHandlers>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-		</MASM>
-	</ItemGroup>
-	<ItemGroup>
-		<CustomBuild Include="..\..\src\tbb\win32-tbb-export.def">
-			<Message Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">generating tbb.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)tbb.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(IntDir)tbb.def;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">generating tbb.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)tbb.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(IntDir)tbb.def;%(Outputs)</Outputs>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">generating tbb.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)tbb.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)tbb.def;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">generating tbb.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)tbb.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)tbb.def;%(Outputs)</Outputs>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">generating tbb.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)tbb.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">$(IntDir)tbb.def;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">generating tbb.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)tbb.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">$(IntDir)tbb.def;%(Outputs)</Outputs>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">generating tbb.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)tbb.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)tbb.def;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">generating tbb.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)tbb.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)tbb.def;%(Outputs)</Outputs>
-		</CustomBuild>
-		<CustomBuild Include="..\..\src\tbb\win64-tbb-export.def">
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">generating tbb.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)tbb.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(IntDir)tbb.def;%(Outputs)</Outputs>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">generating tbb.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)tbb.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(IntDir)tbb.def;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">generating tbb.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)tbb.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)tbb.def;%(Outputs)</Outputs>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">generating tbb.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)tbb.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)tbb.def;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">generating tbb.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)tbb.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">$(IntDir)tbb.def;%(Outputs)</Outputs>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">generating tbb.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)tbb.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">$(IntDir)tbb.def;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">generating tbb.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)tbb.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)tbb.def;%(Outputs)</Outputs>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">generating tbb.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)tbb.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)tbb.def;%(Outputs)</Outputs>
-		</CustomBuild>
-	</ItemGroup>
-	<ItemGroup>
-		<ClCompile Include="..\..\src\tbb\concurrent_hash_map.cpp"/>
-		<ClCompile Include="..\..\src\tbb\concurrent_queue.cpp"/>
-		<ClCompile Include="..\..\src\tbb\concurrent_vector.cpp"/>
-		<ClCompile Include="..\..\src\tbb\dynamic_link.cpp"/>
-		<ClCompile Include="..\..\src\tbb\itt_notify.cpp"/>
-		<ClCompile Include="..\..\src\tbb\cache_aligned_allocator.cpp"/>
-		<ClCompile Include="..\..\src\tbb\pipeline.cpp"/>
-		<ClCompile Include="..\..\src\tbb\queuing_mutex.cpp"/>
-		<ClCompile Include="..\..\src\tbb\queuing_rw_mutex.cpp"/>
-		<ClCompile Include="..\..\src\tbb\reader_writer_lock.cpp"/>
-		<ClCompile Include="..\..\src\tbb\spin_rw_mutex.cpp"/>
-		<ClCompile Include="..\..\src\tbb\spin_mutex.cpp"/>
-		<ClCompile Include="..\..\src\tbb\critical_section.cpp"/>
-		<ClCompile Include="..\..\src\tbb\mutex.cpp"/>
-		<ClCompile Include="..\..\src\tbb\recursive_mutex.cpp"/>
-		<ClCompile Include="..\..\src\tbb\condition_variable.cpp"/>
-		<ClCompile Include="..\..\src\tbb\tbb_thread.cpp"/>
-		<ClCompile Include="..\..\src\tbb\concurrent_monitor.cpp"/>
-		<ClCompile Include="..\..\src\tbb\semaphore.cpp"/>
-		<ClCompile Include="..\..\src\tbb\private_server.cpp"/>
-		<ClCompile Include="..\..\src\rml\client\rml_tbb.cpp"/>
-		<ClCompile Include="..\..\src\tbb\tbb_misc.cpp"/>
-		<ClCompile Include="..\..\src\tbb\tbb_misc_ex.cpp"/>
-		<ClCompile Include="..\..\src\tbb\task.cpp"/>
-		<ClCompile Include="..\..\src\tbb\task_group_context.cpp"/>
-		<ClCompile Include="..\..\src\tbb\governor.cpp"/>
-		<ClCompile Include="..\..\src\tbb\market.cpp"/>
-		<ClCompile Include="..\..\src\tbb\arena.cpp"/>
-		<ClCompile Include="..\..\src\tbb\scheduler.cpp"/>
-		<ClCompile Include="..\..\src\tbb\observer_proxy.cpp"/>
-		<ClCompile Include="..\..\src\tbb\tbb_statistics.cpp"/>
-		<ClCompile Include="..\..\src\tbb\tbb_main.cpp"/>
-		<ClCompile Include="..\..\src\old\concurrent_vector_v2.cpp"/>
-		<ClCompile Include="..\..\src\old\concurrent_queue_v2.cpp"/>
-		<ClCompile Include="..\..\src\old\spin_rw_mutex_v2.cpp"/>
-		<ClCompile Include="..\..\src\old\task_v2.cpp"/>
-		<ClCompile Include="..\..\src\tbb\x86_rtm_rw_mutex.cpp"/>
-	</ItemGroup>
-	<ItemGroup>
-		<ClInclude Include="..\..\include\tbb\internal\_concurrent_queue_impl.h"/>
-		<ClInclude Include="..\..\include\tbb\_tbb_windef.h"/>
-		<ClInclude Include="..\..\include\tbb\aligned_space.h"/>
-		<ClInclude Include="..\..\include\tbb\atomic.h"/>
-		<ClInclude Include="..\..\include\tbb\blocked_range.h"/>
-		<ClInclude Include="..\..\include\tbb\blocked_range2d.h"/>
-		<ClInclude Include="..\..\include\tbb\blocked_range3d.h"/>
-		<ClInclude Include="..\..\include\tbb\cache_aligned_allocator.h"/>
-		<ClInclude Include="..\..\include\tbb\combinable.h"/>
-		<ClInclude Include="..\..\include\tbb\concurrent_hash_map.h"/>
-		<ClInclude Include="..\..\src\tbb\concurrent_monitor.h"/>
-		<ClInclude Include="..\..\include\tbb\concurrent_priority_queue.h"/>
-		<ClInclude Include="..\..\include\tbb\concurrent_queue.h"/>
-		<ClInclude Include="..\..\src\old\concurrent_queue_v2.h"/>
-		<ClInclude Include="..\..\include\tbb\concurrent_vector.h"/>
-		<ClInclude Include="..\..\src\old\concurrent_vector_v2.h"/>
-		<ClInclude Include="..\..\include\tbb\critical_section.h"/>
-		<ClInclude Include="..\..\src\tbb\dynamic_link.h"/>
-		<ClInclude Include="..\..\include\tbb\enumerable_thread_specific.h"/>
-		<ClInclude Include="..\..\src\tbb\gate.h"/>
-		<ClInclude Include="..\..\src\test\harness.h"/>
-		<ClInclude Include="..\..\src\test\harness_allocator.h"/>
-		<ClInclude Include="..\..\src\test\harness_assert.h"/>
-		<ClInclude Include="..\..\src\test\harness_bad_expr.h"/>
-		<ClInclude Include="..\..\src\test\harness_barrier.h"/>
-		<ClInclude Include="..\..\src\test\harness_concurrency_tracker.h"/>
-		<ClInclude Include="..\..\src\test\harness_cpu.h"/>
-		<ClInclude Include="..\..\src\test\harness_eh.h"/>
-		<ClInclude Include="..\..\src\test\harness_iterator.h"/>
-		<ClInclude Include="..\..\src\test\harness_m128.h"/>
-		<ClInclude Include="..\..\src\test\harness_memory.h"/>
-		<ClInclude Include="..\..\src\test\harness_report.h"/>
-		<ClInclude Include="..\..\include\tbb\machine\ibm_aix51.h"/>
-		<ClInclude Include="..\..\src\tbb\itt_notify.h"/>
-		<ClInclude Include="..\..\include\tbb\machine\linux_common.h"/>
-		<ClInclude Include="..\..\include\tbb\machine\linux_ia32.h"/>
-		<ClInclude Include="..\..\include\tbb\machine\linux_ia64.h"/>
-		<ClInclude Include="..\..\include\tbb\machine\linux_intel64.h"/>
-		<ClInclude Include="..\..\include\tbb\machine\mac_ppc.h"/>
-		<ClInclude Include="..\..\include\tbb\mutex.h"/>
-		<ClInclude Include="..\..\include\tbb\null_mutex.h"/>
-		<ClInclude Include="..\..\include\tbb\null_rw_mutex.h"/>
-		<ClInclude Include="..\..\include\tbb\parallel_do.h"/>
-		<ClInclude Include="..\..\include\tbb\parallel_for.h"/>
-		<ClInclude Include="..\..\include\tbb\parallel_for_each.h"/>
-		<ClInclude Include="..\..\include\tbb\parallel_invoke.h"/>
-		<ClInclude Include="..\..\include\tbb\parallel_reduce.h"/>
-		<ClInclude Include="..\..\include\tbb\parallel_scan.h"/>
-		<ClInclude Include="..\..\include\tbb\parallel_sort.h"/>
-		<ClInclude Include="..\..\include\tbb\parallel_while.h"/>
-		<ClInclude Include="..\..\include\tbb\partitioner.h"/>
-		<ClInclude Include="..\..\include\tbb\pipeline.h"/>
-		<ClInclude Include="..\..\include\tbb\compat\ppl.h"/>
-		<ClInclude Include="..\..\include\tbb\queuing_mutex.h"/>
-		<ClInclude Include="..\..\include\tbb\queuing_rw_mutex.h"/>
-		<ClInclude Include="..\..\include\tbb\reader_writer_lock.h"/>
-		<ClInclude Include="..\..\include\tbb\recursive_mutex.h"/>
-		<ClInclude Include="..\..\include\tbb\scalable_allocator.h"/>
-		<ClInclude Include="..\..\src\tbb\semaphore.h"/>
-		<ClInclude Include="..\..\include\tbb\spin_mutex.h"/>
-		<ClInclude Include="..\..\include\tbb\spin_rw_mutex.h"/>
-		<ClInclude Include="..\..\src\old\spin_rw_mutex_v2.h"/>
-		<ClInclude Include="..\..\include\tbb\task.h"/>
-		<ClInclude Include="..\..\include\tbb\task_group.h"/>
-		<ClInclude Include="..\..\include\tbb\task_scheduler_init.h"/>
-		<ClInclude Include="..\..\include\tbb\task_scheduler_observer.h"/>
-		<ClInclude Include="..\..\include\tbb\tbb.h"/>
-		<ClInclude Include="..\..\include\tbb\tbb_allocator.h"/>
-		<ClInclude Include="..\..\src\tbb\tbb_assert_impl.h"/>
-		<ClInclude Include="..\..\include\tbb\tbb_config.h"/>
-		<ClInclude Include="..\..\include\tbb\tbb_exception.h"/>
-		<ClInclude Include="..\..\include\tbb\tbb_machine.h"/>
-		<ClInclude Include="..\..\src\tbb\tbb_misc.h"/>
-		<ClInclude Include="..\..\include\tbb\tbb_profiling.h"/>
-		<ClInclude Include="..\..\include\tbb\tbb_stddef.h"/>
-		<ClInclude Include="..\..\include\tbb\tbb_thread.h"/>
-		<ClInclude Include="..\..\src\tbb\tbb_version.h"/>
-		<ClInclude Include="..\..\include\tbb\tbbmalloc_proxy.h"/>
-		<ClInclude Include="..\..\src\test\test_allocator.h"/>
-		<ClInclude Include="..\..\src\test\test_allocator_STL.h"/>
-		<ClInclude Include="..\..\include\tbb\tick_count.h"/>
-		<ClInclude Include="..\..\src\tbb\tls.h"/>
-		<ClInclude Include="..\..\include\tbb\machine\windows_ia32.h"/>
-		<ClInclude Include="..\..\include\tbb\machine\windows_intel64.h"/>
-	</ItemGroup>
-	<ItemGroup>
-		<ResourceCompile Include="..\..\src\tbb\tbb_resource.rc">
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
-		</ResourceCompile>
-	</ItemGroup>
-	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets"/>
-	<ImportGroup Label="ExtensionTargets">
-		<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets"/>
-	</ImportGroup>
-</Project>
diff --git a/build/vs2010/tbbmalloc.vcxproj b/build/vs2010/tbbmalloc.vcxproj
deleted file mode 100644
index ad9a793..0000000
--- a/build/vs2010/tbbmalloc.vcxproj
+++ /dev/null
@@ -1,584 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-	<ItemGroup Label="ProjectConfigurations">
-		<ProjectConfiguration Include="Debug-MT|Win32">
-			<Configuration>Debug-MT</Configuration>
-			<Platform>Win32</Platform>
-		</ProjectConfiguration>
-		<ProjectConfiguration Include="Debug-MT|x64">
-			<Configuration>Debug-MT</Configuration>
-			<Platform>x64</Platform>
-		</ProjectConfiguration>
-		<ProjectConfiguration Include="Debug|Win32">
-			<Configuration>Debug</Configuration>
-			<Platform>Win32</Platform>
-		</ProjectConfiguration>
-		<ProjectConfiguration Include="Debug|x64">
-			<Configuration>Debug</Configuration>
-			<Platform>x64</Platform>
-		</ProjectConfiguration>
-		<ProjectConfiguration Include="Release-MT|Win32">
-			<Configuration>Release-MT</Configuration>
-			<Platform>Win32</Platform>
-		</ProjectConfiguration>
-		<ProjectConfiguration Include="Release-MT|x64">
-			<Configuration>Release-MT</Configuration>
-			<Platform>x64</Platform>
-		</ProjectConfiguration>
-		<ProjectConfiguration Include="Release|Win32">
-			<Configuration>Release</Configuration>
-			<Platform>Win32</Platform>
-		</ProjectConfiguration>
-		<ProjectConfiguration Include="Release|x64">
-			<Configuration>Release</Configuration>
-			<Platform>x64</Platform>
-		</ProjectConfiguration>
-	</ItemGroup>
-	<PropertyGroup Label="Globals">
-		<ProjectGuid>{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}</ProjectGuid>
-		<RootNamespace>tbbmalloc</RootNamespace>
-		<Keyword>Win32Proj</Keyword>
-	</PropertyGroup>
-	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props"/>
-	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'" Label="Configuration">
-		<ConfigurationType>DynamicLibrary</ConfigurationType>
-		<CharacterSet>NotSet</CharacterSet>
-		<WholeProgramOptimization>true</WholeProgramOptimization>
-	</PropertyGroup>
-	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'" Label="Configuration">
-		<ConfigurationType>DynamicLibrary</ConfigurationType>
-		<CharacterSet>NotSet</CharacterSet>
-	</PropertyGroup>
-	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-		<ConfigurationType>DynamicLibrary</ConfigurationType>
-		<CharacterSet>NotSet</CharacterSet>
-		<WholeProgramOptimization>true</WholeProgramOptimization>
-	</PropertyGroup>
-	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-		<ConfigurationType>DynamicLibrary</ConfigurationType>
-		<CharacterSet>NotSet</CharacterSet>
-	</PropertyGroup>
-	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'" Label="Configuration">
-		<ConfigurationType>DynamicLibrary</ConfigurationType>
-		<CharacterSet>NotSet</CharacterSet>
-		<WholeProgramOptimization>true</WholeProgramOptimization>
-	</PropertyGroup>
-	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'" Label="Configuration">
-		<ConfigurationType>DynamicLibrary</ConfigurationType>
-		<CharacterSet>NotSet</CharacterSet>
-	</PropertyGroup>
-	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-		<ConfigurationType>DynamicLibrary</ConfigurationType>
-		<CharacterSet>NotSet</CharacterSet>
-		<WholeProgramOptimization>true</WholeProgramOptimization>
-	</PropertyGroup>
-	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-		<ConfigurationType>DynamicLibrary</ConfigurationType>
-		<CharacterSet>NotSet</CharacterSet>
-	</PropertyGroup>
-	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props"/>
-	<ImportGroup Label="ExtensionSettings">
-		<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props"/>
-	</ImportGroup>
-	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'" Label="PropertySheets">
-		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/>
-	</ImportGroup>
-	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'" Label="PropertySheets">
-		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/>
-	</ImportGroup>
-	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/>
-	</ImportGroup>
-	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/>
-	</ImportGroup>
-	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'" Label="PropertySheets">
-		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/>
-	</ImportGroup>
-	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'" Label="PropertySheets">
-		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/>
-	</ImportGroup>
-	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/>
-	</ImportGroup>
-	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/>
-	</ImportGroup>
-	<PropertyGroup Label="UserMacros"/>
-	<PropertyGroup>
-		<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-		<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)ia32\$(Configuration)\</OutDir>
-		<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)ia32\$(Configuration)\</IntDir>
-		<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-		<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)intel64\$(Configuration)\</OutDir>
-		<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)intel64\$(Configuration)\</IntDir>
-		<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
-		<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)ia32\$(Configuration)\</OutDir>
-		<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)ia32\$(Configuration)\</IntDir>
-		<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-		<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)intel64\$(Configuration)\</OutDir>
-		<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)intel64\$(Configuration)\</IntDir>
-		<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-		<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(SolutionDir)ia32\$(Configuration)\</OutDir>
-		<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(SolutionDir)ia32\$(Configuration)\</IntDir>
-		<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">false</LinkIncremental>
-		<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(SolutionDir)intel64\$(Configuration)\</OutDir>
-		<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(SolutionDir)intel64\$(Configuration)\</IntDir>
-		<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">false</LinkIncremental>
-		<OutDir Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">$(SolutionDir)ia32\$(Configuration)\</OutDir>
-		<IntDir Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">$(SolutionDir)ia32\$(Configuration)\</IntDir>
-		<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">false</LinkIncremental>
-		<OutDir Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">$(SolutionDir)intel64\$(Configuration)\</OutDir>
-		<IntDir Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">$(SolutionDir)intel64\$(Configuration)\</IntDir>
-		<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">false</LinkIncremental>
-		<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-		<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'"/>
-		<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'"/>
-		<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-		<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'"/>
-		<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'"/>
-		<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-		<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"/>
-		<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"/>
-		<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-		<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"/>
-		<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"/>
-		<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-		<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'"/>
-		<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'"/>
-		<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-		<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'"/>
-		<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'"/>
-		<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-		<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"/>
-		<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"/>
-		<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-		<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'"/>
-		<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'"/>
-		<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_debug</TargetName>
-		<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(ProjectName)_debug</TargetName>
-		<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_debug</TargetName>
-		<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(ProjectName)_debug</TargetName>
-	</PropertyGroup>
-	<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-		<ClCompile>
-			<AdditionalOptions> /c /MDd /Od /Ob0 /Zi /EHs- /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /volatile:iso /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I.</AdditionalOptions>
-			<Optimization>Disabled</Optimization>
-			<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-			<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
-			<MinimalRebuild>true</MinimalRebuild>
-			<ExceptionHandling>
-			</ExceptionHandling>
-			<BasicRuntimeChecks>Default</BasicRuntimeChecks>
-			<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-			<PrecompiledHeader>
-			</PrecompiledHeader>
-			<WarningLevel>Level4</WarningLevel>
-			<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-		</ClCompile>
-		<Link>
-			<AdditionalOptions>/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)tbbmalloc.def" %(AdditionalOptions)</AdditionalOptions>
-			<OutputFile>$(OutDir)tbbmalloc_debug.dll</OutputFile>
-			<GenerateDebugInformation>true</GenerateDebugInformation>
-			<SubSystem>Windows</SubSystem>
-			<RandomizedBaseAddress>false</RandomizedBaseAddress>
-			<DataExecutionPrevention>
-			</DataExecutionPrevention>
-			<TargetMachine>MachineX86</TargetMachine>
-		</Link>
-	</ItemDefinitionGroup>
-	<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-		<Midl>
-			<TargetEnvironment>X64</TargetEnvironment>
-		</Midl>
-		<ClCompile>
-			<AdditionalOptions> /c /MDd /Od /Ob0 /Zi /EHs- /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /volatile:iso /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I.</AdditionalOptions>
-			<Optimization>Disabled</Optimization>
-			<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-			<MinimalRebuild>false</MinimalRebuild>
-			<ExceptionHandling>
-			</ExceptionHandling>
-			<BasicRuntimeChecks>Default</BasicRuntimeChecks>
-			<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-			<BufferSecurityCheck>false</BufferSecurityCheck>
-			<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
-			<PrecompiledHeader>
-			</PrecompiledHeader>
-			<WarningLevel>Level4</WarningLevel>
-			<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-			<ShowIncludes>false</ShowIncludes>
-		</ClCompile>
-		<Link>
-			<AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)tbbmalloc.def" %(AdditionalOptions)</AdditionalOptions>
-			<OutputFile>$(OutDir)tbbmalloc_debug.dll</OutputFile>
-			<GenerateDebugInformation>true</GenerateDebugInformation>
-			<SubSystem>Windows</SubSystem>
-			<RandomizedBaseAddress>false</RandomizedBaseAddress>
-			<DataExecutionPrevention>
-			</DataExecutionPrevention>
-			<TargetMachine>MachineX64</TargetMachine>
-		</Link>
-	</ItemDefinitionGroup>
-	<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-		<ClCompile>
-			<AdditionalOptions> /c /MD /O2 /Zi /EHs- /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /volatile:iso /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I.</AdditionalOptions>
-			<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-			<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
-			<ExceptionHandling>
-			</ExceptionHandling>
-			<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-			<PrecompiledHeader>
-			</PrecompiledHeader>
-			<WarningLevel>Level4</WarningLevel>
-			<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-		</ClCompile>
-		<Link>
-			<AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)tbbmalloc.def" %(AdditionalOptions)</AdditionalOptions>
-			<OutputFile>$(OutDir)tbbmalloc.dll</OutputFile>
-			<GenerateDebugInformation>true</GenerateDebugInformation>
-			<SubSystem>Windows</SubSystem>
-			<OptimizeReferences>true</OptimizeReferences>
-			<EnableCOMDATFolding>true</EnableCOMDATFolding>
-			<RandomizedBaseAddress>false</RandomizedBaseAddress>
-			<DataExecutionPrevention>
-			</DataExecutionPrevention>
-			<TargetMachine>MachineX86</TargetMachine>
-		</Link>
-	</ItemDefinitionGroup>
-	<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-		<Midl>
-			<TargetEnvironment>X64</TargetEnvironment>
-		</Midl>
-		<ClCompile>
-			<AdditionalOptions> /c /MD /O2 /Zi /EHs- /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /volatile:iso /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I.</AdditionalOptions>
-			<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-			<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
-			<ExceptionHandling>
-			</ExceptionHandling>
-			<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-			<BufferSecurityCheck>false</BufferSecurityCheck>
-			<PrecompiledHeader>
-			</PrecompiledHeader>
-			<WarningLevel>Level4</WarningLevel>
-			<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-		</ClCompile>
-		<Link>
-			<AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)tbbmalloc.def" %(AdditionalOptions)</AdditionalOptions>
-			<OutputFile>$(OutDir)tbbmalloc.dll</OutputFile>
-			<GenerateDebugInformation>true</GenerateDebugInformation>
-			<SubSystem>Windows</SubSystem>
-			<OptimizeReferences>true</OptimizeReferences>
-			<EnableCOMDATFolding>true</EnableCOMDATFolding>
-			<RandomizedBaseAddress>false</RandomizedBaseAddress>
-			<DataExecutionPrevention>
-			</DataExecutionPrevention>
-			<TargetMachine>MachineX64</TargetMachine>
-		</Link>
-	</ItemDefinitionGroup>
-	<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">
-		<ClCompile>
-			<AdditionalOptions> /c /MTd /Od /Ob0 /Zi /EHs- /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /volatile:iso /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I.</AdditionalOptions>
-			<Optimization>Disabled</Optimization>
-			<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-			<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
-			<MinimalRebuild>true</MinimalRebuild>
-			<ExceptionHandling>
-			</ExceptionHandling>
-			<BasicRuntimeChecks>Default</BasicRuntimeChecks>
-			<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-			<PrecompiledHeader>
-			</PrecompiledHeader>
-			<WarningLevel>Level4</WarningLevel>
-			<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-		</ClCompile>
-		<Link>
-			<AdditionalOptions>/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)tbbmalloc.def" %(AdditionalOptions)</AdditionalOptions>
-			<OutputFile>$(OutDir)tbbmalloc_debug.dll</OutputFile>
-			<GenerateDebugInformation>true</GenerateDebugInformation>
-			<SubSystem>Windows</SubSystem>
-			<RandomizedBaseAddress>false</RandomizedBaseAddress>
-			<DataExecutionPrevention>
-			</DataExecutionPrevention>
-			<TargetMachine>MachineX86</TargetMachine>
-		</Link>
-	</ItemDefinitionGroup>
-	<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">
-		<Midl>
-			<TargetEnvironment>X64</TargetEnvironment>
-		</Midl>
-		<ClCompile>
-			<AdditionalOptions> /c /MTd /Od /Ob0 /Zi /EHs- /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /volatile:iso /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I.</AdditionalOptions>
-			<Optimization>Disabled</Optimization>
-			<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-			<MinimalRebuild>false</MinimalRebuild>
-			<ExceptionHandling>
-			</ExceptionHandling>
-			<BasicRuntimeChecks>Default</BasicRuntimeChecks>
-			<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-			<BufferSecurityCheck>false</BufferSecurityCheck>
-			<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
-			<PrecompiledHeader>
-			</PrecompiledHeader>
-			<WarningLevel>Level4</WarningLevel>
-			<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-			<ShowIncludes>false</ShowIncludes>
-		</ClCompile>
-		<Link>
-			<AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)tbbmalloc.def" %(AdditionalOptions)</AdditionalOptions>
-			<OutputFile>$(OutDir)tbbmalloc_debug.dll</OutputFile>
-			<GenerateDebugInformation>true</GenerateDebugInformation>
-			<SubSystem>Windows</SubSystem>
-			<RandomizedBaseAddress>false</RandomizedBaseAddress>
-			<DataExecutionPrevention>
-			</DataExecutionPrevention>
-			<TargetMachine>MachineX64</TargetMachine>
-		</Link>
-	</ItemDefinitionGroup>
-	<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">
-		<ClCompile>
-			<AdditionalOptions> /c /MT /O2 /Zi /EHs- /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /volatile:iso /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I.</AdditionalOptions>
-			<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-			<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
-			<ExceptionHandling>
-			</ExceptionHandling>
-			<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-			<PrecompiledHeader>
-			</PrecompiledHeader>
-			<WarningLevel>Level4</WarningLevel>
-			<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-		</ClCompile>
-		<Link>
-			<AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)tbbmalloc.def" %(AdditionalOptions)</AdditionalOptions>
-			<OutputFile>$(OutDir)tbbmalloc.dll</OutputFile>
-			<GenerateDebugInformation>true</GenerateDebugInformation>
-			<SubSystem>Windows</SubSystem>
-			<OptimizeReferences>true</OptimizeReferences>
-			<EnableCOMDATFolding>true</EnableCOMDATFolding>
-			<RandomizedBaseAddress>false</RandomizedBaseAddress>
-			<DataExecutionPrevention>
-			</DataExecutionPrevention>
-			<TargetMachine>MachineX86</TargetMachine>
-		</Link>
-	</ItemDefinitionGroup>
-	<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">
-		<Midl>
-			<TargetEnvironment>X64</TargetEnvironment>
-		</Midl>
-		<ClCompile>
-			<AdditionalOptions> /c /MT /O2 /Zi /EHs- /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /volatile:iso /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I.</AdditionalOptions>
-			<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-			<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
-			<ExceptionHandling>
-			</ExceptionHandling>
-			<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-			<BufferSecurityCheck>false</BufferSecurityCheck>
-			<PrecompiledHeader>
-			</PrecompiledHeader>
-			<WarningLevel>Level4</WarningLevel>
-			<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-		</ClCompile>
-		<Link>
-			<AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)tbbmalloc.def" %(AdditionalOptions)</AdditionalOptions>
-			<OutputFile>$(OutDir)tbbmalloc.dll</OutputFile>
-			<GenerateDebugInformation>true</GenerateDebugInformation>
-			<SubSystem>Windows</SubSystem>
-			<OptimizeReferences>true</OptimizeReferences>
-			<EnableCOMDATFolding>true</EnableCOMDATFolding>
-			<RandomizedBaseAddress>false</RandomizedBaseAddress>
-			<DataExecutionPrevention>
-			</DataExecutionPrevention>
-			<TargetMachine>MachineX64</TargetMachine>
-		</Link>
-	</ItemDefinitionGroup>
-	<ItemGroup>
-		<CustomBuild Include="..\..\src\tbb\intel64-masm\atomic_support.asm">
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">building atomic_support.obj</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">ml64 /Fo"intel64\Debug-MT\atomic_support.obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">intel64\Debug-MT\atomic_support.obj;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">building atomic_support.obj</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">ml64 /Fo"intel64\Debug\atomic_support.obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">intel64\Debug\atomic_support.obj;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">building atomic_support.obj</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">ml64 /Fo"intel64\Release-MT\atomic_support.obj"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">intel64\Release-MT\atomic_support.obj;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">building atomic_support.obj</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">ml64 /Fo"intel64\Release\atomic_support.obj"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">intel64\Release\atomic_support.obj;%(Outputs)</Outputs>
-		</CustomBuild>
-	</ItemGroup>
-	<ItemGroup>
-		<CustomBuild Include="..\..\src\tbbmalloc\win32-tbbmalloc-export.def">
-			<Message Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">generating tbbmalloc.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">generating tbbmalloc.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">generating tbbmalloc.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">generating tbbmalloc.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">generating tbbmalloc.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">generating tbbmalloc.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">cl /nologo /TC /EP ../../src/tbb/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">generating tbbmalloc.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">generating tbbmalloc.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">cl /nologo /TC /EP ../../src/tbb/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
-		</CustomBuild>
-		<CustomBuild Include="..\..\src\tbbmalloc\win64-tbbmalloc-export.def">
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">generating tbbmalloc.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">cl /nologo /TC /EP ../../src/tbb/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">generating tbbmalloc.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">cl /nologo /TC /EP ../../src/tbbmalloc/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">generating tbbmalloc.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cl /nologo /TC /EP ../../src/tbb/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">generating tbbmalloc.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">cl /nologo /TC /EP ../../src/tbbmalloc/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">generating tbbmalloc.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">cl /nologo /TC /EP ../../src/tbb/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">generating tbbmalloc.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">cl /nologo /TC /EP ../../src/tbbmalloc/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
-			<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">generating tbbmalloc.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cl /nologo /TC /EP ../../src/tbb/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
-			<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">generating tbbmalloc.def file</Message>
-			<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">cl /nologo /TC /EP ../../src/tbbmalloc/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
-</Command>
-			<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
-		</CustomBuild>
-	</ItemGroup>
-	<ItemGroup>
-		<ClCompile Include="..\..\src\tbbmalloc\backend.cpp"/>
-		<ClCompile Include="..\..\src\tbbmalloc\large_objects.cpp"/>
-		<ClCompile Include="..\..\src\tbbmalloc\backref.cpp"/>
-		<ClCompile Include="..\..\src\tbbmalloc\tbbmalloc.cpp"/>
-		<ClCompile Include="..\..\src\tbb\itt_notify.cpp"/>
-		<ClCompile Include="..\..\src\tbbmalloc\frontend.cpp"/>
-	</ItemGroup>
-	<ItemGroup>
-		<ClInclude Include="..\..\include\tbb\internal\_concurrent_queue_impl.h"/>
-		<ClInclude Include="..\..\include\tbb\_tbb_windef.h"/>
-		<ClInclude Include="..\..\include\tbb\aligned_space.h"/>
-		<ClInclude Include="..\..\include\tbb\atomic.h"/>
-		<ClInclude Include="..\..\include\tbb\blocked_range.h"/>
-		<ClInclude Include="..\..\include\tbb\blocked_range2d.h"/>
-		<ClInclude Include="..\..\include\tbb\blocked_range3d.h"/>
-		<ClInclude Include="..\..\include\tbb\cache_aligned_allocator.h"/>
-		<ClInclude Include="..\..\include\tbb\combinable.h"/>
-		<ClInclude Include="..\..\include\tbb\concurrent_hash_map.h"/>
-		<ClInclude Include="..\..\include\tbb\concurrent_queue.h"/>
-		<ClInclude Include="..\..\include\tbb\concurrent_vector.h"/>
-		<ClInclude Include="..\..\include\tbb\critical_section.h"/>
-		<ClInclude Include="..\..\src\tbbmalloc\Customize.h"/>
-		<ClInclude Include="..\..\include\tbb\enumerable_thread_specific.h"/>
-		<ClInclude Include="..\..\src\tbbmalloc\LifoList.h"/>
-		<ClInclude Include="..\..\src\tbbmalloc\MapMemory.h"/>
-		<ClInclude Include="..\..\include\tbb\mutex.h"/>
-		<ClInclude Include="..\..\include\tbb\null_mutex.h"/>
-		<ClInclude Include="..\..\include\tbb\null_rw_mutex.h"/>
-		<ClInclude Include="..\..\include\tbb\parallel_do.h"/>
-		<ClInclude Include="..\..\include\tbb\parallel_for.h"/>
-		<ClInclude Include="..\..\include\tbb\parallel_for_each.h"/>
-		<ClInclude Include="..\..\include\tbb\parallel_invoke.h"/>
-		<ClInclude Include="..\..\include\tbb\parallel_reduce.h"/>
-		<ClInclude Include="..\..\include\tbb\parallel_scan.h"/>
-		<ClInclude Include="..\..\include\tbb\parallel_sort.h"/>
-		<ClInclude Include="..\..\include\tbb\parallel_while.h"/>
-		<ClInclude Include="..\..\include\tbb\partitioner.h"/>
-		<ClInclude Include="..\..\include\tbb\pipeline.h"/>
-		<ClInclude Include="..\..\src\tbbmalloc\proxy.h"/>
-		<ClInclude Include="..\..\include\tbb\queuing_mutex.h"/>
-		<ClInclude Include="..\..\include\tbb\queuing_rw_mutex.h"/>
-		<ClInclude Include="..\..\include\tbb\recursive_mutex.h"/>
-		<ClInclude Include="..\..\include\tbb\scalable_allocator.h"/>
-		<ClInclude Include="..\..\include\tbb\spin_mutex.h"/>
-		<ClInclude Include="..\..\include\tbb\spin_rw_mutex.h"/>
-		<ClInclude Include="..\..\src\tbbmalloc\Statistics.h"/>
-		<ClInclude Include="..\..\include\tbb\task.h"/>
-		<ClInclude Include="..\..\include\tbb\task_group.h"/>
-		<ClInclude Include="..\..\include\tbb\task_scheduler_init.h"/>
-		<ClInclude Include="..\..\include\tbb\task_scheduler_observer.h"/>
-		<ClInclude Include="..\..\include\tbb\tbb.h"/>
-		<ClInclude Include="..\..\include\tbb\tbb_allocator.h"/>
-		<ClInclude Include="..\..\include\tbb\tbb_config.h"/>
-		<ClInclude Include="..\..\include\tbb\tbb_exception.h"/>
-		<ClInclude Include="..\..\src\tbbmalloc\tbb_function_replacement.h"/>
-		<ClInclude Include="..\..\include\tbb\tbb_machine.h"/>
-		<ClInclude Include="..\..\include\tbb\tbb_profiling.h"/>
-		<ClInclude Include="..\..\include\tbb\tbb_stddef.h"/>
-		<ClInclude Include="..\..\include\tbb\tbb_thread.h"/>
-		<ClInclude Include="..\..\include\tbb\tbb_version.h"/>
-		<ClInclude Include="..\..\include\tbb\tbbmalloc_proxy.h"/>
-		<ClInclude Include="..\..\include\tbb\tick_count.h"/>
-		<ClInclude Include="..\..\src\tbbmalloc\TypeDefinitions.h"/>
-		<ClInclude Include="..\..\include\tbb\machine\windows_ia32.h"/>
-		<ClInclude Include="..\..\include\tbb\machine\windows_intel64.h"/>
-	</ItemGroup>
-	<ItemGroup>
-		<ResourceCompile Include="..\..\src\tbbmalloc\tbbmalloc.rc">
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
-		</ResourceCompile>
-	</ItemGroup>
-	<ItemGroup>
-		<ProjectReference Include="tbb.vcxproj">
-			<Project>{f62787dd-1327-448b-9818-030062bcfaa5}</Project>
-			<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-		</ProjectReference>
-	</ItemGroup>
-	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets"/>
-	<ImportGroup Label="ExtensionTargets">
-		<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets"/>
-	</ImportGroup>
-</Project>
diff --git a/build/vs2010/tbbmalloc_proxy.vcxproj b/build/vs2010/tbbmalloc_proxy.vcxproj
deleted file mode 100644
index 6462df2..0000000
--- a/build/vs2010/tbbmalloc_proxy.vcxproj
+++ /dev/null
@@ -1,421 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-	<ItemGroup Label="ProjectConfigurations">
-		<ProjectConfiguration Include="Debug-MT|Win32">
-			<Configuration>Debug-MT</Configuration>
-			<Platform>Win32</Platform>
-		</ProjectConfiguration>
-		<ProjectConfiguration Include="Debug-MT|x64">
-			<Configuration>Debug-MT</Configuration>
-			<Platform>x64</Platform>
-		</ProjectConfiguration>
-		<ProjectConfiguration Include="Debug|Win32">
-			<Configuration>Debug</Configuration>
-			<Platform>Win32</Platform>
-		</ProjectConfiguration>
-		<ProjectConfiguration Include="Debug|x64">
-			<Configuration>Debug</Configuration>
-			<Platform>x64</Platform>
-		</ProjectConfiguration>
-		<ProjectConfiguration Include="Release-MT|Win32">
-			<Configuration>Release-MT</Configuration>
-			<Platform>Win32</Platform>
-		</ProjectConfiguration>
-		<ProjectConfiguration Include="Release-MT|x64">
-			<Configuration>Release-MT</Configuration>
-			<Platform>x64</Platform>
-		</ProjectConfiguration>
-		<ProjectConfiguration Include="Release|Win32">
-			<Configuration>Release</Configuration>
-			<Platform>Win32</Platform>
-		</ProjectConfiguration>
-		<ProjectConfiguration Include="Release|x64">
-			<Configuration>Release</Configuration>
-			<Platform>x64</Platform>
-		</ProjectConfiguration>
-	</ItemGroup>
-	<PropertyGroup Label="Globals">
-		<ProjectGuid>{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}</ProjectGuid>
-		<RootNamespace>tbbmalloc_proxy</RootNamespace>
-		<Keyword>Win32Proj</Keyword>
-	</PropertyGroup>
-	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props"/>
-	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'" Label="Configuration">
-		<ConfigurationType>DynamicLibrary</ConfigurationType>
-		<CharacterSet>NotSet</CharacterSet>
-		<WholeProgramOptimization>true</WholeProgramOptimization>
-	</PropertyGroup>
-	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'" Label="Configuration">
-		<ConfigurationType>DynamicLibrary</ConfigurationType>
-		<CharacterSet>NotSet</CharacterSet>
-	</PropertyGroup>
-	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-		<ConfigurationType>DynamicLibrary</ConfigurationType>
-		<CharacterSet>NotSet</CharacterSet>
-		<WholeProgramOptimization>true</WholeProgramOptimization>
-	</PropertyGroup>
-	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-		<ConfigurationType>DynamicLibrary</ConfigurationType>
-		<CharacterSet>NotSet</CharacterSet>
-	</PropertyGroup>
-	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'" Label="Configuration">
-		<ConfigurationType>DynamicLibrary</ConfigurationType>
-		<CharacterSet>NotSet</CharacterSet>
-		<WholeProgramOptimization>true</WholeProgramOptimization>
-	</PropertyGroup>
-	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'" Label="Configuration">
-		<ConfigurationType>DynamicLibrary</ConfigurationType>
-		<CharacterSet>NotSet</CharacterSet>
-	</PropertyGroup>
-	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-		<ConfigurationType>DynamicLibrary</ConfigurationType>
-		<CharacterSet>NotSet</CharacterSet>
-		<WholeProgramOptimization>true</WholeProgramOptimization>
-	</PropertyGroup>
-	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-		<ConfigurationType>DynamicLibrary</ConfigurationType>
-		<CharacterSet>NotSet</CharacterSet>
-	</PropertyGroup>
-	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props"/>
-	<ImportGroup Label="ExtensionSettings">
-		<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props"/>
-	</ImportGroup>
-	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'" Label="PropertySheets">
-		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/>
-	</ImportGroup>
-	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'" Label="PropertySheets">
-		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/>
-	</ImportGroup>
-	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/>
-	</ImportGroup>
-	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/>
-	</ImportGroup>
-	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'" Label="PropertySheets">
-		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/>
-	</ImportGroup>
-	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'" Label="PropertySheets">
-		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/>
-	</ImportGroup>
-	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/>
-	</ImportGroup>
-	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/>
-	</ImportGroup>
-	<PropertyGroup Label="UserMacros"/>
-	<PropertyGroup>
-		<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-		<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)ia32\$(Configuration)\</OutDir>
-		<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)ia32\$(Configuration)\</IntDir>
-		<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-		<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)intel64\$(Configuration)\</OutDir>
-		<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)intel64\$(Configuration)\</IntDir>
-		<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
-		<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)ia32\$(Configuration)\</OutDir>
-		<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)ia32\$(Configuration)\</IntDir>
-		<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-		<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)intel64\$(Configuration)\</OutDir>
-		<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)intel64\$(Configuration)\</IntDir>
-		<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-		<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(SolutionDir)ia32\$(Configuration)\</OutDir>
-		<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(SolutionDir)ia32\$(Configuration)\</IntDir>
-		<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">false</LinkIncremental>
-		<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(SolutionDir)intel64\$(Configuration)\</OutDir>
-		<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(SolutionDir)intel64\$(Configuration)\</IntDir>
-		<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">false</LinkIncremental>
-		<OutDir Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">$(SolutionDir)ia32\$(Configuration)\</OutDir>
-		<IntDir Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">$(SolutionDir)ia32\$(Configuration)\</IntDir>
-		<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">false</LinkIncremental>
-		<OutDir Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">$(SolutionDir)intel64\$(Configuration)\</OutDir>
-		<IntDir Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">$(SolutionDir)intel64\$(Configuration)\</IntDir>
-		<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">false</LinkIncremental>
-		<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-		<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'"/>
-		<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'"/>
-		<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-		<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'"/>
-		<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'"/>
-		<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-		<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"/>
-		<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"/>
-		<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-		<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"/>
-		<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"/>
-		<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-		<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'"/>
-		<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'"/>
-		<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-		<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'"/>
-		<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'"/>
-		<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-		<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"/>
-		<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"/>
-		<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-		<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'"/>
-		<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'"/>
-		<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_debug</TargetName>
-		<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(ProjectName)_debug</TargetName>
-		<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_debug</TargetName>
-		<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(ProjectName)_debug</TargetName>
-	</PropertyGroup>
-	<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-		<ClCompile>
-			<AdditionalOptions> /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /volatile:iso /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc</AdditionalOptions>
-			<Optimization>Disabled</Optimization>
-			<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-			<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
-			<MinimalRebuild>true</MinimalRebuild>
-			<ExceptionHandling>Sync</ExceptionHandling>
-			<BasicRuntimeChecks>Default</BasicRuntimeChecks>
-			<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-			<PrecompiledHeader>
-			</PrecompiledHeader>
-			<WarningLevel>Level4</WarningLevel>
-			<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-		</ClCompile>
-		<Link>
-			<AdditionalOptions>/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  %(AdditionalOptions)</AdditionalOptions>
-			<OutputFile>$(OutDir)tbbmalloc_proxy_debug.dll</OutputFile>
-			<GenerateDebugInformation>true</GenerateDebugInformation>
-			<SubSystem>Windows</SubSystem>
-			<RandomizedBaseAddress>false</RandomizedBaseAddress>
-			<DataExecutionPrevention>
-			</DataExecutionPrevention>
-			<TargetMachine>MachineX86</TargetMachine>
-		</Link>
-	</ItemDefinitionGroup>
-	<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-		<Midl>
-			<TargetEnvironment>X64</TargetEnvironment>
-		</Midl>
-		<ClCompile>
-			<AdditionalOptions> /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /volatile:iso /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc</AdditionalOptions>
-			<Optimization>Disabled</Optimization>
-			<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-			<MinimalRebuild>false</MinimalRebuild>
-			<ExceptionHandling>
-			</ExceptionHandling>
-			<BasicRuntimeChecks>Default</BasicRuntimeChecks>
-			<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-			<BufferSecurityCheck>false</BufferSecurityCheck>
-			<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
-			<PrecompiledHeader>
-			</PrecompiledHeader>
-			<WarningLevel>Level4</WarningLevel>
-			<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-			<ShowIncludes>false</ShowIncludes>
-		</ClCompile>
-		<Link>
-			<AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO %(AdditionalOptions)</AdditionalOptions>
-			<OutputFile>$(OutDir)tbbmalloc_proxy_debug.dll</OutputFile>
-			<GenerateDebugInformation>true</GenerateDebugInformation>
-			<SubSystem>Windows</SubSystem>
-			<RandomizedBaseAddress>false</RandomizedBaseAddress>
-			<DataExecutionPrevention>
-			</DataExecutionPrevention>
-			<TargetMachine>MachineX64</TargetMachine>
-		</Link>
-	</ItemDefinitionGroup>
-	<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-		<ClCompile>
-			<AdditionalOptions> /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /volatile:iso /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc</AdditionalOptions>
-			<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-			<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
-			<ExceptionHandling>
-			</ExceptionHandling>
-			<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-			<PrecompiledHeader>
-			</PrecompiledHeader>
-			<WarningLevel>Level4</WarningLevel>
-			<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-		</ClCompile>
-		<Link>
-			<AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO   %(AdditionalOptions)</AdditionalOptions>
-			<OutputFile>$(OutDir)tbbmalloc_proxy.dll</OutputFile>
-			<GenerateDebugInformation>true</GenerateDebugInformation>
-			<SubSystem>Windows</SubSystem>
-			<OptimizeReferences>true</OptimizeReferences>
-			<EnableCOMDATFolding>true</EnableCOMDATFolding>
-			<RandomizedBaseAddress>false</RandomizedBaseAddress>
-			<DataExecutionPrevention>
-			</DataExecutionPrevention>
-			<TargetMachine>MachineX86</TargetMachine>
-		</Link>
-	</ItemDefinitionGroup>
-	<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-		<Midl>
-			<TargetEnvironment>X64</TargetEnvironment>
-		</Midl>
-		<ClCompile>
-			<AdditionalOptions> /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /volatile:iso /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc</AdditionalOptions>
-			<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-			<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
-			<ExceptionHandling>
-			</ExceptionHandling>
-			<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-			<BufferSecurityCheck>false</BufferSecurityCheck>
-			<PrecompiledHeader>
-			</PrecompiledHeader>
-			<WarningLevel>Level4</WarningLevel>
-			<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-		</ClCompile>
-		<Link>
-			<AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO %(AdditionalOptions)</AdditionalOptions>
-			<OutputFile>$(OutDir)tbbmalloc_proxy.dll</OutputFile>
-			<GenerateDebugInformation>true</GenerateDebugInformation>
-			<SubSystem>Windows</SubSystem>
-			<OptimizeReferences>true</OptimizeReferences>
-			<EnableCOMDATFolding>true</EnableCOMDATFolding>
-			<RandomizedBaseAddress>false</RandomizedBaseAddress>
-			<DataExecutionPrevention>
-			</DataExecutionPrevention>
-			<TargetMachine>MachineX64</TargetMachine>
-		</Link>
-	</ItemDefinitionGroup>
-	<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">
-		<ClCompile>
-			<AdditionalOptions> /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /volatile:iso /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc</AdditionalOptions>
-			<Optimization>Disabled</Optimization>
-			<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-			<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
-			<MinimalRebuild>true</MinimalRebuild>
-			<ExceptionHandling>Sync</ExceptionHandling>
-			<BasicRuntimeChecks>Default</BasicRuntimeChecks>
-			<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-			<PrecompiledHeader>
-			</PrecompiledHeader>
-			<WarningLevel>Level4</WarningLevel>
-			<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-		</ClCompile>
-		<Link>
-			<AdditionalOptions>/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  %(AdditionalOptions)</AdditionalOptions>
-			<OutputFile>$(OutDir)tbbmalloc_proxy_debug.dll</OutputFile>
-			<GenerateDebugInformation>true</GenerateDebugInformation>
-			<SubSystem>Windows</SubSystem>
-			<RandomizedBaseAddress>false</RandomizedBaseAddress>
-			<DataExecutionPrevention>
-			</DataExecutionPrevention>
-			<TargetMachine>MachineX86</TargetMachine>
-		</Link>
-	</ItemDefinitionGroup>
-	<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">
-		<Midl>
-			<TargetEnvironment>X64</TargetEnvironment>
-		</Midl>
-		<ClCompile>
-			<AdditionalOptions> /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /volatile:iso /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc</AdditionalOptions>
-			<Optimization>Disabled</Optimization>
-			<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-			<MinimalRebuild>false</MinimalRebuild>
-			<ExceptionHandling>
-			</ExceptionHandling>
-			<BasicRuntimeChecks>Default</BasicRuntimeChecks>
-			<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-			<BufferSecurityCheck>false</BufferSecurityCheck>
-			<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
-			<PrecompiledHeader>
-			</PrecompiledHeader>
-			<WarningLevel>Level4</WarningLevel>
-			<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-			<ShowIncludes>false</ShowIncludes>
-		</ClCompile>
-		<Link>
-			<AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO %(AdditionalOptions)</AdditionalOptions>
-			<OutputFile>$(OutDir)tbbmalloc_proxy_debug.dll</OutputFile>
-			<GenerateDebugInformation>true</GenerateDebugInformation>
-			<SubSystem>Windows</SubSystem>
-			<RandomizedBaseAddress>false</RandomizedBaseAddress>
-			<DataExecutionPrevention>
-			</DataExecutionPrevention>
-			<TargetMachine>MachineX64</TargetMachine>
-		</Link>
-	</ItemDefinitionGroup>
-	<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">
-		<ClCompile>
-			<AdditionalOptions> /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /volatile:iso /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc</AdditionalOptions>
-			<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-			<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
-			<ExceptionHandling>
-			</ExceptionHandling>
-			<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-			<PrecompiledHeader>
-			</PrecompiledHeader>
-			<WarningLevel>Level4</WarningLevel>
-			<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-		</ClCompile>
-		<Link>
-			<AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO   %(AdditionalOptions)</AdditionalOptions>
-			<OutputFile>$(OutDir)tbbmalloc_proxy.dll</OutputFile>
-			<GenerateDebugInformation>true</GenerateDebugInformation>
-			<SubSystem>Windows</SubSystem>
-			<OptimizeReferences>true</OptimizeReferences>
-			<EnableCOMDATFolding>true</EnableCOMDATFolding>
-			<RandomizedBaseAddress>false</RandomizedBaseAddress>
-			<DataExecutionPrevention>
-			</DataExecutionPrevention>
-			<TargetMachine>MachineX86</TargetMachine>
-		</Link>
-	</ItemDefinitionGroup>
-	<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">
-		<Midl>
-			<TargetEnvironment>X64</TargetEnvironment>
-		</Midl>
-		<ClCompile>
-			<AdditionalOptions> /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /volatile:iso /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc</AdditionalOptions>
-			<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-			<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
-			<ExceptionHandling>
-			</ExceptionHandling>
-			<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-			<BufferSecurityCheck>false</BufferSecurityCheck>
-			<PrecompiledHeader>
-			</PrecompiledHeader>
-			<WarningLevel>Level4</WarningLevel>
-			<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-		</ClCompile>
-		<Link>
-			<AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO %(AdditionalOptions)</AdditionalOptions>
-			<OutputFile>$(OutDir)tbbmalloc_proxy.dll</OutputFile>
-			<GenerateDebugInformation>true</GenerateDebugInformation>
-			<SubSystem>Windows</SubSystem>
-			<OptimizeReferences>true</OptimizeReferences>
-			<EnableCOMDATFolding>true</EnableCOMDATFolding>
-			<RandomizedBaseAddress>false</RandomizedBaseAddress>
-			<DataExecutionPrevention>
-			</DataExecutionPrevention>
-			<TargetMachine>MachineX64</TargetMachine>
-		</Link>
-	</ItemDefinitionGroup>
-	<ItemGroup>
-	</ItemGroup>
-	<ItemGroup>
-		<ClInclude Include="..\..\src\tbbmalloc\tbb_function_replacement.h"/>
-		<ClInclude Include="..\..\include\tbb\tbbmalloc_proxy.h"/>
-	</ItemGroup>
-	<ItemGroup>
-		<ResourceCompile Include="..\..\src\tbbmalloc\tbbmalloc.rc">
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
-			<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
-		</ResourceCompile>
-		<ClCompile Include="..\..\src\tbbmalloc\proxy.cpp"/>
-		<ClCompile Include="..\..\src\tbbmalloc\tbb_function_replacement.cpp"/>
-	</ItemGroup>
-	<ItemGroup>
-		<ProjectReference Include="tbbmalloc.vcxproj">
-			<Project>{b15f131e-328a-4d42-adc2-9ff4ca6306d8}</Project>
-			<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-		</ProjectReference>
-	</ItemGroup>
-	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets"/>
-	<ImportGroup Label="ExtensionTargets">
-		<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets"/>
-	</ImportGroup>
-</Project>
diff --git a/build/vs2012/index.html b/build/vs2012/index.html
new file mode 100644
index 0000000..1fa1b8d
--- /dev/null
+++ b/build/vs2012/index.html
@@ -0,0 +1,30 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory contains the Visual Studio* 2012 solution to build Intel® Threading Building Blocks.
+
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="makefile.sln">makefile.sln</A>
+<DD>Solution file.</DD>
+<DT><A HREF="tbb.vcxproj">tbb.vcxproj</A>
+<DD>Library project file.</DD>
+<DT><A HREF="tbbmalloc.vcxproj">tbbmalloc.vcxproj</A>
+<DD>Scalable allocator library project file.</DD>
+<DT><A HREF="tbbmalloc_proxy.vcxproj">tbbmalloc_proxy.vcxproj</A>
+<DD>Standard allocator replacement project file. </DD>
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<P></P>
+Copyright © 2017 Intel Corporation.  All Rights Reserved.
+<P></P>
+Intel and the Intel logo are trademarks of Intel Corporation
+or its subsidiaries in the U.S. and/or other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
diff --git a/build/vs2012/makefile.sln b/build/vs2012/makefile.sln
new file mode 100644
index 0000000..cfd38fd
--- /dev/null
+++ b/build/vs2012/makefile.sln
@@ -0,0 +1,78 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{8898CE0B-0BFB-45AE-AA71-83735ED2510D}"
+	ProjectSection(SolutionItems) = preProject
+		index.html = index.html
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tbb", "tbb.vcxproj", "{F62787DD-1327-448B-9818-030062BCFAA5}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tbbmalloc", "tbbmalloc.vcxproj", "{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tbbmalloc_proxy", "tbbmalloc_proxy.vcxproj", "{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Debug-MT|Win32 = Debug-MT|Win32
+		Debug-MT|x64 = Debug-MT|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+		Release-MT|Win32 = Release-MT|Win32
+		Release-MT|x64 = Release-MT|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{F62787DD-1327-448B-9818-030062BCFAA5}.Debug|Win32.ActiveCfg = Debug|Win32
+		{F62787DD-1327-448B-9818-030062BCFAA5}.Debug|Win32.Build.0 = Debug|Win32
+		{F62787DD-1327-448B-9818-030062BCFAA5}.Debug|x64.ActiveCfg = Debug|x64
+		{F62787DD-1327-448B-9818-030062BCFAA5}.Debug|x64.Build.0 = Debug|x64
+		{F62787DD-1327-448B-9818-030062BCFAA5}.Debug-MT|Win32.ActiveCfg = Debug-MT|Win32
+		{F62787DD-1327-448B-9818-030062BCFAA5}.Debug-MT|Win32.Build.0 = Debug-MT|Win32
+		{F62787DD-1327-448B-9818-030062BCFAA5}.Debug-MT|x64.ActiveCfg = Debug-MT|x64
+		{F62787DD-1327-448B-9818-030062BCFAA5}.Debug-MT|x64.Build.0 = Debug-MT|x64
+		{F62787DD-1327-448B-9818-030062BCFAA5}.Release|Win32.ActiveCfg = Release|Win32
+		{F62787DD-1327-448B-9818-030062BCFAA5}.Release|Win32.Build.0 = Release|Win32
+		{F62787DD-1327-448B-9818-030062BCFAA5}.Release|x64.ActiveCfg = Release|x64
+		{F62787DD-1327-448B-9818-030062BCFAA5}.Release|x64.Build.0 = Release|x64
+		{F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|Win32.ActiveCfg = Release-MT|Win32
+		{F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|Win32.Build.0 = Release-MT|Win32
+		{F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|x64.ActiveCfg = Release-MT|x64
+		{F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|x64.Build.0 = Release-MT|x64
+		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug|Win32.ActiveCfg = Debug|Win32
+		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug|Win32.Build.0 = Debug|Win32
+		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug|x64.ActiveCfg = Debug|x64
+		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug|x64.Build.0 = Debug|x64
+		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug-MT|Win32.ActiveCfg = Debug-MT|Win32
+		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug-MT|Win32.Build.0 = Debug-MT|Win32
+		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug-MT|x64.ActiveCfg = Debug-MT|x64
+		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug-MT|x64.Build.0 = Debug-MT|x64
+		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release|Win32.ActiveCfg = Release|Win32
+		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release|Win32.Build.0 = Release|Win32
+		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release|x64.ActiveCfg = Release|x64
+		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release|x64.Build.0 = Release|x64
+		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release-MT|Win32.ActiveCfg = Release-MT|Win32
+		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release-MT|Win32.Build.0 = Release-MT|Win32
+		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release-MT|x64.ActiveCfg = Release-MT|x64
+		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release-MT|x64.Build.0 = Release-MT|x64
+		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug|Win32.ActiveCfg = Debug|Win32
+		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug|Win32.Build.0 = Debug|Win32
+		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug|x64.ActiveCfg = Debug|x64
+		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug|x64.Build.0 = Debug|x64
+		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug-MT|Win32.ActiveCfg = Debug-MT|Win32
+		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug-MT|Win32.Build.0 = Debug-MT|Win32
+		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug-MT|x64.ActiveCfg = Debug-MT|x64
+		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug-MT|x64.Build.0 = Debug-MT|x64
+		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release|Win32.ActiveCfg = Release|Win32
+		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release|Win32.Build.0 = Release|Win32
+		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release|x64.ActiveCfg = Release|x64
+		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release|x64.Build.0 = Release|x64
+		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release-MT|Win32.ActiveCfg = Release-MT|Win32
+		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release-MT|Win32.Build.0 = Release-MT|Win32
+		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release-MT|x64.ActiveCfg = Release-MT|x64
+		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release-MT|x64.Build.0 = Release-MT|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/build/vs2012/tbb.vcxproj b/build/vs2012/tbb.vcxproj
new file mode 100644
index 0000000..cd83fb1
--- /dev/null
+++ b/build/vs2012/tbb.vcxproj
@@ -0,0 +1,696 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug-MT|Win32">
+      <Configuration>Debug-MT</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug-MT|x64">
+      <Configuration>Debug-MT</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release-MT|Win32">
+      <Configuration>Release-MT</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release-MT|x64">
+      <Configuration>Release-MT</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{F62787DD-1327-448B-9818-030062BCFAA5}</ProjectGuid>
+    <RootNamespace>tbb</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+    <Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_debug</TargetName>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(ProjectName)_debug</TargetName>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_debug</TargetName>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(ProjectName)_debug</TargetName>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>  /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalOptions>/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)tbb.def" %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(OutDir)tbb_debug.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalOptions>  /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <ShowIncludes>false</ShowIncludes>
+    </ClCompile>
+    <Link>
+      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)tbb.def" %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(OutDir)tbb_debug.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX64</TargetMachine>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>  /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include</AdditionalOptions>
+      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)tbb.def" %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(OutDir)tbb.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalOptions>  /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include</AdditionalOptions>
+      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)tbb.def" %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(OutDir)tbb.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX64</TargetMachine>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">
+    <ClCompile>
+      <AdditionalOptions>  /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalOptions>/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)tbb.def" %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(OutDir)tbb_debug.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalOptions>  /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <ShowIncludes>false</ShowIncludes>
+    </ClCompile>
+    <Link>
+      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)tbb.def" %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(OutDir)tbb_debug.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX64</TargetMachine>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">
+    <ClCompile>
+      <AdditionalOptions>  /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include</AdditionalOptions>
+      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)tbb.def" %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(OutDir)tbb.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalOptions>  /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include</AdditionalOptions>
+      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)tbb.def" %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(OutDir)tbb.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX64</TargetMachine>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <MASM Include="..\..\src\tbb\ia32-masm\atomic_support.asm">
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">/coff /Zi</AdditionalOptions>
+      <UseSafeExceptionHandlers Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">true</UseSafeExceptionHandlers>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">true</ExcludedFromBuild>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">/coff /Zi</AdditionalOptions>
+      <UseSafeExceptionHandlers Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</UseSafeExceptionHandlers>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">/coff</AdditionalOptions>
+      <UseSafeExceptionHandlers Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">true</UseSafeExceptionHandlers>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">true</ExcludedFromBuild>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">/coff</AdditionalOptions>
+      <UseSafeExceptionHandlers Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</UseSafeExceptionHandlers>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </MASM>
+    <CustomBuild Include="..\..\src\tbb\intel64-masm\atomic_support.asm">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">building atomic_support.obj</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">ml64 /Fo"$(IntDir)%(FileName).obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">building atomic_support.obj</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">ml64 /Fo"$(IntDir)%(FileName).obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">building atomic_support.obj</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">ml64 /Fo"$(IntDir)%(FileName).obj"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">building atomic_support.obj</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">ml64 /Fo"$(IntDir)%(FileName).obj"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="..\..\src\tbb\intel64-masm\intel64_misc.asm">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">building intel64_misc.obj</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">ml64 /Fo"$(IntDir)%(FileName).obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/intel64_misc.asm</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">building intel64_misc.obj</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">ml64 /Fo"$(IntDir)%(FileName).obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/intel64_misc.asm</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">building intel64_misc.obj</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">ml64 /Fo"$(IntDir)%(FileName).obj"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/intel64_misc.asm</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">building intel64_misc.obj</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">ml64 /Fo"$(IntDir)%(FileName).obj"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/intel64_misc.asm</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>
+    </CustomBuild>
+    <MASM Include="..\..\src\tbb\ia32-masm\itsx.asm">
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">/coff /Zi</AdditionalOptions>
+      <UseSafeExceptionHandlers Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">true</UseSafeExceptionHandlers>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">true</ExcludedFromBuild>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">/coff /Zi</AdditionalOptions>
+      <UseSafeExceptionHandlers Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</UseSafeExceptionHandlers>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">/coff</AdditionalOptions>
+      <UseSafeExceptionHandlers Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">true</UseSafeExceptionHandlers>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">true</ExcludedFromBuild>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">/coff</AdditionalOptions>
+      <UseSafeExceptionHandlers Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</UseSafeExceptionHandlers>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </MASM>
+    <CustomBuild Include="..\..\src\tbb\intel64-masm\itsx.asm">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">building itsx.obj</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">ml64 /Fo"$(IntDir)%(FileName).obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/itsx.asm</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">building itsx.obj</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">ml64 /Fo"$(IntDir)%(FileName).obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/itsx.asm</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">building itsx.obj</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">ml64 /Fo"$(IntDir)%(FileName).obj"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/itsx.asm</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">building itsx.obj</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">ml64 /Fo"$(IntDir)%(FileName).obj"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/itsx.asm</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>
+    </CustomBuild>
+    <MASM Include="..\..\src\tbb\ia32-masm\lock_byte.asm">
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">/coff /Zi</AdditionalOptions>
+      <UseSafeExceptionHandlers Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">true</UseSafeExceptionHandlers>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">true</ExcludedFromBuild>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">/coff /Zi</AdditionalOptions>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">/coff /Zi</AdditionalOptions>
+      <UseSafeExceptionHandlers Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</UseSafeExceptionHandlers>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">/coff /Zi</AdditionalOptions>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">/coff</AdditionalOptions>
+      <UseSafeExceptionHandlers Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">true</UseSafeExceptionHandlers>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">true</ExcludedFromBuild>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">/coff</AdditionalOptions>
+      <UseSafeExceptionHandlers Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</UseSafeExceptionHandlers>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </MASM>
+  </ItemGroup>
+  <ItemGroup>
+    <CustomBuild Include="..\..\src\tbb\win32-tbb-export.def">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">generating tbb.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)tbb.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(IntDir)tbb.def;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">generating tbb.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)tbb.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(IntDir)tbb.def;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">generating tbb.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)tbb.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)tbb.def;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">generating tbb.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)tbb.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)tbb.def;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">generating tbb.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)tbb.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">$(IntDir)tbb.def;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">generating tbb.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)tbb.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">$(IntDir)tbb.def;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">generating tbb.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)tbb.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)tbb.def;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">generating tbb.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)tbb.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)tbb.def;%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="..\..\src\tbb\win64-tbb-export.def">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">generating tbb.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)tbb.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(IntDir)tbb.def;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">generating tbb.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)tbb.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(IntDir)tbb.def;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">generating tbb.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)tbb.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)tbb.def;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">generating tbb.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)tbb.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)tbb.def;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">generating tbb.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)tbb.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">$(IntDir)tbb.def;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">generating tbb.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)tbb.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">$(IntDir)tbb.def;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">generating tbb.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)tbb.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)tbb.def;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">generating tbb.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)tbb.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)tbb.def;%(Outputs)</Outputs>
+    </CustomBuild>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\src\tbb\concurrent_hash_map.cpp" />
+    <ClCompile Include="..\..\src\tbb\concurrent_queue.cpp" />
+    <ClCompile Include="..\..\src\tbb\concurrent_vector.cpp" />
+    <ClCompile Include="..\..\src\tbb\dynamic_link.cpp" />
+    <ClCompile Include="..\..\src\tbb\itt_notify.cpp" />
+    <ClCompile Include="..\..\src\tbb\cache_aligned_allocator.cpp" />
+    <ClCompile Include="..\..\src\tbb\pipeline.cpp" />
+    <ClCompile Include="..\..\src\tbb\queuing_mutex.cpp" />
+    <ClCompile Include="..\..\src\tbb\queuing_rw_mutex.cpp" />
+    <ClCompile Include="..\..\src\tbb\reader_writer_lock.cpp" />
+    <ClCompile Include="..\..\src\tbb\spin_rw_mutex.cpp" />
+    <ClCompile Include="..\..\src\tbb\x86_rtm_rw_mutex.cpp" />
+    <ClCompile Include="..\..\src\tbb\spin_mutex.cpp" />
+    <ClCompile Include="..\..\src\tbb\critical_section.cpp" />
+    <ClCompile Include="..\..\src\tbb\mutex.cpp" />
+    <ClCompile Include="..\..\src\tbb\recursive_mutex.cpp" />
+    <ClCompile Include="..\..\src\tbb\condition_variable.cpp" />
+    <ClCompile Include="..\..\src\tbb\tbb_thread.cpp" />
+    <ClCompile Include="..\..\src\tbb\concurrent_monitor.cpp" />
+    <ClCompile Include="..\..\src\tbb\semaphore.cpp" />
+    <ClCompile Include="..\..\src\tbb\private_server.cpp" />
+    <ClCompile Include="..\..\src\rml\client\rml_tbb.cpp" />
+    <ClCompile Include="..\..\src\tbb\tbb_misc.cpp" />
+    <ClCompile Include="..\..\src\tbb\tbb_misc_ex.cpp" />
+    <ClCompile Include="..\..\src\tbb\task.cpp" />
+    <ClCompile Include="..\..\src\tbb\task_group_context.cpp" />
+    <ClCompile Include="..\..\src\tbb\governor.cpp" />
+    <ClCompile Include="..\..\src\tbb\market.cpp" />
+    <ClCompile Include="..\..\src\tbb\arena.cpp" />
+    <ClCompile Include="..\..\src\tbb\scheduler.cpp" />
+    <ClCompile Include="..\..\src\tbb\observer_proxy.cpp" />
+    <ClCompile Include="..\..\src\tbb\tbb_statistics.cpp" />
+    <ClCompile Include="..\..\src\tbb\tbb_main.cpp" />
+    <ClCompile Include="..\..\src\old\concurrent_vector_v2.cpp" />
+    <ClCompile Include="..\..\src\old\concurrent_queue_v2.cpp" />
+    <ClCompile Include="..\..\src\old\spin_rw_mutex_v2.cpp" />
+    <ClCompile Include="..\..\src\old\task_v2.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\include\tbb\internal\_concurrent_queue_impl.h" />
+    <ClInclude Include="..\..\include\tbb\_tbb_windef.h" />
+    <ClInclude Include="..\..\include\tbb\aligned_space.h" />
+    <ClInclude Include="..\..\include\tbb\atomic.h" />
+    <ClInclude Include="..\..\include\tbb\blocked_range.h" />
+    <ClInclude Include="..\..\include\tbb\blocked_range2d.h" />
+    <ClInclude Include="..\..\include\tbb\blocked_range3d.h" />
+    <ClInclude Include="..\..\include\tbb\cache_aligned_allocator.h" />
+    <ClInclude Include="..\..\include\tbb\combinable.h" />
+    <ClInclude Include="..\..\include\tbb\concurrent_hash_map.h" />
+    <ClInclude Include="..\..\src\tbb\concurrent_monitor.h" />
+    <ClInclude Include="..\..\include\tbb\concurrent_priority_queue.h" />
+    <ClInclude Include="..\..\include\tbb\concurrent_queue.h" />
+    <ClInclude Include="..\..\src\old\concurrent_queue_v2.h" />
+    <ClInclude Include="..\..\include\tbb\concurrent_vector.h" />
+    <ClInclude Include="..\..\src\old\concurrent_vector_v2.h" />
+    <ClInclude Include="..\..\include\tbb\critical_section.h" />
+    <ClInclude Include="..\..\src\tbb\dynamic_link.h" />
+    <ClInclude Include="..\..\include\tbb\enumerable_thread_specific.h" />
+    <ClInclude Include="..\..\src\tbb\gate.h" />
+    <ClInclude Include="..\..\src\test\harness.h" />
+    <ClInclude Include="..\..\src\test\harness_allocator.h" />
+    <ClInclude Include="..\..\src\test\harness_assert.h" />
+    <ClInclude Include="..\..\src\test\harness_bad_expr.h" />
+    <ClInclude Include="..\..\src\test\harness_barrier.h" />
+    <ClInclude Include="..\..\src\test\harness_concurrency_tracker.h" />
+    <ClInclude Include="..\..\src\test\harness_cpu.h" />
+    <ClInclude Include="..\..\src\test\harness_eh.h" />
+    <ClInclude Include="..\..\src\test\harness_iterator.h" />
+    <ClInclude Include="..\..\src\test\harness_m128.h" />
+    <ClInclude Include="..\..\src\test\harness_memory.h" />
+    <ClInclude Include="..\..\src\test\harness_report.h" />
+    <ClInclude Include="..\..\include\tbb\machine\ibm_aix51.h" />
+    <ClInclude Include="..\..\src\tbb\itt_notify.h" />
+    <ClInclude Include="..\..\include\tbb\machine\linux_common.h" />
+    <ClInclude Include="..\..\include\tbb\machine\linux_ia32.h" />
+    <ClInclude Include="..\..\include\tbb\machine\linux_ia64.h" />
+    <ClInclude Include="..\..\include\tbb\machine\linux_intel64.h" />
+    <ClInclude Include="..\..\include\tbb\machine\mac_ppc.h" />
+    <ClInclude Include="..\..\include\tbb\mutex.h" />
+    <ClInclude Include="..\..\include\tbb\null_mutex.h" />
+    <ClInclude Include="..\..\include\tbb\null_rw_mutex.h" />
+    <ClInclude Include="..\..\include\tbb\parallel_do.h" />
+    <ClInclude Include="..\..\include\tbb\parallel_for.h" />
+    <ClInclude Include="..\..\include\tbb\parallel_for_each.h" />
+    <ClInclude Include="..\..\include\tbb\parallel_invoke.h" />
+    <ClInclude Include="..\..\include\tbb\parallel_reduce.h" />
+    <ClInclude Include="..\..\include\tbb\parallel_scan.h" />
+    <ClInclude Include="..\..\include\tbb\parallel_sort.h" />
+    <ClInclude Include="..\..\include\tbb\parallel_while.h" />
+    <ClInclude Include="..\..\include\tbb\partitioner.h" />
+    <ClInclude Include="..\..\include\tbb\pipeline.h" />
+    <ClInclude Include="..\..\include\tbb\compat\ppl.h" />
+    <ClInclude Include="..\..\include\tbb\queuing_mutex.h" />
+    <ClInclude Include="..\..\include\tbb\queuing_rw_mutex.h" />
+    <ClInclude Include="..\..\include\tbb\reader_writer_lock.h" />
+    <ClInclude Include="..\..\include\tbb\recursive_mutex.h" />
+    <ClInclude Include="..\..\include\tbb\scalable_allocator.h" />
+    <ClInclude Include="..\..\src\tbb\semaphore.h" />
+    <ClInclude Include="..\..\include\tbb\spin_mutex.h" />
+    <ClInclude Include="..\..\include\tbb\spin_rw_mutex.h" />
+    <ClInclude Include="..\..\src\old\spin_rw_mutex_v2.h" />
+    <ClInclude Include="..\..\include\tbb\task.h" />
+    <ClInclude Include="..\..\include\tbb\task_group.h" />
+    <ClInclude Include="..\..\include\tbb\task_scheduler_init.h" />
+    <ClInclude Include="..\..\include\tbb\task_scheduler_observer.h" />
+    <ClInclude Include="..\..\include\tbb\tbb.h" />
+    <ClInclude Include="..\..\include\tbb\tbb_allocator.h" />
+    <ClInclude Include="..\..\src\tbb\tbb_assert_impl.h" />
+    <ClInclude Include="..\..\include\tbb\tbb_config.h" />
+    <ClInclude Include="..\..\include\tbb\tbb_exception.h" />
+    <ClInclude Include="..\..\include\tbb\tbb_machine.h" />
+    <ClInclude Include="..\..\src\tbb\tbb_misc.h" />
+    <ClInclude Include="..\..\include\tbb\tbb_profiling.h" />
+    <ClInclude Include="..\..\include\tbb\tbb_stddef.h" />
+    <ClInclude Include="..\..\include\tbb\tbb_thread.h" />
+    <ClInclude Include="..\..\src\tbb\tbb_version.h" />
+    <ClInclude Include="..\..\include\tbb\tbbmalloc_proxy.h" />
+    <ClInclude Include="..\..\src\test\test_allocator.h" />
+    <ClInclude Include="..\..\src\test\test_allocator_STL.h" />
+    <ClInclude Include="..\..\include\tbb\tick_count.h" />
+    <ClInclude Include="..\..\src\tbb\tls.h" />
+    <ClInclude Include="..\..\include\tbb\machine\windows_ia32.h" />
+    <ClInclude Include="..\..\include\tbb\machine\windows_intel64.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\..\src\tbb\tbb_resource.rc">
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
+    </ResourceCompile>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+    <Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/build/vs2012/tbbmalloc.vcxproj b/build/vs2012/tbbmalloc.vcxproj
new file mode 100644
index 0000000..eb6482c
--- /dev/null
+++ b/build/vs2012/tbbmalloc.vcxproj
@@ -0,0 +1,558 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug-MT|Win32">
+      <Configuration>Debug-MT</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug-MT|x64">
+      <Configuration>Debug-MT</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release-MT|Win32">
+      <Configuration>Release-MT</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release-MT|x64">
+      <Configuration>Release-MT</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}</ProjectGuid>
+    <RootNamespace>tbbmalloc</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+    <Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_debug</TargetName>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(ProjectName)_debug</TargetName>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_debug</TargetName>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(ProjectName)_debug</TargetName>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions> /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I.</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <ExceptionHandling>false</ExceptionHandling>
+    </ClCompile>
+    <Link>
+      <AdditionalOptions>/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)tbbmalloc.def" %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(OutDir)tbbmalloc_debug.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalOptions> /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I.</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <MinimalRebuild>false</MinimalRebuild>
+      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <ShowIncludes>false</ShowIncludes>
+      <ExceptionHandling>false</ExceptionHandling>
+    </ClCompile>
+    <Link>
+      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)tbbmalloc.def" %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(OutDir)tbbmalloc_debug.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions> /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I.</AdditionalOptions>
+      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <ExceptionHandling>false</ExceptionHandling>
+    </ClCompile>
+    <Link>
+      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)tbbmalloc.def" %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(OutDir)tbbmalloc.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalOptions> /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I.</AdditionalOptions>
+      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <ExceptionHandling>false</ExceptionHandling>
+    </ClCompile>
+    <Link>
+      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)tbbmalloc.def" %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(OutDir)tbbmalloc.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">
+    <ClCompile>
+      <AdditionalOptions> /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I.</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <ExceptionHandling>false</ExceptionHandling>
+    </ClCompile>
+    <Link>
+      <AdditionalOptions>/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)tbbmalloc.def" %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(OutDir)tbbmalloc_debug.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalOptions> /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I.</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <MinimalRebuild>false</MinimalRebuild>
+      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <ShowIncludes>false</ShowIncludes>
+      <ExceptionHandling>false</ExceptionHandling>
+    </ClCompile>
+    <Link>
+      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)tbbmalloc.def" %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(OutDir)tbbmalloc_debug.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">
+    <ClCompile>
+      <AdditionalOptions> /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I.</AdditionalOptions>
+      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <ExceptionHandling>false</ExceptionHandling>
+    </ClCompile>
+    <Link>
+      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)tbbmalloc.def" %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(OutDir)tbbmalloc.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalOptions> /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I.</AdditionalOptions>
+      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <ExceptionHandling>false</ExceptionHandling>
+    </ClCompile>
+    <Link>
+      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)tbbmalloc.def" %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(OutDir)tbbmalloc.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <CustomBuild Include="..\..\src\tbb\intel64-masm\atomic_support.asm">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">building atomic_support.obj</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">ml64 /Fo"$(IntDir)%(FileName).obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">building atomic_support.obj</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">ml64 /Fo"$(IntDir)%(FileName).obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">building atomic_support.obj</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">ml64 /Fo"$(IntDir)%(FileName).obj"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">building atomic_support.obj</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">ml64 /Fo"$(IntDir)%(FileName).obj"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>
+    </CustomBuild>
+  </ItemGroup>
+  <ItemGroup>
+    <CustomBuild Include="..\..\src\tbbmalloc\win32-tbbmalloc-export.def">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">generating tbbmalloc.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">generating tbbmalloc.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">generating tbbmalloc.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">generating tbbmalloc.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">generating tbbmalloc.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">generating tbbmalloc.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">cl /nologo /TC /EP ../../src/tbb/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">generating tbbmalloc.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">generating tbbmalloc.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">cl /nologo /TC /EP ../../src/tbb/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="..\..\src\tbbmalloc\win64-tbbmalloc-export.def">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">generating tbbmalloc.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">cl /nologo /TC /EP ../../src/tbb/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">generating tbbmalloc.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">cl /nologo /TC /EP ../../src/tbbmalloc/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">generating tbbmalloc.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cl /nologo /TC /EP ../../src/tbb/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">generating tbbmalloc.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">cl /nologo /TC /EP ../../src/tbbmalloc/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">generating tbbmalloc.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">cl /nologo /TC /EP ../../src/tbb/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">generating tbbmalloc.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">cl /nologo /TC /EP ../../src/tbbmalloc/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">generating tbbmalloc.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cl /nologo /TC /EP ../../src/tbb/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">generating tbbmalloc.def file</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">cl /nologo /TC /EP ../../src/tbbmalloc/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>
+    </CustomBuild>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\src\tbbmalloc\backend.cpp" />
+    <ClCompile Include="..\..\src\tbbmalloc\large_objects.cpp" />
+    <ClCompile Include="..\..\src\tbbmalloc\backref.cpp" />
+    <ClCompile Include="..\..\src\tbbmalloc\tbbmalloc.cpp" />
+    <ClCompile Include="..\..\src\tbb\itt_notify.cpp" />
+    <ClCompile Include="..\..\src\tbbmalloc\frontend.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\include\tbb\internal\_concurrent_queue_impl.h" />
+    <ClInclude Include="..\..\include\tbb\_tbb_windef.h" />
+    <ClInclude Include="..\..\include\tbb\aligned_space.h" />
+    <ClInclude Include="..\..\include\tbb\atomic.h" />
+    <ClInclude Include="..\..\include\tbb\blocked_range.h" />
+    <ClInclude Include="..\..\include\tbb\blocked_range2d.h" />
+    <ClInclude Include="..\..\include\tbb\blocked_range3d.h" />
+    <ClInclude Include="..\..\include\tbb\cache_aligned_allocator.h" />
+    <ClInclude Include="..\..\include\tbb\combinable.h" />
+    <ClInclude Include="..\..\include\tbb\concurrent_hash_map.h" />
+    <ClInclude Include="..\..\include\tbb\concurrent_queue.h" />
+    <ClInclude Include="..\..\include\tbb\concurrent_vector.h" />
+    <ClInclude Include="..\..\include\tbb\critical_section.h" />
+    <ClInclude Include="..\..\src\tbbmalloc\Customize.h" />
+    <ClInclude Include="..\..\include\tbb\enumerable_thread_specific.h" />
+    <ClInclude Include="..\..\src\tbbmalloc\LifoList.h" />
+    <ClInclude Include="..\..\src\tbbmalloc\MapMemory.h" />
+    <ClInclude Include="..\..\include\tbb\mutex.h" />
+    <ClInclude Include="..\..\include\tbb\null_mutex.h" />
+    <ClInclude Include="..\..\include\tbb\null_rw_mutex.h" />
+    <ClInclude Include="..\..\include\tbb\parallel_do.h" />
+    <ClInclude Include="..\..\include\tbb\parallel_for.h" />
+    <ClInclude Include="..\..\include\tbb\parallel_for_each.h" />
+    <ClInclude Include="..\..\include\tbb\parallel_invoke.h" />
+    <ClInclude Include="..\..\include\tbb\parallel_reduce.h" />
+    <ClInclude Include="..\..\include\tbb\parallel_scan.h" />
+    <ClInclude Include="..\..\include\tbb\parallel_sort.h" />
+    <ClInclude Include="..\..\include\tbb\parallel_while.h" />
+    <ClInclude Include="..\..\include\tbb\partitioner.h" />
+    <ClInclude Include="..\..\include\tbb\pipeline.h" />
+    <ClInclude Include="..\..\src\tbbmalloc\proxy.h" />
+    <ClInclude Include="..\..\include\tbb\queuing_mutex.h" />
+    <ClInclude Include="..\..\include\tbb\queuing_rw_mutex.h" />
+    <ClInclude Include="..\..\include\tbb\recursive_mutex.h" />
+    <ClInclude Include="..\..\include\tbb\scalable_allocator.h" />
+    <ClInclude Include="..\..\include\tbb\spin_mutex.h" />
+    <ClInclude Include="..\..\include\tbb\spin_rw_mutex.h" />
+    <ClInclude Include="..\..\src\tbbmalloc\Statistics.h" />
+    <ClInclude Include="..\..\include\tbb\task.h" />
+    <ClInclude Include="..\..\include\tbb\task_group.h" />
+    <ClInclude Include="..\..\include\tbb\task_scheduler_init.h" />
+    <ClInclude Include="..\..\include\tbb\task_scheduler_observer.h" />
+    <ClInclude Include="..\..\include\tbb\tbb.h" />
+    <ClInclude Include="..\..\include\tbb\tbb_allocator.h" />
+    <ClInclude Include="..\..\include\tbb\tbb_config.h" />
+    <ClInclude Include="..\..\include\tbb\tbb_exception.h" />
+    <ClInclude Include="..\..\src\tbbmalloc\tbb_function_replacement.h" />
+    <ClInclude Include="..\..\include\tbb\tbb_machine.h" />
+    <ClInclude Include="..\..\include\tbb\tbb_profiling.h" />
+    <ClInclude Include="..\..\include\tbb\tbb_stddef.h" />
+    <ClInclude Include="..\..\include\tbb\tbb_thread.h" />
+    <ClInclude Include="..\..\include\tbb\tbb_version.h" />
+    <ClInclude Include="..\..\include\tbb\tbbmalloc_proxy.h" />
+    <ClInclude Include="..\..\include\tbb\tick_count.h" />
+    <ClInclude Include="..\..\src\tbbmalloc\TypeDefinitions.h" />
+    <ClInclude Include="..\..\include\tbb\machine\windows_ia32.h" />
+    <ClInclude Include="..\..\include\tbb\machine\windows_intel64.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\..\src\tbbmalloc\tbbmalloc.rc">
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
+    </ResourceCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="tbb.vcxproj">
+      <Project>{f62787dd-1327-448b-9818-030062bcfaa5}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+    <Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/build/vs2012/tbbmalloc_proxy.vcxproj b/build/vs2012/tbbmalloc_proxy.vcxproj
new file mode 100644
index 0000000..cc16e2d
--- /dev/null
+++ b/build/vs2012/tbbmalloc_proxy.vcxproj
@@ -0,0 +1,425 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug-MT|Win32">
+      <Configuration>Debug-MT</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug-MT|x64">
+      <Configuration>Debug-MT</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release-MT|Win32">
+      <Configuration>Release-MT</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release-MT|x64">
+      <Configuration>Release-MT</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}</ProjectGuid>
+    <RootNamespace>tbbmalloc_proxy</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+    <Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_debug</TargetName>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">$(ProjectName)_debug</TargetName>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_debug</TargetName>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">$(ProjectName)_debug</TargetName>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions> /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <ExceptionHandling>Sync</ExceptionHandling>
+      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalOptions>/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(OutDir)tbbmalloc_proxy_debug.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalOptions> /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <MinimalRebuild>false</MinimalRebuild>
+      <ExceptionHandling>
+      </ExceptionHandling>
+      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <ShowIncludes>false</ShowIncludes>
+    </ClCompile>
+    <Link>
+      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(OutDir)tbbmalloc_proxy_debug.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions> /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc</AdditionalOptions>
+      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ExceptionHandling>
+      </ExceptionHandling>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO   %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(OutDir)tbbmalloc_proxy.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalOptions> /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc</AdditionalOptions>
+      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ExceptionHandling>
+      </ExceptionHandling>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(OutDir)tbbmalloc_proxy.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">
+    <ClCompile>
+      <AdditionalOptions> /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <ExceptionHandling>Sync</ExceptionHandling>
+      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalOptions>/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(OutDir)tbbmalloc_proxy_debug.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalOptions> /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <MinimalRebuild>false</MinimalRebuild>
+      <ExceptionHandling>
+      </ExceptionHandling>
+      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <ShowIncludes>false</ShowIncludes>
+    </ClCompile>
+    <Link>
+      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(OutDir)tbbmalloc_proxy_debug.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">
+    <ClCompile>
+      <AdditionalOptions> /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc</AdditionalOptions>
+      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ExceptionHandling>
+      </ExceptionHandling>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO   %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(OutDir)tbbmalloc_proxy.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalOptions> /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc</AdditionalOptions>
+      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ExceptionHandling>
+      </ExceptionHandling>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(OutDir)tbbmalloc_proxy.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\src\tbbmalloc\tbb_function_replacement.h" />
+    <ClInclude Include="..\..\include\tbb\tbbmalloc_proxy.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\..\src\tbbmalloc\tbbmalloc.rc">
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug-MT|Win32'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug-MT|x64'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release-MT|Win32'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release-MT|x64'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>
+    </ResourceCompile>
+    <ClCompile Include="..\..\src\tbbmalloc\proxy.cpp" />
+    <ClCompile Include="..\..\src\tbbmalloc\tbb_function_replacement.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="tbbmalloc.vcxproj">
+      <Project>{b15f131e-328a-4d42-adc2-9ff4ca6306d8}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+    <Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/build/vs2010/version_string.ver b/build/vs2012/version_string.ver
similarity index 100%
rename from build/vs2010/version_string.ver
rename to build/vs2012/version_string.ver
diff --git a/build/windows.cl.inc b/build/windows.cl.inc
index b7f6036..8d5a794 100644
--- a/build/windows.cl.inc
+++ b/build/windows.cl.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 #------------------------------------------------------------------------------
 # Define compiler-specific variables.
@@ -28,14 +28,18 @@ CPLUS = cl /nologo
 LINK_FLAGS = /link /nologo
 LIB_LINK_FLAGS=/link /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DYNAMICBASE /NXCOMPAT
 
+ifneq (,$(stdver))
+    CXX_STD_FLAGS = /std:$(stdver) /D_TBB_CPP0X
+endif
+
 ifeq ($(arch), ia32)
-	LIB_LINK_FLAGS += /SAFESEH
+    LIB_LINK_FLAGS += /SAFESEH
 endif
 
 ifeq ($(runtime), vc_mt)
-	MS_CRT_KEY = /MT$(if $(findstring debug,$(cfg)),d)
+    MS_CRT_KEY = /MT$(if $(findstring debug,$(cfg)),d)
 else
-	MS_CRT_KEY = /MD$(if $(findstring debug,$(cfg)),d)
+    MS_CRT_KEY = /MD$(if $(findstring debug,$(cfg)),d)
 endif
 EH_FLAGS = /EHsc /GR
 
@@ -67,6 +71,7 @@ DEFINE_KEY = /D
 OUTPUT_KEY = /Fe
 OUTPUTOBJ_KEY = /Fo
 WARNING_AS_ERROR_KEY = /WX
+BIGOBJ_KEY = /bigobj
 
 ifeq ($(runtime),vc7.1)
         WARNING_KEY = /W3
@@ -91,9 +96,15 @@ ifeq (ok,$(call detect_js,/minversion cl 17))
         CPLUS_FLAGS += /volatile:iso
 endif
 
+# Since VS2013, VC++ uses the same .pdb file for different sources so we need
+# to add /FS (Force Synchronous PDB Writes)
+ifeq (ok,$(call detect_js,/minversion cl 18))
+        CPLUS_FLAGS += /FS
+endif
+
 CPLUS_FLAGS += /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE \
         /D_WIN32_WINNT=$(_WIN32_WINNT)
-C_FLAGS = $(CPLUS_FLAGS)
+C_FLAGS = $(subst $(EH_FLAGS),,$(CPLUS_FLAGS))
 
 #------------------------------------------------------------------------------
 # End of setting compiler flags.
@@ -127,11 +138,7 @@ endif
 #------------------------------------------------------------------------------
 # Setting tbbmalloc data.
 #------------------------------------------------------------------------------
-ifneq ($(target_ui), win8ui)
-M_CPLUS_FLAGS = $(subst $(EH_FLAGS),/EHs-,$(CPLUS_FLAGS))
-else
 M_CPLUS_FLAGS = $(CPLUS_FLAGS)
-endif
 #------------------------------------------------------------------------------
 # End of setting tbbmalloc data.
 #------------------------------------------------------------------------------
diff --git a/build/windows.gcc.inc b/build/windows.gcc.inc
index 2a6d000..be9842c 100644
--- a/build/windows.gcc.inc
+++ b/build/windows.gcc.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 #------------------------------------------------------------------------------
 # Overriding settings from windows.inc
@@ -65,6 +65,7 @@ DYLIB_KEY = -shared
 LIBDL =
 EXPORT_KEY = -Wl,--version-script,
 LIBS = -lpsapi
+BIGOBJ_KEY = -Wa,-mbig-obj
 
 #------------------------------------------------------------------------------
 # End of compiler-specific variables
@@ -74,16 +75,19 @@ LIBS = -lpsapi
 
 LINK_FLAGS = -Wl,--enable-auto-import
 LIB_LINK_FLAGS = $(DYLIB_KEY)
-# gcc 4.4 and higher support -std=c++0x
-ifeq (ok,$(call detect_js,/minversion gcc 4.4))
-    CPP11_FLAGS = -std=c++0x -D_TBB_CPP0X
-endif
 
 # gcc 4.8 and later support RTM intrinsics, but require command line switch to enable them
 ifeq (ok,$(call detect_js,/minversion gcc 4.8))
     RTM_KEY = -mrtm
 endif
 
+# gcc 6.0 and later have -flifetime-dse option that controls
+# elimination of stores done outside the object lifetime
+ifeq (ok,$(call detect_js,/minversion gcc 6.0))
+    # keep pre-contruction stores for zero initialization
+    DSE_KEY = -flifetime-dse=1
+endif
+
 ifeq ($(cfg), release)
         CPLUS_FLAGS = -g -O2
 endif
@@ -91,10 +95,6 @@ ifeq ($(cfg), debug)
         CPLUS_FLAGS = -g -O0 -DTBB_USE_DEBUG
 endif
 
-ifneq (00,$(lambdas)$(cpp0x))
-    CXX_ONLY_FLAGS += $(CPP11_FLAGS)
-endif
-
 CPLUS_FLAGS += -DUSE_WINTHREAD
 CPLUS_FLAGS += -D_WIN32_WINNT=$(_WIN32_WINNT)
 
diff --git a/build/windows.icl.inc b/build/windows.icl.inc
index d5047d4..a28d755 100644
--- a/build/windows.icl.inc
+++ b/build/windows.icl.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 #------------------------------------------------------------------------------
 # Define compiler-specific variables.
@@ -41,10 +41,8 @@ ifeq ($(arch), ia32)
 	LIB_LINK_FLAGS += /SAFESEH
 endif
 
-
-# ICC 11.0 and higher support -std=c++0x
-ifeq (ok,$(call detect_js,/minversion icl 11))
-    CPP11_FLAGS = /Qstd=c++0x /D_TBB_CPP0X
+ifneq (,$(stdver))
+    CXX_STD_FLAGS = /Qstd=$(stdver) /D_TBB_CPP0X
 endif
 
 # ICC 12.0 and higher provide Intel(R) Cilk(TM) Plus
@@ -83,6 +81,7 @@ DYLIB_KEY = /DLL
 EXPORT_KEY = /DEF:
 NODEFAULTLIB_KEY = /Zl
 NOINTRINSIC_KEY = /Oi-
+BIGOBJ_KEY = /bigobj
 
 
 ifneq (,$(codecov))
@@ -100,11 +99,7 @@ ifeq ($(runtime),vc8)
 endif
 
 
-C_FLAGS = $(CPLUS_FLAGS)
-
-ifneq (00,$(lambdas)$(cpp0x))
-    CXX_ONLY_FLAGS += $(CPP11_FLAGS)
-endif
+C_FLAGS = $(subst $(EH_FLAGS),,$(CPLUS_FLAGS))
 
 VCVERSION:=$(runtime)
 VCCOMPAT_FLAG ?= $(if $(findstring vc7.1, $(VCVERSION)),/Qvc7.1)
@@ -127,6 +122,9 @@ ifeq ($(VCCOMPAT_FLAG),)
         VCCOMPAT_FLAG := $(if $(findstring vc12, $(VCVERSION)),/Qvc12)
 endif
 ifeq ($(VCCOMPAT_FLAG),)
+        VCCOMPAT_FLAG := $(if $(findstring vc14, $(VCVERSION)),/Qvc14)
+endif
+ifeq ($(VCCOMPAT_FLAG),)
         $(error VC version not detected correctly: $(VCVERSION) )
 endif
 export VCCOMPAT_FLAG
@@ -158,7 +156,7 @@ endif
 #------------------------------------------------------------------------------
 # Setting tbbmalloc data.
 #------------------------------------------------------------------------------
-M_CPLUS_FLAGS = $(subst $(EH_FLAGS),/EHs-,$(CPLUS_FLAGS))
+M_CPLUS_FLAGS = $(CPLUS_FLAGS)
 #------------------------------------------------------------------------------
 # End of setting tbbmalloc data.
 #------------------------------------------------------------------------------
diff --git a/build/windows.inc b/build/windows.inc
index 3f81f1f..01c7e2f 100644
--- a/build/windows.inc
+++ b/build/windows.inc
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 export SHELL = cmd
 
@@ -61,7 +61,7 @@ ASMEXT = asm
 def_prefix = $(if $(findstring intel64,$(arch)),win64,win32)
 
 # Target Windows version. Do not increase beyond 0x0502 without prior discussion!
-# Used as the value for macro definition opiton in windows.cl.inc etc.
+# Used as the value for macro definition option in windows.cl.inc etc.
 # For tests, we need at least Windows XP SP2 for sake of enabling stack backtraces.
 _WIN32_WINNT=0x0502
 
@@ -107,3 +107,5 @@ MAKE_VERSIONS = cmd /C cscript /nologo /E:jscript $(subst \,/,$(tbb_root))/build
 MAKE_TBBVARS  = cmd /C "$(subst /,\,$(tbb_root))\build\generate_tbbvars.bat"
 
 TEST_LAUNCHER = $(subst /,\,$(tbb_root))\build\test_launcher.bat $(largs)
+
+OPENCL.LIB = OpenCL.$(LIBEXT)
diff --git a/build/xbox360.cl.inc b/build/xbox360.cl.inc
deleted file mode 100644
index 8cd0bc1..0000000
--- a/build/xbox360.cl.inc
+++ /dev/null
@@ -1,85 +0,0 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-#
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-#
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
-
-#------------------------------------------------------------------------------
-# Define compiler-specific variables.
-#------------------------------------------------------------------------------
-
-
-#------------------------------------------------------------------------------
-# Setting compiler flags.
-#------------------------------------------------------------------------------
-CPLUS = cl /nologo
-LINK_FLAGS = /link /nologo
-LIB_LINK_FLAGS=/link /nologo /DLL /MAP /DEBUG
-MS_CRT_KEY = /MT$(if $(findstring debug,$(cfg)),d)
-EH_FLAGS = /EHsc /GR
-               
-ifeq ($(cfg), release)
-        CPLUS_FLAGS = $(MS_CRT_KEY) /O2 /Zi $(EH_FLAGS) /Zc:forScope /D_XBOX /DTBB_NO_LEGACY=1
-        ASM_FLAGS =
-endif
-ifeq ($(cfg), debug)
-        CPLUS_FLAGS = $(MS_CRT_KEY) /Od /Ob0 /Zi $(EH_FLAGS) /Zc:forScope \
-                      /DTBB_USE_DEBUG /D_XBOX /DTBB_NO_LEGACY=1
-        ASM_FLAGS = /DUSE_FRAME_POINTER
-endif
-
-
-COMPILE_ONLY = /c
-PREPROC_ONLY = /TP /EP
-INCLUDE_KEY = /I
-DEFINE_KEY = /D
-OUTPUT_KEY = /Fe
-OUTPUTOBJ_KEY = /Fo
-WARNING_AS_ERROR_KEY = /WX
-WARNING_KEY = /W3
-DYLIB_KEY = /DLL
-EXPORT_KEY = /DEF:
-
-ifeq (em64t,$(arch))
-        CPLUS_FLAGS += /GS-
-endif
-
-CPLUS_FLAGS += /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=$(_WIN32_WINNT)
-C_FLAGS = $(CPLUS_FLAGS) /TC
-#------------------------------------------------------------------------------
-# End of setting compiler flags.
-#------------------------------------------------------------------------------
-
-
-#------------------------------------------------------------------------------
-# Setting assembler data.
-#------------------------------------------------------------------------------
-# nothing for XBOX360
-#------------------------------------------------------------------------------
-# End of setting assembler data.
-#------------------------------------------------------------------------------
-
-
-#------------------------------------------------------------------------------
-# Setting tbbmalloc data.
-#------------------------------------------------------------------------------
-M_CPLUS_FLAGS = $(subst $(EH_FLAGS),/EHs-,$(CPLUS_FLAGS))
-#------------------------------------------------------------------------------
-# End of setting tbbmalloc data.
-#------------------------------------------------------------------------------
-
-#------------------------------------------------------------------------------
-# End of define compiler-specific variables.
-#------------------------------------------------------------------------------
diff --git a/build/xbox360.inc b/build/xbox360.inc
deleted file mode 100644
index f3573d6..0000000
--- a/build/xbox360.inc
+++ /dev/null
@@ -1,72 +0,0 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-#
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-#
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
-
-ifdef tbb_build_dir
-  test_dir:=$(tbb_build_dir)
-else
-  test_dir:=.
-endif
-
-# TODO give an error if archs doesn't match
-ifndef arch
-  export arch:=xbox360
-endif
-
-ifndef runtime
-  export runtime:=xdk
-endif
-
-native_compiler := cl
-export compiler ?= cl
-debugger ?= devenv /debugexe
-
-CMD=cmd /C
-CWD=$(shell cmd /C echo %CD%)
-RM=cmd /C del /Q /F
-RD=cmd /C rmdir
-MD=cmd /c mkdir
-SLASH=\\
-NUL = nul
-
-OBJ = obj
-DLL = dll
-LIBEXT = lib
-
-def_prefix = $(arch)
-
-# Target Windows version. Do not increase beyond 0x0500 without prior discussion!
-# Used as the value for macro definition opiton in compiler specific inc files.
-_WIN32_WINNT=0x0400
-
-TBB.LST =
-TBB.DEF = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.def
-TBB.DLL = tbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL)
-TBB.LIB = tbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(LIBEXT)
-TBB.RES =
-#On Windows we specify appropriate tbb library using #pragma comment
-LINK_TBB.LIB =
-
-MALLOC.DEF = $(MALLOC_ROOT)/$(def_prefix)-tbbmalloc-export.def
-MALLOC.DLL = tbbmalloc$(DEBUG_SUFFIX).$(DLL)
-MALLOC.LIB = tbbmalloc$(DEBUG_SUFFIX).$(LIBEXT)
-#On Windows we specify appropriate tbbmalloc library using #pragma comment
-LINK_MALLOC.LIB =
-MALLOC.RES =
-
-MAKE_VERSIONS = cmd /C cscript /nologo /E:jscript $(subst \,/,$(tbb_root))/build/version_info_windows.js $(compiler) $(arch) $(subst \,/,"$(VERSION_FLAGS)") > version_string.ver
-MAKE_TBBVARS  = cmd /C "$(subst /,\,$(tbb_root))\build\generate_tbbvars.bat"
diff --git a/cmake/README.rst b/cmake/README.rst
new file mode 100644
index 0000000..0cb001a
--- /dev/null
+++ b/cmake/README.rst
@@ -0,0 +1,285 @@
+.. contents::
+
+Introduction
+------------
+Many developers use CMake to manage their development projects, so the Intel(R) Threading Building Blocks (Intel(R) TBB)
+team created the set of CMake modules to simplify integration of the Intel TBB library into a CMake project.
+The modules are available starting from Intel TBB 2017 U7 in `<tbb_root>/cmake <https://github.com/01org/tbb/tree/tbb_2017/cmake>`_.
+
+About Intel TBB
+^^^^^^^^^^^^^^^
+Intel TBB is a library that supports scalable parallel programming using standard ISO C++ code. It does not require special languages or compilers. It is designed to promote scalable data parallel programming. Additionally, it fully supports nested parallelism, so you can build larger parallel components from smaller parallel components. To use the library, you specify tasks, not threads, and let the library map tasks onto threads in an efficient manner.
+
+Many of the library interfaces employ generic programming, in which interfaces are defined by requirements on types and not specific types. The C++ Standard Template Library (STL) is an example of generic programming. Generic programming enables Intel TBB to be flexible yet efficient. The generic interfaces enable you to customize components to your specific needs.
+
+The net result is that Intel TBB enables you to specify parallelism far more conveniently than using raw threads, and at the same time can improve performance.
+
+References
+^^^^^^^^^^
+* `Official Intel TBB open source site <https://www.threadingbuildingblocks.org/>`_
+* `Official GitHub repository <https://github.com/01org/tbb>`_
+
+Engineering team contacts
+^^^^^^^^^^^^^^^^^^^^^^^^^
+The Intel TBB team is very interested in convenient integration of the Intel TBB library into customer projects. These CMake modules were created to provide such a possibility for CMake projects using a simple but powerful interface. We hope you will try these modules and we are looking forward to receiving your feedback!
+
+E-mail us: `inteltbbdevelopers at intel.com <mailto:inteltbbdevelopers at intel.com>`_.
+
+Visit our `forum <https://software.intel.com/en-us/forums/intel-threading-building-blocks/>`_.
+
+Release Notes
+-------------
+* Minimum supported CMake version: ``3.0.0``.
+* Intel TBB versioning via `find_package <https://cmake.org/cmake/help/latest/command/find_package.html>`_ has restricted functionality: compatibility of update numbers (as well as interface versions) is not checked. Supported versioning: ``find_package(TBB <major>.<minor> ...)``. Intel TBB interface version can be obtained in the customer project via the ``TBB_INTERFACE_VERSION`` variable.
+
+Use cases of Intel TBB integration into CMake-aware projects
+------------------------------------------------------------
+There are two types of Intel TBB packages:
+ * Binary packages with pre-built binaries for Windows* OS, Linux* OS and macOS*. They are available on the releases page of the Github repository: https://github.com/01org/tbb/releases. The main purpose of the binary package integration is the ability to build Intel TBB header files and binaries into your CMake-aware project.
+ * A source package is also available to download from the release page via the “Source code” link. In addition, it can be cloned from the repository by ``git clone https://github.com/01org/tbb.git``. The main purpose of the source package integration is to allow you to do a custom build of the Intel TBB library from the source files and then build that into your CMake-aware project.
+
+There are four types of CMake modules that can be used to integrate Intel TBB: `TBBConfig`, `TBBGet`, `TBBMakeConfig` and `TBBBuild`. See `Technical documentation for CMake modules`_ section for additional details.
+
+Binary package integration
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The following use case is valid for packages starting from Intel TBB 2017 U7:
+
+* Download package manually and make integration.
+
+ Pre-condition: Location of TBBConfig.cmake is available via ``TBB_DIR`` or ``CMAKE_PREFIX_PATH`` contains path to Intel TBB root.
+
+ CMake code for integration:
+
+  .. code:: cmake
+
+   find_package(TBB <options>)
+
+The following use case is valid for all Intel TBB 2017 packages.
+
+* Download package using TBBGet_ and make integration.
+
+ Pre-condition: Intel TBB CMake modules are available via <path-to-tbb-cmake-modules>.
+
+ CMake code for integration:
+  .. code:: cmake
+
+   include(<path-to-tbb-cmake-modules>/TBBGet.cmake)
+   tbb_get(TBB_ROOT tbb_root CONFIG_DIR TBB_DIR)
+   find_package(TBB <options>)
+
+Source package integration
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+* Build Intel TBB from existing source files using TBBBuild_ and make integration.
+
+ Pre-condition: Intel TBB source code is available via <tbb_root> and Intel TBB CMake modules are available via <path-to-tbb-cmake-modules>.
+
+ CMake code for integration:
+  .. code:: cmake
+
+   include(<path-to-tbb-cmake-modules>/TBBBuild.cmake)
+   tbb_build(TBB_ROOT <tbb_root> CONFIG_DIR TBB_DIR)
+   find_package(TBB <options>)
+
+* Download Intel TBB source files using TBBGet_, build it using TBBBuild_ and make integration.
+
+ Pre-condition: Intel TBB CMake modules are available via <path-to-tbb-cmake-modules>.
+
+ CMake code for integration:
+  .. code:: cmake
+
+   include(<path-to-tbb-cmake-modules>/TBBGet.cmake)
+   include(<path-to-tbb-cmake-modules>/TBBBuild.cmake)
+   tbb_get(TBB_ROOT tbb_root SOURCE_CODE)
+   tbb_build(TBB_ROOT ${tbb_root} CONFIG_DIR TBB_DIR)
+   find_package(TBB <options>)
+
+Tutorials: Intel TBB integration using CMake
+--------------------------------------------
+Binary Intel TBB integration to the sub_string_finder sample (Windows* OS)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+In this example, we will integrate binary Intel TBB package into the sub_string_finder sample on Windows* OS (Microsoft* Visual Studio).
+This example is also applicable for other platforms with slight changes.
+Place holders <version> and <date> should be replaced with the actual values for the Intel TBB package being used. The example is written for `CMake 3.7.1`.
+
+Precondition:
+  * `Microsoft* Visual Studio 11` or higher.
+  * `CMake 3.0.0` or higher.
+
+#. Download the latest binary package for Windows from `this page <https://github.com/01org/tbb/releases/latest>`_ and unpack it to the directory ``C:\demo_tbb_cmake``.
+#. In the directory ``C:\demo_tbb_cmake\tbb<version>_<date>oss\examples\GettingStarted\sub_string_finder`` create ``CMakeLists.txt`` file with the following content:
+    .. code:: cmake
+
+        cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR)
+
+        project(sub_string_finder CXX)
+        add_executable(sub_string_finder sub_string_finder.cpp)
+
+        # find_package will search for available TBBConfig using variables CMAKE_PREFIX_PATH and TBB_DIR.
+        find_package(TBB REQUIRED tbb)
+
+        # Link Intel TBB imported targets to the executable;
+        # "TBB::tbb" can be used instead of "${TBB_IMPORTED_TARGETS}".
+        target_link_libraries(sub_string_finder ${TBB_IMPORTED_TARGETS})
+#. Run CMake GUI and:
+    * Fill the following fields (you can use the buttons ``Browse Source...`` and ``Browse Build...`` accordingly)
+
+     * Where is the source code: ``C:/demo_tbb_cmake/tbb<version>_<date>oss/examples/GettingStarted/sub_string_finder``
+     * Where to build the binaries: ``C:/demo_tbb_cmake/tbb<version>_<date>oss/examples/GettingStarted/sub_string_finder/build``
+
+    * Add new cache entry using button ``Add Entry`` to let CMake know where to search for TBBConfig:
+
+     * Name: ``CMAKE_PREFIX_PATH``
+     * Type: ``PATH``
+     * Value: ``C:/demo_tbb_cmake/tbb<version>_<date>oss``
+
+    * Push the button ``Generate`` and choose a proper generator for your Microsoft* Visual Studio version.
+#. Now you can open the generated solution ``C:/demo_tbb_cmake/tbb<version>_<date>oss/examples/GettingStarted/sub_string_finder/build/sub_string_finder.sln`` in your Microsoft* Visual Studio and build it.
+
+Source code integration of Intel TBB to the sub_string_finder sample (Linux* OS)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+In this example, we will build Intel TBB from source code with enabled Community Preview Features and link the sub_string_finder sample with the built library.
+This example is also applicable for other platforms with slight changes.
+
+Precondition:
+  * `CMake 3.0.0` or higher.
+  * `Git` (to clone the Intel TBB repository from GitHub)
+
+#. Create the directory ``~/demo_tbb_cmake``, go to the created directory and clone the Intel TBB repository there:
+    ``mkdir ~/demo_tbb_cmake ; cd ~/demo_tbb_cmake ; git clone https://github.com/01org/tbb.git``
+#. In the directory ``~/demo_tbb_cmake/tbb/examples/GettingStarted/sub_string_finder`` create ``CMakeLists.txt`` file with following content:
+    .. code:: cmake
+
+     cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR)
+
+     project(sub_string_finder CXX)
+     add_executable(sub_string_finder sub_string_finder.cpp)
+
+     include(${TBB_ROOT}/cmake/TBBBuild.cmake)
+
+     # Build Intel TBB with enabled Community Preview Features (CPF).
+     tbb_build(TBB_ROOT ${TBB_ROOT} CONFIG_DIR TBB_DIR MAKE_ARGS tbb_cpf=1)
+
+     find_package(TBB REQUIRED tbb_preview)
+
+     # Link Intel TBB imported targets to the executable;
+     # "TBB::tbb_preview" can be used instead of "${TBB_IMPORTED_TARGETS}".
+     target_link_libraries(sub_string_finder ${TBB_IMPORTED_TARGETS})
+#. Create a build directory for the sub_string_finder sample to perform build out of source, go to the created directory
+    ``mkdir ~/demo_tbb_cmake/tbb/examples/GettingStarted/sub_string_finder/build ; cd ~/demo_tbb_cmake/tbb/examples/GettingStarted/sub_string_finder/build``
+#. Run CMake to prepare Makefile for the sub_string_finder sample and provide Intel TBB location (root) where to perform build:
+    ``cmake -DTBB_ROOT=${HOME}/demo_tbb_cmake/tbb ..``
+#. Make an executable and run it:
+    ``make ; ./sub_string_finder``
+
+Technical documentation for CMake modules
+-----------------------------------------
+TBBConfig
+^^^^^^^^^
+
+Configuration module for ``Intel(R) Threading Building Blocks (Intel(R) TBB)`` library.
+
+How to use this module in your CMake project:
+ #. Add location of Intel TBB (root) to `CMAKE_PREFIX_PATH <https://cmake.org/cmake/help/latest/variable/CMAKE_PREFIX_PATH.html>`_
+    or specify location of TBBConfig.cmake in ``TBB_DIR``.
+ #. Use `find_package <https://cmake.org/cmake/help/latest/command/find_package.html>`_ to configure Intel TBB.
+ #. Use provided variables and/or imported targets (described below) to work with Intel TBB.
+
+Intel TBB components can be passed to `find_package <https://cmake.org/cmake/help/latest/command/find_package.html>`_
+after keyword ``COMPONENTS`` or ``REQUIRED``.
+Use basic names of components (``tbb``, ``tbbmalloc``, ``tbb_preview``, etc.).
+
+If components are not specified then default are used: ``tbb``, ``tbbmalloc`` and ``tbbmalloc_proxy``.
+
+If ``tbbmalloc_proxy`` is requested, ``tbbmalloc`` component will also be added and set as dependency for ``tbbmalloc_proxy``.
+
+TBBConfig creates `imported targets <https://cmake.org/cmake/help/latest/manual/cmake-buildsystem.7.html#imported-targets>`_ as
+shared libraries using the following format: ``TBB::<component>`` (for example, ``TBB::tbb``, ``TBB::tbbmalloc``).
+
+Variables set during Intel TBB configuration:
+
+=========================  ================================================
+         Variable                            Description
+=========================  ================================================
+``TBB_FOUND``              Intel TBB library is found
+``TBB_<component>_FOUND``  specific Intel TBB component is found
+``TBB_IMPORTED_TARGETS``   all created Intel TBB imported targets
+``TBB_VERSION``            Intel TBB version (format: ``<major>.<minor>``)
+``TBB_INTERFACE_VERSION``  Intel TBB interface version
+=========================  ================================================
+
+TBBGet
+^^^^^^
+
+Module for getting ``Intel(R) Threading Building Blocks (Intel(R) TBB)`` library from `GitHub <https://github.com/01org/tbb>`_.
+
+Provides the following functions:
+ ``tbb_get(TBB_ROOT <variable> [RELEASE_TAG <release_tag>|LATEST] [SAVE_TO <path>] [SYSTEM_NAME Linux|Windows|Darwin] [CONFIG_DIR <variable> | SOURCE_CODE])``
+  downloads Intel TBB from GitHub and creates TBBConfig for the downloaded binary package if there is no TBBConfig.
+
+  ====================================  ====================================
+                     Parameter                       Description
+  ====================================  ====================================
+  ``TBB_ROOT <variable>``               a variable to save Intel TBB root in, ``<variable>-NOTFOUND`` will be provided in case ``tbb_get`` is unsuccessful
+  ``RELEASE_TAG <release_tag>|LATEST``  Intel TBB release tag to be downloaded (for example, ``2017_U6``), ``LATEST`` is used by default
+  ``SAVE_TO <path>``                    path to location at which to unpack downloaded Intel TBB, ``${CMAKE_CURRENT_BINARY_DIR}/tbb_downloaded`` is used by default
+  ``SYSTEM_NAME Linux|Windows|Darwin``  operating system name to download a binary package for,
+                                        value of `CMAKE_SYSTEM_NAME <https://cmake.org/cmake/help/latest/variable/CMAKE_SYSTEM_NAME.html>`_ is used by default
+  ``CONFIG_DIR <variable>``             a variable to save location of TBBConfig.cmake and TBBConfigVersion.cmake. Ignored if ``SOURCE_CODE`` specified
+  ``SOURCE_CODE``                       flag to get Intel TBB source code (instead of binary package)
+  ====================================  ====================================
+
+TBBMakeConfig
+^^^^^^^^^^^^^
+
+Module for making TBBConfig in ``Intel(R) Threading Building Blocks (Intel(R) TBB)`` binary package.
+
+This module is to be used for packages that do not have TBBConfig.
+
+Provides the following functions:
+ ``tbb_make_config(TBB_ROOT <path> CONFIG_DIR <variable> [SYSTEM_NAME Linux|Windows|Darwin])``
+  creates CMake configuration files (TBBConfig.cmake and TBBConfigVersion.cmake) for Intel TBB binary package.
+
+  ====================================  ====================================
+                     Parameter                       Description
+  ====================================  ====================================
+  ``TBB_ROOT <variable>``               path to Intel TBB root
+  ``CONFIG_DIR <variable>``             a variable to store location of the created configuration files
+  ``SYSTEM_NAME Linux|Windows|Darwin``  operating system name of the binary Intel TBB package,
+                                        value of `CMAKE_SYSTEM_NAME <https://cmake.org/cmake/help/latest/variable/CMAKE_SYSTEM_NAME.html>`_ is used by default
+  ====================================  ====================================
+
+TBBBuild
+^^^^^^^^
+
+Module for building ``Intel(R) Threading Building Blocks (Intel(R) TBB)`` library from the source code.
+
+Provides the following functions:
+ ``tbb_build(TBB_ROOT <tbb_root> CONFIG_DIR <variable> [MAKE_ARGS <custom_make_arguments>])``
+  builds Intel TBB from source code using the ``Makefile``, creates and provides the location of the CMake configuration files (TBBConfig.cmake and TBBConfigVersion.cmake) .
+
+  =====================================  ====================================
+                Parameter                             Description
+  =====================================  ====================================
+  ``TBB_ROOT <variable>``                path to Intel TBB root
+  ``CONFIG_DIR <variable>``              a variable to store location of the created configuration files,
+                                         ``<variable>-NOTFOUND`` will be provided in case ``tbb_build`` is unsuccessful
+  ``MAKE_ARGS <custom_make_arguments>``  custom arguments to be passed to ``make`` tool.
+
+                                         The following arguments are always passed with automatically detected values to
+                                         ``make`` tool if they are not redefined in ``<custom_make_arguments>``:
+
+                                           - ``compiler=<compiler>``
+                                           - ``tbb_build_dir=<tbb_build_dir>``
+                                           - ``tbb_build_prefix=<tbb_build_prefix>``
+                                           - ``-j<n>``
+  =====================================  ====================================
+
+
+------------
+
+Intel and the Intel logo are trademarks of Intel Corporation or its subsidiaries in the U.S. and/or other countries.
+
+``*`` Other names and brands may be claimed as the property of others.
diff --git a/cmake/TBBBuild.cmake b/cmake/TBBBuild.cmake
new file mode 100644
index 0000000..bcf04c8
--- /dev/null
+++ b/cmake/TBBBuild.cmake
@@ -0,0 +1,197 @@
+# Copyright (c) 2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+#
+# Usage:
+#  include(TBBBuild.cmake)
+#  tbb_build(ROOT <tbb_root> MAKE_ARGS <arg1> [... <argN>])
+#  find_package(TBB <options>)
+#
+
+include(CMakeParseArguments)
+
+# Save the location of Intel TBB CMake modules here, as it will not be possible to do inside functions,
+# see for details: https://cmake.org/cmake/help/latest/variable/CMAKE_CURRENT_LIST_DIR.html
+set(_tbb_cmake_module_path ${CMAKE_CURRENT_LIST_DIR})
+
+##
+# Builds Intel TBB.
+#
+# Parameters:
+#  TBB_ROOT   <directory> - path to Intel TBB root directory (with sources);
+#  MAKE_ARGS  <list>      - user-defined arguments to be passed to make-tool;
+#  CONFIG_DIR <variable>  - store location of the created TBBConfig if the build was ok, store <variable>-NOTFOUND otherwise.
+#
+function(tbb_build)
+    # NOTE: internal function are used to hide them from user.
+
+    ##
+    # Provides arguments for make-command to build Intel TBB.
+    #
+    # Following arguments are provided automatically if they are not defined by user:
+    #  compiler=<value>
+    #  tbb_build_dir=<value>
+    #  tbb_build_prefix=<value>
+    #  -j<n>
+    #
+    # Parameters:
+    #  USER_DEFINED_ARGS <list> - list of user-defined arguments;
+    #  RESULT <variable> - resulting list of 'make' arguments.
+    #
+    function(tbb_get_make_args)
+        set(oneValueArgs RESULT)
+        set(multiValueArgs USER_DEFINED_ARGS)
+        cmake_parse_arguments(tbb_GMA "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+        set(result ${tbb_GMA_USER_DEFINED_ARGS})
+
+        if (NOT tbb_GMA_USER_DEFINED_ARGS MATCHES "compiler=")
+            # TODO: add other supported compilers.
+            if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
+                set(compiler gcc)
+            elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
+                set(compiler icc)
+                if (CMAKE_SYSTEM_NAME MATCHES "Windows")
+                    set(compiler icl)
+                endif()
+            elseif (MSVC)
+                set(compiler cl)
+            elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+                set(compiler clang)
+            endif()
+
+            set(result "compiler=${compiler}" ${result})
+        endif()
+
+        if (NOT tbb_GMA_USER_DEFINED_ARGS MATCHES "tbb_build_dir=")
+            set(result "tbb_build_dir=${CMAKE_CURRENT_BINARY_DIR}/tbb_cmake_build" ${result})
+        endif()
+
+        if (NOT tbb_GMA_USER_DEFINED_ARGS MATCHES "tbb_build_prefix=")
+            set(result "tbb_build_prefix=tbb_cmake_build_subdir" ${result})
+        endif()
+
+        if (NOT tbb_GMA_USER_DEFINED_ARGS MATCHES "(;|^) *\\-j[0-9]* *(;|$)")
+            include(ProcessorCount)
+            ProcessorCount(num_of_cores)
+            if (NOT num_of_cores EQUAL 0)
+                set(result "-j${num_of_cores}" ${result})
+            endif()
+        endif()
+
+        if (CMAKE_SYSTEM_NAME MATCHES "Android")
+            set(result target=android ${result})
+        endif()
+
+        set(${tbb_GMA_RESULT} ${result} PARENT_SCOPE)
+    endfunction()
+
+    ##
+    # Provides release and debug directories basing on 'make' arguments.
+    #
+    # Following 'make' arguments are parsed: tbb_build_dir, tbb_build_prefix
+    #
+    # Parameters:
+    #  MAKE_ARGS   <list>     - 'make' arguments (tbb_build_dir and tbb_build_prefix are required)
+    #  RELEASE_DIR <variable> - store normalized (CMake) path to release directory
+    #  DEBUG_DIR   <variable> - store normalized (CMake) path to debug directory
+    #
+    function(tbb_get_build_paths_from_make_args)
+        set(oneValueArgs RELEASE_DIR DEBUG_DIR)
+        set(multiValueArgs MAKE_ARGS)
+        cmake_parse_arguments(tbb_GBPFMA "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+        foreach(arg ${tbb_GBPFMA_MAKE_ARGS})
+            if (arg MATCHES "tbb_build_dir=")
+                string(REPLACE "tbb_build_dir=" "" tbb_build_dir "${arg}")
+            elseif (arg MATCHES "tbb_build_prefix=")
+                string(REPLACE "tbb_build_prefix=" "" tbb_build_prefix "${arg}")
+            endif()
+        endforeach()
+
+        set(tbb_release_dir "${tbb_build_dir}/${tbb_build_prefix}_release")
+        set(tbb_debug_dir "${tbb_build_dir}/${tbb_build_prefix}_debug")
+
+        file(TO_CMAKE_PATH "${tbb_release_dir}" tbb_release_dir)
+        file(TO_CMAKE_PATH "${tbb_debug_dir}" tbb_debug_dir)
+
+        set(${tbb_GBPFMA_RELEASE_DIR} ${tbb_release_dir} PARENT_SCOPE)
+        set(${tbb_GBPFMA_DEBUG_DIR} ${tbb_debug_dir} PARENT_SCOPE)
+    endfunction()
+
+    # -------------------- #
+    # Function entry point #
+    # -------------------- #
+    set(oneValueArgs TBB_ROOT CONFIG_DIR)
+    set(multiValueArgs MAKE_ARGS)
+    cmake_parse_arguments(tbb_build "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+    if (NOT EXISTS "${tbb_build_TBB_ROOT}/Makefile" OR NOT EXISTS "${tbb_build_TBB_ROOT}/src")
+        message(STATUS "Intel TBB can not be built: Makefile or src directory was not found in ${tbb_build_TBB_ROOT}")
+        set(${tbb_build_CONFIG_DIR} ${tbb_build_CONFIG_DIR}-NOTFOUND PARENT_SCOPE)
+        return()
+    endif()
+
+    set(make_tool_name make)
+    if (CMAKE_SYSTEM_NAME MATCHES "Windows")
+        set(make_tool_name gmake)
+    elseif (CMAKE_SYSTEM_NAME MATCHES "Android")
+        set(make_tool_name ndk-build)
+    endif()
+
+    find_program(TBB_MAKE_TOOL ${make_tool_name} DOC "Make-tool to build Intel TBB.")
+    mark_as_advanced(TBB_MAKE_TOOL)
+
+    if (NOT TBB_MAKE_TOOL)
+        message(STATUS "Intel TBB can not be built: required make-tool (${make_tool_name}) was not found")
+        set(${tbb_build_CONFIG_DIR} ${tbb_build_CONFIG_DIR}-NOTFOUND PARENT_SCOPE)
+        return()
+    endif()
+
+    tbb_get_make_args(USER_DEFINED_ARGS ${tbb_build_MAKE_ARGS} RESULT tbb_make_args)
+
+    set(tbb_build_cmd ${TBB_MAKE_TOOL} ${tbb_make_args})
+
+    string(REPLACE ";" " " tbb_build_cmd_str "${tbb_build_cmd}")
+    message(STATUS "Building Intel TBB: ${tbb_build_cmd_str}")
+    execute_process(COMMAND ${tbb_build_cmd}
+                    WORKING_DIRECTORY ${tbb_build_TBB_ROOT}
+                    RESULT_VARIABLE tbb_build_result
+                    ERROR_VARIABLE tbb_build_error_output
+                    OUTPUT_QUIET)
+
+    if (NOT tbb_build_result EQUAL 0)
+        message(STATUS "Building is unsuccessful (${tbb_build_result}): ${tbb_build_error_output}")
+        set(${tbb_build_CONFIG_DIR} ${tbb_build_CONFIG_DIR}-NOTFOUND PARENT_SCOPE)
+        return()
+    endif()
+
+    tbb_get_build_paths_from_make_args(MAKE_ARGS ${tbb_make_args}
+                                       RELEASE_DIR tbb_release_dir
+                                       DEBUG_DIR tbb_debug_dir)
+
+    include(${_tbb_cmake_module_path}/TBBMakeConfig.cmake)
+    tbb_make_config(TBB_ROOT ${tbb_build_TBB_ROOT}
+                    SYSTEM_NAME ${CMAKE_SYSTEM_NAME}
+                    CONFIG_DIR tbb_config_dir
+                    CONFIG_FOR_SOURCE
+                    TBB_RELEASE_DIR ${tbb_release_dir}
+                    TBB_DEBUG_DIR ${tbb_debug_dir})
+
+    set(${tbb_build_CONFIG_DIR} ${tbb_config_dir} PARENT_SCOPE)
+endfunction()
diff --git a/cmake/TBBGet.cmake b/cmake/TBBGet.cmake
new file mode 100644
index 0000000..4f595d2
--- /dev/null
+++ b/cmake/TBBGet.cmake
@@ -0,0 +1,298 @@
+# Copyright (c) 2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+include(CMakeParseArguments)
+
+# Save the location of Intel TBB CMake modules here, as it will not be possible to do inside functions,
+# see for details: https://cmake.org/cmake/help/latest/variable/CMAKE_CURRENT_LIST_DIR.html
+set(_tbb_cmake_module_path ${CMAKE_CURRENT_LIST_DIR})
+
+##
+# Downloads file.
+#
+# Parameters:
+#  URL     <url>      - URL to download data from;
+#  SAVE_AS <filename> - filename there to save downloaded data;
+#  INFO    <string>   - text description of content to be downloaded;
+#                       will be printed as message in format is "Downloading <INFO>: <URL>;
+#  FORCE              - option to delete local file from SAVE_AS if it exists;
+#
+function(_tbb_download_file)
+    set(options FORCE)
+    set(oneValueArgs URL RELEASE SAVE_AS INFO)
+    cmake_parse_arguments(tbb_df "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+    if (tbb_df_FORCE AND EXISTS "${tbb_df_SAVE_AS}")
+        file(REMOVE ${tbb_df_SAVE_AS})
+    endif()
+
+    if (NOT EXISTS "${tbb_df_SAVE_AS}")
+        set(_show_progress)
+        if (TBB_DOWNLOADING_PROGRESS)
+            set(_show_progress SHOW_PROGRESS)
+        endif()
+
+        message(STATUS "Downloading ${tbb_df_INFO}: ${tbb_df_URL}")
+        file(DOWNLOAD ${tbb_df_URL} ${tbb_df_SAVE_AS} ${_show_progress} STATUS download_status)
+
+        list(GET download_status 0 download_status_num)
+        if (NOT download_status_num EQUAL 0)
+            message(STATUS "Unsuccessful downloading: ${download_status}")
+            file(REMOVE ${tbb_df_SAVE_AS})
+            return()
+        endif()
+    else()
+        message(STATUS "Needed file was found locally ${tbb_df_SAVE_AS}. Remove it if you still want to download a new one")
+    endif()
+endfunction()
+
+##
+# Checks if specified Intel TBB release is available on GitHub.
+#
+# tbb_check_git_release(<release> <result>)
+# Parameters:
+#  <release_tag> - release to be checked;
+#  <result>  - store result (TRUE/FALSE).
+#
+function(_tbb_check_git_release_tag _tbb_release_tag _tbb_release_tag_avail)
+    if (_tbb_release_tag STREQUAL LATEST)
+        set(${_tbb_release_tag_avail} TRUE PARENT_SCOPE)
+        return()
+    endif()
+
+    set(tbb_releases_file "${CMAKE_CURRENT_BINARY_DIR}/tbb_releases.json")
+
+    _tbb_download_file(URL     "${tbb_github_api}/releases"
+                       SAVE_AS ${tbb_releases_file}
+                       INFO    "information from GitHub about Intel TBB releases"
+                       FORCE)
+
+    if (NOT EXISTS "${tbb_releases_file}")
+        set(${_tbb_release_tag_avail} FALSE PARENT_SCOPE)
+        return()
+    endif()
+
+    file(READ ${tbb_releases_file} tbb_releases)
+
+    string(REPLACE "\"" "" tbb_releases ${tbb_releases})
+    string(REGEX MATCHALL "tag_name: *([A-Za-z0-9_\\.]+)" tbb_releases ${tbb_releases})
+
+    set(_release_available FALSE)
+    foreach(tbb_rel ${tbb_releases})
+        string(REGEX REPLACE "tag_name: *" "" tbb_rel_cut ${tbb_rel})
+        list(REMOVE_ITEM tbb_releases ${tbb_rel})
+        list(APPEND tbb_releases ${tbb_rel_cut})
+        if (_tbb_release_tag STREQUAL tbb_rel_cut)
+            set(_release_available TRUE)
+            break()
+        endif()
+    endforeach()
+
+    if (NOT _release_available)
+        string(REPLACE ";" ", " tbb_releases_str "${tbb_releases}")
+        message(STATUS "Requested release tag ${_tbb_release_tag} is not available. Available Intel TBB release tags: ${tbb_releases_str}")
+    endif()
+
+    set(${_tbb_release_tag_avail} ${_release_available} PARENT_SCOPE)
+endfunction()
+
+##
+# Compares two Intel TBB releases and provides result
+# TRUE if the first release is less than the second, FALSE otherwise.
+#
+# tbb_is_release_less(<rel1> <rel2> <result>)
+#
+function(_tbb_is_release_less rel1 rel2 result)
+    # Convert release to numeric representation to compare it using "if" with VERSION_LESS.
+    string(REGEX REPLACE "[A-Za-z]" "" rel1 "${rel1}")
+    string(REPLACE "_" "." rel1 "${rel1}")
+    string(REGEX REPLACE "[A-Za-z]" "" rel2 "${rel2}")
+    string(REPLACE "_" "." rel2 "${rel2}")
+
+    if (${rel1} VERSION_LESS ${rel2})
+        set(${result} TRUE PARENT_SCOPE)
+        return()
+    endif()
+
+    set(${result} FALSE PARENT_SCOPE)
+endfunction()
+
+##
+# Finds exact URL to download Intel TBB basing on provided parameters.
+#
+# Usage:
+#  _tbb_get_url(URL <var_to_save_url> RELEASE_TAG <release_tag|LATEST> OS <os> [SOURCE_CODE])
+#
+function(_tbb_get_url)
+    set(oneValueArgs URL RELEASE_TAG OS)
+    set(options SOURCE_CODE)
+    cmake_parse_arguments(tbb_get_url "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+    set(tbb_github_api "https://api.github.com/repos/01org/tbb")
+
+    _tbb_check_git_release_tag(${tbb_get_url_RELEASE_TAG} tbb_release_available)
+    if (NOT tbb_release_available)
+        set(${tbb_download_FULL_PATH} ${tbb_download_FULL_PATH}-NOTFOUND PARENT_SCOPE)
+        return()
+    endif()
+
+    if (tbb_get_url_RELEASE_TAG STREQUAL LATEST)
+        set(tbb_rel_info_api_url "${tbb_github_api}/releases/latest")
+    else()
+        set(tbb_rel_info_api_url "${tbb_github_api}/releases/tags/${tbb_get_url_RELEASE_TAG}")
+    endif()
+
+    set(tbb_release_info_file "${CMAKE_CURRENT_BINARY_DIR}/tbb_${tbb_get_url_RELEASE_TAG}_info.json")
+
+    _tbb_download_file(URL     ${tbb_rel_info_api_url}
+                       SAVE_AS ${tbb_release_info_file}
+                       INFO    "information from GitHub about packages for Intel TBB ${tbb_get_url_RELEASE_TAG}"
+                       FORCE)
+
+    if (NOT EXISTS "${tbb_release_info_file}")
+        set(${tbb_get_url_URL} ${tbb_get_url_URL}-NOTFOUND PARENT_SCOPE)
+        return()
+    endif()
+
+    file(STRINGS ${tbb_release_info_file} tbb_release_info)
+
+    if (tbb_get_url_SOURCE_CODE)
+        # Find name of the latest release to get link to source archive.
+        if (tbb_get_url_RELEASE_TAG STREQUAL LATEST)
+            string(REPLACE "\"" "" tbb_release_info ${tbb_release_info})
+            string(REGEX REPLACE ".*tag_name: *([A-Za-z0-9_\\.]+).*" "\\1" tbb_get_url_RELEASE_TAG "${tbb_release_info}")
+        endif()
+
+        set(${tbb_get_url_URL} "https://github.com/01org/tbb/archive/${tbb_get_url_RELEASE_TAG}.tar.gz" PARENT_SCOPE)
+    else()
+        if (tbb_get_url_OS MATCHES "Linux")
+            set(tbb_lib_archive_suffix lin.tgz)
+        elseif (tbb_get_url_OS MATCHES "Windows")
+            set(tbb_lib_archive_suffix win.zip)
+        elseif (tbb_get_url_OS MATCHES "Darwin")
+            set(tbb_lib_archive_suffix mac.tgz)
+
+            # Since 2017_U4 release archive for Apple has suffix "mac.tgz" instead of "osx.tgz".
+            if (NOT tbb_get_url_RELEASE_TAG STREQUAL "LATEST")
+                _tbb_is_release_less(${tbb_get_url_RELEASE_TAG} 2017_U4 release_less)
+                if (release_less)
+                    set(tbb_lib_archive_suffix osx.tgz)
+                endif()
+            endif()
+        elseif (tbb_get_url_OS MATCHES "Android")
+            set(tbb_lib_archive_suffix and.tgz)
+        else()
+            message(STATUS "Currently prebuilt Intel TBB is not available for your OS (${tbb_get_url_OS})")
+            set(${tbb_get_url_URL} ${tbb_get_url_URL}-NOTFOUND PARENT_SCOPE)
+            return()
+        endif()
+
+        string(REGEX REPLACE ".*(https.*oss_${tbb_lib_archive_suffix}).*" "\\1" tbb_bin_url "${tbb_release_info}")
+
+        set(${tbb_get_url_URL} ${tbb_bin_url} PARENT_SCOPE)
+    endif()
+endfunction()
+
+function(tbb_get)
+    set(oneValueArgs RELEASE_TAG SYSTEM_NAME SAVE_TO TBB_ROOT CONFIG_DIR)
+    set(options SOURCE_CODE)
+    cmake_parse_arguments(tbb_get "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+    set(tbb_os ${CMAKE_SYSTEM_NAME})
+    if (tbb_get_SYSTEM_NAME)
+        set(tbb_os ${tbb_get_SYSTEM_NAME})
+    endif()
+
+    set(tbb_release_tag LATEST)
+    if (tbb_get_RELEASE_TAG)
+        set(tbb_release_tag ${tbb_get_RELEASE_TAG})
+    endif()
+
+    set(tbb_save_to ${CMAKE_CURRENT_BINARY_DIR}/tbb_downloaded)
+    if (tbb_get_SAVE_TO)
+        set(tbb_save_to ${tbb_get_SAVE_TO})
+    endif()
+
+    if (tbb_get_SOURCE_CODE)
+        _tbb_get_url(URL tbb_url RELEASE_TAG ${tbb_release_tag} OS ${tbb_os} SOURCE_CODE)
+    else()
+        _tbb_get_url(URL tbb_url RELEASE_TAG ${tbb_release_tag} OS ${tbb_os})
+    endif()
+
+    if (NOT tbb_url)
+        message(STATUS "URL to download Intel TBB has not been found")
+        set(${tbb_get_TBB_ROOT} ${tbb_get_TBB_ROOT}-NOTFOUND PARENT_SCOPE)
+        return()
+    endif()
+
+    get_filename_component(filename ${tbb_url} NAME)
+    set(local_file "${CMAKE_CURRENT_BINARY_DIR}/${filename}")
+
+    _tbb_download_file(URL     ${tbb_url}
+                       SAVE_AS ${local_file}
+                       INFO    "Intel TBB library")
+
+    if (NOT EXISTS "${local_file}")
+        set(${tbb_get_TBB_ROOT} ${tbb_get_TBB_ROOT}-NOTFOUND PARENT_SCOPE)
+        return()
+    endif()
+
+    get_filename_component(subdir_name ${filename} NAME_WE)
+    file(MAKE_DIRECTORY ${tbb_save_to}/${subdir_name})
+    if (NOT EXISTS "${tbb_save_to}/${subdir_name}")
+        message(STATUS "${tbb_save_to}/${subdir_name} can not be created")
+        set(${tbb_get_TBB_ROOT} ${tbb_get_TBB_ROOT}-NOTFOUND PARENT_SCOPE)
+        return()
+    endif()
+
+    message(STATUS "Unpacking ${local_file} to ${tbb_save_to}/${subdir_name}")
+    execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${local_file}
+                    WORKING_DIRECTORY ${tbb_save_to}/${subdir_name}
+                    RESULT_VARIABLE unpacking_result)
+
+    if (NOT unpacking_result EQUAL 0)
+        message(STATUS "Unsuccessful unpacking: ${unpacking_result}")
+        set(${tbb_get_TBB_ROOT} ${tbb_get_TBB_ROOT}-NOTFOUND PARENT_SCOPE)
+        return()
+    endif()
+
+    file(GLOB_RECURSE tbb_h ${tbb_save_to}/${subdir_name}/*/include/tbb/tbb.h)
+    list(GET tbb_h 0 tbb_h)
+
+    if (NOT EXISTS "${tbb_h}")
+        message(STATUS "tbb/tbb.h has not been found in the downloaded package")
+        set(${tbb_get_TBB_ROOT} ${tbb_get_TBB_ROOT}-NOTFOUND PARENT_SCOPE)
+        return()
+    endif()
+
+    get_filename_component(tbb_root "${tbb_h}" PATH)
+    get_filename_component(tbb_root "${tbb_root}" PATH)
+    get_filename_component(tbb_root "${tbb_root}" PATH)
+
+    if (NOT tbb_get_SOURCE_CODE)
+        set(tbb_config_dir ${tbb_root}/cmake)
+
+        if (NOT EXISTS "${tbb_config_dir}")
+            tbb_make_config(TBB_ROOT ${tbb_root} CONFIG_DIR tbb_config_dir)
+        endif()
+
+        set(${tbb_get_CONFIG_DIR} ${tbb_config_dir} PARENT_SCOPE)
+    endif()
+
+    set(${tbb_get_TBB_ROOT} ${tbb_root} PARENT_SCOPE)
+endfunction()
diff --git a/cmake/TBBMakeConfig.cmake b/cmake/TBBMakeConfig.cmake
new file mode 100644
index 0000000..6d25db0
--- /dev/null
+++ b/cmake/TBBMakeConfig.cmake
@@ -0,0 +1,162 @@
+# Copyright (c) 2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+#
+# Usage:
+#   include(TBBMakeConfig.cmake)
+#   tbb_make_config(TBB_ROOT <tbb_root> SYSTEM_NAME <system_name> CONFIG_DIR <var_to_store_config_dir> [CONFIG_FOR_SOURCE TBB_RELEASE_DIR <tbb_release_dir> TBB_DEBUG_DIR <tbb_debug_dir>])
+#
+
+include(CMakeParseArguments)
+
+# Save the location of Intel TBB CMake modules here, as it will not be possible to do inside functions,
+# see for details: https://cmake.org/cmake/help/latest/variable/CMAKE_CURRENT_LIST_DIR.html
+set(_tbb_cmake_module_path ${CMAKE_CURRENT_LIST_DIR})
+
+function(tbb_make_config)
+    set(oneValueArgs TBB_ROOT SYSTEM_NAME CONFIG_DIR TBB_RELEASE_DIR TBB_DEBUG_DIR)
+    set(options CONFIG_FOR_SOURCE)
+    cmake_parse_arguments(tbb_MK "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+    set(tbb_system_name ${CMAKE_SYSTEM_NAME})
+    if (tbb_MK_SYSTEM_NAME)
+        set(tbb_system_name ${tbb_MK_SYSTEM_NAME})
+    endif()
+
+    file(MAKE_DIRECTORY ${tbb_MK_TBB_ROOT}/cmake)
+
+    set(TBB_DEFAULT_COMPONENTS tbb tbbmalloc tbbmalloc_proxy)
+
+    if (tbb_MK_CONFIG_FOR_SOURCE)
+        set(TBB_RELEASE_DIR ${tbb_MK_TBB_RELEASE_DIR})
+        set(TBB_DEBUG_DIR ${tbb_MK_TBB_DEBUG_DIR})
+    endif()
+
+    if (tbb_system_name STREQUAL "Linux")
+        set(TBB_SHARED_LIB_DIR "lib")
+        set(TBB_X32_SUBDIR "ia32")
+        set(TBB_X64_SUBDIR "intel64")
+        set(TBB_LIB_PREFIX "lib")
+        set(TBB_LIB_EXT "so.2")
+
+        # Note: multiline variable
+        set(TBB_CHOOSE_COMPILER_SUBDIR "if (CMAKE_CXX_COMPILER_LOADED)
+    set(_tbb_compiler_id \${CMAKE_CXX_COMPILER_ID})
+    set(_tbb_compiler_ver \${CMAKE_CXX_COMPILER_VERSION})
+elseif (CMAKE_C_COMPILER_LOADED)
+    set(_tbb_compiler_id \${CMAKE_C_COMPILER_ID})
+    set(_tbb_compiler_ver \${CMAKE_C_COMPILER_VERSION})
+endif()
+
+# For non-GCC compilers try to find version of system GCC to choose right compiler subdirectory.
+if (NOT _tbb_compiler_id STREQUAL \"GNU\")
+    execute_process(COMMAND gcc --version OUTPUT_VARIABLE _tbb_gcc_ver_output ERROR_QUIET)
+    string(REGEX REPLACE \".*gcc.*([0-9]+\\\\.[0-9]+)\\\\.[0-9]+.*\" \"\\\\1\" _tbb_compiler_ver \"\${_tbb_gcc_ver_output}\")
+    if (NOT _tbb_compiler_ver)
+        message(FATAL_ERROR \"This Intel TBB package is intended to be used only environment with available 'gcc'\")
+    endif()
+    unset(_tbb_gcc_ver_output)
+endif()
+
+set(_tbb_compiler_subdir gcc4.1)
+foreach (_tbb_gcc_version 4.1 4.4 4.7)
+    if (NOT _tbb_compiler_ver VERSION_LESS \${_tbb_gcc_version})
+        set(_tbb_compiler_subdir gcc\${_tbb_gcc_version})
+    endif()
+endforeach()
+
+unset(_tbb_compiler_id)
+unset(_tbb_compiler_ver)")
+
+    elseif (tbb_system_name STREQUAL "Windows")
+        set(TBB_SHARED_LIB_DIR "bin")
+        set(TBB_X32_SUBDIR "ia32")
+        set(TBB_X64_SUBDIR "intel64")
+        set(TBB_LIB_PREFIX "")
+        set(TBB_LIB_EXT "dll")
+
+        # Note: multiline variable
+        set(TBB_CHOOSE_COMPILER_SUBDIR "if (NOT MSVC)
+    message(FATAL_ERROR \"This Intel TBB package is intended to be used only in the project with MSVC\")
+endif()
+
+# Detect the most relevant MSVC subdirectory
+set(_tbb_msvc_1700_subdir vc11)
+set(_tbb_msvc_1800_subdir vc12)
+set(_tbb_msvc_1900_subdir vc14)
+set(_tbb_msvc_ver \${MSVC_VERSION})
+if (MSVC_VERSION VERSION_LESS 1700)
+    message(FATAL_ERROR \"This Intel TBB package is intended to be used only in the project with MSVC version 1700 (vc11) or higher\")
+elseif (MSVC_VERSION VERSION_GREATER 1900)
+    set(_tbb_msvc_ver 1900)
+endif()
+set(_tbb_compiler_subdir \${_tbb_msvc_\${_tbb_msvc_ver}_subdir})
+unset(_tbb_msvc_1700_subdir)
+unset(_tbb_msvc_1800_subdir)
+unset(_tbb_msvc_1900_subdir)
+
+if (WINDOWS_STORE)
+    set(_tbb_compiler_subdir \${_tbb_compiler_subdir}_ui)
+endif()")
+
+        if (tbb_MK_CONFIG_FOR_SOURCE)
+            set(TBB_IMPLIB_RELEASE "\nIMPORTED_IMPLIB_RELEASE \"${tbb_MK_TBB_RELEASE_DIR}/\${_tbb_component}.lib\"")
+            set(TBB_IMPLIB_DEBUG "\nIMPORTED_IMPLIB_DEBUG \"${tbb_MK_TBB_DEBUG_DIR}/\${_tbb_component}_debug.lib\"")
+        else()
+            # Note: multiline variable
+            set(TBB_IMPLIB "
+                              IMPORTED_IMPLIB_RELEASE       \"\${_tbb_root}/lib/\${_tbb_arch_subdir}/\${_tbb_compiler_subdir}/\${_tbb_component}.lib\"
+                              IMPORTED_IMPLIB_DEBUG         \"\${_tbb_root}/lib/\${_tbb_arch_subdir}/\${_tbb_compiler_subdir}/\${_tbb_component}_debug.lib\"")
+        endif()
+
+        # Note: multiline variable
+        # tbb/internal/_tbb_windef.h (included via tbb/tbb_stddef.h) does implicit linkage of some .lib files, use a special define to avoid it
+        set(TBB_COMPILE_DEFINITIONS "
+                              INTERFACE_COMPILE_DEFINITIONS \"__TBB_NO_IMPLICIT_LINKAGE=1\"")
+    elseif (tbb_system_name STREQUAL "Darwin")
+        set(TBB_SHARED_LIB_DIR "lib")
+        set(TBB_X32_SUBDIR ".")
+        set(TBB_X64_SUBDIR ".")
+        set(TBB_LIB_PREFIX "lib")
+        set(TBB_LIB_EXT "dylib")
+        set(TBB_CHOOSE_COMPILER_SUBDIR "set(_tbb_compiler_subdir .)")
+    elseif (tbb_system_name STREQUAL "Android")
+        set(TBB_SHARED_LIB_DIR "lib")
+        set(TBB_X32_SUBDIR ".")
+        set(TBB_X64_SUBDIR "x86_64")
+        set(TBB_LIB_PREFIX "lib")
+        set(TBB_LIB_EXT "so")
+        set(TBB_CHOOSE_COMPILER_SUBDIR "set(_tbb_compiler_subdir .)")
+    endif()
+
+    file(READ "${tbb_MK_TBB_ROOT}/include/tbb/tbb_stddef.h" _tbb_stddef)
+    string(REGEX REPLACE ".*#define TBB_VERSION_MAJOR ([0-9]+).*" "\\1" _tbb_ver_major "${_tbb_stddef}")
+    string(REGEX REPLACE ".*#define TBB_VERSION_MINOR ([0-9]+).*" "\\1" _tbb_ver_minor "${_tbb_stddef}")
+    string(REGEX REPLACE ".*#define TBB_INTERFACE_VERSION ([0-9]+).*" "\\1" TBB_INTERFACE_VERSION "${_tbb_stddef}")
+    set(TBB_VERSION "${_tbb_ver_major}.${_tbb_ver_minor}")
+
+    if (tbb_MK_CONFIG_FOR_SOURCE)
+        set(_tbb_config_template TBBConfigForSource.cmake.in)
+    else()
+        set(_tbb_config_template TBBConfig.cmake.in)
+    endif()
+    configure_file(${_tbb_cmake_module_path}/templates/${_tbb_config_template}   ${tbb_MK_TBB_ROOT}/cmake/TBBConfig.cmake @ONLY)
+    configure_file(${_tbb_cmake_module_path}/templates/TBBConfigVersion.cmake.in ${tbb_MK_TBB_ROOT}/cmake/TBBConfigVersion.cmake @ONLY)
+
+    set(${tbb_MK_CONFIG_DIR} ${tbb_MK_TBB_ROOT}/cmake PARENT_SCOPE)
+endfunction()
diff --git a/cmake/templates/TBBConfig.cmake.in b/cmake/templates/TBBConfig.cmake.in
new file mode 100644
index 0000000..19bc1fc
--- /dev/null
+++ b/cmake/templates/TBBConfig.cmake.in
@@ -0,0 +1,89 @@
+# Copyright (c) 2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+# TBB_FOUND should not be set explicitly. It is defined automatically by CMake.
+# Handling of TBB_VERSION is in TBBConfigVersion.cmake.
+
+if (NOT TBB_FIND_COMPONENTS)
+    set(TBB_FIND_COMPONENTS "@TBB_DEFAULT_COMPONENTS@")
+    foreach (_tbb_component ${TBB_FIND_COMPONENTS})
+        set(TBB_FIND_REQUIRED_${_tbb_component} 1)
+    endforeach()
+endif()
+
+# Add components with internal dependencies: tbbmalloc_proxy -> tbbmalloc
+list(FIND TBB_FIND_COMPONENTS tbbmalloc_proxy _tbbmalloc_proxy_ix)
+if (NOT _tbbmalloc_proxy_ix EQUAL -1)
+    list(FIND TBB_FIND_COMPONENTS tbbmalloc _tbbmalloc_ix)
+    if (_tbbmalloc_ix EQUAL -1)
+        list(APPEND TBB_FIND_COMPONENTS tbbmalloc)
+        set(TBB_FIND_REQUIRED_tbbmalloc ${TBB_FIND_REQUIRED_tbbmalloc_proxy})
+    endif()
+endif()
+
+set(TBB_INTERFACE_VERSION @TBB_INTERFACE_VERSION@)
+
+get_filename_component(_tbb_root "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_tbb_root "${_tbb_root}" PATH)
+
+set(_tbb_x32_subdir @TBB_X32_SUBDIR@)
+set(_tbb_x64_subdir @TBB_X64_SUBDIR@)
+
+if (CMAKE_SIZEOF_VOID_P EQUAL 8)
+    set(_tbb_arch_subdir ${_tbb_x64_subdir})
+else()
+    set(_tbb_arch_subdir ${_tbb_x32_subdir})
+endif()
+
+ at TBB_CHOOSE_COMPILER_SUBDIR@
+
+get_filename_component(_tbb_lib_path "${_tbb_root}/@TBB_SHARED_LIB_DIR@/${_tbb_arch_subdir}/${_tbb_compiler_subdir}" ABSOLUTE)
+
+foreach (_tbb_component ${TBB_FIND_COMPONENTS})
+    set(_tbb_release_lib "${_tbb_lib_path}/@TBB_LIB_PREFIX@${_tbb_component}. at TBB_LIB_EXT@")
+    set(_tbb_debug_lib "${_tbb_lib_path}/@TBB_LIB_PREFIX@${_tbb_component}_debug. at TBB_LIB_EXT@")
+
+    if (EXISTS "${_tbb_release_lib}" AND EXISTS "${_tbb_debug_lib}")
+        add_library(TBB::${_tbb_component} SHARED IMPORTED)
+        set_target_properties(TBB::${_tbb_component} PROPERTIES
+                              IMPORTED_CONFIGURATIONS "RELEASE;DEBUG"
+                              IMPORTED_LOCATION_RELEASE     "${_tbb_release_lib}"
+                              IMPORTED_LOCATION_DEBUG       "${_tbb_debug_lib}"
+                              INTERFACE_INCLUDE_DIRECTORIES "${_tbb_root}/include"@TBB_IMPLIB@@TBB_COMPILE_DEFINITIONS@)
+
+        # Add internal dependencies for imported targets: TBB::tbbmalloc_proxy -> TBB::tbbmalloc
+        if (_tbb_component STREQUAL tbbmalloc_proxy)
+            set_target_properties(TBB::tbbmalloc_proxy PROPERTIES INTERFACE_LINK_LIBRARIES TBB::tbbmalloc)
+        endif()
+
+        list(APPEND TBB_IMPORTED_TARGETS TBB::${_tbb_component})
+        set(TBB_${_tbb_component}_FOUND 1)
+    elseif (TBB_FIND_REQUIRED AND TBB_FIND_REQUIRED_${_tbb_component})
+        message(FATAL_ERROR "Missed required Intel TBB component: ${_tbb_component}")
+    endif()
+endforeach()
+
+unset(_tbb_x32_subdir)
+unset(_tbb_x64_subdir)
+unset(_tbb_arch_subdir)
+unset(_tbb_compiler_subdir)
+unset(_tbbmalloc_proxy_ix)
+unset(_tbbmalloc_ix)
+unset(_tbb_lib_path)
+unset(_tbb_release_lib)
+unset(_tbb_debug_lib)
diff --git a/cmake/templates/TBBConfigForSource.cmake.in b/cmake/templates/TBBConfigForSource.cmake.in
new file mode 100644
index 0000000..e708a9b
--- /dev/null
+++ b/cmake/templates/TBBConfigForSource.cmake.in
@@ -0,0 +1,82 @@
+# Copyright (c) 2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+# TBB_FOUND should not be set explicitly. It is defined automatically by CMake.
+# Handling of TBB_VERSION is in TBBConfigVersion.cmake.
+
+if (NOT TBB_FIND_COMPONENTS)
+    set(TBB_FIND_COMPONENTS "@TBB_DEFAULT_COMPONENTS@")
+    foreach (_tbb_component ${TBB_FIND_COMPONENTS})
+        set(TBB_FIND_REQUIRED_${_tbb_component} 1)
+    endforeach()
+endif()
+
+# Add components with internal dependencies: tbbmalloc_proxy -> tbbmalloc
+list(FIND TBB_FIND_COMPONENTS tbbmalloc_proxy _tbbmalloc_proxy_ix)
+if (NOT _tbbmalloc_proxy_ix EQUAL -1)
+    list(FIND TBB_FIND_COMPONENTS tbbmalloc _tbbmalloc_ix)
+    if (_tbbmalloc_ix EQUAL -1)
+        list(APPEND TBB_FIND_COMPONENTS tbbmalloc)
+        set(TBB_FIND_REQUIRED_tbbmalloc ${TBB_FIND_REQUIRED_tbbmalloc_proxy})
+    endif()
+endif()
+
+set(TBB_INTERFACE_VERSION @TBB_INTERFACE_VERSION@)
+
+get_filename_component(_tbb_root "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_tbb_root "${_tbb_root}" PATH)
+
+foreach (_tbb_component ${TBB_FIND_COMPONENTS})
+    set(_tbb_release_lib "@TBB_RELEASE_DIR@/@TBB_LIB_PREFIX@${_tbb_component}. at TBB_LIB_EXT@")
+    set(_tbb_debug_lib "@TBB_DEBUG_DIR@/@TBB_LIB_PREFIX@${_tbb_component}_debug. at TBB_LIB_EXT@")
+
+    if (EXISTS "${_tbb_release_lib}" OR EXISTS "${_tbb_debug_lib}")
+        add_library(TBB::${_tbb_component} SHARED IMPORTED)
+        set_target_properties(TBB::${_tbb_component} PROPERTIES
+                              INTERFACE_INCLUDE_DIRECTORIES "${_tbb_root}/include"@TBB_COMPILE_DEFINITIONS@)
+
+
+        if (EXISTS "${_tbb_release_lib}")
+            set_target_properties(TBB::${_tbb_component} PROPERTIES
+                                  IMPORTED_LOCATION_RELEASE "${_tbb_release_lib}"@TBB_IMPLIB_RELEASE@)
+            set_property(TARGET TBB::${_tbb_component} APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
+        endif()
+
+        if (EXISTS "${_tbb_debug_lib}")
+            set_target_properties(TBB::${_tbb_component} PROPERTIES
+                                  IMPORTED_LOCATION_DEBUG "${_tbb_debug_lib}"@TBB_IMPLIB_DEBUG@)
+            set_property(TARGET TBB::${_tbb_component} APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
+        endif()
+
+        # Add internal dependencies for imported targets: TBB::tbbmalloc_proxy -> TBB::tbbmalloc
+        if (_tbb_component STREQUAL tbbmalloc_proxy)
+            set_target_properties(TBB::tbbmalloc_proxy PROPERTIES INTERFACE_LINK_LIBRARIES TBB::tbbmalloc)
+        endif()
+
+        list(APPEND TBB_IMPORTED_TARGETS TBB::${_tbb_component})
+        set(TBB_${_tbb_component}_FOUND 1)
+    elseif (TBB_FIND_REQUIRED AND TBB_FIND_REQUIRED_${_tbb_component})
+        message(FATAL_ERROR "Missed required Intel TBB component: ${_tbb_component}")
+    endif()
+endforeach()
+
+unset(_tbbmalloc_proxy_ix)
+unset(_tbbmalloc_ix)
+unset(_tbb_lib_path)
+unset(_tbb_release_lib)
+unset(_tbb_debug_lib)
diff --git a/cmake/templates/TBBConfigVersion.cmake.in b/cmake/templates/TBBConfigVersion.cmake.in
new file mode 100644
index 0000000..69d16cf
--- /dev/null
+++ b/cmake/templates/TBBConfigVersion.cmake.in
@@ -0,0 +1,28 @@
+# Copyright (c) 2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+set(PACKAGE_VERSION @TBB_VERSION@)
+
+if ("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}")
+    set(PACKAGE_VERSION_COMPATIBLE FALSE)
+else()
+    set(PACKAGE_VERSION_COMPATIBLE TRUE)
+    if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}")
+        set(PACKAGE_VERSION_EXACT TRUE)
+    endif()
+endif()
diff --git a/doc/Release_Notes.txt b/doc/Release_Notes.txt
index b37d7ed..392055f 100644
--- a/doc/Release_Notes.txt
+++ b/doc/Release_Notes.txt
@@ -1,6 +1,6 @@
 ------------------------------------------------------------------------
 Intel(R) Threading Building Blocks - Release Notes
-                   Version 4.3
+                   Version 2017
 ------------------------------------------------------------------------
 
 
@@ -23,19 +23,23 @@ and compilers listed here.
 Hardware - Recommended
 
     Microsoft* Windows* Systems
-        Intel(R) Core(TM) 2 Duo processor or Intel(R) Xeon(R) processor
-            or higher
+        Intel(R) Core(TM) processor family or higher
+        Intel(R) Xeon(R) processor family or higher
+        Intel(R) Xeon Phi(TM) processor family
     Linux* Systems
-        Intel(R) Core(TM) 2 Duo processor or Intel(R) Xeon(R) processor
-            or higher
-        Intel(R) Xeon Phi(TM) coprocessor
-    OS X* Systems
-        Intel(R) Core(TM) 2 Duo processor or higher
+        Intel(R) Core(TM) processor family or higher
+        Intel(R) Xeon(R) processor family or higher
+        Intel(R) Xeon Phi(TM) processor family
+    macOS* Systems
+        Intel(R) Core(TM) processor family or higher
+    Android* Systems
+        Intel(R) Atom(TM) processor family
 
 Hardware - Supported
 
     Intel(R) Pentium(R) 4 processor family and higher
     Intel(R) Xeon Phi(TM) coprocessor
+    Intel(R) Atom(TM) processor family
     Non Intel(R) processors compatible with the above processors
 
 Software - Minimum Requirements
@@ -45,109 +49,82 @@ Software - Minimum Requirements
 
 Software - Recommended
 
-    Intel(R) Parallel Studio XE 2013 SP1
-    Intel(R) Parallel Studio XE 2015 Professional Edition
+    Intel(R) Parallel Studio XE 2016 and higher
+    Intel(R) System Studio 2016 and higher
 
 Software - Supported Operating Systems
 
     Systems with Microsoft* Windows* operating systems
+        Microsoft* Windows* 10
         Microsoft* Windows* 8, 8.1
         Microsoft* Windows* 7 SP1
+        Microsoft* Windows* Server 2012 R2
         Microsoft* Windows* Server 2012
-        Microsoft* Windows* Server 2008 SP2 (IA-32 only)
         Microsoft* Windows* Server 2008 R2 SP1
         Microsoft* Windows* HPC Server 2008
+        Windows Embedded 8.x, 10
     Systems with Linux* operating systems
-        Red Hat* Enterprise Linux* 5, 6, 7
-        Fedora* 20
-        Debian* 6.0, 7
-        Ubuntu* 12.04 LTS, 14.04 LTS
-        Ubuntu* 13.10
-        SuSE* Linux* Enterprise Server 11
+        CentOS 6.5, 7.1
+        Debian* 7, 8
+        Fedora* 20, 21, 22, 23
         Intel(R) Cluster Ready
-    Systems with OS X* operating systems
-        OS X* 10.9 and higher
+        Red Hat* Enterprise Linux* 6, 7
+        SuSE* Linux* Enterprise Server 11, 12
+        Ubuntu* 12.04 LTS, 14.04 LTS, 15.04, 16.04 LTS
+        WindRiver* Linux 7
+        Yocto 1.7, 1.9 (2.0), 2.1
+    Systems with OS X* or macOS* operating systems
+        OS X* 10.10 and higher
+        macOS* 10.12 and higher
+    Systems with Android* operating systems
+        Android* 5.x, 6.x
 
 Software - Supported Compilers
 
-    Intel(R) C++ Compiler 13.1 (Intel(R) Parallel Studio XE 2013 SP1)
-        and higher
-    Microsoft* Visual C++ 10.0 (Microsoft* Visual Studio* 2010,
+    Intel(R) C++ Compiler 15.0 and higher
+    Microsoft* Visual C++ 11.0 (Microsoft* Visual Studio* 2012,
         Windows* OS only) and higher
+    Microsoft* Windows* Software Development Kit for Windows* 8
+        and higher
     For each supported Linux* operating system, the standard gcc
         version provided with that operating system is supported,
-        including gcc 4.1 through 4.8.2
-    Xcode* 5.0 and higher and command line tools (OS X* only)
+        starting from
+            GNU Compilers (gcc) 4.1 and higher
+            GNU C Library (glibc) version 2.4 and higher
+    Xcode* 6.3 and higher
+    Android* NDK r10e and higher
 
+Software - Supported Performance Analysis Tools
+
+    Intel(R) VTune(TM) Amplifier XE 2016 and higher.
+    Intel(R) Inspector XE 2016 and higher.
+    Intel(R) Advisor XE 2016 and higher.
 
 Known Issues
 ------------
 
-Please note the following with respect to this particular release of
-Intel(R) Threading Building Blocks.
+Below is the list of known issues in this release of
+Intel(R) Threading Building Blocks (Intel(R) TBB).
+See the "Known Issues" appendix in the Intel(R) TBB Developer
+Reference for notes applicable to multiple releases of Intel(R) TBB.
 
 Library Issues
 
-    - If an application uses static version of MSVCRT libraries or uses
-        Intel TBB DLL built with static MSVCRT (vc_mt variant), and throws
-        an exception from a functor passed to task_group::run_and_wait(),
-        the exception will not be intercepted by Intel TBB and will not
-        result in cancellation of the task_group. For a workaround, catch
-        the exception in the functor and explicitly cancel the task_group.
-
-    - The debug version of Intel TBB DLL built with static MSVCRT
-        (vc_mt/tbb_debug.dll) additionally requires
-        Microsoft* Visual C++ 10.0 debug library (msvcp100d.dll) in order
-        to run.
-
-    - If you are using Intel(R) Threading Building Blocks and OpenMP*
-        constructs mixed together in rapid succession in the same
-        program, and you are using Intel(R) compilers for your OpenMP*
-        code, set KMP_BLOCKTIME to a small value (e.g., 20 milliseconds)
-        to improve performance.  This setting can also be made within
-        your OpenMP* code via the kmp_set_blocktime() library call.  See
-        the Intel(R) compiler OpenMP* documentation for more details on
-        KMP_BLOCKTIME and kmp_set_blocktime().
-
-    - In general, non-debug ("release") builds of applications or
-        examples should link against the non-debug versions of the
-        Intel(R) Threading Building Blocks libraries, and debug builds
-        should link against the debug versions of these libraries.  On
-        Windows* OS, compile with /MD and use Intel(R) Threading
-        Building Blocks release libraries, or compile with /MDd and use
-        debug libraries; not doing so may cause run-time failures.  See
-        the Tutorial in the product "doc" sub-directory for more details
-        on debug vs. release libraries.
-
-    - If an open source version installed to the system folders like
-        /usr/lib64 on Linux OS, examples may fail to link because sometimes
-        gcc searches for folders in unexpected order. To resolve this, use
-        the -L command line linker option needs to be used to set the right
-        location. This does not affect a program execution.
-
-    - Running applications linked with Intel(R) Threading Building Blocks
-        version 4.0 U5 or higher under Intel(R) Graphics Performance
-        Analyzers is not supported.
-
-    - If an application that uses dynamic memory allocator replacement via
-        LD_PRELOAD is analyzed with Intel(R) VTune(TM) Amplifier XE for Linux,
-        the analysis may fail to start. For a workaround, either specify
-        the full path to both libtbbmalloc_proxy.so.2 and libtbbmalloc.so.2
-        in LD_PRELOAD, or set up a Intel(R) VTune(TM) Amplifier XE project
-        to use a shell script that sets LD_PRELOAD and starts the application.
-
-    - If your application includes tbb/enumerable_thread_specific.h (or
-        tbb/tbb.h) for offload execution on an Intel(R) Xeon Phi(TM)
-        coprocessor, you may see link issues related to libpthread. To resolve
-        this issue, add the /Qoffload-option,mic,compiler,"-pthread" compiler
-        switch to the command line on Windows* OS (or
-        -qoffload-option,mic,compiler,"-pthread" on Linux* OS).
+    - If you build Intel(R) TBB from sources with GCC 6, specify
+        the -flifetime-dse=1 option to prevent crashes at runtime,
+        or use Intel(R) TBB makefiles that automatically set this option.
+
+    - The current implementation of gfx_factory does not allow memory
+        buffer objects to be used concurrently. As a result, several
+        streaming nodes customized with gfx_factory cannot be connected
+        with each other directly.
 
 ------------------------------------------------------------------------
-Copyright (C) 2005-2015 Intel Corporation.  All Rights Reserved.
+(C) 2017 Intel Corporation
 
-Intel, Xeon and Pentium are registered trademarks or trademarks of
-Intel Corporation or its subsidiaries in the United States and other countries.
+Intel, the Intel logo, Intel Core, Intel Atom, Xeon, Intel Xeon Phi and
+Pentium are trademarks of Intel Corporation in the U.S. and/or other
+countries.
 
 * Other names and brands may be claimed as the property of others.
 
diff --git a/doc/html/a00001.html b/doc/html/a00001.html
index 5d398fd..60cbf03 100644
--- a/doc/html/a00001.html
+++ b/doc/html/a00001.html
@@ -26,7 +26,7 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="index.html">Main Page</a></li><li class="navelem"><a class="el" href="a00008.html">TBB concepts</a></li>  </ul>
+<li class="navelem"><a class="el" href="index.html">Main Page</a></li><li class="navelem"><a class="el" href="a00007.html">TBB concepts</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
@@ -50,7 +50,7 @@
 </div></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00002.html b/doc/html/a00002.html
index adfece9..cd8a19b 100644
--- a/doc/html/a00002.html
+++ b/doc/html/a00002.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>Requirements on parallel_do body</title>
+<title>Requirements on parallel_for body</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -26,34 +26,27 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="index.html">Main Page</a></li><li class="navelem"><a class="el" href="a00008.html">TBB concepts</a></li>  </ul>
+<li class="navelem"><a class="el" href="index.html">Main Page</a></li><li class="navelem"><a class="el" href="a00007.html">TBB concepts</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">Requirements on parallel_do body </div>  </div>
+<div class="title">Requirements on parallel_for body </div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="textblock"><p>Class <code>Body</code> implementing the concept of parallel_do body must define:</p>
+<div class="textblock"><p>Class <code>Body</code> implementing the concept of parallel_for body must define:</p>
 <ul>
-<li><div class="fragment"><div class="line">B::operator()( </div>
-<div class="line">        cv_item_type item,</div>
-<div class="line">        parallel_do_feeder<item_type>& feeder</div>
-<div class="line">) <span class="keyword">const</span></div>
-<div class="line"></div>
-<div class="line">OR</div>
-<div class="line"></div>
-<div class="line">B::operator()( cv_item_type& item ) <span class="keyword">const</span></div>
-</div><!-- fragment --> Process item. May be invoked concurrently for the same <code>this</code> but different <code>item</code>.</li>
-<li><div class="fragment"><div class="line">item_type( <span class="keyword">const</span> item_type& ) </div>
-</div><!-- fragment --> Copy a work item.</li>
-<li><div class="fragment"><div class="line">~item_type() </div>
-</div><!-- fragment --> Destroy a work item </li>
+<li><div class="fragment"><div class="line">Body::Body( <span class="keyword">const</span> Body& ); </div>
+</div><!-- fragment --> Copy constructor</li>
+<li><div class="fragment"><div class="line">Body::~Body(); </div>
+</div><!-- fragment --> Destructor</li>
+<li><div class="fragment"><div class="line"><span class="keywordtype">void</span> Body::operator()( Range& r ) <span class="keyword">const</span>; </div>
+</div><!-- fragment --> Function call operator applying the body to range <code>r</code>. </li>
 </ul>
 </div></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00003.html b/doc/html/a00003.html
index fec1b11..ad1e622 100644
--- a/doc/html/a00003.html
+++ b/doc/html/a00003.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>Requirements on parallel_for body</title>
+<title>Requirements on parallel_reduce body</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -26,27 +26,29 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="index.html">Main Page</a></li><li class="navelem"><a class="el" href="a00008.html">TBB concepts</a></li>  </ul>
+<li class="navelem"><a class="el" href="index.html">Main Page</a></li><li class="navelem"><a class="el" href="a00007.html">TBB concepts</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">Requirements on parallel_for body </div>  </div>
+<div class="title">Requirements on parallel_reduce body </div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="textblock"><p>Class <code>Body</code> implementing the concept of parallel_for body must define:</p>
+<div class="textblock"><p>Class <code>Body</code> implementing the concept of parallel_reduce body must define:</p>
 <ul>
-<li><div class="fragment"><div class="line">Body::Body( <span class="keyword">const</span> Body& ); </div>
-</div><!-- fragment --> Copy constructor</li>
+<li><div class="fragment"><div class="line">Body::Body( Body&, split ); </div>
+</div><!-- fragment --> Splitting constructor. Must be able to run concurrently with operator() and method <code>join</code> </li>
 <li><div class="fragment"><div class="line">Body::~Body(); </div>
 </div><!-- fragment --> Destructor</li>
-<li><div class="fragment"><div class="line"><span class="keywordtype">void</span> Body::operator()( Range& r ) <span class="keyword">const</span>; </div>
-</div><!-- fragment --> Function call operator applying the body to range <code>r</code>. </li>
+<li><div class="fragment"><div class="line"><span class="keywordtype">void</span> Body::operator()( Range& r ); </div>
+</div><!-- fragment --> Function call operator applying body to range <code>r</code> and accumulating the result</li>
+<li><div class="fragment"><div class="line"><span class="keywordtype">void</span> Body::join( Body& b ); </div>
+</div><!-- fragment --> Join results. The result in <code>b</code> should be merged into the result of <code>this</code> </li>
 </ul>
 </div></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00004.html b/doc/html/a00004.html
index 7f94ce5..fb82d54 100644
--- a/doc/html/a00004.html
+++ b/doc/html/a00004.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>Requirements on parallel_reduce body</title>
+<title>Requirements on parallel_reduce anonymous function objects (lambda functions)</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -24,31 +24,17 @@
       <li><a href="files.html"><span>Files</span></a></li>
     </ul>
   </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="index.html">Main Page</a></li><li class="navelem"><a class="el" href="a00008.html">TBB concepts</a></li>  </ul>
-</div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">Requirements on parallel_reduce body </div>  </div>
+<div class="title">Requirements on parallel_reduce anonymous function objects (lambda functions) </div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="textblock"><p>Class <code>Body</code> implementing the concept of parallel_reduce body must define:</p>
-<ul>
-<li><div class="fragment"><div class="line">Body::Body( Body&, split ); </div>
-</div><!-- fragment --> Splitting constructor. Must be able to run concurrently with operator() and method <code>join</code> </li>
-<li><div class="fragment"><div class="line">Body::~Body(); </div>
-</div><!-- fragment --> Destructor</li>
-<li><div class="fragment"><div class="line"><span class="keywordtype">void</span> Body::operator()( Range& r ); </div>
-</div><!-- fragment --> Function call operator applying body to range <code>r</code> and accumulating the result</li>
-<li><div class="fragment"><div class="line"><span class="keywordtype">void</span> Body::join( Body& b ); </div>
-</div><!-- fragment --> Join results. The result in <code>b</code> should be merged into the result of <code>this</code> </li>
-</ul>
+<div class="textblock"><p>TO BE DOCUMENTED </p>
 </div></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00005.html b/doc/html/a00005.html
index d538b45..ba7f204 100644
--- a/doc/html/a00005.html
+++ b/doc/html/a00005.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>Requirements on parallel_reduce anonymous function objects (lambda functions)</title>
+<title>Requirements on parallel_scan body</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -24,17 +24,33 @@
       <li><a href="files.html"><span>Files</span></a></li>
     </ul>
   </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="index.html">Main Page</a></li><li class="navelem"><a class="el" href="a00007.html">TBB concepts</a></li>  </ul>
+</div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">Requirements on parallel_reduce anonymous function objects (lambda functions) </div>  </div>
+<div class="title">Requirements on parallel_scan body </div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="textblock"><p>TO BE DOCUMENTED </p>
+<div class="textblock"><p>Class <code>Body</code> implementing the concept of parallel_scan body must define:</p>
+<ul>
+<li><div class="fragment"><div class="line">Body::Body( Body&, split ); </div>
+</div><!-- fragment --> Splitting constructor. Split <code>b</code> so that <code>this</code> and <code>b</code> can accumulate separately</li>
+<li><div class="fragment"><div class="line">Body::~Body(); </div>
+</div><!-- fragment --> Destructor</li>
+<li><div class="fragment"><div class="line"><span class="keywordtype">void</span> Body::operator()( <span class="keyword">const</span> Range& r, pre_scan_tag ); </div>
+</div><!-- fragment --> Preprocess iterations for range <code>r</code> </li>
+<li><div class="fragment"><div class="line"><span class="keywordtype">void</span> Body::operator()( <span class="keyword">const</span> Range& r, final_scan_tag ); </div>
+</div><!-- fragment --> Do final processing for iterations of range <code>r</code> </li>
+<li><div class="fragment"><div class="line"><span class="keywordtype">void</span> Body::reverse_join( Body& a ); </div>
+</div><!-- fragment --> Merge preprocessing state of <code>a</code> into <code>this</code>, where <code>a</code> was created earlier from <code>b</code> by b's splitting constructor </li>
+</ul>
 </div></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00006.html b/doc/html/a00006.html
index 4033ce6..f2e603c 100644
--- a/doc/html/a00006.html
+++ b/doc/html/a00006.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>Requirements on parallel_scan body</title>
+<title>Requirements on iterators for parallel_sort</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -26,31 +26,25 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="index.html">Main Page</a></li><li class="navelem"><a class="el" href="a00008.html">TBB concepts</a></li>  </ul>
+<li class="navelem"><a class="el" href="index.html">Main Page</a></li><li class="navelem"><a class="el" href="a00007.html">TBB concepts</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">Requirements on parallel_scan body </div>  </div>
+<div class="title">Requirements on iterators for parallel_sort </div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="textblock"><p>Class <code>Body</code> implementing the concept of parallel_scan body must define:</p>
+<div class="textblock"><p>Requirements on the iterator type <code>It</code> and its value type <code>T</code> for <code>parallel_sort:</code> </p>
 <ul>
-<li><div class="fragment"><div class="line">Body::Body( Body&, split ); </div>
-</div><!-- fragment --> Splitting constructor. Split <code>b</code> so that <code>this</code> and <code>b</code> can accumulate separately</li>
-<li><div class="fragment"><div class="line">Body::~Body(); </div>
-</div><!-- fragment --> Destructor</li>
-<li><div class="fragment"><div class="line"><span class="keywordtype">void</span> Body::operator()( <span class="keyword">const</span> Range& r, pre_scan_tag ); </div>
-</div><!-- fragment --> Preprocess iterations for range <code>r</code> </li>
-<li><div class="fragment"><div class="line"><span class="keywordtype">void</span> Body::operator()( <span class="keyword">const</span> Range& r, final_scan_tag ); </div>
-</div><!-- fragment --> Do final processing for iterations of range <code>r</code> </li>
-<li><div class="fragment"><div class="line"><span class="keywordtype">void</span> Body::reverse_join( Body& a ); </div>
-</div><!-- fragment --> Merge preprocessing state of <code>a</code> into <code>this</code>, where <code>a</code> was created earlier from <code>b</code> by b's splitting constructor </li>
+<li><div class="fragment"><div class="line"><span class="keywordtype">void</span> iter_swap( It a, It b ) </div>
+</div><!-- fragment --> Swaps the values of the elements the given iterators <code>a</code> and <code>b</code> are pointing to. <code>It</code> should be a random access iterator.</li>
+<li><div class="fragment"><div class="line"><span class="keywordtype">bool</span> Compare::operator()( <span class="keyword">const</span> T& x, <span class="keyword">const</span> T& y ) </div>
+</div><!-- fragment --> True if x comes before y; </li>
 </ul>
 </div></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00007.html b/doc/html/a00007.html
index 243601c..0c5a8d1 100644
--- a/doc/html/a00007.html
+++ b/doc/html/a00007.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>Requirements on iterators for parallel_sort</title>
+<title>TBB concepts</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -26,25 +26,29 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="index.html">Main Page</a></li><li class="navelem"><a class="el" href="a00008.html">TBB concepts</a></li>  </ul>
+<li class="navelem"><a class="el" href="index.html">Main Page</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">Requirements on iterators for parallel_sort </div>  </div>
+<div class="title">TBB concepts </div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="textblock"><p>Requirements on value type <code>T</code> of <code>RandomAccessIterator</code> for <code>parallel_sort:</code> </p>
+<div class="textblock"><p>A concept is a set of requirements to a type, which are necessary and sufficient for the type to model a particular behavior or a set of behaviors. Some concepts are specific to a particular algorithm (e.g. algorithm body), while other ones are common to several algorithms (e.g. range concept).</p>
+<p>All TBB algorithms make use of different classes implementing various concepts. Implementation classes are supplied by the user as type arguments of template parameters and/or as objects passed as function call arguments. The library provides predefined implementations of some concepts (e.g. several kinds of <a class="el" href="a00001.html">ranges</a>), while other ones must always be implemented by the user.</p>
+<p>TBB defines a set of minimal requirements each concept must conform to. Here is the list of different concepts hyperlinked to the corresponding requirements specifications:</p>
 <ul>
-<li><div class="fragment"><div class="line"><span class="keywordtype">void</span> swap( T& x, T& y ) </div>
-</div><!-- fragment --> Swaps <code>x</code> and <code>y</code> </li>
-<li><div class="fragment"><div class="line"><span class="keywordtype">bool</span> Compare::operator()( <span class="keyword">const</span> T& x, <span class="keyword">const</span> T& y ) </div>
-</div><!-- fragment --> True if x comes before y; </li>
+<li><a class="el" href="a00001.html">Requirements on range concept</a></li>
+<li>parallel_do_body_req</li>
+<li><a class="el" href="a00002.html">Requirements on parallel_for body</a></li>
+<li><a class="el" href="a00003.html">Requirements on parallel_reduce body</a></li>
+<li><a class="el" href="a00005.html">Requirements on parallel_scan body</a></li>
+<li><a class="el" href="a00006.html">Requirements on iterators for parallel_sort</a> </li>
 </ul>
 </div></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00008.html b/doc/html/a00008.html
index 1496709..0cd07e9 100644
--- a/doc/html/a00008.html
+++ b/doc/html/a00008.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>TBB concepts</title>
+<title>__TBB_malloc_proxy_caller Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -17,38 +17,35 @@
   <div id="navrow1" class="tabs">
     <ul class="tablist">
       <li><a href="index.html"><span>Main Page</span></a></li>
-      <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
       <li><a href="modules.html"><span>Modules</span></a></li>
       <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
       <li><a href="files.html"><span>Files</span></a></li>
     </ul>
   </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="index.html">Main Page</a></li>  </ul>
-</div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
 </div><!-- top -->
 <div class="header">
+  <div class="summary">
+<a href="a00259.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">TBB concepts </div>  </div>
+<div class="title">__TBB_malloc_proxy_caller Struct Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="textblock"><p>A concept is a set of requirements to a type, which are necessary and sufficient for the type to model a particular behavior or a set of behaviors. Some concepts are specific to a particular algorithm (e.g. algorithm body), while other ones are common to several algorithms (e.g. range concept).</p>
-<p>All TBB algorithms make use of different classes implementing various concepts. Implementation classes are supplied by the user as type arguments of template parameters and/or as objects passed as function call arguments. The library provides predefined implementations of some concepts (e.g. several kinds of <a class="el" href="a00001.html">ranges</a>), while other ones must always be implemented by the user.</p>
-<p>TBB defines a set of minimal requirements each concept must conform to. Here is the list of different concepts hyperlinked to the corresponding requirements specifications:</p>
-<ul>
-<li><a class="el" href="a00001.html">Requirements on range concept</a></li>
-<li><a class="el" href="a00002.html">Requirements on parallel_do body</a></li>
-<li><a class="el" href="a00003.html">Requirements on parallel_for body</a></li>
-<li><a class="el" href="a00004.html">Requirements on parallel_reduce body</a></li>
-<li><a class="el" href="a00006.html">Requirements on parallel_scan body</a></li>
-<li><a class="el" href="a00007.html">Requirements on iterators for parallel_sort</a> </li>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>tbbmalloc_proxy.h</li>
 </ul>
-</div></div><!-- contents -->
+</div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00009.html b/doc/html/a00009.html
index 289afe8..94a98cf 100644
--- a/doc/html/a00009.html
+++ b/doc/html/a00009.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>__TBB_malloc_proxy_caller Struct Reference</title>
+<title>tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -31,21 +31,111 @@
       <li><a href="functions.html"><span>Class Members</span></a></li>
     </ul>
   </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00036.html">concurrent_hash_map</a></li><li class="navelem"><a class="el" href="a00009.html">accessor</a></li>  </ul>
+</div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="a00262.html">List of all members</a>  </div>
+<a href="#pub-types">Public Types</a> |
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="a00356.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">__TBB_malloc_proxy_caller Struct Reference</div>  </div>
+<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-<hr/>The documentation for this struct was generated from the following file:<ul>
-<li>tbbmalloc_proxy.h</li>
+
+<p>Allows write access to elements and combines data access, locking, and garbage collection.  
+ <a href="a00009.html#details">More...</a></p>
+
+<p><code>#include <concurrent_hash_map.h></code></p>
+<div class="dynheader">
+Inheritance diagram for tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00009.png" usemap="#tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor_map" alt=""/>
+  <map id="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor_map" name="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor_map">
+<area href="a00047.html" title="Combines data access, locking, and garbage collection. " alt="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor" shape="rect" coords="0,56,488,80"/>
+</map>
+ </div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a850178bbdcdbc4cf5955cab37eb8c42c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a850178bbdcdbc4cf5955cab37eb8c42c"></a>
+typedef <br class="typebreak"/>
+concurrent_hash_map::value_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00009.html#a850178bbdcdbc4cf5955cab37eb8c42c">value_type</a></td></tr>
+<tr class="memdesc:a850178bbdcdbc4cf5955cab37eb8c42c"><td class="mdescLeft"> </td><td class="mdescRight">Type of value. <br/></td></tr>
+<tr class="separator:a850178bbdcdbc4cf5955cab37eb8c42c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_types_a00047"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00047')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td></tr>
+<tr class="memitem:aa8ca5aef4ee14b7eddb64767b8cd5fda inherit pub_types_a00047"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa8ca5aef4ee14b7eddb64767b8cd5fda"></a>
+typedef const <br class="typebreak"/>
+concurrent_hash_map::value_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00047.html#aa8ca5aef4ee14b7eddb64767b8cd5fda">value_type</a></td></tr>
+<tr class="memdesc:aa8ca5aef4ee14b7eddb64767b8cd5fda inherit pub_types_a00047"><td class="mdescLeft"> </td><td class="mdescRight">Type of value. <br/></td></tr>
+<tr class="separator:aa8ca5aef4ee14b7eddb64767b8cd5fda inherit pub_types_a00047"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a4e03905a33fbdafdb99113cc68d2bd4b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4e03905a33fbdafdb99113cc68d2bd4b"></a>
+reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00009.html#a4e03905a33fbdafdb99113cc68d2bd4b">operator*</a> () const </td></tr>
+<tr class="memdesc:a4e03905a33fbdafdb99113cc68d2bd4b"><td class="mdescLeft"> </td><td class="mdescRight">Return reference to associated value in hash table. <br/></td></tr>
+<tr class="separator:a4e03905a33fbdafdb99113cc68d2bd4b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab04f73bd4a4ca7df0dc91a7b4d66f987"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab04f73bd4a4ca7df0dc91a7b4d66f987"></a>
+pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00009.html#ab04f73bd4a4ca7df0dc91a7b4d66f987">operator-></a> () const </td></tr>
+<tr class="memdesc:ab04f73bd4a4ca7df0dc91a7b4d66f987"><td class="mdescLeft"> </td><td class="mdescRight">Return pointer to associated value in hash table. <br/></td></tr>
+<tr class="separator:ab04f73bd4a4ca7df0dc91a7b4d66f987"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_methods_a00047"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00047')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td></tr>
+<tr class="memitem:a6299b523d2ae8e2613f1bc160ca99b85 inherit pub_methods_a00047"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6299b523d2ae8e2613f1bc160ca99b85"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00047.html#a6299b523d2ae8e2613f1bc160ca99b85">empty</a> () const </td></tr>
+<tr class="memdesc:a6299b523d2ae8e2613f1bc160ca99b85 inherit pub_methods_a00047"><td class="mdescLeft"> </td><td class="mdescRight">True if result is empty. <br/></td></tr>
+<tr class="separator:a6299b523d2ae8e2613f1bc160ca99b85 inherit pub_methods_a00047"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a18390cb369369d72bdf7c867755b5190 inherit pub_methods_a00047"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18390cb369369d72bdf7c867755b5190"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00047.html#a18390cb369369d72bdf7c867755b5190">release</a> ()</td></tr>
+<tr class="memdesc:a18390cb369369d72bdf7c867755b5190 inherit pub_methods_a00047"><td class="mdescLeft"> </td><td class="mdescRight">Set to null. <br/></td></tr>
+<tr class="separator:a18390cb369369d72bdf7c867755b5190 inherit pub_methods_a00047"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8adf04e33e7c8c876ba849f26807713a inherit pub_methods_a00047"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8adf04e33e7c8c876ba849f26807713a"></a>
+const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00047.html#a8adf04e33e7c8c876ba849f26807713a">operator*</a> () const </td></tr>
+<tr class="memdesc:a8adf04e33e7c8c876ba849f26807713a inherit pub_methods_a00047"><td class="mdescLeft"> </td><td class="mdescRight">Return reference to associated value in hash table. <br/></td></tr>
+<tr class="separator:a8adf04e33e7c8c876ba849f26807713a inherit pub_methods_a00047"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a28fa9b9e6c35d7e80217e69a7afe1ee5 inherit pub_methods_a00047"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28fa9b9e6c35d7e80217e69a7afe1ee5"></a>
+const_pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00047.html#a28fa9b9e6c35d7e80217e69a7afe1ee5">operator-></a> () const </td></tr>
+<tr class="memdesc:a28fa9b9e6c35d7e80217e69a7afe1ee5 inherit pub_methods_a00047"><td class="mdescLeft"> </td><td class="mdescRight">Return pointer to associated value in hash table. <br/></td></tr>
+<tr class="separator:a28fa9b9e6c35d7e80217e69a7afe1ee5 inherit pub_methods_a00047"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7b26d22d228cf0d8678c9b346c63752c inherit pub_methods_a00047"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b26d22d228cf0d8678c9b346c63752c"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00047.html#a7b26d22d228cf0d8678c9b346c63752c">const_accessor</a> ()</td></tr>
+<tr class="memdesc:a7b26d22d228cf0d8678c9b346c63752c inherit pub_methods_a00047"><td class="mdescLeft"> </td><td class="mdescRight">Create empty result. <br/></td></tr>
+<tr class="separator:a7b26d22d228cf0d8678c9b346c63752c inherit pub_methods_a00047"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afbc0c85a146c912b9a0f94a7695957c7 inherit pub_methods_a00047"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbc0c85a146c912b9a0f94a7695957c7"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00047.html#afbc0c85a146c912b9a0f94a7695957c7">~const_accessor</a> ()</td></tr>
+<tr class="memdesc:afbc0c85a146c912b9a0f94a7695957c7 inherit pub_methods_a00047"><td class="mdescLeft"> </td><td class="mdescRight">Destroy result after releasing the underlying reference. <br/></td></tr>
+<tr class="separator:afbc0c85a146c912b9a0f94a7695957c7 inherit pub_methods_a00047"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_methods_a00047"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00047')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td></tr>
+<tr class="memitem:a05b74d408d8cd7773f7b5edfef97da1b inherit pro_methods_a00047"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a05b74d408d8cd7773f7b5edfef97da1b"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>is_writer</b> ()</td></tr>
+<tr class="separator:a05b74d408d8cd7773f7b5edfef97da1b inherit pro_methods_a00047"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pro_attribs_a00047"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00047')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td></tr>
+<tr class="memitem:ac9b96f45483ddbff95a95e8e666a8f28 inherit pro_attribs_a00047"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac9b96f45483ddbff95a95e8e666a8f28"></a>
+<a class="el" href="a00083.html">node</a> * </td><td class="memItemRight" valign="bottom"><b>my_node</b></td></tr>
+<tr class="separator:ac9b96f45483ddbff95a95e8e666a8f28 inherit pro_attribs_a00047"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5034084f595666b47734f99a6eaefa9f inherit pro_attribs_a00047"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5034084f595666b47734f99a6eaefa9f"></a>
+hashcode_t </td><td class="memItemRight" valign="bottom"><b>my_hash</b></td></tr>
+<tr class="separator:a5034084f595666b47734f99a6eaefa9f inherit pro_attribs_a00047"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><h3>template<typename Key, typename T, typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >><br/>
+class tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor</h3>
+
+<p>Allows write access to elements and combines data access, locking, and garbage collection. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>concurrent_hash_map.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00010.png b/doc/html/a00009.png
similarity index 100%
rename from doc/html/a00010.png
rename to doc/html/a00009.png
diff --git a/doc/html/a00010.html b/doc/html/a00010.html
index bffa0d9..d521eed 100644
--- a/doc/html/a00010.html
+++ b/doc/html/a00010.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor Class Reference</title>
+<title>tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor_not_used Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,109 +33,31 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00043.html">concurrent_hash_map</a></li><li class="navelem"><a class="el" href="a00010.html">accessor</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00036.html">concurrent_hash_map</a></li><li class="navelem"><a class="el" href="a00010.html">accessor_not_used</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00369.html">List of all members</a>  </div>
+<a href="a00357.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor Class Reference</div>  </div>
+<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor_not_used Struct Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Allows write access to elements and combines data access, locking, and garbage collection.  
- <a href="a00010.html#details">More...</a></p>
-
-<p><code>#include <concurrent_hash_map.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00010.png" usemap="#tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor_map" alt=""/>
-  <map id="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor_map" name="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor_map">
-<area href="a00054.html" title="Combines data access, locking, and garbage collection. " alt="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor" shape="rect" coords="0,56,488,80"/>
-</map>
- </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a850178bbdcdbc4cf5955cab37eb8c42c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a850178bbdcdbc4cf5955cab37eb8c42c"></a>
-typedef <br class="typebreak"/>
-concurrent_hash_map::value_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00010.html#a850178bbdcdbc4cf5955cab37eb8c42c">value_type</a></td></tr>
-<tr class="memdesc:a850178bbdcdbc4cf5955cab37eb8c42c"><td class="mdescLeft"> </td><td class="mdescRight">Type of value. <br/></td></tr>
-<tr class="separator:a850178bbdcdbc4cf5955cab37eb8c42c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00054"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00054')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td></tr>
-<tr class="memitem:aa8ca5aef4ee14b7eddb64767b8cd5fda inherit pub_types_a00054"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa8ca5aef4ee14b7eddb64767b8cd5fda"></a>
-typedef const <br class="typebreak"/>
-concurrent_hash_map::value_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00054.html#aa8ca5aef4ee14b7eddb64767b8cd5fda">value_type</a></td></tr>
-<tr class="memdesc:aa8ca5aef4ee14b7eddb64767b8cd5fda inherit pub_types_a00054"><td class="mdescLeft"> </td><td class="mdescRight">Type of value. <br/></td></tr>
-<tr class="separator:aa8ca5aef4ee14b7eddb64767b8cd5fda inherit pub_types_a00054"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a4e03905a33fbdafdb99113cc68d2bd4b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4e03905a33fbdafdb99113cc68d2bd4b"></a>
-reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00010.html#a4e03905a33fbdafdb99113cc68d2bd4b">operator*</a> () const </td></tr>
-<tr class="memdesc:a4e03905a33fbdafdb99113cc68d2bd4b"><td class="mdescLeft"> </td><td class="mdescRight">Return reference to associated value in hash table. <br/></td></tr>
-<tr class="separator:a4e03905a33fbdafdb99113cc68d2bd4b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab04f73bd4a4ca7df0dc91a7b4d66f987"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab04f73bd4a4ca7df0dc91a7b4d66f987"></a>
-pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00010.html#ab04f73bd4a4ca7df0dc91a7b4d66f987">operator-></a> () const </td></tr>
-<tr class="memdesc:ab04f73bd4a4ca7df0dc91a7b4d66f987"><td class="mdescLeft"> </td><td class="mdescRight">Return pointer to associated value in hash table. <br/></td></tr>
-<tr class="separator:ab04f73bd4a4ca7df0dc91a7b4d66f987"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00054"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00054')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td></tr>
-<tr class="memitem:a6299b523d2ae8e2613f1bc160ca99b85 inherit pub_methods_a00054"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6299b523d2ae8e2613f1bc160ca99b85"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00054.html#a6299b523d2ae8e2613f1bc160ca99b85">empty</a> () const </td></tr>
-<tr class="memdesc:a6299b523d2ae8e2613f1bc160ca99b85 inherit pub_methods_a00054"><td class="mdescLeft"> </td><td class="mdescRight">True if result is empty. <br/></td></tr>
-<tr class="separator:a6299b523d2ae8e2613f1bc160ca99b85 inherit pub_methods_a00054"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a18390cb369369d72bdf7c867755b5190 inherit pub_methods_a00054"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18390cb369369d72bdf7c867755b5190"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00054.html#a18390cb369369d72bdf7c867755b5190">release</a> ()</td></tr>
-<tr class="memdesc:a18390cb369369d72bdf7c867755b5190 inherit pub_methods_a00054"><td class="mdescLeft"> </td><td class="mdescRight">Set to null. <br/></td></tr>
-<tr class="separator:a18390cb369369d72bdf7c867755b5190 inherit pub_methods_a00054"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8adf04e33e7c8c876ba849f26807713a inherit pub_methods_a00054"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8adf04e33e7c8c876ba849f26807713a"></a>
-const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00054.html#a8adf04e33e7c8c876ba849f26807713a">operator*</a> () const </td></tr>
-<tr class="memdesc:a8adf04e33e7c8c876ba849f26807713a inherit pub_methods_a00054"><td class="mdescLeft"> </td><td class="mdescRight">Return reference to associated value in hash table. <br/></td></tr>
-<tr class="separator:a8adf04e33e7c8c876ba849f26807713a inherit pub_methods_a00054"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a28fa9b9e6c35d7e80217e69a7afe1ee5 inherit pub_methods_a00054"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28fa9b9e6c35d7e80217e69a7afe1ee5"></a>
-const_pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00054.html#a28fa9b9e6c35d7e80217e69a7afe1ee5">operator-></a> () const </td></tr>
-<tr class="memdesc:a28fa9b9e6c35d7e80217e69a7afe1ee5 inherit pub_methods_a00054"><td class="mdescLeft"> </td><td class="mdescRight">Return pointer to associated value in hash table. <br/></td></tr>
-<tr class="separator:a28fa9b9e6c35d7e80217e69a7afe1ee5 inherit pub_methods_a00054"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7b26d22d228cf0d8678c9b346c63752c inherit pub_methods_a00054"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b26d22d228cf0d8678c9b346c63752c"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00054.html#a7b26d22d228cf0d8678c9b346c63752c">const_accessor</a> ()</td></tr>
-<tr class="memdesc:a7b26d22d228cf0d8678c9b346c63752c inherit pub_methods_a00054"><td class="mdescLeft"> </td><td class="mdescRight">Create empty result. <br/></td></tr>
-<tr class="separator:a7b26d22d228cf0d8678c9b346c63752c inherit pub_methods_a00054"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afbc0c85a146c912b9a0f94a7695957c7 inherit pub_methods_a00054"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbc0c85a146c912b9a0f94a7695957c7"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00054.html#afbc0c85a146c912b9a0f94a7695957c7">~const_accessor</a> ()</td></tr>
-<tr class="memdesc:afbc0c85a146c912b9a0f94a7695957c7 inherit pub_methods_a00054"><td class="mdescLeft"> </td><td class="mdescRight">Destroy result after releasing the underlying reference. <br/></td></tr>
-<tr class="separator:afbc0c85a146c912b9a0f94a7695957c7 inherit pub_methods_a00054"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pro_methods_a00054"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00054')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td></tr>
-<tr class="memitem:a05b74d408d8cd7773f7b5edfef97da1b inherit pro_methods_a00054"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a05b74d408d8cd7773f7b5edfef97da1b"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>is_writer</b> ()</td></tr>
-<tr class="separator:a05b74d408d8cd7773f7b5edfef97da1b inherit pro_methods_a00054"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_attribs_a00054"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00054')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td></tr>
-<tr class="memitem:ac9b96f45483ddbff95a95e8e666a8f28 inherit pro_attribs_a00054"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac9b96f45483ddbff95a95e8e666a8f28"></a>
-<a class="el" href="a00100.html">node</a> * </td><td class="memItemRight" valign="bottom"><b>my_node</b></td></tr>
-<tr class="separator:ac9b96f45483ddbff95a95e8e666a8f28 inherit pro_attribs_a00054"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5034084f595666b47734f99a6eaefa9f inherit pro_attribs_a00054"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5034084f595666b47734f99a6eaefa9f"></a>
-hashcode_t </td><td class="memItemRight" valign="bottom"><b>my_hash</b></td></tr>
-<tr class="separator:a5034084f595666b47734f99a6eaefa9f inherit pro_attribs_a00054"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a28b496c90f07e4557a6dfa5a8dd3f4e1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28b496c90f07e4557a6dfa5a8dd3f4e1"></a>
+void </td><td class="memItemRight" valign="bottom"><b>release</b> ()</td></tr>
+<tr class="separator:a28b496c90f07e4557a6dfa5a8dd3f4e1"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename Key, typename T, typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >><br/>
-class tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor</h3>
-
-<p>Allows write access to elements and combines data access, locking, and garbage collection. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
+<hr/>The documentation for this struct was generated from the following file:<ul>
 <li>concurrent_hash_map.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00011.html b/doc/html/a00011.html
index 425b6e8..7d6aee2 100644
--- a/doc/html/a00011.html
+++ b/doc/html/a00011.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor_not_used Struct Reference</title>
+<title>tbb::interface6::aggregator Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,31 +33,90 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00043.html">concurrent_hash_map</a></li><li class="navelem"><a class="el" href="a00011.html">accessor_not_used</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00011.html">aggregator</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00370.html">List of all members</a>  </div>
+<a href="a00376.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor_not_used Struct Reference</div>  </div>
+<div class="title">tbb::interface6::aggregator Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
+
+<p>Basic aggregator interface.  
+ <a href="a00011.html#details">More...</a></p>
+
+<p><code>#include <aggregator.h></code></p>
+<div class="dynheader">
+Inheritance diagram for tbb::interface6::aggregator:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00011.png" usemap="#tbb::interface6::aggregator_map" alt=""/>
+  <map id="tbb::interface6::aggregator_map" name="tbb::interface6::aggregator_map">
+<area href="a00012.html" alt="tbb::interface6::aggregator_ext< internal::basic_handler >" shape="rect" coords="0,0,335,24"/>
+</map>
+ </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a28b496c90f07e4557a6dfa5a8dd3f4e1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28b496c90f07e4557a6dfa5a8dd3f4e1"></a>
-void </td><td class="memItemRight" valign="bottom"><b>release</b> ()</td></tr>
-<tr class="separator:a28b496c90f07e4557a6dfa5a8dd3f4e1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa7cc924b6f0d17578d61fd9002f59f84"><td class="memTemplParams" colspan="2">template<typename Body > </td></tr>
+<tr class="memitem:aa7cc924b6f0d17578d61fd9002f59f84"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00011.html#aa7cc924b6f0d17578d61fd9002f59f84">execute</a> (const Body &b)</td></tr>
+<tr class="memdesc:aa7cc924b6f0d17578d61fd9002f59f84"><td class="mdescLeft"> </td><td class="mdescRight">BASIC INTERFACE: Enter a function for exclusive execution by the aggregator.  <a href="#aa7cc924b6f0d17578d61fd9002f59f84">More...</a><br/></td></tr>
+<tr class="separator:aa7cc924b6f0d17578d61fd9002f59f84"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_methods_a00012"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00012')"><img src="closed.png" alt="-"/> Private Member Functions inherited from <a class="el" href="a00012.html">tbb::interface6::aggregator_ext< internal::basic_handler ></a></td></tr>
+<tr class="memitem:a8ae120a21264cc1ea0a9cfafaa0634e4 inherit pub_methods_a00012"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8ae120a21264cc1ea0a9cfafaa0634e4"></a>
+ </td><td class="memItemRight" valign="bottom"><b>aggregator_ext</b> (const <a class="el" href="a00019.html">internal::basic_handler</a> &h)</td></tr>
+<tr class="separator:a8ae120a21264cc1ea0a9cfafaa0634e4 inherit pub_methods_a00012"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae55b16ec6af204aa00d6a716fccec9f7 inherit pub_methods_a00012"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00012.html#ae55b16ec6af204aa00d6a716fccec9f7">process</a> (<a class="el" href="a00013.html">aggregator_operation</a> *op)</td></tr>
+<tr class="memdesc:ae55b16ec6af204aa00d6a716fccec9f7 inherit pub_methods_a00012"><td class="mdescLeft"> </td><td class="mdescRight">EXPERT INTERFACE: Enter a user-made operation into the aggregator's mailbox.  <a href="#ae55b16ec6af204aa00d6a716fccec9f7">More...</a><br/></td></tr>
+<tr class="separator:ae55b16ec6af204aa00d6a716fccec9f7 inherit pub_methods_a00012"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad376e5c31d10e885f33964592aa629d4 inherit pro_methods_a00012"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00012.html#ad376e5c31d10e885f33964592aa629d4">execute_impl</a> (<a class="el" href="a00013.html">aggregator_operation</a> &op)</td></tr>
+<tr class="separator:ad376e5c31d10e885f33964592aa629d4 inherit pro_methods_a00012"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<hr/>The documentation for this struct was generated from the following file:<ul>
-<li>concurrent_hash_map.h</li>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Basic aggregator interface. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="aa7cc924b6f0d17578d61fd9002f59f84"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Body > </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::interface6::aggregator::execute </td>
+          <td>(</td>
+          <td class="paramtype">const Body & </td>
+          <td class="paramname"><em>b</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>BASIC INTERFACE: Enter a function for exclusive execution by the aggregator. </p>
+<p>The calling thread stores the function object in a basic_operation and places the operation in the aggregator's mailbox </p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>aggregator.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00012.png b/doc/html/a00011.png
similarity index 100%
copy from doc/html/a00012.png
copy to doc/html/a00011.png
diff --git a/doc/html/a00012.html b/doc/html/a00012.html
index bfcd6a7..14122c7 100644
--- a/doc/html/a00012.html
+++ b/doc/html/a00012.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface6::aggregator Class Reference</title>
+<title>tbb::interface6::aggregator_ext< handler_type > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,68 +33,94 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00012.html">aggregator</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00012.html">aggregator_ext</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00390.html">List of all members</a>  </div>
+<a href="#pro-methods">Protected Member Functions</a> |
+<a href="a00375.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface6::aggregator Class Reference</div>  </div>
+<div class="title">tbb::interface6::aggregator_ext< handler_type > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>Basic aggregator interface.  
+<p>Aggregator base class and expert interface.  
  <a href="a00012.html#details">More...</a></p>
 
 <p><code>#include <aggregator.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::interface6::aggregator:</div>
+Inheritance diagram for tbb::interface6::aggregator_ext< handler_type >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00012.png" usemap="#tbb::interface6::aggregator_map" alt=""/>
-  <map id="tbb::interface6::aggregator_map" name="tbb::interface6::aggregator_map">
-<area href="a00013.html" alt="tbb::interface6::aggregator_ext< internal::basic_handler >" shape="rect" coords="0,0,335,24"/>
+  <img src="a00012.png" usemap="#tbb::interface6::aggregator_ext< handler_type >_map" alt=""/>
+  <map id="tbb::interface6::aggregator_ext< handler_type >_map" name="tbb::interface6::aggregator_ext< handler_type >_map">
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:aa7cc924b6f0d17578d61fd9002f59f84"><td class="memTemplParams" colspan="2">template<typename Body > </td></tr>
-<tr class="memitem:aa7cc924b6f0d17578d61fd9002f59f84"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00012.html#aa7cc924b6f0d17578d61fd9002f59f84">execute</a> (const Body &b)</td></tr>
-<tr class="memdesc:aa7cc924b6f0d17578d61fd9002f59f84"><td class="mdescLeft"> </td><td class="mdescRight">BASIC INTERFACE: Enter a function for exclusive execution by the aggregator.  <a href="#aa7cc924b6f0d17578d61fd9002f59f84">More...</a><br/></td></tr>
-<tr class="separator:aa7cc924b6f0d17578d61fd9002f59f84"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8ae120a21264cc1ea0a9cfafaa0634e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8ae120a21264cc1ea0a9cfafaa0634e4"></a>
+ </td><td class="memItemRight" valign="bottom"><b>aggregator_ext</b> (const handler_type &h)</td></tr>
+<tr class="separator:a8ae120a21264cc1ea0a9cfafaa0634e4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae55b16ec6af204aa00d6a716fccec9f7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00012.html#ae55b16ec6af204aa00d6a716fccec9f7">process</a> (<a class="el" href="a00013.html">aggregator_operation</a> *op)</td></tr>
+<tr class="memdesc:ae55b16ec6af204aa00d6a716fccec9f7"><td class="mdescLeft"> </td><td class="mdescRight">EXPERT INTERFACE: Enter a user-made operation into the aggregator's mailbox.  <a href="#ae55b16ec6af204aa00d6a716fccec9f7">More...</a><br/></td></tr>
+<tr class="separator:ae55b16ec6af204aa00d6a716fccec9f7"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pub_methods_a00013"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00013')"><img src="closed.png" alt="-"/> Private Member Functions inherited from <a class="el" href="a00013.html">tbb::interface6::aggregator_ext< internal::basic_handler ></a></td></tr>
-<tr class="memitem:a8ae120a21264cc1ea0a9cfafaa0634e4 inherit pub_methods_a00013"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8ae120a21264cc1ea0a9cfafaa0634e4"></a>
- </td><td class="memItemRight" valign="bottom"><b>aggregator_ext</b> (const <a class="el" href="a00021.html">internal::basic_handler</a> &h)</td></tr>
-<tr class="separator:a8ae120a21264cc1ea0a9cfafaa0634e4 inherit pub_methods_a00013"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae55b16ec6af204aa00d6a716fccec9f7 inherit pub_methods_a00013"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00013.html#ae55b16ec6af204aa00d6a716fccec9f7">process</a> (<a class="el" href="a00014.html">aggregator_operation</a> *op)</td></tr>
-<tr class="memdesc:ae55b16ec6af204aa00d6a716fccec9f7 inherit pub_methods_a00013"><td class="mdescLeft"> </td><td class="mdescRight">EXPERT INTERFACE: Enter a user-made operation into the aggregator's mailbox.  <a href="#ae55b16ec6af204aa00d6a716fccec9f7">More...</a><br/></td></tr>
-<tr class="separator:ae55b16ec6af204aa00d6a716fccec9f7 inherit pub_methods_a00013"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad376e5c31d10e885f33964592aa629d4 inherit pro_methods_a00013"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00013.html#ad376e5c31d10e885f33964592aa629d4">execute_impl</a> (<a class="el" href="a00014.html">aggregator_operation</a> &op)</td></tr>
-<tr class="separator:ad376e5c31d10e885f33964592aa629d4 inherit pro_methods_a00013"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:ad376e5c31d10e885f33964592aa629d4"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00012.html#ad376e5c31d10e885f33964592aa629d4">execute_impl</a> (<a class="el" href="a00013.html">aggregator_operation</a> &op)</td></tr>
+<tr class="separator:ad376e5c31d10e885f33964592aa629d4"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Basic aggregator interface. </p>
+<div class="textblock"><h3>template<typename handler_type><br/>
+class tbb::interface6::aggregator_ext< handler_type ></h3>
+
+<p>Aggregator base class and expert interface. </p>
+<p>An aggregator for collecting operations coming from multiple sources and executing them serially on a single thread. </p>
 </div><h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="aa7cc924b6f0d17578d61fd9002f59f84"></a>
+<a class="anchor" id="ad376e5c31d10e885f33964592aa629d4"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename handler_type> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00012.html">tbb::interface6::aggregator_ext</a>< handler_type >::execute_impl </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00013.html">aggregator_operation</a> & </td>
+          <td class="paramname"><em>op</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Place operation in mailbox, then either handle mailbox or wait for the operation to be completed by a different thread. </p>
+
+</div>
+</div>
+<a class="anchor" id="ae55b16ec6af204aa00d6a716fccec9f7"></a>
 <div class="memitem">
 <div class="memproto">
 <div class="memtemplate">
-template<typename Body > </div>
+template<typename handler_type> </div>
 <table class="mlabels">
   <tr>
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">void tbb::interface6::aggregator::execute </td>
+          <td class="memname">void <a class="el" href="a00012.html">tbb::interface6::aggregator_ext</a>< handler_type >::process </td>
           <td>(</td>
-          <td class="paramtype">const Body & </td>
-          <td class="paramname"><em>b</em>)</td><td></td>
+          <td class="paramtype"><a class="el" href="a00013.html">aggregator_operation</a> * </td>
+          <td class="paramname"><em>op</em>)</td><td></td>
           <td></td>
         </tr>
       </table>
@@ -105,8 +131,8 @@ template<typename Body > </div>
 </table>
 </div><div class="memdoc">
 
-<p>BASIC INTERFACE: Enter a function for exclusive execution by the aggregator. </p>
-<p>The calling thread stores the function object in a basic_operation and places the operation in the aggregator's mailbox </p>
+<p>EXPERT INTERFACE: Enter a user-made operation into the aggregator's mailbox. </p>
+<p>Details of user-made operations must be handled by user-provided handler </p>
 
 </div>
 </div>
@@ -116,7 +142,7 @@ template<typename Body > </div>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00012.png b/doc/html/a00012.png
index d78b2db..75772ae 100644
Binary files a/doc/html/a00012.png and b/doc/html/a00012.png differ
diff --git a/doc/html/a00013.html b/doc/html/a00013.html
index 79f34e5..a51bc44 100644
--- a/doc/html/a00013.html
+++ b/doc/html/a00013.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface6::aggregator_ext< handler_type > Class Template Reference</title>
+<title>tbb::interface6::aggregator_operation Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,94 +33,72 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00013.html">aggregator_ext</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00013.html">aggregator_operation</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-methods">Protected Member Functions</a> |
-<a href="a00389.html">List of all members</a>  </div>
+<a href="#friends">Friends</a> |
+<a href="a00374.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface6::aggregator_ext< handler_type > Class Template Reference</div>  </div>
+<div class="title">tbb::interface6::aggregator_operation Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Aggregator base class and expert interface.  
- <a href="a00013.html#details">More...</a></p>
-
-<p><code>#include <aggregator.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::interface6::aggregator_ext< handler_type >:</div>
+Inheritance diagram for tbb::interface6::aggregator_operation:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00013.png" usemap="#tbb::interface6::aggregator_ext< handler_type >_map" alt=""/>
-  <map id="tbb::interface6::aggregator_ext< handler_type >_map" name="tbb::interface6::aggregator_ext< handler_type >_map">
+  <img src="a00013.png" usemap="#tbb::interface6::aggregator_operation_map" alt=""/>
+  <map id="tbb::interface6::aggregator_operation_map" name="tbb::interface6::aggregator_operation_map">
+<area href="a00021.html" alt="tbb::interface6::internal::basic_operation_base" shape="rect" coords="0,56,289,80"/>
+<area href="a00020.html" alt="tbb::interface6::internal::basic_operation< Body >" shape="rect" coords="0,112,289,136"/>
 </map>
  </div></div>
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a855dc55cb1823ed4845f4ed6b0a87700"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>aggregator_operation_status</b> { <b>agg_waiting</b> =0, 
+<b>agg_finished</b>
+ }</td></tr>
+<tr class="separator:a855dc55cb1823ed4845f4ed6b0a87700"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a8ae120a21264cc1ea0a9cfafaa0634e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8ae120a21264cc1ea0a9cfafaa0634e4"></a>
- </td><td class="memItemRight" valign="bottom"><b>aggregator_ext</b> (const handler_type &h)</td></tr>
-<tr class="separator:a8ae120a21264cc1ea0a9cfafaa0634e4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae55b16ec6af204aa00d6a716fccec9f7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00013.html#ae55b16ec6af204aa00d6a716fccec9f7">process</a> (<a class="el" href="a00014.html">aggregator_operation</a> *op)</td></tr>
-<tr class="memdesc:ae55b16ec6af204aa00d6a716fccec9f7"><td class="mdescLeft"> </td><td class="mdescRight">EXPERT INTERFACE: Enter a user-made operation into the aggregator's mailbox.  <a href="#ae55b16ec6af204aa00d6a716fccec9f7">More...</a><br/></td></tr>
-<tr class="separator:ae55b16ec6af204aa00d6a716fccec9f7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adc0e032aa604f1da85ffc7ec269b157f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adc0e032aa604f1da85ffc7ec269b157f"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00013.html#adc0e032aa604f1da85ffc7ec269b157f">start</a> ()</td></tr>
+<tr class="memdesc:adc0e032aa604f1da85ffc7ec269b157f"><td class="mdescLeft"> </td><td class="mdescRight">Call start before handling this operation. <br/></td></tr>
+<tr class="separator:adc0e032aa604f1da85ffc7ec269b157f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac7edadfe74f475783f3b429904e7010a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00013.html#ac7edadfe74f475783f3b429904e7010a">finish</a> ()</td></tr>
+<tr class="memdesc:ac7edadfe74f475783f3b429904e7010a"><td class="mdescLeft"> </td><td class="mdescRight">Call finish when done handling this operation.  <a href="#ac7edadfe74f475783f3b429904e7010a">More...</a><br/></td></tr>
+<tr class="separator:ac7edadfe74f475783f3b429904e7010a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acbce3d13545770501b54df153bf1e690"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acbce3d13545770501b54df153bf1e690"></a>
+<a class="el" href="a00013.html">aggregator_operation</a> * </td><td class="memItemRight" valign="bottom"><b>next</b> ()</td></tr>
+<tr class="separator:acbce3d13545770501b54df153bf1e690"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a03cf9fad0ca21da61b83325a50e17d0b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a03cf9fad0ca21da61b83325a50e17d0b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_next</b> (<a class="el" href="a00013.html">aggregator_operation</a> *n)</td></tr>
+<tr class="separator:a03cf9fad0ca21da61b83325a50e17d0b"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:ad376e5c31d10e885f33964592aa629d4"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00013.html#ad376e5c31d10e885f33964592aa629d4">execute_impl</a> (<a class="el" href="a00014.html">aggregator_operation</a> &op)</td></tr>
-<tr class="separator:ad376e5c31d10e885f33964592aa629d4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a7f6e7d315f893b1b66d06ffdad12038e"><td class="memTemplParams" colspan="2"><a class="anchor" id="a7f6e7d315f893b1b66d06ffdad12038e"></a>
+template<typename handler_type > </td></tr>
+<tr class="memitem:a7f6e7d315f893b1b66d06ffdad12038e"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>aggregator_ext</b></td></tr>
+<tr class="separator:a7f6e7d315f893b1b66d06ffdad12038e"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename handler_type><br/>
-class tbb::interface6::aggregator_ext< handler_type ></h3>
-
-<p>Aggregator base class and expert interface. </p>
-<p>An aggregator for collecting operations coming from multiple sources and executing them serially on a single thread. </p>
-</div><h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="ad376e5c31d10e885f33964592aa629d4"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename handler_type> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00013.html">tbb::interface6::aggregator_ext</a>< handler_type >::execute_impl </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00014.html">aggregator_operation</a> & </td>
-          <td class="paramname"><em>op</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Place operation in mailbox, then either handle mailbox or wait for the operation to be completed by a different thread. </p>
-
-</div>
-</div>
-<a class="anchor" id="ae55b16ec6af204aa00d6a716fccec9f7"></a>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="ac7edadfe74f475783f3b429904e7010a"></a>
 <div class="memitem">
 <div class="memproto">
-<div class="memtemplate">
-template<typename handler_type> </div>
 <table class="mlabels">
   <tr>
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">void <a class="el" href="a00013.html">tbb::interface6::aggregator_ext</a>< handler_type >::process </td>
+          <td class="memname">void tbb::interface6::aggregator_operation::finish </td>
           <td>(</td>
-          <td class="paramtype"><a class="el" href="a00014.html">aggregator_operation</a> * </td>
-          <td class="paramname"><em>op</em>)</td><td></td>
+          <td class="paramname">)</td><td></td>
           <td></td>
         </tr>
       </table>
@@ -131,8 +109,8 @@ template<typename handler_type> </div>
 </table>
 </div><div class="memdoc">
 
-<p>EXPERT INTERFACE: Enter a user-made operation into the aggregator's mailbox. </p>
-<p>Details of user-made operations must be handled by user-provided handler </p>
+<p>Call finish when done handling this operation. </p>
+<p>The operation will be released to its originating thread, and possibly deleted. </p>
 
 </div>
 </div>
@@ -142,7 +120,7 @@ template<typename handler_type> </div>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00013.png b/doc/html/a00013.png
index 75772ae..70eef83 100644
Binary files a/doc/html/a00013.png and b/doc/html/a00013.png differ
diff --git a/doc/html/a00014.html b/doc/html/a00014.html
index 77a5594..e0121d4 100644
--- a/doc/html/a00014.html
+++ b/doc/html/a00014.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface6::aggregator_operation Class Reference</title>
+<title>tbb::aligned_space< T, N > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,94 +33,47 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00014.html">aggregator_operation</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00014.html">aligned_space</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#friends">Friends</a> |
-<a href="a00388.html">List of all members</a>  </div>
+<a href="a00261.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface6::aggregator_operation Class Reference</div>  </div>
+<div class="title">tbb::aligned_space< T, N > Class Template Reference<div class="ingroups"><a class="el" href="a00254.html">Memory Allocation</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="dynheader">
-Inheritance diagram for tbb::interface6::aggregator_operation:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00014.png" usemap="#tbb::interface6::aggregator_operation_map" alt=""/>
-  <map id="tbb::interface6::aggregator_operation_map" name="tbb::interface6::aggregator_operation_map">
-<area href="a00023.html" alt="tbb::interface6::internal::basic_operation_base" shape="rect" coords="0,56,289,80"/>
-<area href="a00022.html" alt="tbb::interface6::internal::basic_operation< Body >" shape="rect" coords="0,112,289,136"/>
-</map>
- </div></div>
+
+<p>Block of space aligned sufficiently to construct an array T with N elements.  
+ <a href="a00014.html#details">More...</a></p>
+
+<p><code>#include <aligned_space.h></code></p>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a855dc55cb1823ed4845f4ed6b0a87700"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>aggregator_operation_status</b> { <b>agg_waiting</b> =0, 
-<b>agg_finished</b>
- }</td></tr>
-<tr class="separator:a855dc55cb1823ed4845f4ed6b0a87700"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:adc0e032aa604f1da85ffc7ec269b157f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adc0e032aa604f1da85ffc7ec269b157f"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00014.html#adc0e032aa604f1da85ffc7ec269b157f">start</a> ()</td></tr>
-<tr class="memdesc:adc0e032aa604f1da85ffc7ec269b157f"><td class="mdescLeft"> </td><td class="mdescRight">Call start before handling this operation. <br/></td></tr>
-<tr class="separator:adc0e032aa604f1da85ffc7ec269b157f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac7edadfe74f475783f3b429904e7010a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00014.html#ac7edadfe74f475783f3b429904e7010a">finish</a> ()</td></tr>
-<tr class="memdesc:ac7edadfe74f475783f3b429904e7010a"><td class="mdescLeft"> </td><td class="mdescRight">Call finish when done handling this operation.  <a href="#ac7edadfe74f475783f3b429904e7010a">More...</a><br/></td></tr>
-<tr class="separator:ac7edadfe74f475783f3b429904e7010a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acbce3d13545770501b54df153bf1e690"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acbce3d13545770501b54df153bf1e690"></a>
-<a class="el" href="a00014.html">aggregator_operation</a> * </td><td class="memItemRight" valign="bottom"><b>next</b> ()</td></tr>
-<tr class="separator:acbce3d13545770501b54df153bf1e690"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a03cf9fad0ca21da61b83325a50e17d0b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a03cf9fad0ca21da61b83325a50e17d0b"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_next</b> (<a class="el" href="a00014.html">aggregator_operation</a> *n)</td></tr>
-<tr class="separator:a03cf9fad0ca21da61b83325a50e17d0b"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:a7f6e7d315f893b1b66d06ffdad12038e"><td class="memTemplParams" colspan="2"><a class="anchor" id="a7f6e7d315f893b1b66d06ffdad12038e"></a>
-template<typename handler_type > </td></tr>
-<tr class="memitem:a7f6e7d315f893b1b66d06ffdad12038e"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>aggregator_ext</b></td></tr>
-<tr class="separator:a7f6e7d315f893b1b66d06ffdad12038e"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="ac7edadfe74f475783f3b429904e7010a"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::interface6::aggregator_operation::finish </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
+<tr class="memitem:a3525dbbac0d4eaedfe18bc57b7760857"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3525dbbac0d4eaedfe18bc57b7760857"></a>
+T * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00014.html#a3525dbbac0d4eaedfe18bc57b7760857">begin</a> ()</td></tr>
+<tr class="memdesc:a3525dbbac0d4eaedfe18bc57b7760857"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to beginning of array. <br/></td></tr>
+<tr class="separator:a3525dbbac0d4eaedfe18bc57b7760857"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae95620e1159984a2670bd418ed4748d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae95620e1159984a2670bd418ed4748d0"></a>
+T * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00014.html#ae95620e1159984a2670bd418ed4748d0">end</a> ()</td></tr>
+<tr class="memdesc:ae95620e1159984a2670bd418ed4748d0"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to one past last element in array. <br/></td></tr>
+<tr class="separator:ae95620e1159984a2670bd418ed4748d0"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-</div><div class="memdoc">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><h3>template<typename T, size_t N = 1><br/>
+class tbb::aligned_space< T, N ></h3>
 
-<p>Call finish when done handling this operation. </p>
-<p>The operation will be released to its originating thread, and possibly deleted. </p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>aggregator.h</li>
+<p>Block of space aligned sufficiently to construct an array T with N elements. </p>
+<p>The elements are not constructed or destroyed by this class. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>aligned_space.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00014.png b/doc/html/a00014.png
deleted file mode 100644
index 70eef83..0000000
Binary files a/doc/html/a00014.png and /dev/null differ
diff --git a/doc/html/a00015.html b/doc/html/a00015.html
index c952cc4..db724f8 100644
--- a/doc/html/a00015.html
+++ b/doc/html/a00015.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::aligned_space< T, N > Class Template Reference</title>
+<title>tbb::atomic< T > Struct Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,47 +33,56 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00015.html">aligned_space</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00015.html">atomic</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00264.html">List of all members</a>  </div>
+<a href="a00262.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::aligned_space< T, N > Class Template Reference<div class="ingroups"><a class="el" href="a00257.html">Memory Allocation</a></div></div>  </div>
+<div class="title">tbb::atomic< T > Struct Template Reference<div class="ingroups"><a class="el" href="a00255.html">Synchronization</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>Block of space aligned sufficiently to construct an array T with N elements.  
+<p>Primary template for atomic.  
  <a href="a00015.html#details">More...</a></p>
 
-<p><code>#include <aligned_space.h></code></p>
+<p><code>#include <atomic.h></code></p>
+<div class="dynheader">
+Inheritance diagram for tbb::atomic< T >:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00015.png" usemap="#tbb::atomic< T >_map" alt=""/>
+  <map id="tbb::atomic< T >_map" name="tbb::atomic< T >_map">
+</map>
+ </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a3525dbbac0d4eaedfe18bc57b7760857"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3525dbbac0d4eaedfe18bc57b7760857"></a>
-T * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00015.html#a3525dbbac0d4eaedfe18bc57b7760857">begin</a> ()</td></tr>
-<tr class="memdesc:a3525dbbac0d4eaedfe18bc57b7760857"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to beginning of array. <br/></td></tr>
-<tr class="separator:a3525dbbac0d4eaedfe18bc57b7760857"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae95620e1159984a2670bd418ed4748d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae95620e1159984a2670bd418ed4748d0"></a>
-T * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00015.html#ae95620e1159984a2670bd418ed4748d0">end</a> ()</td></tr>
-<tr class="memdesc:ae95620e1159984a2670bd418ed4748d0"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to one past last element in array. <br/></td></tr>
-<tr class="separator:ae95620e1159984a2670bd418ed4748d0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8624826901f5a3267853386bf880bd88"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8624826901f5a3267853386bf880bd88"></a>
+constexpr </td><td class="memItemRight" valign="bottom"><b>atomic</b> (T arg)</td></tr>
+<tr class="separator:a8624826901f5a3267853386bf880bd88"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5942feb81281f810edddc61a48dd7a39"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5942feb81281f810edddc61a48dd7a39"></a>
+T </td><td class="memItemRight" valign="bottom"><b>operator=</b> (T rhs)</td></tr>
+<tr class="separator:a5942feb81281f810edddc61a48dd7a39"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7d65b6cae3bd11c79a8e51e25055be52"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7d65b6cae3bd11c79a8e51e25055be52"></a>
+<a class="el" href="a00015.html">atomic</a>< T > & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00015.html">atomic</a>< T > &rhs)</td></tr>
+<tr class="separator:a7d65b6cae3bd11c79a8e51e25055be52"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename T, size_t N = 1><br/>
-class tbb::aligned_space< T, N ></h3>
+<div class="textblock"><h3>template<typename T><br/>
+struct tbb::atomic< T ></h3>
 
-<p>Block of space aligned sufficiently to construct an array T with N elements. </p>
-<p>The elements are not constructed or destroyed by this class. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>aligned_space.h</li>
+<p>Primary template for atomic. </p>
+<p>See the Reference for details. </p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>atomic.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00018.png b/doc/html/a00015.png
similarity index 100%
copy from doc/html/a00018.png
copy to doc/html/a00015.png
diff --git a/doc/html/a00016.html b/doc/html/a00016.html
index 758a042..8727b02 100644
--- a/doc/html/a00016.html
+++ b/doc/html/a00016.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::internal::async_gateway< Output > Class Template Reference</title>
+<title>tbb::atomic< void * > Struct Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,64 +33,55 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00016.html">async_gateway</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00016.html">atomic< void * ></a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00367.html">List of all members</a>  </div>
+<a href="a00263.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::internal::async_gateway< Output > Class Template Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
+<div class="title">tbb::atomic< void * > Struct Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>Pure virtual template class that defines interface for async communication.  
+<p>Specialization for <a class="el" href="a00016.html" title="Specialization for atomic<void*>, for sake of not allowing arithmetic or operator->. ">atomic<void*></a>, for sake of not allowing arithmetic or operator->.  
  <a href="a00016.html#details">More...</a></p>
 
-<p><code>#include <flow_graph.h></code></p>
+<p><code>#include <atomic.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::internal::async_gateway< Output >:</div>
+Inheritance diagram for tbb::atomic< void * >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00016.png" usemap="#tbb::flow::interface7::internal::async_gateway< Output >_map" alt=""/>
-  <map id="tbb::flow::interface7::internal::async_gateway< Output >_map" name="tbb::flow::interface7::internal::async_gateway< Output >_map">
-<area href="a00017.html" title="Implements a async node. " alt="tbb::flow::interface7::async_node< Input, Output, Allocator >" shape="rect" coords="0,56,353,80"/>
+  <img src="a00016.png" usemap="#tbb::atomic< void * >_map" alt=""/>
+  <map id="tbb::atomic< void * >_map" name="tbb::atomic< void * >_map">
 </map>
  </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a9c71a50d231f333cfa20d01a90aadabb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9c71a50d231f333cfa20d01a90aadabb"></a>
-typedef Output </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:a9c71a50d231f333cfa20d01a90aadabb"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a308f7feb8ac2fc3b7cbcf4e5246e78a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a308f7feb8ac2fc3b7cbcf4e5246e78a2"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00016.html#a308f7feb8ac2fc3b7cbcf4e5246e78a2">async_try_put</a> (const output_type &i)=0</td></tr>
-<tr class="memdesc:a308f7feb8ac2fc3b7cbcf4e5246e78a2"><td class="mdescLeft"> </td><td class="mdescRight">Submit signal from Async Activity to FG. <br/></td></tr>
-<tr class="separator:a308f7feb8ac2fc3b7cbcf4e5246e78a2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4f050c912d54e3de4f3bea8f1575f9c4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4f050c912d54e3de4f3bea8f1575f9c4"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>async_reserve</b> ()=0</td></tr>
-<tr class="separator:a4f050c912d54e3de4f3bea8f1575f9c4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a31ef0c4d0871f20c925fc993ef2ba29e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a31ef0c4d0871f20c925fc993ef2ba29e"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>async_commit</b> ()=0</td></tr>
-<tr class="separator:a31ef0c4d0871f20c925fc993ef2ba29e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a744970055554db56a922b83dd1125dcf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a744970055554db56a922b83dd1125dcf"></a>
+constexpr </td><td class="memItemRight" valign="bottom"><b>atomic</b> (void *arg)</td></tr>
+<tr class="separator:a744970055554db56a922b83dd1125dcf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3da2906b224154d9961054f07b2e310b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3da2906b224154d9961054f07b2e310b"></a>
+void * </td><td class="memItemRight" valign="bottom"><b>operator=</b> (void *rhs)</td></tr>
+<tr class="separator:a3da2906b224154d9961054f07b2e310b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8cb22d05fe655337f6129dc8f3ab6783"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8cb22d05fe655337f6129dc8f3ab6783"></a>
+<a class="el" href="a00015.html">atomic</a>< void * > & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00015.html">atomic</a>< void * > &rhs)</td></tr>
+<tr class="separator:a8cb22d05fe655337f6129dc8f3ab6783"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename Output><br/>
-class tbb::flow::interface7::internal::async_gateway< Output ></h3>
+<div class="textblock"><h3>template<><br/>
+struct tbb::atomic< void * ></h3>
 
-<p>Pure virtual template class that defines interface for async communication. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<p>Specialization for <a class="el" href="a00016.html" title="Specialization for atomic<void*>, for sake of not allowing arithmetic or operator->. ">atomic<void*></a>, for sake of not allowing arithmetic or operator->. </p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>atomic.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00016.png b/doc/html/a00016.png
index dcd4220..c5aaf08 100644
Binary files a/doc/html/a00016.png and b/doc/html/a00016.png differ
diff --git a/doc/html/a00017.html b/doc/html/a00017.html
index b975dac..e89d3da 100644
--- a/doc/html/a00017.html
+++ b/doc/html/a00017.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::async_node< Input, Output, Allocator > Class Template Reference</title>
+<title>tbb::interface7::task_arena::attach Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,163 +33,28 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00017.html">async_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00144.html">task_arena</a></li><li class="navelem"><a class="el" href="a00017.html">attach</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="summary">
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-methods">Protected Member Functions</a> |
-<a href="#friends">Friends</a> |
-<a href="a00365.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::async_node< Input, Output, Allocator > Class Template Reference</div>  </div>
+<div class="title">tbb::interface7::task_arena::attach Struct Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>Implements a async node.  
+<p>Tag class used to indicate the "attaching" constructor.  
  <a href="a00017.html#details">More...</a></p>
 
-<p><code>#include <flow_graph.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::async_node< Input, Output, Allocator >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00017.png" usemap="#tbb::flow::interface7::async_node< Input, Output, Allocator >_map" alt=""/>
-  <map id="tbb::flow::interface7::async_node< Input, Output, Allocator >_map" name="tbb::flow::interface7::async_node< Input, Output, Allocator >_map">
-<area href="a00072.html" title="The base of all graph nodes. " alt="tbb::flow::interface7::graph_node" shape="rect" coords="0,56,445,80"/>
-<area href="a00016.html" title="Pure virtual template class that defines interface for async communication. " alt="tbb::flow::interface7::internal::async_gateway< Output >" shape="rect" coords="1365,56,1810,80"/>
-</map>
- </div></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a4fc13761259543a0ba2891c81d9ad85c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4fc13761259543a0ba2891c81d9ad85c"></a>
-typedef Input </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
-<tr class="separator:a4fc13761259543a0ba2891c81d9ad85c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af8d828e55a967eba0f7c87bd37f24fc2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af8d828e55a967eba0f7c87bd37f24fc2"></a>
-typedef Output </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:af8d828e55a967eba0f7c87bd37f24fc2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac55df9e53ac2a08f9a05096adee713de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac55df9e53ac2a08f9a05096adee713de"></a>
-typedef <a class="el" href="a00017.html">async_node</a>< input_type, <br class="typebreak"/>
-output_type, Allocator > </td><td class="memItemRight" valign="bottom"><b>my_class</b></td></tr>
-<tr class="separator:ac55df9e53ac2a08f9a05096adee713de"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af83684552df56da26be101d82b2b2e4e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af83684552df56da26be101d82b2b2e4e"></a>
-typedef <a class="el" href="a00142.html">sender</a>< input_type > </td><td class="memItemRight" valign="bottom"><b>predecessor_type</b></td></tr>
-<tr class="separator:af83684552df56da26be101d82b2b2e4e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0ded9c0369d0f216d0f980082a20b14b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0ded9c0369d0f216d0f980082a20b14b"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< output_type > </td><td class="memItemRight" valign="bottom"><b>successor_type</b></td></tr>
-<tr class="separator:a0ded9c0369d0f216d0f980082a20b14b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2b0a312fe56e7b8caec9a600e9cfe0e3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2b0a312fe56e7b8caec9a600e9cfe0e3"></a>
-typedef <br class="typebreak"/>
-<a class="el" href="a00016.html">internal::async_gateway</a><br class="typebreak"/>
-< output_type > </td><td class="memItemRight" valign="bottom"><b>async_gateway_type</b></td></tr>
-<tr class="separator:a2b0a312fe56e7b8caec9a600e9cfe0e3"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1485a4390d2c815ce82d032b97e31035"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1485a4390d2c815ce82d032b97e31035"></a>
-typedef internal::async_input<br class="typebreak"/>
-< input_type, Allocator, <br class="typebreak"/>
-<a class="el" href="a00016.html">async_gateway_type</a> > </td><td class="memItemRight" valign="bottom"><b>async_input_type</b></td></tr>
-<tr class="separator:a1485a4390d2c815ce82d032b97e31035"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a21aeeb8c7637c8de061c580054cf6c88"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a21aeeb8c7637c8de061c580054cf6c88"></a>
-typedef <br class="typebreak"/>
-internal::function_output<br class="typebreak"/>
-< output_type > </td><td class="memItemRight" valign="bottom"><b>async_output_type</b></td></tr>
-<tr class="separator:a21aeeb8c7637c8de061c580054cf6c88"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00016"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00016')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00016.html">tbb::flow::interface7::internal::async_gateway< Output ></a></td></tr>
-<tr class="memitem:a9c71a50d231f333cfa20d01a90aadabb inherit pub_types_a00016"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9c71a50d231f333cfa20d01a90aadabb"></a>
-typedef Output </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:a9c71a50d231f333cfa20d01a90aadabb inherit pub_types_a00016"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:aea2575eeaf4b1cc483d4d9854b47e823"><td class="memTemplParams" colspan="2"><a class="anchor" id="aea2575eeaf4b1cc483d4d9854b47e823"></a>
-template<typename Body > </td></tr>
-<tr class="memitem:aea2575eeaf4b1cc483d4d9854b47e823"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00017.html#aea2575eeaf4b1cc483d4d9854b47e823">async_node</a> (<a class="el" href="a00070.html">graph</a> &g, Body body)</td></tr>
-<tr class="memdesc:aea2575eeaf4b1cc483d4d9854b47e823"><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br/></td></tr>
-<tr class="separator:aea2575eeaf4b1cc483d4d9854b47e823"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a941e58ff009aa492f1f011947f7b04ac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a941e58ff009aa492f1f011947f7b04ac"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00017.html#a941e58ff009aa492f1f011947f7b04ac">async_node</a> (const <a class="el" href="a00017.html">async_node</a> &src)</td></tr>
-<tr class="memdesc:a941e58ff009aa492f1f011947f7b04ac"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br/></td></tr>
-<tr class="separator:a941e58ff009aa492f1f011947f7b04ac"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a39bcb91daab4ab2cb7e10efdd0b53083"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a39bcb91daab4ab2cb7e10efdd0b53083"></a>
-<a class="el" href="a00016.html">async_gateway_type</a> & </td><td class="memItemRight" valign="bottom"><b>async_gateway</b> ()</td></tr>
-<tr class="separator:a39bcb91daab4ab2cb7e10efdd0b53083"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a190dde1c28070d20b9f676bcf0483ff4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a190dde1c28070d20b9f676bcf0483ff4"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:a190dde1c28070d20b9f676bcf0483ff4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00072')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4badd313105e30f539882276353dcb8e"></a>
- </td><td class="memItemRight" valign="bottom"><b>graph_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:a30804bd6f6ea4bd4611a5121dceec431"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a30804bd6f6ea4bd4611a5121dceec431"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f))</td></tr>
-<tr class="separator:a30804bd6f6ea4bd4611a5121dceec431"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa0294c77649650f10771878a49dcaf4f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0294c77649650f10771878a49dcaf4f"></a>
-void </td><td class="memItemRight" valign="bottom"><b>extract</b> ()</td></tr>
-<tr class="separator:aa0294c77649650f10771878a49dcaf4f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a24ff97d714cfc37251d6abc1fb97976e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a24ff97d714cfc37251d6abc1fb97976e"></a>
-<a class="el" href="a00027.html">internal::broadcast_cache</a><br class="typebreak"/>
-< output_type > & </td><td class="memItemRight" valign="bottom"><b>successors</b> ()</td></tr>
-<tr class="separator:a24ff97d714cfc37251d6abc1fb97976e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a565f12fc3ce62a14156398c94f401d9c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a565f12fc3ce62a14156398c94f401d9c"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00017.html#a565f12fc3ce62a14156398c94f401d9c">async_try_put</a> (const output_type &i)</td></tr>
-<tr class="memdesc:a565f12fc3ce62a14156398c94f401d9c"><td class="mdescLeft"> </td><td class="mdescRight">Submit signal from Async Activity to FG. <br/></td></tr>
-<tr class="separator:a565f12fc3ce62a14156398c94f401d9c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a06cc7f5c86f0ead4e602a24e799ad66a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06cc7f5c86f0ead4e602a24e799ad66a"></a>
-void </td><td class="memItemRight" valign="bottom"><b>async_reserve</b> ()</td></tr>
-<tr class="separator:a06cc7f5c86f0ead4e602a24e799ad66a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1705bc756636004e615b26d857dac72f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1705bc756636004e615b26d857dac72f"></a>
-void </td><td class="memItemRight" valign="bottom"><b>async_commit</b> ()</td></tr>
-<tr class="separator:a1705bc756636004e615b26d857dac72f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00072')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac25a4633873c052047b1dd568824d055"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0</td></tr>
-<tr class="separator:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplParams" colspan="2"><a class="anchor" id="abaf9bf74ca5f2854d09f5f07337280eb"></a>
-template<typename R , typename B > </td></tr>
-<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>run_and_put_task</b></td></tr>
-<tr class="separator:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1360e38efe396058978cf3754ad620f5"></a>
-template<typename X , typename Y > </td></tr>
-<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::broadcast_cache</b></td></tr>
-<tr class="separator:a1360e38efe396058978cf3754ad620f5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplParams" colspan="2"><a class="anchor" id="acbd9ac2610587a99cd7d43344297cc49"></a>
-template<typename X , typename Y > </td></tr>
-<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::round_robin_cache</b></td></tr>
-<tr class="separator:acbd9ac2610587a99cd7d43344297cc49"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pro_attribs_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00072')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1caee1c5677047b05d18b1662ca6fdf8"></a>
-<a class="el" href="a00070.html">graph</a> & </td><td class="memItemRight" valign="bottom"><b>my_graph</b></td></tr>
-<tr class="separator:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af48cd0cd4f6e44efc3b353adb55f86a8"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>next</b></td></tr>
-<tr class="separator:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6917bffc3cb150319679bf2395e68caa"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>prev</b></td></tr>
-<tr class="separator:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
+<p><code>#include <task_arena.h></code></p>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename Input, typename Output, typename Allocator = cache_aligned_allocator<Input>><br/>
-class tbb::flow::interface7::async_node< Input, Output, Allocator ></h3>
-
-<p>Implements a async node. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<div class="textblock"><p>Tag class used to indicate the "attaching" constructor. </p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>task_arena.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00017.png b/doc/html/a00017.png
deleted file mode 100644
index 4b8b148..0000000
Binary files a/doc/html/a00017.png and /dev/null differ
diff --git a/doc/html/a00018.html b/doc/html/a00018.html
index 6433fa4..34119f7 100644
--- a/doc/html/a00018.html
+++ b/doc/html/a00018.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::atomic< T > Struct Template Reference</title>
+<title>tbb::bad_last_alloc Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,56 +33,46 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00018.html">atomic</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00018.html">bad_last_alloc</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00265.html">List of all members</a>  </div>
+<a href="a00313.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::atomic< T > Struct Template Reference<div class="ingroups"><a class="el" href="a00258.html">Synchronization</a></div></div>  </div>
+<div class="title">tbb::bad_last_alloc Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>Primary template for atomic.  
+<p>Exception for concurrent containers.  
  <a href="a00018.html#details">More...</a></p>
 
-<p><code>#include <atomic.h></code></p>
+<p><code>#include <tbb_exception.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::atomic< T >:</div>
+Inheritance diagram for tbb::bad_last_alloc:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00018.png" usemap="#tbb::atomic< T >_map" alt=""/>
-  <map id="tbb::atomic< T >_map" name="tbb::atomic< T >_map">
+  <img src="a00018.png" usemap="#tbb::bad_last_alloc_map" alt=""/>
+  <map id="tbb::bad_last_alloc_map" name="tbb::bad_last_alloc_map">
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a8624826901f5a3267853386bf880bd88"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8624826901f5a3267853386bf880bd88"></a>
-constexpr </td><td class="memItemRight" valign="bottom"><b>atomic</b> (T arg)</td></tr>
-<tr class="separator:a8624826901f5a3267853386bf880bd88"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5942feb81281f810edddc61a48dd7a39"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5942feb81281f810edddc61a48dd7a39"></a>
-T </td><td class="memItemRight" valign="bottom"><b>operator=</b> (T rhs)</td></tr>
-<tr class="separator:a5942feb81281f810edddc61a48dd7a39"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7d65b6cae3bd11c79a8e51e25055be52"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7d65b6cae3bd11c79a8e51e25055be52"></a>
-<a class="el" href="a00018.html">atomic</a>< T > & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00018.html">atomic</a>< T > &rhs)</td></tr>
-<tr class="separator:a7d65b6cae3bd11c79a8e51e25055be52"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad26fe8a6bd71e097ab339f3d3895d07c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad26fe8a6bd71e097ab339f3d3895d07c"></a>
+const char * </td><td class="memItemRight" valign="bottom"><b>what</b> () const __TBB_override  throw ()</td></tr>
+<tr class="separator:ad26fe8a6bd71e097ab339f3d3895d07c"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename T><br/>
-struct tbb::atomic< T ></h3>
-
-<p>Primary template for atomic. </p>
-<p>See the Reference for details. </p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>atomic.h</li>
+<div class="textblock"><p>Exception for concurrent containers. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>tbb_exception.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00018.png b/doc/html/a00018.png
index 257e923..6cb758a 100644
Binary files a/doc/html/a00018.png and b/doc/html/a00018.png differ
diff --git a/doc/html/a00019.html b/doc/html/a00019.html
index d5ff5f3..be4ae7d 100644
--- a/doc/html/a00019.html
+++ b/doc/html/a00019.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::atomic< void * > Struct Template Reference</title>
+<title>tbb::interface6::internal::basic_handler Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,55 +33,31 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00019.html">atomic< void * ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00019.html">basic_handler</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00266.html">List of all members</a>  </div>
+<a href="a00392.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::atomic< void * > Struct Template Reference</div>  </div>
+<div class="title">tbb::interface6::internal::basic_handler Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Specialization for <a class="el" href="a00019.html" title="Specialization for atomic<void*>, for sake of not allowing arithmetic or operator->. ">atomic<void*></a>, for sake of not allowing arithmetic or operator->.  
- <a href="a00019.html#details">More...</a></p>
-
-<p><code>#include <atomic.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::atomic< void * >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00019.png" usemap="#tbb::atomic< void * >_map" alt=""/>
-  <map id="tbb::atomic< void * >_map" name="tbb::atomic< void * >_map">
-</map>
- </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a744970055554db56a922b83dd1125dcf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a744970055554db56a922b83dd1125dcf"></a>
-constexpr </td><td class="memItemRight" valign="bottom"><b>atomic</b> (void *arg)</td></tr>
-<tr class="separator:a744970055554db56a922b83dd1125dcf"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3da2906b224154d9961054f07b2e310b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3da2906b224154d9961054f07b2e310b"></a>
-void * </td><td class="memItemRight" valign="bottom"><b>operator=</b> (void *rhs)</td></tr>
-<tr class="separator:a3da2906b224154d9961054f07b2e310b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8cb22d05fe655337f6129dc8f3ab6783"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8cb22d05fe655337f6129dc8f3ab6783"></a>
-<a class="el" href="a00018.html">atomic</a>< void * > & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00018.html">atomic</a>< void * > &rhs)</td></tr>
-<tr class="separator:a8cb22d05fe655337f6129dc8f3ab6783"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afb0dec67968e9abdabb5a0e3ec8064a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afb0dec67968e9abdabb5a0e3ec8064a4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>operator()</b> (<a class="el" href="a00013.html">aggregator_operation</a> *op_list) const </td></tr>
+<tr class="separator:afb0dec67968e9abdabb5a0e3ec8064a4"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<><br/>
-struct tbb::atomic< void * ></h3>
-
-<p>Specialization for <a class="el" href="a00019.html" title="Specialization for atomic<void*>, for sake of not allowing arithmetic or operator->. ">atomic<void*></a>, for sake of not allowing arithmetic or operator->. </p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>atomic.h</li>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>aggregator.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00019.png b/doc/html/a00019.png
deleted file mode 100644
index c5aaf08..0000000
Binary files a/doc/html/a00019.png and /dev/null differ
diff --git a/doc/html/a00020.html b/doc/html/a00020.html
index b231bd7..fe33b63 100644
--- a/doc/html/a00020.html
+++ b/doc/html/a00020.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::bad_last_alloc Class Reference</title>
+<title>tbb::interface6::internal::basic_operation< Body > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,46 +33,49 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00020.html">bad_last_alloc</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00020.html">basic_operation</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00318.html">List of all members</a>  </div>
+<a href="a00391.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::bad_last_alloc Class Reference</div>  </div>
+<div class="title">tbb::interface6::internal::basic_operation< Body > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Exception for concurrent containers.  
- <a href="a00020.html#details">More...</a></p>
-
-<p><code>#include <tbb_exception.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::bad_last_alloc:</div>
+Inheritance diagram for tbb::interface6::internal::basic_operation< Body >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00020.png" usemap="#tbb::bad_last_alloc_map" alt=""/>
-  <map id="tbb::bad_last_alloc_map" name="tbb::bad_last_alloc_map">
+  <img src="a00020.png" usemap="#tbb::interface6::internal::basic_operation< Body >_map" alt=""/>
+  <map id="tbb::interface6::internal::basic_operation< Body >_map" name="tbb::interface6::internal::basic_operation< Body >_map">
+<area href="a00021.html" alt="tbb::interface6::internal::basic_operation_base" shape="rect" coords="0,56,289,80"/>
+<area href="a00013.html" alt="tbb::interface6::aggregator_operation" shape="rect" coords="0,0,289,24"/>
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a3dd95f1a9f15f50eed6a79c079b25d32"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3dd95f1a9f15f50eed6a79c079b25d32"></a>
-const char * </td><td class="memItemRight" valign="bottom"><b>what</b> () const   throw ()</td></tr>
-<tr class="separator:a3dd95f1a9f15f50eed6a79c079b25d32"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adf48b2339f7de2f002c24c8951a03057"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adf48b2339f7de2f002c24c8951a03057"></a>
+ </td><td class="memItemRight" valign="bottom"><b>basic_operation</b> (const Body &b)</td></tr>
+<tr class="separator:adf48b2339f7de2f002c24c8951a03057"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_types_a00013"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00013')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td></tr>
+<tr class="memitem:a855dc55cb1823ed4845f4ed6b0a87700 inherit pub_types_a00013"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>aggregator_operation_status</b> { <b>agg_waiting</b> =0, 
+<b>agg_finished</b>
+ }</td></tr>
+<tr class="separator:a855dc55cb1823ed4845f4ed6b0a87700 inherit pub_types_a00013"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Exception for concurrent containers. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>tbb_exception.h</li>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>aggregator.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00020.png b/doc/html/a00020.png
index 6cb758a..cadf33a 100644
Binary files a/doc/html/a00020.png and b/doc/html/a00020.png differ
diff --git a/doc/html/a00021.html b/doc/html/a00021.html
index c1eb956..a3f6ac0 100644
--- a/doc/html/a00021.html
+++ b/doc/html/a00021.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface6::internal::basic_handler Class Reference</title>
+<title>tbb::interface6::internal::basic_operation_base Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,23 +33,55 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00021.html">basic_handler</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00021.html">basic_operation_base</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="a00406.html">List of all members</a>  </div>
+<a href="#friends">Friends</a> |
+<a href="a00390.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface6::internal::basic_handler Class Reference</div>  </div>
+<div class="title">tbb::interface6::internal::basic_operation_base Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
 </div><!--header-->
 <div class="contents">
+<div class="dynheader">
+Inheritance diagram for tbb::interface6::internal::basic_operation_base:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00021.png" usemap="#tbb::interface6::internal::basic_operation_base_map" alt=""/>
+  <map id="tbb::interface6::internal::basic_operation_base_map" name="tbb::interface6::internal::basic_operation_base_map">
+<area href="a00013.html" alt="tbb::interface6::aggregator_operation" shape="rect" coords="0,0,289,24"/>
+<area href="a00020.html" alt="tbb::interface6::internal::basic_operation< Body >" shape="rect" coords="0,112,289,136"/>
+</map>
+ </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:afb0dec67968e9abdabb5a0e3ec8064a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afb0dec67968e9abdabb5a0e3ec8064a4"></a>
-void </td><td class="memItemRight" valign="bottom"><b>operator()</b> (<a class="el" href="a00014.html">aggregator_operation</a> *op_list) const </td></tr>
-<tr class="separator:afb0dec67968e9abdabb5a0e3ec8064a4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:afe66260da7455bea5b701a3d8a537ba7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afe66260da7455bea5b701a3d8a537ba7"></a>
+class </td><td class="memItemRight" valign="bottom"><b>basic_handler</b></td></tr>
+<tr class="separator:afe66260da7455bea5b701a3d8a537ba7"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_types_a00013"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00013')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td></tr>
+<tr class="memitem:a855dc55cb1823ed4845f4ed6b0a87700 inherit pub_types_a00013"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>aggregator_operation_status</b> { <b>agg_waiting</b> =0, 
+<b>agg_finished</b>
+ }</td></tr>
+<tr class="separator:a855dc55cb1823ed4845f4ed6b0a87700 inherit pub_types_a00013"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_methods_a00013"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00013')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td></tr>
+<tr class="memitem:adc0e032aa604f1da85ffc7ec269b157f inherit pub_methods_a00013"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adc0e032aa604f1da85ffc7ec269b157f"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00013.html#adc0e032aa604f1da85ffc7ec269b157f">start</a> ()</td></tr>
+<tr class="memdesc:adc0e032aa604f1da85ffc7ec269b157f inherit pub_methods_a00013"><td class="mdescLeft"> </td><td class="mdescRight">Call start before handling this operation. <br/></td></tr>
+<tr class="separator:adc0e032aa604f1da85ffc7ec269b157f inherit pub_methods_a00013"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac7edadfe74f475783f3b429904e7010a inherit pub_methods_a00013"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00013.html#ac7edadfe74f475783f3b429904e7010a">finish</a> ()</td></tr>
+<tr class="memdesc:ac7edadfe74f475783f3b429904e7010a inherit pub_methods_a00013"><td class="mdescLeft"> </td><td class="mdescRight">Call finish when done handling this operation.  <a href="#ac7edadfe74f475783f3b429904e7010a">More...</a><br/></td></tr>
+<tr class="separator:ac7edadfe74f475783f3b429904e7010a inherit pub_methods_a00013"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acbce3d13545770501b54df153bf1e690 inherit pub_methods_a00013"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acbce3d13545770501b54df153bf1e690"></a>
+<a class="el" href="a00013.html">aggregator_operation</a> * </td><td class="memItemRight" valign="bottom"><b>next</b> ()</td></tr>
+<tr class="separator:acbce3d13545770501b54df153bf1e690 inherit pub_methods_a00013"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a03cf9fad0ca21da61b83325a50e17d0b inherit pub_methods_a00013"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a03cf9fad0ca21da61b83325a50e17d0b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_next</b> (<a class="el" href="a00013.html">aggregator_operation</a> *n)</td></tr>
+<tr class="separator:a03cf9fad0ca21da61b83325a50e17d0b inherit pub_methods_a00013"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <hr/>The documentation for this class was generated from the following file:<ul>
 <li>aggregator.h</li>
@@ -57,7 +89,7 @@ void </td><td class="memItemRight" valign="bottom"><b>operator()</b> (<a cl
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00023.png b/doc/html/a00021.png
similarity index 100%
rename from doc/html/a00023.png
rename to doc/html/a00021.png
diff --git a/doc/html/a00022.html b/doc/html/a00022.html
index d323237..2f9b42d 100644
--- a/doc/html/a00022.html
+++ b/doc/html/a00022.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface6::internal::basic_operation< Body > Class Template Reference</title>
+<title>tbb::blocked_range< Value > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,49 +33,290 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00022.html">basic_operation</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00022.html">blocked_range</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00405.html">List of all members</a>  </div>
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="#friends">Friends</a> |
+<a href="a00264.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface6::internal::basic_operation< Body > Class Template Reference</div>  </div>
+<div class="title">tbb::blocked_range< Value > Class Template Reference<div class="ingroups"><a class="el" href="a00252.html">Algorithms</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="dynheader">
-Inheritance diagram for tbb::interface6::internal::basic_operation< Body >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00022.png" usemap="#tbb::interface6::internal::basic_operation< Body >_map" alt=""/>
-  <map id="tbb::interface6::internal::basic_operation< Body >_map" name="tbb::interface6::internal::basic_operation< Body >_map">
-<area href="a00023.html" alt="tbb::interface6::internal::basic_operation_base" shape="rect" coords="0,56,289,80"/>
-<area href="a00014.html" alt="tbb::interface6::aggregator_operation" shape="rect" coords="0,0,289,24"/>
-</map>
- </div></div>
+
+<p>A range over which to iterate.  
+ <a href="a00022.html#details">More...</a></p>
+
+<p><code>#include <blocked_range.h></code></p>
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:ad56ca70af46acf8870b4970d8a809791"><td class="memItemLeft" align="right" valign="top">typedef Value </td><td class="memItemRight" valign="bottom"><a class="el" href="a00022.html#ad56ca70af46acf8870b4970d8a809791">const_iterator</a></td></tr>
+<tr class="memdesc:ad56ca70af46acf8870b4970d8a809791"><td class="mdescLeft"> </td><td class="mdescRight">Type of a value.  <a href="#ad56ca70af46acf8870b4970d8a809791">More...</a><br/></td></tr>
+<tr class="separator:ad56ca70af46acf8870b4970d8a809791"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a89b300cecd9d617e4ee801c786756e55"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a89b300cecd9d617e4ee801c786756e55"></a>
+typedef std::size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00022.html#a89b300cecd9d617e4ee801c786756e55">size_type</a></td></tr>
+<tr class="memdesc:a89b300cecd9d617e4ee801c786756e55"><td class="mdescLeft"> </td><td class="mdescRight">Type for size of a range. <br/></td></tr>
+<tr class="separator:a89b300cecd9d617e4ee801c786756e55"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:adf48b2339f7de2f002c24c8951a03057"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adf48b2339f7de2f002c24c8951a03057"></a>
- </td><td class="memItemRight" valign="bottom"><b>basic_operation</b> (const Body &b)</td></tr>
-<tr class="separator:adf48b2339f7de2f002c24c8951a03057"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aad176ab2cbd0bd73c3c2065761af3ccc"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00022.html#aad176ab2cbd0bd73c3c2065761af3ccc">blocked_range</a> ()</td></tr>
+<tr class="memdesc:aad176ab2cbd0bd73c3c2065761af3ccc"><td class="mdescLeft"> </td><td class="mdescRight">Construct range with default-constructed values for begin and end.  <a href="#aad176ab2cbd0bd73c3c2065761af3ccc">More...</a><br/></td></tr>
+<tr class="separator:aad176ab2cbd0bd73c3c2065761af3ccc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a49a97576004711b7159170fcaf488e4e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a49a97576004711b7159170fcaf488e4e"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00022.html#a49a97576004711b7159170fcaf488e4e">blocked_range</a> (Value begin_, Value end_, <a class="el" href="a00022.html#a89b300cecd9d617e4ee801c786756e55">size_type</a> grainsize_=1)</td></tr>
+<tr class="memdesc:a49a97576004711b7159170fcaf488e4e"><td class="mdescLeft"> </td><td class="mdescRight">Construct range over half-open interval [begin,end), with the given grainsize. <br/></td></tr>
+<tr class="separator:a49a97576004711b7159170fcaf488e4e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae225fa10454b0fa33533dfb56f5060a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae225fa10454b0fa33533dfb56f5060a2"></a>
+<a class="el" href="a00022.html#ad56ca70af46acf8870b4970d8a809791">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00022.html#ae225fa10454b0fa33533dfb56f5060a2">begin</a> () const </td></tr>
+<tr class="memdesc:ae225fa10454b0fa33533dfb56f5060a2"><td class="mdescLeft"> </td><td class="mdescRight">Beginning of range. <br/></td></tr>
+<tr class="separator:ae225fa10454b0fa33533dfb56f5060a2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a99f829599d3e51b181a30b4cd57b06c6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a99f829599d3e51b181a30b4cd57b06c6"></a>
+<a class="el" href="a00022.html#ad56ca70af46acf8870b4970d8a809791">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00022.html#a99f829599d3e51b181a30b4cd57b06c6">end</a> () const </td></tr>
+<tr class="memdesc:a99f829599d3e51b181a30b4cd57b06c6"><td class="mdescLeft"> </td><td class="mdescRight">One past last value in range. <br/></td></tr>
+<tr class="separator:a99f829599d3e51b181a30b4cd57b06c6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a347ef8caa40edca3b7f475f182281140"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00022.html#a89b300cecd9d617e4ee801c786756e55">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00022.html#a347ef8caa40edca3b7f475f182281140">size</a> () const </td></tr>
+<tr class="memdesc:a347ef8caa40edca3b7f475f182281140"><td class="mdescLeft"> </td><td class="mdescRight">Size of the range.  <a href="#a347ef8caa40edca3b7f475f182281140">More...</a><br/></td></tr>
+<tr class="separator:a347ef8caa40edca3b7f475f182281140"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab408f3cf90c85fa9203df5641a2f9bb1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab408f3cf90c85fa9203df5641a2f9bb1"></a>
+<a class="el" href="a00022.html#a89b300cecd9d617e4ee801c786756e55">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00022.html#ab408f3cf90c85fa9203df5641a2f9bb1">grainsize</a> () const </td></tr>
+<tr class="memdesc:ab408f3cf90c85fa9203df5641a2f9bb1"><td class="mdescLeft"> </td><td class="mdescRight">The grain size for this range. <br/></td></tr>
+<tr class="separator:ab408f3cf90c85fa9203df5641a2f9bb1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a59dec03416b3fefbf69600f798177710"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59dec03416b3fefbf69600f798177710"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00022.html#a59dec03416b3fefbf69600f798177710">empty</a> () const </td></tr>
+<tr class="memdesc:a59dec03416b3fefbf69600f798177710"><td class="mdescLeft"> </td><td class="mdescRight">True if range is empty. <br/></td></tr>
+<tr class="separator:a59dec03416b3fefbf69600f798177710"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad90ad1db0d4d9a301ef1c9e17712e8a0"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00022.html#ad90ad1db0d4d9a301ef1c9e17712e8a0">is_divisible</a> () const </td></tr>
+<tr class="memdesc:ad90ad1db0d4d9a301ef1c9e17712e8a0"><td class="mdescLeft"> </td><td class="mdescRight">True if range is divisible.  <a href="#ad90ad1db0d4d9a301ef1c9e17712e8a0">More...</a><br/></td></tr>
+<tr class="separator:ad90ad1db0d4d9a301ef1c9e17712e8a0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a75cae12286f4d5492970ea630a9783b9"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00022.html#a75cae12286f4d5492970ea630a9783b9">blocked_range</a> (<a class="el" href="a00022.html">blocked_range</a> &r, split)</td></tr>
+<tr class="memdesc:a75cae12286f4d5492970ea630a9783b9"><td class="mdescLeft"> </td><td class="mdescRight">Split range.  <a href="#a75cae12286f4d5492970ea630a9783b9">More...</a><br/></td></tr>
+<tr class="separator:a75cae12286f4d5492970ea630a9783b9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1f53fbb10b8b04a515f382704b00ed14"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00022.html#a1f53fbb10b8b04a515f382704b00ed14">blocked_range</a> (<a class="el" href="a00022.html">blocked_range</a> &r, proportional_split &proportion)</td></tr>
+<tr class="memdesc:a1f53fbb10b8b04a515f382704b00ed14"><td class="mdescLeft"> </td><td class="mdescRight">Split range.  <a href="#a1f53fbb10b8b04a515f382704b00ed14">More...</a><br/></td></tr>
+<tr class="separator:a1f53fbb10b8b04a515f382704b00ed14"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:ae2b0210e2468092b408123adeb54b01c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae2b0210e2468092b408123adeb54b01c"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00022.html#ae2b0210e2468092b408123adeb54b01c">is_splittable_in_proportion</a> = true</td></tr>
+<tr class="memdesc:ae2b0210e2468092b408123adeb54b01c"><td class="mdescLeft"> </td><td class="mdescRight">Static field to support proportional split. <br/></td></tr>
+<tr class="separator:ae2b0210e2468092b408123adeb54b01c"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pub_types_a00014"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00014')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td></tr>
-<tr class="memitem:a855dc55cb1823ed4845f4ed6b0a87700 inherit pub_types_a00014"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>aggregator_operation_status</b> { <b>agg_waiting</b> =0, 
-<b>agg_finished</b>
- }</td></tr>
-<tr class="separator:a855dc55cb1823ed4845f4ed6b0a87700 inherit pub_types_a00014"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:aa504612e6c1ba07b8846bcd323847680"><td class="memTemplParams" colspan="2"><a class="anchor" id="aa504612e6c1ba07b8846bcd323847680"></a>
+template<typename RowValue , typename ColValue > </td></tr>
+<tr class="memitem:aa504612e6c1ba07b8846bcd323847680"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>blocked_range2d</b></td></tr>
+<tr class="separator:aa504612e6c1ba07b8846bcd323847680"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a83f67fe3b421dbaeee9040aae730d5e8"><td class="memTemplParams" colspan="2"><a class="anchor" id="a83f67fe3b421dbaeee9040aae730d5e8"></a>
+template<typename RowValue , typename ColValue , typename PageValue > </td></tr>
+<tr class="memitem:a83f67fe3b421dbaeee9040aae730d5e8"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>blocked_range3d</b></td></tr>
+<tr class="separator:a83f67fe3b421dbaeee9040aae730d5e8"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><h3>template<typename Value><br/>
+class tbb::blocked_range< Value ></h3>
+
+<p>A range over which to iterate. </p>
+</div><h2 class="groupheader">Member Typedef Documentation</h2>
+<a class="anchor" id="ad56ca70af46acf8870b4970d8a809791"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Value> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef Value <a class="el" href="a00022.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00022.html#ad56ca70af46acf8870b4970d8a809791">const_iterator</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Type of a value. </p>
+<p>Called a const_iterator for sake of algorithms that need to treat a <a class="el" href="a00022.html" title="A range over which to iterate. ">blocked_range</a> as an STL container. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Constructor & Destructor Documentation</h2>
+<a class="anchor" id="aad176ab2cbd0bd73c3c2065761af3ccc"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Value> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00022.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00022.html">blocked_range</a> </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
 </table>
+</div><div class="memdoc">
+
+<p>Construct range with default-constructed values for begin and end. </p>
+<p>Requires that Value have a default constructor. </p>
+
+</div>
+</div>
+<a class="anchor" id="a75cae12286f4d5492970ea630a9783b9"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Value> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00022.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00022.html">blocked_range</a> </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00022.html">blocked_range</a>< Value > & </td>
+          <td class="paramname"><em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">split </td>
+          <td class="paramname"> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Split range. </p>
+<p>The new Range *this has the second part, the old range r has the first part. Unspecified if <a class="el" href="a00022.html#a99f829599d3e51b181a30b4cd57b06c6" title="One past last value in range. ">end()</a><<a class="el" href="a00022.html#ae225fa10454b0fa33533dfb56f5060a2" title="Beginning of range. ">begin()</a> or !is_divisible(). </p>
+
+</div>
+</div>
+<a class="anchor" id="a1f53fbb10b8b04a515f382704b00ed14"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Value> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00022.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00022.html">blocked_range</a> </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00022.html">blocked_range</a>< Value > & </td>
+          <td class="paramname"><em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">proportional_split & </td>
+          <td class="paramname"><em>proportion</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Split range. </p>
+<p>The new Range *this has the second part split according to specified proportion, the old range r has the first part. Unspecified if <a class="el" href="a00022.html#a99f829599d3e51b181a30b4cd57b06c6" title="One past last value in range. ">end()</a><<a class="el" href="a00022.html#ae225fa10454b0fa33533dfb56f5060a2" title="Beginning of range. ">begin()</a> or !is_divisible(). </p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="ad90ad1db0d4d9a301ef1c9e17712e8a0"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Value> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00022.html">tbb::blocked_range</a>< Value >::is_divisible </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>True if range is divisible. </p>
+<p>Unspecified if <a class="el" href="a00022.html#a99f829599d3e51b181a30b4cd57b06c6" title="One past last value in range. ">end()</a><<a class="el" href="a00022.html#ae225fa10454b0fa33533dfb56f5060a2" title="Beginning of range. ">begin()</a>. </p>
+
+<p>Referenced by <a class="el" href="a00023.html#ac84c6cc2ff8b0974ffa719fed804f586">tbb::blocked_range2d< RowValue, ColValue >::is_divisible()</a>, and <a class="el" href="a00024.html#a0fce6bcae6269c37623c3a2cdbb8bcf0">tbb::blocked_range3d< PageValue, RowValue, ColValue >::is_divisible()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a347ef8caa40edca3b7f475f182281140"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Value> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00022.html#a89b300cecd9d617e4ee801c786756e55">size_type</a> <a class="el" href="a00022.html">tbb::blocked_range</a>< Value >::size </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Size of the range. </p>
+<p>Unspecified if <a class="el" href="a00022.html#a99f829599d3e51b181a30b4cd57b06c6" title="One past last value in range. ">end()</a><<a class="el" href="a00022.html#ae225fa10454b0fa33533dfb56f5060a2" title="Beginning of range. ">begin()</a>. </p>
+
+<p>Referenced by <a class="el" href="a00022.html#ad90ad1db0d4d9a301ef1c9e17712e8a0">tbb::blocked_range< I >::is_divisible()</a>.</p>
+
+</div>
+</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>aggregator.h</li>
+<li>blocked_range.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00022.png b/doc/html/a00022.png
deleted file mode 100644
index cadf33a..0000000
Binary files a/doc/html/a00022.png and /dev/null differ
diff --git a/doc/html/a00023.html b/doc/html/a00023.html
index e7be487..66c3d08 100644
--- a/doc/html/a00023.html
+++ b/doc/html/a00023.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface6::internal::basic_operation_base Class Reference</title>
+<title>tbb::blocked_range2d< RowValue, ColValue > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,63 +33,89 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00023.html">basic_operation_base</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00023.html">blocked_range2d</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#friends">Friends</a> |
-<a href="a00404.html">List of all members</a>  </div>
+<a href="#pub-types">Public Types</a> |
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="a00265.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface6::internal::basic_operation_base Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
+<div class="title">tbb::blocked_range2d< RowValue, ColValue > Class Template Reference<div class="ingroups"><a class="el" href="a00252.html">Algorithms</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="dynheader">
-Inheritance diagram for tbb::interface6::internal::basic_operation_base:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00023.png" usemap="#tbb::interface6::internal::basic_operation_base_map" alt=""/>
-  <map id="tbb::interface6::internal::basic_operation_base_map" name="tbb::interface6::internal::basic_operation_base_map">
-<area href="a00014.html" alt="tbb::interface6::aggregator_operation" shape="rect" coords="0,0,289,24"/>
-<area href="a00022.html" alt="tbb::interface6::internal::basic_operation< Body >" shape="rect" coords="0,112,289,136"/>
-</map>
- </div></div>
+
+<p>A 2-dimensional range that models the Range concept.  
+ <a href="a00023.html#details">More...</a></p>
+
+<p><code>#include <blocked_range2d.h></code></p>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:afe66260da7455bea5b701a3d8a537ba7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afe66260da7455bea5b701a3d8a537ba7"></a>
-class </td><td class="memItemRight" valign="bottom"><b>basic_handler</b></td></tr>
-<tr class="separator:afe66260da7455bea5b701a3d8a537ba7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:ada609b296a9af0591cc34761b8538100"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ada609b296a9af0591cc34761b8538100"></a>
+typedef <a class="el" href="a00022.html">blocked_range</a>< RowValue > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00023.html#ada609b296a9af0591cc34761b8538100">row_range_type</a></td></tr>
+<tr class="memdesc:ada609b296a9af0591cc34761b8538100"><td class="mdescLeft"> </td><td class="mdescRight">Type for size of an iteration range. <br/></td></tr>
+<tr class="separator:ada609b296a9af0591cc34761b8538100"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9820ed2f2560633d18bf35cece8b6493"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9820ed2f2560633d18bf35cece8b6493"></a>
+typedef <a class="el" href="a00022.html">blocked_range</a>< ColValue > </td><td class="memItemRight" valign="bottom"><b>col_range_type</b></td></tr>
+<tr class="separator:a9820ed2f2560633d18bf35cece8b6493"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pub_types_a00014"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00014')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td></tr>
-<tr class="memitem:a855dc55cb1823ed4845f4ed6b0a87700 inherit pub_types_a00014"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>aggregator_operation_status</b> { <b>agg_waiting</b> =0, 
-<b>agg_finished</b>
- }</td></tr>
-<tr class="separator:a855dc55cb1823ed4845f4ed6b0a87700 inherit pub_types_a00014"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00014"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00014')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td></tr>
-<tr class="memitem:adc0e032aa604f1da85ffc7ec269b157f inherit pub_methods_a00014"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adc0e032aa604f1da85ffc7ec269b157f"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00014.html#adc0e032aa604f1da85ffc7ec269b157f">start</a> ()</td></tr>
-<tr class="memdesc:adc0e032aa604f1da85ffc7ec269b157f inherit pub_methods_a00014"><td class="mdescLeft"> </td><td class="mdescRight">Call start before handling this operation. <br/></td></tr>
-<tr class="separator:adc0e032aa604f1da85ffc7ec269b157f inherit pub_methods_a00014"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac7edadfe74f475783f3b429904e7010a inherit pub_methods_a00014"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00014.html#ac7edadfe74f475783f3b429904e7010a">finish</a> ()</td></tr>
-<tr class="memdesc:ac7edadfe74f475783f3b429904e7010a inherit pub_methods_a00014"><td class="mdescLeft"> </td><td class="mdescRight">Call finish when done handling this operation.  <a href="#ac7edadfe74f475783f3b429904e7010a">More...</a><br/></td></tr>
-<tr class="separator:ac7edadfe74f475783f3b429904e7010a inherit pub_methods_a00014"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acbce3d13545770501b54df153bf1e690 inherit pub_methods_a00014"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acbce3d13545770501b54df153bf1e690"></a>
-<a class="el" href="a00014.html">aggregator_operation</a> * </td><td class="memItemRight" valign="bottom"><b>next</b> ()</td></tr>
-<tr class="separator:acbce3d13545770501b54df153bf1e690 inherit pub_methods_a00014"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a03cf9fad0ca21da61b83325a50e17d0b inherit pub_methods_a00014"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a03cf9fad0ca21da61b83325a50e17d0b"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_next</b> (<a class="el" href="a00014.html">aggregator_operation</a> *n)</td></tr>
-<tr class="separator:a03cf9fad0ca21da61b83325a50e17d0b inherit pub_methods_a00014"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a5aa4e2c389c4b833937fcad66efe2b6a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5aa4e2c389c4b833937fcad66efe2b6a"></a>
+ </td><td class="memItemRight" valign="bottom"><b>blocked_range2d</b> (RowValue row_begin, RowValue row_end, typename <a class="el" href="a00022.html#a89b300cecd9d617e4ee801c786756e55">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class="el" href="a00022.html#a89b300cecd9d617e4ee801c786756e55">col_range_type::size_type</a> col_grainsize)</td></tr>
+<tr class="separator:a5aa4e2c389c4b833937fcad66efe2b6a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaf45f93921022437fdcb500585768a5e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaf45f93921022437fdcb500585768a5e"></a>
+ </td><td class="memItemRight" valign="bottom"><b>blocked_range2d</b> (RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end)</td></tr>
+<tr class="separator:aaf45f93921022437fdcb500585768a5e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5805972c8c41b2681d286f9c9771cf52"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5805972c8c41b2681d286f9c9771cf52"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00023.html#a5805972c8c41b2681d286f9c9771cf52">empty</a> () const </td></tr>
+<tr class="memdesc:a5805972c8c41b2681d286f9c9771cf52"><td class="mdescLeft"> </td><td class="mdescRight">True if range is empty. <br/></td></tr>
+<tr class="separator:a5805972c8c41b2681d286f9c9771cf52"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac84c6cc2ff8b0974ffa719fed804f586"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac84c6cc2ff8b0974ffa719fed804f586"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00023.html#ac84c6cc2ff8b0974ffa719fed804f586">is_divisible</a> () const </td></tr>
+<tr class="memdesc:ac84c6cc2ff8b0974ffa719fed804f586"><td class="mdescLeft"> </td><td class="mdescRight">True if range is divisible into two pieces. <br/></td></tr>
+<tr class="separator:ac84c6cc2ff8b0974ffa719fed804f586"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af0e752d01b661b01c9a473473bea43fc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af0e752d01b661b01c9a473473bea43fc"></a>
+ </td><td class="memItemRight" valign="bottom"><b>blocked_range2d</b> (<a class="el" href="a00023.html">blocked_range2d</a> &r, split)</td></tr>
+<tr class="separator:af0e752d01b661b01c9a473473bea43fc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9ebbf0fa580c0553ec2e3c5997b9799c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9ebbf0fa580c0553ec2e3c5997b9799c"></a>
+ </td><td class="memItemRight" valign="bottom"><b>blocked_range2d</b> (<a class="el" href="a00023.html">blocked_range2d</a> &r, proportional_split &proportion)</td></tr>
+<tr class="separator:a9ebbf0fa580c0553ec2e3c5997b9799c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a06ae436bae2c8be5a95212ea410791db"><td class="memTemplParams" colspan="2"><a class="anchor" id="a06ae436bae2c8be5a95212ea410791db"></a>
+template<typename Split > </td></tr>
+<tr class="memitem:a06ae436bae2c8be5a95212ea410791db"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>do_split</b> (<a class="el" href="a00023.html">blocked_range2d</a> &r, Split &split_obj)</td></tr>
+<tr class="separator:a06ae436bae2c8be5a95212ea410791db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4f7299e74c40df57dee2433c07ce65ae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4f7299e74c40df57dee2433c07ce65ae"></a>
+const <a class="el" href="a00023.html#ada609b296a9af0591cc34761b8538100">row_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00023.html#a4f7299e74c40df57dee2433c07ce65ae">rows</a> () const </td></tr>
+<tr class="memdesc:a4f7299e74c40df57dee2433c07ce65ae"><td class="mdescLeft"> </td><td class="mdescRight">The rows of the iteration space. <br/></td></tr>
+<tr class="separator:a4f7299e74c40df57dee2433c07ce65ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af3bccfaf90126b285491096f78ca9473"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af3bccfaf90126b285491096f78ca9473"></a>
+const <a class="el" href="a00022.html">col_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00023.html#af3bccfaf90126b285491096f78ca9473">cols</a> () const </td></tr>
+<tr class="memdesc:af3bccfaf90126b285491096f78ca9473"><td class="mdescLeft"> </td><td class="mdescRight">The columns of the iteration space. <br/></td></tr>
+<tr class="separator:af3bccfaf90126b285491096f78ca9473"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:aa0519760654368000f7ebc87d9bfe898"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0519760654368000f7ebc87d9bfe898"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00023.html#aa0519760654368000f7ebc87d9bfe898">is_splittable_in_proportion</a> = true</td></tr>
+<tr class="memdesc:aa0519760654368000f7ebc87d9bfe898"><td class="mdescLeft"> </td><td class="mdescRight">Static field to support proportional split. <br/></td></tr>
+<tr class="separator:aa0519760654368000f7ebc87d9bfe898"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>aggregator.h</li>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><h3>template<typename RowValue, typename ColValue = RowValue><br/>
+class tbb::blocked_range2d< RowValue, ColValue ></h3>
+
+<p>A 2-dimensional range that models the Range concept. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>blocked_range2d.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00024.html b/doc/html/a00024.html
index ed9156b..60b18ae 100644
--- a/doc/html/a00024.html
+++ b/doc/html/a00024.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::blocked_range< Value > Class Template Reference</title>
+<title>tbb::blocked_range3d< PageValue, RowValue, ColValue > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,7 +33,7 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00024.html">blocked_range</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00024.html">blocked_range3d</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
@@ -41,282 +41,88 @@
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
 <a href="#pub-static-attribs">Static Public Attributes</a> |
-<a href="#friends">Friends</a> |
-<a href="a00267.html">List of all members</a>  </div>
+<a href="a00266.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::blocked_range< Value > Class Template Reference<div class="ingroups"><a class="el" href="a00255.html">Algorithms</a></div></div>  </div>
+<div class="title">tbb::blocked_range3d< PageValue, RowValue, ColValue > Class Template Reference<div class="ingroups"><a class="el" href="a00252.html">Algorithms</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>A range over which to iterate.  
+<p>A 3-dimensional range that models the Range concept.  
  <a href="a00024.html#details">More...</a></p>
 
-<p><code>#include <blocked_range.h></code></p>
+<p><code>#include <blocked_range3d.h></code></p>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:ad56ca70af46acf8870b4970d8a809791"><td class="memItemLeft" align="right" valign="top">typedef Value </td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#ad56ca70af46acf8870b4970d8a809791">const_iterator</a></td></tr>
-<tr class="memdesc:ad56ca70af46acf8870b4970d8a809791"><td class="mdescLeft"> </td><td class="mdescRight">Type of a value.  <a href="#ad56ca70af46acf8870b4970d8a809791">More...</a><br/></td></tr>
-<tr class="separator:ad56ca70af46acf8870b4970d8a809791"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a89b300cecd9d617e4ee801c786756e55"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a89b300cecd9d617e4ee801c786756e55"></a>
-typedef std::size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#a89b300cecd9d617e4ee801c786756e55">size_type</a></td></tr>
-<tr class="memdesc:a89b300cecd9d617e4ee801c786756e55"><td class="mdescLeft"> </td><td class="mdescRight">Type for size of a range. <br/></td></tr>
-<tr class="separator:a89b300cecd9d617e4ee801c786756e55"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8cdc866378a12ce198da870d0439676f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8cdc866378a12ce198da870d0439676f"></a>
+typedef <a class="el" href="a00022.html">blocked_range</a>< PageValue > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#a8cdc866378a12ce198da870d0439676f">page_range_type</a></td></tr>
+<tr class="memdesc:a8cdc866378a12ce198da870d0439676f"><td class="mdescLeft"> </td><td class="mdescRight">Type for size of an iteration range. <br/></td></tr>
+<tr class="separator:a8cdc866378a12ce198da870d0439676f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abe15e1e06f47809a477272f733a8abf8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe15e1e06f47809a477272f733a8abf8"></a>
+typedef <a class="el" href="a00022.html">blocked_range</a>< RowValue > </td><td class="memItemRight" valign="bottom"><b>row_range_type</b></td></tr>
+<tr class="separator:abe15e1e06f47809a477272f733a8abf8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab3bffd5ffb14ad9897b1a9bf22980768"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab3bffd5ffb14ad9897b1a9bf22980768"></a>
+typedef <a class="el" href="a00022.html">blocked_range</a>< ColValue > </td><td class="memItemRight" valign="bottom"><b>col_range_type</b></td></tr>
+<tr class="separator:ab3bffd5ffb14ad9897b1a9bf22980768"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:aad176ab2cbd0bd73c3c2065761af3ccc"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#aad176ab2cbd0bd73c3c2065761af3ccc">blocked_range</a> ()</td></tr>
-<tr class="memdesc:aad176ab2cbd0bd73c3c2065761af3ccc"><td class="mdescLeft"> </td><td class="mdescRight">Construct range with default-constructed values for begin and end.  <a href="#aad176ab2cbd0bd73c3c2065761af3ccc">More...</a><br/></td></tr>
-<tr class="separator:aad176ab2cbd0bd73c3c2065761af3ccc"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a49a97576004711b7159170fcaf488e4e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a49a97576004711b7159170fcaf488e4e"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#a49a97576004711b7159170fcaf488e4e">blocked_range</a> (Value begin_, Value end_, <a class="el" href="a00024.html#a89b300cecd9d617e4ee801c786756e55">size_type</a> grainsize_=1)</td></tr>
-<tr class="memdesc:a49a97576004711b7159170fcaf488e4e"><td class="mdescLeft"> </td><td class="mdescRight">Construct range over half-open interval [begin,end), with the given grainsize. <br/></td></tr>
-<tr class="separator:a49a97576004711b7159170fcaf488e4e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae225fa10454b0fa33533dfb56f5060a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae225fa10454b0fa33533dfb56f5060a2"></a>
-<a class="el" href="a00024.html#ad56ca70af46acf8870b4970d8a809791">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#ae225fa10454b0fa33533dfb56f5060a2">begin</a> () const </td></tr>
-<tr class="memdesc:ae225fa10454b0fa33533dfb56f5060a2"><td class="mdescLeft"> </td><td class="mdescRight">Beginning of range. <br/></td></tr>
-<tr class="separator:ae225fa10454b0fa33533dfb56f5060a2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a99f829599d3e51b181a30b4cd57b06c6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a99f829599d3e51b181a30b4cd57b06c6"></a>
-<a class="el" href="a00024.html#ad56ca70af46acf8870b4970d8a809791">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#a99f829599d3e51b181a30b4cd57b06c6">end</a> () const </td></tr>
-<tr class="memdesc:a99f829599d3e51b181a30b4cd57b06c6"><td class="mdescLeft"> </td><td class="mdescRight">One past last value in range. <br/></td></tr>
-<tr class="separator:a99f829599d3e51b181a30b4cd57b06c6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a347ef8caa40edca3b7f475f182281140"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00024.html#a89b300cecd9d617e4ee801c786756e55">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#a347ef8caa40edca3b7f475f182281140">size</a> () const </td></tr>
-<tr class="memdesc:a347ef8caa40edca3b7f475f182281140"><td class="mdescLeft"> </td><td class="mdescRight">Size of the range.  <a href="#a347ef8caa40edca3b7f475f182281140">More...</a><br/></td></tr>
-<tr class="separator:a347ef8caa40edca3b7f475f182281140"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab408f3cf90c85fa9203df5641a2f9bb1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab408f3cf90c85fa9203df5641a2f9bb1"></a>
-<a class="el" href="a00024.html#a89b300cecd9d617e4ee801c786756e55">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#ab408f3cf90c85fa9203df5641a2f9bb1">grainsize</a> () const </td></tr>
-<tr class="memdesc:ab408f3cf90c85fa9203df5641a2f9bb1"><td class="mdescLeft"> </td><td class="mdescRight">The grain size for this range. <br/></td></tr>
-<tr class="separator:ab408f3cf90c85fa9203df5641a2f9bb1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a59dec03416b3fefbf69600f798177710"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59dec03416b3fefbf69600f798177710"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#a59dec03416b3fefbf69600f798177710">empty</a> () const </td></tr>
-<tr class="memdesc:a59dec03416b3fefbf69600f798177710"><td class="mdescLeft"> </td><td class="mdescRight">True if range is empty. <br/></td></tr>
-<tr class="separator:a59dec03416b3fefbf69600f798177710"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad90ad1db0d4d9a301ef1c9e17712e8a0"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#ad90ad1db0d4d9a301ef1c9e17712e8a0">is_divisible</a> () const </td></tr>
-<tr class="memdesc:ad90ad1db0d4d9a301ef1c9e17712e8a0"><td class="mdescLeft"> </td><td class="mdescRight">True if range is divisible.  <a href="#ad90ad1db0d4d9a301ef1c9e17712e8a0">More...</a><br/></td></tr>
-<tr class="separator:ad90ad1db0d4d9a301ef1c9e17712e8a0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a75cae12286f4d5492970ea630a9783b9"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#a75cae12286f4d5492970ea630a9783b9">blocked_range</a> (<a class="el" href="a00024.html">blocked_range</a> &r, split)</td></tr>
-<tr class="memdesc:a75cae12286f4d5492970ea630a9783b9"><td class="mdescLeft"> </td><td class="mdescRight">Split range.  <a href="#a75cae12286f4d5492970ea630a9783b9">More...</a><br/></td></tr>
-<tr class="separator:a75cae12286f4d5492970ea630a9783b9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1f53fbb10b8b04a515f382704b00ed14"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#a1f53fbb10b8b04a515f382704b00ed14">blocked_range</a> (<a class="el" href="a00024.html">blocked_range</a> &r, proportional_split &proportion)</td></tr>
-<tr class="memdesc:a1f53fbb10b8b04a515f382704b00ed14"><td class="mdescLeft"> </td><td class="mdescRight">Split range.  <a href="#a1f53fbb10b8b04a515f382704b00ed14">More...</a><br/></td></tr>
-<tr class="separator:a1f53fbb10b8b04a515f382704b00ed14"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa5159e07e2d601319eece538edb8add0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa5159e07e2d601319eece538edb8add0"></a>
+ </td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b> (PageValue page_begin, PageValue page_end, RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end)</td></tr>
+<tr class="separator:aa5159e07e2d601319eece538edb8add0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a671a22033260fa02734c5a1113dcf1ac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a671a22033260fa02734c5a1113dcf1ac"></a>
+ </td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b> (PageValue page_begin, PageValue page_end, typename <a class="el" href="a00022.html#a89b300cecd9d617e4ee801c786756e55">page_range_type::size_type</a> page_grainsize, RowValue row_begin, RowValue row_end, typename <a class="el" href="a00022.html#a89b300cecd9d617e4ee801c786756e55">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class="el" href="a00022.html#a89b300cecd9d [...]
+<tr class="separator:a671a22033260fa02734c5a1113dcf1ac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aea992e0cd3d105f964a633b1a0a1a05f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aea992e0cd3d105f964a633b1a0a1a05f"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#aea992e0cd3d105f964a633b1a0a1a05f">empty</a> () const </td></tr>
+<tr class="memdesc:aea992e0cd3d105f964a633b1a0a1a05f"><td class="mdescLeft"> </td><td class="mdescRight">True if range is empty. <br/></td></tr>
+<tr class="separator:aea992e0cd3d105f964a633b1a0a1a05f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0fce6bcae6269c37623c3a2cdbb8bcf0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0fce6bcae6269c37623c3a2cdbb8bcf0"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#a0fce6bcae6269c37623c3a2cdbb8bcf0">is_divisible</a> () const </td></tr>
+<tr class="memdesc:a0fce6bcae6269c37623c3a2cdbb8bcf0"><td class="mdescLeft"> </td><td class="mdescRight">True if range is divisible into two pieces. <br/></td></tr>
+<tr class="separator:a0fce6bcae6269c37623c3a2cdbb8bcf0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a788ebedfb4a2eaa4bee11c2c967e0768"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a788ebedfb4a2eaa4bee11c2c967e0768"></a>
+ </td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b> (<a class="el" href="a00024.html">blocked_range3d</a> &r, split)</td></tr>
+<tr class="separator:a788ebedfb4a2eaa4bee11c2c967e0768"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0e5fdb794ec7bfc5f21a59ddd466d8e0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0e5fdb794ec7bfc5f21a59ddd466d8e0"></a>
+ </td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b> (<a class="el" href="a00024.html">blocked_range3d</a> &r, proportional_split &proportion)</td></tr>
+<tr class="separator:a0e5fdb794ec7bfc5f21a59ddd466d8e0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac83b305fb6dc5da50a4f6c4fdb551654"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac83b305fb6dc5da50a4f6c4fdb551654"></a>
+template<typename Split > </td></tr>
+<tr class="memitem:ac83b305fb6dc5da50a4f6c4fdb551654"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>do_split</b> (<a class="el" href="a00024.html">blocked_range3d</a> &r, Split &split_obj)</td></tr>
+<tr class="separator:ac83b305fb6dc5da50a4f6c4fdb551654"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5b794fd53ba92106aeafa4eed85731d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b794fd53ba92106aeafa4eed85731d4"></a>
+const <a class="el" href="a00024.html#a8cdc866378a12ce198da870d0439676f">page_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#a5b794fd53ba92106aeafa4eed85731d4">pages</a> () const </td></tr>
+<tr class="memdesc:a5b794fd53ba92106aeafa4eed85731d4"><td class="mdescLeft"> </td><td class="mdescRight">The pages of the iteration space. <br/></td></tr>
+<tr class="separator:a5b794fd53ba92106aeafa4eed85731d4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeac1def585af81467573f30ebb42cb4f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeac1def585af81467573f30ebb42cb4f"></a>
+const <a class="el" href="a00022.html">row_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#aeac1def585af81467573f30ebb42cb4f">rows</a> () const </td></tr>
+<tr class="memdesc:aeac1def585af81467573f30ebb42cb4f"><td class="mdescLeft"> </td><td class="mdescRight">The rows of the iteration space. <br/></td></tr>
+<tr class="separator:aeac1def585af81467573f30ebb42cb4f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a308d7089a1d53ff26770a7040ed817cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a308d7089a1d53ff26770a7040ed817cd"></a>
+const <a class="el" href="a00022.html">col_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#a308d7089a1d53ff26770a7040ed817cd">cols</a> () const </td></tr>
+<tr class="memdesc:a308d7089a1d53ff26770a7040ed817cd"><td class="mdescLeft"> </td><td class="mdescRight">The columns of the iteration space. <br/></td></tr>
+<tr class="separator:a308d7089a1d53ff26770a7040ed817cd"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
 Static Public Attributes</h2></td></tr>
-<tr class="memitem:ae2b0210e2468092b408123adeb54b01c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae2b0210e2468092b408123adeb54b01c"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#ae2b0210e2468092b408123adeb54b01c">is_splittable_in_proportion</a> = true</td></tr>
-<tr class="memdesc:ae2b0210e2468092b408123adeb54b01c"><td class="mdescLeft"> </td><td class="mdescRight">Static field to support proportional split. <br/></td></tr>
-<tr class="separator:ae2b0210e2468092b408123adeb54b01c"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:aa504612e6c1ba07b8846bcd323847680"><td class="memTemplParams" colspan="2"><a class="anchor" id="aa504612e6c1ba07b8846bcd323847680"></a>
-template<typename RowValue , typename ColValue > </td></tr>
-<tr class="memitem:aa504612e6c1ba07b8846bcd323847680"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>blocked_range2d</b></td></tr>
-<tr class="separator:aa504612e6c1ba07b8846bcd323847680"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a83f67fe3b421dbaeee9040aae730d5e8"><td class="memTemplParams" colspan="2"><a class="anchor" id="a83f67fe3b421dbaeee9040aae730d5e8"></a>
-template<typename RowValue , typename ColValue , typename PageValue > </td></tr>
-<tr class="memitem:a83f67fe3b421dbaeee9040aae730d5e8"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>blocked_range3d</b></td></tr>
-<tr class="separator:a83f67fe3b421dbaeee9040aae730d5e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5940c1bd6ba0e8184ef83dea0ae56884"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5940c1bd6ba0e8184ef83dea0ae56884"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#a5940c1bd6ba0e8184ef83dea0ae56884">is_splittable_in_proportion</a> = true</td></tr>
+<tr class="memdesc:a5940c1bd6ba0e8184ef83dea0ae56884"><td class="mdescLeft"> </td><td class="mdescRight">Static field to support proportional split. <br/></td></tr>
+<tr class="separator:a5940c1bd6ba0e8184ef83dea0ae56884"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename Value><br/>
-class tbb::blocked_range< Value ></h3>
-
-<p>A range over which to iterate. </p>
-</div><h2 class="groupheader">Member Typedef Documentation</h2>
-<a class="anchor" id="ad56ca70af46acf8870b4970d8a809791"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Value> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef Value <a class="el" href="a00024.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00024.html#ad56ca70af46acf8870b4970d8a809791">const_iterator</a></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Type of a value. </p>
-<p>Called a const_iterator for sake of algorithms that need to treat a <a class="el" href="a00024.html" title="A range over which to iterate. ">blocked_range</a> as an STL container. </p>
-
-</div>
-</div>
-<h2 class="groupheader">Constructor & Destructor Documentation</h2>
-<a class="anchor" id="aad176ab2cbd0bd73c3c2065761af3ccc"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Value> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00024.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00024.html">blocked_range</a> </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Construct range with default-constructed values for begin and end. </p>
-<p>Requires that Value have a default constructor. </p>
-
-</div>
-</div>
-<a class="anchor" id="a75cae12286f4d5492970ea630a9783b9"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Value> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00024.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00024.html">blocked_range</a> </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00024.html">blocked_range</a>< Value > & </td>
-          <td class="paramname"><em>r</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">split </td>
-          <td class="paramname"> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Split range. </p>
-<p>The new Range *this has the second part, the old range r has the first part. Unspecified if <a class="el" href="a00024.html#a99f829599d3e51b181a30b4cd57b06c6" title="One past last value in range. ">end()</a><<a class="el" href="a00024.html#ae225fa10454b0fa33533dfb56f5060a2" title="Beginning of range. ">begin()</a> or !is_divisible(). </p>
-
-</div>
-</div>
-<a class="anchor" id="a1f53fbb10b8b04a515f382704b00ed14"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Value> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00024.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00024.html">blocked_range</a> </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00024.html">blocked_range</a>< Value > & </td>
-          <td class="paramname"><em>r</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">proportional_split & </td>
-          <td class="paramname"><em>proportion</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Split range. </p>
-<p>The new Range *this has the second part split according to specified proportion, the old range r has the first part. Unspecified if <a class="el" href="a00024.html#a99f829599d3e51b181a30b4cd57b06c6" title="One past last value in range. ">end()</a><<a class="el" href="a00024.html#ae225fa10454b0fa33533dfb56f5060a2" title="Beginning of range. ">begin()</a> or !is_divisible(). </p>
-
-</div>
-</div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="ad90ad1db0d4d9a301ef1c9e17712e8a0"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Value> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00024.html">tbb::blocked_range</a>< Value >::is_divisible </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td> const</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>True if range is divisible. </p>
-<p>Unspecified if <a class="el" href="a00024.html#a99f829599d3e51b181a30b4cd57b06c6" title="One past last value in range. ">end()</a><<a class="el" href="a00024.html#ae225fa10454b0fa33533dfb56f5060a2" title="Beginning of range. ">begin()</a>. </p>
-
-<p>Referenced by <a class="el" href="a00025.html#ac84c6cc2ff8b0974ffa719fed804f586">tbb::blocked_range2d< RowValue, ColValue >::is_divisible()</a>, and <a class="el" href="a00026.html#a0fce6bcae6269c37623c3a2cdbb8bcf0">tbb::blocked_range3d< PageValue, RowValue, ColValue >::is_divisible()</a>.</p>
+<div class="textblock"><h3>template<typename PageValue, typename RowValue = PageValue, typename ColValue = RowValue><br/>
+class tbb::blocked_range3d< PageValue, RowValue, ColValue ></h3>
 
-</div>
-</div>
-<a class="anchor" id="a347ef8caa40edca3b7f475f182281140"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Value> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00024.html#a89b300cecd9d617e4ee801c786756e55">size_type</a> <a class="el" href="a00024.html">tbb::blocked_range</a>< Value >::size </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td> const</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Size of the range. </p>
-<p>Unspecified if <a class="el" href="a00024.html#a99f829599d3e51b181a30b4cd57b06c6" title="One past last value in range. ">end()</a><<a class="el" href="a00024.html#ae225fa10454b0fa33533dfb56f5060a2" title="Beginning of range. ">begin()</a>. </p>
-
-<p>Referenced by <a class="el" href="a00024.html#ad90ad1db0d4d9a301ef1c9e17712e8a0">tbb::blocked_range< I >::is_divisible()</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>blocked_range.h</li>
+<p>A 3-dimensional range that models the Range concept. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>blocked_range3d.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00025.html b/doc/html/a00025.html
index 20e6f8d..0a1055d 100644
--- a/doc/html/a00025.html
+++ b/doc/html/a00025.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::blocked_range2d< RowValue, ColValue > Class Template Reference</title>
+<title>tbb::flow::interface9::internal::broadcast_cache< T, M > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,89 +33,21 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00025.html">blocked_range2d</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00025.html">broadcast_cache</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="summary">
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-static-attribs">Static Public Attributes</a> |
-<a href="a00268.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::blocked_range2d< RowValue, ColValue > Class Template Reference<div class="ingroups"><a class="el" href="a00255.html">Algorithms</a></div></div>  </div>
+<div class="title">tbb::flow::interface9::internal::broadcast_cache< T, M > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>A 2-dimensional range that models the Range concept.  
- <a href="a00025.html#details">More...</a></p>
-
-<p><code>#include <blocked_range2d.h></code></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:ada609b296a9af0591cc34761b8538100"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ada609b296a9af0591cc34761b8538100"></a>
-typedef <a class="el" href="a00024.html">blocked_range</a>< RowValue > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00025.html#ada609b296a9af0591cc34761b8538100">row_range_type</a></td></tr>
-<tr class="memdesc:ada609b296a9af0591cc34761b8538100"><td class="mdescLeft"> </td><td class="mdescRight">Type for size of an iteration range. <br/></td></tr>
-<tr class="separator:ada609b296a9af0591cc34761b8538100"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9820ed2f2560633d18bf35cece8b6493"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9820ed2f2560633d18bf35cece8b6493"></a>
-typedef <a class="el" href="a00024.html">blocked_range</a>< ColValue > </td><td class="memItemRight" valign="bottom"><b>col_range_type</b></td></tr>
-<tr class="separator:a9820ed2f2560633d18bf35cece8b6493"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a5aa4e2c389c4b833937fcad66efe2b6a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5aa4e2c389c4b833937fcad66efe2b6a"></a>
- </td><td class="memItemRight" valign="bottom"><b>blocked_range2d</b> (RowValue row_begin, RowValue row_end, typename <a class="el" href="a00024.html#a89b300cecd9d617e4ee801c786756e55">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class="el" href="a00024.html#a89b300cecd9d617e4ee801c786756e55">col_range_type::size_type</a> col_grainsize)</td></tr>
-<tr class="separator:a5aa4e2c389c4b833937fcad66efe2b6a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aaf45f93921022437fdcb500585768a5e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaf45f93921022437fdcb500585768a5e"></a>
- </td><td class="memItemRight" valign="bottom"><b>blocked_range2d</b> (RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end)</td></tr>
-<tr class="separator:aaf45f93921022437fdcb500585768a5e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5805972c8c41b2681d286f9c9771cf52"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5805972c8c41b2681d286f9c9771cf52"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00025.html#a5805972c8c41b2681d286f9c9771cf52">empty</a> () const </td></tr>
-<tr class="memdesc:a5805972c8c41b2681d286f9c9771cf52"><td class="mdescLeft"> </td><td class="mdescRight">True if range is empty. <br/></td></tr>
-<tr class="separator:a5805972c8c41b2681d286f9c9771cf52"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac84c6cc2ff8b0974ffa719fed804f586"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac84c6cc2ff8b0974ffa719fed804f586"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00025.html#ac84c6cc2ff8b0974ffa719fed804f586">is_divisible</a> () const </td></tr>
-<tr class="memdesc:ac84c6cc2ff8b0974ffa719fed804f586"><td class="mdescLeft"> </td><td class="mdescRight">True if range is divisible into two pieces. <br/></td></tr>
-<tr class="separator:ac84c6cc2ff8b0974ffa719fed804f586"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af0e752d01b661b01c9a473473bea43fc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af0e752d01b661b01c9a473473bea43fc"></a>
- </td><td class="memItemRight" valign="bottom"><b>blocked_range2d</b> (<a class="el" href="a00025.html">blocked_range2d</a> &r, split)</td></tr>
-<tr class="separator:af0e752d01b661b01c9a473473bea43fc"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9ebbf0fa580c0553ec2e3c5997b9799c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9ebbf0fa580c0553ec2e3c5997b9799c"></a>
- </td><td class="memItemRight" valign="bottom"><b>blocked_range2d</b> (<a class="el" href="a00025.html">blocked_range2d</a> &r, proportional_split &proportion)</td></tr>
-<tr class="separator:a9ebbf0fa580c0553ec2e3c5997b9799c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a06ae436bae2c8be5a95212ea410791db"><td class="memTemplParams" colspan="2"><a class="anchor" id="a06ae436bae2c8be5a95212ea410791db"></a>
-template<typename Split > </td></tr>
-<tr class="memitem:a06ae436bae2c8be5a95212ea410791db"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>do_split</b> (<a class="el" href="a00025.html">blocked_range2d</a> &r, Split &split_obj)</td></tr>
-<tr class="separator:a06ae436bae2c8be5a95212ea410791db"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4f7299e74c40df57dee2433c07ce65ae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4f7299e74c40df57dee2433c07ce65ae"></a>
-const <a class="el" href="a00025.html#ada609b296a9af0591cc34761b8538100">row_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00025.html#a4f7299e74c40df57dee2433c07ce65ae">rows</a> () const </td></tr>
-<tr class="memdesc:a4f7299e74c40df57dee2433c07ce65ae"><td class="mdescLeft"> </td><td class="mdescRight">The rows of the iteration space. <br/></td></tr>
-<tr class="separator:a4f7299e74c40df57dee2433c07ce65ae"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af3bccfaf90126b285491096f78ca9473"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af3bccfaf90126b285491096f78ca9473"></a>
-const <a class="el" href="a00024.html">col_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00025.html#af3bccfaf90126b285491096f78ca9473">cols</a> () const </td></tr>
-<tr class="memdesc:af3bccfaf90126b285491096f78ca9473"><td class="mdescLeft"> </td><td class="mdescRight">The columns of the iteration space. <br/></td></tr>
-<tr class="separator:af3bccfaf90126b285491096f78ca9473"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr class="memitem:aa0519760654368000f7ebc87d9bfe898"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0519760654368000f7ebc87d9bfe898"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00025.html#aa0519760654368000f7ebc87d9bfe898">is_splittable_in_proportion</a> = true</td></tr>
-<tr class="memdesc:aa0519760654368000f7ebc87d9bfe898"><td class="mdescLeft"> </td><td class="mdescRight">Static field to support proportional split. <br/></td></tr>
-<tr class="separator:aa0519760654368000f7ebc87d9bfe898"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename RowValue, typename ColValue = RowValue><br/>
-class tbb::blocked_range2d< RowValue, ColValue ></h3>
-
-<p>A 2-dimensional range that models the Range concept. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>blocked_range2d.h</li>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00188.html">flow_graph.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00026.html b/doc/html/a00026.html
index 60cd00d..f1988cb 100644
--- a/doc/html/a00026.html
+++ b/doc/html/a00026.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::blocked_range3d< PageValue, RowValue, ColValue > Class Template Reference</title>
+<title>tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,96 +33,61 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00026.html">blocked_range3d</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00036.html">concurrent_hash_map</a></li><li class="navelem"><a class="el" href="a00026.html">bucket_accessor</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-static-attribs">Static Public Attributes</a> |
-<a href="a00269.html">List of all members</a>  </div>
+<a href="a00358.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::blocked_range3d< PageValue, RowValue, ColValue > Class Template Reference<div class="ingroups"><a class="el" href="a00255.html">Algorithms</a></div></div>  </div>
+<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>A 3-dimensional range that models the Range concept.  
+<p>bucket accessor is to find, rehash, acquire a lock, and access a bucket  
  <a href="a00026.html#details">More...</a></p>
 
-<p><code>#include <blocked_range3d.h></code></p>
+<p><code>#include <concurrent_hash_map.h></code></p>
+<div class="dynheader">
+Inheritance diagram for tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00026.png" usemap="#tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor_map" alt=""/>
+  <map id="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor_map" name="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor_map">
+</map>
+ </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a8cdc866378a12ce198da870d0439676f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8cdc866378a12ce198da870d0439676f"></a>
-typedef <a class="el" href="a00024.html">blocked_range</a>< PageValue > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html#a8cdc866378a12ce198da870d0439676f">page_range_type</a></td></tr>
-<tr class="memdesc:a8cdc866378a12ce198da870d0439676f"><td class="mdescLeft"> </td><td class="mdescRight">Type for size of an iteration range. <br/></td></tr>
-<tr class="separator:a8cdc866378a12ce198da870d0439676f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abe15e1e06f47809a477272f733a8abf8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe15e1e06f47809a477272f733a8abf8"></a>
-typedef <a class="el" href="a00024.html">blocked_range</a>< RowValue > </td><td class="memItemRight" valign="bottom"><b>row_range_type</b></td></tr>
-<tr class="separator:abe15e1e06f47809a477272f733a8abf8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab3bffd5ffb14ad9897b1a9bf22980768"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab3bffd5ffb14ad9897b1a9bf22980768"></a>
-typedef <a class="el" href="a00024.html">blocked_range</a>< ColValue > </td><td class="memItemRight" valign="bottom"><b>col_range_type</b></td></tr>
-<tr class="separator:ab3bffd5ffb14ad9897b1a9bf22980768"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:aa5159e07e2d601319eece538edb8add0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa5159e07e2d601319eece538edb8add0"></a>
- </td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b> (PageValue page_begin, PageValue page_end, RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end)</td></tr>
-<tr class="separator:aa5159e07e2d601319eece538edb8add0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a671a22033260fa02734c5a1113dcf1ac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a671a22033260fa02734c5a1113dcf1ac"></a>
- </td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b> (PageValue page_begin, PageValue page_end, typename <a class="el" href="a00024.html#a89b300cecd9d617e4ee801c786756e55">page_range_type::size_type</a> page_grainsize, RowValue row_begin, RowValue row_end, typename <a class="el" href="a00024.html#a89b300cecd9d617e4ee801c786756e55">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class="el" href="a00024.html#a89b300cecd9d [...]
-<tr class="separator:a671a22033260fa02734c5a1113dcf1ac"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aea992e0cd3d105f964a633b1a0a1a05f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aea992e0cd3d105f964a633b1a0a1a05f"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html#aea992e0cd3d105f964a633b1a0a1a05f">empty</a> () const </td></tr>
-<tr class="memdesc:aea992e0cd3d105f964a633b1a0a1a05f"><td class="mdescLeft"> </td><td class="mdescRight">True if range is empty. <br/></td></tr>
-<tr class="separator:aea992e0cd3d105f964a633b1a0a1a05f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0fce6bcae6269c37623c3a2cdbb8bcf0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0fce6bcae6269c37623c3a2cdbb8bcf0"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html#a0fce6bcae6269c37623c3a2cdbb8bcf0">is_divisible</a> () const </td></tr>
-<tr class="memdesc:a0fce6bcae6269c37623c3a2cdbb8bcf0"><td class="mdescLeft"> </td><td class="mdescRight">True if range is divisible into two pieces. <br/></td></tr>
-<tr class="separator:a0fce6bcae6269c37623c3a2cdbb8bcf0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a788ebedfb4a2eaa4bee11c2c967e0768"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a788ebedfb4a2eaa4bee11c2c967e0768"></a>
- </td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b> (<a class="el" href="a00026.html">blocked_range3d</a> &r, split)</td></tr>
-<tr class="separator:a788ebedfb4a2eaa4bee11c2c967e0768"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0e5fdb794ec7bfc5f21a59ddd466d8e0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0e5fdb794ec7bfc5f21a59ddd466d8e0"></a>
- </td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b> (<a class="el" href="a00026.html">blocked_range3d</a> &r, proportional_split &proportion)</td></tr>
-<tr class="separator:a0e5fdb794ec7bfc5f21a59ddd466d8e0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac83b305fb6dc5da50a4f6c4fdb551654"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac83b305fb6dc5da50a4f6c4fdb551654"></a>
-template<typename Split > </td></tr>
-<tr class="memitem:ac83b305fb6dc5da50a4f6c4fdb551654"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>do_split</b> (<a class="el" href="a00026.html">blocked_range3d</a> &r, Split &split_obj)</td></tr>
-<tr class="separator:ac83b305fb6dc5da50a4f6c4fdb551654"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5b794fd53ba92106aeafa4eed85731d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b794fd53ba92106aeafa4eed85731d4"></a>
-const <a class="el" href="a00026.html#a8cdc866378a12ce198da870d0439676f">page_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html#a5b794fd53ba92106aeafa4eed85731d4">pages</a> () const </td></tr>
-<tr class="memdesc:a5b794fd53ba92106aeafa4eed85731d4"><td class="mdescLeft"> </td><td class="mdescRight">The pages of the iteration space. <br/></td></tr>
-<tr class="separator:a5b794fd53ba92106aeafa4eed85731d4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aeac1def585af81467573f30ebb42cb4f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeac1def585af81467573f30ebb42cb4f"></a>
-const <a class="el" href="a00024.html">row_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html#aeac1def585af81467573f30ebb42cb4f">rows</a> () const </td></tr>
-<tr class="memdesc:aeac1def585af81467573f30ebb42cb4f"><td class="mdescLeft"> </td><td class="mdescRight">The rows of the iteration space. <br/></td></tr>
-<tr class="separator:aeac1def585af81467573f30ebb42cb4f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a308d7089a1d53ff26770a7040ed817cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a308d7089a1d53ff26770a7040ed817cd"></a>
-const <a class="el" href="a00024.html">col_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html#a308d7089a1d53ff26770a7040ed817cd">cols</a> () const </td></tr>
-<tr class="memdesc:a308d7089a1d53ff26770a7040ed817cd"><td class="mdescLeft"> </td><td class="mdescRight">The columns of the iteration space. <br/></td></tr>
-<tr class="separator:a308d7089a1d53ff26770a7040ed817cd"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr class="memitem:a5940c1bd6ba0e8184ef83dea0ae56884"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5940c1bd6ba0e8184ef83dea0ae56884"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html#a5940c1bd6ba0e8184ef83dea0ae56884">is_splittable_in_proportion</a> = true</td></tr>
-<tr class="memdesc:a5940c1bd6ba0e8184ef83dea0ae56884"><td class="mdescLeft"> </td><td class="mdescRight">Static field to support proportional split. <br/></td></tr>
-<tr class="separator:a5940c1bd6ba0e8184ef83dea0ae56884"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab8dc51ef88ff53cc6cc4e40e2c2818eb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab8dc51ef88ff53cc6cc4e40e2c2818eb"></a>
+ </td><td class="memItemRight" valign="bottom"><b>bucket_accessor</b> (<a class="el" href="a00036.html">concurrent_hash_map</a> *base, const hashcode_t h, bool writer=false)</td></tr>
+<tr class="separator:ab8dc51ef88ff53cc6cc4e40e2c2818eb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0d7d8f3d101bb18056b8e5d4d2c8b079"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0d7d8f3d101bb18056b8e5d4d2c8b079"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html#a0d7d8f3d101bb18056b8e5d4d2c8b079">acquire</a> (<a class="el" href="a00036.html">concurrent_hash_map</a> *base, const hashcode_t h, bool writer=false)</td></tr>
+<tr class="memdesc:a0d7d8f3d101bb18056b8e5d4d2c8b079"><td class="mdescLeft"> </td><td class="mdescRight">find a bucket by masked hashcode, optionally rehash, and acquire the lock <br/></td></tr>
+<tr class="separator:a0d7d8f3d101bb18056b8e5d4d2c8b079"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaa8167e2961330435fd23eb92127805c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaa8167e2961330435fd23eb92127805c"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html#aaa8167e2961330435fd23eb92127805c">is_writer</a> ()</td></tr>
+<tr class="memdesc:aaa8167e2961330435fd23eb92127805c"><td class="mdescLeft"> </td><td class="mdescRight">check whether bucket is locked for write <br/></td></tr>
+<tr class="separator:aaa8167e2961330435fd23eb92127805c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a16e714a5e77dbf8daf81973df30722d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16e714a5e77dbf8daf81973df30722d4"></a>
+bucket * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html#a16e714a5e77dbf8daf81973df30722d4">operator()</a> ()</td></tr>
+<tr class="memdesc:a16e714a5e77dbf8daf81973df30722d4"><td class="mdescLeft"> </td><td class="mdescRight">get bucket pointer <br/></td></tr>
+<tr class="separator:a16e714a5e77dbf8daf81973df30722d4"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename PageValue, typename RowValue = PageValue, typename ColValue = RowValue><br/>
-class tbb::blocked_range3d< PageValue, RowValue, ColValue ></h3>
+<div class="textblock"><h3>template<typename Key, typename T, typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >><br/>
+class tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</h3>
 
-<p>A 3-dimensional range that models the Range concept. </p>
+<p>bucket accessor is to find, rehash, acquire a lock, and access a bucket </p>
 </div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>blocked_range3d.h</li>
+<li>concurrent_hash_map.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00029.png b/doc/html/a00026.png
similarity index 100%
rename from doc/html/a00029.png
rename to doc/html/a00026.png
diff --git a/doc/html/a00027.html b/doc/html/a00027.html
index 1e51a90..2667445 100644
--- a/doc/html/a00027.html
+++ b/doc/html/a00027.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::internal::broadcast_cache< T, M > Class Template Reference</title>
+<title>tbb::cache_aligned_allocator< T > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,21 +33,112 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00027.html">broadcast_cache</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00027.html">cache_aligned_allocator</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#pub-types">Public Types</a> |
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="a00267.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::internal::broadcast_cache< T, M > Class Template Reference</div>  </div>
+<div class="title">tbb::cache_aligned_allocator< T > Class Template Reference<div class="ingroups"><a class="el" href="a00254.html">Memory Allocation</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+
+<p>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  
+ <a href="a00027.html#details">More...</a></p>
+
+<p><code>#include <cache_aligned_allocator.h></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00112.html">rebind</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a7aba3042b0a1c934879d5299f0c20e7e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7aba3042b0a1c934879d5299f0c20e7e"></a>
+typedef <br class="typebreak"/>
+internal::allocator_type< T ><br class="typebreak"/>
+::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+<tr class="separator:a7aba3042b0a1c934879d5299f0c20e7e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6fabbb51a8fd7b270b94fc4d9548847b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6fabbb51a8fd7b270b94fc4d9548847b"></a>
+typedef value_type * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+<tr class="separator:a6fabbb51a8fd7b270b94fc4d9548847b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a35edf40f1bb3418f61e7d33c9f796824"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a35edf40f1bb3418f61e7d33c9f796824"></a>
+typedef const value_type * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+<tr class="separator:a35edf40f1bb3418f61e7d33c9f796824"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac9f2f6c7ca74e1f3968d838eec2c4dcb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac9f2f6c7ca74e1f3968d838eec2c4dcb"></a>
+typedef value_type & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+<tr class="separator:ac9f2f6c7ca74e1f3968d838eec2c4dcb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af50d27e385aea41dbb8a9cd0734f1c84"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af50d27e385aea41dbb8a9cd0734f1c84"></a>
+typedef const value_type & </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
+<tr class="separator:af50d27e385aea41dbb8a9cd0734f1c84"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a51eed827a49fd636d1d6c73908f9635b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a51eed827a49fd636d1d6c73908f9635b"></a>
+typedef size_t </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
+<tr class="separator:a51eed827a49fd636d1d6c73908f9635b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8bf47c52cdeee1bc0dcd410cc97faeec"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8bf47c52cdeee1bc0dcd410cc97faeec"></a>
+typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
+<tr class="separator:a8bf47c52cdeee1bc0dcd410cc97faeec"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a11b1921251262137671599e99fbe8d4e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a11b1921251262137671599e99fbe8d4e"></a>
+ </td><td class="memItemRight" valign="bottom"><b>cache_aligned_allocator</b> (const <a class="el" href="a00027.html">cache_aligned_allocator</a> &)  throw ()</td></tr>
+<tr class="separator:a11b1921251262137671599e99fbe8d4e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab5a78cc56dcc0851117b3c88bb3af16a"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab5a78cc56dcc0851117b3c88bb3af16a"></a>
+template<typename U > </td></tr>
+<tr class="memitem:ab5a78cc56dcc0851117b3c88bb3af16a"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>cache_aligned_allocator</b> (const <a class="el" href="a00027.html">cache_aligned_allocator</a>< U > &)  throw ()</td></tr>
+<tr class="separator:ab5a78cc56dcc0851117b3c88bb3af16a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a39aa68042abff22210f801eab98f6dfa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a39aa68042abff22210f801eab98f6dfa"></a>
+pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (reference x) const </td></tr>
+<tr class="separator:a39aa68042abff22210f801eab98f6dfa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5bd8fe0e5de894404c8b868b37a0fe53"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5bd8fe0e5de894404c8b868b37a0fe53"></a>
+const_pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (const_reference x) const </td></tr>
+<tr class="separator:a5bd8fe0e5de894404c8b868b37a0fe53"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a99d05096f80877849cb31d80247e0f85"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a99d05096f80877849cb31d80247e0f85"></a>
+pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00027.html#a99d05096f80877849cb31d80247e0f85">allocate</a> (size_type n, const void *hint=0)</td></tr>
+<tr class="memdesc:a99d05096f80877849cb31d80247e0f85"><td class="mdescLeft"> </td><td class="mdescRight">Allocate space for n objects, starting on a cache/sector line. <br/></td></tr>
+<tr class="separator:a99d05096f80877849cb31d80247e0f85"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7f7310e046c4b6b8618864de8e27a471"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f7310e046c4b6b8618864de8e27a471"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00027.html#a7f7310e046c4b6b8618864de8e27a471">deallocate</a> (pointer p, size_type)</td></tr>
+<tr class="memdesc:a7f7310e046c4b6b8618864de8e27a471"><td class="mdescLeft"> </td><td class="mdescRight">Free block of memory that starts on a cache line. <br/></td></tr>
+<tr class="separator:a7f7310e046c4b6b8618864de8e27a471"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4b945b3180ea3dfe16dfa048f4591c6d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4b945b3180ea3dfe16dfa048f4591c6d"></a>
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00027.html#a4b945b3180ea3dfe16dfa048f4591c6d">max_size</a> () const   throw ()</td></tr>
+<tr class="memdesc:a4b945b3180ea3dfe16dfa048f4591c6d"><td class="mdescLeft"> </td><td class="mdescRight">Largest value for which method allocate might succeed. <br/></td></tr>
+<tr class="separator:a4b945b3180ea3dfe16dfa048f4591c6d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab316f80a66b991801b4ec4ea88b852d9"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab316f80a66b991801b4ec4ea88b852d9"></a>
+template<typename U , typename... Args> </td></tr>
+<tr class="memitem:ab316f80a66b991801b4ec4ea88b852d9"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00027.html#ab316f80a66b991801b4ec4ea88b852d9">construct</a> (U *p, Args &&...args)</td></tr>
+<tr class="memdesc:ab316f80a66b991801b4ec4ea88b852d9"><td class="mdescLeft"> </td><td class="mdescRight">Copy-construct value at location pointed to by p. <br/></td></tr>
+<tr class="separator:ab316f80a66b991801b4ec4ea88b852d9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac5b39984a3eee60e5bf0f10ef609dc4c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac5b39984a3eee60e5bf0f10ef609dc4c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>construct</b> (pointer p, value_type &&value)</td></tr>
+<tr class="separator:ac5b39984a3eee60e5bf0f10ef609dc4c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5086d395a952eb13eb7d72bb0cb26937"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5086d395a952eb13eb7d72bb0cb26937"></a>
+void </td><td class="memItemRight" valign="bottom"><b>construct</b> (pointer p, const value_type &value)</td></tr>
+<tr class="separator:a5086d395a952eb13eb7d72bb0cb26937"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af2fd054d055403d4ea669fd3af661cc8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af2fd054d055403d4ea669fd3af661cc8"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00027.html#af2fd054d055403d4ea669fd3af661cc8">destroy</a> (pointer p)</td></tr>
+<tr class="memdesc:af2fd054d055403d4ea669fd3af661cc8"><td class="mdescLeft"> </td><td class="mdescRight">Destroy value at location pointed to by p. <br/></td></tr>
+<tr class="separator:af2fd054d055403d4ea669fd3af661cc8"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><h3>template<typename T><br/>
+class tbb::cache_aligned_allocator< T ></h3>
+
+<p>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. </p>
+<p>The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>cache_aligned_allocator.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00028.html b/doc/html/a00028.html
index 67479a4..f4aea0d 100644
--- a/doc/html/a00028.html
+++ b/doc/html/a00028.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::broadcast_node< T > Class Template Reference</title>
+<title>tbb::cache_aligned_allocator< void > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,263 +33,53 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00028.html">broadcast_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00028.html">cache_aligned_allocator< void ></a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#nested-classes">Classes</a> |
 <a href="#pub-types">Public Types</a> |
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-methods">Protected Member Functions</a> |
-<a href="#friends">Friends</a> |
-<a href="a00342.html">List of all members</a>  </div>
+<a href="a00269.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::broadcast_node< T > Class Template Reference</div>  </div>
+<div class="title">tbb::cache_aligned_allocator< void > Class Template Reference<div class="ingroups"><a class="el" href="a00254.html">Memory Allocation</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>Forwards messages of type T to all successors.  
+<p>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  
  <a href="a00028.html#details">More...</a></p>
 
-<p><code>#include <flow_graph.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::broadcast_node< T >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00028.png" usemap="#tbb::flow::interface7::broadcast_node< T >_map" alt=""/>
-  <map id="tbb::flow::interface7::broadcast_node< T >_map" name="tbb::flow::interface7::broadcast_node< T >_map">
-<area href="a00072.html" title="The base of all graph nodes. " alt="tbb::flow::interface7::graph_node" shape="rect" coords="0,56,249,80"/>
-<area href="a00124.html" title="Pure virtual template class that defines a receiver of messages of type T. " alt="tbb::flow::interface7::receiver< T >" shape="rect" coords="259,56,508,80"/>
-<area href="a00142.html" title="Pure virtual template class that defines a sender of messages of type T. " alt="tbb::flow::interface7::sender< T >" shape="rect" coords="518,56,767,80"/>
-</map>
- </div></div>
+<p><code>#include <cache_aligned_allocator.h></code></p>
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00109.html">rebind</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:a396fad97f7b6c1235c45775c359bf875"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a396fad97f7b6c1235c45775c359bf875"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
-<tr class="separator:a396fad97f7b6c1235c45775c359bf875"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abb740e1db77807cf104c2337201ba62c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abb740e1db77807cf104c2337201ba62c"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:abb740e1db77807cf104c2337201ba62c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7fa00c900bb20ee3571e34c9ca65aa18"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7fa00c900bb20ee3571e34c9ca65aa18"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> > </td><td class="memItemRight" valign="bottom"><b>predecessor_type</b></td></tr>
-<tr class="separator:a7fa00c900bb20ee3571e34c9ca65aa18"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a619fe24fac9c139c198fa421e002282c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a619fe24fac9c139c198fa421e002282c"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> > </td><td class="memItemRight" valign="bottom"><b>successor_type</b></td></tr>
-<tr class="separator:a619fe24fac9c139c198fa421e002282c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aac520af27bd130f4c40ab28cd1aac95b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aac520af27bd130f4c40ab28cd1aac95b"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> ><br class="typebreak"/>
-::predecessor_list_type </td><td class="memItemRight" valign="bottom"><b>predecessor_list_type</b></td></tr>
-<tr class="separator:aac520af27bd130f4c40ab28cd1aac95b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1ee80a328708b420ad8504ff888e6bbd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1ee80a328708b420ad8504ff888e6bbd"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> ><br class="typebreak"/>
-::successor_list_type </td><td class="memItemRight" valign="bottom"><b>successor_list_type</b></td></tr>
-<tr class="separator:a1ee80a328708b420ad8504ff888e6bbd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1668e062bd1442a8af3c348b1a02deea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1668e062bd1442a8af3c348b1a02deea"></a>
-typedef <a class="el" href="a00142.html">sender</a>< T ><br class="typebreak"/>
-::<a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a> </td><td class="memItemRight" valign="bottom"><b>built_successors_type</b></td></tr>
-<tr class="separator:a1668e062bd1442a8af3c348b1a02deea"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1c1a5eb328956c7c51ac54d433bc01b7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1c1a5eb328956c7c51ac54d433bc01b7"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< T ><br class="typebreak"/>
-::<a class="el" href="a00059.html">built_predecessors_type</a> </td><td class="memItemRight" valign="bottom"><b>built_predecessors_type</b></td></tr>
-<tr class="separator:a1c1a5eb328956c7c51ac54d433bc01b7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00124"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00124')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td></tr>
-<tr class="memitem:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16eccc851b858604344bb8f1bb9eedc8"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a></td></tr>
-<tr class="memdesc:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br/></td></tr>
-<tr class="separator:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbadf5511bd568d283040cd88bd4e81e"></a>
-typedef <a class="el" href="a00142.html">sender</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a></td></tr>
-<tr class="memdesc:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br/></td></tr>
-<tr class="separator:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00d44512fd61d416e6f615e88063d038 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00d44512fd61d416e6f615e88063d038"></a>
-typedef <br class="typebreak"/>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> > </td><td class="memItemRight" valign="bottom"><b>built_predecessors_type</b></td></tr>
-<tr class="separator:a00d44512fd61d416e6f615e88063d038 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2cc119d6dff16073fc5f0d4855a9e4b7 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2cc119d6dff16073fc5f0d4855a9e4b7"></a>
-typedef <br class="typebreak"/>
-built_predecessors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>predecessor_list_type</b></td></tr>
-<tr class="separator:a2cc119d6dff16073fc5f0d4855a9e4b7 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00142"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00142')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td></tr>
-<tr class="memitem:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add86fddf72758d8e5b05b07650c6eeed"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a></td></tr>
-<tr class="memdesc:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">The output type of this sender. <br/></td></tr>
-<tr class="separator:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7779627063a29d4d2a1fc905a5cae8db"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a></td></tr>
-<tr class="memdesc:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <br/></td></tr>
-<tr class="separator:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8aba8b2c5950f113a88f43a97c2207f5"></a>
-typedef <br class="typebreak"/>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a></td></tr>
-<tr class="memdesc:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">interface to record edges for traversal & deletion <br/></td></tr>
-<tr class="separator:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae6c01f7a39a61f6a25f1129e53047b2b inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6c01f7a39a61f6a25f1129e53047b2b"></a>
-typedef <br class="typebreak"/>
-built_successors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>successor_list_type</b></td></tr>
-<tr class="separator:ae6c01f7a39a61f6a25f1129e53047b2b inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:af6faf48f1b1aa2f2766c034b7f394d1f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af6faf48f1b1aa2f2766c034b7f394d1f"></a>
- </td><td class="memItemRight" valign="bottom"><b>broadcast_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:af6faf48f1b1aa2f2766c034b7f394d1f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a467df310431cb8880df709d7686554eb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a467df310431cb8880df709d7686554eb"></a>
- </td><td class="memItemRight" valign="bottom"><b>broadcast_node</b> (const <a class="el" href="a00028.html">broadcast_node</a> &src)</td></tr>
-<tr class="separator:a467df310431cb8880df709d7686554eb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aaba5a50d70a74c22ddee40c86f4be3ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaba5a50d70a74c22ddee40c86f4be3ff"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:aaba5a50d70a74c22ddee40c86f4be3ff"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a36b5c86faa58a264d899b7c26286c80e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a36b5c86faa58a264d899b7c26286c80e"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00028.html#a36b5c86faa58a264d899b7c26286c80e">register_successor</a> (<a class="el" href="a00124.html">receiver</a>< T > &r)</td></tr>
-<tr class="memdesc:a36b5c86faa58a264d899b7c26286c80e"><td class="mdescLeft"> </td><td class="mdescRight">Adds a successor. <br/></td></tr>
-<tr class="separator:a36b5c86faa58a264d899b7c26286c80e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a22d463b071df6e0b7ca11df27bb2637e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a22d463b071df6e0b7ca11df27bb2637e"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00028.html#a22d463b071df6e0b7ca11df27bb2637e">remove_successor</a> (<a class="el" href="a00124.html">receiver</a>< T > &r)</td></tr>
-<tr class="memdesc:a22d463b071df6e0b7ca11df27bb2637e"><td class="mdescLeft"> </td><td class="mdescRight">Removes s as a successor. <br/></td></tr>
-<tr class="separator:a22d463b071df6e0b7ca11df27bb2637e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afe225a28166721a436275b719ff08d3d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afe225a28166721a436275b719ff08d3d"></a>
-<a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a> & </td><td class="memItemRight" valign="bottom"><b>built_successors</b> ()</td></tr>
-<tr class="separator:afe225a28166721a436275b719ff08d3d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a83b41cdc864a2632deb4f6ef9639abea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a83b41cdc864a2632deb4f6ef9639abea"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_successor</b> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &r)</td></tr>
-<tr class="separator:a83b41cdc864a2632deb4f6ef9639abea"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af7529693f698411ee9a5b200af4c385e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af7529693f698411ee9a5b200af4c385e"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_delete_built_successor</b> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &r)</td></tr>
-<tr class="separator:af7529693f698411ee9a5b200af4c385e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa21e8ec19385ac717e69800491e71762"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa21e8ec19385ac717e69800491e71762"></a>
-size_t </td><td class="memItemRight" valign="bottom"><b>successor_count</b> ()</td></tr>
-<tr class="separator:aa21e8ec19385ac717e69800491e71762"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a95807fefbfbed9846968ca5d25224a9f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a95807fefbfbed9846968ca5d25224a9f"></a>
-void </td><td class="memItemRight" valign="bottom"><b>copy_successors</b> (successor_list_type &v)</td></tr>
-<tr class="separator:a95807fefbfbed9846968ca5d25224a9f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a319dcea71ee11d78f9b2145ac356a2fb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a319dcea71ee11d78f9b2145ac356a2fb"></a>
-<a class="el" href="a00059.html">built_predecessors_type</a> & </td><td class="memItemRight" valign="bottom"><b>built_predecessors</b> ()</td></tr>
-<tr class="separator:a319dcea71ee11d78f9b2145ac356a2fb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a77a34aa2b540d022bd63326797182eea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a77a34aa2b540d022bd63326797182eea"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_predecessor</b> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &p)</td></tr>
-<tr class="separator:a77a34aa2b540d022bd63326797182eea"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8cf76475df68f300c1b5426e1b9bdebd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8cf76475df68f300c1b5426e1b9bdebd"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_delete_built_predecessor</b> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &p)</td></tr>
-<tr class="separator:a8cf76475df68f300c1b5426e1b9bdebd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac9dd19ab27e5d4e69e8e50bf066eafc9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac9dd19ab27e5d4e69e8e50bf066eafc9"></a>
-size_t </td><td class="memItemRight" valign="bottom"><b>predecessor_count</b> ()</td></tr>
-<tr class="separator:ac9dd19ab27e5d4e69e8e50bf066eafc9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a63cde974dd706ac756abc03121093ec2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63cde974dd706ac756abc03121093ec2"></a>
-void </td><td class="memItemRight" valign="bottom"><b>copy_predecessors</b> (predecessor_list_type &v)</td></tr>
-<tr class="separator:a63cde974dd706ac756abc03121093ec2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aefe84a0ef509cd03eba043fe9bd45f9f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aefe84a0ef509cd03eba043fe9bd45f9f"></a>
-void </td><td class="memItemRight" valign="bottom"><b>extract</b> ()</td></tr>
-<tr class="separator:aefe84a0ef509cd03eba043fe9bd45f9f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00072')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4badd313105e30f539882276353dcb8e"></a>
- </td><td class="memItemRight" valign="bottom"><b>graph_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00124"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00124')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td></tr>
-<tr class="memitem:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a733889a9053478ef2fb2528e2205bf07"></a>
-virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a733889a9053478ef2fb2528e2205bf07">~receiver</a> ()</td></tr>
-<tr class="memdesc:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br/></td></tr>
-<tr class="separator:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee5067bb4f4b71ffa786c1b33cb9aa6a"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#aee5067bb4f4b71ffa786c1b33cb9aa6a">try_put</a> (const T &t)</td></tr>
-<tr class="memdesc:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Put an item to the receiver. <br/></td></tr>
-<tr class="separator:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a16427aa709505de93ffe0d79136e4251 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16427aa709505de93ffe0d79136e4251"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a16427aa709505de93ffe0d79136e4251">register_predecessor</a> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &)</td></tr>
-<tr class="memdesc:a16427aa709505de93ffe0d79136e4251 inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Add a predecessor to the node. <br/></td></tr>
-<tr class="separator:a16427aa709505de93ffe0d79136e4251 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a55adae6228bbdc1539695e1ec20e9762 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a55adae6228bbdc1539695e1ec20e9762"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a55adae6228bbdc1539695e1ec20e9762">remove_predecessor</a> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &)</td></tr>
-<tr class="memdesc:a55adae6228bbdc1539695e1ec20e9762 inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Remove a predecessor from the node. <br/></td></tr>
-<tr class="separator:a55adae6228bbdc1539695e1ec20e9762 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a63273d246d9dd8d259f9cc1eead42eb2 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63273d246d9dd8d259f9cc1eead42eb2"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>copy_predecessors</b> (predecessor_list_type &)=0</td></tr>
-<tr class="separator:a63273d246d9dd8d259f9cc1eead42eb2 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00142"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00142')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td></tr>
-<tr class="memitem:ad50b8ac93e79cbdcd2bba11d35432f2c inherit pub_methods_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad50b8ac93e79cbdcd2bba11d35432f2c"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#ad50b8ac93e79cbdcd2bba11d35432f2c">try_get</a> (T &)</td></tr>
-<tr class="memdesc:ad50b8ac93e79cbdcd2bba11d35432f2c inherit pub_methods_a00142"><td class="mdescLeft"> </td><td class="mdescRight">Request an item from the sender. <br/></td></tr>
-<tr class="separator:ad50b8ac93e79cbdcd2bba11d35432f2c inherit pub_methods_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa1b9dcf77ab558530ff93a706b4c4b5d inherit pub_methods_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa1b9dcf77ab558530ff93a706b4c4b5d"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#aa1b9dcf77ab558530ff93a706b4c4b5d">try_reserve</a> (T &)</td></tr>
-<tr class="memdesc:aa1b9dcf77ab558530ff93a706b4c4b5d inherit pub_methods_a00142"><td class="mdescLeft"> </td><td class="mdescRight">Reserves an item in the sender. <br/></td></tr>
-<tr class="separator:aa1b9dcf77ab558530ff93a706b4c4b5d inherit pub_methods_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a97ac316ddfb6bd7c7f2f56e3e819a30a inherit pub_methods_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a97ac316ddfb6bd7c7f2f56e3e819a30a"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a97ac316ddfb6bd7c7f2f56e3e819a30a">try_release</a> ()</td></tr>
-<tr class="memdesc:a97ac316ddfb6bd7c7f2f56e3e819a30a inherit pub_methods_a00142"><td class="mdescLeft"> </td><td class="mdescRight">Releases the reserved item. <br/></td></tr>
-<tr class="separator:a97ac316ddfb6bd7c7f2f56e3e819a30a inherit pub_methods_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad404d5218c7ae2556261ffa880cdf804 inherit pub_methods_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad404d5218c7ae2556261ffa880cdf804"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#ad404d5218c7ae2556261ffa880cdf804">try_consume</a> ()</td></tr>
-<tr class="memdesc:ad404d5218c7ae2556261ffa880cdf804 inherit pub_methods_a00142"><td class="mdescLeft"> </td><td class="mdescRight">Consumes the reserved item. <br/></td></tr>
-<tr class="separator:ad404d5218c7ae2556261ffa880cdf804 inherit pub_methods_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:a07d030b43c6e2d9169a7e58db30a547b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a07d030b43c6e2d9169a7e58db30a547b"></a>
-task * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00028.html#a07d030b43c6e2d9169a7e58db30a547b">try_put_task</a> (const T &t)</td></tr>
-<tr class="memdesc:a07d030b43c6e2d9169a7e58db30a547b"><td class="mdescLeft"> </td><td class="mdescRight">build a task to run the successor if possible. Default is old behavior. <br/></td></tr>
-<tr class="separator:a07d030b43c6e2d9169a7e58db30a547b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac83ec0b9ef18f06573a094aa4f525851"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac83ec0b9ef18f06573a094aa4f525851"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_receiver</b> (__TBB_PFG_RESET_ARG(reset_flags))</td></tr>
-<tr class="separator:ac83ec0b9ef18f06573a094aa4f525851"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8359e833552ecb59db265a3d61263d1b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8359e833552ecb59db265a3d61263d1b"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f))</td></tr>
-<tr class="separator:a8359e833552ecb59db265a3d61263d1b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00072')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac25a4633873c052047b1dd568824d055"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0</td></tr>
-<tr class="separator:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00124"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00124')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td></tr>
-<tr class="memitem:ac902b1e09eea9748223eb50dc38d3575 inherit pro_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac902b1e09eea9748223eb50dc38d3575"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>reset_receiver</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0</td></tr>
-<tr class="separator:ac902b1e09eea9748223eb50dc38d3575 inherit pro_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae91eab3e06d4139ac38f143c74fe9eab inherit pro_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae91eab3e06d4139ac38f143c74fe9eab"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><b>is_continue_receiver</b> ()</td></tr>
-<tr class="separator:ae91eab3e06d4139ac38f143c74fe9eab inherit pro_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplParams" colspan="2"><a class="anchor" id="abaf9bf74ca5f2854d09f5f07337280eb"></a>
-template<typename R , typename B > </td></tr>
-<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>run_and_put_task</b></td></tr>
-<tr class="separator:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1360e38efe396058978cf3754ad620f5"></a>
-template<typename X , typename Y > </td></tr>
-<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::broadcast_cache</b></td></tr>
-<tr class="separator:a1360e38efe396058978cf3754ad620f5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplParams" colspan="2"><a class="anchor" id="acbd9ac2610587a99cd7d43344297cc49"></a>
-template<typename X , typename Y > </td></tr>
-<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::round_robin_cache</b></td></tr>
-<tr class="separator:acbd9ac2610587a99cd7d43344297cc49"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pro_attribs_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00072')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1caee1c5677047b05d18b1662ca6fdf8"></a>
-<a class="el" href="a00070.html">graph</a> & </td><td class="memItemRight" valign="bottom"><b>my_graph</b></td></tr>
-<tr class="separator:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af48cd0cd4f6e44efc3b353adb55f86a8"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>next</b></td></tr>
-<tr class="separator:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6917bffc3cb150319679bf2395e68caa"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>prev</b></td></tr>
-<tr class="separator:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a630325567e2ede3937a0d2e0f2da6a3f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a630325567e2ede3937a0d2e0f2da6a3f"></a>
+typedef void * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+<tr class="separator:a630325567e2ede3937a0d2e0f2da6a3f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a36f63efa0a37d205705b9d5944432864"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a36f63efa0a37d205705b9d5944432864"></a>
+typedef const void * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+<tr class="separator:a36f63efa0a37d205705b9d5944432864"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af7f973d0bb12319600505cf9c1fb35b0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af7f973d0bb12319600505cf9c1fb35b0"></a>
+typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+<tr class="separator:af7f973d0bb12319600505cf9c1fb35b0"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename T><br/>
-class tbb::flow::interface7::broadcast_node< T ></h3>
+<div class="textblock"><h3>template<><br/>
+class tbb::cache_aligned_allocator< void ></h3>
 
-<p>Forwards messages of type T to all successors. </p>
+<p>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. </p>
 </div><hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<li>cache_aligned_allocator.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00028.png b/doc/html/a00028.png
deleted file mode 100644
index 1ccd735..0000000
Binary files a/doc/html/a00028.png and /dev/null differ
diff --git a/doc/html/a00029.html b/doc/html/a00029.html
index 306bc5b..2f6562b 100644
--- a/doc/html/a00029.html
+++ b/doc/html/a00029.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor Class Reference</title>
+<title>tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,61 +33,41 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00043.html">concurrent_hash_map</a></li><li class="navelem"><a class="el" href="a00029.html">bucket_accessor</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00036.html">concurrent_hash_map</a></li><li class="navelem"><a class="el" href="a00029.html">call_clear_on_leave</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00371.html">List of all members</a>  </div>
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="a00359.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor Class Reference</div>  </div>
+<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave Struct Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>bucket accessor is to find, rehash, acquire a lock, and access a bucket  
- <a href="a00029.html#details">More...</a></p>
-
-<p><code>#include <concurrent_hash_map.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00029.png" usemap="#tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor_map" alt=""/>
-  <map id="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor_map" name="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor_map">
-</map>
- </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:ab8dc51ef88ff53cc6cc4e40e2c2818eb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab8dc51ef88ff53cc6cc4e40e2c2818eb"></a>
- </td><td class="memItemRight" valign="bottom"><b>bucket_accessor</b> (<a class="el" href="a00043.html">concurrent_hash_map</a> *base, const hashcode_t h, bool writer=false)</td></tr>
-<tr class="separator:ab8dc51ef88ff53cc6cc4e40e2c2818eb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0d7d8f3d101bb18056b8e5d4d2c8b079"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0d7d8f3d101bb18056b8e5d4d2c8b079"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00029.html#a0d7d8f3d101bb18056b8e5d4d2c8b079">acquire</a> (<a class="el" href="a00043.html">concurrent_hash_map</a> *base, const hashcode_t h, bool writer=false)</td></tr>
-<tr class="memdesc:a0d7d8f3d101bb18056b8e5d4d2c8b079"><td class="mdescLeft"> </td><td class="mdescRight">find a bucket by masked hashcode, optionally rehash, and acquire the lock <br/></td></tr>
-<tr class="separator:a0d7d8f3d101bb18056b8e5d4d2c8b079"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aaa8167e2961330435fd23eb92127805c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaa8167e2961330435fd23eb92127805c"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00029.html#aaa8167e2961330435fd23eb92127805c">is_writer</a> ()</td></tr>
-<tr class="memdesc:aaa8167e2961330435fd23eb92127805c"><td class="mdescLeft"> </td><td class="mdescRight">check whether bucket is locked for write <br/></td></tr>
-<tr class="separator:aaa8167e2961330435fd23eb92127805c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a16e714a5e77dbf8daf81973df30722d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16e714a5e77dbf8daf81973df30722d4"></a>
-bucket * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00029.html#a16e714a5e77dbf8daf81973df30722d4">operator()</a> ()</td></tr>
-<tr class="memdesc:a16e714a5e77dbf8daf81973df30722d4"><td class="mdescLeft"> </td><td class="mdescRight">get bucket pointer <br/></td></tr>
-<tr class="separator:a16e714a5e77dbf8daf81973df30722d4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4b242f28514cb0e4fb2e462c8fead03e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4b242f28514cb0e4fb2e462c8fead03e"></a>
+ </td><td class="memItemRight" valign="bottom"><b>call_clear_on_leave</b> (<a class="el" href="a00036.html">concurrent_hash_map</a> *a_ch_map)</td></tr>
+<tr class="separator:a4b242f28514cb0e4fb2e462c8fead03e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0e56acf6cbc5a9bc38018a8640050054"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0e56acf6cbc5a9bc38018a8640050054"></a>
+void </td><td class="memItemRight" valign="bottom"><b>dismiss</b> ()</td></tr>
+<tr class="separator:a0e56acf6cbc5a9bc38018a8640050054"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a22e1559dccd2fd4345ca0ff389c6ad29"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a22e1559dccd2fd4345ca0ff389c6ad29"></a>
+<a class="el" href="a00036.html">concurrent_hash_map</a> * </td><td class="memItemRight" valign="bottom"><b>my_ch_map</b></td></tr>
+<tr class="separator:a22e1559dccd2fd4345ca0ff389c6ad29"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename Key, typename T, typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >><br/>
-class tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</h3>
-
-<p>bucket accessor is to find, rehash, acquire a lock, and access a bucket </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
+<hr/>The documentation for this struct was generated from the following file:<ul>
 <li>concurrent_hash_map.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00030.html b/doc/html/a00030.html
index ba4786a..79eb812 100644
--- a/doc/html/a00030.html
+++ b/doc/html/a00030.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::buffer_node< T, A > Class Template Reference</title>
+<title>tbb::flow::interface9::callback< Callback, T > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,585 +33,43 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00030.html">buffer_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00030.html">callback</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-types">Protected Types</a> |
-<a href="#pro-methods">Protected Member Functions</a> |
-<a href="#pro-attribs">Protected Attributes</a> |
-<a href="#friends">Friends</a> |
-<a href="a00343.html">List of all members</a>  </div>
+<a href="a00337.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::buffer_node< T, A > Class Template Reference</div>  </div>
+<div class="title">tbb::flow::interface9::callback< Callback, T > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Forwards messages in arbitrary order.  
- <a href="a00030.html#details">More...</a></p>
-
-<p><code>#include <flow_graph.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::buffer_node< T, A >:</div>
+Inheritance diagram for tbb::flow::interface9::callback< Callback, T >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00030.png" usemap="#tbb::flow::interface7::buffer_node< T, A >_map" alt=""/>
-  <map id="tbb::flow::interface7::buffer_node< T, A >_map" name="tbb::flow::interface7::buffer_node< T, A >_map">
-<area href="a00072.html" title="The base of all graph nodes. " alt="tbb::flow::interface7::graph_node" shape="rect" coords="0,56,352,80"/>
-<area href="a00124.html" title="Pure virtual template class that defines a receiver of messages of type T. " alt="tbb::flow::interface7::receiver< T >" shape="rect" coords="724,56,1076,80"/>
-<area href="a00142.html" title="Pure virtual template class that defines a sender of messages of type T. " alt="tbb::flow::interface7::sender< T >" shape="rect" coords="1086,56,1438,80"/>
-<area href="a00109.html" title="Forwards messages in priority order. " alt="tbb::flow::interface7::priority_queue_node< T, Compare, A >" shape="rect" coords="362,168,714,192"/>
-<area href="a00110.html" title="Forwards messages in FIFO order. " alt="tbb::flow::interface7::queue_node< T, A >" shape="rect" coords="724,168,1076,192"/>
-<area href="a00143.html" title="Forwards messages in sequence order. " alt="tbb::flow::interface7::sequencer_node< T, A >" shape="rect" coords="724,224,1076,248"/>
+  <img src="a00030.png" usemap="#tbb::flow::interface9::callback< Callback, T >_map" alt=""/>
+  <map id="tbb::flow::interface9::callback< Callback, T >_map" name="tbb::flow::interface9::callback< Callback, T >_map">
+<area href="a00031.html" alt="tbb::flow::interface9::callback_base" shape="rect" coords="0,56,263,80"/>
 </map>
  </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00031.html">buffer_operation</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a57a0aab7103d1d0cbf27560c9acf6c8f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a57a0aab7103d1d0cbf27560c9acf6c8f"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
-<tr class="separator:a57a0aab7103d1d0cbf27560c9acf6c8f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abedb8c98e62146c3473344b7148173b8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abedb8c98e62146c3473344b7148173b8"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:abedb8c98e62146c3473344b7148173b8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3c34a2182dcbbded45da979b0f405817"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c34a2182dcbbded45da979b0f405817"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> > </td><td class="memItemRight" valign="bottom"><b>predecessor_type</b></td></tr>
-<tr class="separator:a3c34a2182dcbbded45da979b0f405817"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5e505e0c4a904e2c1ded8c7c8f657c3b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e505e0c4a904e2c1ded8c7c8f657c3b"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> > </td><td class="memItemRight" valign="bottom"><b>successor_type</b></td></tr>
-<tr class="separator:a5e505e0c4a904e2c1ded8c7c8f657c3b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a60032183e0f0266dc17b140e47dd8fc1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a60032183e0f0266dc17b140e47dd8fc1"></a>
-typedef <a class="el" href="a00030.html">buffer_node</a>< T, A > </td><td class="memItemRight" valign="bottom"><b>my_class</b></td></tr>
-<tr class="separator:a60032183e0f0266dc17b140e47dd8fc1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a66143b157bc766e35601b0c28362f99e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a66143b157bc766e35601b0c28362f99e"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> ><br class="typebreak"/>
-::predecessor_list_type </td><td class="memItemRight" valign="bottom"><b>predecessor_list_type</b></td></tr>
-<tr class="separator:a66143b157bc766e35601b0c28362f99e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a39ebd2459b9cb2497e323141685c926f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a39ebd2459b9cb2497e323141685c926f"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> ><br class="typebreak"/>
-::successor_list_type </td><td class="memItemRight" valign="bottom"><b>successor_list_type</b></td></tr>
-<tr class="separator:a39ebd2459b9cb2497e323141685c926f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00124"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00124')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td></tr>
-<tr class="memitem:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16eccc851b858604344bb8f1bb9eedc8"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a></td></tr>
-<tr class="memdesc:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br/></td></tr>
-<tr class="separator:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbadf5511bd568d283040cd88bd4e81e"></a>
-typedef <a class="el" href="a00142.html">sender</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a></td></tr>
-<tr class="memdesc:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br/></td></tr>
-<tr class="separator:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00d44512fd61d416e6f615e88063d038 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00d44512fd61d416e6f615e88063d038"></a>
-typedef <br class="typebreak"/>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> > </td><td class="memItemRight" valign="bottom"><b>built_predecessors_type</b></td></tr>
-<tr class="separator:a00d44512fd61d416e6f615e88063d038 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2cc119d6dff16073fc5f0d4855a9e4b7 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2cc119d6dff16073fc5f0d4855a9e4b7"></a>
-typedef <br class="typebreak"/>
-built_predecessors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>predecessor_list_type</b></td></tr>
-<tr class="separator:a2cc119d6dff16073fc5f0d4855a9e4b7 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00142"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00142')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td></tr>
-<tr class="memitem:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add86fddf72758d8e5b05b07650c6eeed"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a></td></tr>
-<tr class="memdesc:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">The output type of this sender. <br/></td></tr>
-<tr class="separator:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7779627063a29d4d2a1fc905a5cae8db"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a></td></tr>
-<tr class="memdesc:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <br/></td></tr>
-<tr class="separator:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8aba8b2c5950f113a88f43a97c2207f5"></a>
-typedef <br class="typebreak"/>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a></td></tr>
-<tr class="memdesc:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">interface to record edges for traversal & deletion <br/></td></tr>
-<tr class="separator:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae6c01f7a39a61f6a25f1129e53047b2b inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6c01f7a39a61f6a25f1129e53047b2b"></a>
-typedef <br class="typebreak"/>
-built_successors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>successor_list_type</b></td></tr>
-<tr class="separator:ae6c01f7a39a61f6a25f1129e53047b2b inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a152f7bb9ab1f033ec56caa451327634c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a152f7bb9ab1f033ec56caa451327634c"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a152f7bb9ab1f033ec56caa451327634c">buffer_node</a> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="memdesc:a152f7bb9ab1f033ec56caa451327634c"><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br/></td></tr>
-<tr class="separator:a152f7bb9ab1f033ec56caa451327634c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a739635c43d1150f2c8dd3f455d698d36"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a739635c43d1150f2c8dd3f455d698d36"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a739635c43d1150f2c8dd3f455d698d36">buffer_node</a> (const <a class="el" href="a00030.html">buffer_node</a> &src)</td></tr>
-<tr class="memdesc:a739635c43d1150f2c8dd3f455d698d36"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br/></td></tr>
-<tr class="separator:a739635c43d1150f2c8dd3f455d698d36"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6d38f53c02a6fa64754826249dab5185"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6d38f53c02a6fa64754826249dab5185"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:a6d38f53c02a6fa64754826249dab5185"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5e87f7e8fd8698f62f2cad8b52b6e565"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a5e87f7e8fd8698f62f2cad8b52b6e565">register_successor</a> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &r)</td></tr>
-<tr class="memdesc:a5e87f7e8fd8698f62f2cad8b52b6e565"><td class="mdescLeft"> </td><td class="mdescRight">Adds a new successor.  <a href="#a5e87f7e8fd8698f62f2cad8b52b6e565">More...</a><br/></td></tr>
-<tr class="separator:a5e87f7e8fd8698f62f2cad8b52b6e565"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1db0288f46391e3a0a003c181ae87c38"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1db0288f46391e3a0a003c181ae87c38"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_successor</b> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &r)</td></tr>
-<tr class="separator:a1db0288f46391e3a0a003c181ae87c38"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acce1c8dbcf21cfb56d1583cb716398f4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acce1c8dbcf21cfb56d1583cb716398f4"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_delete_built_successor</b> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &r)</td></tr>
-<tr class="separator:acce1c8dbcf21cfb56d1583cb716398f4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4c20eb93a5601b442a589a20bca403a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c20eb93a5601b442a589a20bca403a4"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_predecessor</b> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &p)</td></tr>
-<tr class="separator:a4c20eb93a5601b442a589a20bca403a4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae19e0420a628d31cbd685c4c9e513f04"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae19e0420a628d31cbd685c4c9e513f04"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_delete_built_predecessor</b> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &p)</td></tr>
-<tr class="separator:ae19e0420a628d31cbd685c4c9e513f04"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a784b06e7c4091a3ef4f9a6b0ffe35bdb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a784b06e7c4091a3ef4f9a6b0ffe35bdb"></a>
-size_t </td><td class="memItemRight" valign="bottom"><b>predecessor_count</b> ()</td></tr>
-<tr class="separator:a784b06e7c4091a3ef4f9a6b0ffe35bdb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a95a3b3ce6658e5c3298e2e361cde9a78"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a95a3b3ce6658e5c3298e2e361cde9a78"></a>
-size_t </td><td class="memItemRight" valign="bottom"><b>successor_count</b> ()</td></tr>
-<tr class="separator:a95a3b3ce6658e5c3298e2e361cde9a78"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af20f7dba5c291f03bfabcabe250cbd23"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af20f7dba5c291f03bfabcabe250cbd23"></a>
-void </td><td class="memItemRight" valign="bottom"><b>copy_predecessors</b> (predecessor_list_type &v)</td></tr>
-<tr class="separator:af20f7dba5c291f03bfabcabe250cbd23"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7ec31111eb839e28e2cfeb08192bbfa5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7ec31111eb839e28e2cfeb08192bbfa5"></a>
-void </td><td class="memItemRight" valign="bottom"><b>copy_successors</b> (successor_list_type &v)</td></tr>
-<tr class="separator:a7ec31111eb839e28e2cfeb08192bbfa5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3c31300c060bffbbad7798219e702aba"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a3c31300c060bffbbad7798219e702aba">remove_successor</a> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &r)</td></tr>
-<tr class="memdesc:a3c31300c060bffbbad7798219e702aba"><td class="mdescLeft"> </td><td class="mdescRight">Removes a successor.  <a href="#a3c31300c060bffbbad7798219e702aba">More...</a><br/></td></tr>
-<tr class="separator:a3c31300c060bffbbad7798219e702aba"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a175cb77dfbdd0e322097a833a2271c1e"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a175cb77dfbdd0e322097a833a2271c1e">try_get</a> (T &v)</td></tr>
-<tr class="memdesc:a175cb77dfbdd0e322097a833a2271c1e"><td class="mdescLeft"> </td><td class="mdescRight">Request an item from the <a class="el" href="a00030.html" title="Forwards messages in arbitrary order. ">buffer_node</a>.  <a href="#a175cb77dfbdd0e322097a833a2271c1e">More...</a><br/></td></tr>
-<tr class="separator:a175cb77dfbdd0e322097a833a2271c1e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3b12cdebf8cef15b90e3c9cd9e51019f"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a3b12cdebf8cef15b90e3c9cd9e51019f">try_reserve</a> (T &v)</td></tr>
-<tr class="memdesc:a3b12cdebf8cef15b90e3c9cd9e51019f"><td class="mdescLeft"> </td><td class="mdescRight">Reserves an item.  <a href="#a3b12cdebf8cef15b90e3c9cd9e51019f">More...</a><br/></td></tr>
-<tr class="separator:a3b12cdebf8cef15b90e3c9cd9e51019f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aaa3745fd4705345df16fb33954d93e30"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#aaa3745fd4705345df16fb33954d93e30">try_release</a> ()</td></tr>
-<tr class="memdesc:aaa3745fd4705345df16fb33954d93e30"><td class="mdescLeft"> </td><td class="mdescRight">Release a reserved item.  <a href="#aaa3745fd4705345df16fb33954d93e30">More...</a><br/></td></tr>
-<tr class="separator:aaa3745fd4705345df16fb33954d93e30"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a335072bc547c5e9b40f58dfeab525953"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a335072bc547c5e9b40f58dfeab525953">try_consume</a> ()</td></tr>
-<tr class="memdesc:a335072bc547c5e9b40f58dfeab525953"><td class="mdescLeft"> </td><td class="mdescRight">Consumes a reserved item.  <a href="#a335072bc547c5e9b40f58dfeab525953">More...</a><br/></td></tr>
-<tr class="separator:a335072bc547c5e9b40f58dfeab525953"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6fcdf027115b519b3b868a7430c39639"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6fcdf027115b519b3b868a7430c39639"></a>
-void </td><td class="memItemRight" valign="bottom"><b>extract</b> ()</td></tr>
-<tr class="separator:a6fcdf027115b519b3b868a7430c39639"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00072')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4badd313105e30f539882276353dcb8e"></a>
- </td><td class="memItemRight" valign="bottom"><b>graph_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00124"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00124')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td></tr>
-<tr class="memitem:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a733889a9053478ef2fb2528e2205bf07"></a>
-virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a733889a9053478ef2fb2528e2205bf07">~receiver</a> ()</td></tr>
-<tr class="memdesc:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br/></td></tr>
-<tr class="separator:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee5067bb4f4b71ffa786c1b33cb9aa6a"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#aee5067bb4f4b71ffa786c1b33cb9aa6a">try_put</a> (const T &t)</td></tr>
-<tr class="memdesc:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Put an item to the receiver. <br/></td></tr>
-<tr class="separator:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a16427aa709505de93ffe0d79136e4251 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16427aa709505de93ffe0d79136e4251"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a16427aa709505de93ffe0d79136e4251">register_predecessor</a> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &)</td></tr>
-<tr class="memdesc:a16427aa709505de93ffe0d79136e4251 inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Add a predecessor to the node. <br/></td></tr>
-<tr class="separator:a16427aa709505de93ffe0d79136e4251 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a55adae6228bbdc1539695e1ec20e9762 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a55adae6228bbdc1539695e1ec20e9762"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a55adae6228bbdc1539695e1ec20e9762">remove_predecessor</a> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &)</td></tr>
-<tr class="memdesc:a55adae6228bbdc1539695e1ec20e9762 inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Remove a predecessor from the node. <br/></td></tr>
-<tr class="separator:a55adae6228bbdc1539695e1ec20e9762 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a63273d246d9dd8d259f9cc1eead42eb2 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63273d246d9dd8d259f9cc1eead42eb2"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>copy_predecessors</b> (predecessor_list_type &)=0</td></tr>
-<tr class="separator:a63273d246d9dd8d259f9cc1eead42eb2 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-types"></a>
-Protected Types</h2></td></tr>
-<tr class="memitem:a0e9c45eefd5231c6a7f8e78ab4b3e3c1"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>op_type</b> { <br/>
-  <b>reg_succ</b>, 
-<b>rem_succ</b>, 
-<b>req_item</b>, 
-<b>res_item</b>, 
-<br/>
-  <b>rel_res</b>, 
-<b>con_res</b>, 
-<b>put_item</b>, 
-<b>try_fwd_task</b>, 
-<br/>
-  <b>add_blt_succ</b>, 
-<b>del_blt_succ</b>, 
-<b>add_blt_pred</b>, 
-<b>del_blt_pred</b>, 
-<br/>
-  <b>blt_succ_cnt</b>, 
-<b>blt_pred_cnt</b>, 
-<b>blt_succ_cpy</b>, 
-<b>blt_pred_cpy</b>
-<br/>
- }</td></tr>
-<tr class="separator:a0e9c45eefd5231c6a7f8e78ab4b3e3c1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a97578c4c0b47aa1e7281d0343f45c6e2"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>op_stat</b> { <b>WAIT</b> =0, 
-<b>SUCCEEDED</b>, 
-<b>FAILED</b>
- }</td></tr>
-<tr class="separator:a97578c4c0b47aa1e7281d0343f45c6e2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac2ba7ceb6c4c435c5abc9846a91853e2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac2ba7ceb6c4c435c5abc9846a91853e2"></a>
-typedef size_t </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-<tr class="separator:ac2ba7ceb6c4c435c5abc9846a91853e2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7f1a187e32fb9a630a142ef37aeda958"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f1a187e32fb9a630a142ef37aeda958"></a>
-typedef <br class="typebreak"/>
-internal::aggregating_functor<br class="typebreak"/>
-< <a class="el" href="a00030.html">my_class</a>, <a class="el" href="a00031.html">buffer_operation</a> > </td><td class="memItemRight" valign="bottom"><b>my_handler</b></td></tr>
-<tr class="separator:a7f1a187e32fb9a630a142ef37aeda958"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5f09abf6db812abcbeb262b7f1b844a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f09abf6db812abcbeb262b7f1b844a5"></a>
-typedef <a class="el" href="a00142.html">sender</a>< T ><br class="typebreak"/>
-::<a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a> </td><td class="memItemRight" valign="bottom"><b>built_successors_type</b></td></tr>
-<tr class="separator:a5f09abf6db812abcbeb262b7f1b844a5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a81e553b64ccf191ddf3768cb1c184c1d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a81e553b64ccf191ddf3768cb1c184c1d"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< T ><br class="typebreak"/>
-::<a class="el" href="a00059.html">built_predecessors_type</a> </td><td class="memItemRight" valign="bottom"><b>built_predecessors_type</b></td></tr>
-<tr class="separator:a81e553b64ccf191ddf3768cb1c184c1d"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:a2d09326016a31e17acd57f8e6ce58054"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2d09326016a31e17acd57f8e6ce58054"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>handle_operations</b> (<a class="el" href="a00031.html">buffer_operation</a> *op_list)</td></tr>
-<tr class="separator:a2d09326016a31e17acd57f8e6ce58054"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5fde962bed26ee41c370e48bce678320"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5fde962bed26ee41c370e48bce678320"></a>
-task * </td><td class="memItemRight" valign="bottom"><b>grab_forwarding_task</b> (<a class="el" href="a00031.html">buffer_operation</a> &op_data)</td></tr>
-<tr class="separator:a5fde962bed26ee41c370e48bce678320"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a19dbfc4065f57efd7375fcc1b259dd9c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a19dbfc4065f57efd7375fcc1b259dd9c"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>enqueue_forwarding_task</b> (<a class="el" href="a00031.html">buffer_operation</a> &op_data)</td></tr>
-<tr class="separator:a19dbfc4065f57efd7375fcc1b259dd9c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8910a497040a4c6f1a6a1fb7a33a8888"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8910a497040a4c6f1a6a1fb7a33a8888"></a>
-virtual task * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a8910a497040a4c6f1a6a1fb7a33a8888">forward_task</a> ()</td></tr>
-<tr class="memdesc:a8910a497040a4c6f1a6a1fb7a33a8888"><td class="mdescLeft"> </td><td class="mdescRight">This is executed by an enqueued task, the "forwarder". <br/></td></tr>
-<tr class="separator:a8910a497040a4c6f1a6a1fb7a33a8888"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afa2dd93a1b42e77ccf7e1de0fddf3158"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa2dd93a1b42e77ccf7e1de0fddf3158"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#afa2dd93a1b42e77ccf7e1de0fddf3158">internal_reg_succ</a> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="memdesc:afa2dd93a1b42e77ccf7e1de0fddf3158"><td class="mdescLeft"> </td><td class="mdescRight">Register successor. <br/></td></tr>
-<tr class="separator:afa2dd93a1b42e77ccf7e1de0fddf3158"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a46c7f9cd9130036244d4ea8efd74bf22"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a46c7f9cd9130036244d4ea8efd74bf22"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a46c7f9cd9130036244d4ea8efd74bf22">internal_rem_succ</a> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="memdesc:a46c7f9cd9130036244d4ea8efd74bf22"><td class="mdescLeft"> </td><td class="mdescRight">Remove successor. <br/></td></tr>
-<tr class="separator:a46c7f9cd9130036244d4ea8efd74bf22"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3fd4023955e4ab600dbc0e31740e6321"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3fd4023955e4ab600dbc0e31740e6321"></a>
-<a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a> & </td><td class="memItemRight" valign="bottom"><b>built_successors</b> ()</td></tr>
-<tr class="separator:a3fd4023955e4ab600dbc0e31740e6321"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aeb7b729bec462169cb67326bd17b11e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeb7b729bec462169cb67326bd17b11e4"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_succ</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:aeb7b729bec462169cb67326bd17b11e4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac382cedb8002e429ce2ccda29ed0d137"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac382cedb8002e429ce2ccda29ed0d137"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_del_built_succ</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:ac382cedb8002e429ce2ccda29ed0d137"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1a951a36f8f2ed91f9b7c918486dc915"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1a951a36f8f2ed91f9b7c918486dc915"></a>
-<a class="el" href="a00059.html">built_predecessors_type</a> & </td><td class="memItemRight" valign="bottom"><b>built_predecessors</b> ()</td></tr>
-<tr class="separator:a1a951a36f8f2ed91f9b7c918486dc915"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac851d86cc55d14f57b4cc7ef889610be"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac851d86cc55d14f57b4cc7ef889610be"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_pred</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:ac851d86cc55d14f57b4cc7ef889610be"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a32ff0f0106531343a46b53b882763317"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a32ff0f0106531343a46b53b882763317"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_del_built_pred</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:a32ff0f0106531343a46b53b882763317"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a632cbb0a8529d8fb559aa33cbd99b613"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a632cbb0a8529d8fb559aa33cbd99b613"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_succ_cnt</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:a632cbb0a8529d8fb559aa33cbd99b613"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa162bcd7cf8f7021ad8571d4db505bff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa162bcd7cf8f7021ad8571d4db505bff"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_pred_cnt</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:aa162bcd7cf8f7021ad8571d4db505bff"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae2fad967e9fff72d5e7669f94744bc2d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae2fad967e9fff72d5e7669f94744bc2d"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_copy_succs</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:ae2fad967e9fff72d5e7669f94744bc2d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5c60751dba6a99adef58871ee520ae6e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5c60751dba6a99adef58871ee520ae6e"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_copy_preds</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:a5c60751dba6a99adef58871ee520ae6e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3aa7578ccbd3d5f986869ab8698c037c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3aa7578ccbd3d5f986869ab8698c037c"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a3aa7578ccbd3d5f986869ab8698c037c">internal_forward_task</a> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="memdesc:a3aa7578ccbd3d5f986869ab8698c037c"><td class="mdescLeft"> </td><td class="mdescRight">Tries to forward valid items to successors. <br/></td></tr>
-<tr class="separator:a3aa7578ccbd3d5f986869ab8698c037c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2fe75e82e8dffa7d13fa9e82d9951dba"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2fe75e82e8dffa7d13fa9e82d9951dba"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_push</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:a2fe75e82e8dffa7d13fa9e82d9951dba"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a574bf95b7b06f24bafb13aa586dd2c66"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a574bf95b7b06f24bafb13aa586dd2c66"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_pop</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:a574bf95b7b06f24bafb13aa586dd2c66"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aeaea0922cb1344925524d892864f78e0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeaea0922cb1344925524d892864f78e0"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_reserve</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:aeaea0922cb1344925524d892864f78e0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5f90411a5cc3f5c7c4210f8bb4e73f68"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f90411a5cc3f5c7c4210f8bb4e73f68"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_consume</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:a5f90411a5cc3f5c7c4210f8bb4e73f68"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae7b3eee1ec878f6f0055f6133b233c09"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae7b3eee1ec878f6f0055f6133b233c09"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_release</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:ae7b3eee1ec878f6f0055f6133b233c09"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa4517c0a58649ea5eb140ab4b786e1ec"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4517c0a58649ea5eb140ab4b786e1ec"></a>
-task * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#aa4517c0a58649ea5eb140ab4b786e1ec">try_put_task</a> (const T &t)</td></tr>
-<tr class="memdesc:aa4517c0a58649ea5eb140ab4b786e1ec"><td class="mdescLeft"> </td><td class="mdescRight">receive an item, return a task *if possible <br/></td></tr>
-<tr class="separator:aa4517c0a58649ea5eb140ab4b786e1ec"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ace801f92ca3f0525835d67afba0eef6c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ace801f92ca3f0525835d67afba0eef6c"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_receiver</b> (__TBB_PFG_RESET_ARG(reset_flags))</td></tr>
-<tr class="separator:ace801f92ca3f0525835d67afba0eef6c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acc1b4323f79b01468a106ca313cfede7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acc1b4323f79b01468a106ca313cfede7"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f))</td></tr>
-<tr class="separator:acc1b4323f79b01468a106ca313cfede7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00072')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac25a4633873c052047b1dd568824d055"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0</td></tr>
-<tr class="separator:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00124"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00124')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td></tr>
-<tr class="memitem:ac902b1e09eea9748223eb50dc38d3575 inherit pro_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac902b1e09eea9748223eb50dc38d3575"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>reset_receiver</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0</td></tr>
-<tr class="separator:ac902b1e09eea9748223eb50dc38d3575 inherit pro_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae91eab3e06d4139ac38f143c74fe9eab inherit pro_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae91eab3e06d4139ac38f143c74fe9eab"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><b>is_continue_receiver</b> ()</td></tr>
-<tr class="separator:ae91eab3e06d4139ac38f143c74fe9eab inherit pro_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
-Protected Attributes</h2></td></tr>
-<tr class="memitem:ade2fe89be00e023aafb1d3c380762048"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ade2fe89be00e023aafb1d3c380762048"></a>
-<a class="el" href="a00126.html">internal::round_robin_cache</a>< T, <br class="typebreak"/>
-<a class="el" href="a00102.html">null_rw_mutex</a> > </td><td class="memItemRight" valign="bottom"><b>my_successors</b></td></tr>
-<tr class="separator:ade2fe89be00e023aafb1d3c380762048"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4eda90c0f6300644705f142c6ada1a4d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4eda90c0f6300644705f142c6ada1a4d"></a>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> > </td><td class="memItemRight" valign="bottom"><b>my_built_predecessors</b></td></tr>
-<tr class="separator:a4eda90c0f6300644705f142c6ada1a4d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a441fb73f0e15aed49945fb7ec9925e9f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a441fb73f0e15aed49945fb7ec9925e9f"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>forwarder_busy</b></td></tr>
-<tr class="separator:a441fb73f0e15aed49945fb7ec9925e9f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:adc948866a1eb4c7a95b0edc08872d487"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adc948866a1eb4c7a95b0edc08872d487"></a>
-internal::aggregator<br class="typebreak"/>
-< my_handler, <a class="el" href="a00031.html">buffer_operation</a> > </td><td class="memItemRight" valign="bottom"><b>my_aggregator</b></td></tr>
-<tr class="separator:adc948866a1eb4c7a95b0edc08872d487"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_attribs_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00072')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1caee1c5677047b05d18b1662ca6fdf8"></a>
-<a class="el" href="a00070.html">graph</a> & </td><td class="memItemRight" valign="bottom"><b>my_graph</b></td></tr>
-<tr class="separator:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af48cd0cd4f6e44efc3b353adb55f86a8"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>next</b></td></tr>
-<tr class="separator:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6917bffc3cb150319679bf2395e68caa"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>prev</b></td></tr>
-<tr class="separator:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:ad66dc7488e0c58eef0d3ae292d900c04"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad66dc7488e0c58eef0d3ae292d900c04"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::forward_task_bypass< buffer_node< T, A > ></b></td></tr>
-<tr class="separator:ad66dc7488e0c58eef0d3ae292d900c04"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8fa999cf286dcad00faeece4cbfa35d2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8fa999cf286dcad00faeece4cbfa35d2"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::aggregating_functor< my_class, buffer_operation ></b></td></tr>
-<tr class="separator:a8fa999cf286dcad00faeece4cbfa35d2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplParams" colspan="2"><a class="anchor" id="abaf9bf74ca5f2854d09f5f07337280eb"></a>
-template<typename R , typename B > </td></tr>
-<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>run_and_put_task</b></td></tr>
-<tr class="separator:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1360e38efe396058978cf3754ad620f5"></a>
-template<typename X , typename Y > </td></tr>
-<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::broadcast_cache</b></td></tr>
-<tr class="separator:a1360e38efe396058978cf3754ad620f5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplParams" colspan="2"><a class="anchor" id="acbd9ac2610587a99cd7d43344297cc49"></a>
-template<typename X , typename Y > </td></tr>
-<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::round_robin_cache</b></td></tr>
-<tr class="separator:acbd9ac2610587a99cd7d43344297cc49"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af315d63ace9c432a0b03e818115fec18"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af315d63ace9c432a0b03e818115fec18"></a>
+ </td><td class="memItemRight" valign="bottom"><b>callback</b> (graph &g, Callback c, const T &t)</td></tr>
+<tr class="separator:af315d63ace9c432a0b03e818115fec18"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0d80c268cef66f86bc973a26b936abcb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0d80c268cef66f86bc973a26b936abcb"></a>
+void </td><td class="memItemRight" valign="bottom"><b>call</b> () __TBB_override</td></tr>
+<tr class="separator:a0d80c268cef66f86bc973a26b936abcb"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename T, typename A = cache_aligned_allocator<T>><br/>
-class tbb::flow::interface7::buffer_node< T, A ></h3>
-
-<p>Forwards messages in arbitrary order. </p>
-</div><h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="a5e87f7e8fd8698f62f2cad8b52b6e565"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, typename A = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node</a>< T, A >::register_successor </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> & </td>
-          <td class="paramname"><em>r</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Adds a new successor. </p>
-<p>Adds successor r to the list of successors; may forward tasks. </p>
-
-<p>Implements <a class="el" href="a00142.html#a4dac8f53a1f8373c1f3a874b9617e4ec">tbb::flow::interface7::sender< T ></a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3c31300c060bffbbad7798219e702aba"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, typename A = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node</a>< T, A >::remove_successor </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> & </td>
-          <td class="paramname"><em>r</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Removes a successor. </p>
-<p>Removes successor r from the list of successors. It also calls r.remove_predecessor(*this) to remove this node as a predecessor. </p>
-
-<p>Implements <a class="el" href="a00142.html#ac1ae19f49e31c6ca94dcf14732eb7a64">tbb::flow::interface7::sender< T ></a>.</p>
-
-<p>References <a class="el" href="a00124.html#a55adae6228bbdc1539695e1ec20e9762">tbb::flow::interface7::receiver< T >::remove_predecessor()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a335072bc547c5e9b40f58dfeab525953"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, typename A = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node</a>< T, A >::try_consume </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Consumes a reserved item. </p>
-<p>true = item is removed from sender and reservation removed </p>
-
-<p>Reimplemented from <a class="el" href="a00142.html#ad404d5218c7ae2556261ffa880cdf804">tbb::flow::interface7::sender< T ></a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a175cb77dfbdd0e322097a833a2271c1e"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, typename A = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node</a>< T, A >::try_get </td>
-          <td>(</td>
-          <td class="paramtype">T & </td>
-          <td class="paramname"><em>v</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Request an item from the <a class="el" href="a00030.html" title="Forwards messages in arbitrary order. ">buffer_node</a>. </p>
-<p>true = v contains the returned item<br/>
- false = no item has been returned </p>
-
-<p>Reimplemented from <a class="el" href="a00142.html#ad50b8ac93e79cbdcd2bba11d35432f2c">tbb::flow::interface7::sender< T ></a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aaa3745fd4705345df16fb33954d93e30"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, typename A = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node</a>< T, A >::try_release </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Release a reserved item. </p>
-<p>true = item has been released and so remains in sender </p>
-
-<p>Reimplemented from <a class="el" href="a00142.html#a97ac316ddfb6bd7c7f2f56e3e819a30a">tbb::flow::interface7::sender< T ></a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3b12cdebf8cef15b90e3c9cd9e51019f"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, typename A = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node</a>< T, A >::try_reserve </td>
-          <td>(</td>
-          <td class="paramtype">T & </td>
-          <td class="paramname"><em>v</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Reserves an item. </p>
-<p>false = no item can be reserved<br/>
- true = an item is reserved </p>
-
-<p>Reimplemented from <a class="el" href="a00142.html#aa1b9dcf77ab558530ff93a706b4c4b5d">tbb::flow::interface7::sender< T ></a>.</p>
-
-</div>
-</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<li>flow_graph_opencl_node.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00030.png b/doc/html/a00030.png
index 169664e..42d0221 100644
Binary files a/doc/html/a00030.png and b/doc/html/a00030.png differ
diff --git a/doc/html/a00031.html b/doc/html/a00031.html
index c1f79eb..6f78928 100644
--- a/doc/html/a00031.html
+++ b/doc/html/a00031.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::buffer_node< T, A >::buffer_operation Class Reference</title>
+<title>tbb::flow::interface9::callback_base Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,68 +33,40 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00030.html">buffer_node</a></li><li class="navelem"><a class="el" href="a00031.html">buffer_operation</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00031.html">callback_base</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-attribs">Public Attributes</a> |
-<a href="a00344.html">List of all members</a>  </div>
+<a href="a00336.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::buffer_node< T, A >::buffer_operation Class Reference</div>  </div>
+<div class="title">tbb::flow::interface9::callback_base Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
 </div><!--header-->
 <div class="contents">
 <div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::buffer_node< T, A >::buffer_operation:</div>
+Inheritance diagram for tbb::flow::interface9::callback_base:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00031.png" usemap="#tbb::flow::interface7::buffer_node< T, A >::buffer_operation_map" alt=""/>
-  <map id="tbb::flow::interface7::buffer_node< T, A >::buffer_operation_map" name="tbb::flow::interface7::buffer_node< T, A >::buffer_operation_map">
+  <img src="a00031.png" usemap="#tbb::flow::interface9::callback_base_map" alt=""/>
+  <map id="tbb::flow::interface9::callback_base_map" name="tbb::flow::interface9::callback_base_map">
+<area href="a00030.html" alt="tbb::flow::interface9::callback< Callback, T >" shape="rect" coords="0,112,263,136"/>
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a77b9eaaed3b74938679461fa5d1986e1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a77b9eaaed3b74938679461fa5d1986e1"></a>
- </td><td class="memItemRight" valign="bottom"><b>buffer_operation</b> (const T &e, op_type t)</td></tr>
-<tr class="separator:a77b9eaaed3b74938679461fa5d1986e1"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:a55e368638761b5ce3827537e24cb42be"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a55e368638761b5ce3827537e24cb42be"></a>
-char </td><td class="memItemRight" valign="bottom"><b>type</b></td></tr>
-<tr class="separator:a55e368638761b5ce3827537e24cb42be"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abffd4381c42c8649a55a84c8b3bcdaf6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abffd4381c42c8649a55a84c8b3bcdaf6"></a>
-task * </td><td class="memItemRight" valign="bottom"><b>ltask</b></td></tr>
-<tr class="separator:abffd4381c42c8649a55a84c8b3bcdaf6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acfc7bfd392d3df23d72022c6747c7500"><td class="memItemLeft" ><a class="anchor" id="acfc7bfd392d3df23d72022c6747c7500"></a>
-union {</td></tr>
-<tr class="memitem:a8604f4565a9775acc626b615270d05f9"><td class="memItemLeft" >   input_type *   <b>elem</b></td></tr>
-<tr class="separator:a8604f4565a9775acc626b615270d05f9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abb6eba4187566eebb8b08c66b7c02fea"><td class="memItemLeft" >   <a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> *   <b>r</b></td></tr>
-<tr class="separator:abb6eba4187566eebb8b08c66b7c02fea"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af51cf10e00fb3e14f6452e4eeeb440eb"><td class="memItemLeft" >   <a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> *   <b>p</b></td></tr>
-<tr class="separator:af51cf10e00fb3e14f6452e4eeeb440eb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a096faad0d5b0081fbe536995fae63b8e"><td class="memItemLeft" >   size_t   <b>cnt_val</b></td></tr>
-<tr class="separator:a096faad0d5b0081fbe536995fae63b8e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8aa258d48282332dda22f8b605f84db0"><td class="memItemLeft" >   successor_list_type *   <b>svec</b></td></tr>
-<tr class="separator:a8aa258d48282332dda22f8b605f84db0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a45cfe2f7d4ad0d85ab30df3594f2b404"><td class="memItemLeft" >   predecessor_list_type *   <b>pvec</b></td></tr>
-<tr class="separator:a45cfe2f7d4ad0d85ab30df3594f2b404"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acfc7bfd392d3df23d72022c6747c7500"><td class="memItemLeft" valign="top">}; </td><td class="memItemRight" valign="bottom"></td></tr>
-<tr class="separator:acfc7bfd392d3df23d72022c6747c7500"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6b8cdbd2350a186908b1cc55119e4556"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6b8cdbd2350a186908b1cc55119e4556"></a>
-T * </td><td class="memItemRight" valign="bottom"><b>elem</b></td></tr>
-<tr class="separator:a6b8cdbd2350a186908b1cc55119e4556"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:add25d1a45260a57bf1486a702a3ab583"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add25d1a45260a57bf1486a702a3ab583"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><b>call</b> ()=0</td></tr>
+<tr class="separator:add25d1a45260a57bf1486a702a3ab583"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<li>flow_graph_opencl_node.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00031.png b/doc/html/a00031.png
index 742b4d1..8fcb6f3 100644
Binary files a/doc/html/a00031.png and b/doc/html/a00031.png differ
diff --git a/doc/html/a00032.html b/doc/html/a00032.html
index bb25834..1f57e84 100644
--- a/doc/html/a00032.html
+++ b/doc/html/a00032.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::cache_aligned_allocator< T > Class Template Reference</title>
+<title>tbb::captured_exception Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,112 +33,179 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00032.html">cache_aligned_allocator</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00032.html">captured_exception</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00270.html">List of all members</a>  </div>
+<a href="a00319.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::cache_aligned_allocator< T > Class Template Reference<div class="ingroups"><a class="el" href="a00257.html">Memory Allocation</a></div></div>  </div>
+<div class="title">tbb::captured_exception Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  
+<p>This class is used by TBB to propagate information about unhandled exceptions into the root thread.  
  <a href="a00032.html#details">More...</a></p>
 
-<p><code>#include <cache_aligned_allocator.h></code></p>
+<p><code>#include <tbb_exception.h></code></p>
+<div class="dynheader">
+Inheritance diagram for tbb::captured_exception:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00032.png" usemap="#tbb::captured_exception_map" alt=""/>
+  <map id="tbb::captured_exception_map" name="tbb::captured_exception_map">
+<area href="a00155.html" title="Interface to be implemented by all exceptions TBB recognizes and propagates across the threads..." alt="tbb::tbb_exception" shape="rect" coords="0,56,146,80"/>
+</map>
+ </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00121.html">rebind</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a7aba3042b0a1c934879d5299f0c20e7e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7aba3042b0a1c934879d5299f0c20e7e"></a>
-typedef <br class="typebreak"/>
-internal::allocator_type< T ><br class="typebreak"/>
-::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-<tr class="separator:a7aba3042b0a1c934879d5299f0c20e7e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6fabbb51a8fd7b270b94fc4d9548847b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6fabbb51a8fd7b270b94fc4d9548847b"></a>
-typedef value_type * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-<tr class="separator:a6fabbb51a8fd7b270b94fc4d9548847b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a35edf40f1bb3418f61e7d33c9f796824"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a35edf40f1bb3418f61e7d33c9f796824"></a>
-typedef const value_type * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-<tr class="separator:a35edf40f1bb3418f61e7d33c9f796824"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac9f2f6c7ca74e1f3968d838eec2c4dcb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac9f2f6c7ca74e1f3968d838eec2c4dcb"></a>
-typedef value_type & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
-<tr class="separator:ac9f2f6c7ca74e1f3968d838eec2c4dcb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af50d27e385aea41dbb8a9cd0734f1c84"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af50d27e385aea41dbb8a9cd0734f1c84"></a>
-typedef const value_type & </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
-<tr class="separator:af50d27e385aea41dbb8a9cd0734f1c84"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a51eed827a49fd636d1d6c73908f9635b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a51eed827a49fd636d1d6c73908f9635b"></a>
-typedef size_t </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-<tr class="separator:a51eed827a49fd636d1d6c73908f9635b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8bf47c52cdeee1bc0dcd410cc97faeec"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8bf47c52cdeee1bc0dcd410cc97faeec"></a>
-typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
-<tr class="separator:a8bf47c52cdeee1bc0dcd410cc97faeec"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a11b1921251262137671599e99fbe8d4e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a11b1921251262137671599e99fbe8d4e"></a>
- </td><td class="memItemRight" valign="bottom"><b>cache_aligned_allocator</b> (const <a class="el" href="a00032.html">cache_aligned_allocator</a> &)  throw ()</td></tr>
-<tr class="separator:a11b1921251262137671599e99fbe8d4e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab5a78cc56dcc0851117b3c88bb3af16a"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab5a78cc56dcc0851117b3c88bb3af16a"></a>
-template<typename U > </td></tr>
-<tr class="memitem:ab5a78cc56dcc0851117b3c88bb3af16a"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>cache_aligned_allocator</b> (const <a class="el" href="a00032.html">cache_aligned_allocator</a>< U > &)  throw ()</td></tr>
-<tr class="separator:ab5a78cc56dcc0851117b3c88bb3af16a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a39aa68042abff22210f801eab98f6dfa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a39aa68042abff22210f801eab98f6dfa"></a>
-pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (reference x) const </td></tr>
-<tr class="separator:a39aa68042abff22210f801eab98f6dfa"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5bd8fe0e5de894404c8b868b37a0fe53"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5bd8fe0e5de894404c8b868b37a0fe53"></a>
-const_pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (const_reference x) const </td></tr>
-<tr class="separator:a5bd8fe0e5de894404c8b868b37a0fe53"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a99d05096f80877849cb31d80247e0f85"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a99d05096f80877849cb31d80247e0f85"></a>
-pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#a99d05096f80877849cb31d80247e0f85">allocate</a> (size_type n, const void *hint=0)</td></tr>
-<tr class="memdesc:a99d05096f80877849cb31d80247e0f85"><td class="mdescLeft"> </td><td class="mdescRight">Allocate space for n objects, starting on a cache/sector line. <br/></td></tr>
-<tr class="separator:a99d05096f80877849cb31d80247e0f85"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7f7310e046c4b6b8618864de8e27a471"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f7310e046c4b6b8618864de8e27a471"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#a7f7310e046c4b6b8618864de8e27a471">deallocate</a> (pointer p, size_type)</td></tr>
-<tr class="memdesc:a7f7310e046c4b6b8618864de8e27a471"><td class="mdescLeft"> </td><td class="mdescRight">Free block of memory that starts on a cache line. <br/></td></tr>
-<tr class="separator:a7f7310e046c4b6b8618864de8e27a471"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4b945b3180ea3dfe16dfa048f4591c6d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4b945b3180ea3dfe16dfa048f4591c6d"></a>
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#a4b945b3180ea3dfe16dfa048f4591c6d">max_size</a> () const   throw ()</td></tr>
-<tr class="memdesc:a4b945b3180ea3dfe16dfa048f4591c6d"><td class="mdescLeft"> </td><td class="mdescRight">Largest value for which method allocate might succeed. <br/></td></tr>
-<tr class="separator:a4b945b3180ea3dfe16dfa048f4591c6d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab316f80a66b991801b4ec4ea88b852d9"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab316f80a66b991801b4ec4ea88b852d9"></a>
-template<typename U , typename... Args> </td></tr>
-<tr class="memitem:ab316f80a66b991801b4ec4ea88b852d9"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00032.html#ab316f80a66b991801b4ec4ea88b852d9">construct</a> (U *p, Args &&...args)</td></tr>
-<tr class="memdesc:ab316f80a66b991801b4ec4ea88b852d9"><td class="mdescLeft"> </td><td class="mdescRight">Copy-construct value at location pointed to by p. <br/></td></tr>
-<tr class="separator:ab316f80a66b991801b4ec4ea88b852d9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac5b39984a3eee60e5bf0f10ef609dc4c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac5b39984a3eee60e5bf0f10ef609dc4c"></a>
-void </td><td class="memItemRight" valign="bottom"><b>construct</b> (pointer p, value_type &&value)</td></tr>
-<tr class="separator:ac5b39984a3eee60e5bf0f10ef609dc4c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5086d395a952eb13eb7d72bb0cb26937"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5086d395a952eb13eb7d72bb0cb26937"></a>
-void </td><td class="memItemRight" valign="bottom"><b>construct</b> (pointer p, const value_type &value)</td></tr>
-<tr class="separator:a5086d395a952eb13eb7d72bb0cb26937"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af2fd054d055403d4ea669fd3af661cc8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af2fd054d055403d4ea669fd3af661cc8"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#af2fd054d055403d4ea669fd3af661cc8">destroy</a> (pointer p)</td></tr>
-<tr class="memdesc:af2fd054d055403d4ea669fd3af661cc8"><td class="mdescLeft"> </td><td class="mdescRight">Destroy value at location pointed to by p. <br/></td></tr>
-<tr class="separator:af2fd054d055403d4ea669fd3af661cc8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a56f6c51b6d4f8ce31669457ff8f0c07f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a56f6c51b6d4f8ce31669457ff8f0c07f"></a>
+ </td><td class="memItemRight" valign="bottom"><b>captured_exception</b> (const <a class="el" href="a00032.html">captured_exception</a> &src)</td></tr>
+<tr class="separator:a56f6c51b6d4f8ce31669457ff8f0c07f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab3d72662db6a2badffa95a649a6c0bdd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab3d72662db6a2badffa95a649a6c0bdd"></a>
+ </td><td class="memItemRight" valign="bottom"><b>captured_exception</b> (const char *name_, const char *info)</td></tr>
+<tr class="separator:ab3d72662db6a2badffa95a649a6c0bdd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a78a66603238d40da9ec6a750b6a2425c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a78a66603238d40da9ec6a750b6a2425c"></a>
+<a class="el" href="a00032.html">captured_exception</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00032.html">captured_exception</a> &src)</td></tr>
+<tr class="separator:a78a66603238d40da9ec6a750b6a2425c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3b75205c631b51a00faf98c9e107f78a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00032.html">captured_exception</a> <br class="typebreak"/>
+*__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#a3b75205c631b51a00faf98c9e107f78a">move</a> () __TBB_override  throw ()</td></tr>
+<tr class="memdesc:a3b75205c631b51a00faf98c9e107f78a"><td class="mdescLeft"> </td><td class="mdescRight">Creates and returns pointer to the deep copy of this exception object.  <a href="#a3b75205c631b51a00faf98c9e107f78a">More...</a><br/></td></tr>
+<tr class="separator:a3b75205c631b51a00faf98c9e107f78a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abfc1220a6f9da0361082a3f3ad80cdc9"><td class="memItemLeft" align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#abfc1220a6f9da0361082a3f3ad80cdc9">destroy</a> () __TBB_override  throw ()</td></tr>
+<tr class="memdesc:abfc1220a6f9da0361082a3f3ad80cdc9"><td class="mdescLeft"> </td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00032.html#a3b75205c631b51a00faf98c9e107f78a" title="Creates and returns pointer to the deep copy of this exception object. ">move()</a> method.  <a href="#abfc1220a6f9da0361082a3f3ad80cdc9">More...</a><br/></td></tr>
+<tr class="separator:abfc1220a6f9da0361082a3f3ad80cdc9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6df0d3a1943ca6f84a9a9aca25e9633d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#a6df0d3a1943ca6f84a9a9aca25e9633d">throw_self</a> () __TBB_override</td></tr>
+<tr class="memdesc:a6df0d3a1943ca6f84a9a9aca25e9633d"><td class="mdescLeft"> </td><td class="mdescRight">Throws this exception object.  <a href="#a6df0d3a1943ca6f84a9a9aca25e9633d">More...</a><br/></td></tr>
+<tr class="separator:a6df0d3a1943ca6f84a9a9aca25e9633d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a543e1a18c9a3f3b093c8c2bd927a6d12"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a543e1a18c9a3f3b093c8c2bd927a6d12"></a>
+const char *__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#a543e1a18c9a3f3b093c8c2bd927a6d12">name</a> () const __TBB_override  throw ()</td></tr>
+<tr class="memdesc:a543e1a18c9a3f3b093c8c2bd927a6d12"><td class="mdescLeft"> </td><td class="mdescRight">Returns RTTI name of the originally intercepted exception. <br/></td></tr>
+<tr class="separator:a543e1a18c9a3f3b093c8c2bd927a6d12"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1e9d36a304dd7e49906754a0cb72da2e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e9d36a304dd7e49906754a0cb72da2e"></a>
+const char *__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html#a1e9d36a304dd7e49906754a0cb72da2e">what</a> () const __TBB_override  throw ()</td></tr>
+<tr class="memdesc:a1e9d36a304dd7e49906754a0cb72da2e"><td class="mdescLeft"> </td><td class="mdescRight">Returns the result of originally intercepted exception's <a class="el" href="a00032.html#a1e9d36a304dd7e49906754a0cb72da2e" title="Returns the result of originally intercepted exception's what() method. ">what()</a> method. <br/></td></tr>
+<tr class="separator:a1e9d36a304dd7e49906754a0cb72da2e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa72deb29316e8c08700f7e6afa4a48e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa72deb29316e8c08700f7e6afa4a48e8"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>set</b> (const char *<a class="el" href="a00032.html#a543e1a18c9a3f3b093c8c2bd927a6d12">name</a>, const char *info)  throw ()</td></tr>
+<tr class="separator:aa72deb29316e8c08700f7e6afa4a48e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0b160c0fc5d2fab90df2be96ea14088a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0b160c0fc5d2fab90df2be96ea14088a"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>clear</b> ()  throw ()</td></tr>
+<tr class="separator:a0b160c0fc5d2fab90df2be96ea14088a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_methods_a00155"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00155')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00155.html">tbb::tbb_exception</a></td></tr>
+<tr class="memitem:a6a973c37078afedf7d457ff4704bf8cd inherit pub_methods_a00155"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#a6a973c37078afedf7d457ff4704bf8cd">operator delete</a> (void *p)</td></tr>
+<tr class="separator:a6a973c37078afedf7d457ff4704bf8cd inherit pub_methods_a00155"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename T><br/>
-class tbb::cache_aligned_allocator< T ></h3>
+<div class="textblock"><p>This class is used by TBB to propagate information about unhandled exceptions into the root thread. </p>
+<p>Exception of this type is thrown by TBB in the root thread (thread that started a parallel algorithm ) if an unhandled exception was intercepted during the algorithm execution in one of the workers. </p>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="a00155.html" title="Interface to be implemented by all exceptions TBB recognizes and propagates across the threads...">tbb::tbb_exception</a> </dd></dl>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="abfc1220a6f9da0361082a3f3ad80cdc9"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_METHOD tbb::captured_exception::destroy </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+        <tr>
+          <td align="right">throw </td><td>(</td><td colspan="2"></td>
+        </tr>
+        <tr>
+          <td align="right"></td><td>)</td><td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Destroys objects created by the <a class="el" href="a00032.html#a3b75205c631b51a00faf98c9e107f78a" title="Creates and returns pointer to the deep copy of this exception object. ">move()</a> method. </p>
+<p>Frees memory and calls destructor for this exception object. Can and must be used only on objects created by the move method. </p>
+
+<p>Implements <a class="el" href="a00155.html#ad3bc09bf78c33f19a0bcdf882fdf9d41">tbb::tbb_exception</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3b75205c631b51a00faf98c9e107f78a"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00032.html">captured_exception</a>* __TBB_EXPORTED_METHOD tbb::captured_exception::move </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+        <tr>
+          <td align="right">throw </td><td>(</td><td colspan="2"></td>
+        </tr>
+        <tr>
+          <td align="right"></td><td>)</td><td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Creates and returns pointer to the deep copy of this exception object. </p>
+<p>Move semantics is allowed. </p>
+
+<p>Implements <a class="el" href="a00155.html#a4bd4ba0d501021013d1473d21b020b69">tbb::tbb_exception</a>.</p>
 
-<p>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. </p>
-<p>The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>cache_aligned_allocator.h</li>
+</div>
+</div>
+<a class="anchor" id="a6df0d3a1943ca6f84a9a9aca25e9633d"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::captured_exception::throw_self </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Throws this exception object. </p>
+<p>Make sure that if you have several levels of derivation from this interface you implement or override this method on the most derived level. The implementation is as simple as "throw *this;". Failure to do this will result in exception of a base class type being thrown. </p>
+
+<p>Implements <a class="el" href="a00155.html#ae45c08d36c7ec7ae91785da3515a8828">tbb::tbb_exception</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>tbb_exception.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00035.png b/doc/html/a00032.png
similarity index 100%
copy from doc/html/a00035.png
copy to doc/html/a00032.png
diff --git a/doc/html/a00033.html b/doc/html/a00033.html
index 8bbb943..d34c45b 100644
--- a/doc/html/a00033.html
+++ b/doc/html/a00033.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::cache_aligned_allocator< void > Class Template Reference</title>
+<title>tbb::combinable< T > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,53 +33,75 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00033.html">cache_aligned_allocator< void ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00033.html">combinable</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#pub-types">Public Types</a> |
-<a href="a00272.html">List of all members</a>  </div>
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="a00271.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::cache_aligned_allocator< void > Class Template Reference<div class="ingroups"><a class="el" href="a00257.html">Memory Allocation</a></div></div>  </div>
+<div class="title">tbb::combinable< T > Class Template Reference<div class="ingroups"><a class="el" href="a00253.html">Containers</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  
+<p>Thread-local storage with optional reduction.  
  <a href="a00033.html#details">More...</a></p>
 
-<p><code>#include <cache_aligned_allocator.h></code></p>
+<p><code>#include <combinable.h></code></p>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00114.html">rebind</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a630325567e2ede3937a0d2e0f2da6a3f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a630325567e2ede3937a0d2e0f2da6a3f"></a>
-typedef void * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-<tr class="separator:a630325567e2ede3937a0d2e0f2da6a3f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a36f63efa0a37d205705b9d5944432864"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a36f63efa0a37d205705b9d5944432864"></a>
-typedef const void * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-<tr class="separator:a36f63efa0a37d205705b9d5944432864"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af7f973d0bb12319600505cf9c1fb35b0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af7f973d0bb12319600505cf9c1fb35b0"></a>
-typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-<tr class="separator:af7f973d0bb12319600505cf9c1fb35b0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ab3c539d5731faaafd81979b207a4fa1f"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab3c539d5731faaafd81979b207a4fa1f"></a>
+template<typename finit > </td></tr>
+<tr class="memitem:ab3c539d5731faaafd81979b207a4fa1f"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>combinable</b> (finit _finit)</td></tr>
+<tr class="separator:ab3c539d5731faaafd81979b207a4fa1f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a52f00cf262d768048db72ab73c8f3ca4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a52f00cf262d768048db72ab73c8f3ca4"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00033.html#a52f00cf262d768048db72ab73c8f3ca4">~combinable</a> ()</td></tr>
+<tr class="memdesc:a52f00cf262d768048db72ab73c8f3ca4"><td class="mdescLeft"> </td><td class="mdescRight">destructor <br/></td></tr>
+<tr class="separator:a52f00cf262d768048db72ab73c8f3ca4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a376f44cba71450fc18ccddaad61b76cc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a376f44cba71450fc18ccddaad61b76cc"></a>
+ </td><td class="memItemRight" valign="bottom"><b>combinable</b> (const <a class="el" href="a00033.html">combinable</a> &other)</td></tr>
+<tr class="separator:a376f44cba71450fc18ccddaad61b76cc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae227b3906cd4ee6e5e2e5e840a3ff8e6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae227b3906cd4ee6e5e2e5e840a3ff8e6"></a>
+ </td><td class="memItemRight" valign="bottom"><b>combinable</b> (<a class="el" href="a00033.html">combinable</a> &&other)</td></tr>
+<tr class="separator:ae227b3906cd4ee6e5e2e5e840a3ff8e6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab011fbe2f0600900b6e1b9760d82aead"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab011fbe2f0600900b6e1b9760d82aead"></a>
+<a class="el" href="a00033.html">combinable</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00033.html">combinable</a> &other)</td></tr>
+<tr class="separator:ab011fbe2f0600900b6e1b9760d82aead"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a780f6aeeed80b1c974f22c76907df8c9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a780f6aeeed80b1c974f22c76907df8c9"></a>
+<a class="el" href="a00033.html">combinable</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="a00033.html">combinable</a> &&other)</td></tr>
+<tr class="separator:a780f6aeeed80b1c974f22c76907df8c9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8ecfe80161a59f04ffd9676e79701de6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8ecfe80161a59f04ffd9676e79701de6"></a>
+void </td><td class="memItemRight" valign="bottom"><b>clear</b> ()</td></tr>
+<tr class="separator:a8ecfe80161a59f04ffd9676e79701de6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae47f982dbd396d225f0f546e60690d42"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae47f982dbd396d225f0f546e60690d42"></a>
+T & </td><td class="memItemRight" valign="bottom"><b>local</b> ()</td></tr>
+<tr class="separator:ae47f982dbd396d225f0f546e60690d42"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2433d2b3b53b9979d0b3bb2a175abc9b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2433d2b3b53b9979d0b3bb2a175abc9b"></a>
+T & </td><td class="memItemRight" valign="bottom"><b>local</b> (bool &exists)</td></tr>
+<tr class="separator:a2433d2b3b53b9979d0b3bb2a175abc9b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3d564f6d480e0c7fe8e756d1de1cf0e2"><td class="memTemplParams" colspan="2"><a class="anchor" id="a3d564f6d480e0c7fe8e756d1de1cf0e2"></a>
+template<typename combine_func_t > </td></tr>
+<tr class="memitem:a3d564f6d480e0c7fe8e756d1de1cf0e2"><td class="memTemplItemLeft" align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>combine</b> (combine_func_t f_combine)</td></tr>
+<tr class="separator:a3d564f6d480e0c7fe8e756d1de1cf0e2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aadadee714004d977f0e95a479bfb80ac"><td class="memTemplParams" colspan="2"><a class="anchor" id="aadadee714004d977f0e95a479bfb80ac"></a>
+template<typename combine_func_t > </td></tr>
+<tr class="memitem:aadadee714004d977f0e95a479bfb80ac"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>combine_each</b> (combine_func_t f_combine)</td></tr>
+<tr class="separator:aadadee714004d977f0e95a479bfb80ac"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<><br/>
-class tbb::cache_aligned_allocator< void ></h3>
+<div class="textblock"><h3>template<typename T><br/>
+class tbb::combinable< T ></h3>
 
-<p>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. </p>
+<p>Thread-local storage with optional reduction. </p>
 </div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>cache_aligned_allocator.h</li>
+<li>combinable.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00034.html b/doc/html/a00034.html
index e90181a..d263517 100644
--- a/doc/html/a00034.html
+++ b/doc/html/a00034.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave Struct Reference</title>
+<title>tbb::interface6::internal::concrete_filter< T, U, Body > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,41 +33,21 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00043.html">concurrent_hash_map</a></li><li class="navelem"><a class="el" href="a00034.html">call_clear_on_leave</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00034.html">concrete_filter</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-attribs">Public Attributes</a> |
-<a href="a00372.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave Struct Reference</div>  </div>
+<div class="title">tbb::interface6::internal::concrete_filter< T, U, Body > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a4b242f28514cb0e4fb2e462c8fead03e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4b242f28514cb0e4fb2e462c8fead03e"></a>
- </td><td class="memItemRight" valign="bottom"><b>call_clear_on_leave</b> (<a class="el" href="a00043.html">concurrent_hash_map</a> *a_ch_map)</td></tr>
-<tr class="separator:a4b242f28514cb0e4fb2e462c8fead03e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0e56acf6cbc5a9bc38018a8640050054"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0e56acf6cbc5a9bc38018a8640050054"></a>
-void </td><td class="memItemRight" valign="bottom"><b>dismiss</b> ()</td></tr>
-<tr class="separator:a0e56acf6cbc5a9bc38018a8640050054"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:a22e1559dccd2fd4345ca0ff389c6ad29"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a22e1559dccd2fd4345ca0ff389c6ad29"></a>
-<a class="el" href="a00043.html">concurrent_hash_map</a> * </td><td class="memItemRight" valign="bottom"><b>my_ch_map</b></td></tr>
-<tr class="separator:a22e1559dccd2fd4345ca0ff389c6ad29"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<hr/>The documentation for this struct was generated from the following file:<ul>
-<li>concurrent_hash_map.h</li>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>pipeline.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00035.html b/doc/html/a00035.html
index ee3ec7b..bc764d0 100644
--- a/doc/html/a00035.html
+++ b/doc/html/a00035.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::captured_exception Class Reference</title>
+<title>tbb::concurrent_bounded_queue< T, A > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,179 +33,376 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00035.html">captured_exception</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00035.html">concurrent_bounded_queue</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00324.html">List of all members</a>  </div>
+<a href="#friends">Friends</a> |
+<a href="a00272.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::captured_exception Class Reference</div>  </div>
+<div class="title">tbb::concurrent_bounded_queue< T, A > Class Template Reference<div class="ingroups"><a class="el" href="a00253.html">Containers</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This class is used by TBB to propagate information about unhandled exceptions into the root thread.  
+<p>A high-performance thread-safe blocking concurrent bounded queue.  
  <a href="a00035.html#details">More...</a></p>
 
-<p><code>#include <tbb_exception.h></code></p>
+<p><code>#include <concurrent_queue.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::captured_exception:</div>
+Inheritance diagram for tbb::concurrent_bounded_queue< T, A >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00035.png" usemap="#tbb::captured_exception_map" alt=""/>
-  <map id="tbb::captured_exception_map" name="tbb::captured_exception_map">
-<area href="a00161.html" title="Interface to be implemented by all exceptions TBB recognizes and propagates across the threads..." alt="tbb::tbb_exception" shape="rect" coords="0,56,146,80"/>
+  <img src="a00035.png" usemap="#tbb::concurrent_bounded_queue< T, A >_map" alt=""/>
+  <map id="tbb::concurrent_bounded_queue< T, A >_map" name="tbb::concurrent_bounded_queue< T, A >_map">
 </map>
  </div></div>
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a6eb564625fef03dd9a5881d5d4e52f9f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6eb564625fef03dd9a5881d5d4e52f9f"></a>
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#a6eb564625fef03dd9a5881d5d4e52f9f">value_type</a></td></tr>
+<tr class="memdesc:a6eb564625fef03dd9a5881d5d4e52f9f"><td class="mdescLeft"> </td><td class="mdescRight">Element type in the queue. <br/></td></tr>
+<tr class="separator:a6eb564625fef03dd9a5881d5d4e52f9f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acbfceb845de1c770e2b56409f09b0364"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acbfceb845de1c770e2b56409f09b0364"></a>
+typedef A </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#acbfceb845de1c770e2b56409f09b0364">allocator_type</a></td></tr>
+<tr class="memdesc:acbfceb845de1c770e2b56409f09b0364"><td class="mdescLeft"> </td><td class="mdescRight">Allocator type. <br/></td></tr>
+<tr class="separator:acbfceb845de1c770e2b56409f09b0364"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5fa4002bcd265d9d3ed305e3b686f1da"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5fa4002bcd265d9d3ed305e3b686f1da"></a>
+typedef T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#a5fa4002bcd265d9d3ed305e3b686f1da">reference</a></td></tr>
+<tr class="memdesc:a5fa4002bcd265d9d3ed305e3b686f1da"><td class="mdescLeft"> </td><td class="mdescRight">Reference type. <br/></td></tr>
+<tr class="separator:a5fa4002bcd265d9d3ed305e3b686f1da"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af838e520ce0db2c22369748c019b11cb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af838e520ce0db2c22369748c019b11cb"></a>
+typedef const T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#af838e520ce0db2c22369748c019b11cb">const_reference</a></td></tr>
+<tr class="memdesc:af838e520ce0db2c22369748c019b11cb"><td class="mdescLeft"> </td><td class="mdescRight">Const reference type. <br/></td></tr>
+<tr class="separator:af838e520ce0db2c22369748c019b11cb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae73fa352d781bdb9d01bfb77f2a8bc28"><td class="memItemLeft" align="right" valign="top">typedef std::ptrdiff_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#ae73fa352d781bdb9d01bfb77f2a8bc28">size_type</a></td></tr>
+<tr class="memdesc:ae73fa352d781bdb9d01bfb77f2a8bc28"><td class="mdescLeft"> </td><td class="mdescRight">Integral type for representing size of the queue.  <a href="#ae73fa352d781bdb9d01bfb77f2a8bc28">More...</a><br/></td></tr>
+<tr class="separator:ae73fa352d781bdb9d01bfb77f2a8bc28"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a72725361e050c5a981035a20ef1b773e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a72725361e050c5a981035a20ef1b773e"></a>
+typedef std::ptrdiff_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#a72725361e050c5a981035a20ef1b773e">difference_type</a></td></tr>
+<tr class="memdesc:a72725361e050c5a981035a20ef1b773e"><td class="mdescLeft"> </td><td class="mdescRight">Difference type for iterator. <br/></td></tr>
+<tr class="separator:a72725361e050c5a981035a20ef1b773e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a42dfb71b1e4bdc0da3c1217d0d40ddd5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a42dfb71b1e4bdc0da3c1217d0d40ddd5"></a>
+typedef <br class="typebreak"/>
+internal::concurrent_queue_iterator<br class="typebreak"/>
+< <a class="el" href="a00035.html">concurrent_bounded_queue</a>, T > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+<tr class="separator:a42dfb71b1e4bdc0da3c1217d0d40ddd5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a18049841284051e18b854692bd04602c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18049841284051e18b854692bd04602c"></a>
+typedef <br class="typebreak"/>
+internal::concurrent_queue_iterator<br class="typebreak"/>
+< <a class="el" href="a00035.html">concurrent_bounded_queue</a>, <br class="typebreak"/>
+const T > </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
+<tr class="separator:a18049841284051e18b854692bd04602c"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a56f6c51b6d4f8ce31669457ff8f0c07f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a56f6c51b6d4f8ce31669457ff8f0c07f"></a>
- </td><td class="memItemRight" valign="bottom"><b>captured_exception</b> (const <a class="el" href="a00035.html">captured_exception</a> &src)</td></tr>
-<tr class="separator:a56f6c51b6d4f8ce31669457ff8f0c07f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab3d72662db6a2badffa95a649a6c0bdd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab3d72662db6a2badffa95a649a6c0bdd"></a>
- </td><td class="memItemRight" valign="bottom"><b>captured_exception</b> (const char *name_, const char *info)</td></tr>
-<tr class="separator:ab3d72662db6a2badffa95a649a6c0bdd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a78a66603238d40da9ec6a750b6a2425c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a78a66603238d40da9ec6a750b6a2425c"></a>
-<a class="el" href="a00035.html">captured_exception</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00035.html">captured_exception</a> &src)</td></tr>
-<tr class="separator:a78a66603238d40da9ec6a750b6a2425c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abb221485cd260349efdef681f633a6a4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00035.html">captured_exception</a> <br class="typebreak"/>
-*__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#abb221485cd260349efdef681f633a6a4">move</a> ()  throw ()</td></tr>
-<tr class="memdesc:abb221485cd260349efdef681f633a6a4"><td class="mdescLeft"> </td><td class="mdescRight">Creates and returns pointer to the deep copy of this exception object.  <a href="#abb221485cd260349efdef681f633a6a4">More...</a><br/></td></tr>
-<tr class="separator:abb221485cd260349efdef681f633a6a4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3006b6825dda6c746d28fb748f5675de"><td class="memItemLeft" align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#a3006b6825dda6c746d28fb748f5675de">destroy</a> ()  throw ()</td></tr>
-<tr class="memdesc:a3006b6825dda6c746d28fb748f5675de"><td class="mdescLeft"> </td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00035.html#abb221485cd260349efdef681f633a6a4" title="Creates and returns pointer to the deep copy of this exception object. ">move()</a> method.  <a href="#a3006b6825dda6c746d28fb748f5675de">More...</a><br/></td></tr>
-<tr class="separator:a3006b6825dda6c746d28fb748f5675de"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac9ae925678fcc0cc02a74df7d06b8d63"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#ac9ae925678fcc0cc02a74df7d06b8d63">throw_self</a> ()</td></tr>
-<tr class="memdesc:ac9ae925678fcc0cc02a74df7d06b8d63"><td class="mdescLeft"> </td><td class="mdescRight">Throws this exception object.  <a href="#ac9ae925678fcc0cc02a74df7d06b8d63">More...</a><br/></td></tr>
-<tr class="separator:ac9ae925678fcc0cc02a74df7d06b8d63"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a23426113851b78d3f0069956afd21976"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a23426113851b78d3f0069956afd21976"></a>
-const char *__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#a23426113851b78d3f0069956afd21976">name</a> () const   throw ()</td></tr>
-<tr class="memdesc:a23426113851b78d3f0069956afd21976"><td class="mdescLeft"> </td><td class="mdescRight">Returns RTTI name of the originally intercepted exception. <br/></td></tr>
-<tr class="separator:a23426113851b78d3f0069956afd21976"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac97ee315d8613c803dae2f6d3e0b91a7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac97ee315d8613c803dae2f6d3e0b91a7"></a>
-const char *__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#ac97ee315d8613c803dae2f6d3e0b91a7">what</a> () const   throw ()</td></tr>
-<tr class="memdesc:ac97ee315d8613c803dae2f6d3e0b91a7"><td class="mdescLeft"> </td><td class="mdescRight">Returns the result of originally intercepted exception's <a class="el" href="a00035.html#ac97ee315d8613c803dae2f6d3e0b91a7" title="Returns the result of originally intercepted exception's what() method. ">what()</a> method. <br/></td></tr>
-<tr class="separator:ac97ee315d8613c803dae2f6d3e0b91a7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa72deb29316e8c08700f7e6afa4a48e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa72deb29316e8c08700f7e6afa4a48e8"></a>
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>set</b> (const char *<a class="el" href="a00035.html#a23426113851b78d3f0069956afd21976">name</a>, const char *info)  throw ()</td></tr>
-<tr class="separator:aa72deb29316e8c08700f7e6afa4a48e8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0b160c0fc5d2fab90df2be96ea14088a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0b160c0fc5d2fab90df2be96ea14088a"></a>
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>clear</b> ()  throw ()</td></tr>
-<tr class="separator:a0b160c0fc5d2fab90df2be96ea14088a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00161"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00161')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00161.html">tbb::tbb_exception</a></td></tr>
-<tr class="memitem:a6a973c37078afedf7d457ff4704bf8cd inherit pub_methods_a00161"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#a6a973c37078afedf7d457ff4704bf8cd">operator delete</a> (void *p)</td></tr>
-<tr class="separator:a6a973c37078afedf7d457ff4704bf8cd inherit pub_methods_a00161"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a85f8a800cae02b601f36ad7a655a0126"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a85f8a800cae02b601f36ad7a655a0126"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#a85f8a800cae02b601f36ad7a655a0126">concurrent_bounded_queue</a> (const <a class="el" href="a00035.html#acbfceb845de1c770e2b56409f09b0364">allocator_type</a> &a=<a class="el" href="a00035.html#acbfceb845de1c770e2b56409f09b0364">allocator_type</a>())</td></tr>
+<tr class="memdesc:a85f8a800cae02b601f36ad7a655a0126"><td class="mdescLeft"> </td><td class="mdescRight">Construct empty queue. <br/></td></tr>
+<tr class="separator:a85f8a800cae02b601f36ad7a655a0126"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aad6fd2353d64c2c31d074cd99df58c02"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad6fd2353d64c2c31d074cd99df58c02"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#aad6fd2353d64c2c31d074cd99df58c02">concurrent_bounded_queue</a> (const <a class="el" href="a00035.html">concurrent_bounded_queue</a> &src, const <a class="el" href="a00035.html#acbfceb845de1c770e2b56409f09b0364">allocator_type</a> &a=<a class="el" href="a00035.html#acbfceb845de1c770e2b56409f09b0364">allocator_type</a>())</td></tr>
+<tr class="memdesc:aad6fd2353d64c2c31d074cd99df58c02"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br/></td></tr>
+<tr class="separator:aad6fd2353d64c2c31d074cd99df58c02"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a228b9d3bf3158a9379748894a93fbe55"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a228b9d3bf3158a9379748894a93fbe55"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#a228b9d3bf3158a9379748894a93fbe55">concurrent_bounded_queue</a> (<a class="el" href="a00035.html">concurrent_bounded_queue</a> &&src)</td></tr>
+<tr class="memdesc:a228b9d3bf3158a9379748894a93fbe55"><td class="mdescLeft"> </td><td class="mdescRight">Move constructors. <br/></td></tr>
+<tr class="separator:a228b9d3bf3158a9379748894a93fbe55"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aed0303dafc38c5088ae62ac023fffb4e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed0303dafc38c5088ae62ac023fffb4e"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_bounded_queue</b> (<a class="el" href="a00035.html">concurrent_bounded_queue</a> &&src, const <a class="el" href="a00035.html#acbfceb845de1c770e2b56409f09b0364">allocator_type</a> &a)</td></tr>
+<tr class="separator:aed0303dafc38c5088ae62ac023fffb4e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afcfdc998e106fdb7b2dfa5df880cd9cf"><td class="memTemplParams" colspan="2"><a class="anchor" id="afcfdc998e106fdb7b2dfa5df880cd9cf"></a>
+template<typename InputIterator > </td></tr>
+<tr class="memitem:afcfdc998e106fdb7b2dfa5df880cd9cf"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00035.html#afcfdc998e106fdb7b2dfa5df880cd9cf">concurrent_bounded_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00035.html#acbfceb845de1c770e2b56409f09b0364">allocator_type</a> &a=<a class="el" href="a00035.html#acbfceb845de1c770e2b56409f09b0364">allocator_type</a>())< [...]
+<tr class="memdesc:afcfdc998e106fdb7b2dfa5df880cd9cf"><td class="mdescLeft"> </td><td class="mdescRight">[begin,end) constructor <br/></td></tr>
+<tr class="separator:afcfdc998e106fdb7b2dfa5df880cd9cf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab1291bf6837ecfb8836c24dde5dd80b5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab1291bf6837ecfb8836c24dde5dd80b5"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#ab1291bf6837ecfb8836c24dde5dd80b5">~concurrent_bounded_queue</a> ()</td></tr>
+<tr class="memdesc:ab1291bf6837ecfb8836c24dde5dd80b5"><td class="mdescLeft"> </td><td class="mdescRight">Destroy queue. <br/></td></tr>
+<tr class="separator:ab1291bf6837ecfb8836c24dde5dd80b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae5e9051772bbc93b2ccb8fd0a98a21f5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae5e9051772bbc93b2ccb8fd0a98a21f5"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#ae5e9051772bbc93b2ccb8fd0a98a21f5">push</a> (const T &source)</td></tr>
+<tr class="memdesc:ae5e9051772bbc93b2ccb8fd0a98a21f5"><td class="mdescLeft"> </td><td class="mdescRight">Enqueue an item at tail of queue. <br/></td></tr>
+<tr class="separator:ae5e9051772bbc93b2ccb8fd0a98a21f5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a62a03e9c185562254ecb4104f38c106d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a62a03e9c185562254ecb4104f38c106d"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#a62a03e9c185562254ecb4104f38c106d">push</a> (T &&source)</td></tr>
+<tr class="memdesc:a62a03e9c185562254ecb4104f38c106d"><td class="mdescLeft"> </td><td class="mdescRight">Move an item at tail of queue. <br/></td></tr>
+<tr class="separator:a62a03e9c185562254ecb4104f38c106d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab9009e8a1bdf70623f6480681bb6b56a"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab9009e8a1bdf70623f6480681bb6b56a"></a>
+template<typename... Arguments> </td></tr>
+<tr class="memitem:ab9009e8a1bdf70623f6480681bb6b56a"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>emplace</b> (Arguments &&...args)</td></tr>
+<tr class="separator:ab9009e8a1bdf70623f6480681bb6b56a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a87926c31967a918ce80690a9ed5d6fa8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#a87926c31967a918ce80690a9ed5d6fa8">pop</a> (T &destination)</td></tr>
+<tr class="memdesc:a87926c31967a918ce80690a9ed5d6fa8"><td class="mdescLeft"> </td><td class="mdescRight">Dequeue item from head of queue.  <a href="#a87926c31967a918ce80690a9ed5d6fa8">More...</a><br/></td></tr>
+<tr class="separator:a87926c31967a918ce80690a9ed5d6fa8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a77a755d94cabf5208905d10d5b57419c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a77a755d94cabf5208905d10d5b57419c"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#a77a755d94cabf5208905d10d5b57419c">abort</a> ()</td></tr>
+<tr class="memdesc:a77a755d94cabf5208905d10d5b57419c"><td class="mdescLeft"> </td><td class="mdescRight">Abort all pending queue operations. <br/></td></tr>
+<tr class="separator:a77a755d94cabf5208905d10d5b57419c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a03d93a240841a21788396bebd71c51bd"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#a03d93a240841a21788396bebd71c51bd">try_push</a> (const T &source)</td></tr>
+<tr class="memdesc:a03d93a240841a21788396bebd71c51bd"><td class="mdescLeft"> </td><td class="mdescRight">Enqueue an item at tail of queue if queue is not already full.  <a href="#a03d93a240841a21788396bebd71c51bd">More...</a><br/></td></tr>
+<tr class="separator:a03d93a240841a21788396bebd71c51bd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a93f35e9d9381629e0a2993f9fdd96d92"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#a93f35e9d9381629e0a2993f9fdd96d92">try_push</a> (T &&source)</td></tr>
+<tr class="memdesc:a93f35e9d9381629e0a2993f9fdd96d92"><td class="mdescLeft"> </td><td class="mdescRight">Move an item at tail of queue if queue is not already full.  <a href="#a93f35e9d9381629e0a2993f9fdd96d92">More...</a><br/></td></tr>
+<tr class="separator:a93f35e9d9381629e0a2993f9fdd96d92"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0a4351eb8c93b6b2d9feaff0c7088ee8"><td class="memTemplParams" colspan="2"><a class="anchor" id="a0a4351eb8c93b6b2d9feaff0c7088ee8"></a>
+template<typename... Arguments> </td></tr>
+<tr class="memitem:a0a4351eb8c93b6b2d9feaff0c7088ee8"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>try_emplace</b> (Arguments &&...args)</td></tr>
+<tr class="separator:a0a4351eb8c93b6b2d9feaff0c7088ee8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3086cb4dcdeee245ef5cf34f72fb3e10"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#a3086cb4dcdeee245ef5cf34f72fb3e10">try_pop</a> (T &destination)</td></tr>
+<tr class="memdesc:a3086cb4dcdeee245ef5cf34f72fb3e10"><td class="mdescLeft"> </td><td class="mdescRight">Attempt to dequeue an item from head of queue.  <a href="#a3086cb4dcdeee245ef5cf34f72fb3e10">More...</a><br/></td></tr>
+<tr class="separator:a3086cb4dcdeee245ef5cf34f72fb3e10"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9d6c20fd8c193c12b6a7b0c3101fd966"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00035.html#ae73fa352d781bdb9d01bfb77f2a8bc28">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#a9d6c20fd8c193c12b6a7b0c3101fd966">size</a> () const </td></tr>
+<tr class="memdesc:a9d6c20fd8c193c12b6a7b0c3101fd966"><td class="mdescLeft"> </td><td class="mdescRight">Return number of pushes minus number of pops.  <a href="#a9d6c20fd8c193c12b6a7b0c3101fd966">More...</a><br/></td></tr>
+<tr class="separator:a9d6c20fd8c193c12b6a7b0c3101fd966"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8c59578f28c5fb4718b0eff43776e879"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8c59578f28c5fb4718b0eff43776e879"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#a8c59578f28c5fb4718b0eff43776e879">empty</a> () const </td></tr>
+<tr class="memdesc:a8c59578f28c5fb4718b0eff43776e879"><td class="mdescLeft"> </td><td class="mdescRight">Equivalent to <a class="el" href="a00035.html#a9d6c20fd8c193c12b6a7b0c3101fd966" title="Return number of pushes minus number of pops. ">size()</a><=0. <br/></td></tr>
+<tr class="separator:a8c59578f28c5fb4718b0eff43776e879"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a526487063242569685af8c8d778d39e0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a526487063242569685af8c8d778d39e0"></a>
+<a class="el" href="a00035.html#ae73fa352d781bdb9d01bfb77f2a8bc28">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#a526487063242569685af8c8d778d39e0">capacity</a> () const </td></tr>
+<tr class="memdesc:a526487063242569685af8c8d778d39e0"><td class="mdescLeft"> </td><td class="mdescRight">Maximum number of allowed elements. <br/></td></tr>
+<tr class="separator:a526487063242569685af8c8d778d39e0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a768699675813575eec08c1f43afda395"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#a768699675813575eec08c1f43afda395">set_capacity</a> (<a class="el" href="a00035.html#ae73fa352d781bdb9d01bfb77f2a8bc28">size_type</a> new_capacity)</td></tr>
+<tr class="memdesc:a768699675813575eec08c1f43afda395"><td class="mdescLeft"> </td><td class="mdescRight">Set the capacity.  <a href="#a768699675813575eec08c1f43afda395">More...</a><br/></td></tr>
+<tr class="separator:a768699675813575eec08c1f43afda395"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaeba11bbcd368a7a3a6e6e2dd3082c9c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaeba11bbcd368a7a3a6e6e2dd3082c9c"></a>
+<a class="el" href="a00035.html#acbfceb845de1c770e2b56409f09b0364">allocator_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#aaeba11bbcd368a7a3a6e6e2dd3082c9c">get_allocator</a> () const </td></tr>
+<tr class="memdesc:aaeba11bbcd368a7a3a6e6e2dd3082c9c"><td class="mdescLeft"> </td><td class="mdescRight">return allocator object <br/></td></tr>
+<tr class="separator:aaeba11bbcd368a7a3a6e6e2dd3082c9c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a246be3920e079ea4847933f106baa98f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a246be3920e079ea4847933f106baa98f"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html#a246be3920e079ea4847933f106baa98f">clear</a> ()</td></tr>
+<tr class="memdesc:a246be3920e079ea4847933f106baa98f"><td class="mdescLeft"> </td><td class="mdescRight">clear the queue. not thread-safe. <br/></td></tr>
+<tr class="separator:a246be3920e079ea4847933f106baa98f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac0c931eaa1ddc30025e49d06cc383703"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac0c931eaa1ddc30025e49d06cc383703"></a>
+iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_begin</b> ()</td></tr>
+<tr class="separator:ac0c931eaa1ddc30025e49d06cc383703"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a634cece9742cbaba56ba6f7777568e4c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a634cece9742cbaba56ba6f7777568e4c"></a>
+iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_end</b> ()</td></tr>
+<tr class="separator:a634cece9742cbaba56ba6f7777568e4c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2ed2f8130fd679e89327cb292fb25510"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ed2f8130fd679e89327cb292fb25510"></a>
+const_iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_begin</b> () const </td></tr>
+<tr class="separator:a2ed2f8130fd679e89327cb292fb25510"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a873d62f59fd79959c0204f5fb44c774d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a873d62f59fd79959c0204f5fb44c774d"></a>
+const_iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_end</b> () const </td></tr>
+<tr class="separator:a873d62f59fd79959c0204f5fb44c774d"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a1f5eec0de2e660ea5372d19393f0920b"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1f5eec0de2e660ea5372d19393f0920b"></a>
+template<typename Container , typename Value > </td></tr>
+<tr class="memitem:a1f5eec0de2e660ea5372d19393f0920b"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::concurrent_queue_iterator</b></td></tr>
+<tr class="separator:a1f5eec0de2e660ea5372d19393f0920b"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>This class is used by TBB to propagate information about unhandled exceptions into the root thread. </p>
-<p>Exception of this type is thrown by TBB in the root thread (thread that started a parallel algorithm ) if an unhandled exception was intercepted during the algorithm execution in one of the workers. </p>
-<dl class="section see"><dt>See Also</dt><dd><a class="el" href="a00161.html" title="Interface to be implemented by all exceptions TBB recognizes and propagates across the threads...">tbb::tbb_exception</a> </dd></dl>
-</div><h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="a3006b6825dda6c746d28fb748f5675de"></a>
+<div class="textblock"><h3>template<typename T, class A = cache_aligned_allocator<T>><br/>
+class tbb::concurrent_bounded_queue< T, A ></h3>
+
+<p>A high-performance thread-safe blocking concurrent bounded queue. </p>
+<p>This is the pre-PPL TBB concurrent queue which supports boundedness and blocking semantics. Note that method names agree with the PPL-style concurrent queue. Multiple threads may each push and pop concurrently. Assignment construction is not allowed. </p>
+</div><h2 class="groupheader">Member Typedef Documentation</h2>
+<a class="anchor" id="ae73fa352d781bdb9d01bfb77f2a8bc28"></a>
 <div class="memitem">
 <div class="memproto">
+<div class="memtemplate">
+template<typename T , class A  = cache_aligned_allocator<T>> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef std::ptrdiff_t <a class="el" href="a00035.html">tbb::concurrent_bounded_queue</a>< T, A >::<a class="el" href="a00035.html#ae73fa352d781bdb9d01bfb77f2a8bc28">size_type</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Integral type for representing size of the queue. </p>
+<p>Note that the size_type is a signed integral type. This is because the size can be negative if there are pending pops without corresponding pushes. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="a87926c31967a918ce80690a9ed5d6fa8"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T , class A  = cache_aligned_allocator<T>> </div>
 <table class="mlabels">
   <tr>
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">void __TBB_EXPORTED_METHOD tbb::captured_exception::destroy </td>
+          <td class="memname">void <a class="el" href="a00035.html">tbb::concurrent_bounded_queue</a>< T, A >::pop </td>
           <td>(</td>
-          <td class="paramname">)</td><td></td>
+          <td class="paramtype">T & </td>
+          <td class="paramname"><em>destination</em>)</td><td></td>
           <td></td>
         </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Dequeue item from head of queue. </p>
+<p>Block until an item becomes available, and then dequeue it. </p>
+
+</div>
+</div>
+<a class="anchor" id="a768699675813575eec08c1f43afda395"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T , class A  = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
         <tr>
-          <td align="right">throw </td><td>(</td><td colspan="2"></td>
-        </tr>
-        <tr>
-          <td align="right"></td><td>)</td><td></td><td></td>
+          <td class="memname">void <a class="el" href="a00035.html">tbb::concurrent_bounded_queue</a>< T, A >::set_capacity </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00035.html#ae73fa352d781bdb9d01bfb77f2a8bc28">size_type</a> </td>
+          <td class="paramname"><em>new_capacity</em>)</td><td></td>
+          <td></td>
         </tr>
       </table>
   </td>
   <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
   </tr>
 </table>
 </div><div class="memdoc">
 
-<p>Destroys objects created by the <a class="el" href="a00035.html#abb221485cd260349efdef681f633a6a4" title="Creates and returns pointer to the deep copy of this exception object. ">move()</a> method. </p>
-<p>Frees memory and calls destructor for this exception object. Can and must be used only on objects created by the move method. </p>
-
-<p>Implements <a class="el" href="a00161.html#ad3bc09bf78c33f19a0bcdf882fdf9d41">tbb::tbb_exception</a>.</p>
+<p>Set the capacity. </p>
+<p>Setting the capacity to 0 causes subsequent try_push operations to always fail, and subsequent push operations to block forever. </p>
 
 </div>
 </div>
-<a class="anchor" id="abb221485cd260349efdef681f633a6a4"></a>
+<a class="anchor" id="a9d6c20fd8c193c12b6a7b0c3101fd966"></a>
 <div class="memitem">
 <div class="memproto">
+<div class="memtemplate">
+template<typename T , class A  = cache_aligned_allocator<T>> </div>
 <table class="mlabels">
   <tr>
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname"><a class="el" href="a00035.html">captured_exception</a>* __TBB_EXPORTED_METHOD tbb::captured_exception::move </td>
+          <td class="memname"><a class="el" href="a00035.html#ae73fa352d781bdb9d01bfb77f2a8bc28">size_type</a> <a class="el" href="a00035.html">tbb::concurrent_bounded_queue</a>< T, A >::size </td>
           <td>(</td>
           <td class="paramname">)</td><td></td>
-          <td></td>
+          <td> const</td>
         </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Return number of pushes minus number of pops. </p>
+<p>Note that the result can be negative if there are pops waiting for the corresponding pushes. The result can also exceed <a class="el" href="a00035.html#a526487063242569685af8c8d778d39e0" title="Maximum number of allowed elements. ">capacity()</a> if there are push operations in flight. </p>
+
+</div>
+</div>
+<a class="anchor" id="a3086cb4dcdeee245ef5cf34f72fb3e10"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T , class A  = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
         <tr>
-          <td align="right">throw </td><td>(</td><td colspan="2"></td>
+          <td class="memname">bool <a class="el" href="a00035.html">tbb::concurrent_bounded_queue</a>< T, A >::try_pop </td>
+          <td>(</td>
+          <td class="paramtype">T & </td>
+          <td class="paramname"><em>destination</em>)</td><td></td>
+          <td></td>
         </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Attempt to dequeue an item from head of queue. </p>
+<p>Does not wait for item to become available. Returns true if successful; false otherwise. </p>
+
+</div>
+</div>
+<a class="anchor" id="a03d93a240841a21788396bebd71c51bd"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T , class A  = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
         <tr>
-          <td align="right"></td><td>)</td><td></td><td></td>
+          <td class="memname">bool <a class="el" href="a00035.html">tbb::concurrent_bounded_queue</a>< T, A >::try_push </td>
+          <td>(</td>
+          <td class="paramtype">const T & </td>
+          <td class="paramname"><em>source</em>)</td><td></td>
+          <td></td>
         </tr>
       </table>
   </td>
   <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
   </tr>
 </table>
 </div><div class="memdoc">
 
-<p>Creates and returns pointer to the deep copy of this exception object. </p>
-<p>Move semantics is allowed. </p>
-
-<p>Implements <a class="el" href="a00161.html#a4bd4ba0d501021013d1473d21b020b69">tbb::tbb_exception</a>.</p>
+<p>Enqueue an item at tail of queue if queue is not already full. </p>
+<p>Does not wait for queue to become not full. Returns true if item is pushed; false if queue was already full. </p>
 
 </div>
 </div>
-<a class="anchor" id="ac9ae925678fcc0cc02a74df7d06b8d63"></a>
+<a class="anchor" id="a93f35e9d9381629e0a2993f9fdd96d92"></a>
 <div class="memitem">
 <div class="memproto">
+<div class="memtemplate">
+template<typename T , class A  = cache_aligned_allocator<T>> </div>
 <table class="mlabels">
   <tr>
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">void tbb::captured_exception::throw_self </td>
+          <td class="memname">bool <a class="el" href="a00035.html">tbb::concurrent_bounded_queue</a>< T, A >::try_push </td>
           <td>(</td>
-          <td class="paramname">)</td><td></td>
+          <td class="paramtype">T && </td>
+          <td class="paramname"><em>source</em>)</td><td></td>
           <td></td>
         </tr>
       </table>
   </td>
   <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
   </tr>
 </table>
 </div><div class="memdoc">
 
-<p>Throws this exception object. </p>
-<p>Make sure that if you have several levels of derivation from this interface you implement or override this method on the most derived level. The implementation is as simple as "throw *this;". Failure to do this will result in exception of a base class type being thrown. </p>
-
-<p>Implements <a class="el" href="a00161.html#ae45c08d36c7ec7ae91785da3515a8828">tbb::tbb_exception</a>.</p>
+<p>Move an item at tail of queue if queue is not already full. </p>
+<p>Does not wait for queue to become not full. Returns true if item is pushed; false if queue was already full. </p>
 
 </div>
 </div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>tbb_exception.h</li>
+<li>concurrent_queue.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00035.png b/doc/html/a00035.png
index 131abf6..3dc03c3 100644
Binary files a/doc/html/a00035.png and b/doc/html/a00035.png differ
diff --git a/doc/html/a00036.html b/doc/html/a00036.html
index c864963..b223be7 100644
--- a/doc/html/a00036.html
+++ b/doc/html/a00036.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::combinable< T > Class Template Reference</title>
+<title>tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,69 +33,1054 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00036.html">combinable</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00036.html">concurrent_hash_map</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00274.html">List of all members</a>  </div>
+<a href="#pro-types">Protected Types</a> |
+<a href="#pro-methods">Protected Member Functions</a> |
+<a href="#pro-static-methods">Static Protected Member Functions</a> |
+<a href="#pro-attribs">Protected Attributes</a> |
+<a href="#friends">Friends</a> |
+<a href="a00355.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::combinable< T > Class Template Reference<div class="ingroups"><a class="el" href="a00256.html">Containers</a></div></div>  </div>
+<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A > Class Template Reference<div class="ingroups"><a class="el" href="a00253.html">Containers</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>Thread-local storage with optional reduction.  
+<p>Unordered map from Key to T.  
  <a href="a00036.html#details">More...</a></p>
 
-<p><code>#include <combinable.h></code></p>
+<p><code>#include <concurrent_hash_map.h></code></p>
+<div class="dynheader">
+Inheritance diagram for tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00036.png" usemap="#tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >_map" alt=""/>
+  <map id="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >_map" name="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >_map">
+</map>
+ </div></div>
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00009.html">accessor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Allows write access to elements and combines data access, locking, and garbage collection.  <a href="a00009.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00010.html">accessor_not_used</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html">bucket_accessor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">bucket accessor is to find, rehash, acquire a lock, and access a bucket  <a href="a00026.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00029.html">call_clear_on_leave</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00047.html">const_accessor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Combines data access, locking, and garbage collection.  <a href="a00047.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00083.html">node</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a73476eabf0605a4a17e33eca379b567c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a73476eabf0605a4a17e33eca379b567c"></a>
+typedef Key </td><td class="memItemRight" valign="bottom"><b>key_type</b></td></tr>
+<tr class="separator:a73476eabf0605a4a17e33eca379b567c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a09f82b7e1255cd4a7ab13f694f04e0a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a09f82b7e1255cd4a7ab13f694f04e0a2"></a>
+typedef T </td><td class="memItemRight" valign="bottom"><b>mapped_type</b></td></tr>
+<tr class="separator:a09f82b7e1255cd4a7ab13f694f04e0a2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a10da770ec791fd8f3bddbf19d852b2f6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a10da770ec791fd8f3bddbf19d852b2f6"></a>
+typedef std::pair< const Key, T > </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+<tr class="separator:a10da770ec791fd8f3bddbf19d852b2f6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4346b898af1007960c70b1d5a12b3dda"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4346b898af1007960c70b1d5a12b3dda"></a>
+typedef hash_map_base::size_type </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
+<tr class="separator:a4346b898af1007960c70b1d5a12b3dda"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aae6344f41fc1b2aae8b310442f609db0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aae6344f41fc1b2aae8b310442f609db0"></a>
+typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
+<tr class="separator:aae6344f41fc1b2aae8b310442f609db0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af8fca882f67e98d54a675c9b75db3cc0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af8fca882f67e98d54a675c9b75db3cc0"></a>
+typedef value_type * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+<tr class="separator:af8fca882f67e98d54a675c9b75db3cc0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acaf14214618545aa7e0aa59a3af4a6bd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acaf14214618545aa7e0aa59a3af4a6bd"></a>
+typedef const value_type * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+<tr class="separator:acaf14214618545aa7e0aa59a3af4a6bd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5064777ff7c17e294d74ca60f96f28db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5064777ff7c17e294d74ca60f96f28db"></a>
+typedef value_type & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+<tr class="separator:a5064777ff7c17e294d74ca60f96f28db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6291ee6059597aac8f59dc8fd5558036"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6291ee6059597aac8f59dc8fd5558036"></a>
+typedef const value_type & </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
+<tr class="separator:a6291ee6059597aac8f59dc8fd5558036"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae6af7bf91f1cbd859aef1ffc6197b41a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6af7bf91f1cbd859aef1ffc6197b41a"></a>
+typedef <br class="typebreak"/>
+internal::hash_map_iterator<br class="typebreak"/>
+< <a class="el" href="a00036.html">concurrent_hash_map</a>, <br class="typebreak"/>
+value_type > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+<tr class="separator:ae6af7bf91f1cbd859aef1ffc6197b41a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af416067eaf691c88e6b73bf3b3323f66"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af416067eaf691c88e6b73bf3b3323f66"></a>
+typedef <br class="typebreak"/>
+internal::hash_map_iterator<br class="typebreak"/>
+< <a class="el" href="a00036.html">concurrent_hash_map</a>, const <br class="typebreak"/>
+value_type > </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
+<tr class="separator:af416067eaf691c88e6b73bf3b3323f66"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a69508e67134dd5282b89e1847e71c31b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69508e67134dd5282b89e1847e71c31b"></a>
+typedef <br class="typebreak"/>
+internal::hash_map_range<br class="typebreak"/>
+< iterator > </td><td class="memItemRight" valign="bottom"><b>range_type</b></td></tr>
+<tr class="separator:a69508e67134dd5282b89e1847e71c31b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0b9d06751969eacda84b01582e4aa1d2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0b9d06751969eacda84b01582e4aa1d2"></a>
+typedef <br class="typebreak"/>
+internal::hash_map_range<br class="typebreak"/>
+< const_iterator > </td><td class="memItemRight" valign="bottom"><b>const_range_type</b></td></tr>
+<tr class="separator:a0b9d06751969eacda84b01582e4aa1d2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a85c266c1560f7faa64772d349d0280a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a85c266c1560f7faa64772d349d0280a4"></a>
+typedef Allocator </td><td class="memItemRight" valign="bottom"><b>allocator_type</b></td></tr>
+<tr class="separator:a85c266c1560f7faa64772d349d0280a4"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:ab3c539d5731faaafd81979b207a4fa1f"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab3c539d5731faaafd81979b207a4fa1f"></a>
-template<typename finit > </td></tr>
-<tr class="memitem:ab3c539d5731faaafd81979b207a4fa1f"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>combinable</b> (finit _finit)</td></tr>
-<tr class="separator:ab3c539d5731faaafd81979b207a4fa1f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a52f00cf262d768048db72ab73c8f3ca4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a52f00cf262d768048db72ab73c8f3ca4"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a52f00cf262d768048db72ab73c8f3ca4">~combinable</a> ()</td></tr>
-<tr class="memdesc:a52f00cf262d768048db72ab73c8f3ca4"><td class="mdescLeft"> </td><td class="mdescRight">destructor <br/></td></tr>
-<tr class="separator:a52f00cf262d768048db72ab73c8f3ca4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a376f44cba71450fc18ccddaad61b76cc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a376f44cba71450fc18ccddaad61b76cc"></a>
- </td><td class="memItemRight" valign="bottom"><b>combinable</b> (const <a class="el" href="a00036.html">combinable</a> &other)</td></tr>
-<tr class="separator:a376f44cba71450fc18ccddaad61b76cc"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab011fbe2f0600900b6e1b9760d82aead"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab011fbe2f0600900b6e1b9760d82aead"></a>
-<a class="el" href="a00036.html">combinable</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00036.html">combinable</a> &other)</td></tr>
-<tr class="separator:ab011fbe2f0600900b6e1b9760d82aead"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8ecfe80161a59f04ffd9676e79701de6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8ecfe80161a59f04ffd9676e79701de6"></a>
-void </td><td class="memItemRight" valign="bottom"><b>clear</b> ()</td></tr>
-<tr class="separator:a8ecfe80161a59f04ffd9676e79701de6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae47f982dbd396d225f0f546e60690d42"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae47f982dbd396d225f0f546e60690d42"></a>
-T & </td><td class="memItemRight" valign="bottom"><b>local</b> ()</td></tr>
-<tr class="separator:ae47f982dbd396d225f0f546e60690d42"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2433d2b3b53b9979d0b3bb2a175abc9b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2433d2b3b53b9979d0b3bb2a175abc9b"></a>
-T & </td><td class="memItemRight" valign="bottom"><b>local</b> (bool &exists)</td></tr>
-<tr class="separator:a2433d2b3b53b9979d0b3bb2a175abc9b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3d564f6d480e0c7fe8e756d1de1cf0e2"><td class="memTemplParams" colspan="2"><a class="anchor" id="a3d564f6d480e0c7fe8e756d1de1cf0e2"></a>
-template<typename combine_func_t > </td></tr>
-<tr class="memitem:a3d564f6d480e0c7fe8e756d1de1cf0e2"><td class="memTemplItemLeft" align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>combine</b> (combine_func_t f_combine)</td></tr>
-<tr class="separator:a3d564f6d480e0c7fe8e756d1de1cf0e2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aadadee714004d977f0e95a479bfb80ac"><td class="memTemplParams" colspan="2"><a class="anchor" id="aadadee714004d977f0e95a479bfb80ac"></a>
-template<typename combine_func_t > </td></tr>
-<tr class="memitem:aadadee714004d977f0e95a479bfb80ac"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>combine_each</b> (combine_func_t f_combine)</td></tr>
-<tr class="separator:aadadee714004d977f0e95a479bfb80ac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa3a9767b525144a2afb69ed125714c53"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa3a9767b525144a2afb69ed125714c53"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#aa3a9767b525144a2afb69ed125714c53">concurrent_hash_map</a> (const allocator_type &a=allocator_type())</td></tr>
+<tr class="memdesc:aa3a9767b525144a2afb69ed125714c53"><td class="mdescLeft"> </td><td class="mdescRight">Construct empty table. <br/></td></tr>
+<tr class="separator:aa3a9767b525144a2afb69ed125714c53"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aae76e1252b56b107685f8746e0f6a1f4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aae76e1252b56b107685f8746e0f6a1f4"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#aae76e1252b56b107685f8746e0f6a1f4">concurrent_hash_map</a> (size_type n, const allocator_type &a=allocator_type())</td></tr>
+<tr class="memdesc:aae76e1252b56b107685f8746e0f6a1f4"><td class="mdescLeft"> </td><td class="mdescRight">Construct empty table with n preallocated buckets. This number serves also as initial concurrency level. <br/></td></tr>
+<tr class="separator:aae76e1252b56b107685f8746e0f6a1f4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8a73b86f9a5e9836b38713e56c546654"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8a73b86f9a5e9836b38713e56c546654"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a8a73b86f9a5e9836b38713e56c546654">concurrent_hash_map</a> (const <a class="el" href="a00036.html">concurrent_hash_map</a> &table, const allocator_type &a=allocator_type())</td></tr>
+<tr class="memdesc:a8a73b86f9a5e9836b38713e56c546654"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br/></td></tr>
+<tr class="separator:a8a73b86f9a5e9836b38713e56c546654"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2bd04845683b15a590913a72a19fa3dc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2bd04845683b15a590913a72a19fa3dc"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a2bd04845683b15a590913a72a19fa3dc">concurrent_hash_map</a> (<a class="el" href="a00036.html">concurrent_hash_map</a> &&table)</td></tr>
+<tr class="memdesc:a2bd04845683b15a590913a72a19fa3dc"><td class="mdescLeft"> </td><td class="mdescRight">Move constructor. <br/></td></tr>
+<tr class="separator:a2bd04845683b15a590913a72a19fa3dc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad642e497153df5669e6454acef095675"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad642e497153df5669e6454acef095675"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#ad642e497153df5669e6454acef095675">concurrent_hash_map</a> (<a class="el" href="a00036.html">concurrent_hash_map</a> &&table, const allocator_type &a)</td></tr>
+<tr class="memdesc:ad642e497153df5669e6454acef095675"><td class="mdescLeft"> </td><td class="mdescRight">Move constructor. <br/></td></tr>
+<tr class="separator:ad642e497153df5669e6454acef095675"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad56fc19d656099d49051f3c363cefc89"><td class="memTemplParams" colspan="2"><a class="anchor" id="ad56fc19d656099d49051f3c363cefc89"></a>
+template<typename I > </td></tr>
+<tr class="memitem:ad56fc19d656099d49051f3c363cefc89"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00036.html#ad56fc19d656099d49051f3c363cefc89">concurrent_hash_map</a> (I first, I last, const allocator_type &a=allocator_type())</td></tr>
+<tr class="memdesc:ad56fc19d656099d49051f3c363cefc89"><td class="mdescLeft"> </td><td class="mdescRight">Construction with copying iteration range and given allocator instance. <br/></td></tr>
+<tr class="separator:ad56fc19d656099d49051f3c363cefc89"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a57149f90060b033b1f2493f2a88ef291"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a57149f90060b033b1f2493f2a88ef291"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a57149f90060b033b1f2493f2a88ef291">concurrent_hash_map</a> (std::initializer_list< value_type > il, const allocator_type &a=allocator_type())</td></tr>
+<tr class="memdesc:a57149f90060b033b1f2493f2a88ef291"><td class="mdescLeft"> </td><td class="mdescRight">Construct empty table with n preallocated buckets. This number serves also as initial concurrency level. <br/></td></tr>
+<tr class="separator:a57149f90060b033b1f2493f2a88ef291"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a63e01b1f79c287ae0257ccfd483fd90a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63e01b1f79c287ae0257ccfd483fd90a"></a>
+<a class="el" href="a00036.html">concurrent_hash_map</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a63e01b1f79c287ae0257ccfd483fd90a">operator=</a> (const <a class="el" href="a00036.html">concurrent_hash_map</a> &table)</td></tr>
+<tr class="memdesc:a63e01b1f79c287ae0257ccfd483fd90a"><td class="mdescLeft"> </td><td class="mdescRight">Assignment. <br/></td></tr>
+<tr class="separator:a63e01b1f79c287ae0257ccfd483fd90a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a92b506ceed93d1c25979948961054380"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a92b506ceed93d1c25979948961054380"></a>
+<a class="el" href="a00036.html">concurrent_hash_map</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a92b506ceed93d1c25979948961054380">operator=</a> (<a class="el" href="a00036.html">concurrent_hash_map</a> &&table)</td></tr>
+<tr class="memdesc:a92b506ceed93d1c25979948961054380"><td class="mdescLeft"> </td><td class="mdescRight">Move Assignment. <br/></td></tr>
+<tr class="separator:a92b506ceed93d1c25979948961054380"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aac73665b1a55e3de7332f36598488252"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aac73665b1a55e3de7332f36598488252"></a>
+<a class="el" href="a00036.html">concurrent_hash_map</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#aac73665b1a55e3de7332f36598488252">operator=</a> (std::initializer_list< value_type > il)</td></tr>
+<tr class="memdesc:aac73665b1a55e3de7332f36598488252"><td class="mdescLeft"> </td><td class="mdescRight">Assignment. <br/></td></tr>
+<tr class="separator:aac73665b1a55e3de7332f36598488252"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adf1fa9470c605731063e5949f0418eb7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#adf1fa9470c605731063e5949f0418eb7">rehash</a> (size_type n=0)</td></tr>
+<tr class="memdesc:adf1fa9470c605731063e5949f0418eb7"><td class="mdescLeft"> </td><td class="mdescRight">Rehashes and optionally resizes the whole table.  <a href="#adf1fa9470c605731063e5949f0418eb7">More...</a><br/></td></tr>
+<tr class="separator:adf1fa9470c605731063e5949f0418eb7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab8295bc260b5e4df883fef11574b84c6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab8295bc260b5e4df883fef11574b84c6"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#ab8295bc260b5e4df883fef11574b84c6">clear</a> ()</td></tr>
+<tr class="memdesc:ab8295bc260b5e4df883fef11574b84c6"><td class="mdescLeft"> </td><td class="mdescRight">Clear table. <br/></td></tr>
+<tr class="separator:ab8295bc260b5e4df883fef11574b84c6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9ce9ab8c954bf6979c2c57d10fd8a8ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9ce9ab8c954bf6979c2c57d10fd8a8ed"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a9ce9ab8c954bf6979c2c57d10fd8a8ed">~concurrent_hash_map</a> ()</td></tr>
+<tr class="memdesc:a9ce9ab8c954bf6979c2c57d10fd8a8ed"><td class="mdescLeft"> </td><td class="mdescRight">Clear table and destroy it. <br/></td></tr>
+<tr class="separator:a9ce9ab8c954bf6979c2c57d10fd8a8ed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a10dc8d8b91878b211c12a3e6b1bb38bb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a10dc8d8b91878b211c12a3e6b1bb38bb"></a>
+range_type </td><td class="memItemRight" valign="bottom"><b>range</b> (size_type grainsize=1)</td></tr>
+<tr class="separator:a10dc8d8b91878b211c12a3e6b1bb38bb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8698274a4ffb94bb0468c387ffdc2e56"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8698274a4ffb94bb0468c387ffdc2e56"></a>
+const_range_type </td><td class="memItemRight" valign="bottom"><b>range</b> (size_type grainsize=1) const </td></tr>
+<tr class="separator:a8698274a4ffb94bb0468c387ffdc2e56"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a38b7d6443502ee9f4c2374d34ea8d742"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a38b7d6443502ee9f4c2374d34ea8d742"></a>
+iterator </td><td class="memItemRight" valign="bottom"><b>begin</b> ()</td></tr>
+<tr class="separator:a38b7d6443502ee9f4c2374d34ea8d742"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afa85633d3fc7494f49728b4064db59f6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa85633d3fc7494f49728b4064db59f6"></a>
+iterator </td><td class="memItemRight" valign="bottom"><b>end</b> ()</td></tr>
+<tr class="separator:afa85633d3fc7494f49728b4064db59f6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a46aa6dc98653a88d410d0cfddd514f0d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a46aa6dc98653a88d410d0cfddd514f0d"></a>
+const_iterator </td><td class="memItemRight" valign="bottom"><b>begin</b> () const </td></tr>
+<tr class="separator:a46aa6dc98653a88d410d0cfddd514f0d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0ed8cd11a3a5c400d9bc11492d136dfd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0ed8cd11a3a5c400d9bc11492d136dfd"></a>
+const_iterator </td><td class="memItemRight" valign="bottom"><b>end</b> () const </td></tr>
+<tr class="separator:a0ed8cd11a3a5c400d9bc11492d136dfd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a01a1c3032bb193a5c4f37425adbe306c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a01a1c3032bb193a5c4f37425adbe306c"></a>
+std::pair< iterator, iterator > </td><td class="memItemRight" valign="bottom"><b>equal_range</b> (const Key &key)</td></tr>
+<tr class="separator:a01a1c3032bb193a5c4f37425adbe306c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af368c8d8f49a9a74706c9ed11f8fd7e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af368c8d8f49a9a74706c9ed11f8fd7e4"></a>
+std::pair< const_iterator, <br class="typebreak"/>
+const_iterator > </td><td class="memItemRight" valign="bottom"><b>equal_range</b> (const Key &key) const </td></tr>
+<tr class="separator:af368c8d8f49a9a74706c9ed11f8fd7e4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad2ce6da7cd62bc7425f0a29498332ab4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad2ce6da7cd62bc7425f0a29498332ab4"></a>
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#ad2ce6da7cd62bc7425f0a29498332ab4">size</a> () const </td></tr>
+<tr class="memdesc:ad2ce6da7cd62bc7425f0a29498332ab4"><td class="mdescLeft"> </td><td class="mdescRight">Number of items in table. <br/></td></tr>
+<tr class="separator:ad2ce6da7cd62bc7425f0a29498332ab4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5e05f2a1ca3accfb4252d7ee82d1e990"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e05f2a1ca3accfb4252d7ee82d1e990"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a5e05f2a1ca3accfb4252d7ee82d1e990">empty</a> () const </td></tr>
+<tr class="memdesc:a5e05f2a1ca3accfb4252d7ee82d1e990"><td class="mdescLeft"> </td><td class="mdescRight">True if <a class="el" href="a00036.html#ad2ce6da7cd62bc7425f0a29498332ab4" title="Number of items in table. ">size()</a>==0. <br/></td></tr>
+<tr class="separator:a5e05f2a1ca3accfb4252d7ee82d1e990"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aea0a0e5220a0dcb67da57d0280d36005"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aea0a0e5220a0dcb67da57d0280d36005"></a>
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#aea0a0e5220a0dcb67da57d0280d36005">max_size</a> () const </td></tr>
+<tr class="memdesc:aea0a0e5220a0dcb67da57d0280d36005"><td class="mdescLeft"> </td><td class="mdescRight">Upper bound on size. <br/></td></tr>
+<tr class="separator:aea0a0e5220a0dcb67da57d0280d36005"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa067a2a4db1d96f38555369a89deee64"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa067a2a4db1d96f38555369a89deee64"></a>
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#aa067a2a4db1d96f38555369a89deee64">bucket_count</a> () const </td></tr>
+<tr class="memdesc:aa067a2a4db1d96f38555369a89deee64"><td class="mdescLeft"> </td><td class="mdescRight">Returns the current number of buckets. <br/></td></tr>
+<tr class="separator:aa067a2a4db1d96f38555369a89deee64"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a121865c574f8ae5cae69ed3d6b7e0511"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a121865c574f8ae5cae69ed3d6b7e0511"></a>
+allocator_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a121865c574f8ae5cae69ed3d6b7e0511">get_allocator</a> () const </td></tr>
+<tr class="memdesc:a121865c574f8ae5cae69ed3d6b7e0511"><td class="mdescLeft"> </td><td class="mdescRight">return allocator object <br/></td></tr>
+<tr class="separator:a121865c574f8ae5cae69ed3d6b7e0511"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4c8edf603bc776a6c84c007702c1808e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c8edf603bc776a6c84c007702c1808e"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a4c8edf603bc776a6c84c007702c1808e">swap</a> (<a class="el" href="a00036.html">concurrent_hash_map</a> &table)</td></tr>
+<tr class="memdesc:a4c8edf603bc776a6c84c007702c1808e"><td class="mdescLeft"> </td><td class="mdescRight">swap two instances. Iterators are invalidated <br/></td></tr>
+<tr class="separator:a4c8edf603bc776a6c84c007702c1808e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac375d3884bf9c80efe56117757c822e7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac375d3884bf9c80efe56117757c822e7"></a>
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#ac375d3884bf9c80efe56117757c822e7">count</a> (const Key &key) const </td></tr>
+<tr class="memdesc:ac375d3884bf9c80efe56117757c822e7"><td class="mdescLeft"> </td><td class="mdescRight">Return count of items (0 or 1) <br/></td></tr>
+<tr class="separator:ac375d3884bf9c80efe56117757c822e7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a27a3f296dc170ae25f8e3fd9efa93cff"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a27a3f296dc170ae25f8e3fd9efa93cff">find</a> (<a class="el" href="a00047.html">const_accessor</a> &result, const Key &key) const </td></tr>
+<tr class="memdesc:a27a3f296dc170ae25f8e3fd9efa93cff"><td class="mdescLeft"> </td><td class="mdescRight">Find item and acquire a read lock on the item.  <a href="#a27a3f296dc170ae25f8e3fd9efa93cff">More...</a><br/></td></tr>
+<tr class="separator:a27a3f296dc170ae25f8e3fd9efa93cff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6b61799e2018381b5ee4b78752a41483"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a6b61799e2018381b5ee4b78752a41483">find</a> (<a class="el" href="a00009.html">accessor</a> &result, const Key &key)</td></tr>
+<tr class="memdesc:a6b61799e2018381b5ee4b78752a41483"><td class="mdescLeft"> </td><td class="mdescRight">Find item and acquire a write lock on the item.  <a href="#a6b61799e2018381b5ee4b78752a41483">More...</a><br/></td></tr>
+<tr class="separator:a6b61799e2018381b5ee4b78752a41483"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaebb10a9e9dcb24e63860caa745a281d"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#aaebb10a9e9dcb24e63860caa745a281d">insert</a> (<a class="el" href="a00047.html">const_accessor</a> &result, const Key &key)</td></tr>
+<tr class="memdesc:aaebb10a9e9dcb24e63860caa745a281d"><td class="mdescLeft"> </td><td class="mdescRight">Insert item (if not already present) and acquire a read lock on the item.  <a href="#aaebb10a9e9dcb24e63860caa745a281d">More...</a><br/></td></tr>
+<tr class="separator:aaebb10a9e9dcb24e63860caa745a281d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a766c6033c203e8f342501d85a7cf3405"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a766c6033c203e8f342501d85a7cf3405">insert</a> (<a class="el" href="a00009.html">accessor</a> &result, const Key &key)</td></tr>
+<tr class="memdesc:a766c6033c203e8f342501d85a7cf3405"><td class="mdescLeft"> </td><td class="mdescRight">Insert item (if not already present) and acquire a write lock on the item.  <a href="#a766c6033c203e8f342501d85a7cf3405">More...</a><br/></td></tr>
+<tr class="separator:a766c6033c203e8f342501d85a7cf3405"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae0b420cdb752e749790c8a7daa15c3c2"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#ae0b420cdb752e749790c8a7daa15c3c2">insert</a> (<a class="el" href="a00047.html">const_accessor</a> &result, const value_type &value)</td></tr>
+<tr class="memdesc:ae0b420cdb752e749790c8a7daa15c3c2"><td class="mdescLeft"> </td><td class="mdescRight">Insert item by copying if there is no such key present already and acquire a read lock on the item.  <a href="#ae0b420cdb752e749790c8a7daa15c3c2">More...</a><br/></td></tr>
+<tr class="separator:ae0b420cdb752e749790c8a7daa15c3c2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2047214e041b7674c3b83e204d0d6c6a"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a2047214e041b7674c3b83e204d0d6c6a">insert</a> (<a class="el" href="a00009.html">accessor</a> &result, const value_type &value)</td></tr>
+<tr class="memdesc:a2047214e041b7674c3b83e204d0d6c6a"><td class="mdescLeft"> </td><td class="mdescRight">Insert item by copying if there is no such key present already and acquire a write lock on the item.  <a href="#a2047214e041b7674c3b83e204d0d6c6a">More...</a><br/></td></tr>
+<tr class="separator:a2047214e041b7674c3b83e204d0d6c6a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8e39501f9edb3210504c9c4ca05384b7"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a8e39501f9edb3210504c9c4ca05384b7">insert</a> (const value_type &value)</td></tr>
+<tr class="memdesc:a8e39501f9edb3210504c9c4ca05384b7"><td class="mdescLeft"> </td><td class="mdescRight">Insert item by copying if there is no such key present already.  <a href="#a8e39501f9edb3210504c9c4ca05384b7">More...</a><br/></td></tr>
+<tr class="separator:a8e39501f9edb3210504c9c4ca05384b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a446910c1ca4818bdb00f4ffa91b9108a"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a446910c1ca4818bdb00f4ffa91b9108a">insert</a> (<a class="el" href="a00047.html">const_accessor</a> &result, value_type &&value)</td></tr>
+<tr class="memdesc:a446910c1ca4818bdb00f4ffa91b9108a"><td class="mdescLeft"> </td><td class="mdescRight">Insert item by copying if there is no such key present already and acquire a read lock on the item.  <a href="#a446910c1ca4818bdb00f4ffa91b9108a">More...</a><br/></td></tr>
+<tr class="separator:a446910c1ca4818bdb00f4ffa91b9108a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a50c929e78ecfa36986c8821287665a70"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a50c929e78ecfa36986c8821287665a70">insert</a> (<a class="el" href="a00009.html">accessor</a> &result, value_type &&value)</td></tr>
+<tr class="memdesc:a50c929e78ecfa36986c8821287665a70"><td class="mdescLeft"> </td><td class="mdescRight">Insert item by copying if there is no such key present already and acquire a write lock on the item.  <a href="#a50c929e78ecfa36986c8821287665a70">More...</a><br/></td></tr>
+<tr class="separator:a50c929e78ecfa36986c8821287665a70"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5d3da283d2e74c7ff0ecb0dfd4d371fd"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a5d3da283d2e74c7ff0ecb0dfd4d371fd">insert</a> (value_type &&value)</td></tr>
+<tr class="memdesc:a5d3da283d2e74c7ff0ecb0dfd4d371fd"><td class="mdescLeft"> </td><td class="mdescRight">Insert item by copying if there is no such key present already.  <a href="#a5d3da283d2e74c7ff0ecb0dfd4d371fd">More...</a><br/></td></tr>
+<tr class="separator:a5d3da283d2e74c7ff0ecb0dfd4d371fd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a382178ea2f00f69096c91bcf76ae7913"><td class="memTemplParams" colspan="2">template<typename... Args> </td></tr>
+<tr class="memitem:a382178ea2f00f69096c91bcf76ae7913"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00036.html#a382178ea2f00f69096c91bcf76ae7913">emplace</a> (<a class="el" href="a00047.html">const_accessor</a> &result, Args &&...args)</td></tr>
+<tr class="memdesc:a382178ea2f00f69096c91bcf76ae7913"><td class="mdescLeft"> </td><td class="mdescRight">Insert item by copying if there is no such key present already and acquire a read lock on the item.  <a href="#a382178ea2f00f69096c91bcf76ae7913">More...</a><br/></td></tr>
+<tr class="separator:a382178ea2f00f69096c91bcf76ae7913"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a17e51c8864282c35aa4d23f22909cc4a"><td class="memTemplParams" colspan="2">template<typename... Args> </td></tr>
+<tr class="memitem:a17e51c8864282c35aa4d23f22909cc4a"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00036.html#a17e51c8864282c35aa4d23f22909cc4a">emplace</a> (<a class="el" href="a00009.html">accessor</a> &result, Args &&...args)</td></tr>
+<tr class="memdesc:a17e51c8864282c35aa4d23f22909cc4a"><td class="mdescLeft"> </td><td class="mdescRight">Insert item by copying if there is no such key present already and acquire a write lock on the item.  <a href="#a17e51c8864282c35aa4d23f22909cc4a">More...</a><br/></td></tr>
+<tr class="separator:a17e51c8864282c35aa4d23f22909cc4a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acbe1d0f3a87786a83a7021af2ef52ee0"><td class="memTemplParams" colspan="2">template<typename... Args> </td></tr>
+<tr class="memitem:acbe1d0f3a87786a83a7021af2ef52ee0"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00036.html#acbe1d0f3a87786a83a7021af2ef52ee0">emplace</a> (Args &&...args)</td></tr>
+<tr class="memdesc:acbe1d0f3a87786a83a7021af2ef52ee0"><td class="mdescLeft"> </td><td class="mdescRight">Insert item by copying if there is no such key present already.  <a href="#acbe1d0f3a87786a83a7021af2ef52ee0">More...</a><br/></td></tr>
+<tr class="separator:acbe1d0f3a87786a83a7021af2ef52ee0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab84dfd77316252cbf39c7ae89e365a00"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab84dfd77316252cbf39c7ae89e365a00"></a>
+template<typename I > </td></tr>
+<tr class="memitem:ab84dfd77316252cbf39c7ae89e365a00"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00036.html#ab84dfd77316252cbf39c7ae89e365a00">insert</a> (I first, I last)</td></tr>
+<tr class="memdesc:ab84dfd77316252cbf39c7ae89e365a00"><td class="mdescLeft"> </td><td class="mdescRight">Insert range [first, last) <br/></td></tr>
+<tr class="separator:ab84dfd77316252cbf39c7ae89e365a00"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a580fdba266e87106ad41470479f641d6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a580fdba266e87106ad41470479f641d6"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a580fdba266e87106ad41470479f641d6">insert</a> (std::initializer_list< value_type > il)</td></tr>
+<tr class="memdesc:a580fdba266e87106ad41470479f641d6"><td class="mdescLeft"> </td><td class="mdescRight">Insert initializer list. <br/></td></tr>
+<tr class="separator:a580fdba266e87106ad41470479f641d6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5144122dbb946d933b94a92117543b33"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a5144122dbb946d933b94a92117543b33">erase</a> (const Key &key)</td></tr>
+<tr class="memdesc:a5144122dbb946d933b94a92117543b33"><td class="mdescLeft"> </td><td class="mdescRight">Erase item.  <a href="#a5144122dbb946d933b94a92117543b33">More...</a><br/></td></tr>
+<tr class="separator:a5144122dbb946d933b94a92117543b33"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2ec6f95ed9beda9d32df56cdd45c1842"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a2ec6f95ed9beda9d32df56cdd45c1842">erase</a> (<a class="el" href="a00047.html">const_accessor</a> &item_accessor)</td></tr>
+<tr class="memdesc:a2ec6f95ed9beda9d32df56cdd45c1842"><td class="mdescLeft"> </td><td class="mdescRight">Erase item by <a class="el" href="a00047.html" title="Combines data access, locking, and garbage collection. ">const_accessor</a>.  <a href="#a2ec6f95ed9beda9d32df56cdd45c1842">More...</a><br/></td></tr>
+<tr class="separator:a2ec6f95ed9beda9d32df56cdd45c1842"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3ed0fbcc6cfd4db8242e100355ac1fa5"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a3ed0fbcc6cfd4db8242e100355ac1fa5">erase</a> (<a class="el" href="a00009.html">accessor</a> &item_accessor)</td></tr>
+<tr class="memdesc:a3ed0fbcc6cfd4db8242e100355ac1fa5"><td class="mdescLeft"> </td><td class="mdescRight">Erase item by accessor.  <a href="#a3ed0fbcc6cfd4db8242e100355ac1fa5">More...</a><br/></td></tr>
+<tr class="separator:a3ed0fbcc6cfd4db8242e100355ac1fa5"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-types"></a>
+Protected Types</h2></td></tr>
+<tr class="memitem:a81dddc5d509f7f074d84d9c38e83efb9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a81dddc5d509f7f074d84d9c38e83efb9"></a>
+typedef Allocator::template <br class="typebreak"/>
+rebind< <a class="el" href="a00083.html">node</a> >::other </td><td class="memItemRight" valign="bottom"><b>node_allocator_type</b></td></tr>
+<tr class="separator:a81dddc5d509f7f074d84d9c38e83efb9"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:aed0e0def29516d9ee7aab2192727b69b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed0e0def29516d9ee7aab2192727b69b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>delete_node</b> (node_base *n)</td></tr>
+<tr class="separator:aed0e0def29516d9ee7aab2192727b69b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae44a70417f9674a2169f9a1fd437a3bd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae44a70417f9674a2169f9a1fd437a3bd"></a>
+<a class="el" href="a00083.html">node</a> * </td><td class="memItemRight" valign="bottom"><b>search_bucket</b> (const key_type &key, bucket *b) const </td></tr>
+<tr class="separator:ae44a70417f9674a2169f9a1fd437a3bd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1b57e036f82bc2b1ef1ede41b02d46b5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1b57e036f82bc2b1ef1ede41b02d46b5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>rehash_bucket</b> (bucket *b_new, const hashcode_t h)</td></tr>
+<tr class="separator:a1b57e036f82bc2b1ef1ede41b02d46b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2a319cf46fb9cf9a88aab6c0a20c98b3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2a319cf46fb9cf9a88aab6c0a20c98b3"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a2a319cf46fb9cf9a88aab6c0a20c98b3">lookup</a> (bool op_insert, const Key &key, const T *t, <a class="el" href="a00047.html">const_accessor</a> *result, bool write, <a class="el" href="a00083.html">node</a> *(*allocate_node)(node_allocator_type &, const Key &, const T *), <a class="el" href="a00083.html">node</a> *tmp_n=0)</td></tr>
+<tr class="memdesc:a2a319cf46fb9cf9a88aab6c0a20c98b3"><td class="mdescLeft"> </td><td class="mdescRight">Insert or find item and optionally acquire a lock on the item. <br/></td></tr>
+<tr class="separator:a2a319cf46fb9cf9a88aab6c0a20c98b3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6204ad5c57618556931e4c90e1938d1e"><td class="memTemplParams" colspan="2"><a class="anchor" id="a6204ad5c57618556931e4c90e1938d1e"></a>
+template<typename Accessor > </td></tr>
+<tr class="memitem:a6204ad5c57618556931e4c90e1938d1e"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>generic_move_insert</b> (Accessor &&result, value_type &&value)</td></tr>
+<tr class="separator:a6204ad5c57618556931e4c90e1938d1e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a81c0a242bf8d4a210d74d551dbc61c18"><td class="memTemplParams" colspan="2"><a class="anchor" id="a81c0a242bf8d4a210d74d551dbc61c18"></a>
+template<typename Accessor , typename... Args> </td></tr>
+<tr class="memitem:a81c0a242bf8d4a210d74d551dbc61c18"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>generic_emplace</b> (Accessor &&result, Args &&...args)</td></tr>
+<tr class="separator:a81c0a242bf8d4a210d74d551dbc61c18"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6fec452b31b8f0e185dc2de64b7128b2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6fec452b31b8f0e185dc2de64b7128b2"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a6fec452b31b8f0e185dc2de64b7128b2">exclude</a> (<a class="el" href="a00047.html">const_accessor</a> &item_accessor)</td></tr>
+<tr class="memdesc:a6fec452b31b8f0e185dc2de64b7128b2"><td class="mdescLeft"> </td><td class="mdescRight">delete item by accessor <br/></td></tr>
+<tr class="separator:a6fec452b31b8f0e185dc2de64b7128b2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8603f5288db63ec35a16844427e97e42"><td class="memTemplParams" colspan="2"><a class="anchor" id="a8603f5288db63ec35a16844427e97e42"></a>
+template<typename I > </td></tr>
+<tr class="memitem:a8603f5288db63ec35a16844427e97e42"><td class="memTemplItemLeft" align="right" valign="top">std::pair< I, I > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00036.html#a8603f5288db63ec35a16844427e97e42">internal_equal_range</a> (const Key &key, I end) const </td></tr>
+<tr class="memdesc:a8603f5288db63ec35a16844427e97e42"><td class="mdescLeft"> </td><td class="mdescRight">Returns an iterator for an item defined by the key, or for the next item after it (if upper==true) <br/></td></tr>
+<tr class="separator:a8603f5288db63ec35a16844427e97e42"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0bc3593f82b3b4f9839fc051780212ab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0bc3593f82b3b4f9839fc051780212ab"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#a0bc3593f82b3b4f9839fc051780212ab">internal_copy</a> (const <a class="el" href="a00036.html">concurrent_hash_map</a> &source)</td></tr>
+<tr class="memdesc:a0bc3593f82b3b4f9839fc051780212ab"><td class="mdescLeft"> </td><td class="mdescRight">Copy "source" to *this, where *this must start out empty. <br/></td></tr>
+<tr class="separator:a0bc3593f82b3b4f9839fc051780212ab"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a31e69cc4fd5adafb379e7c6de5660912"><td class="memTemplParams" colspan="2"><a class="anchor" id="a31e69cc4fd5adafb379e7c6de5660912"></a>
+template<typename I > </td></tr>
+<tr class="memitem:a31e69cc4fd5adafb379e7c6de5660912"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>internal_copy</b> (I first, I last)</td></tr>
+<tr class="separator:a31e69cc4fd5adafb379e7c6de5660912"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acbb5b18c097fb32f264b7b5fe8d9fdd4"><td class="memItemLeft" align="right" valign="top">const_pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html#acbb5b18c097fb32f264b7b5fe8d9fdd4">internal_fast_find</a> (const Key &key) const </td></tr>
+<tr class="memdesc:acbb5b18c097fb32f264b7b5fe8d9fdd4"><td class="mdescLeft"> </td><td class="mdescRight">Fast find when no concurrent erasure is used. For internal use inside TBB only!  <a href="#acbb5b18c097fb32f264b7b5fe8d9fdd4">More...</a><br/></td></tr>
+<tr class="separator:acbb5b18c097fb32f264b7b5fe8d9fdd4"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-static-methods"></a>
+Static Protected Member Functions</h2></td></tr>
+<tr class="memitem:aa220373171ca2feccb74c23823c6329f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa220373171ca2feccb74c23823c6329f"></a>
+static <a class="el" href="a00083.html">node</a> * </td><td class="memItemRight" valign="bottom"><b>allocate_node_copy_construct</b> (node_allocator_type &allocator, const Key &key, const T *t)</td></tr>
+<tr class="separator:aa220373171ca2feccb74c23823c6329f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a59416689b95d20f4d69e43a23aa4f300"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59416689b95d20f4d69e43a23aa4f300"></a>
+static <a class="el" href="a00083.html">node</a> * </td><td class="memItemRight" valign="bottom"><b>allocate_node_move_construct</b> (node_allocator_type &allocator, const Key &key, const T *t)</td></tr>
+<tr class="separator:a59416689b95d20f4d69e43a23aa4f300"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8e8388c1d433042b67d3cc12181189c3"><td class="memTemplParams" colspan="2"><a class="anchor" id="a8e8388c1d433042b67d3cc12181189c3"></a>
+template<typename... Args> </td></tr>
+<tr class="memitem:a8e8388c1d433042b67d3cc12181189c3"><td class="memTemplItemLeft" align="right" valign="top">static <a class="el" href="a00083.html">node</a> * </td><td class="memTemplItemRight" valign="bottom"><b>allocate_node_emplace_construct</b> (node_allocator_type &allocator, Args &&...args)</td></tr>
+<tr class="separator:a8e8388c1d433042b67d3cc12181189c3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1f92f68816357df14d30650b29ab94cb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1f92f68816357df14d30650b29ab94cb"></a>
+static <a class="el" href="a00083.html">node</a> * </td><td class="memItemRight" valign="bottom"><b>allocate_node_default_construct</b> (node_allocator_type &allocator, const Key &key, const T *)</td></tr>
+<tr class="separator:a1f92f68816357df14d30650b29ab94cb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a684cc0d3eb4b6ba8b88a14189c40bb20"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a684cc0d3eb4b6ba8b88a14189c40bb20"></a>
+static <a class="el" href="a00083.html">node</a> * </td><td class="memItemRight" valign="bottom"><b>do_not_allocate_node</b> (node_allocator_type &, const Key &, const T *)</td></tr>
+<tr class="separator:a684cc0d3eb4b6ba8b88a14189c40bb20"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:a2f3f082b2719a9e3c3c15a51a9564202"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2f3f082b2719a9e3c3c15a51a9564202"></a>
+node_allocator_type </td><td class="memItemRight" valign="bottom"><b>my_allocator</b></td></tr>
+<tr class="separator:a2f3f082b2719a9e3c3c15a51a9564202"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae67c3c723768e7e396104f84577f7240"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae67c3c723768e7e396104f84577f7240"></a>
+HashCompare </td><td class="memItemRight" valign="bottom"><b>my_hash_compare</b></td></tr>
+<tr class="separator:ae67c3c723768e7e396104f84577f7240"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a0ecadabdc31088d7bace5a0b6e5ee3f9"><td class="memTemplParams" colspan="2"><a class="anchor" id="a0ecadabdc31088d7bace5a0b6e5ee3f9"></a>
+template<typename Container , typename Value > </td></tr>
+<tr class="memitem:a0ecadabdc31088d7bace5a0b6e5ee3f9"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::hash_map_iterator</b></td></tr>
+<tr class="separator:a0ecadabdc31088d7bace5a0b6e5ee3f9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad49112156111ee1b85be9f4b89e410ca"><td class="memTemplParams" colspan="2"><a class="anchor" id="ad49112156111ee1b85be9f4b89e410ca"></a>
+template<typename I > </td></tr>
+<tr class="memitem:ad49112156111ee1b85be9f4b89e410ca"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::hash_map_range</b></td></tr>
+<tr class="separator:ad49112156111ee1b85be9f4b89e410ca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a584bf754a8408612d4bfd33a3eafd80d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a584bf754a8408612d4bfd33a3eafd80d"></a>
+class </td><td class="memItemRight" valign="bottom"><b>const_accessor</b></td></tr>
+<tr class="separator:a584bf754a8408612d4bfd33a3eafd80d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6e234c756e22e65a3c99771fdeb67d7a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6e234c756e22e65a3c99771fdeb67d7a"></a>
+<a class="el" href="a00047.html">const_accessor</a> * </td><td class="memItemRight" valign="bottom"><b>accessor_location</b> (<a class="el" href="a00010.html">accessor_not_used</a> const &)</td></tr>
+<tr class="separator:a6e234c756e22e65a3c99771fdeb67d7a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0216633e60539f42cf9d645d3f3b7117"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0216633e60539f42cf9d645d3f3b7117"></a>
+<a class="el" href="a00047.html">const_accessor</a> * </td><td class="memItemRight" valign="bottom"><b>accessor_location</b> (<a class="el" href="a00047.html">const_accessor</a> &a)</td></tr>
+<tr class="separator:a0216633e60539f42cf9d645d3f3b7117"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afa491682f70c12a8c7f783a427791ce4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa491682f70c12a8c7f783a427791ce4"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>is_write_access_needed</b> (<a class="el" href="a00009.html">accessor</a> const &)</td></tr>
+<tr class="separator:afa491682f70c12a8c7f783a427791ce4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a34c835f5e1b689d1fbbff61519c0ef5f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a34c835f5e1b689d1fbbff61519c0ef5f"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>is_write_access_needed</b> (<a class="el" href="a00047.html">const_accessor</a> const &)</td></tr>
+<tr class="separator:a34c835f5e1b689d1fbbff61519c0ef5f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7b4bdfdc062d155dc1ace8cc18acc8d6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b4bdfdc062d155dc1ace8cc18acc8d6"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>is_write_access_needed</b> (<a class="el" href="a00010.html">accessor_not_used</a> const &)</td></tr>
+<tr class="separator:a7b4bdfdc062d155dc1ace8cc18acc8d6"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename T><br/>
-class tbb::combinable< T ></h3>
+<div class="textblock"><h3>template<typename Key, typename T, typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >><br/>
+class tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></h3>
 
-<p>Thread-local storage with optional reduction. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>combinable.h</li>
+<p>Unordered map from Key to T. </p>
+<pre class="fragment">concurrent_hash_map is associative container with concurrent access.
+</pre><dl class="section user"><dt>Compatibility</dt><dd>The class meets all Container Requirements from C++ Standard (See ISO/IEC 14882:2003(E), clause 23.1).</dd></dl>
+<dl class="section user"><dt>Exception Safety</dt><dd><ul>
+<li>Hash function is not permitted to throw an exception. User-defined types Key and T are forbidden from throwing an exception in destructors.</li>
+<li>If exception happens during <a class="el" href="a00036.html#aaebb10a9e9dcb24e63860caa745a281d" title="Insert item (if not already present) and acquire a read lock on the item. ">insert()</a> operations, it has no effect (unless exception raised by HashCompare::hash() function during grow_segment).</li>
+<li>If exception happens during <a class="el" href="a00036.html#a63e01b1f79c287ae0257ccfd483fd90a" title="Assignment. ">operator=()</a> operation, the container can have a part of source items, and methods <a class="el" href="a00036.html#ad2ce6da7cd62bc7425f0a29498332ab4" title="Number of items in table. ">size()</a> and <a class="el" href="a00036.html#a5e05f2a1ca3accfb4252d7ee82d1e990" title="True if size()==0. ">empty()</a> can return wrong results.</li>
+</ul>
+</dd></dl>
+<dl class="section user"><dt>Changes since TBB 2.1</dt><dd><ul>
+<li>Replaced internal algorithm and data structure. Patent is pending.</li>
+<li>Added buckets number argument for constructor</li>
+</ul>
+</dd></dl>
+<dl class="section user"><dt>Changes since TBB 2.0</dt><dd><ul>
+<li>Fixed exception-safety</li>
+<li>Added template argument for allocator</li>
+<li>Added allocator argument in constructors</li>
+<li>Added constructor from a range of iterators</li>
+<li>Added several new overloaded <a class="el" href="a00036.html#aaebb10a9e9dcb24e63860caa745a281d" title="Insert item (if not already present) and acquire a read lock on the item. ">insert()</a> methods</li>
+<li>Added <a class="el" href="a00036.html#a121865c574f8ae5cae69ed3d6b7e0511" title="return allocator object ">get_allocator()</a></li>
+<li>Added <a class="el" href="a00036.html#a4c8edf603bc776a6c84c007702c1808e" title="swap two instances. Iterators are invalidated ">swap()</a></li>
+<li>Added <a class="el" href="a00036.html#ac375d3884bf9c80efe56117757c822e7" title="Return count of items (0 or 1) ">count()</a></li>
+<li>Added overloaded <a class="el" href="a00036.html#a3ed0fbcc6cfd4db8242e100355ac1fa5" title="Erase item by accessor. ">erase(accessor &)</a> and <a class="el" href="a00036.html#a2ec6f95ed9beda9d32df56cdd45c1842" title="Erase item by const_accessor. ">erase(const_accessor&)</a></li>
+<li>Added equal_range() [const]</li>
+<li>Added [const_]pointer, [const_]reference, and allocator_type types</li>
+<li>Added global functions: operator==(), operator!=(), and <a class="el" href="a00036.html#a4c8edf603bc776a6c84c007702c1808e" title="swap two instances. Iterators are invalidated ">swap()</a> </li>
+</ul>
+</dd></dl>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="a382178ea2f00f69096c91bcf76ae7913"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
+<div class="memtemplate">
+template<typename... Args> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::emplace </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00047.html">const_accessor</a> & </td>
+          <td class="paramname"><em>result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">Args &&... </td>
+          <td class="paramname"><em>args</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Insert item by copying if there is no such key present already and acquire a read lock on the item. </p>
+<p>Returns true if item is new. </p>
+
+</div>
+</div>
+<a class="anchor" id="a17e51c8864282c35aa4d23f22909cc4a"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
+<div class="memtemplate">
+template<typename... Args> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::emplace </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00009.html">accessor</a> & </td>
+          <td class="paramname"><em>result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">Args &&... </td>
+          <td class="paramname"><em>args</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Insert item by copying if there is no such key present already and acquire a write lock on the item. </p>
+<p>Returns true if item is new. </p>
+
+</div>
+</div>
+<a class="anchor" id="acbe1d0f3a87786a83a7021af2ef52ee0"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
+<div class="memtemplate">
+template<typename... Args> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::emplace </td>
+          <td>(</td>
+          <td class="paramtype">Args &&... </td>
+          <td class="paramname"><em>args</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Insert item by copying if there is no such key present already. </p>
+<p>Returns true if item is inserted. </p>
+
+</div>
+</div>
+<a class="anchor" id="a5144122dbb946d933b94a92117543b33"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key , typename T , typename HashCompare , typename A > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::erase </td>
+          <td>(</td>
+          <td class="paramtype">const Key & </td>
+          <td class="paramname"><em>key</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Erase item. </p>
+<p>Return true if item was erased by particularly this call. </p>
+
+<p>References <a class="el" href="a00026.html#aaa8167e2961330435fd23eb92127805c">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor::is_writer()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2ec6f95ed9beda9d32df56cdd45c1842"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::erase </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00047.html">const_accessor</a> & </td>
+          <td class="paramname"><em>item_accessor</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Erase item by <a class="el" href="a00047.html" title="Combines data access, locking, and garbage collection. ">const_accessor</a>. </p>
+<p>Return true if item was erased by particularly this call. </p>
+
+</div>
+</div>
+<a class="anchor" id="a3ed0fbcc6cfd4db8242e100355ac1fa5"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::erase </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00009.html">accessor</a> & </td>
+          <td class="paramname"><em>item_accessor</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Erase item by accessor. </p>
+<p>Return true if item was erased by particularly this call. </p>
+
+</div>
+</div>
+<a class="anchor" id="a27a3f296dc170ae25f8e3fd9efa93cff"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::find </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00047.html">const_accessor</a> & </td>
+          <td class="paramname"><em>result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Key & </td>
+          <td class="paramname"><em>key</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Find item and acquire a read lock on the item. </p>
+<p>Return true if item is found, false otherwise. </p>
+
+<p>References <a class="el" href="a00047.html#a18390cb369369d72bdf7c867755b5190">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor::release()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6b61799e2018381b5ee4b78752a41483"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::find </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00009.html">accessor</a> & </td>
+          <td class="paramname"><em>result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Key & </td>
+          <td class="paramname"><em>key</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Find item and acquire a write lock on the item. </p>
+<p>Return true if item is found, false otherwise. </p>
+
+<p>References <a class="el" href="a00047.html#a18390cb369369d72bdf7c867755b5190">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor::release()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaebb10a9e9dcb24e63860caa745a281d"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00047.html">const_accessor</a> & </td>
+          <td class="paramname"><em>result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Key & </td>
+          <td class="paramname"><em>key</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Insert item (if not already present) and acquire a read lock on the item. </p>
+<p>Returns true if item is new. </p>
+
+<p>References <a class="el" href="a00047.html#a18390cb369369d72bdf7c867755b5190">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor::release()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a766c6033c203e8f342501d85a7cf3405"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00009.html">accessor</a> & </td>
+          <td class="paramname"><em>result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Key & </td>
+          <td class="paramname"><em>key</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Insert item (if not already present) and acquire a write lock on the item. </p>
+<p>Returns true if item is new. </p>
+
+<p>References <a class="el" href="a00047.html#a18390cb369369d72bdf7c867755b5190">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor::release()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae0b420cdb752e749790c8a7daa15c3c2"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00047.html">const_accessor</a> & </td>
+          <td class="paramname"><em>result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const value_type & </td>
+          <td class="paramname"><em>value</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Insert item by copying if there is no such key present already and acquire a read lock on the item. </p>
+<p>Returns true if item is new. </p>
+
+<p>References <a class="el" href="a00047.html#a18390cb369369d72bdf7c867755b5190">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor::release()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2047214e041b7674c3b83e204d0d6c6a"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00009.html">accessor</a> & </td>
+          <td class="paramname"><em>result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const value_type & </td>
+          <td class="paramname"><em>value</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Insert item by copying if there is no such key present already and acquire a write lock on the item. </p>
+<p>Returns true if item is new. </p>
+
+<p>References <a class="el" href="a00047.html#a18390cb369369d72bdf7c867755b5190">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor::release()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8e39501f9edb3210504c9c4ca05384b7"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
+          <td>(</td>
+          <td class="paramtype">const value_type & </td>
+          <td class="paramname"><em>value</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Insert item by copying if there is no such key present already. </p>
+<p>Returns true if item is inserted. </p>
+
+</div>
+</div>
+<a class="anchor" id="a446910c1ca4818bdb00f4ffa91b9108a"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00047.html">const_accessor</a> & </td>
+          <td class="paramname"><em>result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">value_type && </td>
+          <td class="paramname"><em>value</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Insert item by copying if there is no such key present already and acquire a read lock on the item. </p>
+<p>Returns true if item is new. </p>
+
+</div>
+</div>
+<a class="anchor" id="a50c929e78ecfa36986c8821287665a70"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00009.html">accessor</a> & </td>
+          <td class="paramname"><em>result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">value_type && </td>
+          <td class="paramname"><em>value</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Insert item by copying if there is no such key present already and acquire a write lock on the item. </p>
+<p>Returns true if item is new. </p>
+
+</div>
+</div>
+<a class="anchor" id="a5d3da283d2e74c7ff0ecb0dfd4d371fd"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
+          <td>(</td>
+          <td class="paramtype">value_type && </td>
+          <td class="paramname"><em>value</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Insert item by copying if there is no such key present already. </p>
+<p>Returns true if item is inserted. </p>
+
+</div>
+</div>
+<a class="anchor" id="acbb5b18c097fb32f264b7b5fe8d9fdd4"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">const_pointer <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::internal_fast_find </td>
+          <td>(</td>
+          <td class="paramtype">const Key & </td>
+          <td class="paramname"><em>key</em>)</td><td></td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Fast find when no concurrent erasure is used. For internal use inside TBB only! </p>
+<p>Return pointer to item with given key, or NULL if no such item exists. Must not be called concurrently with erasure operations. </p>
+
+</div>
+</div>
+<a class="anchor" id="adf1fa9470c605731063e5949f0418eb7"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key , typename T , typename HashCompare , typename A > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::rehash </td>
+          <td>(</td>
+          <td class="paramtype">size_type </td>
+          <td class="paramname"><em>n</em> = <code>0</code>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Rehashes and optionally resizes the whole table. </p>
+<p>Useful to optimize performance before or after concurrent operations. Also enables using of <a class="el" href="a00036.html#a27a3f296dc170ae25f8e3fd9efa93cff" title="Find item and acquire a read lock on the item. ">find()</a> and <a class="el" href="a00036.html#ac375d3884bf9c80efe56117757c822e7" title="Return count of items (0 or 1) ">count()</a> concurrent methods in serial context. </p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>concurrent_hash_map.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00043.png b/doc/html/a00036.png
similarity index 100%
copy from doc/html/a00043.png
copy to doc/html/a00036.png
diff --git a/doc/html/a00037.html b/doc/html/a00037.html
index 5f0579e..f7d0be8 100644
--- a/doc/html/a00037.html
+++ b/doc/html/a00037.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::composite_node< InputTuple, OutputTuple > Class Template Reference</title>
+<title>tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,21 +33,57 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00037.html">composite_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00037.html">concurrent_lru_cache</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#pub-types">Public Types</a> |
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#friends">Friends</a> |
+<a href="a00377.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::composite_node< InputTuple, OutputTuple > Class Template Reference</div>  </div>
+<div class="title">tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
+<div class="dynheader">
+Inheritance diagram for tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type >:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00037.png" usemap="#tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type >_map" alt=""/>
+  <map id="tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type >_map" name="tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type >_map">
+</map>
+ </div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:ac498dc4d73a75cbc0d50a15622f06e13"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac498dc4d73a75cbc0d50a15622f06e13"></a>
+typedef handle_object </td><td class="memItemRight" valign="bottom"><b>handle</b></td></tr>
+<tr class="separator:ac498dc4d73a75cbc0d50a15622f06e13"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ad4c0b512bb4ad5109eaae1519ba06d98"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad4c0b512bb4ad5109eaae1519ba06d98"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_lru_cache</b> (value_function_type f, std::size_t number_of_lru_history_items)</td></tr>
+<tr class="separator:ad4c0b512bb4ad5109eaae1519ba06d98"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a632c3911a55cfda997acce279c471ec3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a632c3911a55cfda997acce279c471ec3"></a>
+handle_object </td><td class="memItemRight" valign="bottom"><b>operator[]</b> (key_type k)</td></tr>
+<tr class="separator:a632c3911a55cfda997acce279c471ec3"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:ab9fb998ff3f90c4dc7cefd09f8ff1365"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab9fb998ff3f90c4dc7cefd09f8ff1365"></a>
+class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::aggregating_functor< self_type, aggregated_operation_type ></b></td></tr>
+<tr class="separator:ab9fb998ff3f90c4dc7cefd09f8ff1365"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<li>concurrent_lru_cache.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00044.png b/doc/html/a00037.png
similarity index 100%
copy from doc/html/a00044.png
copy to doc/html/a00037.png
diff --git a/doc/html/a00038.html b/doc/html/a00038.html
index 949ff2c..b0f11af 100644
--- a/doc/html/a00038.html
+++ b/doc/html/a00038.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> > Class Template Reference</title>
+<title>tbb::interface5::concurrent_priority_queue< T, Compare, A > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,114 +33,571 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00038.html">composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00038.html">concurrent_priority_queue</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#nested-classes">Classes</a> |
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-methods">Protected Member Functions</a> |
 <a href="a00362.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> > Class Template Reference</div>  </div>
+<div class="title">tbb::interface5::concurrent_priority_queue< T, Compare, A > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00038.png" usemap="#tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> >_map" alt=""/>
-  <map id="tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> >_map" name="tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> >_map">
-<area href="a00072.html" title="The base of all graph nodes. " alt="tbb::flow::interface7::graph_node" shape="rect" coords="0,56,603,80"/>
-</map>
- </div></div>
+
+<p>Concurrent priority queue.  
+ <a href="a00038.html#details">More...</a></p>
+
+<p><code>#include <concurrent_priority_queue.h></code></p>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:a7f7377e49da370266786ad7169aadbd4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f7377e49da370266786ad7169aadbd4"></a>
-typedef tbb::flow::tuple<br class="typebreak"/>
-< <a class="el" href="a00124.html">receiver</a>< InputTypes > &... > </td><td class="memItemRight" valign="bottom"><b>input_ports_type</b></td></tr>
-<tr class="separator:a7f7377e49da370266786ad7169aadbd4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2f3489a1608a5234ea8ffa5c6f8c2ffa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2f3489a1608a5234ea8ffa5c6f8c2ffa"></a>
-typedef tbb::flow::tuple<br class="typebreak"/>
-< <a class="el" href="a00142.html">sender</a>< OutputTypes > &... > </td><td class="memItemRight" valign="bottom"><b>output_ports_type</b></td></tr>
-<tr class="separator:a2f3489a1608a5234ea8ffa5c6f8c2ffa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2c75d97ae429019363ab6fd1a872512e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c75d97ae429019363ab6fd1a872512e"></a>
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html#a2c75d97ae429019363ab6fd1a872512e">value_type</a></td></tr>
+<tr class="memdesc:a2c75d97ae429019363ab6fd1a872512e"><td class="mdescLeft"> </td><td class="mdescRight">Element type in the queue. <br/></td></tr>
+<tr class="separator:a2c75d97ae429019363ab6fd1a872512e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae4b7ed2ddc8ec6cc910f935c9d299c7a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae4b7ed2ddc8ec6cc910f935c9d299c7a"></a>
+typedef T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html#ae4b7ed2ddc8ec6cc910f935c9d299c7a">reference</a></td></tr>
+<tr class="memdesc:ae4b7ed2ddc8ec6cc910f935c9d299c7a"><td class="mdescLeft"> </td><td class="mdescRight">Reference type. <br/></td></tr>
+<tr class="separator:ae4b7ed2ddc8ec6cc910f935c9d299c7a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0bd617fe8e4657777e86f0ae15d8094f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0bd617fe8e4657777e86f0ae15d8094f"></a>
+typedef const T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html#a0bd617fe8e4657777e86f0ae15d8094f">const_reference</a></td></tr>
+<tr class="memdesc:a0bd617fe8e4657777e86f0ae15d8094f"><td class="mdescLeft"> </td><td class="mdescRight">Const reference type. <br/></td></tr>
+<tr class="separator:a0bd617fe8e4657777e86f0ae15d8094f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7d3da9b47ec58e1c09e3550f702edcfc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7d3da9b47ec58e1c09e3550f702edcfc"></a>
+typedef size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html#a7d3da9b47ec58e1c09e3550f702edcfc">size_type</a></td></tr>
+<tr class="memdesc:a7d3da9b47ec58e1c09e3550f702edcfc"><td class="mdescLeft"> </td><td class="mdescRight">Integral type for representing size of the queue. <br/></td></tr>
+<tr class="separator:a7d3da9b47ec58e1c09e3550f702edcfc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae010b1fa9c0942504737228474b51a0b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae010b1fa9c0942504737228474b51a0b"></a>
+typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html#ae010b1fa9c0942504737228474b51a0b">difference_type</a></td></tr>
+<tr class="memdesc:ae010b1fa9c0942504737228474b51a0b"><td class="mdescLeft"> </td><td class="mdescRight">Difference type for iterator. <br/></td></tr>
+<tr class="separator:ae010b1fa9c0942504737228474b51a0b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1d2cebf242fa83d88eebdc3ad6891fb1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1d2cebf242fa83d88eebdc3ad6891fb1"></a>
+typedef A </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a></td></tr>
+<tr class="memdesc:a1d2cebf242fa83d88eebdc3ad6891fb1"><td class="mdescLeft"> </td><td class="mdescRight">Allocator type. <br/></td></tr>
+<tr class="separator:a1d2cebf242fa83d88eebdc3ad6891fb1"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a9e7854019a261988e840953e5f40f1b4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9e7854019a261988e840953e5f40f1b4"></a>
- </td><td class="memItemRight" valign="bottom"><b>composite_node</b> (<a class="el" href="a00070.html">graph</a> &g, const char *my_type_name=" ")</td></tr>
-<tr class="separator:a9e7854019a261988e840953e5f40f1b4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab3f34ddf880b079533e1d948601f89f1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab3f34ddf880b079533e1d948601f89f1"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_external_ports</b> (input_ports_type &&input_ports_tuple, output_ports_type &&output_ports_tuple)</td></tr>
-<tr class="separator:ab3f34ddf880b079533e1d948601f89f1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9576abde248452d8cc1794e9769e5fa1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9576abde248452d8cc1794e9769e5fa1"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_external_ports</b> (const input_ports_type &input_ports_tuple, const output_ports_type &output_ports_tuple)</td></tr>
-<tr class="separator:a9576abde248452d8cc1794e9769e5fa1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aceb4421acadbf01444709b7c8acdfdd5"><td class="memTemplParams" colspan="2"><a class="anchor" id="aceb4421acadbf01444709b7c8acdfdd5"></a>
-template<typename... NodeTypes> </td></tr>
-<tr class="memitem:aceb4421acadbf01444709b7c8acdfdd5"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>add_visible_nodes</b> (const NodeTypes &...n)</td></tr>
-<tr class="separator:aceb4421acadbf01444709b7c8acdfdd5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a663d728c0c7b827f1d2bb53a63a3f105"><td class="memTemplParams" colspan="2"><a class="anchor" id="a663d728c0c7b827f1d2bb53a63a3f105"></a>
-template<typename... NodeTypes> </td></tr>
-<tr class="memitem:a663d728c0c7b827f1d2bb53a63a3f105"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>add_nodes</b> (const NodeTypes &...n)</td></tr>
-<tr class="separator:a663d728c0c7b827f1d2bb53a63a3f105"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3c5d148a5f0eea9272f1010dcccfd707"><td class="memTemplParams" colspan="2"><a class="anchor" id="a3c5d148a5f0eea9272f1010dcccfd707"></a>
-template<typename... Nodes> </td></tr>
-<tr class="memitem:a3c5d148a5f0eea9272f1010dcccfd707"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>add_nodes</b> (Nodes &...)</td></tr>
-<tr class="separator:a3c5d148a5f0eea9272f1010dcccfd707"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a648efe8899cdbe388a4457e741e39cd1"><td class="memTemplParams" colspan="2"><a class="anchor" id="a648efe8899cdbe388a4457e741e39cd1"></a>
-template<typename... Nodes> </td></tr>
-<tr class="memitem:a648efe8899cdbe388a4457e741e39cd1"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>add_visible_nodes</b> (Nodes &...)</td></tr>
-<tr class="separator:a648efe8899cdbe388a4457e741e39cd1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac02d81092f80b069e8289c8e394dc04a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac02d81092f80b069e8289c8e394dc04a"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:ac02d81092f80b069e8289c8e394dc04a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a320ac64c2145474e4ec602a323676368"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a320ac64c2145474e4ec602a323676368"></a>
-input_ports_type </td><td class="memItemRight" valign="bottom"><b>input_ports</b> ()</td></tr>
-<tr class="separator:a320ac64c2145474e4ec602a323676368"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab39a6ca4fcb2d1c6be7f0c9d5b44b1e6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab39a6ca4fcb2d1c6be7f0c9d5b44b1e6"></a>
-output_ports_type </td><td class="memItemRight" valign="bottom"><b>output_ports</b> ()</td></tr>
-<tr class="separator:ab39a6ca4fcb2d1c6be7f0c9d5b44b1e6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7727dea1d2d0be963f467404ccc5f3d6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7727dea1d2d0be963f467404ccc5f3d6"></a>
-void </td><td class="memItemRight" valign="bottom"><b>extract</b> ()</td></tr>
-<tr class="separator:a7727dea1d2d0be963f467404ccc5f3d6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00072')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4badd313105e30f539882276353dcb8e"></a>
- </td><td class="memItemRight" valign="bottom"><b>graph_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:a9faacbfa63625a96f41efa9983037d5a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9faacbfa63625a96f41efa9983037d5a"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags))</td></tr>
-<tr class="separator:a9faacbfa63625a96f41efa9983037d5a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00072')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac25a4633873c052047b1dd568824d055"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0</td></tr>
-<tr class="separator:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pro_attribs_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00072')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1caee1c5677047b05d18b1662ca6fdf8"></a>
-<a class="el" href="a00070.html">graph</a> & </td><td class="memItemRight" valign="bottom"><b>my_graph</b></td></tr>
-<tr class="separator:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af48cd0cd4f6e44efc3b353adb55f86a8"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>next</b></td></tr>
-<tr class="separator:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6917bffc3cb150319679bf2395e68caa"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>prev</b></td></tr>
-<tr class="separator:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a405be01bac4048f214797c287e2571a1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a405be01bac4048f214797c287e2571a1"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html#a405be01bac4048f214797c287e2571a1">concurrent_priority_queue</a> (const <a class="el" href="a00038.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a> &a=<a class="el" href="a00038.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a>())</td></tr>
+<tr class="memdesc:a405be01bac4048f214797c287e2571a1"><td class="mdescLeft"> </td><td class="mdescRight">Constructs a new <a class="el" href="a00038.html" title="Concurrent priority queue. ">concurrent_priority_queue</a> with default capacity. <br/></td></tr>
+<tr class="separator:a405be01bac4048f214797c287e2571a1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a43c3917ea8a19cf1fec947e29ad4ff3e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a43c3917ea8a19cf1fec947e29ad4ff3e"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html#a43c3917ea8a19cf1fec947e29ad4ff3e">concurrent_priority_queue</a> (<a class="el" href="a00038.html#a7d3da9b47ec58e1c09e3550f702edcfc">size_type</a> init_capacity, const <a class="el" href="a00038.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a> &a=<a class="el" href="a00038.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a>())</td></tr>
+<tr class="memdesc:a43c3917ea8a19cf1fec947e29ad4ff3e"><td class="mdescLeft"> </td><td class="mdescRight">Constructs a new <a class="el" href="a00038.html" title="Concurrent priority queue. ">concurrent_priority_queue</a> with init_sz capacity. <br/></td></tr>
+<tr class="separator:a43c3917ea8a19cf1fec947e29ad4ff3e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0cebee26cc0d00d4dcbb1c74e08029f7"><td class="memTemplParams" colspan="2"><a class="anchor" id="a0cebee26cc0d00d4dcbb1c74e08029f7"></a>
+template<typename InputIterator > </td></tr>
+<tr class="memitem:a0cebee26cc0d00d4dcbb1c74e08029f7"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00038.html#a0cebee26cc0d00d4dcbb1c74e08029f7">concurrent_priority_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00038.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a> &a=<a class="el" href="a00038.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a>()) [...]
+<tr class="memdesc:a0cebee26cc0d00d4dcbb1c74e08029f7"><td class="mdescLeft"> </td><td class="mdescRight">[begin,end) constructor <br/></td></tr>
+<tr class="separator:a0cebee26cc0d00d4dcbb1c74e08029f7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaa8ac175143e12db29a014674a392b38"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaa8ac175143e12db29a014674a392b38"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html#aaa8ac175143e12db29a014674a392b38">concurrent_priority_queue</a> (std::initializer_list< T > init_list, const <a class="el" href="a00038.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a> &a=<a class="el" href="a00038.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a>())</td></tr>
+<tr class="memdesc:aaa8ac175143e12db29a014674a392b38"><td class="mdescLeft"> </td><td class="mdescRight">Constructor from std::initializer_list. <br/></td></tr>
+<tr class="separator:aaa8ac175143e12db29a014674a392b38"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a332d26234f9c37a6b7ba269c648815d0"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html#a332d26234f9c37a6b7ba269c648815d0">concurrent_priority_queue</a> (const <a class="el" href="a00038.html">concurrent_priority_queue</a> &src)</td></tr>
+<tr class="memdesc:a332d26234f9c37a6b7ba269c648815d0"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor.  <a href="#a332d26234f9c37a6b7ba269c648815d0">More...</a><br/></td></tr>
+<tr class="separator:a332d26234f9c37a6b7ba269c648815d0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa52cea369b6630699ee78cc42622be9d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html#aa52cea369b6630699ee78cc42622be9d">concurrent_priority_queue</a> (const <a class="el" href="a00038.html">concurrent_priority_queue</a> &src, const <a class="el" href="a00038.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a> &a)</td></tr>
+<tr class="memdesc:aa52cea369b6630699ee78cc42622be9d"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor with specific allocator.  <a href="#aa52cea369b6630699ee78cc42622be9d">More...</a><br/></td></tr>
+<tr class="separator:aa52cea369b6630699ee78cc42622be9d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac0c3f41b10f04547f3438517c40cf8a5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00038.html">concurrent_priority_queue</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html#ac0c3f41b10f04547f3438517c40cf8a5">operator=</a> (const <a class="el" href="a00038.html">concurrent_priority_queue</a> &src)</td></tr>
+<tr class="memdesc:ac0c3f41b10f04547f3438517c40cf8a5"><td class="mdescLeft"> </td><td class="mdescRight">Assignment operator.  <a href="#ac0c3f41b10f04547f3438517c40cf8a5">More...</a><br/></td></tr>
+<tr class="separator:ac0c3f41b10f04547f3438517c40cf8a5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae9ac965bbac3933c7db89f512adfcbcb"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html#ae9ac965bbac3933c7db89f512adfcbcb">concurrent_priority_queue</a> (<a class="el" href="a00038.html">concurrent_priority_queue</a> &&src)</td></tr>
+<tr class="memdesc:ae9ac965bbac3933c7db89f512adfcbcb"><td class="mdescLeft"> </td><td class="mdescRight">Move constructor.  <a href="#ae9ac965bbac3933c7db89f512adfcbcb">More...</a><br/></td></tr>
+<tr class="separator:ae9ac965bbac3933c7db89f512adfcbcb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a14dd20a4673f77cff3eb6f269a888016"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html#a14dd20a4673f77cff3eb6f269a888016">concurrent_priority_queue</a> (<a class="el" href="a00038.html">concurrent_priority_queue</a> &&src, const <a class="el" href="a00038.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a> &a)</td></tr>
+<tr class="memdesc:a14dd20a4673f77cff3eb6f269a888016"><td class="mdescLeft"> </td><td class="mdescRight">Move constructor with specific allocator.  <a href="#a14dd20a4673f77cff3eb6f269a888016">More...</a><br/></td></tr>
+<tr class="separator:a14dd20a4673f77cff3eb6f269a888016"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9b21bd56aff8c412c5fcdd0d88b48c98"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00038.html">concurrent_priority_queue</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html#a9b21bd56aff8c412c5fcdd0d88b48c98">operator=</a> (<a class="el" href="a00038.html">concurrent_priority_queue</a> &&src)</td></tr>
+<tr class="memdesc:a9b21bd56aff8c412c5fcdd0d88b48c98"><td class="mdescLeft"> </td><td class="mdescRight">Move assignment operator.  <a href="#a9b21bd56aff8c412c5fcdd0d88b48c98">More...</a><br/></td></tr>
+<tr class="separator:a9b21bd56aff8c412c5fcdd0d88b48c98"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac64c7b627708f0d6b2e5421fb0d49150"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac64c7b627708f0d6b2e5421fb0d49150"></a>
+template<typename InputIterator > </td></tr>
+<tr class="memitem:ac64c7b627708f0d6b2e5421fb0d49150"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00038.html#ac64c7b627708f0d6b2e5421fb0d49150">assign</a> (InputIterator begin, InputIterator end)</td></tr>
+<tr class="memdesc:ac64c7b627708f0d6b2e5421fb0d49150"><td class="mdescLeft"> </td><td class="mdescRight">Assign the queue from [begin,end) range, not thread-safe. <br/></td></tr>
+<tr class="separator:ac64c7b627708f0d6b2e5421fb0d49150"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac1b3a945aac5a17c85d56756cc6aa3d1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac1b3a945aac5a17c85d56756cc6aa3d1"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html#ac1b3a945aac5a17c85d56756cc6aa3d1">assign</a> (std::initializer_list< T > il)</td></tr>
+<tr class="memdesc:ac1b3a945aac5a17c85d56756cc6aa3d1"><td class="mdescLeft"> </td><td class="mdescRight">Assign the queue from std::initializer_list, not thread-safe. <br/></td></tr>
+<tr class="separator:ac1b3a945aac5a17c85d56756cc6aa3d1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7eaa05dcb74604e45e0e2c55e1e456e9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7eaa05dcb74604e45e0e2c55e1e456e9"></a>
+<a class="el" href="a00038.html">concurrent_priority_queue</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html#a7eaa05dcb74604e45e0e2c55e1e456e9">operator=</a> (std::initializer_list< T > il)</td></tr>
+<tr class="memdesc:a7eaa05dcb74604e45e0e2c55e1e456e9"><td class="mdescLeft"> </td><td class="mdescRight">Assign from std::initializer_list, not thread-safe. <br/></td></tr>
+<tr class="separator:a7eaa05dcb74604e45e0e2c55e1e456e9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8dec2dd0e8b22af14f1753eaef1bf5eb"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html#a8dec2dd0e8b22af14f1753eaef1bf5eb">empty</a> () const </td></tr>
+<tr class="memdesc:a8dec2dd0e8b22af14f1753eaef1bf5eb"><td class="mdescLeft"> </td><td class="mdescRight">Returns true if empty, false otherwise.  <a href="#a8dec2dd0e8b22af14f1753eaef1bf5eb">More...</a><br/></td></tr>
+<tr class="separator:a8dec2dd0e8b22af14f1753eaef1bf5eb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7d86ba200474b51ec99a6b917429c6bb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00038.html#a7d3da9b47ec58e1c09e3550f702edcfc">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html#a7d86ba200474b51ec99a6b917429c6bb">size</a> () const </td></tr>
+<tr class="memdesc:a7d86ba200474b51ec99a6b917429c6bb"><td class="mdescLeft"> </td><td class="mdescRight">Returns the current number of elements contained in the queue.  <a href="#a7d86ba200474b51ec99a6b917429c6bb">More...</a><br/></td></tr>
+<tr class="separator:a7d86ba200474b51ec99a6b917429c6bb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1bfa0e7269b3407d6bb5c706264d2406"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html#a1bfa0e7269b3407d6bb5c706264d2406">push</a> (<a class="el" href="a00038.html#a0bd617fe8e4657777e86f0ae15d8094f">const_reference</a> elem)</td></tr>
+<tr class="memdesc:a1bfa0e7269b3407d6bb5c706264d2406"><td class="mdescLeft"> </td><td class="mdescRight">Pushes elem onto the queue, increasing capacity of queue if necessary.  <a href="#a1bfa0e7269b3407d6bb5c706264d2406">More...</a><br/></td></tr>
+<tr class="separator:a1bfa0e7269b3407d6bb5c706264d2406"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a72ff26945c61b4ce3ce7ca0f9b9aaa48"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html#a72ff26945c61b4ce3ce7ca0f9b9aaa48">push</a> (<a class="el" href="a00038.html#a2c75d97ae429019363ab6fd1a872512e">value_type</a> &&elem)</td></tr>
+<tr class="memdesc:a72ff26945c61b4ce3ce7ca0f9b9aaa48"><td class="mdescLeft"> </td><td class="mdescRight">Pushes elem onto the queue, increasing capacity of queue if necessary.  <a href="#a72ff26945c61b4ce3ce7ca0f9b9aaa48">More...</a><br/></td></tr>
+<tr class="separator:a72ff26945c61b4ce3ce7ca0f9b9aaa48"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a278d208cd92e5aeccc9c7f6fc192e3ce"><td class="memTemplParams" colspan="2">template<typename... Args> </td></tr>
+<tr class="memitem:a278d208cd92e5aeccc9c7f6fc192e3ce"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00038.html#a278d208cd92e5aeccc9c7f6fc192e3ce">emplace</a> (Args &&...args)</td></tr>
+<tr class="memdesc:a278d208cd92e5aeccc9c7f6fc192e3ce"><td class="mdescLeft"> </td><td class="mdescRight">Constructs a new element using args as the arguments for its construction and pushes it onto the queue */.  <a href="#a278d208cd92e5aeccc9c7f6fc192e3ce">More...</a><br/></td></tr>
+<tr class="separator:a278d208cd92e5aeccc9c7f6fc192e3ce"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a954177b09e184cf3db47f1b180a7ef5e"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html#a954177b09e184cf3db47f1b180a7ef5e">try_pop</a> (<a class="el" href="a00038.html#ae4b7ed2ddc8ec6cc910f935c9d299c7a">reference</a> elem)</td></tr>
+<tr class="memdesc:a954177b09e184cf3db47f1b180a7ef5e"><td class="mdescLeft"> </td><td class="mdescRight">Gets a reference to and removes highest priority element.  <a href="#a954177b09e184cf3db47f1b180a7ef5e">More...</a><br/></td></tr>
+<tr class="separator:a954177b09e184cf3db47f1b180a7ef5e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2459166998a4103880d603b237c429e6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html#a2459166998a4103880d603b237c429e6">clear</a> ()</td></tr>
+<tr class="memdesc:a2459166998a4103880d603b237c429e6"><td class="mdescLeft"> </td><td class="mdescRight">Clear the queue; not thread-safe.  <a href="#a2459166998a4103880d603b237c429e6">More...</a><br/></td></tr>
+<tr class="separator:a2459166998a4103880d603b237c429e6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa6ee6d356e538b67a7cb4e242e6e36c9"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html#aa6ee6d356e538b67a7cb4e242e6e36c9">swap</a> (<a class="el" href="a00038.html">concurrent_priority_queue</a> &q)</td></tr>
+<tr class="memdesc:aa6ee6d356e538b67a7cb4e242e6e36c9"><td class="mdescLeft"> </td><td class="mdescRight">Swap this queue with another; not thread-safe.  <a href="#aa6ee6d356e538b67a7cb4e242e6e36c9">More...</a><br/></td></tr>
+<tr class="separator:aa6ee6d356e538b67a7cb4e242e6e36c9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a312e88e51246da4c516d35abbb30721a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a312e88e51246da4c516d35abbb30721a"></a>
+<a class="el" href="a00038.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html#a312e88e51246da4c516d35abbb30721a">get_allocator</a> () const </td></tr>
+<tr class="memdesc:a312e88e51246da4c516d35abbb30721a"><td class="mdescLeft"> </td><td class="mdescRight">Return allocator object. <br/></td></tr>
+<tr class="separator:a312e88e51246da4c516d35abbb30721a"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><h3>template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>><br/>
+class tbb::interface5::concurrent_priority_queue< T, Compare, A ></h3>
+
+<p>Concurrent priority queue. </p>
+</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
+<a class="anchor" id="a332d26234f9c37a6b7ba269c648815d0"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::<a class="el" href="a00038.html">concurrent_priority_queue</a> </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="a00038.html">concurrent_priority_queue</a>< T, Compare, A > & </td>
+          <td class="paramname"><em>src</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">explicit</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Copy constructor. </p>
+<p>This operation is unsafe if there are pending concurrent operations on the src queue. </p>
+
+</div>
+</div>
+<a class="anchor" id="aa52cea369b6630699ee78cc42622be9d"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::<a class="el" href="a00038.html">concurrent_priority_queue</a> </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="a00038.html">concurrent_priority_queue</a>< T, Compare, A > & </td>
+          <td class="paramname"><em>src</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="a00038.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a> & </td>
+          <td class="paramname"><em>a</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Copy constructor with specific allocator. </p>
+<p>This operation is unsafe if there are pending concurrent operations on the src queue. </p>
+
+</div>
+</div>
+<a class="anchor" id="ae9ac965bbac3933c7db89f512adfcbcb"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::<a class="el" href="a00038.html">concurrent_priority_queue</a> </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00038.html">concurrent_priority_queue</a>< T, Compare, A > && </td>
+          <td class="paramname"><em>src</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Move constructor. </p>
+<p>This operation is unsafe if there are pending concurrent operations on the src queue. </p>
+
+</div>
+</div>
+<a class="anchor" id="a14dd20a4673f77cff3eb6f269a888016"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::<a class="el" href="a00038.html">concurrent_priority_queue</a> </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00038.html">concurrent_priority_queue</a>< T, Compare, A > && </td>
+          <td class="paramname"><em>src</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="a00038.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a> & </td>
+          <td class="paramname"><em>a</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Move constructor with specific allocator. </p>
+<p>This operation is unsafe if there are pending concurrent operations on the src queue. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="a2459166998a4103880d603b237c429e6"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::clear </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Clear the queue; not thread-safe. </p>
+<p>This operation is unsafe if there are pending concurrent operations on the queue. Resets size, effectively emptying queue; does not free space. May not clear elements added in pending operations. </p>
+
+</div>
+</div>
+<a class="anchor" id="a278d208cd92e5aeccc9c7f6fc192e3ce"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
+<div class="memtemplate">
+template<typename... Args> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::emplace </td>
+          <td>(</td>
+          <td class="paramtype">Args &&... </td>
+          <td class="paramname"><em>args</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Constructs a new element using args as the arguments for its construction and pushes it onto the queue */. </p>
+<p>This operation can be safely used concurrently with other push, try_pop or emplace operations. </p>
+
+</div>
+</div>
+<a class="anchor" id="a8dec2dd0e8b22af14f1753eaef1bf5eb"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::empty </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns true if empty, false otherwise. </p>
+<p>Returned value may not reflect results of pending operations. This operation reads shared data and will trigger a race condition. </p>
+
+</div>
+</div>
+<a class="anchor" id="ac0c3f41b10f04547f3438517c40cf8a5"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00038.html">concurrent_priority_queue</a>& <a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::operator= </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="a00038.html">concurrent_priority_queue</a>< T, Compare, A > & </td>
+          <td class="paramname"><em>src</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Assignment operator. </p>
+<p>This operation is unsafe if there are pending concurrent operations on the src queue. </p>
+
+</div>
+</div>
+<a class="anchor" id="a9b21bd56aff8c412c5fcdd0d88b48c98"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00038.html">concurrent_priority_queue</a>& <a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::operator= </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00038.html">concurrent_priority_queue</a>< T, Compare, A > && </td>
+          <td class="paramname"><em>src</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Move assignment operator. </p>
+<p>This operation is unsafe if there are pending concurrent operations on the src queue. </p>
+
+</div>
+</div>
+<a class="anchor" id="a1bfa0e7269b3407d6bb5c706264d2406"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::push </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00038.html#a0bd617fe8e4657777e86f0ae15d8094f">const_reference</a> </td>
+          <td class="paramname"><em>elem</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Pushes elem onto the queue, increasing capacity of queue if necessary. </p>
+<p>This operation can be safely used concurrently with other push, try_pop or emplace operations. </p>
+
+</div>
+</div>
+<a class="anchor" id="a72ff26945c61b4ce3ce7ca0f9b9aaa48"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::push </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00038.html#a2c75d97ae429019363ab6fd1a872512e">value_type</a> && </td>
+          <td class="paramname"><em>elem</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
 </table>
+</div><div class="memdoc">
+
+<p>Pushes elem onto the queue, increasing capacity of queue if necessary. </p>
+<p>This operation can be safely used concurrently with other push, try_pop or emplace operations. </p>
+
+</div>
+</div>
+<a class="anchor" id="a7d86ba200474b51ec99a6b917429c6bb"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00038.html#a7d3da9b47ec58e1c09e3550f702edcfc">size_type</a> <a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::size </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the current number of elements contained in the queue. </p>
+<p>Returned value may not reflect results of pending operations. This operation reads shared data and will trigger a race condition. </p>
+
+</div>
+</div>
+<a class="anchor" id="aa6ee6d356e538b67a7cb4e242e6e36c9"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::swap </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00038.html">concurrent_priority_queue</a>< T, Compare, A > & </td>
+          <td class="paramname"><em>q</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Swap this queue with another; not thread-safe. </p>
+<p>This operation is unsafe if there are pending concurrent operations on the queue. </p>
+
+</div>
+</div>
+<a class="anchor" id="a954177b09e184cf3db47f1b180a7ef5e"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::try_pop </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00038.html#ae4b7ed2ddc8ec6cc910f935c9d299c7a">reference</a> </td>
+          <td class="paramname"><em>elem</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Gets a reference to and removes highest priority element. </p>
+<p>If a highest priority element was found, sets elem and returns true, otherwise returns false. This operation can be safely used concurrently with other push, try_pop or emplace operations. </p>
+
+</div>
+</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<li>concurrent_priority_queue.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00038.png b/doc/html/a00038.png
deleted file mode 100644
index 72fce7d..0000000
Binary files a/doc/html/a00038.png and /dev/null differ
diff --git a/doc/html/a00039.html b/doc/html/a00039.html
index 8e58b86..e721cc8 100644
--- a/doc/html/a00039.html
+++ b/doc/html/a00039.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> > Class Template Reference</title>
+<title>tbb::strict_ppl::concurrent_queue< T, A > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,107 +33,189 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00039.html">composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>strict_ppl</b></li><li class="navelem"><a class="el" href="a00039.html">concurrent_queue</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-methods">Protected Member Functions</a> |
-<a href="a00363.html">List of all members</a>  </div>
+<a href="#friends">Friends</a> |
+<a href="a00407.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> > Class Template Reference</div>  </div>
+<div class="title">tbb::strict_ppl::concurrent_queue< T, A > Class Template Reference<div class="ingroups"><a class="el" href="a00253.html">Containers</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
+
+<p>A high-performance thread-safe non-blocking concurrent queue.  
+ <a href="a00039.html#details">More...</a></p>
+
+<p><code>#include <concurrent_queue.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> >:</div>
+Inheritance diagram for tbb::strict_ppl::concurrent_queue< T, A >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00039.png" usemap="#tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> >_map" alt=""/>
-  <map id="tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> >_map" name="tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> >_map">
-<area href="a00072.html" title="The base of all graph nodes. " alt="tbb::flow::interface7::graph_node" shape="rect" coords="0,56,515,80"/>
+  <img src="a00039.png" usemap="#tbb::strict_ppl::concurrent_queue< T, A >_map" alt=""/>
+  <map id="tbb::strict_ppl::concurrent_queue< T, A >_map" name="tbb::strict_ppl::concurrent_queue< T, A >_map">
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:a58598c68983fb401096b90b838c43f5e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a58598c68983fb401096b90b838c43f5e"></a>
-typedef tbb::flow::tuple<br class="typebreak"/>
-< <a class="el" href="a00124.html">receiver</a>< InputTypes > &... > </td><td class="memItemRight" valign="bottom"><b>input_ports_type</b></td></tr>
-<tr class="separator:a58598c68983fb401096b90b838c43f5e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeeee93a7ac2eecc80bbf3e857e900538"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeeee93a7ac2eecc80bbf3e857e900538"></a>
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00039.html#aeeee93a7ac2eecc80bbf3e857e900538">value_type</a></td></tr>
+<tr class="memdesc:aeeee93a7ac2eecc80bbf3e857e900538"><td class="mdescLeft"> </td><td class="mdescRight">Element type in the queue. <br/></td></tr>
+<tr class="separator:aeeee93a7ac2eecc80bbf3e857e900538"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab26ddf11b15d61ac87e6c1ae67af92a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab26ddf11b15d61ac87e6c1ae67af92a2"></a>
+typedef T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00039.html#ab26ddf11b15d61ac87e6c1ae67af92a2">reference</a></td></tr>
+<tr class="memdesc:ab26ddf11b15d61ac87e6c1ae67af92a2"><td class="mdescLeft"> </td><td class="mdescRight">Reference type. <br/></td></tr>
+<tr class="separator:ab26ddf11b15d61ac87e6c1ae67af92a2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a478c2b7f763b2e821e01cc14e13baf4c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a478c2b7f763b2e821e01cc14e13baf4c"></a>
+typedef const T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00039.html#a478c2b7f763b2e821e01cc14e13baf4c">const_reference</a></td></tr>
+<tr class="memdesc:a478c2b7f763b2e821e01cc14e13baf4c"><td class="mdescLeft"> </td><td class="mdescRight">Const reference type. <br/></td></tr>
+<tr class="separator:a478c2b7f763b2e821e01cc14e13baf4c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9f883e49afea16293ba92da779981bb8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9f883e49afea16293ba92da779981bb8"></a>
+typedef size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00039.html#a9f883e49afea16293ba92da779981bb8">size_type</a></td></tr>
+<tr class="memdesc:a9f883e49afea16293ba92da779981bb8"><td class="mdescLeft"> </td><td class="mdescRight">Integral type for representing size of the queue. <br/></td></tr>
+<tr class="separator:a9f883e49afea16293ba92da779981bb8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a63b42d83a9ed13fc6741e0b4388b0e96"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63b42d83a9ed13fc6741e0b4388b0e96"></a>
+typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00039.html#a63b42d83a9ed13fc6741e0b4388b0e96">difference_type</a></td></tr>
+<tr class="memdesc:a63b42d83a9ed13fc6741e0b4388b0e96"><td class="mdescLeft"> </td><td class="mdescRight">Difference type for iterator. <br/></td></tr>
+<tr class="separator:a63b42d83a9ed13fc6741e0b4388b0e96"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acbdd1a5bd034358fb0774b322a66b1ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acbdd1a5bd034358fb0774b322a66b1ed"></a>
+typedef A </td><td class="memItemRight" valign="bottom"><a class="el" href="a00039.html#acbdd1a5bd034358fb0774b322a66b1ed">allocator_type</a></td></tr>
+<tr class="memdesc:acbdd1a5bd034358fb0774b322a66b1ed"><td class="mdescLeft"> </td><td class="mdescRight">Allocator type. <br/></td></tr>
+<tr class="separator:acbdd1a5bd034358fb0774b322a66b1ed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab1361aa7fd454fe593609be740ab8a4c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab1361aa7fd454fe593609be740ab8a4c"></a>
+typedef <br class="typebreak"/>
+internal::concurrent_queue_iterator<br class="typebreak"/>
+< <a class="el" href="a00039.html">concurrent_queue</a>, T > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+<tr class="separator:ab1361aa7fd454fe593609be740ab8a4c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a674e375edf0a3463ae1cec5d6158593d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a674e375edf0a3463ae1cec5d6158593d"></a>
+typedef <br class="typebreak"/>
+internal::concurrent_queue_iterator<br class="typebreak"/>
+< <a class="el" href="a00039.html">concurrent_queue</a>, const T > </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
+<tr class="separator:a674e375edf0a3463ae1cec5d6158593d"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a265966ab2224ed2357c4663a014f9416"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a265966ab2224ed2357c4663a014f9416"></a>
- </td><td class="memItemRight" valign="bottom"><b>composite_node</b> (<a class="el" href="a00070.html">graph</a> &g, const char *my_type_name=" ")</td></tr>
-<tr class="separator:a265966ab2224ed2357c4663a014f9416"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af4bf4fd24864c9c9bd7b95b0b723d5cf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af4bf4fd24864c9c9bd7b95b0b723d5cf"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_external_ports</b> (input_ports_type &&input_ports_tuple)</td></tr>
-<tr class="separator:af4bf4fd24864c9c9bd7b95b0b723d5cf"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab53aaaefe7fe523ec9a6c8483543182b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab53aaaefe7fe523ec9a6c8483543182b"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_external_ports</b> (const input_ports_type &input_ports_tuple)</td></tr>
-<tr class="separator:ab53aaaefe7fe523ec9a6c8483543182b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0c0f814d31ed86ccc8b174b19b309cae"><td class="memTemplParams" colspan="2"><a class="anchor" id="a0c0f814d31ed86ccc8b174b19b309cae"></a>
-template<typename... NodeTypes> </td></tr>
-<tr class="memitem:a0c0f814d31ed86ccc8b174b19b309cae"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>add_visible_nodes</b> (const NodeTypes &...n)</td></tr>
-<tr class="separator:a0c0f814d31ed86ccc8b174b19b309cae"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a283b78f1933bfbab0654e362c674a5d8"><td class="memTemplParams" colspan="2"><a class="anchor" id="a283b78f1933bfbab0654e362c674a5d8"></a>
-template<typename... NodeTypes> </td></tr>
-<tr class="memitem:a283b78f1933bfbab0654e362c674a5d8"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>add_nodes</b> (const NodeTypes &...n)</td></tr>
-<tr class="separator:a283b78f1933bfbab0654e362c674a5d8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a735ca183055d140820b34b11385e3e43"><td class="memTemplParams" colspan="2"><a class="anchor" id="a735ca183055d140820b34b11385e3e43"></a>
-template<typename... Nodes> </td></tr>
-<tr class="memitem:a735ca183055d140820b34b11385e3e43"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>add_nodes</b> (Nodes &...)</td></tr>
-<tr class="separator:a735ca183055d140820b34b11385e3e43"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a134aa2413fc951701e9c319f64702863"><td class="memTemplParams" colspan="2"><a class="anchor" id="a134aa2413fc951701e9c319f64702863"></a>
-template<typename... Nodes> </td></tr>
-<tr class="memitem:a134aa2413fc951701e9c319f64702863"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>add_visible_nodes</b> (Nodes &...)</td></tr>
-<tr class="separator:a134aa2413fc951701e9c319f64702863"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0bd7484365a0623f41b266e15a6d9c0a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0bd7484365a0623f41b266e15a6d9c0a"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:a0bd7484365a0623f41b266e15a6d9c0a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7418f40b315f1218767c26a84af8c028"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7418f40b315f1218767c26a84af8c028"></a>
-input_ports_type </td><td class="memItemRight" valign="bottom"><b>input_ports</b> ()</td></tr>
-<tr class="separator:a7418f40b315f1218767c26a84af8c028"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acebd1735e9564afee4aee7fc39f4a3a1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acebd1735e9564afee4aee7fc39f4a3a1"></a>
-void </td><td class="memItemRight" valign="bottom"><b>extract</b> ()</td></tr>
-<tr class="separator:acebd1735e9564afee4aee7fc39f4a3a1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00072')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4badd313105e30f539882276353dcb8e"></a>
- </td><td class="memItemRight" valign="bottom"><b>graph_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a49b2e16902577cd3174355be0fa684e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a49b2e16902577cd3174355be0fa684e5"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00039.html#a49b2e16902577cd3174355be0fa684e5">concurrent_queue</a> (const <a class="el" href="a00039.html#acbdd1a5bd034358fb0774b322a66b1ed">allocator_type</a> &a=<a class="el" href="a00039.html#acbdd1a5bd034358fb0774b322a66b1ed">allocator_type</a>())</td></tr>
+<tr class="memdesc:a49b2e16902577cd3174355be0fa684e5"><td class="mdescLeft"> </td><td class="mdescRight">Construct empty queue. <br/></td></tr>
+<tr class="separator:a49b2e16902577cd3174355be0fa684e5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a43ac953152e60815c09fe4a4d4a623a9"><td class="memTemplParams" colspan="2"><a class="anchor" id="a43ac953152e60815c09fe4a4d4a623a9"></a>
+template<typename InputIterator > </td></tr>
+<tr class="memitem:a43ac953152e60815c09fe4a4d4a623a9"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00039.html#a43ac953152e60815c09fe4a4d4a623a9">concurrent_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00039.html#acbdd1a5bd034358fb0774b322a66b1ed">allocator_type</a> &a=<a class="el" href="a00039.html#acbdd1a5bd034358fb0774b322a66b1ed">allocator_type</a>())</td></tr>
+<tr class="memdesc:a43ac953152e60815c09fe4a4d4a623a9"><td class="mdescLeft"> </td><td class="mdescRight">[begin,end) constructor <br/></td></tr>
+<tr class="separator:a43ac953152e60815c09fe4a4d4a623a9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae918807d098d5d5b41cc6d606fa2e7a1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae918807d098d5d5b41cc6d606fa2e7a1"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00039.html#ae918807d098d5d5b41cc6d606fa2e7a1">concurrent_queue</a> (const <a class="el" href="a00039.html">concurrent_queue</a> &src, const <a class="el" href="a00039.html#acbdd1a5bd034358fb0774b322a66b1ed">allocator_type</a> &a=<a class="el" href="a00039.html#acbdd1a5bd034358fb0774b322a66b1ed">allocator_type</a>())</td></tr>
+<tr class="memdesc:ae918807d098d5d5b41cc6d606fa2e7a1"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br/></td></tr>
+<tr class="separator:ae918807d098d5d5b41cc6d606fa2e7a1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acc04574f4d7d41fd5cad779508394740"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acc04574f4d7d41fd5cad779508394740"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00039.html#acc04574f4d7d41fd5cad779508394740">concurrent_queue</a> (<a class="el" href="a00039.html">concurrent_queue</a> &&src)</td></tr>
+<tr class="memdesc:acc04574f4d7d41fd5cad779508394740"><td class="mdescLeft"> </td><td class="mdescRight">Move constructors. <br/></td></tr>
+<tr class="separator:acc04574f4d7d41fd5cad779508394740"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a22f35cb396178d494a3756d5700e2865"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a22f35cb396178d494a3756d5700e2865"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_queue</b> (<a class="el" href="a00039.html">concurrent_queue</a> &&src, const <a class="el" href="a00039.html#acbdd1a5bd034358fb0774b322a66b1ed">allocator_type</a> &a)</td></tr>
+<tr class="separator:a22f35cb396178d494a3756d5700e2865"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa0056b242f280f5e25332ce998f9f670"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0056b242f280f5e25332ce998f9f670"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00039.html#aa0056b242f280f5e25332ce998f9f670">~concurrent_queue</a> ()</td></tr>
+<tr class="memdesc:aa0056b242f280f5e25332ce998f9f670"><td class="mdescLeft"> </td><td class="mdescRight">Destroy queue. <br/></td></tr>
+<tr class="separator:aa0056b242f280f5e25332ce998f9f670"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9330ca6590980d80ef7b1ea3613a699a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9330ca6590980d80ef7b1ea3613a699a"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00039.html#a9330ca6590980d80ef7b1ea3613a699a">push</a> (const T &source)</td></tr>
+<tr class="memdesc:a9330ca6590980d80ef7b1ea3613a699a"><td class="mdescLeft"> </td><td class="mdescRight">Enqueue an item at tail of queue. <br/></td></tr>
+<tr class="separator:a9330ca6590980d80ef7b1ea3613a699a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a40f743f7eb92bb709cb7feb86d340885"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a40f743f7eb92bb709cb7feb86d340885"></a>
+void </td><td class="memItemRight" valign="bottom"><b>push</b> (T &&source)</td></tr>
+<tr class="separator:a40f743f7eb92bb709cb7feb86d340885"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4647d9bf5fd03b0850ada381916e9728"><td class="memTemplParams" colspan="2"><a class="anchor" id="a4647d9bf5fd03b0850ada381916e9728"></a>
+template<typename... Arguments> </td></tr>
+<tr class="memitem:a4647d9bf5fd03b0850ada381916e9728"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>emplace</b> (Arguments &&...args)</td></tr>
+<tr class="separator:a4647d9bf5fd03b0850ada381916e9728"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aabb1acef18196fa11ed7db8e046c3943"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00039.html#aabb1acef18196fa11ed7db8e046c3943">try_pop</a> (T &result)</td></tr>
+<tr class="memdesc:aabb1acef18196fa11ed7db8e046c3943"><td class="mdescLeft"> </td><td class="mdescRight">Attempt to dequeue an item from head of queue.  <a href="#aabb1acef18196fa11ed7db8e046c3943">More...</a><br/></td></tr>
+<tr class="separator:aabb1acef18196fa11ed7db8e046c3943"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aad4b253ba595637b0b146eb6565556f2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad4b253ba595637b0b146eb6565556f2"></a>
+<a class="el" href="a00039.html#a9f883e49afea16293ba92da779981bb8">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00039.html#aad4b253ba595637b0b146eb6565556f2">unsafe_size</a> () const </td></tr>
+<tr class="memdesc:aad4b253ba595637b0b146eb6565556f2"><td class="mdescLeft"> </td><td class="mdescRight">Return the number of items in the queue; thread unsafe. <br/></td></tr>
+<tr class="separator:aad4b253ba595637b0b146eb6565556f2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeda3156929d0c250faed7b807ca6ab0e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeda3156929d0c250faed7b807ca6ab0e"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00039.html#aeda3156929d0c250faed7b807ca6ab0e">empty</a> () const </td></tr>
+<tr class="memdesc:aeda3156929d0c250faed7b807ca6ab0e"><td class="mdescLeft"> </td><td class="mdescRight">Equivalent to size()==0. <br/></td></tr>
+<tr class="separator:aeda3156929d0c250faed7b807ca6ab0e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad3384818fb6350a494d5ec62445e59ee"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3384818fb6350a494d5ec62445e59ee"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00039.html#ad3384818fb6350a494d5ec62445e59ee">clear</a> ()</td></tr>
+<tr class="memdesc:ad3384818fb6350a494d5ec62445e59ee"><td class="mdescLeft"> </td><td class="mdescRight">Clear the queue. not thread-safe. <br/></td></tr>
+<tr class="separator:ad3384818fb6350a494d5ec62445e59ee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7f2b39f350281590b86db906eca6c480"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f2b39f350281590b86db906eca6c480"></a>
+<a class="el" href="a00039.html#acbdd1a5bd034358fb0774b322a66b1ed">allocator_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00039.html#a7f2b39f350281590b86db906eca6c480">get_allocator</a> () const </td></tr>
+<tr class="memdesc:a7f2b39f350281590b86db906eca6c480"><td class="mdescLeft"> </td><td class="mdescRight">Return allocator object. <br/></td></tr>
+<tr class="separator:a7f2b39f350281590b86db906eca6c480"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6658faeae3c10135a553fedadddde239"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6658faeae3c10135a553fedadddde239"></a>
+iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_begin</b> ()</td></tr>
+<tr class="separator:a6658faeae3c10135a553fedadddde239"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa7593de5e76006ed3adef4d060f0009c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa7593de5e76006ed3adef4d060f0009c"></a>
+iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_end</b> ()</td></tr>
+<tr class="separator:aa7593de5e76006ed3adef4d060f0009c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0f84b37020f4267f17c7e91acfc0c446"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0f84b37020f4267f17c7e91acfc0c446"></a>
+const_iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_begin</b> () const </td></tr>
+<tr class="separator:a0f84b37020f4267f17c7e91acfc0c446"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a118a79d7e20cdbd807fa7fccc2a5b848"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a118a79d7e20cdbd807fa7fccc2a5b848"></a>
+const_iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_end</b> () const </td></tr>
+<tr class="separator:a118a79d7e20cdbd807fa7fccc2a5b848"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:a6ea382fd2852242253f6a67ccaff475c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6ea382fd2852242253f6a67ccaff475c"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags))</td></tr>
-<tr class="separator:a6ea382fd2852242253f6a67ccaff475c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00072')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac25a4633873c052047b1dd568824d055"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0</td></tr>
-<tr class="separator:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pro_attribs_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00072')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1caee1c5677047b05d18b1662ca6fdf8"></a>
-<a class="el" href="a00070.html">graph</a> & </td><td class="memItemRight" valign="bottom"><b>my_graph</b></td></tr>
-<tr class="separator:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af48cd0cd4f6e44efc3b353adb55f86a8"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>next</b></td></tr>
-<tr class="separator:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6917bffc3cb150319679bf2395e68caa"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>prev</b></td></tr>
-<tr class="separator:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a1f5eec0de2e660ea5372d19393f0920b"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1f5eec0de2e660ea5372d19393f0920b"></a>
+template<typename Container , typename Value > </td></tr>
+<tr class="memitem:a1f5eec0de2e660ea5372d19393f0920b"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::concurrent_queue_iterator</b></td></tr>
+<tr class="separator:a1f5eec0de2e660ea5372d19393f0920b"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><h3>template<typename T, typename A = cache_aligned_allocator<T>><br/>
+class tbb::strict_ppl::concurrent_queue< T, A ></h3>
+
+<p>A high-performance thread-safe non-blocking concurrent queue. </p>
+<p>Multiple threads may each push and pop concurrently. Assignment construction is not allowed. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="aabb1acef18196fa11ed7db8e046c3943"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T , typename A  = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue</a>< T, A >::try_pop </td>
+          <td>(</td>
+          <td class="paramtype">T & </td>
+          <td class="paramname"><em>result</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
 </table>
+</div><div class="memdoc">
+
+<p>Attempt to dequeue an item from head of queue. </p>
+<p>Does not wait for item to become available. Returns true if successful; false otherwise. </p>
+
+</div>
+</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<li>concurrent_queue.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00039.png b/doc/html/a00039.png
index 8b3ba80..c7a9a4d 100644
Binary files a/doc/html/a00039.png and b/doc/html/a00039.png differ
diff --git a/doc/html/a00040.html b/doc/html/a00040.html
index d1c3e68..27e2321 100644
--- a/doc/html/a00040.html
+++ b/doc/html/a00040.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> > Class Template Reference</title>
+<title>tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,107 +33,132 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00040.html">composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00040.html">concurrent_unordered_map</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-methods">Protected Member Functions</a> |
 <a href="a00364.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> > Class Template Reference</div>  </div>
+<div class="title">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 <div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> >:</div>
+Inheritance diagram for tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00040.png" usemap="#tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> >_map" alt=""/>
-  <map id="tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> >_map" name="tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> >_map">
-<area href="a00072.html" title="The base of all graph nodes. " alt="tbb::flow::interface7::graph_node" shape="rect" coords="0,56,525,80"/>
+  <img src="a00040.png" usemap="#tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >_map" alt=""/>
+  <map id="tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >_map" name="tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >_map">
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:ad8d345948eace7fdba49849d155a9854"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8d345948eace7fdba49849d155a9854"></a>
-typedef tbb::flow::tuple<br class="typebreak"/>
-< <a class="el" href="a00142.html">sender</a>< OutputTypes > &... > </td><td class="memItemRight" valign="bottom"><b>output_ports_type</b></td></tr>
-<tr class="separator:ad8d345948eace7fdba49849d155a9854"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a35d2ace709769b7059e8f8b2a144f8b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a35d2ace709769b7059e8f8b2a144f8b9"></a>
+typedef Key </td><td class="memItemRight" valign="bottom"><b>key_type</b></td></tr>
+<tr class="separator:a35d2ace709769b7059e8f8b2a144f8b9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9260034417dde6b3810347c5e347a9f8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9260034417dde6b3810347c5e347a9f8"></a>
+typedef base_type::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+<tr class="separator:a9260034417dde6b3810347c5e347a9f8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8ece8ff3de51bc415d8fc1338f793cbf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8ece8ff3de51bc415d8fc1338f793cbf"></a>
+typedef T </td><td class="memItemRight" valign="bottom"><b>mapped_type</b></td></tr>
+<tr class="separator:a8ece8ff3de51bc415d8fc1338f793cbf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afeef87b046af352e20cd92e56c0fcf34"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afeef87b046af352e20cd92e56c0fcf34"></a>
+typedef Hasher </td><td class="memItemRight" valign="bottom"><b>hasher</b></td></tr>
+<tr class="separator:afeef87b046af352e20cd92e56c0fcf34"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a21f5f2fbf3b1f721051c6b4c5fa2a735"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a21f5f2fbf3b1f721051c6b4c5fa2a735"></a>
+typedef Key_equality </td><td class="memItemRight" valign="bottom"><b>key_equal</b></td></tr>
+<tr class="separator:a21f5f2fbf3b1f721051c6b4c5fa2a735"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa15c94df26d89ef38daa7516df5e0729"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa15c94df26d89ef38daa7516df5e0729"></a>
+typedef hash_compare </td><td class="memItemRight" valign="bottom"><b>key_compare</b></td></tr>
+<tr class="separator:aa15c94df26d89ef38daa7516df5e0729"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1acd4ab50584a9dc55712e0e113583e2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1acd4ab50584a9dc55712e0e113583e2"></a>
+typedef base_type::allocator_type </td><td class="memItemRight" valign="bottom"><b>allocator_type</b></td></tr>
+<tr class="separator:a1acd4ab50584a9dc55712e0e113583e2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7e29fb2f75cdec0746afdbed0b9c5451"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7e29fb2f75cdec0746afdbed0b9c5451"></a>
+typedef base_type::pointer </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+<tr class="separator:a7e29fb2f75cdec0746afdbed0b9c5451"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab5d26f7002e7810e4c02890a1d7bdc41"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5d26f7002e7810e4c02890a1d7bdc41"></a>
+typedef base_type::const_pointer </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+<tr class="separator:ab5d26f7002e7810e4c02890a1d7bdc41"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a01e118e1e0bfe57083d8f76f4f848d2b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a01e118e1e0bfe57083d8f76f4f848d2b"></a>
+typedef base_type::reference </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+<tr class="separator:a01e118e1e0bfe57083d8f76f4f848d2b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad1072935f6765abe3ec1b04f24f80deb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad1072935f6765abe3ec1b04f24f80deb"></a>
+typedef base_type::const_reference </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
+<tr class="separator:ad1072935f6765abe3ec1b04f24f80deb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae31360122b604d6735b12fc027f10924"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae31360122b604d6735b12fc027f10924"></a>
+typedef base_type::size_type </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
+<tr class="separator:ae31360122b604d6735b12fc027f10924"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0f903f0ca898b0aa80e3a6b921b8f21a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0f903f0ca898b0aa80e3a6b921b8f21a"></a>
+typedef base_type::difference_type </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
+<tr class="separator:a0f903f0ca898b0aa80e3a6b921b8f21a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a267aff808d10aa0c437fd9261286467e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a267aff808d10aa0c437fd9261286467e"></a>
+typedef base_type::iterator </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+<tr class="separator:a267aff808d10aa0c437fd9261286467e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5c2d1a61d1e6ed09fb3df14270d61a01"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5c2d1a61d1e6ed09fb3df14270d61a01"></a>
+typedef base_type::const_iterator </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
+<tr class="separator:a5c2d1a61d1e6ed09fb3df14270d61a01"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a744c0cf93efb5a134d6ddfb3a5fb75d3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a744c0cf93efb5a134d6ddfb3a5fb75d3"></a>
+typedef base_type::iterator </td><td class="memItemRight" valign="bottom"><b>local_iterator</b></td></tr>
+<tr class="separator:a744c0cf93efb5a134d6ddfb3a5fb75d3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5df36261f0e5a1aea64235702fdacb62"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5df36261f0e5a1aea64235702fdacb62"></a>
+typedef base_type::const_iterator </td><td class="memItemRight" valign="bottom"><b>const_local_iterator</b></td></tr>
+<tr class="separator:a5df36261f0e5a1aea64235702fdacb62"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:ae46b2fdef6e72821b8d2ef846206e566"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae46b2fdef6e72821b8d2ef846206e566"></a>
- </td><td class="memItemRight" valign="bottom"><b>composite_node</b> (<a class="el" href="a00070.html">graph</a> &g, const char *my_type_name=" ")</td></tr>
-<tr class="separator:ae46b2fdef6e72821b8d2ef846206e566"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aba80d7313c29da094360a464e2283367"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba80d7313c29da094360a464e2283367"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_external_ports</b> (output_ports_type &&output_ports_tuple)</td></tr>
-<tr class="separator:aba80d7313c29da094360a464e2283367"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af9b49bd9e95cdcb692b6d4ffa77ca93c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af9b49bd9e95cdcb692b6d4ffa77ca93c"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_external_ports</b> (const output_ports_type &output_ports_tuple)</td></tr>
-<tr class="separator:af9b49bd9e95cdcb692b6d4ffa77ca93c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad5280d744d01516ca569e61f5024112d"><td class="memTemplParams" colspan="2"><a class="anchor" id="ad5280d744d01516ca569e61f5024112d"></a>
-template<typename... NodeTypes> </td></tr>
-<tr class="memitem:ad5280d744d01516ca569e61f5024112d"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>add_visible_nodes</b> (const NodeTypes &...n)</td></tr>
-<tr class="separator:ad5280d744d01516ca569e61f5024112d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aac2534ebce62dbe1f1d8e8f433b2d82a"><td class="memTemplParams" colspan="2"><a class="anchor" id="aac2534ebce62dbe1f1d8e8f433b2d82a"></a>
-template<typename... NodeTypes> </td></tr>
-<tr class="memitem:aac2534ebce62dbe1f1d8e8f433b2d82a"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>add_nodes</b> (const NodeTypes &...n)</td></tr>
-<tr class="separator:aac2534ebce62dbe1f1d8e8f433b2d82a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2fa82a3f1efa005e794f867f66b5fe1a"><td class="memTemplParams" colspan="2"><a class="anchor" id="a2fa82a3f1efa005e794f867f66b5fe1a"></a>
-template<typename... Nodes> </td></tr>
-<tr class="memitem:a2fa82a3f1efa005e794f867f66b5fe1a"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>add_nodes</b> (Nodes &...)</td></tr>
-<tr class="separator:a2fa82a3f1efa005e794f867f66b5fe1a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a520381361b29bb2e97c18b87c7354169"><td class="memTemplParams" colspan="2"><a class="anchor" id="a520381361b29bb2e97c18b87c7354169"></a>
-template<typename... Nodes> </td></tr>
-<tr class="memitem:a520381361b29bb2e97c18b87c7354169"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>add_visible_nodes</b> (Nodes &...)</td></tr>
-<tr class="separator:a520381361b29bb2e97c18b87c7354169"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1338b299a1aef053174714b5387b5a5c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1338b299a1aef053174714b5387b5a5c"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:a1338b299a1aef053174714b5387b5a5c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac1315e2c72b5feb2c1c229346bad661d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac1315e2c72b5feb2c1c229346bad661d"></a>
-output_ports_type </td><td class="memItemRight" valign="bottom"><b>output_ports</b> ()</td></tr>
-<tr class="separator:ac1315e2c72b5feb2c1c229346bad661d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a86eca1388a41ce03b3b880668cc6d23c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a86eca1388a41ce03b3b880668cc6d23c"></a>
-void </td><td class="memItemRight" valign="bottom"><b>extract</b> ()</td></tr>
-<tr class="separator:a86eca1388a41ce03b3b880668cc6d23c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00072')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4badd313105e30f539882276353dcb8e"></a>
- </td><td class="memItemRight" valign="bottom"><b>graph_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:ad15e5dd2e145aaad2f0f43ad4bd9ba2e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad15e5dd2e145aaad2f0f43ad4bd9ba2e"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags))</td></tr>
-<tr class="separator:ad15e5dd2e145aaad2f0f43ad4bd9ba2e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00072')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac25a4633873c052047b1dd568824d055"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0</td></tr>
-<tr class="separator:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pro_attribs_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00072')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1caee1c5677047b05d18b1662ca6fdf8"></a>
-<a class="el" href="a00070.html">graph</a> & </td><td class="memItemRight" valign="bottom"><b>my_graph</b></td></tr>
-<tr class="separator:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af48cd0cd4f6e44efc3b353adb55f86a8"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>next</b></td></tr>
-<tr class="separator:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6917bffc3cb150319679bf2395e68caa"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>prev</b></td></tr>
-<tr class="separator:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeeabd4bffe47ad7a300ae896c06dc46c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeeabd4bffe47ad7a300ae896c06dc46c"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_map</b> (size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())</td></tr>
+<tr class="separator:aeeabd4bffe47ad7a300ae896c06dc46c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad0e15127e237c29c923db83fb509f624"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad0e15127e237c29c923db83fb509f624"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_map</b> (const Allocator &a)</td></tr>
+<tr class="separator:ad0e15127e237c29c923db83fb509f624"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab494f2ac22495884f64985fba6ade501"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab494f2ac22495884f64985fba6ade501"></a>
+template<typename Iterator > </td></tr>
+<tr class="memitem:ab494f2ac22495884f64985fba6ade501"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>concurrent_unordered_map</b> (Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())</td></tr>
+<tr class="separator:ab494f2ac22495884f64985fba6ade501"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a788a7225915574c1a349abc0f1f653c7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a788a7225915574c1a349abc0f1f653c7"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html#a788a7225915574c1a349abc0f1f653c7">concurrent_unordered_map</a> (std::initializer_list< value_type > il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())</td></tr>
+<tr class="memdesc:a788a7225915574c1a349abc0f1f653c7"><td class="mdescLeft"> </td><td class="mdescRight">Constructor from initializer_list. <br/></td></tr>
+<tr class="separator:a788a7225915574c1a349abc0f1f653c7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1593b0f93256736d163cfbcc23c7de26"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1593b0f93256736d163cfbcc23c7de26"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_map</b> (const <a class="el" href="a00040.html">concurrent_unordered_map</a> &table)</td></tr>
+<tr class="separator:a1593b0f93256736d163cfbcc23c7de26"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a47b4eec40fac7fb8b6a8023758c1a34c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a47b4eec40fac7fb8b6a8023758c1a34c"></a>
+<a class="el" href="a00040.html">concurrent_unordered_map</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00040.html">concurrent_unordered_map</a> &table)</td></tr>
+<tr class="separator:a47b4eec40fac7fb8b6a8023758c1a34c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a53dcf022c4bd65f438b377a23a9c1bae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a53dcf022c4bd65f438b377a23a9c1bae"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_map</b> (<a class="el" href="a00040.html">concurrent_unordered_map</a> &&table)</td></tr>
+<tr class="separator:a53dcf022c4bd65f438b377a23a9c1bae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a73f8e707280b4e55a9ead393fbb012c8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a73f8e707280b4e55a9ead393fbb012c8"></a>
+<a class="el" href="a00040.html">concurrent_unordered_map</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="a00040.html">concurrent_unordered_map</a> &&table)</td></tr>
+<tr class="separator:a73f8e707280b4e55a9ead393fbb012c8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab22288d418827a312aee4191bb6a7f11"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab22288d418827a312aee4191bb6a7f11"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_map</b> (<a class="el" href="a00040.html">concurrent_unordered_map</a> &&table, const Allocator &a)</td></tr>
+<tr class="separator:ab22288d418827a312aee4191bb6a7f11"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2e1cce13f9fa458a616b424c84790c25"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2e1cce13f9fa458a616b424c84790c25"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_map</b> (const <a class="el" href="a00040.html">concurrent_unordered_map</a> &table, const Allocator &a)</td></tr>
+<tr class="separator:a2e1cce13f9fa458a616b424c84790c25"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae49177d89c80434a30aa346201abb986"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae49177d89c80434a30aa346201abb986"></a>
+mapped_type & </td><td class="memItemRight" valign="bottom"><b>operator[]</b> (const key_type &key)</td></tr>
+<tr class="separator:ae49177d89c80434a30aa346201abb986"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af2e1ccbd986686ef2e93c880a965e861"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af2e1ccbd986686ef2e93c880a965e861"></a>
+mapped_type & </td><td class="memItemRight" valign="bottom"><b>at</b> (const key_type &key)</td></tr>
+<tr class="separator:af2e1ccbd986686ef2e93c880a965e861"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a54173c11cd3bc91b491b3f83375868e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a54173c11cd3bc91b491b3f83375868e4"></a>
+const mapped_type & </td><td class="memItemRight" valign="bottom"><b>at</b> (const key_type &key) const </td></tr>
+<tr class="separator:a54173c11cd3bc91b491b3f83375868e4"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<li>concurrent_unordered_map.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00040.png b/doc/html/a00040.png
index 364d38a..0e3c404 100644
Binary files a/doc/html/a00040.png and b/doc/html/a00040.png differ
diff --git a/doc/html/a00041.html b/doc/html/a00041.html
index 25e9a39..b2b4167 100644
--- a/doc/html/a00041.html
+++ b/doc/html/a00041.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface6::internal::concrete_filter< T, U, Body > Class Template Reference</title>
+<title>tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,21 +33,66 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00041.html">concrete_filter</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00041.html">concurrent_unordered_map_traits</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
+  <div class="summary">
+<a href="#pro-types">Protected Types</a> |
+<a href="#pro-methods">Protected Member Functions</a> |
+<a href="#pro-static-methods">Static Protected Member Functions</a> |
+<a href="#pro-attribs">Protected Attributes</a> |
+<a href="a00363.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface6::internal::concrete_filter< T, U, Body > Class Template Reference</div>  </div>
+<div class="title">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-types"></a>
+Protected Types</h2></td></tr>
+<tr class="memitem:a3a4d3aae580451e86649ce3a3ae38894"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom">{ <b>allow_multimapping</b> = Allow_multimapping
+ }</td></tr>
+<tr class="separator:a3a4d3aae580451e86649ce3a3ae38894"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0c77b12f17473e24cda4b60b38e847fd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0c77b12f17473e24cda4b60b38e847fd"></a>
+typedef std::pair< const Key, T > </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+<tr class="separator:a0c77b12f17473e24cda4b60b38e847fd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a133cf0868239271387488f6067ce56ee"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a133cf0868239271387488f6067ce56ee"></a>
+typedef Key </td><td class="memItemRight" valign="bottom"><b>key_type</b></td></tr>
+<tr class="separator:a133cf0868239271387488f6067ce56ee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afdf65dc261abb44bd733ebab0f54f01b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afdf65dc261abb44bd733ebab0f54f01b"></a>
+typedef Hash_compare </td><td class="memItemRight" valign="bottom"><b>hash_compare</b></td></tr>
+<tr class="separator:afdf65dc261abb44bd733ebab0f54f01b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5f015ac2f9770d8cd69d0656447b66ac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f015ac2f9770d8cd69d0656447b66ac"></a>
+typedef Allocator::template <br class="typebreak"/>
+rebind< value_type >::other </td><td class="memItemRight" valign="bottom"><b>allocator_type</b></td></tr>
+<tr class="separator:a5f015ac2f9770d8cd69d0656447b66ac"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:ae9e1e3147bd444fb77c544ef7ecb5bef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae9e1e3147bd444fb77c544ef7ecb5bef"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_map_traits</b> (const hash_compare &hc)</td></tr>
+<tr class="separator:ae9e1e3147bd444fb77c544ef7ecb5bef"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-static-methods"></a>
+Static Protected Member Functions</h2></td></tr>
+<tr class="memitem:a561f2cf05060387c8282ad57f5c816ca"><td class="memTemplParams" colspan="2"><a class="anchor" id="a561f2cf05060387c8282ad57f5c816ca"></a>
+template<class Type1 , class Type2 > </td></tr>
+<tr class="memitem:a561f2cf05060387c8282ad57f5c816ca"><td class="memTemplItemLeft" align="right" valign="top">static const Key & </td><td class="memTemplItemRight" valign="bottom"><b>get_key</b> (const std::pair< Type1, Type2 > &value)</td></tr>
+<tr class="separator:a561f2cf05060387c8282ad57f5c816ca"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:ad8f108aa7fc21e9e38050a9d56e691b7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8f108aa7fc21e9e38050a9d56e691b7"></a>
+hash_compare </td><td class="memItemRight" valign="bottom"><b>my_hash_compare</b></td></tr>
+<tr class="separator:ad8f108aa7fc21e9e38050a9d56e691b7"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>pipeline.h</li>
+<li>concurrent_unordered_map.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00042.html b/doc/html/a00042.html
index b15b84c..7b7806f 100644
--- a/doc/html/a00042.html
+++ b/doc/html/a00042.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::concurrent_bounded_queue< T, A > Class Template Reference</title>
+<title>tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,376 +33,123 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00042.html">concurrent_bounded_queue</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00042.html">concurrent_unordered_multimap</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#friends">Friends</a> |
-<a href="a00276.html">List of all members</a>  </div>
+<a href="a00365.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::concurrent_bounded_queue< T, A > Class Template Reference<div class="ingroups"><a class="el" href="a00256.html">Containers</a></div></div>  </div>
+<div class="title">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>A high-performance thread-safe blocking concurrent bounded queue.  
- <a href="a00042.html#details">More...</a></p>
-
-<p><code>#include <concurrent_queue.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::concurrent_bounded_queue< T, A >:</div>
+Inheritance diagram for tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00042.png" usemap="#tbb::concurrent_bounded_queue< T, A >_map" alt=""/>
-  <map id="tbb::concurrent_bounded_queue< T, A >_map" name="tbb::concurrent_bounded_queue< T, A >_map">
+  <img src="a00042.png" usemap="#tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >_map" alt=""/>
+  <map id="tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >_map" name="tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >_map">
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:a6eb564625fef03dd9a5881d5d4e52f9f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6eb564625fef03dd9a5881d5d4e52f9f"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#a6eb564625fef03dd9a5881d5d4e52f9f">value_type</a></td></tr>
-<tr class="memdesc:a6eb564625fef03dd9a5881d5d4e52f9f"><td class="mdescLeft"> </td><td class="mdescRight">Element type in the queue. <br/></td></tr>
-<tr class="separator:a6eb564625fef03dd9a5881d5d4e52f9f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acbfceb845de1c770e2b56409f09b0364"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acbfceb845de1c770e2b56409f09b0364"></a>
-typedef A </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#acbfceb845de1c770e2b56409f09b0364">allocator_type</a></td></tr>
-<tr class="memdesc:acbfceb845de1c770e2b56409f09b0364"><td class="mdescLeft"> </td><td class="mdescRight">Allocator type. <br/></td></tr>
-<tr class="separator:acbfceb845de1c770e2b56409f09b0364"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5fa4002bcd265d9d3ed305e3b686f1da"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5fa4002bcd265d9d3ed305e3b686f1da"></a>
-typedef T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#a5fa4002bcd265d9d3ed305e3b686f1da">reference</a></td></tr>
-<tr class="memdesc:a5fa4002bcd265d9d3ed305e3b686f1da"><td class="mdescLeft"> </td><td class="mdescRight">Reference type. <br/></td></tr>
-<tr class="separator:a5fa4002bcd265d9d3ed305e3b686f1da"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af838e520ce0db2c22369748c019b11cb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af838e520ce0db2c22369748c019b11cb"></a>
-typedef const T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#af838e520ce0db2c22369748c019b11cb">const_reference</a></td></tr>
-<tr class="memdesc:af838e520ce0db2c22369748c019b11cb"><td class="mdescLeft"> </td><td class="mdescRight">Const reference type. <br/></td></tr>
-<tr class="separator:af838e520ce0db2c22369748c019b11cb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae73fa352d781bdb9d01bfb77f2a8bc28"><td class="memItemLeft" align="right" valign="top">typedef std::ptrdiff_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#ae73fa352d781bdb9d01bfb77f2a8bc28">size_type</a></td></tr>
-<tr class="memdesc:ae73fa352d781bdb9d01bfb77f2a8bc28"><td class="mdescLeft"> </td><td class="mdescRight">Integral type for representing size of the queue.  <a href="#ae73fa352d781bdb9d01bfb77f2a8bc28">More...</a><br/></td></tr>
-<tr class="separator:ae73fa352d781bdb9d01bfb77f2a8bc28"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a72725361e050c5a981035a20ef1b773e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a72725361e050c5a981035a20ef1b773e"></a>
-typedef std::ptrdiff_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#a72725361e050c5a981035a20ef1b773e">difference_type</a></td></tr>
-<tr class="memdesc:a72725361e050c5a981035a20ef1b773e"><td class="mdescLeft"> </td><td class="mdescRight">Difference type for iterator. <br/></td></tr>
-<tr class="separator:a72725361e050c5a981035a20ef1b773e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a42dfb71b1e4bdc0da3c1217d0d40ddd5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a42dfb71b1e4bdc0da3c1217d0d40ddd5"></a>
-typedef <br class="typebreak"/>
-internal::concurrent_queue_iterator<br class="typebreak"/>
-< <a class="el" href="a00042.html">concurrent_bounded_queue</a>, T > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
-<tr class="separator:a42dfb71b1e4bdc0da3c1217d0d40ddd5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a18049841284051e18b854692bd04602c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18049841284051e18b854692bd04602c"></a>
-typedef <br class="typebreak"/>
-internal::concurrent_queue_iterator<br class="typebreak"/>
-< <a class="el" href="a00042.html">concurrent_bounded_queue</a>, <br class="typebreak"/>
-const T > </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
-<tr class="separator:a18049841284051e18b854692bd04602c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a13c740f45a112984c9a0c6d0d0a1a4d8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a13c740f45a112984c9a0c6d0d0a1a4d8"></a>
+typedef Key </td><td class="memItemRight" valign="bottom"><b>key_type</b></td></tr>
+<tr class="separator:a13c740f45a112984c9a0c6d0d0a1a4d8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1b89d9eeca4d1c194433b40671da2bf2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1b89d9eeca4d1c194433b40671da2bf2"></a>
+typedef base_type::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+<tr class="separator:a1b89d9eeca4d1c194433b40671da2bf2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a627d86449ed7299d1baa4b09b6dd93f6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a627d86449ed7299d1baa4b09b6dd93f6"></a>
+typedef T </td><td class="memItemRight" valign="bottom"><b>mapped_type</b></td></tr>
+<tr class="separator:a627d86449ed7299d1baa4b09b6dd93f6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8485b8d61b666ac6ddd81e1d4b286d5e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8485b8d61b666ac6ddd81e1d4b286d5e"></a>
+typedef Hasher </td><td class="memItemRight" valign="bottom"><b>hasher</b></td></tr>
+<tr class="separator:a8485b8d61b666ac6ddd81e1d4b286d5e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a72a124e1c8c64499677e58171a7b9383"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a72a124e1c8c64499677e58171a7b9383"></a>
+typedef Key_equality </td><td class="memItemRight" valign="bottom"><b>key_equal</b></td></tr>
+<tr class="separator:a72a124e1c8c64499677e58171a7b9383"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6ecb30201df0bd885fbba309b2392bd4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6ecb30201df0bd885fbba309b2392bd4"></a>
+typedef hash_compare </td><td class="memItemRight" valign="bottom"><b>key_compare</b></td></tr>
+<tr class="separator:a6ecb30201df0bd885fbba309b2392bd4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaeeee0c045e0003b85f60a6851d1d827"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaeeee0c045e0003b85f60a6851d1d827"></a>
+typedef base_type::allocator_type </td><td class="memItemRight" valign="bottom"><b>allocator_type</b></td></tr>
+<tr class="separator:aaeeee0c045e0003b85f60a6851d1d827"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a029187ffe49ae876f41dfca39fe6f288"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a029187ffe49ae876f41dfca39fe6f288"></a>
+typedef base_type::pointer </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+<tr class="separator:a029187ffe49ae876f41dfca39fe6f288"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a55c029b4a58d1201e08ef5ba14fc0a66"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a55c029b4a58d1201e08ef5ba14fc0a66"></a>
+typedef base_type::const_pointer </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+<tr class="separator:a55c029b4a58d1201e08ef5ba14fc0a66"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac4613be39e17bc83cf85d3b90a13fa09"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac4613be39e17bc83cf85d3b90a13fa09"></a>
+typedef base_type::reference </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+<tr class="separator:ac4613be39e17bc83cf85d3b90a13fa09"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0b9ef2bc9a8574b16ef678e838ff4e96"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0b9ef2bc9a8574b16ef678e838ff4e96"></a>
+typedef base_type::const_reference </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
+<tr class="separator:a0b9ef2bc9a8574b16ef678e838ff4e96"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a49038d8ed5f392bce440d7906b39ee53"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a49038d8ed5f392bce440d7906b39ee53"></a>
+typedef base_type::size_type </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
+<tr class="separator:a49038d8ed5f392bce440d7906b39ee53"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a517a0b94b44d429f7f23b6d9f5366b36"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a517a0b94b44d429f7f23b6d9f5366b36"></a>
+typedef base_type::difference_type </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
+<tr class="separator:a517a0b94b44d429f7f23b6d9f5366b36"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a494392b2f3400393ae2696a70e2411f4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a494392b2f3400393ae2696a70e2411f4"></a>
+typedef base_type::iterator </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+<tr class="separator:a494392b2f3400393ae2696a70e2411f4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2460242ba39d70a0473eac4ee62b898c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2460242ba39d70a0473eac4ee62b898c"></a>
+typedef base_type::const_iterator </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
+<tr class="separator:a2460242ba39d70a0473eac4ee62b898c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a75ad2607efde410d591002203deb65e6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a75ad2607efde410d591002203deb65e6"></a>
+typedef base_type::iterator </td><td class="memItemRight" valign="bottom"><b>local_iterator</b></td></tr>
+<tr class="separator:a75ad2607efde410d591002203deb65e6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab7647068dd628f35d3e3f7ed161b3fc0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab7647068dd628f35d3e3f7ed161b3fc0"></a>
+typedef base_type::const_iterator </td><td class="memItemRight" valign="bottom"><b>const_local_iterator</b></td></tr>
+<tr class="separator:ab7647068dd628f35d3e3f7ed161b3fc0"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a85f8a800cae02b601f36ad7a655a0126"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a85f8a800cae02b601f36ad7a655a0126"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#a85f8a800cae02b601f36ad7a655a0126">concurrent_bounded_queue</a> (const <a class="el" href="a00042.html#acbfceb845de1c770e2b56409f09b0364">allocator_type</a> &a=<a class="el" href="a00042.html#acbfceb845de1c770e2b56409f09b0364">allocator_type</a>())</td></tr>
-<tr class="memdesc:a85f8a800cae02b601f36ad7a655a0126"><td class="mdescLeft"> </td><td class="mdescRight">Construct empty queue. <br/></td></tr>
-<tr class="separator:a85f8a800cae02b601f36ad7a655a0126"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aad6fd2353d64c2c31d074cd99df58c02"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad6fd2353d64c2c31d074cd99df58c02"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#aad6fd2353d64c2c31d074cd99df58c02">concurrent_bounded_queue</a> (const <a class="el" href="a00042.html">concurrent_bounded_queue</a> &src, const <a class="el" href="a00042.html#acbfceb845de1c770e2b56409f09b0364">allocator_type</a> &a=<a class="el" href="a00042.html#acbfceb845de1c770e2b56409f09b0364">allocator_type</a>())</td></tr>
-<tr class="memdesc:aad6fd2353d64c2c31d074cd99df58c02"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br/></td></tr>
-<tr class="separator:aad6fd2353d64c2c31d074cd99df58c02"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a228b9d3bf3158a9379748894a93fbe55"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a228b9d3bf3158a9379748894a93fbe55"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#a228b9d3bf3158a9379748894a93fbe55">concurrent_bounded_queue</a> (<a class="el" href="a00042.html">concurrent_bounded_queue</a> &&src)</td></tr>
-<tr class="memdesc:a228b9d3bf3158a9379748894a93fbe55"><td class="mdescLeft"> </td><td class="mdescRight">Move constructors. <br/></td></tr>
-<tr class="separator:a228b9d3bf3158a9379748894a93fbe55"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aed0303dafc38c5088ae62ac023fffb4e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed0303dafc38c5088ae62ac023fffb4e"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_bounded_queue</b> (<a class="el" href="a00042.html">concurrent_bounded_queue</a> &&src, const <a class="el" href="a00042.html#acbfceb845de1c770e2b56409f09b0364">allocator_type</a> &a)</td></tr>
-<tr class="separator:aed0303dafc38c5088ae62ac023fffb4e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afcfdc998e106fdb7b2dfa5df880cd9cf"><td class="memTemplParams" colspan="2"><a class="anchor" id="afcfdc998e106fdb7b2dfa5df880cd9cf"></a>
-template<typename InputIterator > </td></tr>
-<tr class="memitem:afcfdc998e106fdb7b2dfa5df880cd9cf"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00042.html#afcfdc998e106fdb7b2dfa5df880cd9cf">concurrent_bounded_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00042.html#acbfceb845de1c770e2b56409f09b0364">allocator_type</a> &a=<a class="el" href="a00042.html#acbfceb845de1c770e2b56409f09b0364">allocator_type</a>())< [...]
-<tr class="memdesc:afcfdc998e106fdb7b2dfa5df880cd9cf"><td class="mdescLeft"> </td><td class="mdescRight">[begin,end) constructor <br/></td></tr>
-<tr class="separator:afcfdc998e106fdb7b2dfa5df880cd9cf"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab1291bf6837ecfb8836c24dde5dd80b5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab1291bf6837ecfb8836c24dde5dd80b5"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#ab1291bf6837ecfb8836c24dde5dd80b5">~concurrent_bounded_queue</a> ()</td></tr>
-<tr class="memdesc:ab1291bf6837ecfb8836c24dde5dd80b5"><td class="mdescLeft"> </td><td class="mdescRight">Destroy queue. <br/></td></tr>
-<tr class="separator:ab1291bf6837ecfb8836c24dde5dd80b5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae5e9051772bbc93b2ccb8fd0a98a21f5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae5e9051772bbc93b2ccb8fd0a98a21f5"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#ae5e9051772bbc93b2ccb8fd0a98a21f5">push</a> (const T &source)</td></tr>
-<tr class="memdesc:ae5e9051772bbc93b2ccb8fd0a98a21f5"><td class="mdescLeft"> </td><td class="mdescRight">Enqueue an item at tail of queue. <br/></td></tr>
-<tr class="separator:ae5e9051772bbc93b2ccb8fd0a98a21f5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a62a03e9c185562254ecb4104f38c106d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a62a03e9c185562254ecb4104f38c106d"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#a62a03e9c185562254ecb4104f38c106d">push</a> (T &&source)</td></tr>
-<tr class="memdesc:a62a03e9c185562254ecb4104f38c106d"><td class="mdescLeft"> </td><td class="mdescRight">Move an item at tail of queue. <br/></td></tr>
-<tr class="separator:a62a03e9c185562254ecb4104f38c106d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab9009e8a1bdf70623f6480681bb6b56a"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab9009e8a1bdf70623f6480681bb6b56a"></a>
-template<typename... Arguments> </td></tr>
-<tr class="memitem:ab9009e8a1bdf70623f6480681bb6b56a"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>emplace</b> (Arguments &&...args)</td></tr>
-<tr class="separator:ab9009e8a1bdf70623f6480681bb6b56a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a87926c31967a918ce80690a9ed5d6fa8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#a87926c31967a918ce80690a9ed5d6fa8">pop</a> (T &destination)</td></tr>
-<tr class="memdesc:a87926c31967a918ce80690a9ed5d6fa8"><td class="mdescLeft"> </td><td class="mdescRight">Dequeue item from head of queue.  <a href="#a87926c31967a918ce80690a9ed5d6fa8">More...</a><br/></td></tr>
-<tr class="separator:a87926c31967a918ce80690a9ed5d6fa8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a77a755d94cabf5208905d10d5b57419c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a77a755d94cabf5208905d10d5b57419c"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#a77a755d94cabf5208905d10d5b57419c">abort</a> ()</td></tr>
-<tr class="memdesc:a77a755d94cabf5208905d10d5b57419c"><td class="mdescLeft"> </td><td class="mdescRight">Abort all pending queue operations. <br/></td></tr>
-<tr class="separator:a77a755d94cabf5208905d10d5b57419c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a03d93a240841a21788396bebd71c51bd"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#a03d93a240841a21788396bebd71c51bd">try_push</a> (const T &source)</td></tr>
-<tr class="memdesc:a03d93a240841a21788396bebd71c51bd"><td class="mdescLeft"> </td><td class="mdescRight">Enqueue an item at tail of queue if queue is not already full.  <a href="#a03d93a240841a21788396bebd71c51bd">More...</a><br/></td></tr>
-<tr class="separator:a03d93a240841a21788396bebd71c51bd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a93f35e9d9381629e0a2993f9fdd96d92"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#a93f35e9d9381629e0a2993f9fdd96d92">try_push</a> (T &&source)</td></tr>
-<tr class="memdesc:a93f35e9d9381629e0a2993f9fdd96d92"><td class="mdescLeft"> </td><td class="mdescRight">Move an item at tail of queue if queue is not already full.  <a href="#a93f35e9d9381629e0a2993f9fdd96d92">More...</a><br/></td></tr>
-<tr class="separator:a93f35e9d9381629e0a2993f9fdd96d92"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0a4351eb8c93b6b2d9feaff0c7088ee8"><td class="memTemplParams" colspan="2"><a class="anchor" id="a0a4351eb8c93b6b2d9feaff0c7088ee8"></a>
-template<typename... Arguments> </td></tr>
-<tr class="memitem:a0a4351eb8c93b6b2d9feaff0c7088ee8"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>try_emplace</b> (Arguments &&...args)</td></tr>
-<tr class="separator:a0a4351eb8c93b6b2d9feaff0c7088ee8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3086cb4dcdeee245ef5cf34f72fb3e10"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#a3086cb4dcdeee245ef5cf34f72fb3e10">try_pop</a> (T &destination)</td></tr>
-<tr class="memdesc:a3086cb4dcdeee245ef5cf34f72fb3e10"><td class="mdescLeft"> </td><td class="mdescRight">Attempt to dequeue an item from head of queue.  <a href="#a3086cb4dcdeee245ef5cf34f72fb3e10">More...</a><br/></td></tr>
-<tr class="separator:a3086cb4dcdeee245ef5cf34f72fb3e10"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9d6c20fd8c193c12b6a7b0c3101fd966"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00042.html#ae73fa352d781bdb9d01bfb77f2a8bc28">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#a9d6c20fd8c193c12b6a7b0c3101fd966">size</a> () const </td></tr>
-<tr class="memdesc:a9d6c20fd8c193c12b6a7b0c3101fd966"><td class="mdescLeft"> </td><td class="mdescRight">Return number of pushes minus number of pops.  <a href="#a9d6c20fd8c193c12b6a7b0c3101fd966">More...</a><br/></td></tr>
-<tr class="separator:a9d6c20fd8c193c12b6a7b0c3101fd966"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8c59578f28c5fb4718b0eff43776e879"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8c59578f28c5fb4718b0eff43776e879"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#a8c59578f28c5fb4718b0eff43776e879">empty</a> () const </td></tr>
-<tr class="memdesc:a8c59578f28c5fb4718b0eff43776e879"><td class="mdescLeft"> </td><td class="mdescRight">Equivalent to <a class="el" href="a00042.html#a9d6c20fd8c193c12b6a7b0c3101fd966" title="Return number of pushes minus number of pops. ">size()</a><=0. <br/></td></tr>
-<tr class="separator:a8c59578f28c5fb4718b0eff43776e879"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a526487063242569685af8c8d778d39e0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a526487063242569685af8c8d778d39e0"></a>
-<a class="el" href="a00042.html#ae73fa352d781bdb9d01bfb77f2a8bc28">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#a526487063242569685af8c8d778d39e0">capacity</a> () const </td></tr>
-<tr class="memdesc:a526487063242569685af8c8d778d39e0"><td class="mdescLeft"> </td><td class="mdescRight">Maximum number of allowed elements. <br/></td></tr>
-<tr class="separator:a526487063242569685af8c8d778d39e0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a768699675813575eec08c1f43afda395"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#a768699675813575eec08c1f43afda395">set_capacity</a> (<a class="el" href="a00042.html#ae73fa352d781bdb9d01bfb77f2a8bc28">size_type</a> new_capacity)</td></tr>
-<tr class="memdesc:a768699675813575eec08c1f43afda395"><td class="mdescLeft"> </td><td class="mdescRight">Set the capacity.  <a href="#a768699675813575eec08c1f43afda395">More...</a><br/></td></tr>
-<tr class="separator:a768699675813575eec08c1f43afda395"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aaeba11bbcd368a7a3a6e6e2dd3082c9c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaeba11bbcd368a7a3a6e6e2dd3082c9c"></a>
-<a class="el" href="a00042.html#acbfceb845de1c770e2b56409f09b0364">allocator_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#aaeba11bbcd368a7a3a6e6e2dd3082c9c">get_allocator</a> () const </td></tr>
-<tr class="memdesc:aaeba11bbcd368a7a3a6e6e2dd3082c9c"><td class="mdescLeft"> </td><td class="mdescRight">return allocator object <br/></td></tr>
-<tr class="separator:aaeba11bbcd368a7a3a6e6e2dd3082c9c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a246be3920e079ea4847933f106baa98f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a246be3920e079ea4847933f106baa98f"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#a246be3920e079ea4847933f106baa98f">clear</a> ()</td></tr>
-<tr class="memdesc:a246be3920e079ea4847933f106baa98f"><td class="mdescLeft"> </td><td class="mdescRight">clear the queue. not thread-safe. <br/></td></tr>
-<tr class="separator:a246be3920e079ea4847933f106baa98f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac0c931eaa1ddc30025e49d06cc383703"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac0c931eaa1ddc30025e49d06cc383703"></a>
-iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_begin</b> ()</td></tr>
-<tr class="separator:ac0c931eaa1ddc30025e49d06cc383703"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a634cece9742cbaba56ba6f7777568e4c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a634cece9742cbaba56ba6f7777568e4c"></a>
-iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_end</b> ()</td></tr>
-<tr class="separator:a634cece9742cbaba56ba6f7777568e4c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2ed2f8130fd679e89327cb292fb25510"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ed2f8130fd679e89327cb292fb25510"></a>
-const_iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_begin</b> () const </td></tr>
-<tr class="separator:a2ed2f8130fd679e89327cb292fb25510"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a873d62f59fd79959c0204f5fb44c774d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a873d62f59fd79959c0204f5fb44c774d"></a>
-const_iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_end</b> () const </td></tr>
-<tr class="separator:a873d62f59fd79959c0204f5fb44c774d"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:a1f5eec0de2e660ea5372d19393f0920b"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1f5eec0de2e660ea5372d19393f0920b"></a>
-template<typename Container , typename Value > </td></tr>
-<tr class="memitem:a1f5eec0de2e660ea5372d19393f0920b"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::concurrent_queue_iterator</b></td></tr>
-<tr class="separator:a1f5eec0de2e660ea5372d19393f0920b"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename T, class A = cache_aligned_allocator<T>><br/>
-class tbb::concurrent_bounded_queue< T, A ></h3>
-
-<p>A high-performance thread-safe blocking concurrent bounded queue. </p>
-<p>This is the pre-PPL TBB concurrent queue which supports boundedness and blocking semantics. Note that method names agree with the PPL-style concurrent queue. Multiple threads may each push and pop concurrently. Assignment construction is not allowed. </p>
-</div><h2 class="groupheader">Member Typedef Documentation</h2>
-<a class="anchor" id="ae73fa352d781bdb9d01bfb77f2a8bc28"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T , class A  = cache_aligned_allocator<T>> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef std::ptrdiff_t <a class="el" href="a00042.html">tbb::concurrent_bounded_queue</a>< T, A >::<a class="el" href="a00042.html#ae73fa352d781bdb9d01bfb77f2a8bc28">size_type</a></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Integral type for representing size of the queue. </p>
-<p>Note that the size_type is a signed integral type. This is because the size can be negative if there are pending pops without corresponding pushes. </p>
-
-</div>
-</div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="a87926c31967a918ce80690a9ed5d6fa8"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T , class A  = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00042.html">tbb::concurrent_bounded_queue</a>< T, A >::pop </td>
-          <td>(</td>
-          <td class="paramtype">T & </td>
-          <td class="paramname"><em>destination</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
+<tr class="memitem:a4ea5780bcc8664253e2180987bc775d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ea5780bcc8664253e2180987bc775d0"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_multimap</b> (size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())</td></tr>
+<tr class="separator:a4ea5780bcc8664253e2180987bc775d0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae2fe78524a0f0cd268194cf2461e3ab0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae2fe78524a0f0cd268194cf2461e3ab0"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_multimap</b> (const Allocator &a)</td></tr>
+<tr class="separator:ae2fe78524a0f0cd268194cf2461e3ab0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a174ad09d37e0f648e06ded3abfa65bed"><td class="memTemplParams" colspan="2"><a class="anchor" id="a174ad09d37e0f648e06ded3abfa65bed"></a>
+template<typename Iterator > </td></tr>
+<tr class="memitem:a174ad09d37e0f648e06ded3abfa65bed"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>concurrent_unordered_multimap</b> (Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())</td></tr>
+<tr class="separator:a174ad09d37e0f648e06ded3abfa65bed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5957d29e5fa9f8c53538de3f7a41ebc9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5957d29e5fa9f8c53538de3f7a41ebc9"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#a5957d29e5fa9f8c53538de3f7a41ebc9">concurrent_unordered_multimap</a> (std::initializer_list< value_type > il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())</td></tr>
+<tr class="memdesc:a5957d29e5fa9f8c53538de3f7a41ebc9"><td class="mdescLeft"> </td><td class="mdescRight">Constructor from initializer_list. <br/></td></tr>
+<tr class="separator:a5957d29e5fa9f8c53538de3f7a41ebc9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aacf347cd41c61dd026e844fa9311130c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aacf347cd41c61dd026e844fa9311130c"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_multimap</b> (const <a class="el" href="a00042.html">concurrent_unordered_multimap</a> &table)</td></tr>
+<tr class="separator:aacf347cd41c61dd026e844fa9311130c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a58939ac30bfced4b6e2cf0377c1b7d71"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a58939ac30bfced4b6e2cf0377c1b7d71"></a>
+<a class="el" href="a00042.html">concurrent_unordered_multimap</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00042.html">concurrent_unordered_multimap</a> &table)</td></tr>
+<tr class="separator:a58939ac30bfced4b6e2cf0377c1b7d71"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac339429f4f36730ff3614cb7fcb257cb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac339429f4f36730ff3614cb7fcb257cb"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_multimap</b> (<a class="el" href="a00042.html">concurrent_unordered_multimap</a> &&table)</td></tr>
+<tr class="separator:ac339429f4f36730ff3614cb7fcb257cb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5e9a928751361cec49b26afa38018208"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e9a928751361cec49b26afa38018208"></a>
+<a class="el" href="a00042.html">concurrent_unordered_multimap</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="a00042.html">concurrent_unordered_multimap</a> &&table)</td></tr>
+<tr class="separator:a5e9a928751361cec49b26afa38018208"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a040b7c942e77cca30b0ab423ae7a2d87"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a040b7c942e77cca30b0ab423ae7a2d87"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_multimap</b> (<a class="el" href="a00042.html">concurrent_unordered_multimap</a> &&table, const Allocator &a)</td></tr>
+<tr class="separator:a040b7c942e77cca30b0ab423ae7a2d87"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a34148bd7279ce189a6c0c26380df0a2a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a34148bd7279ce189a6c0c26380df0a2a"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_multimap</b> (const <a class="el" href="a00042.html">concurrent_unordered_multimap</a> &table, const Allocator &a)</td></tr>
+<tr class="separator:a34148bd7279ce189a6c0c26380df0a2a"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-</div><div class="memdoc">
-
-<p>Dequeue item from head of queue. </p>
-<p>Block until an item becomes available, and then dequeue it. </p>
-
-</div>
-</div>
-<a class="anchor" id="a768699675813575eec08c1f43afda395"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T , class A  = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00042.html">tbb::concurrent_bounded_queue</a>< T, A >::set_capacity </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00042.html#ae73fa352d781bdb9d01bfb77f2a8bc28">size_type</a> </td>
-          <td class="paramname"><em>new_capacity</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the capacity. </p>
-<p>Setting the capacity to 0 causes subsequent try_push operations to always fail, and subsequent push operations to block forever. </p>
-
-</div>
-</div>
-<a class="anchor" id="a9d6c20fd8c193c12b6a7b0c3101fd966"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T , class A  = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00042.html#ae73fa352d781bdb9d01bfb77f2a8bc28">size_type</a> <a class="el" href="a00042.html">tbb::concurrent_bounded_queue</a>< T, A >::size </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td> const</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Return number of pushes minus number of pops. </p>
-<p>Note that the result can be negative if there are pops waiting for the corresponding pushes. The result can also exceed <a class="el" href="a00042.html#a526487063242569685af8c8d778d39e0" title="Maximum number of allowed elements. ">capacity()</a> if there are push operations in flight. </p>
-
-</div>
-</div>
-<a class="anchor" id="a3086cb4dcdeee245ef5cf34f72fb3e10"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T , class A  = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00042.html">tbb::concurrent_bounded_queue</a>< T, A >::try_pop </td>
-          <td>(</td>
-          <td class="paramtype">T & </td>
-          <td class="paramname"><em>destination</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Attempt to dequeue an item from head of queue. </p>
-<p>Does not wait for item to become available. Returns true if successful; false otherwise. </p>
-
-</div>
-</div>
-<a class="anchor" id="a03d93a240841a21788396bebd71c51bd"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T , class A  = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00042.html">tbb::concurrent_bounded_queue</a>< T, A >::try_push </td>
-          <td>(</td>
-          <td class="paramtype">const T & </td>
-          <td class="paramname"><em>source</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Enqueue an item at tail of queue if queue is not already full. </p>
-<p>Does not wait for queue to become not full. Returns true if item is pushed; false if queue was already full. </p>
-
-</div>
-</div>
-<a class="anchor" id="a93f35e9d9381629e0a2993f9fdd96d92"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T , class A  = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00042.html">tbb::concurrent_bounded_queue</a>< T, A >::try_push </td>
-          <td>(</td>
-          <td class="paramtype">T && </td>
-          <td class="paramname"><em>source</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Move an item at tail of queue if queue is not already full. </p>
-<p>Does not wait for queue to become not full. Returns true if item is pushed; false if queue was already full. </p>
-
-</div>
-</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>concurrent_queue.h</li>
+<li>concurrent_unordered_map.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00042.png b/doc/html/a00042.png
index 3dc03c3..6fa3b58 100644
Binary files a/doc/html/a00042.png and b/doc/html/a00042.png differ
diff --git a/doc/html/a00043.html b/doc/html/a00043.html
index e555ccc..109c153 100644
--- a/doc/html/a00043.html
+++ b/doc/html/a00043.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A > Class Template Reference</title>
+<title>tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,1054 +33,123 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00043.html">concurrent_hash_map</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00043.html">concurrent_unordered_multiset</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-types">Protected Types</a> |
-<a href="#pro-methods">Protected Member Functions</a> |
-<a href="#pro-static-methods">Static Protected Member Functions</a> |
-<a href="#pro-attribs">Protected Attributes</a> |
-<a href="#friends">Friends</a> |
 <a href="a00368.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A > Class Template Reference<div class="ingroups"><a class="el" href="a00256.html">Containers</a></div></div>  </div>
+<div class="title">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Unordered map from Key to T.  
- <a href="a00043.html#details">More...</a></p>
-
-<p><code>#include <concurrent_hash_map.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >:</div>
+Inheritance diagram for tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00043.png" usemap="#tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >_map" alt=""/>
-  <map id="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >_map" name="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >_map">
+  <img src="a00043.png" usemap="#tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >_map" alt=""/>
+  <map id="tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >_map" name="tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >_map">
 </map>
  </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00010.html">accessor</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Allows write access to elements and combines data access, locking, and garbage collection.  <a href="a00010.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00011.html">accessor_not_used</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00029.html">bucket_accessor</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">bucket accessor is to find, rehash, acquire a lock, and access a bucket  <a href="a00029.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00034.html">call_clear_on_leave</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00054.html">const_accessor</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Combines data access, locking, and garbage collection.  <a href="a00054.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00100.html">node</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:a73476eabf0605a4a17e33eca379b567c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a73476eabf0605a4a17e33eca379b567c"></a>
+<tr class="memitem:af1eb846a05a4e2d30a3ff7f66acad7c7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af1eb846a05a4e2d30a3ff7f66acad7c7"></a>
 typedef Key </td><td class="memItemRight" valign="bottom"><b>key_type</b></td></tr>
-<tr class="separator:a73476eabf0605a4a17e33eca379b567c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a09f82b7e1255cd4a7ab13f694f04e0a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a09f82b7e1255cd4a7ab13f694f04e0a2"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>mapped_type</b></td></tr>
-<tr class="separator:a09f82b7e1255cd4a7ab13f694f04e0a2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a10da770ec791fd8f3bddbf19d852b2f6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a10da770ec791fd8f3bddbf19d852b2f6"></a>
-typedef std::pair< const Key, T > </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-<tr class="separator:a10da770ec791fd8f3bddbf19d852b2f6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4346b898af1007960c70b1d5a12b3dda"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4346b898af1007960c70b1d5a12b3dda"></a>
-typedef hash_map_base::size_type </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-<tr class="separator:a4346b898af1007960c70b1d5a12b3dda"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aae6344f41fc1b2aae8b310442f609db0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aae6344f41fc1b2aae8b310442f609db0"></a>
-typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
-<tr class="separator:aae6344f41fc1b2aae8b310442f609db0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af8fca882f67e98d54a675c9b75db3cc0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af8fca882f67e98d54a675c9b75db3cc0"></a>
-typedef value_type * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-<tr class="separator:af8fca882f67e98d54a675c9b75db3cc0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acaf14214618545aa7e0aa59a3af4a6bd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acaf14214618545aa7e0aa59a3af4a6bd"></a>
-typedef const value_type * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-<tr class="separator:acaf14214618545aa7e0aa59a3af4a6bd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5064777ff7c17e294d74ca60f96f28db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5064777ff7c17e294d74ca60f96f28db"></a>
-typedef value_type & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
-<tr class="separator:a5064777ff7c17e294d74ca60f96f28db"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6291ee6059597aac8f59dc8fd5558036"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6291ee6059597aac8f59dc8fd5558036"></a>
-typedef const value_type & </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
-<tr class="separator:a6291ee6059597aac8f59dc8fd5558036"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae6af7bf91f1cbd859aef1ffc6197b41a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6af7bf91f1cbd859aef1ffc6197b41a"></a>
-typedef <br class="typebreak"/>
-internal::hash_map_iterator<br class="typebreak"/>
-< <a class="el" href="a00043.html">concurrent_hash_map</a>, <br class="typebreak"/>
-value_type > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
-<tr class="separator:ae6af7bf91f1cbd859aef1ffc6197b41a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af416067eaf691c88e6b73bf3b3323f66"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af416067eaf691c88e6b73bf3b3323f66"></a>
-typedef <br class="typebreak"/>
-internal::hash_map_iterator<br class="typebreak"/>
-< <a class="el" href="a00043.html">concurrent_hash_map</a>, const <br class="typebreak"/>
-value_type > </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
-<tr class="separator:af416067eaf691c88e6b73bf3b3323f66"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a69508e67134dd5282b89e1847e71c31b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69508e67134dd5282b89e1847e71c31b"></a>
-typedef <br class="typebreak"/>
-internal::hash_map_range<br class="typebreak"/>
-< iterator > </td><td class="memItemRight" valign="bottom"><b>range_type</b></td></tr>
-<tr class="separator:a69508e67134dd5282b89e1847e71c31b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0b9d06751969eacda84b01582e4aa1d2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0b9d06751969eacda84b01582e4aa1d2"></a>
-typedef <br class="typebreak"/>
-internal::hash_map_range<br class="typebreak"/>
-< const_iterator > </td><td class="memItemRight" valign="bottom"><b>const_range_type</b></td></tr>
-<tr class="separator:a0b9d06751969eacda84b01582e4aa1d2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a85c266c1560f7faa64772d349d0280a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a85c266c1560f7faa64772d349d0280a4"></a>
-typedef Allocator </td><td class="memItemRight" valign="bottom"><b>allocator_type</b></td></tr>
-<tr class="separator:a85c266c1560f7faa64772d349d0280a4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="separator:af1eb846a05a4e2d30a3ff7f66acad7c7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a559df68fc84a16b494a9638085c7379b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a559df68fc84a16b494a9638085c7379b"></a>
+typedef base_type::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+<tr class="separator:a559df68fc84a16b494a9638085c7379b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ada492d245619aac2683b57c9f52106c7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ada492d245619aac2683b57c9f52106c7"></a>
+typedef Key </td><td class="memItemRight" valign="bottom"><b>mapped_type</b></td></tr>
+<tr class="separator:ada492d245619aac2683b57c9f52106c7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab6b0ed8e5a20690cc06644520d0e5ef3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab6b0ed8e5a20690cc06644520d0e5ef3"></a>
+typedef Hasher </td><td class="memItemRight" valign="bottom"><b>hasher</b></td></tr>
+<tr class="separator:ab6b0ed8e5a20690cc06644520d0e5ef3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa3d8b36c79741c229cf9a5c9d93516b7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa3d8b36c79741c229cf9a5c9d93516b7"></a>
+typedef Key_equality </td><td class="memItemRight" valign="bottom"><b>key_equal</b></td></tr>
+<tr class="separator:aa3d8b36c79741c229cf9a5c9d93516b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8ec7f32ab51ebbfdb06d57ab8b17044b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8ec7f32ab51ebbfdb06d57ab8b17044b"></a>
+typedef hash_compare </td><td class="memItemRight" valign="bottom"><b>key_compare</b></td></tr>
+<tr class="separator:a8ec7f32ab51ebbfdb06d57ab8b17044b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1f89a49912b58d42ddbb3f344b6304ca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1f89a49912b58d42ddbb3f344b6304ca"></a>
+typedef base_type::allocator_type </td><td class="memItemRight" valign="bottom"><b>allocator_type</b></td></tr>
+<tr class="separator:a1f89a49912b58d42ddbb3f344b6304ca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad4ff41efe0ead5030b011c999dd748de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad4ff41efe0ead5030b011c999dd748de"></a>
+typedef base_type::pointer </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+<tr class="separator:ad4ff41efe0ead5030b011c999dd748de"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab4327ff04c8a5dc7653b47763263b9f9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab4327ff04c8a5dc7653b47763263b9f9"></a>
+typedef base_type::const_pointer </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+<tr class="separator:ab4327ff04c8a5dc7653b47763263b9f9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aef5518b17cd9da59b9e6d9b9374f5245"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aef5518b17cd9da59b9e6d9b9374f5245"></a>
+typedef base_type::reference </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+<tr class="separator:aef5518b17cd9da59b9e6d9b9374f5245"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7084b7dd3f9b1df0ffdd520529e87f3c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7084b7dd3f9b1df0ffdd520529e87f3c"></a>
+typedef base_type::const_reference </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
+<tr class="separator:a7084b7dd3f9b1df0ffdd520529e87f3c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad04d6c35ee079e8a49d38744c8f305b3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad04d6c35ee079e8a49d38744c8f305b3"></a>
+typedef base_type::size_type </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
+<tr class="separator:ad04d6c35ee079e8a49d38744c8f305b3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6e9babf06dc79948bb787793a7cb0d37"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6e9babf06dc79948bb787793a7cb0d37"></a>
+typedef base_type::difference_type </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
+<tr class="separator:a6e9babf06dc79948bb787793a7cb0d37"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a229ae1c0786ea9509c66256fcf1c8f47"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a229ae1c0786ea9509c66256fcf1c8f47"></a>
+typedef base_type::iterator </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+<tr class="separator:a229ae1c0786ea9509c66256fcf1c8f47"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a69ed6ae85fe54e53b2804b61a6f30fa2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69ed6ae85fe54e53b2804b61a6f30fa2"></a>
+typedef base_type::const_iterator </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
+<tr class="separator:a69ed6ae85fe54e53b2804b61a6f30fa2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a532cdc67028e27231846b41bfd9a0e26"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a532cdc67028e27231846b41bfd9a0e26"></a>
+typedef base_type::iterator </td><td class="memItemRight" valign="bottom"><b>local_iterator</b></td></tr>
+<tr class="separator:a532cdc67028e27231846b41bfd9a0e26"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af4f42202dd9f2bc114c9411928431217"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af4f42202dd9f2bc114c9411928431217"></a>
+typedef base_type::const_iterator </td><td class="memItemRight" valign="bottom"><b>const_local_iterator</b></td></tr>
+<tr class="separator:af4f42202dd9f2bc114c9411928431217"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:aa3a9767b525144a2afb69ed125714c53"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa3a9767b525144a2afb69ed125714c53"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#aa3a9767b525144a2afb69ed125714c53">concurrent_hash_map</a> (const allocator_type &a=allocator_type())</td></tr>
-<tr class="memdesc:aa3a9767b525144a2afb69ed125714c53"><td class="mdescLeft"> </td><td class="mdescRight">Construct empty table. <br/></td></tr>
-<tr class="separator:aa3a9767b525144a2afb69ed125714c53"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aae76e1252b56b107685f8746e0f6a1f4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aae76e1252b56b107685f8746e0f6a1f4"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#aae76e1252b56b107685f8746e0f6a1f4">concurrent_hash_map</a> (size_type n, const allocator_type &a=allocator_type())</td></tr>
-<tr class="memdesc:aae76e1252b56b107685f8746e0f6a1f4"><td class="mdescLeft"> </td><td class="mdescRight">Construct empty table with n preallocated buckets. This number serves also as initial concurrency level. <br/></td></tr>
-<tr class="separator:aae76e1252b56b107685f8746e0f6a1f4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8a73b86f9a5e9836b38713e56c546654"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8a73b86f9a5e9836b38713e56c546654"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a8a73b86f9a5e9836b38713e56c546654">concurrent_hash_map</a> (const <a class="el" href="a00043.html">concurrent_hash_map</a> &table, const allocator_type &a=allocator_type())</td></tr>
-<tr class="memdesc:a8a73b86f9a5e9836b38713e56c546654"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br/></td></tr>
-<tr class="separator:a8a73b86f9a5e9836b38713e56c546654"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2bd04845683b15a590913a72a19fa3dc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2bd04845683b15a590913a72a19fa3dc"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a2bd04845683b15a590913a72a19fa3dc">concurrent_hash_map</a> (<a class="el" href="a00043.html">concurrent_hash_map</a> &&table)</td></tr>
-<tr class="memdesc:a2bd04845683b15a590913a72a19fa3dc"><td class="mdescLeft"> </td><td class="mdescRight">Move constructor. <br/></td></tr>
-<tr class="separator:a2bd04845683b15a590913a72a19fa3dc"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad642e497153df5669e6454acef095675"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad642e497153df5669e6454acef095675"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#ad642e497153df5669e6454acef095675">concurrent_hash_map</a> (<a class="el" href="a00043.html">concurrent_hash_map</a> &&table, const allocator_type &a)</td></tr>
-<tr class="memdesc:ad642e497153df5669e6454acef095675"><td class="mdescLeft"> </td><td class="mdescRight">Move constructor. <br/></td></tr>
-<tr class="separator:ad642e497153df5669e6454acef095675"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad56fc19d656099d49051f3c363cefc89"><td class="memTemplParams" colspan="2"><a class="anchor" id="ad56fc19d656099d49051f3c363cefc89"></a>
-template<typename I > </td></tr>
-<tr class="memitem:ad56fc19d656099d49051f3c363cefc89"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00043.html#ad56fc19d656099d49051f3c363cefc89">concurrent_hash_map</a> (I first, I last, const allocator_type &a=allocator_type())</td></tr>
-<tr class="memdesc:ad56fc19d656099d49051f3c363cefc89"><td class="mdescLeft"> </td><td class="mdescRight">Construction with copying iteration range and given allocator instance. <br/></td></tr>
-<tr class="separator:ad56fc19d656099d49051f3c363cefc89"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a57149f90060b033b1f2493f2a88ef291"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a57149f90060b033b1f2493f2a88ef291"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a57149f90060b033b1f2493f2a88ef291">concurrent_hash_map</a> (std::initializer_list< value_type > il, const allocator_type &a=allocator_type())</td></tr>
-<tr class="memdesc:a57149f90060b033b1f2493f2a88ef291"><td class="mdescLeft"> </td><td class="mdescRight">Construct empty table with n preallocated buckets. This number serves also as initial concurrency level. <br/></td></tr>
-<tr class="separator:a57149f90060b033b1f2493f2a88ef291"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a63e01b1f79c287ae0257ccfd483fd90a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63e01b1f79c287ae0257ccfd483fd90a"></a>
-<a class="el" href="a00043.html">concurrent_hash_map</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a63e01b1f79c287ae0257ccfd483fd90a">operator=</a> (const <a class="el" href="a00043.html">concurrent_hash_map</a> &table)</td></tr>
-<tr class="memdesc:a63e01b1f79c287ae0257ccfd483fd90a"><td class="mdescLeft"> </td><td class="mdescRight">Assignment. <br/></td></tr>
-<tr class="separator:a63e01b1f79c287ae0257ccfd483fd90a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a92b506ceed93d1c25979948961054380"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a92b506ceed93d1c25979948961054380"></a>
-<a class="el" href="a00043.html">concurrent_hash_map</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a92b506ceed93d1c25979948961054380">operator=</a> (<a class="el" href="a00043.html">concurrent_hash_map</a> &&table)</td></tr>
-<tr class="memdesc:a92b506ceed93d1c25979948961054380"><td class="mdescLeft"> </td><td class="mdescRight">Move Assignment. <br/></td></tr>
-<tr class="separator:a92b506ceed93d1c25979948961054380"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aac73665b1a55e3de7332f36598488252"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aac73665b1a55e3de7332f36598488252"></a>
-<a class="el" href="a00043.html">concurrent_hash_map</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#aac73665b1a55e3de7332f36598488252">operator=</a> (std::initializer_list< value_type > il)</td></tr>
-<tr class="memdesc:aac73665b1a55e3de7332f36598488252"><td class="mdescLeft"> </td><td class="mdescRight">Assignment. <br/></td></tr>
-<tr class="separator:aac73665b1a55e3de7332f36598488252"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:adf1fa9470c605731063e5949f0418eb7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#adf1fa9470c605731063e5949f0418eb7">rehash</a> (size_type n=0)</td></tr>
-<tr class="memdesc:adf1fa9470c605731063e5949f0418eb7"><td class="mdescLeft"> </td><td class="mdescRight">Rehashes and optionally resizes the whole table.  <a href="#adf1fa9470c605731063e5949f0418eb7">More...</a><br/></td></tr>
-<tr class="separator:adf1fa9470c605731063e5949f0418eb7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab8295bc260b5e4df883fef11574b84c6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab8295bc260b5e4df883fef11574b84c6"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#ab8295bc260b5e4df883fef11574b84c6">clear</a> ()</td></tr>
-<tr class="memdesc:ab8295bc260b5e4df883fef11574b84c6"><td class="mdescLeft"> </td><td class="mdescRight">Clear table. <br/></td></tr>
-<tr class="separator:ab8295bc260b5e4df883fef11574b84c6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9ce9ab8c954bf6979c2c57d10fd8a8ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9ce9ab8c954bf6979c2c57d10fd8a8ed"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a9ce9ab8c954bf6979c2c57d10fd8a8ed">~concurrent_hash_map</a> ()</td></tr>
-<tr class="memdesc:a9ce9ab8c954bf6979c2c57d10fd8a8ed"><td class="mdescLeft"> </td><td class="mdescRight">Clear table and destroy it. <br/></td></tr>
-<tr class="separator:a9ce9ab8c954bf6979c2c57d10fd8a8ed"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a10dc8d8b91878b211c12a3e6b1bb38bb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a10dc8d8b91878b211c12a3e6b1bb38bb"></a>
-range_type </td><td class="memItemRight" valign="bottom"><b>range</b> (size_type grainsize=1)</td></tr>
-<tr class="separator:a10dc8d8b91878b211c12a3e6b1bb38bb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8698274a4ffb94bb0468c387ffdc2e56"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8698274a4ffb94bb0468c387ffdc2e56"></a>
-const_range_type </td><td class="memItemRight" valign="bottom"><b>range</b> (size_type grainsize=1) const </td></tr>
-<tr class="separator:a8698274a4ffb94bb0468c387ffdc2e56"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a38b7d6443502ee9f4c2374d34ea8d742"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a38b7d6443502ee9f4c2374d34ea8d742"></a>
-iterator </td><td class="memItemRight" valign="bottom"><b>begin</b> ()</td></tr>
-<tr class="separator:a38b7d6443502ee9f4c2374d34ea8d742"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afa85633d3fc7494f49728b4064db59f6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa85633d3fc7494f49728b4064db59f6"></a>
-iterator </td><td class="memItemRight" valign="bottom"><b>end</b> ()</td></tr>
-<tr class="separator:afa85633d3fc7494f49728b4064db59f6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a46aa6dc98653a88d410d0cfddd514f0d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a46aa6dc98653a88d410d0cfddd514f0d"></a>
-const_iterator </td><td class="memItemRight" valign="bottom"><b>begin</b> () const </td></tr>
-<tr class="separator:a46aa6dc98653a88d410d0cfddd514f0d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0ed8cd11a3a5c400d9bc11492d136dfd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0ed8cd11a3a5c400d9bc11492d136dfd"></a>
-const_iterator </td><td class="memItemRight" valign="bottom"><b>end</b> () const </td></tr>
-<tr class="separator:a0ed8cd11a3a5c400d9bc11492d136dfd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a01a1c3032bb193a5c4f37425adbe306c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a01a1c3032bb193a5c4f37425adbe306c"></a>
-std::pair< iterator, iterator > </td><td class="memItemRight" valign="bottom"><b>equal_range</b> (const Key &key)</td></tr>
-<tr class="separator:a01a1c3032bb193a5c4f37425adbe306c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af368c8d8f49a9a74706c9ed11f8fd7e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af368c8d8f49a9a74706c9ed11f8fd7e4"></a>
-std::pair< const_iterator, <br class="typebreak"/>
-const_iterator > </td><td class="memItemRight" valign="bottom"><b>equal_range</b> (const Key &key) const </td></tr>
-<tr class="separator:af368c8d8f49a9a74706c9ed11f8fd7e4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad2ce6da7cd62bc7425f0a29498332ab4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad2ce6da7cd62bc7425f0a29498332ab4"></a>
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#ad2ce6da7cd62bc7425f0a29498332ab4">size</a> () const </td></tr>
-<tr class="memdesc:ad2ce6da7cd62bc7425f0a29498332ab4"><td class="mdescLeft"> </td><td class="mdescRight">Number of items in table. <br/></td></tr>
-<tr class="separator:ad2ce6da7cd62bc7425f0a29498332ab4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5e05f2a1ca3accfb4252d7ee82d1e990"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e05f2a1ca3accfb4252d7ee82d1e990"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a5e05f2a1ca3accfb4252d7ee82d1e990">empty</a> () const </td></tr>
-<tr class="memdesc:a5e05f2a1ca3accfb4252d7ee82d1e990"><td class="mdescLeft"> </td><td class="mdescRight">True if <a class="el" href="a00043.html#ad2ce6da7cd62bc7425f0a29498332ab4" title="Number of items in table. ">size()</a>==0. <br/></td></tr>
-<tr class="separator:a5e05f2a1ca3accfb4252d7ee82d1e990"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aea0a0e5220a0dcb67da57d0280d36005"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aea0a0e5220a0dcb67da57d0280d36005"></a>
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#aea0a0e5220a0dcb67da57d0280d36005">max_size</a> () const </td></tr>
-<tr class="memdesc:aea0a0e5220a0dcb67da57d0280d36005"><td class="mdescLeft"> </td><td class="mdescRight">Upper bound on size. <br/></td></tr>
-<tr class="separator:aea0a0e5220a0dcb67da57d0280d36005"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa067a2a4db1d96f38555369a89deee64"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa067a2a4db1d96f38555369a89deee64"></a>
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#aa067a2a4db1d96f38555369a89deee64">bucket_count</a> () const </td></tr>
-<tr class="memdesc:aa067a2a4db1d96f38555369a89deee64"><td class="mdescLeft"> </td><td class="mdescRight">Returns the current number of buckets. <br/></td></tr>
-<tr class="separator:aa067a2a4db1d96f38555369a89deee64"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a121865c574f8ae5cae69ed3d6b7e0511"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a121865c574f8ae5cae69ed3d6b7e0511"></a>
-allocator_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a121865c574f8ae5cae69ed3d6b7e0511">get_allocator</a> () const </td></tr>
-<tr class="memdesc:a121865c574f8ae5cae69ed3d6b7e0511"><td class="mdescLeft"> </td><td class="mdescRight">return allocator object <br/></td></tr>
-<tr class="separator:a121865c574f8ae5cae69ed3d6b7e0511"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4c8edf603bc776a6c84c007702c1808e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c8edf603bc776a6c84c007702c1808e"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a4c8edf603bc776a6c84c007702c1808e">swap</a> (<a class="el" href="a00043.html">concurrent_hash_map</a> &table)</td></tr>
-<tr class="memdesc:a4c8edf603bc776a6c84c007702c1808e"><td class="mdescLeft"> </td><td class="mdescRight">swap two instances. Iterators are invalidated <br/></td></tr>
-<tr class="separator:a4c8edf603bc776a6c84c007702c1808e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac375d3884bf9c80efe56117757c822e7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac375d3884bf9c80efe56117757c822e7"></a>
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#ac375d3884bf9c80efe56117757c822e7">count</a> (const Key &key) const </td></tr>
-<tr class="memdesc:ac375d3884bf9c80efe56117757c822e7"><td class="mdescLeft"> </td><td class="mdescRight">Return count of items (0 or 1) <br/></td></tr>
-<tr class="separator:ac375d3884bf9c80efe56117757c822e7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a27a3f296dc170ae25f8e3fd9efa93cff"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a27a3f296dc170ae25f8e3fd9efa93cff">find</a> (<a class="el" href="a00054.html">const_accessor</a> &result, const Key &key) const </td></tr>
-<tr class="memdesc:a27a3f296dc170ae25f8e3fd9efa93cff"><td class="mdescLeft"> </td><td class="mdescRight">Find item and acquire a read lock on the item.  <a href="#a27a3f296dc170ae25f8e3fd9efa93cff">More...</a><br/></td></tr>
-<tr class="separator:a27a3f296dc170ae25f8e3fd9efa93cff"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6b61799e2018381b5ee4b78752a41483"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a6b61799e2018381b5ee4b78752a41483">find</a> (<a class="el" href="a00010.html">accessor</a> &result, const Key &key)</td></tr>
-<tr class="memdesc:a6b61799e2018381b5ee4b78752a41483"><td class="mdescLeft"> </td><td class="mdescRight">Find item and acquire a write lock on the item.  <a href="#a6b61799e2018381b5ee4b78752a41483">More...</a><br/></td></tr>
-<tr class="separator:a6b61799e2018381b5ee4b78752a41483"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aaebb10a9e9dcb24e63860caa745a281d"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#aaebb10a9e9dcb24e63860caa745a281d">insert</a> (<a class="el" href="a00054.html">const_accessor</a> &result, const Key &key)</td></tr>
-<tr class="memdesc:aaebb10a9e9dcb24e63860caa745a281d"><td class="mdescLeft"> </td><td class="mdescRight">Insert item (if not already present) and acquire a read lock on the item.  <a href="#aaebb10a9e9dcb24e63860caa745a281d">More...</a><br/></td></tr>
-<tr class="separator:aaebb10a9e9dcb24e63860caa745a281d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a766c6033c203e8f342501d85a7cf3405"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a766c6033c203e8f342501d85a7cf3405">insert</a> (<a class="el" href="a00010.html">accessor</a> &result, const Key &key)</td></tr>
-<tr class="memdesc:a766c6033c203e8f342501d85a7cf3405"><td class="mdescLeft"> </td><td class="mdescRight">Insert item (if not already present) and acquire a write lock on the item.  <a href="#a766c6033c203e8f342501d85a7cf3405">More...</a><br/></td></tr>
-<tr class="separator:a766c6033c203e8f342501d85a7cf3405"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae0b420cdb752e749790c8a7daa15c3c2"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#ae0b420cdb752e749790c8a7daa15c3c2">insert</a> (<a class="el" href="a00054.html">const_accessor</a> &result, const value_type &value)</td></tr>
-<tr class="memdesc:ae0b420cdb752e749790c8a7daa15c3c2"><td class="mdescLeft"> </td><td class="mdescRight">Insert item by copying if there is no such key present already and acquire a read lock on the item.  <a href="#ae0b420cdb752e749790c8a7daa15c3c2">More...</a><br/></td></tr>
-<tr class="separator:ae0b420cdb752e749790c8a7daa15c3c2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2047214e041b7674c3b83e204d0d6c6a"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a2047214e041b7674c3b83e204d0d6c6a">insert</a> (<a class="el" href="a00010.html">accessor</a> &result, const value_type &value)</td></tr>
-<tr class="memdesc:a2047214e041b7674c3b83e204d0d6c6a"><td class="mdescLeft"> </td><td class="mdescRight">Insert item by copying if there is no such key present already and acquire a write lock on the item.  <a href="#a2047214e041b7674c3b83e204d0d6c6a">More...</a><br/></td></tr>
-<tr class="separator:a2047214e041b7674c3b83e204d0d6c6a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8e39501f9edb3210504c9c4ca05384b7"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a8e39501f9edb3210504c9c4ca05384b7">insert</a> (const value_type &value)</td></tr>
-<tr class="memdesc:a8e39501f9edb3210504c9c4ca05384b7"><td class="mdescLeft"> </td><td class="mdescRight">Insert item by copying if there is no such key present already.  <a href="#a8e39501f9edb3210504c9c4ca05384b7">More...</a><br/></td></tr>
-<tr class="separator:a8e39501f9edb3210504c9c4ca05384b7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a446910c1ca4818bdb00f4ffa91b9108a"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a446910c1ca4818bdb00f4ffa91b9108a">insert</a> (<a class="el" href="a00054.html">const_accessor</a> &result, value_type &&value)</td></tr>
-<tr class="memdesc:a446910c1ca4818bdb00f4ffa91b9108a"><td class="mdescLeft"> </td><td class="mdescRight">Insert item by copying if there is no such key present already and acquire a read lock on the item.  <a href="#a446910c1ca4818bdb00f4ffa91b9108a">More...</a><br/></td></tr>
-<tr class="separator:a446910c1ca4818bdb00f4ffa91b9108a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a50c929e78ecfa36986c8821287665a70"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a50c929e78ecfa36986c8821287665a70">insert</a> (<a class="el" href="a00010.html">accessor</a> &result, value_type &&value)</td></tr>
-<tr class="memdesc:a50c929e78ecfa36986c8821287665a70"><td class="mdescLeft"> </td><td class="mdescRight">Insert item by copying if there is no such key present already and acquire a write lock on the item.  <a href="#a50c929e78ecfa36986c8821287665a70">More...</a><br/></td></tr>
-<tr class="separator:a50c929e78ecfa36986c8821287665a70"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5d3da283d2e74c7ff0ecb0dfd4d371fd"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a5d3da283d2e74c7ff0ecb0dfd4d371fd">insert</a> (value_type &&value)</td></tr>
-<tr class="memdesc:a5d3da283d2e74c7ff0ecb0dfd4d371fd"><td class="mdescLeft"> </td><td class="mdescRight">Insert item by copying if there is no such key present already.  <a href="#a5d3da283d2e74c7ff0ecb0dfd4d371fd">More...</a><br/></td></tr>
-<tr class="separator:a5d3da283d2e74c7ff0ecb0dfd4d371fd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a382178ea2f00f69096c91bcf76ae7913"><td class="memTemplParams" colspan="2">template<typename... Args> </td></tr>
-<tr class="memitem:a382178ea2f00f69096c91bcf76ae7913"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00043.html#a382178ea2f00f69096c91bcf76ae7913">emplace</a> (<a class="el" href="a00054.html">const_accessor</a> &result, Args &&...args)</td></tr>
-<tr class="memdesc:a382178ea2f00f69096c91bcf76ae7913"><td class="mdescLeft"> </td><td class="mdescRight">Insert item by copying if there is no such key present already and acquire a read lock on the item.  <a href="#a382178ea2f00f69096c91bcf76ae7913">More...</a><br/></td></tr>
-<tr class="separator:a382178ea2f00f69096c91bcf76ae7913"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a17e51c8864282c35aa4d23f22909cc4a"><td class="memTemplParams" colspan="2">template<typename... Args> </td></tr>
-<tr class="memitem:a17e51c8864282c35aa4d23f22909cc4a"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00043.html#a17e51c8864282c35aa4d23f22909cc4a">emplace</a> (<a class="el" href="a00010.html">accessor</a> &result, Args &&...args)</td></tr>
-<tr class="memdesc:a17e51c8864282c35aa4d23f22909cc4a"><td class="mdescLeft"> </td><td class="mdescRight">Insert item by copying if there is no such key present already and acquire a write lock on the item.  <a href="#a17e51c8864282c35aa4d23f22909cc4a">More...</a><br/></td></tr>
-<tr class="separator:a17e51c8864282c35aa4d23f22909cc4a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acbe1d0f3a87786a83a7021af2ef52ee0"><td class="memTemplParams" colspan="2">template<typename... Args> </td></tr>
-<tr class="memitem:acbe1d0f3a87786a83a7021af2ef52ee0"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00043.html#acbe1d0f3a87786a83a7021af2ef52ee0">emplace</a> (Args &&...args)</td></tr>
-<tr class="memdesc:acbe1d0f3a87786a83a7021af2ef52ee0"><td class="mdescLeft"> </td><td class="mdescRight">Insert item by copying if there is no such key present already.  <a href="#acbe1d0f3a87786a83a7021af2ef52ee0">More...</a><br/></td></tr>
-<tr class="separator:acbe1d0f3a87786a83a7021af2ef52ee0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab84dfd77316252cbf39c7ae89e365a00"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab84dfd77316252cbf39c7ae89e365a00"></a>
-template<typename I > </td></tr>
-<tr class="memitem:ab84dfd77316252cbf39c7ae89e365a00"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00043.html#ab84dfd77316252cbf39c7ae89e365a00">insert</a> (I first, I last)</td></tr>
-<tr class="memdesc:ab84dfd77316252cbf39c7ae89e365a00"><td class="mdescLeft"> </td><td class="mdescRight">Insert range [first, last) <br/></td></tr>
-<tr class="separator:ab84dfd77316252cbf39c7ae89e365a00"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a580fdba266e87106ad41470479f641d6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a580fdba266e87106ad41470479f641d6"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a580fdba266e87106ad41470479f641d6">insert</a> (std::initializer_list< value_type > il)</td></tr>
-<tr class="memdesc:a580fdba266e87106ad41470479f641d6"><td class="mdescLeft"> </td><td class="mdescRight">Insert initializer list. <br/></td></tr>
-<tr class="separator:a580fdba266e87106ad41470479f641d6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5144122dbb946d933b94a92117543b33"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a5144122dbb946d933b94a92117543b33">erase</a> (const Key &key)</td></tr>
-<tr class="memdesc:a5144122dbb946d933b94a92117543b33"><td class="mdescLeft"> </td><td class="mdescRight">Erase item.  <a href="#a5144122dbb946d933b94a92117543b33">More...</a><br/></td></tr>
-<tr class="separator:a5144122dbb946d933b94a92117543b33"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2ec6f95ed9beda9d32df56cdd45c1842"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a2ec6f95ed9beda9d32df56cdd45c1842">erase</a> (<a class="el" href="a00054.html">const_accessor</a> &item_accessor)</td></tr>
-<tr class="memdesc:a2ec6f95ed9beda9d32df56cdd45c1842"><td class="mdescLeft"> </td><td class="mdescRight">Erase item by <a class="el" href="a00054.html" title="Combines data access, locking, and garbage collection. ">const_accessor</a>.  <a href="#a2ec6f95ed9beda9d32df56cdd45c1842">More...</a><br/></td></tr>
-<tr class="separator:a2ec6f95ed9beda9d32df56cdd45c1842"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3ed0fbcc6cfd4db8242e100355ac1fa5"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a3ed0fbcc6cfd4db8242e100355ac1fa5">erase</a> (<a class="el" href="a00010.html">accessor</a> &item_accessor)</td></tr>
-<tr class="memdesc:a3ed0fbcc6cfd4db8242e100355ac1fa5"><td class="mdescLeft"> </td><td class="mdescRight">Erase item by accessor.  <a href="#a3ed0fbcc6cfd4db8242e100355ac1fa5">More...</a><br/></td></tr>
-<tr class="separator:a3ed0fbcc6cfd4db8242e100355ac1fa5"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-types"></a>
-Protected Types</h2></td></tr>
-<tr class="memitem:a81dddc5d509f7f074d84d9c38e83efb9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a81dddc5d509f7f074d84d9c38e83efb9"></a>
-typedef Allocator::template <br class="typebreak"/>
-rebind< <a class="el" href="a00100.html">node</a> >::other </td><td class="memItemRight" valign="bottom"><b>node_allocator_type</b></td></tr>
-<tr class="separator:a81dddc5d509f7f074d84d9c38e83efb9"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:aed0e0def29516d9ee7aab2192727b69b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed0e0def29516d9ee7aab2192727b69b"></a>
-void </td><td class="memItemRight" valign="bottom"><b>delete_node</b> (node_base *n)</td></tr>
-<tr class="separator:aed0e0def29516d9ee7aab2192727b69b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae44a70417f9674a2169f9a1fd437a3bd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae44a70417f9674a2169f9a1fd437a3bd"></a>
-<a class="el" href="a00100.html">node</a> * </td><td class="memItemRight" valign="bottom"><b>search_bucket</b> (const key_type &key, bucket *b) const </td></tr>
-<tr class="separator:ae44a70417f9674a2169f9a1fd437a3bd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1b57e036f82bc2b1ef1ede41b02d46b5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1b57e036f82bc2b1ef1ede41b02d46b5"></a>
-void </td><td class="memItemRight" valign="bottom"><b>rehash_bucket</b> (bucket *b_new, const hashcode_t h)</td></tr>
-<tr class="separator:a1b57e036f82bc2b1ef1ede41b02d46b5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2a319cf46fb9cf9a88aab6c0a20c98b3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2a319cf46fb9cf9a88aab6c0a20c98b3"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a2a319cf46fb9cf9a88aab6c0a20c98b3">lookup</a> (bool op_insert, const Key &key, const T *t, <a class="el" href="a00054.html">const_accessor</a> *result, bool write, <a class="el" href="a00100.html">node</a> *(*allocate_node)(node_allocator_type &, const Key &, const T *), <a class="el" href="a00100.html">node</a> *tmp_n=0)</td></tr>
-<tr class="memdesc:a2a319cf46fb9cf9a88aab6c0a20c98b3"><td class="mdescLeft"> </td><td class="mdescRight">Insert or find item and optionally acquire a lock on the item. <br/></td></tr>
-<tr class="separator:a2a319cf46fb9cf9a88aab6c0a20c98b3"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6204ad5c57618556931e4c90e1938d1e"><td class="memTemplParams" colspan="2"><a class="anchor" id="a6204ad5c57618556931e4c90e1938d1e"></a>
-template<typename Accessor > </td></tr>
-<tr class="memitem:a6204ad5c57618556931e4c90e1938d1e"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>generic_move_insert</b> (Accessor &&result, value_type &&value)</td></tr>
-<tr class="separator:a6204ad5c57618556931e4c90e1938d1e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a81c0a242bf8d4a210d74d551dbc61c18"><td class="memTemplParams" colspan="2"><a class="anchor" id="a81c0a242bf8d4a210d74d551dbc61c18"></a>
-template<typename Accessor , typename... Args> </td></tr>
-<tr class="memitem:a81c0a242bf8d4a210d74d551dbc61c18"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>generic_emplace</b> (Accessor &&result, Args &&...args)</td></tr>
-<tr class="separator:a81c0a242bf8d4a210d74d551dbc61c18"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6fec452b31b8f0e185dc2de64b7128b2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6fec452b31b8f0e185dc2de64b7128b2"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a6fec452b31b8f0e185dc2de64b7128b2">exclude</a> (<a class="el" href="a00054.html">const_accessor</a> &item_accessor)</td></tr>
-<tr class="memdesc:a6fec452b31b8f0e185dc2de64b7128b2"><td class="mdescLeft"> </td><td class="mdescRight">delete item by accessor <br/></td></tr>
-<tr class="separator:a6fec452b31b8f0e185dc2de64b7128b2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8603f5288db63ec35a16844427e97e42"><td class="memTemplParams" colspan="2"><a class="anchor" id="a8603f5288db63ec35a16844427e97e42"></a>
-template<typename I > </td></tr>
-<tr class="memitem:a8603f5288db63ec35a16844427e97e42"><td class="memTemplItemLeft" align="right" valign="top">std::pair< I, I > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00043.html#a8603f5288db63ec35a16844427e97e42">internal_equal_range</a> (const Key &key, I end) const </td></tr>
-<tr class="memdesc:a8603f5288db63ec35a16844427e97e42"><td class="mdescLeft"> </td><td class="mdescRight">Returns an iterator for an item defined by the key, or for the next item after it (if upper==true) <br/></td></tr>
-<tr class="separator:a8603f5288db63ec35a16844427e97e42"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0bc3593f82b3b4f9839fc051780212ab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0bc3593f82b3b4f9839fc051780212ab"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a0bc3593f82b3b4f9839fc051780212ab">internal_copy</a> (const <a class="el" href="a00043.html">concurrent_hash_map</a> &source)</td></tr>
-<tr class="memdesc:a0bc3593f82b3b4f9839fc051780212ab"><td class="mdescLeft"> </td><td class="mdescRight">Copy "source" to *this, where *this must start out empty. <br/></td></tr>
-<tr class="separator:a0bc3593f82b3b4f9839fc051780212ab"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a31e69cc4fd5adafb379e7c6de5660912"><td class="memTemplParams" colspan="2"><a class="anchor" id="a31e69cc4fd5adafb379e7c6de5660912"></a>
-template<typename I > </td></tr>
-<tr class="memitem:a31e69cc4fd5adafb379e7c6de5660912"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>internal_copy</b> (I first, I last)</td></tr>
-<tr class="separator:a31e69cc4fd5adafb379e7c6de5660912"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acbb5b18c097fb32f264b7b5fe8d9fdd4"><td class="memItemLeft" align="right" valign="top">const_pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#acbb5b18c097fb32f264b7b5fe8d9fdd4">internal_fast_find</a> (const Key &key) const </td></tr>
-<tr class="memdesc:acbb5b18c097fb32f264b7b5fe8d9fdd4"><td class="mdescLeft"> </td><td class="mdescRight">Fast find when no concurrent erasure is used. For internal use inside TBB only!  <a href="#acbb5b18c097fb32f264b7b5fe8d9fdd4">More...</a><br/></td></tr>
-<tr class="separator:acbb5b18c097fb32f264b7b5fe8d9fdd4"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-static-methods"></a>
-Static Protected Member Functions</h2></td></tr>
-<tr class="memitem:aa220373171ca2feccb74c23823c6329f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa220373171ca2feccb74c23823c6329f"></a>
-static <a class="el" href="a00100.html">node</a> * </td><td class="memItemRight" valign="bottom"><b>allocate_node_copy_construct</b> (node_allocator_type &allocator, const Key &key, const T *t)</td></tr>
-<tr class="separator:aa220373171ca2feccb74c23823c6329f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a59416689b95d20f4d69e43a23aa4f300"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59416689b95d20f4d69e43a23aa4f300"></a>
-static <a class="el" href="a00100.html">node</a> * </td><td class="memItemRight" valign="bottom"><b>allocate_node_move_construct</b> (node_allocator_type &allocator, const Key &key, const T *t)</td></tr>
-<tr class="separator:a59416689b95d20f4d69e43a23aa4f300"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8e8388c1d433042b67d3cc12181189c3"><td class="memTemplParams" colspan="2"><a class="anchor" id="a8e8388c1d433042b67d3cc12181189c3"></a>
-template<typename... Args> </td></tr>
-<tr class="memitem:a8e8388c1d433042b67d3cc12181189c3"><td class="memTemplItemLeft" align="right" valign="top">static <a class="el" href="a00100.html">node</a> * </td><td class="memTemplItemRight" valign="bottom"><b>allocate_node_emplace_construct</b> (node_allocator_type &allocator, Args &&...args)</td></tr>
-<tr class="separator:a8e8388c1d433042b67d3cc12181189c3"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1f92f68816357df14d30650b29ab94cb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1f92f68816357df14d30650b29ab94cb"></a>
-static <a class="el" href="a00100.html">node</a> * </td><td class="memItemRight" valign="bottom"><b>allocate_node_default_construct</b> (node_allocator_type &allocator, const Key &key, const T *)</td></tr>
-<tr class="separator:a1f92f68816357df14d30650b29ab94cb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a684cc0d3eb4b6ba8b88a14189c40bb20"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a684cc0d3eb4b6ba8b88a14189c40bb20"></a>
-static <a class="el" href="a00100.html">node</a> * </td><td class="memItemRight" valign="bottom"><b>do_not_allocate_node</b> (node_allocator_type &, const Key &, const T *)</td></tr>
-<tr class="separator:a684cc0d3eb4b6ba8b88a14189c40bb20"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
-Protected Attributes</h2></td></tr>
-<tr class="memitem:a2f3f082b2719a9e3c3c15a51a9564202"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2f3f082b2719a9e3c3c15a51a9564202"></a>
-node_allocator_type </td><td class="memItemRight" valign="bottom"><b>my_allocator</b></td></tr>
-<tr class="separator:a2f3f082b2719a9e3c3c15a51a9564202"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae67c3c723768e7e396104f84577f7240"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae67c3c723768e7e396104f84577f7240"></a>
-HashCompare </td><td class="memItemRight" valign="bottom"><b>my_hash_compare</b></td></tr>
-<tr class="separator:ae67c3c723768e7e396104f84577f7240"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:a0ecadabdc31088d7bace5a0b6e5ee3f9"><td class="memTemplParams" colspan="2"><a class="anchor" id="a0ecadabdc31088d7bace5a0b6e5ee3f9"></a>
-template<typename Container , typename Value > </td></tr>
-<tr class="memitem:a0ecadabdc31088d7bace5a0b6e5ee3f9"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::hash_map_iterator</b></td></tr>
-<tr class="separator:a0ecadabdc31088d7bace5a0b6e5ee3f9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad49112156111ee1b85be9f4b89e410ca"><td class="memTemplParams" colspan="2"><a class="anchor" id="ad49112156111ee1b85be9f4b89e410ca"></a>
-template<typename I > </td></tr>
-<tr class="memitem:ad49112156111ee1b85be9f4b89e410ca"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::hash_map_range</b></td></tr>
-<tr class="separator:ad49112156111ee1b85be9f4b89e410ca"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a584bf754a8408612d4bfd33a3eafd80d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a584bf754a8408612d4bfd33a3eafd80d"></a>
-class </td><td class="memItemRight" valign="bottom"><b>const_accessor</b></td></tr>
-<tr class="separator:a584bf754a8408612d4bfd33a3eafd80d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6e234c756e22e65a3c99771fdeb67d7a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6e234c756e22e65a3c99771fdeb67d7a"></a>
-<a class="el" href="a00054.html">const_accessor</a> * </td><td class="memItemRight" valign="bottom"><b>accessor_location</b> (<a class="el" href="a00011.html">accessor_not_used</a> const &)</td></tr>
-<tr class="separator:a6e234c756e22e65a3c99771fdeb67d7a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0216633e60539f42cf9d645d3f3b7117"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0216633e60539f42cf9d645d3f3b7117"></a>
-<a class="el" href="a00054.html">const_accessor</a> * </td><td class="memItemRight" valign="bottom"><b>accessor_location</b> (<a class="el" href="a00054.html">const_accessor</a> &a)</td></tr>
-<tr class="separator:a0216633e60539f42cf9d645d3f3b7117"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afa491682f70c12a8c7f783a427791ce4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa491682f70c12a8c7f783a427791ce4"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>is_write_access_needed</b> (<a class="el" href="a00010.html">accessor</a> const &)</td></tr>
-<tr class="separator:afa491682f70c12a8c7f783a427791ce4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a34c835f5e1b689d1fbbff61519c0ef5f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a34c835f5e1b689d1fbbff61519c0ef5f"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>is_write_access_needed</b> (<a class="el" href="a00054.html">const_accessor</a> const &)</td></tr>
-<tr class="separator:a34c835f5e1b689d1fbbff61519c0ef5f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7b4bdfdc062d155dc1ace8cc18acc8d6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b4bdfdc062d155dc1ace8cc18acc8d6"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>is_write_access_needed</b> (<a class="el" href="a00011.html">accessor_not_used</a> const &)</td></tr>
-<tr class="separator:a7b4bdfdc062d155dc1ace8cc18acc8d6"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename Key, typename T, typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >><br/>
-class tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></h3>
-
-<p>Unordered map from Key to T. </p>
-<pre class="fragment">concurrent_hash_map is associative container with concurrent access.
-</pre><dl class="section user"><dt>Compatibility</dt><dd>The class meets all Container Requirements from C++ Standard (See ISO/IEC 14882:2003(E), clause 23.1).</dd></dl>
-<dl class="section user"><dt>Exception Safety</dt><dd><ul>
-<li>Hash function is not permitted to throw an exception. User-defined types Key and T are forbidden from throwing an exception in destructors.</li>
-<li>If exception happens during <a class="el" href="a00043.html#aaebb10a9e9dcb24e63860caa745a281d" title="Insert item (if not already present) and acquire a read lock on the item. ">insert()</a> operations, it has no effect (unless exception raised by HashCompare::hash() function during grow_segment).</li>
-<li>If exception happens during <a class="el" href="a00043.html#a63e01b1f79c287ae0257ccfd483fd90a" title="Assignment. ">operator=()</a> operation, the container can have a part of source items, and methods <a class="el" href="a00043.html#ad2ce6da7cd62bc7425f0a29498332ab4" title="Number of items in table. ">size()</a> and <a class="el" href="a00043.html#a5e05f2a1ca3accfb4252d7ee82d1e990" title="True if size()==0. ">empty()</a> can return wrong results.</li>
-</ul>
-</dd></dl>
-<dl class="section user"><dt>Changes since TBB 2.1</dt><dd><ul>
-<li>Replaced internal algorithm and data structure. Patent is pending.</li>
-<li>Added buckets number argument for constructor</li>
-</ul>
-</dd></dl>
-<dl class="section user"><dt>Changes since TBB 2.0</dt><dd><ul>
-<li>Fixed exception-safety</li>
-<li>Added template argument for allocator</li>
-<li>Added allocator argument in constructors</li>
-<li>Added constructor from a range of iterators</li>
-<li>Added several new overloaded <a class="el" href="a00043.html#aaebb10a9e9dcb24e63860caa745a281d" title="Insert item (if not already present) and acquire a read lock on the item. ">insert()</a> methods</li>
-<li>Added <a class="el" href="a00043.html#a121865c574f8ae5cae69ed3d6b7e0511" title="return allocator object ">get_allocator()</a></li>
-<li>Added <a class="el" href="a00043.html#a4c8edf603bc776a6c84c007702c1808e" title="swap two instances. Iterators are invalidated ">swap()</a></li>
-<li>Added <a class="el" href="a00043.html#ac375d3884bf9c80efe56117757c822e7" title="Return count of items (0 or 1) ">count()</a></li>
-<li>Added overloaded <a class="el" href="a00043.html#a3ed0fbcc6cfd4db8242e100355ac1fa5" title="Erase item by accessor. ">erase(accessor &)</a> and <a class="el" href="a00043.html#a2ec6f95ed9beda9d32df56cdd45c1842" title="Erase item by const_accessor. ">erase(const_accessor&)</a></li>
-<li>Added equal_range() [const]</li>
-<li>Added [const_]pointer, [const_]reference, and allocator_type types</li>
-<li>Added global functions: operator==(), operator!=(), and <a class="el" href="a00043.html#a4c8edf603bc776a6c84c007702c1808e" title="swap two instances. Iterators are invalidated ">swap()</a> </li>
-</ul>
-</dd></dl>
-</div><h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="a382178ea2f00f69096c91bcf76ae7913"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
-<div class="memtemplate">
-template<typename... Args> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::emplace </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00054.html">const_accessor</a> & </td>
-          <td class="paramname"><em>result</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">Args &&... </td>
-          <td class="paramname"><em>args</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Insert item by copying if there is no such key present already and acquire a read lock on the item. </p>
-<p>Returns true if item is new. </p>
-
-</div>
-</div>
-<a class="anchor" id="a17e51c8864282c35aa4d23f22909cc4a"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
-<div class="memtemplate">
-template<typename... Args> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::emplace </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00010.html">accessor</a> & </td>
-          <td class="paramname"><em>result</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">Args &&... </td>
-          <td class="paramname"><em>args</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Insert item by copying if there is no such key present already and acquire a write lock on the item. </p>
-<p>Returns true if item is new. </p>
-
-</div>
-</div>
-<a class="anchor" id="acbe1d0f3a87786a83a7021af2ef52ee0"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
-<div class="memtemplate">
-template<typename... Args> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::emplace </td>
-          <td>(</td>
-          <td class="paramtype">Args &&... </td>
-          <td class="paramname"><em>args</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
+<tr class="memitem:afa7c1f095ac1f56c7811811aabe6b77c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa7c1f095ac1f56c7811811aabe6b77c"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_multiset</b> (size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())</td></tr>
+<tr class="separator:afa7c1f095ac1f56c7811811aabe6b77c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adf8c095a7be6913dd96e22a6ce9af187"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adf8c095a7be6913dd96e22a6ce9af187"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_multiset</b> (const Allocator &a)</td></tr>
+<tr class="separator:adf8c095a7be6913dd96e22a6ce9af187"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2eede1ccad9975aac7acbffbd991e26c"><td class="memTemplParams" colspan="2"><a class="anchor" id="a2eede1ccad9975aac7acbffbd991e26c"></a>
+template<typename Iterator > </td></tr>
+<tr class="memitem:a2eede1ccad9975aac7acbffbd991e26c"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>concurrent_unordered_multiset</b> (Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())</td></tr>
+<tr class="separator:a2eede1ccad9975aac7acbffbd991e26c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a15631f048043195863c66bad6533bccb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15631f048043195863c66bad6533bccb"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a15631f048043195863c66bad6533bccb">concurrent_unordered_multiset</a> (std::initializer_list< value_type > il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())</td></tr>
+<tr class="memdesc:a15631f048043195863c66bad6533bccb"><td class="mdescLeft"> </td><td class="mdescRight">Constructor from initializer_list. <br/></td></tr>
+<tr class="separator:a15631f048043195863c66bad6533bccb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3110fb1a6f8e2a3071d2acbe4b7b154b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3110fb1a6f8e2a3071d2acbe4b7b154b"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_multiset</b> (const <a class="el" href="a00043.html">concurrent_unordered_multiset</a> &table)</td></tr>
+<tr class="separator:a3110fb1a6f8e2a3071d2acbe4b7b154b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac1fb116ee3fdf6c6c810fe21eb01e209"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac1fb116ee3fdf6c6c810fe21eb01e209"></a>
+<a class="el" href="a00043.html">concurrent_unordered_multiset</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00043.html">concurrent_unordered_multiset</a> &table)</td></tr>
+<tr class="separator:ac1fb116ee3fdf6c6c810fe21eb01e209"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeb435d8d31e95357c2f59656ec96dbbb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeb435d8d31e95357c2f59656ec96dbbb"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_multiset</b> (<a class="el" href="a00043.html">concurrent_unordered_multiset</a> &&table)</td></tr>
+<tr class="separator:aeb435d8d31e95357c2f59656ec96dbbb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab6c980c4bf29824a52610d94e6597b28"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab6c980c4bf29824a52610d94e6597b28"></a>
+<a class="el" href="a00043.html">concurrent_unordered_multiset</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="a00043.html">concurrent_unordered_multiset</a> &&table)</td></tr>
+<tr class="separator:ab6c980c4bf29824a52610d94e6597b28"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaa0a295004627bb5473b4371c6e20c80"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaa0a295004627bb5473b4371c6e20c80"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_multiset</b> (<a class="el" href="a00043.html">concurrent_unordered_multiset</a> &&table, const Allocator &a)</td></tr>
+<tr class="separator:aaa0a295004627bb5473b4371c6e20c80"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a229089da66522fd4f3d77e9f57e19fbb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a229089da66522fd4f3d77e9f57e19fbb"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_multiset</b> (const <a class="el" href="a00043.html">concurrent_unordered_multiset</a> &table, const Allocator &a)</td></tr>
+<tr class="separator:a229089da66522fd4f3d77e9f57e19fbb"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-</div><div class="memdoc">
-
-<p>Insert item by copying if there is no such key present already. </p>
-<p>Returns true if item is inserted. </p>
-
-</div>
-</div>
-<a class="anchor" id="a5144122dbb946d933b94a92117543b33"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key , typename T , typename HashCompare , typename A > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::erase </td>
-          <td>(</td>
-          <td class="paramtype">const Key & </td>
-          <td class="paramname"><em>key</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Erase item. </p>
-<p>Return true if item was erased by particularly this call. </p>
-
-<p>References <a class="el" href="a00029.html#aaa8167e2961330435fd23eb92127805c">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor::is_writer()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a2ec6f95ed9beda9d32df56cdd45c1842"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::erase </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00054.html">const_accessor</a> & </td>
-          <td class="paramname"><em>item_accessor</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Erase item by <a class="el" href="a00054.html" title="Combines data access, locking, and garbage collection. ">const_accessor</a>. </p>
-<p>Return true if item was erased by particularly this call. </p>
-
-</div>
-</div>
-<a class="anchor" id="a3ed0fbcc6cfd4db8242e100355ac1fa5"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::erase </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00010.html">accessor</a> & </td>
-          <td class="paramname"><em>item_accessor</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Erase item by accessor. </p>
-<p>Return true if item was erased by particularly this call. </p>
-
-</div>
-</div>
-<a class="anchor" id="a27a3f296dc170ae25f8e3fd9efa93cff"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::find </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00054.html">const_accessor</a> & </td>
-          <td class="paramname"><em>result</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Key & </td>
-          <td class="paramname"><em>key</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Find item and acquire a read lock on the item. </p>
-<p>Return true if item is found, false otherwise. </p>
-
-<p>References <a class="el" href="a00054.html#a18390cb369369d72bdf7c867755b5190">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor::release()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a6b61799e2018381b5ee4b78752a41483"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::find </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00010.html">accessor</a> & </td>
-          <td class="paramname"><em>result</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Key & </td>
-          <td class="paramname"><em>key</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Find item and acquire a write lock on the item. </p>
-<p>Return true if item is found, false otherwise. </p>
-
-<p>References <a class="el" href="a00054.html#a18390cb369369d72bdf7c867755b5190">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor::release()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aaebb10a9e9dcb24e63860caa745a281d"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00054.html">const_accessor</a> & </td>
-          <td class="paramname"><em>result</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Key & </td>
-          <td class="paramname"><em>key</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Insert item (if not already present) and acquire a read lock on the item. </p>
-<p>Returns true if item is new. </p>
-
-<p>References <a class="el" href="a00054.html#a18390cb369369d72bdf7c867755b5190">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor::release()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a766c6033c203e8f342501d85a7cf3405"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00010.html">accessor</a> & </td>
-          <td class="paramname"><em>result</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Key & </td>
-          <td class="paramname"><em>key</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Insert item (if not already present) and acquire a write lock on the item. </p>
-<p>Returns true if item is new. </p>
-
-<p>References <a class="el" href="a00054.html#a18390cb369369d72bdf7c867755b5190">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor::release()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ae0b420cdb752e749790c8a7daa15c3c2"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00054.html">const_accessor</a> & </td>
-          <td class="paramname"><em>result</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const value_type & </td>
-          <td class="paramname"><em>value</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Insert item by copying if there is no such key present already and acquire a read lock on the item. </p>
-<p>Returns true if item is new. </p>
-
-<p>References <a class="el" href="a00054.html#a18390cb369369d72bdf7c867755b5190">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor::release()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a2047214e041b7674c3b83e204d0d6c6a"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00010.html">accessor</a> & </td>
-          <td class="paramname"><em>result</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const value_type & </td>
-          <td class="paramname"><em>value</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Insert item by copying if there is no such key present already and acquire a write lock on the item. </p>
-<p>Returns true if item is new. </p>
-
-<p>References <a class="el" href="a00054.html#a18390cb369369d72bdf7c867755b5190">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor::release()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a8e39501f9edb3210504c9c4ca05384b7"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
-          <td>(</td>
-          <td class="paramtype">const value_type & </td>
-          <td class="paramname"><em>value</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Insert item by copying if there is no such key present already. </p>
-<p>Returns true if item is inserted. </p>
-
-</div>
-</div>
-<a class="anchor" id="a446910c1ca4818bdb00f4ffa91b9108a"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00054.html">const_accessor</a> & </td>
-          <td class="paramname"><em>result</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">value_type && </td>
-          <td class="paramname"><em>value</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Insert item by copying if there is no such key present already and acquire a read lock on the item. </p>
-<p>Returns true if item is new. </p>
-
-</div>
-</div>
-<a class="anchor" id="a50c929e78ecfa36986c8821287665a70"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00010.html">accessor</a> & </td>
-          <td class="paramname"><em>result</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">value_type && </td>
-          <td class="paramname"><em>value</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Insert item by copying if there is no such key present already and acquire a write lock on the item. </p>
-<p>Returns true if item is new. </p>
-
-</div>
-</div>
-<a class="anchor" id="a5d3da283d2e74c7ff0ecb0dfd4d371fd"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
-          <td>(</td>
-          <td class="paramtype">value_type && </td>
-          <td class="paramname"><em>value</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Insert item by copying if there is no such key present already. </p>
-<p>Returns true if item is inserted. </p>
-
-</div>
-</div>
-<a class="anchor" id="acbb5b18c097fb32f264b7b5fe8d9fdd4"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key , typename T , typename HashCompare  = tbb_hash_compare<Key>, typename A  = tbb_allocator<std::pair<Key, T> >> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">const_pointer <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::internal_fast_find </td>
-          <td>(</td>
-          <td class="paramtype">const Key & </td>
-          <td class="paramname"><em>key</em>)</td><td></td>
-          <td> const</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Fast find when no concurrent erasure is used. For internal use inside TBB only! </p>
-<p>Return pointer to item with given key, or NULL if no such item exists. Must not be called concurrently with erasure operations. </p>
-
-</div>
-</div>
-<a class="anchor" id="adf1fa9470c605731063e5949f0418eb7"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key , typename T , typename HashCompare , typename A > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, A >::rehash </td>
-          <td>(</td>
-          <td class="paramtype">size_type </td>
-          <td class="paramname"><em>n</em> = <code>0</code>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Rehashes and optionally resizes the whole table. </p>
-<p>Useful to optimize performance before or after concurrent operations. Also enables using of <a class="el" href="a00043.html#a27a3f296dc170ae25f8e3fd9efa93cff" title="Find item and acquire a read lock on the item. ">find()</a> and <a class="el" href="a00043.html#ac375d3884bf9c80efe56117757c822e7" title="Return count of items (0 or 1) ">count()</a> concurrent methods in serial context. </p>
-
-</div>
-</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>concurrent_hash_map.h</li>
+<li>concurrent_unordered_set.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00043.png b/doc/html/a00043.png
index 3f0a8f2..3ef6d19 100644
Binary files a/doc/html/a00043.png and b/doc/html/a00043.png differ
diff --git a/doc/html/a00044.html b/doc/html/a00044.html
index 1e1d4ee..ed261c2 100644
--- a/doc/html/a00044.html
+++ b/doc/html/a00044.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type > Class Template Reference</title>
+<title>tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,57 +33,123 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00044.html">concurrent_lru_cache</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00044.html">concurrent_unordered_set</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#friends">Friends</a> |
-<a href="a00391.html">List of all members</a>  </div>
+<a href="a00367.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type > Class Template Reference</div>  </div>
+<div class="title">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 <div class="dynheader">
-Inheritance diagram for tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type >:</div>
+Inheritance diagram for tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00044.png" usemap="#tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type >_map" alt=""/>
-  <map id="tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type >_map" name="tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type >_map">
+  <img src="a00044.png" usemap="#tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >_map" alt=""/>
+  <map id="tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >_map" name="tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >_map">
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:ac498dc4d73a75cbc0d50a15622f06e13"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac498dc4d73a75cbc0d50a15622f06e13"></a>
-typedef handle_object </td><td class="memItemRight" valign="bottom"><b>handle</b></td></tr>
-<tr class="separator:ac498dc4d73a75cbc0d50a15622f06e13"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afad91155e1803ee686e5f42637594e7b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afad91155e1803ee686e5f42637594e7b"></a>
+typedef Key </td><td class="memItemRight" valign="bottom"><b>key_type</b></td></tr>
+<tr class="separator:afad91155e1803ee686e5f42637594e7b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a461fe414bf3ae73e7cc57e851ff592e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a461fe414bf3ae73e7cc57e851ff592e4"></a>
+typedef base_type::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+<tr class="separator:a461fe414bf3ae73e7cc57e851ff592e4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3a64703b55d07509d5c88810c2342ba5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3a64703b55d07509d5c88810c2342ba5"></a>
+typedef Key </td><td class="memItemRight" valign="bottom"><b>mapped_type</b></td></tr>
+<tr class="separator:a3a64703b55d07509d5c88810c2342ba5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6952de8a7ff93025c1065bb3e729da72"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6952de8a7ff93025c1065bb3e729da72"></a>
+typedef Hasher </td><td class="memItemRight" valign="bottom"><b>hasher</b></td></tr>
+<tr class="separator:a6952de8a7ff93025c1065bb3e729da72"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a376a7355aa091fff6a30689141407acd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a376a7355aa091fff6a30689141407acd"></a>
+typedef Key_equality </td><td class="memItemRight" valign="bottom"><b>key_equal</b></td></tr>
+<tr class="separator:a376a7355aa091fff6a30689141407acd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acc450473249e39658c46596d8252eef0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acc450473249e39658c46596d8252eef0"></a>
+typedef hash_compare </td><td class="memItemRight" valign="bottom"><b>key_compare</b></td></tr>
+<tr class="separator:acc450473249e39658c46596d8252eef0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2010e490e8bfb13d9b969ec2fd5e4de4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2010e490e8bfb13d9b969ec2fd5e4de4"></a>
+typedef base_type::allocator_type </td><td class="memItemRight" valign="bottom"><b>allocator_type</b></td></tr>
+<tr class="separator:a2010e490e8bfb13d9b969ec2fd5e4de4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5a8c52d4a2b57b9b4b5d889e96d88f44"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5a8c52d4a2b57b9b4b5d889e96d88f44"></a>
+typedef base_type::pointer </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+<tr class="separator:a5a8c52d4a2b57b9b4b5d889e96d88f44"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a281276279a33ef1c5dfba5c196118ae7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a281276279a33ef1c5dfba5c196118ae7"></a>
+typedef base_type::const_pointer </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+<tr class="separator:a281276279a33ef1c5dfba5c196118ae7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aec3d473d0fa601d51f13efe605cd9862"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aec3d473d0fa601d51f13efe605cd9862"></a>
+typedef base_type::reference </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+<tr class="separator:aec3d473d0fa601d51f13efe605cd9862"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab7da53912d0deffca91618b73ed4995f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab7da53912d0deffca91618b73ed4995f"></a>
+typedef base_type::const_reference </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
+<tr class="separator:ab7da53912d0deffca91618b73ed4995f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5808a50995fc228f114c3c93aeddf331"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5808a50995fc228f114c3c93aeddf331"></a>
+typedef base_type::size_type </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
+<tr class="separator:a5808a50995fc228f114c3c93aeddf331"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7aaed1937820a90cb657a824e1391c1f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7aaed1937820a90cb657a824e1391c1f"></a>
+typedef base_type::difference_type </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
+<tr class="separator:a7aaed1937820a90cb657a824e1391c1f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abb76557f1755f96dc2e78728cb231e57"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abb76557f1755f96dc2e78728cb231e57"></a>
+typedef base_type::iterator </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+<tr class="separator:abb76557f1755f96dc2e78728cb231e57"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a983d10264bc785a59b11dc94001e0042"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a983d10264bc785a59b11dc94001e0042"></a>
+typedef base_type::const_iterator </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
+<tr class="separator:a983d10264bc785a59b11dc94001e0042"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acb12b4b1df9a7108a5193b0d3bbfc677"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acb12b4b1df9a7108a5193b0d3bbfc677"></a>
+typedef base_type::iterator </td><td class="memItemRight" valign="bottom"><b>local_iterator</b></td></tr>
+<tr class="separator:acb12b4b1df9a7108a5193b0d3bbfc677"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af111bc738ee2a1b4b1cf2967a1252322"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af111bc738ee2a1b4b1cf2967a1252322"></a>
+typedef base_type::const_iterator </td><td class="memItemRight" valign="bottom"><b>const_local_iterator</b></td></tr>
+<tr class="separator:af111bc738ee2a1b4b1cf2967a1252322"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:ad4c0b512bb4ad5109eaae1519ba06d98"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad4c0b512bb4ad5109eaae1519ba06d98"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_lru_cache</b> (value_function_type f, std::size_t number_of_lru_history_items)</td></tr>
-<tr class="separator:ad4c0b512bb4ad5109eaae1519ba06d98"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a632c3911a55cfda997acce279c471ec3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a632c3911a55cfda997acce279c471ec3"></a>
-handle_object </td><td class="memItemRight" valign="bottom"><b>operator[]</b> (key_type k)</td></tr>
-<tr class="separator:a632c3911a55cfda997acce279c471ec3"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:ab9fb998ff3f90c4dc7cefd09f8ff1365"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab9fb998ff3f90c4dc7cefd09f8ff1365"></a>
-class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::aggregating_functor< self_type, aggregated_operation_type ></b></td></tr>
-<tr class="separator:ab9fb998ff3f90c4dc7cefd09f8ff1365"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aad5e3bd7fa156e5d8aa81a8ff560d84e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad5e3bd7fa156e5d8aa81a8ff560d84e"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_set</b> (size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())</td></tr>
+<tr class="separator:aad5e3bd7fa156e5d8aa81a8ff560d84e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2d307ae4ebb3e2d46b0a75713824d109"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2d307ae4ebb3e2d46b0a75713824d109"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_set</b> (const Allocator &a)</td></tr>
+<tr class="separator:a2d307ae4ebb3e2d46b0a75713824d109"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afd4bc55194c4473e81398d8456a5c68a"><td class="memTemplParams" colspan="2"><a class="anchor" id="afd4bc55194c4473e81398d8456a5c68a"></a>
+template<typename Iterator > </td></tr>
+<tr class="memitem:afd4bc55194c4473e81398d8456a5c68a"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>concurrent_unordered_set</b> (Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())</td></tr>
+<tr class="separator:afd4bc55194c4473e81398d8456a5c68a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6f6d5ecff239ff13000848e925904fe7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6f6d5ecff239ff13000848e925904fe7"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00044.html#a6f6d5ecff239ff13000848e925904fe7">concurrent_unordered_set</a> (std::initializer_list< value_type > il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())</td></tr>
+<tr class="memdesc:a6f6d5ecff239ff13000848e925904fe7"><td class="mdescLeft"> </td><td class="mdescRight">Constructor from initializer_list. <br/></td></tr>
+<tr class="separator:a6f6d5ecff239ff13000848e925904fe7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac3c68d5286d6ca29fba2b38c59bdbc66"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac3c68d5286d6ca29fba2b38c59bdbc66"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_set</b> (const <a class="el" href="a00044.html">concurrent_unordered_set</a> &table)</td></tr>
+<tr class="separator:ac3c68d5286d6ca29fba2b38c59bdbc66"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a39097dddf99fd057919197b8293bd807"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a39097dddf99fd057919197b8293bd807"></a>
+<a class="el" href="a00044.html">concurrent_unordered_set</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00044.html">concurrent_unordered_set</a> &table)</td></tr>
+<tr class="separator:a39097dddf99fd057919197b8293bd807"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9dde7a48af7449fde97d4449691207c5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9dde7a48af7449fde97d4449691207c5"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_set</b> (<a class="el" href="a00044.html">concurrent_unordered_set</a> &&table)</td></tr>
+<tr class="separator:a9dde7a48af7449fde97d4449691207c5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a49ad03a5e20f90beac704325aaa6567f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a49ad03a5e20f90beac704325aaa6567f"></a>
+<a class="el" href="a00044.html">concurrent_unordered_set</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="a00044.html">concurrent_unordered_set</a> &&table)</td></tr>
+<tr class="separator:a49ad03a5e20f90beac704325aaa6567f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6ef0de826333371f1e9cb33349b35baf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6ef0de826333371f1e9cb33349b35baf"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_set</b> (<a class="el" href="a00044.html">concurrent_unordered_set</a> &&table, const Allocator &a)</td></tr>
+<tr class="separator:a6ef0de826333371f1e9cb33349b35baf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aecea62fe5c8beab0d7907dbc33ef583f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aecea62fe5c8beab0d7907dbc33ef583f"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_set</b> (const <a class="el" href="a00044.html">concurrent_unordered_set</a> &table, const Allocator &a)</td></tr>
+<tr class="separator:aecea62fe5c8beab0d7907dbc33ef583f"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>concurrent_lru_cache.h</li>
+<li>concurrent_unordered_set.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00044.png b/doc/html/a00044.png
index 856b3af..9f9a099 100644
Binary files a/doc/html/a00044.png and b/doc/html/a00044.png differ
diff --git a/doc/html/a00045.html b/doc/html/a00045.html
index 01f4bce..733bb7f 100644
--- a/doc/html/a00045.html
+++ b/doc/html/a00045.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface5::concurrent_priority_queue< T, Compare, A > Class Template Reference</title>
+<title>tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,571 +33,65 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00045.html">concurrent_priority_queue</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00045.html">concurrent_unordered_set_traits</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="a00375.html">List of all members</a>  </div>
+<a href="#pro-types">Protected Types</a> |
+<a href="#pro-methods">Protected Member Functions</a> |
+<a href="#pro-static-methods">Static Protected Member Functions</a> |
+<a href="#pro-attribs">Protected Attributes</a> |
+<a href="a00366.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_priority_queue< T, Compare, A > Class Template Reference</div>  </div>
+<div class="title">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Concurrent priority queue.  
- <a href="a00045.html#details">More...</a></p>
-
-<p><code>#include <concurrent_priority_queue.h></code></p>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a2c75d97ae429019363ab6fd1a872512e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c75d97ae429019363ab6fd1a872512e"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html#a2c75d97ae429019363ab6fd1a872512e">value_type</a></td></tr>
-<tr class="memdesc:a2c75d97ae429019363ab6fd1a872512e"><td class="mdescLeft"> </td><td class="mdescRight">Element type in the queue. <br/></td></tr>
-<tr class="separator:a2c75d97ae429019363ab6fd1a872512e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae4b7ed2ddc8ec6cc910f935c9d299c7a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae4b7ed2ddc8ec6cc910f935c9d299c7a"></a>
-typedef T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html#ae4b7ed2ddc8ec6cc910f935c9d299c7a">reference</a></td></tr>
-<tr class="memdesc:ae4b7ed2ddc8ec6cc910f935c9d299c7a"><td class="mdescLeft"> </td><td class="mdescRight">Reference type. <br/></td></tr>
-<tr class="separator:ae4b7ed2ddc8ec6cc910f935c9d299c7a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0bd617fe8e4657777e86f0ae15d8094f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0bd617fe8e4657777e86f0ae15d8094f"></a>
-typedef const T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html#a0bd617fe8e4657777e86f0ae15d8094f">const_reference</a></td></tr>
-<tr class="memdesc:a0bd617fe8e4657777e86f0ae15d8094f"><td class="mdescLeft"> </td><td class="mdescRight">Const reference type. <br/></td></tr>
-<tr class="separator:a0bd617fe8e4657777e86f0ae15d8094f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7d3da9b47ec58e1c09e3550f702edcfc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7d3da9b47ec58e1c09e3550f702edcfc"></a>
-typedef size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html#a7d3da9b47ec58e1c09e3550f702edcfc">size_type</a></td></tr>
-<tr class="memdesc:a7d3da9b47ec58e1c09e3550f702edcfc"><td class="mdescLeft"> </td><td class="mdescRight">Integral type for representing size of the queue. <br/></td></tr>
-<tr class="separator:a7d3da9b47ec58e1c09e3550f702edcfc"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae010b1fa9c0942504737228474b51a0b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae010b1fa9c0942504737228474b51a0b"></a>
-typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html#ae010b1fa9c0942504737228474b51a0b">difference_type</a></td></tr>
-<tr class="memdesc:ae010b1fa9c0942504737228474b51a0b"><td class="mdescLeft"> </td><td class="mdescRight">Difference type for iterator. <br/></td></tr>
-<tr class="separator:ae010b1fa9c0942504737228474b51a0b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1d2cebf242fa83d88eebdc3ad6891fb1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1d2cebf242fa83d88eebdc3ad6891fb1"></a>
-typedef A </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a></td></tr>
-<tr class="memdesc:a1d2cebf242fa83d88eebdc3ad6891fb1"><td class="mdescLeft"> </td><td class="mdescRight">Allocator type. <br/></td></tr>
-<tr class="separator:a1d2cebf242fa83d88eebdc3ad6891fb1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-types"></a>
+Protected Types</h2></td></tr>
+<tr class="memitem:a10fca95c59a7c0542d2d6bc1b8306e1c"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom">{ <b>allow_multimapping</b> = Allow_multimapping
+ }</td></tr>
+<tr class="separator:a10fca95c59a7c0542d2d6bc1b8306e1c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a935ab6e249964c5a7e1caffd308bf008"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a935ab6e249964c5a7e1caffd308bf008"></a>
+typedef Key </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+<tr class="separator:a935ab6e249964c5a7e1caffd308bf008"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8b1d770b7db20b5d0d51af0b910aebb2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8b1d770b7db20b5d0d51af0b910aebb2"></a>
+typedef Key </td><td class="memItemRight" valign="bottom"><b>key_type</b></td></tr>
+<tr class="separator:a8b1d770b7db20b5d0d51af0b910aebb2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3c1ef314e63eb78db91ce99cb8617b87"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c1ef314e63eb78db91ce99cb8617b87"></a>
+typedef Hash_compare </td><td class="memItemRight" valign="bottom"><b>hash_compare</b></td></tr>
+<tr class="separator:a3c1ef314e63eb78db91ce99cb8617b87"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a453126bb05d3c798914cb91852e0b3a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a453126bb05d3c798914cb91852e0b3a5"></a>
+typedef Allocator::template <br class="typebreak"/>
+rebind< value_type >::other </td><td class="memItemRight" valign="bottom"><b>allocator_type</b></td></tr>
+<tr class="separator:a453126bb05d3c798914cb91852e0b3a5"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a405be01bac4048f214797c287e2571a1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a405be01bac4048f214797c287e2571a1"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html#a405be01bac4048f214797c287e2571a1">concurrent_priority_queue</a> (const <a class="el" href="a00045.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a> &a=<a class="el" href="a00045.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a>())</td></tr>
-<tr class="memdesc:a405be01bac4048f214797c287e2571a1"><td class="mdescLeft"> </td><td class="mdescRight">Constructs a new <a class="el" href="a00045.html" title="Concurrent priority queue. ">concurrent_priority_queue</a> with default capacity. <br/></td></tr>
-<tr class="separator:a405be01bac4048f214797c287e2571a1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a43c3917ea8a19cf1fec947e29ad4ff3e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a43c3917ea8a19cf1fec947e29ad4ff3e"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html#a43c3917ea8a19cf1fec947e29ad4ff3e">concurrent_priority_queue</a> (<a class="el" href="a00045.html#a7d3da9b47ec58e1c09e3550f702edcfc">size_type</a> init_capacity, const <a class="el" href="a00045.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a> &a=<a class="el" href="a00045.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a>())</td></tr>
-<tr class="memdesc:a43c3917ea8a19cf1fec947e29ad4ff3e"><td class="mdescLeft"> </td><td class="mdescRight">Constructs a new <a class="el" href="a00045.html" title="Concurrent priority queue. ">concurrent_priority_queue</a> with init_sz capacity. <br/></td></tr>
-<tr class="separator:a43c3917ea8a19cf1fec947e29ad4ff3e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0cebee26cc0d00d4dcbb1c74e08029f7"><td class="memTemplParams" colspan="2"><a class="anchor" id="a0cebee26cc0d00d4dcbb1c74e08029f7"></a>
-template<typename InputIterator > </td></tr>
-<tr class="memitem:a0cebee26cc0d00d4dcbb1c74e08029f7"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00045.html#a0cebee26cc0d00d4dcbb1c74e08029f7">concurrent_priority_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00045.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a> &a=<a class="el" href="a00045.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a>()) [...]
-<tr class="memdesc:a0cebee26cc0d00d4dcbb1c74e08029f7"><td class="mdescLeft"> </td><td class="mdescRight">[begin,end) constructor <br/></td></tr>
-<tr class="separator:a0cebee26cc0d00d4dcbb1c74e08029f7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aaa8ac175143e12db29a014674a392b38"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaa8ac175143e12db29a014674a392b38"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html#aaa8ac175143e12db29a014674a392b38">concurrent_priority_queue</a> (std::initializer_list< T > init_list, const <a class="el" href="a00045.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a> &a=<a class="el" href="a00045.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a>())</td></tr>
-<tr class="memdesc:aaa8ac175143e12db29a014674a392b38"><td class="mdescLeft"> </td><td class="mdescRight">Constructor from std::initializer_list. <br/></td></tr>
-<tr class="separator:aaa8ac175143e12db29a014674a392b38"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a332d26234f9c37a6b7ba269c648815d0"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html#a332d26234f9c37a6b7ba269c648815d0">concurrent_priority_queue</a> (const <a class="el" href="a00045.html">concurrent_priority_queue</a> &src)</td></tr>
-<tr class="memdesc:a332d26234f9c37a6b7ba269c648815d0"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor.  <a href="#a332d26234f9c37a6b7ba269c648815d0">More...</a><br/></td></tr>
-<tr class="separator:a332d26234f9c37a6b7ba269c648815d0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa52cea369b6630699ee78cc42622be9d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html#aa52cea369b6630699ee78cc42622be9d">concurrent_priority_queue</a> (const <a class="el" href="a00045.html">concurrent_priority_queue</a> &src, const <a class="el" href="a00045.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a> &a)</td></tr>
-<tr class="memdesc:aa52cea369b6630699ee78cc42622be9d"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor with specific allocator.  <a href="#aa52cea369b6630699ee78cc42622be9d">More...</a><br/></td></tr>
-<tr class="separator:aa52cea369b6630699ee78cc42622be9d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac0c3f41b10f04547f3438517c40cf8a5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00045.html">concurrent_priority_queue</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html#ac0c3f41b10f04547f3438517c40cf8a5">operator=</a> (const <a class="el" href="a00045.html">concurrent_priority_queue</a> &src)</td></tr>
-<tr class="memdesc:ac0c3f41b10f04547f3438517c40cf8a5"><td class="mdescLeft"> </td><td class="mdescRight">Assignment operator.  <a href="#ac0c3f41b10f04547f3438517c40cf8a5">More...</a><br/></td></tr>
-<tr class="separator:ac0c3f41b10f04547f3438517c40cf8a5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae9ac965bbac3933c7db89f512adfcbcb"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html#ae9ac965bbac3933c7db89f512adfcbcb">concurrent_priority_queue</a> (<a class="el" href="a00045.html">concurrent_priority_queue</a> &&src)</td></tr>
-<tr class="memdesc:ae9ac965bbac3933c7db89f512adfcbcb"><td class="mdescLeft"> </td><td class="mdescRight">Move constructor.  <a href="#ae9ac965bbac3933c7db89f512adfcbcb">More...</a><br/></td></tr>
-<tr class="separator:ae9ac965bbac3933c7db89f512adfcbcb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a14dd20a4673f77cff3eb6f269a888016"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html#a14dd20a4673f77cff3eb6f269a888016">concurrent_priority_queue</a> (<a class="el" href="a00045.html">concurrent_priority_queue</a> &&src, const <a class="el" href="a00045.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a> &a)</td></tr>
-<tr class="memdesc:a14dd20a4673f77cff3eb6f269a888016"><td class="mdescLeft"> </td><td class="mdescRight">Move constructor with specific allocator.  <a href="#a14dd20a4673f77cff3eb6f269a888016">More...</a><br/></td></tr>
-<tr class="separator:a14dd20a4673f77cff3eb6f269a888016"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9b21bd56aff8c412c5fcdd0d88b48c98"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00045.html">concurrent_priority_queue</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html#a9b21bd56aff8c412c5fcdd0d88b48c98">operator=</a> (<a class="el" href="a00045.html">concurrent_priority_queue</a> &&src)</td></tr>
-<tr class="memdesc:a9b21bd56aff8c412c5fcdd0d88b48c98"><td class="mdescLeft"> </td><td class="mdescRight">Move assignment operator.  <a href="#a9b21bd56aff8c412c5fcdd0d88b48c98">More...</a><br/></td></tr>
-<tr class="separator:a9b21bd56aff8c412c5fcdd0d88b48c98"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac64c7b627708f0d6b2e5421fb0d49150"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac64c7b627708f0d6b2e5421fb0d49150"></a>
-template<typename InputIterator > </td></tr>
-<tr class="memitem:ac64c7b627708f0d6b2e5421fb0d49150"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00045.html#ac64c7b627708f0d6b2e5421fb0d49150">assign</a> (InputIterator begin, InputIterator end)</td></tr>
-<tr class="memdesc:ac64c7b627708f0d6b2e5421fb0d49150"><td class="mdescLeft"> </td><td class="mdescRight">Assign the queue from [begin,end) range, not thread-safe. <br/></td></tr>
-<tr class="separator:ac64c7b627708f0d6b2e5421fb0d49150"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac1b3a945aac5a17c85d56756cc6aa3d1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac1b3a945aac5a17c85d56756cc6aa3d1"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html#ac1b3a945aac5a17c85d56756cc6aa3d1">assign</a> (std::initializer_list< T > il)</td></tr>
-<tr class="memdesc:ac1b3a945aac5a17c85d56756cc6aa3d1"><td class="mdescLeft"> </td><td class="mdescRight">Assign the queue from std::initializer_list, not thread-safe. <br/></td></tr>
-<tr class="separator:ac1b3a945aac5a17c85d56756cc6aa3d1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7eaa05dcb74604e45e0e2c55e1e456e9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7eaa05dcb74604e45e0e2c55e1e456e9"></a>
-<a class="el" href="a00045.html">concurrent_priority_queue</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html#a7eaa05dcb74604e45e0e2c55e1e456e9">operator=</a> (std::initializer_list< T > il)</td></tr>
-<tr class="memdesc:a7eaa05dcb74604e45e0e2c55e1e456e9"><td class="mdescLeft"> </td><td class="mdescRight">Assign from std::initializer_list, not thread-safe. <br/></td></tr>
-<tr class="separator:a7eaa05dcb74604e45e0e2c55e1e456e9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8dec2dd0e8b22af14f1753eaef1bf5eb"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html#a8dec2dd0e8b22af14f1753eaef1bf5eb">empty</a> () const </td></tr>
-<tr class="memdesc:a8dec2dd0e8b22af14f1753eaef1bf5eb"><td class="mdescLeft"> </td><td class="mdescRight">Returns true if empty, false otherwise.  <a href="#a8dec2dd0e8b22af14f1753eaef1bf5eb">More...</a><br/></td></tr>
-<tr class="separator:a8dec2dd0e8b22af14f1753eaef1bf5eb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7d86ba200474b51ec99a6b917429c6bb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00045.html#a7d3da9b47ec58e1c09e3550f702edcfc">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html#a7d86ba200474b51ec99a6b917429c6bb">size</a> () const </td></tr>
-<tr class="memdesc:a7d86ba200474b51ec99a6b917429c6bb"><td class="mdescLeft"> </td><td class="mdescRight">Returns the current number of elements contained in the queue.  <a href="#a7d86ba200474b51ec99a6b917429c6bb">More...</a><br/></td></tr>
-<tr class="separator:a7d86ba200474b51ec99a6b917429c6bb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1bfa0e7269b3407d6bb5c706264d2406"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html#a1bfa0e7269b3407d6bb5c706264d2406">push</a> (<a class="el" href="a00045.html#a0bd617fe8e4657777e86f0ae15d8094f">const_reference</a> elem)</td></tr>
-<tr class="memdesc:a1bfa0e7269b3407d6bb5c706264d2406"><td class="mdescLeft"> </td><td class="mdescRight">Pushes elem onto the queue, increasing capacity of queue if necessary.  <a href="#a1bfa0e7269b3407d6bb5c706264d2406">More...</a><br/></td></tr>
-<tr class="separator:a1bfa0e7269b3407d6bb5c706264d2406"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a72ff26945c61b4ce3ce7ca0f9b9aaa48"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html#a72ff26945c61b4ce3ce7ca0f9b9aaa48">push</a> (<a class="el" href="a00045.html#a2c75d97ae429019363ab6fd1a872512e">value_type</a> &&elem)</td></tr>
-<tr class="memdesc:a72ff26945c61b4ce3ce7ca0f9b9aaa48"><td class="mdescLeft"> </td><td class="mdescRight">Pushes elem onto the queue, increasing capacity of queue if necessary.  <a href="#a72ff26945c61b4ce3ce7ca0f9b9aaa48">More...</a><br/></td></tr>
-<tr class="separator:a72ff26945c61b4ce3ce7ca0f9b9aaa48"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a278d208cd92e5aeccc9c7f6fc192e3ce"><td class="memTemplParams" colspan="2">template<typename... Args> </td></tr>
-<tr class="memitem:a278d208cd92e5aeccc9c7f6fc192e3ce"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00045.html#a278d208cd92e5aeccc9c7f6fc192e3ce">emplace</a> (Args &&...args)</td></tr>
-<tr class="memdesc:a278d208cd92e5aeccc9c7f6fc192e3ce"><td class="mdescLeft"> </td><td class="mdescRight">Constructs a new element using args as the arguments for its construction and pushes it onto the queue */.  <a href="#a278d208cd92e5aeccc9c7f6fc192e3ce">More...</a><br/></td></tr>
-<tr class="separator:a278d208cd92e5aeccc9c7f6fc192e3ce"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a954177b09e184cf3db47f1b180a7ef5e"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html#a954177b09e184cf3db47f1b180a7ef5e">try_pop</a> (<a class="el" href="a00045.html#ae4b7ed2ddc8ec6cc910f935c9d299c7a">reference</a> elem)</td></tr>
-<tr class="memdesc:a954177b09e184cf3db47f1b180a7ef5e"><td class="mdescLeft"> </td><td class="mdescRight">Gets a reference to and removes highest priority element.  <a href="#a954177b09e184cf3db47f1b180a7ef5e">More...</a><br/></td></tr>
-<tr class="separator:a954177b09e184cf3db47f1b180a7ef5e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2459166998a4103880d603b237c429e6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html#a2459166998a4103880d603b237c429e6">clear</a> ()</td></tr>
-<tr class="memdesc:a2459166998a4103880d603b237c429e6"><td class="mdescLeft"> </td><td class="mdescRight">Clear the queue; not thread-safe.  <a href="#a2459166998a4103880d603b237c429e6">More...</a><br/></td></tr>
-<tr class="separator:a2459166998a4103880d603b237c429e6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa6ee6d356e538b67a7cb4e242e6e36c9"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html#aa6ee6d356e538b67a7cb4e242e6e36c9">swap</a> (<a class="el" href="a00045.html">concurrent_priority_queue</a> &q)</td></tr>
-<tr class="memdesc:aa6ee6d356e538b67a7cb4e242e6e36c9"><td class="mdescLeft"> </td><td class="mdescRight">Swap this queue with another; not thread-safe.  <a href="#aa6ee6d356e538b67a7cb4e242e6e36c9">More...</a><br/></td></tr>
-<tr class="separator:aa6ee6d356e538b67a7cb4e242e6e36c9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a312e88e51246da4c516d35abbb30721a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a312e88e51246da4c516d35abbb30721a"></a>
-<a class="el" href="a00045.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html#a312e88e51246da4c516d35abbb30721a">get_allocator</a> () const </td></tr>
-<tr class="memdesc:a312e88e51246da4c516d35abbb30721a"><td class="mdescLeft"> </td><td class="mdescRight">Return allocator object. <br/></td></tr>
-<tr class="separator:a312e88e51246da4c516d35abbb30721a"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>><br/>
-class tbb::interface5::concurrent_priority_queue< T, Compare, A ></h3>
-
-<p>Concurrent priority queue. </p>
-</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a332d26234f9c37a6b7ba269c648815d0"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::<a class="el" href="a00045.html">concurrent_priority_queue</a> </td>
-          <td>(</td>
-          <td class="paramtype">const <a class="el" href="a00045.html">concurrent_priority_queue</a>< T, Compare, A > & </td>
-          <td class="paramname"><em>src</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">explicit</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Copy constructor. </p>
-<p>This operation is unsafe if there are pending concurrent operations on the src queue. </p>
-
-</div>
-</div>
-<a class="anchor" id="aa52cea369b6630699ee78cc42622be9d"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::<a class="el" href="a00045.html">concurrent_priority_queue</a> </td>
-          <td>(</td>
-          <td class="paramtype">const <a class="el" href="a00045.html">concurrent_priority_queue</a>< T, Compare, A > & </td>
-          <td class="paramname"><em>src</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="a00045.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a> & </td>
-          <td class="paramname"><em>a</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Copy constructor with specific allocator. </p>
-<p>This operation is unsafe if there are pending concurrent operations on the src queue. </p>
-
-</div>
-</div>
-<a class="anchor" id="ae9ac965bbac3933c7db89f512adfcbcb"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::<a class="el" href="a00045.html">concurrent_priority_queue</a> </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00045.html">concurrent_priority_queue</a>< T, Compare, A > && </td>
-          <td class="paramname"><em>src</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Move constructor. </p>
-<p>This operation is unsafe if there are pending concurrent operations on the src queue. </p>
-
-</div>
-</div>
-<a class="anchor" id="a14dd20a4673f77cff3eb6f269a888016"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::<a class="el" href="a00045.html">concurrent_priority_queue</a> </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00045.html">concurrent_priority_queue</a>< T, Compare, A > && </td>
-          <td class="paramname"><em>src</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="a00045.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a> & </td>
-          <td class="paramname"><em>a</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Move constructor with specific allocator. </p>
-<p>This operation is unsafe if there are pending concurrent operations on the src queue. </p>
-
-</div>
-</div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="a2459166998a4103880d603b237c429e6"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::clear </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Clear the queue; not thread-safe. </p>
-<p>This operation is unsafe if there are pending concurrent operations on the queue. Resets size, effectively emptying queue; does not free space. May not clear elements added in pending operations. </p>
-
-</div>
-</div>
-<a class="anchor" id="a278d208cd92e5aeccc9c7f6fc192e3ce"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
-<div class="memtemplate">
-template<typename... Args> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::emplace </td>
-          <td>(</td>
-          <td class="paramtype">Args &&... </td>
-          <td class="paramname"><em>args</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Constructs a new element using args as the arguments for its construction and pushes it onto the queue */. </p>
-<p>This operation can be safely used concurrently with other push, try_pop or emplace operations. </p>
-
-</div>
-</div>
-<a class="anchor" id="a8dec2dd0e8b22af14f1753eaef1bf5eb"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::empty </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td> const</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Returns true if empty, false otherwise. </p>
-<p>Returned value may not reflect results of pending operations. This operation reads shared data and will trigger a race condition. </p>
-
-</div>
-</div>
-<a class="anchor" id="ac0c3f41b10f04547f3438517c40cf8a5"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00045.html">concurrent_priority_queue</a>& <a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::operator= </td>
-          <td>(</td>
-          <td class="paramtype">const <a class="el" href="a00045.html">concurrent_priority_queue</a>< T, Compare, A > & </td>
-          <td class="paramname"><em>src</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Assignment operator. </p>
-<p>This operation is unsafe if there are pending concurrent operations on the src queue. </p>
-
-</div>
-</div>
-<a class="anchor" id="a9b21bd56aff8c412c5fcdd0d88b48c98"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00045.html">concurrent_priority_queue</a>& <a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::operator= </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00045.html">concurrent_priority_queue</a>< T, Compare, A > && </td>
-          <td class="paramname"><em>src</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Move assignment operator. </p>
-<p>This operation is unsafe if there are pending concurrent operations on the src queue. </p>
-
-</div>
-</div>
-<a class="anchor" id="a1bfa0e7269b3407d6bb5c706264d2406"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::push </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00045.html#a0bd617fe8e4657777e86f0ae15d8094f">const_reference</a> </td>
-          <td class="paramname"><em>elem</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Pushes elem onto the queue, increasing capacity of queue if necessary. </p>
-<p>This operation can be safely used concurrently with other push, try_pop or emplace operations. </p>
-
-</div>
-</div>
-<a class="anchor" id="a72ff26945c61b4ce3ce7ca0f9b9aaa48"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::push </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00045.html#a2c75d97ae429019363ab6fd1a872512e">value_type</a> && </td>
-          <td class="paramname"><em>elem</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Pushes elem onto the queue, increasing capacity of queue if necessary. </p>
-<p>This operation can be safely used concurrently with other push, try_pop or emplace operations. </p>
-
-</div>
-</div>
-<a class="anchor" id="a7d86ba200474b51ec99a6b917429c6bb"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00045.html#a7d3da9b47ec58e1c09e3550f702edcfc">size_type</a> <a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::size </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td> const</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Returns the current number of elements contained in the queue. </p>
-<p>Returned value may not reflect results of pending operations. This operation reads shared data and will trigger a race condition. </p>
-
-</div>
-</div>
-<a class="anchor" id="aa6ee6d356e538b67a7cb4e242e6e36c9"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::swap </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00045.html">concurrent_priority_queue</a>< T, Compare, A > & </td>
-          <td class="paramname"><em>q</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Swap this queue with another; not thread-safe. </p>
-<p>This operation is unsafe if there are pending concurrent operations on the queue. </p>
-
-</div>
-</div>
-<a class="anchor" id="a954177b09e184cf3db47f1b180a7ef5e"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T , typename Compare  = std::less<T>, typename A  = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::try_pop </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00045.html#ae4b7ed2ddc8ec6cc910f935c9d299c7a">reference</a> </td>
-          <td class="paramname"><em>elem</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:a958c02e4dbd967575a9f03290bb0cad3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a958c02e4dbd967575a9f03290bb0cad3"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_set_traits</b> (const hash_compare &hc)</td></tr>
+<tr class="separator:a958c02e4dbd967575a9f03290bb0cad3"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-static-methods"></a>
+Static Protected Member Functions</h2></td></tr>
+<tr class="memitem:a3f4bfe96ddb3db04d4701e06611fc73d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3f4bfe96ddb3db04d4701e06611fc73d"></a>
+static const Key & </td><td class="memItemRight" valign="bottom"><b>get_key</b> (const value_type &value)</td></tr>
+<tr class="separator:a3f4bfe96ddb3db04d4701e06611fc73d"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:ae134f56adf668d7bd31f7ee8fb36ead5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae134f56adf668d7bd31f7ee8fb36ead5"></a>
+hash_compare </td><td class="memItemRight" valign="bottom"><b>my_hash_compare</b></td></tr>
+<tr class="separator:ae134f56adf668d7bd31f7ee8fb36ead5"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-</div><div class="memdoc">
-
-<p>Gets a reference to and removes highest priority element. </p>
-<p>If a highest priority element was found, sets elem and returns true, otherwise returns false. This operation can be safely used concurrently with other push, try_pop or emplace operations. </p>
-
-</div>
-</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>concurrent_priority_queue.h</li>
+<li>concurrent_unordered_set.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00046.html b/doc/html/a00046.html
index 4188ad0..5734ab2 100644
--- a/doc/html/a00046.html
+++ b/doc/html/a00046.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::strict_ppl::concurrent_queue< T, A > Class Template Reference</title>
+<title>tbb::concurrent_vector< T, A > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,167 +33,753 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>strict_ppl</b></li><li class="navelem"><a class="el" href="a00046.html">concurrent_queue</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00046.html">concurrent_vector</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#nested-classes">Classes</a> |
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
 <a href="#friends">Friends</a> |
-<a href="a00421.html">List of all members</a>  </div>
+<a href="a00273.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::strict_ppl::concurrent_queue< T, A > Class Template Reference<div class="ingroups"><a class="el" href="a00256.html">Containers</a></div></div>  </div>
+<div class="title">tbb::concurrent_vector< T, A > Class Template Reference<div class="ingroups"><a class="el" href="a00253.html">Containers</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>A high-performance thread-safe non-blocking concurrent queue.  
+<p>Concurrent vector container.  
  <a href="a00046.html#details">More...</a></p>
 
-<p><code>#include <concurrent_queue.h></code></p>
+<p><code>#include <concurrent_vector.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::strict_ppl::concurrent_queue< T, A >:</div>
+Inheritance diagram for tbb::concurrent_vector< T, A >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00046.png" usemap="#tbb::strict_ppl::concurrent_queue< T, A >_map" alt=""/>
-  <map id="tbb::strict_ppl::concurrent_queue< T, A >_map" name="tbb::strict_ppl::concurrent_queue< T, A >_map">
+  <img src="a00046.png" usemap="#tbb::concurrent_vector< T, A >_map" alt=""/>
+  <map id="tbb::concurrent_vector< T, A >_map" name="tbb::concurrent_vector< T, A >_map">
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:aeeee93a7ac2eecc80bbf3e857e900538"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeeee93a7ac2eecc80bbf3e857e900538"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#aeeee93a7ac2eecc80bbf3e857e900538">value_type</a></td></tr>
-<tr class="memdesc:aeeee93a7ac2eecc80bbf3e857e900538"><td class="mdescLeft"> </td><td class="mdescRight">Element type in the queue. <br/></td></tr>
-<tr class="separator:aeeee93a7ac2eecc80bbf3e857e900538"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab26ddf11b15d61ac87e6c1ae67af92a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab26ddf11b15d61ac87e6c1ae67af92a2"></a>
-typedef T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#ab26ddf11b15d61ac87e6c1ae67af92a2">reference</a></td></tr>
-<tr class="memdesc:ab26ddf11b15d61ac87e6c1ae67af92a2"><td class="mdescLeft"> </td><td class="mdescRight">Reference type. <br/></td></tr>
-<tr class="separator:ab26ddf11b15d61ac87e6c1ae67af92a2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a478c2b7f763b2e821e01cc14e13baf4c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a478c2b7f763b2e821e01cc14e13baf4c"></a>
-typedef const T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a478c2b7f763b2e821e01cc14e13baf4c">const_reference</a></td></tr>
-<tr class="memdesc:a478c2b7f763b2e821e01cc14e13baf4c"><td class="mdescLeft"> </td><td class="mdescRight">Const reference type. <br/></td></tr>
-<tr class="separator:a478c2b7f763b2e821e01cc14e13baf4c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9f883e49afea16293ba92da779981bb8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9f883e49afea16293ba92da779981bb8"></a>
-typedef size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a9f883e49afea16293ba92da779981bb8">size_type</a></td></tr>
-<tr class="memdesc:a9f883e49afea16293ba92da779981bb8"><td class="mdescLeft"> </td><td class="mdescRight">Integral type for representing size of the queue. <br/></td></tr>
-<tr class="separator:a9f883e49afea16293ba92da779981bb8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a63b42d83a9ed13fc6741e0b4388b0e96"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63b42d83a9ed13fc6741e0b4388b0e96"></a>
-typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a63b42d83a9ed13fc6741e0b4388b0e96">difference_type</a></td></tr>
-<tr class="memdesc:a63b42d83a9ed13fc6741e0b4388b0e96"><td class="mdescLeft"> </td><td class="mdescRight">Difference type for iterator. <br/></td></tr>
-<tr class="separator:a63b42d83a9ed13fc6741e0b4388b0e96"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acbdd1a5bd034358fb0774b322a66b1ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acbdd1a5bd034358fb0774b322a66b1ed"></a>
-typedef A </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#acbdd1a5bd034358fb0774b322a66b1ed">allocator_type</a></td></tr>
-<tr class="memdesc:acbdd1a5bd034358fb0774b322a66b1ed"><td class="mdescLeft"> </td><td class="mdescRight">Allocator type. <br/></td></tr>
-<tr class="separator:acbdd1a5bd034358fb0774b322a66b1ed"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab1361aa7fd454fe593609be740ab8a4c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab1361aa7fd454fe593609be740ab8a4c"></a>
+<tr class="memitem:ada098ff121699bfed7ae37e759eff93d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ada098ff121699bfed7ae37e759eff93d"></a>
 typedef <br class="typebreak"/>
-internal::concurrent_queue_iterator<br class="typebreak"/>
-< <a class="el" href="a00046.html">concurrent_queue</a>, T > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
-<tr class="separator:ab1361aa7fd454fe593609be740ab8a4c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a674e375edf0a3463ae1cec5d6158593d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a674e375edf0a3463ae1cec5d6158593d"></a>
+internal::concurrent_vector_base_v3::size_type </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
+<tr class="separator:ada098ff121699bfed7ae37e759eff93d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7560567b5735c57159e55b12d20b6710"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7560567b5735c57159e55b12d20b6710"></a>
 typedef <br class="typebreak"/>
-internal::concurrent_queue_iterator<br class="typebreak"/>
-< <a class="el" href="a00046.html">concurrent_queue</a>, const T > </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
-<tr class="separator:a674e375edf0a3463ae1cec5d6158593d"><td class="memSeparator" colspan="2"> </td></tr>
+internal::allocator_base< T, A ><br class="typebreak"/>
+::allocator_type </td><td class="memItemRight" valign="bottom"><b>allocator_type</b></td></tr>
+<tr class="separator:a7560567b5735c57159e55b12d20b6710"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5cf801a503d4e5fe739f53d7321dd2ef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5cf801a503d4e5fe739f53d7321dd2ef"></a>
+typedef T </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+<tr class="separator:a5cf801a503d4e5fe739f53d7321dd2ef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1bb52adb877d3b680dac5f0bd289700b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1bb52adb877d3b680dac5f0bd289700b"></a>
+typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
+<tr class="separator:a1bb52adb877d3b680dac5f0bd289700b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a412441e93ad8656f96b14c5ecb9d817f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a412441e93ad8656f96b14c5ecb9d817f"></a>
+typedef T & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+<tr class="separator:a412441e93ad8656f96b14c5ecb9d817f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5ecbb1eb2c7264df9d58255ce211207c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5ecbb1eb2c7264df9d58255ce211207c"></a>
+typedef const T & </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
+<tr class="separator:a5ecbb1eb2c7264df9d58255ce211207c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa2c4f00678df69d2d11497e8dd6ed9cf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa2c4f00678df69d2d11497e8dd6ed9cf"></a>
+typedef T * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+<tr class="separator:aa2c4f00678df69d2d11497e8dd6ed9cf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afa0d28eb686589cbaf4733ca0eabc071"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa0d28eb686589cbaf4733ca0eabc071"></a>
+typedef const T * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+<tr class="separator:afa0d28eb686589cbaf4733ca0eabc071"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4cee8eaee236867c0b6e87309380cb0f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4cee8eaee236867c0b6e87309380cb0f"></a>
+typedef <br class="typebreak"/>
+internal::vector_iterator<br class="typebreak"/>
+< <a class="el" href="a00046.html">concurrent_vector</a>, T > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+<tr class="separator:a4cee8eaee236867c0b6e87309380cb0f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa9a55035528c055ae985db2a61c8b0b2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa9a55035528c055ae985db2a61c8b0b2"></a>
+typedef <br class="typebreak"/>
+internal::vector_iterator<br class="typebreak"/>
+< <a class="el" href="a00046.html">concurrent_vector</a>, const T > </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
+<tr class="separator:aa9a55035528c055ae985db2a61c8b0b2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1623110816f9ef8f08e7bf6768aed273"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1623110816f9ef8f08e7bf6768aed273"></a>
+typedef std::reverse_iterator<br class="typebreak"/>
+< iterator > </td><td class="memItemRight" valign="bottom"><b>reverse_iterator</b></td></tr>
+<tr class="separator:a1623110816f9ef8f08e7bf6768aed273"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ada43b048144c3814036da624d3bb8c58"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ada43b048144c3814036da624d3bb8c58"></a>
+typedef std::reverse_iterator<br class="typebreak"/>
+< const_iterator > </td><td class="memItemRight" valign="bottom"><b>const_reverse_iterator</b></td></tr>
+<tr class="separator:ada43b048144c3814036da624d3bb8c58"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adbeeef740ea402fa136ca3962fc0c307"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbeeef740ea402fa136ca3962fc0c307"></a>
+typedef std::reverse_iterator<br class="typebreak"/>
+< iterator, T, T &, T * > </td><td class="memItemRight" valign="bottom"><b>reverse_iterator</b></td></tr>
+<tr class="separator:adbeeef740ea402fa136ca3962fc0c307"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a705a54ffc90b914fc9c30d4177e8228a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a705a54ffc90b914fc9c30d4177e8228a"></a>
+typedef std::reverse_iterator<br class="typebreak"/>
+< const_iterator, T, const T <br class="typebreak"/>
+&, const T * > </td><td class="memItemRight" valign="bottom"><b>const_reverse_iterator</b></td></tr>
+<tr class="separator:a705a54ffc90b914fc9c30d4177e8228a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a443492ee9918c9e3372b5daca82314ca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a443492ee9918c9e3372b5daca82314ca"></a>
+typedef generic_range_type<br class="typebreak"/>
+< iterator > </td><td class="memItemRight" valign="bottom"><b>range_type</b></td></tr>
+<tr class="separator:a443492ee9918c9e3372b5daca82314ca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1312eb29abf7ca07aa365c727b7844e3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1312eb29abf7ca07aa365c727b7844e3"></a>
+typedef generic_range_type<br class="typebreak"/>
+< const_iterator > </td><td class="memItemRight" valign="bottom"><b>const_range_type</b></td></tr>
+<tr class="separator:a1312eb29abf7ca07aa365c727b7844e3"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a49b2e16902577cd3174355be0fa684e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a49b2e16902577cd3174355be0fa684e5"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a49b2e16902577cd3174355be0fa684e5">concurrent_queue</a> (const <a class="el" href="a00046.html#acbdd1a5bd034358fb0774b322a66b1ed">allocator_type</a> &a=<a class="el" href="a00046.html#acbdd1a5bd034358fb0774b322a66b1ed">allocator_type</a>())</td></tr>
-<tr class="memdesc:a49b2e16902577cd3174355be0fa684e5"><td class="mdescLeft"> </td><td class="mdescRight">Construct empty queue. <br/></td></tr>
-<tr class="separator:a49b2e16902577cd3174355be0fa684e5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a43ac953152e60815c09fe4a4d4a623a9"><td class="memTemplParams" colspan="2"><a class="anchor" id="a43ac953152e60815c09fe4a4d4a623a9"></a>
-template<typename InputIterator > </td></tr>
-<tr class="memitem:a43ac953152e60815c09fe4a4d4a623a9"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00046.html#a43ac953152e60815c09fe4a4d4a623a9">concurrent_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00046.html#acbdd1a5bd034358fb0774b322a66b1ed">allocator_type</a> &a=<a class="el" href="a00046.html#acbdd1a5bd034358fb0774b322a66b1ed">allocator_type</a>())</td></tr>
-<tr class="memdesc:a43ac953152e60815c09fe4a4d4a623a9"><td class="mdescLeft"> </td><td class="mdescRight">[begin,end) constructor <br/></td></tr>
-<tr class="separator:a43ac953152e60815c09fe4a4d4a623a9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae918807d098d5d5b41cc6d606fa2e7a1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae918807d098d5d5b41cc6d606fa2e7a1"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#ae918807d098d5d5b41cc6d606fa2e7a1">concurrent_queue</a> (const <a class="el" href="a00046.html">concurrent_queue</a> &src, const <a class="el" href="a00046.html#acbdd1a5bd034358fb0774b322a66b1ed">allocator_type</a> &a=<a class="el" href="a00046.html#acbdd1a5bd034358fb0774b322a66b1ed">allocator_type</a>())</td></tr>
-<tr class="memdesc:ae918807d098d5d5b41cc6d606fa2e7a1"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br/></td></tr>
-<tr class="separator:ae918807d098d5d5b41cc6d606fa2e7a1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acc04574f4d7d41fd5cad779508394740"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acc04574f4d7d41fd5cad779508394740"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#acc04574f4d7d41fd5cad779508394740">concurrent_queue</a> (<a class="el" href="a00046.html">concurrent_queue</a> &&src)</td></tr>
-<tr class="memdesc:acc04574f4d7d41fd5cad779508394740"><td class="mdescLeft"> </td><td class="mdescRight">Move constructors. <br/></td></tr>
-<tr class="separator:acc04574f4d7d41fd5cad779508394740"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a22f35cb396178d494a3756d5700e2865"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a22f35cb396178d494a3756d5700e2865"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_queue</b> (<a class="el" href="a00046.html">concurrent_queue</a> &&src, const <a class="el" href="a00046.html#acbdd1a5bd034358fb0774b322a66b1ed">allocator_type</a> &a)</td></tr>
-<tr class="separator:a22f35cb396178d494a3756d5700e2865"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa0056b242f280f5e25332ce998f9f670"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0056b242f280f5e25332ce998f9f670"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#aa0056b242f280f5e25332ce998f9f670">~concurrent_queue</a> ()</td></tr>
-<tr class="memdesc:aa0056b242f280f5e25332ce998f9f670"><td class="mdescLeft"> </td><td class="mdescRight">Destroy queue. <br/></td></tr>
-<tr class="separator:aa0056b242f280f5e25332ce998f9f670"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9330ca6590980d80ef7b1ea3613a699a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9330ca6590980d80ef7b1ea3613a699a"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a9330ca6590980d80ef7b1ea3613a699a">push</a> (const T &source)</td></tr>
-<tr class="memdesc:a9330ca6590980d80ef7b1ea3613a699a"><td class="mdescLeft"> </td><td class="mdescRight">Enqueue an item at tail of queue. <br/></td></tr>
-<tr class="separator:a9330ca6590980d80ef7b1ea3613a699a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a40f743f7eb92bb709cb7feb86d340885"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a40f743f7eb92bb709cb7feb86d340885"></a>
-void </td><td class="memItemRight" valign="bottom"><b>push</b> (T &&source)</td></tr>
-<tr class="separator:a40f743f7eb92bb709cb7feb86d340885"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4647d9bf5fd03b0850ada381916e9728"><td class="memTemplParams" colspan="2"><a class="anchor" id="a4647d9bf5fd03b0850ada381916e9728"></a>
-template<typename... Arguments> </td></tr>
-<tr class="memitem:a4647d9bf5fd03b0850ada381916e9728"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>emplace</b> (Arguments &&...args)</td></tr>
-<tr class="separator:a4647d9bf5fd03b0850ada381916e9728"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aabb1acef18196fa11ed7db8e046c3943"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#aabb1acef18196fa11ed7db8e046c3943">try_pop</a> (T &result)</td></tr>
-<tr class="memdesc:aabb1acef18196fa11ed7db8e046c3943"><td class="mdescLeft"> </td><td class="mdescRight">Attempt to dequeue an item from head of queue.  <a href="#aabb1acef18196fa11ed7db8e046c3943">More...</a><br/></td></tr>
-<tr class="separator:aabb1acef18196fa11ed7db8e046c3943"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aad4b253ba595637b0b146eb6565556f2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad4b253ba595637b0b146eb6565556f2"></a>
-<a class="el" href="a00046.html#a9f883e49afea16293ba92da779981bb8">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#aad4b253ba595637b0b146eb6565556f2">unsafe_size</a> () const </td></tr>
-<tr class="memdesc:aad4b253ba595637b0b146eb6565556f2"><td class="mdescLeft"> </td><td class="mdescRight">Return the number of items in the queue; thread unsafe. <br/></td></tr>
-<tr class="separator:aad4b253ba595637b0b146eb6565556f2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aeda3156929d0c250faed7b807ca6ab0e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeda3156929d0c250faed7b807ca6ab0e"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#aeda3156929d0c250faed7b807ca6ab0e">empty</a> () const </td></tr>
-<tr class="memdesc:aeda3156929d0c250faed7b807ca6ab0e"><td class="mdescLeft"> </td><td class="mdescRight">Equivalent to size()==0. <br/></td></tr>
-<tr class="separator:aeda3156929d0c250faed7b807ca6ab0e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad3384818fb6350a494d5ec62445e59ee"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3384818fb6350a494d5ec62445e59ee"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#ad3384818fb6350a494d5ec62445e59ee">clear</a> ()</td></tr>
-<tr class="memdesc:ad3384818fb6350a494d5ec62445e59ee"><td class="mdescLeft"> </td><td class="mdescRight">Clear the queue. not thread-safe. <br/></td></tr>
-<tr class="separator:ad3384818fb6350a494d5ec62445e59ee"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7f2b39f350281590b86db906eca6c480"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f2b39f350281590b86db906eca6c480"></a>
-<a class="el" href="a00046.html#acbdd1a5bd034358fb0774b322a66b1ed">allocator_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a7f2b39f350281590b86db906eca6c480">get_allocator</a> () const </td></tr>
-<tr class="memdesc:a7f2b39f350281590b86db906eca6c480"><td class="mdescLeft"> </td><td class="mdescRight">Return allocator object. <br/></td></tr>
-<tr class="separator:a7f2b39f350281590b86db906eca6c480"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6658faeae3c10135a553fedadddde239"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6658faeae3c10135a553fedadddde239"></a>
-iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_begin</b> ()</td></tr>
-<tr class="separator:a6658faeae3c10135a553fedadddde239"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa7593de5e76006ed3adef4d060f0009c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa7593de5e76006ed3adef4d060f0009c"></a>
-iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_end</b> ()</td></tr>
-<tr class="separator:aa7593de5e76006ed3adef4d060f0009c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0f84b37020f4267f17c7e91acfc0c446"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0f84b37020f4267f17c7e91acfc0c446"></a>
-const_iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_begin</b> () const </td></tr>
-<tr class="separator:a0f84b37020f4267f17c7e91acfc0c446"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a118a79d7e20cdbd807fa7fccc2a5b848"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a118a79d7e20cdbd807fa7fccc2a5b848"></a>
-const_iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_end</b> () const </td></tr>
-<tr class="separator:a118a79d7e20cdbd807fa7fccc2a5b848"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5bd95c2241653c760704a92b2c887a48"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5bd95c2241653c760704a92b2c887a48"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a5bd95c2241653c760704a92b2c887a48">concurrent_vector</a> (const allocator_type &a=allocator_type())</td></tr>
+<tr class="memdesc:a5bd95c2241653c760704a92b2c887a48"><td class="mdescLeft"> </td><td class="mdescRight">Construct empty vector. <br/></td></tr>
+<tr class="separator:a5bd95c2241653c760704a92b2c887a48"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa25dccd2f65fbfa148e92d01a11c20ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa25dccd2f65fbfa148e92d01a11c20ff"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#aa25dccd2f65fbfa148e92d01a11c20ff">concurrent_vector</a> (std::initializer_list< T > init_list, const allocator_type &a=allocator_type())</td></tr>
+<tr class="memdesc:aa25dccd2f65fbfa148e92d01a11c20ff"><td class="mdescLeft"> </td><td class="mdescRight">Constructor from initializer_list. <br/></td></tr>
+<tr class="separator:aa25dccd2f65fbfa148e92d01a11c20ff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a03b5a0e9069b30dc4e2e5fc2f191ccb6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a03b5a0e9069b30dc4e2e5fc2f191ccb6"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a03b5a0e9069b30dc4e2e5fc2f191ccb6">concurrent_vector</a> (const <a class="el" href="a00046.html">concurrent_vector</a> &vector, const allocator_type &a=allocator_type())</td></tr>
+<tr class="memdesc:a03b5a0e9069b30dc4e2e5fc2f191ccb6"><td class="mdescLeft"> </td><td class="mdescRight">Copying constructor. <br/></td></tr>
+<tr class="separator:a03b5a0e9069b30dc4e2e5fc2f191ccb6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aafb048cfda83d0e7803888ead76c06a9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aafb048cfda83d0e7803888ead76c06a9"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#aafb048cfda83d0e7803888ead76c06a9">concurrent_vector</a> (<a class="el" href="a00046.html">concurrent_vector</a> &&source)</td></tr>
+<tr class="memdesc:aafb048cfda83d0e7803888ead76c06a9"><td class="mdescLeft"> </td><td class="mdescRight">Move constructor. <br/></td></tr>
+<tr class="separator:aafb048cfda83d0e7803888ead76c06a9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aef020f41f3017fecc43e70a22d3e0fc0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aef020f41f3017fecc43e70a22d3e0fc0"></a>
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_vector</b> (<a class="el" href="a00046.html">concurrent_vector</a> &&source, const allocator_type &a)</td></tr>
+<tr class="separator:aef020f41f3017fecc43e70a22d3e0fc0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abb0e376a31c3fdb91beaaa98441735f5"><td class="memTemplParams" colspan="2"><a class="anchor" id="abb0e376a31c3fdb91beaaa98441735f5"></a>
+template<class M > </td></tr>
+<tr class="memitem:abb0e376a31c3fdb91beaaa98441735f5"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00046.html#abb0e376a31c3fdb91beaaa98441735f5">concurrent_vector</a> (const <a class="el" href="a00046.html">concurrent_vector</a>< T, M > &vector, const allocator_type &a=allocator_type())</td></tr>
+<tr class="memdesc:abb0e376a31c3fdb91beaaa98441735f5"><td class="mdescLeft"> </td><td class="mdescRight">Copying constructor for vector with different allocator type. <br/></td></tr>
+<tr class="separator:abb0e376a31c3fdb91beaaa98441735f5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa898a39aad73711ceca70cd465dc0b4f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa898a39aad73711ceca70cd465dc0b4f"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#aa898a39aad73711ceca70cd465dc0b4f">concurrent_vector</a> (size_type n)</td></tr>
+<tr class="memdesc:aa898a39aad73711ceca70cd465dc0b4f"><td class="mdescLeft"> </td><td class="mdescRight">Construction with initial size specified by argument n. <br/></td></tr>
+<tr class="separator:aa898a39aad73711ceca70cd465dc0b4f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a736c6e35f1df11625636968ea546e21f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a736c6e35f1df11625636968ea546e21f"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a736c6e35f1df11625636968ea546e21f">concurrent_vector</a> (size_type n, const_reference t, const allocator_type &a=allocator_type())</td></tr>
+<tr class="memdesc:a736c6e35f1df11625636968ea546e21f"><td class="mdescLeft"> </td><td class="mdescRight">Construction with initial size specified by argument n, initialization by copying of t, and given allocator instance. <br/></td></tr>
+<tr class="separator:a736c6e35f1df11625636968ea546e21f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae0d384ec56032d18f63e26960029d3ce"><td class="memTemplParams" colspan="2"><a class="anchor" id="ae0d384ec56032d18f63e26960029d3ce"></a>
+template<class I > </td></tr>
+<tr class="memitem:ae0d384ec56032d18f63e26960029d3ce"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00046.html#ae0d384ec56032d18f63e26960029d3ce">concurrent_vector</a> (I first, I last, const allocator_type &a=allocator_type())</td></tr>
+<tr class="memdesc:ae0d384ec56032d18f63e26960029d3ce"><td class="mdescLeft"> </td><td class="mdescRight">Construction with copying iteration range and given allocator instance. <br/></td></tr>
+<tr class="separator:ae0d384ec56032d18f63e26960029d3ce"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a920384aece0eb8beea3049956320ec91"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a920384aece0eb8beea3049956320ec91"></a>
+<a class="el" href="a00046.html">concurrent_vector</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a920384aece0eb8beea3049956320ec91">operator=</a> (const <a class="el" href="a00046.html">concurrent_vector</a> &vector)</td></tr>
+<tr class="memdesc:a920384aece0eb8beea3049956320ec91"><td class="mdescLeft"> </td><td class="mdescRight">Assignment. <br/></td></tr>
+<tr class="separator:a920384aece0eb8beea3049956320ec91"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0d26889a94203cdb5f5460fade7497c7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0d26889a94203cdb5f5460fade7497c7"></a>
+<a class="el" href="a00046.html">concurrent_vector</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a0d26889a94203cdb5f5460fade7497c7">operator=</a> (<a class="el" href="a00046.html">concurrent_vector</a> &&other)</td></tr>
+<tr class="memdesc:a0d26889a94203cdb5f5460fade7497c7"><td class="mdescLeft"> </td><td class="mdescRight">Move assignment. <br/></td></tr>
+<tr class="separator:a0d26889a94203cdb5f5460fade7497c7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1fe7f0b60bbf304890a9293a35e6819d"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1fe7f0b60bbf304890a9293a35e6819d"></a>
+template<class M > </td></tr>
+<tr class="memitem:a1fe7f0b60bbf304890a9293a35e6819d"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="a00046.html">concurrent_vector</a> & </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00046.html#a1fe7f0b60bbf304890a9293a35e6819d">operator=</a> (const <a class="el" href="a00046.html">concurrent_vector</a>< T, M > &vector)</td></tr>
+<tr class="memdesc:a1fe7f0b60bbf304890a9293a35e6819d"><td class="mdescLeft"> </td><td class="mdescRight">Assignment for vector with different allocator type. <br/></td></tr>
+<tr class="separator:a1fe7f0b60bbf304890a9293a35e6819d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8498a1335a3bbac2f4925a4e8d70cdb8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8498a1335a3bbac2f4925a4e8d70cdb8"></a>
+<a class="el" href="a00046.html">concurrent_vector</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a8498a1335a3bbac2f4925a4e8d70cdb8">operator=</a> (std::initializer_list< T > init_list)</td></tr>
+<tr class="memdesc:a8498a1335a3bbac2f4925a4e8d70cdb8"><td class="mdescLeft"> </td><td class="mdescRight">Assignment for initializer_list. <br/></td></tr>
+<tr class="separator:a8498a1335a3bbac2f4925a4e8d70cdb8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab89c2db5358048debdc282ff995caffb"><td class="memItemLeft" align="right" valign="top">iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#ab89c2db5358048debdc282ff995caffb">grow_by</a> (size_type delta)</td></tr>
+<tr class="memdesc:ab89c2db5358048debdc282ff995caffb"><td class="mdescLeft"> </td><td class="mdescRight">Grow by "delta" elements.  <a href="#ab89c2db5358048debdc282ff995caffb">More...</a><br/></td></tr>
+<tr class="separator:ab89c2db5358048debdc282ff995caffb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa11fc991cda82cf93789fce31b37a16c"><td class="memItemLeft" align="right" valign="top">iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#aa11fc991cda82cf93789fce31b37a16c">grow_by</a> (size_type delta, const_reference t)</td></tr>
+<tr class="memdesc:aa11fc991cda82cf93789fce31b37a16c"><td class="mdescLeft"> </td><td class="mdescRight">Grow by "delta" elements using copying constructor.  <a href="#aa11fc991cda82cf93789fce31b37a16c">More...</a><br/></td></tr>
+<tr class="separator:aa11fc991cda82cf93789fce31b37a16c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acfd74483ff523213b78f44fb914c8eb4"><td class="memTemplParams" colspan="2">template<typename I > </td></tr>
+<tr class="memitem:acfd74483ff523213b78f44fb914c8eb4"><td class="memTemplItemLeft" align="right" valign="top">iterator </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00046.html#acfd74483ff523213b78f44fb914c8eb4">grow_by</a> (I first, I last)</td></tr>
+<tr class="separator:acfd74483ff523213b78f44fb914c8eb4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a95f57f1529e0ebd1ca6bd2d60003fcab"><td class="memItemLeft" align="right" valign="top">iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a95f57f1529e0ebd1ca6bd2d60003fcab">grow_by</a> (std::initializer_list< T > init_list)</td></tr>
+<tr class="separator:a95f57f1529e0ebd1ca6bd2d60003fcab"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae9ef9895e88f9bf036b379035c18f035"><td class="memItemLeft" align="right" valign="top">iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#ae9ef9895e88f9bf036b379035c18f035">grow_to_at_least</a> (size_type n)</td></tr>
+<tr class="memdesc:ae9ef9895e88f9bf036b379035c18f035"><td class="mdescLeft"> </td><td class="mdescRight">Append minimal sequence of elements such that <a class="el" href="a00046.html#a803268c16e3688ff4681251947d257c7" title="Return size of vector. It may include elements under construction. ">size()</a>>=n.  <a href="#ae9ef9895e88f9bf036b379035c18f035">More...</a><br/></td></tr>
+<tr class="separator:ae9ef9895e88f9bf036b379035c18f035"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a422d9689ed72a5ef2b6b72f28e4143a2"><td class="memItemLeft" align="right" valign="top">iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a422d9689ed72a5ef2b6b72f28e4143a2">grow_to_at_least</a> (size_type n, const_reference t)</td></tr>
+<tr class="separator:a422d9689ed72a5ef2b6b72f28e4143a2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad68d1675fedef232bfae35f200ba007d"><td class="memItemLeft" align="right" valign="top">iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#ad68d1675fedef232bfae35f200ba007d">push_back</a> (const_reference item)</td></tr>
+<tr class="memdesc:ad68d1675fedef232bfae35f200ba007d"><td class="mdescLeft"> </td><td class="mdescRight">Push item.  <a href="#ad68d1675fedef232bfae35f200ba007d">More...</a><br/></td></tr>
+<tr class="separator:ad68d1675fedef232bfae35f200ba007d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac29a9f08c0fac7c20786c7b8f4f0321a"><td class="memItemLeft" align="right" valign="top">iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#ac29a9f08c0fac7c20786c7b8f4f0321a">push_back</a> (T &&item)</td></tr>
+<tr class="memdesc:ac29a9f08c0fac7c20786c7b8f4f0321a"><td class="mdescLeft"> </td><td class="mdescRight">Push item, move-aware.  <a href="#ac29a9f08c0fac7c20786c7b8f4f0321a">More...</a><br/></td></tr>
+<tr class="separator:ac29a9f08c0fac7c20786c7b8f4f0321a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afae4c378515b89cc2b0a11c8cf1bcc50"><td class="memTemplParams" colspan="2">template<typename... Args> </td></tr>
+<tr class="memitem:afae4c378515b89cc2b0a11c8cf1bcc50"><td class="memTemplItemLeft" align="right" valign="top">iterator </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00046.html#afae4c378515b89cc2b0a11c8cf1bcc50">emplace_back</a> (Args &&...args)</td></tr>
+<tr class="memdesc:afae4c378515b89cc2b0a11c8cf1bcc50"><td class="mdescLeft"> </td><td class="mdescRight">Push item, create item "in place" with provided arguments.  <a href="#afae4c378515b89cc2b0a11c8cf1bcc50">More...</a><br/></td></tr>
+<tr class="separator:afae4c378515b89cc2b0a11c8cf1bcc50"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3097cb46511504acfc9de7da5235f4a6"><td class="memItemLeft" align="right" valign="top">reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a3097cb46511504acfc9de7da5235f4a6">operator[]</a> (size_type index)</td></tr>
+<tr class="memdesc:a3097cb46511504acfc9de7da5235f4a6"><td class="mdescLeft"> </td><td class="mdescRight">Get reference to element at given index.  <a href="#a3097cb46511504acfc9de7da5235f4a6">More...</a><br/></td></tr>
+<tr class="separator:a3097cb46511504acfc9de7da5235f4a6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abd6ca67f2f97fafca48395af2e693e73"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abd6ca67f2f97fafca48395af2e693e73"></a>
+const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#abd6ca67f2f97fafca48395af2e693e73">operator[]</a> (size_type index) const </td></tr>
+<tr class="memdesc:abd6ca67f2f97fafca48395af2e693e73"><td class="mdescLeft"> </td><td class="mdescRight">Get const reference to element at given index. <br/></td></tr>
+<tr class="separator:abd6ca67f2f97fafca48395af2e693e73"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a629a29eb21e528414b9d5c9becfe05cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a629a29eb21e528414b9d5c9becfe05cd"></a>
+reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a629a29eb21e528414b9d5c9becfe05cd">at</a> (size_type index)</td></tr>
+<tr class="memdesc:a629a29eb21e528414b9d5c9becfe05cd"><td class="mdescLeft"> </td><td class="mdescRight">Get reference to element at given index. Throws exceptions on errors. <br/></td></tr>
+<tr class="separator:a629a29eb21e528414b9d5c9becfe05cd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae4dc6c1b55c0e0b73f0a8675ef2b60a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae4dc6c1b55c0e0b73f0a8675ef2b60a4"></a>
+const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#ae4dc6c1b55c0e0b73f0a8675ef2b60a4">at</a> (size_type index) const </td></tr>
+<tr class="memdesc:ae4dc6c1b55c0e0b73f0a8675ef2b60a4"><td class="mdescLeft"> </td><td class="mdescRight">Get const reference to element at given index. Throws exceptions on errors. <br/></td></tr>
+<tr class="separator:ae4dc6c1b55c0e0b73f0a8675ef2b60a4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8201f65735edcc28aeec95b6e73d75b6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8201f65735edcc28aeec95b6e73d75b6"></a>
+range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a8201f65735edcc28aeec95b6e73d75b6">range</a> (size_t grainsize=1)</td></tr>
+<tr class="memdesc:a8201f65735edcc28aeec95b6e73d75b6"><td class="mdescLeft"> </td><td class="mdescRight">Get range for iterating with parallel algorithms. <br/></td></tr>
+<tr class="separator:a8201f65735edcc28aeec95b6e73d75b6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8fcc32ec9ccb48c3327a88fe288c7538"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8fcc32ec9ccb48c3327a88fe288c7538"></a>
+const_range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a8fcc32ec9ccb48c3327a88fe288c7538">range</a> (size_t grainsize=1) const </td></tr>
+<tr class="memdesc:a8fcc32ec9ccb48c3327a88fe288c7538"><td class="mdescLeft"> </td><td class="mdescRight">Get const range for iterating with parallel algorithms. <br/></td></tr>
+<tr class="separator:a8fcc32ec9ccb48c3327a88fe288c7538"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a803268c16e3688ff4681251947d257c7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a803268c16e3688ff4681251947d257c7"></a>
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a803268c16e3688ff4681251947d257c7">size</a> () const </td></tr>
+<tr class="memdesc:a803268c16e3688ff4681251947d257c7"><td class="mdescLeft"> </td><td class="mdescRight">Return size of vector. It may include elements under construction. <br/></td></tr>
+<tr class="separator:a803268c16e3688ff4681251947d257c7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa3f6774107e65642f73c0dcc9a962fe7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa3f6774107e65642f73c0dcc9a962fe7"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#aa3f6774107e65642f73c0dcc9a962fe7">empty</a> () const </td></tr>
+<tr class="memdesc:aa3f6774107e65642f73c0dcc9a962fe7"><td class="mdescLeft"> </td><td class="mdescRight">Return false if vector is not empty or has elements under construction at least. <br/></td></tr>
+<tr class="separator:aa3f6774107e65642f73c0dcc9a962fe7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a96c2ae9dfedc24d62554feb627df76c3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a96c2ae9dfedc24d62554feb627df76c3"></a>
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a96c2ae9dfedc24d62554feb627df76c3">capacity</a> () const </td></tr>
+<tr class="memdesc:a96c2ae9dfedc24d62554feb627df76c3"><td class="mdescLeft"> </td><td class="mdescRight">Maximum size to which array can grow without allocating more memory. Concurrent allocations are not included in the value. <br/></td></tr>
+<tr class="separator:a96c2ae9dfedc24d62554feb627df76c3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0b3284684328c58c0228c9a697ef3594"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a0b3284684328c58c0228c9a697ef3594">reserve</a> (size_type n)</td></tr>
+<tr class="memdesc:a0b3284684328c58c0228c9a697ef3594"><td class="mdescLeft"> </td><td class="mdescRight">Allocate enough space to grow to size n without having to allocate more memory later.  <a href="#a0b3284684328c58c0228c9a697ef3594">More...</a><br/></td></tr>
+<tr class="separator:a0b3284684328c58c0228c9a697ef3594"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a65e53a98a1e1fdb515fdc2b84e2314e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a65e53a98a1e1fdb515fdc2b84e2314e8"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a65e53a98a1e1fdb515fdc2b84e2314e8">resize</a> (size_type n)</td></tr>
+<tr class="memdesc:a65e53a98a1e1fdb515fdc2b84e2314e8"><td class="mdescLeft"> </td><td class="mdescRight">Resize the vector. Not thread-safe. <br/></td></tr>
+<tr class="separator:a65e53a98a1e1fdb515fdc2b84e2314e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a941917a8a840ff08ce8810ca9476ff46"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a941917a8a840ff08ce8810ca9476ff46"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a941917a8a840ff08ce8810ca9476ff46">resize</a> (size_type n, const_reference t)</td></tr>
+<tr class="memdesc:a941917a8a840ff08ce8810ca9476ff46"><td class="mdescLeft"> </td><td class="mdescRight">Resize the vector, copy t for new elements. Not thread-safe. <br/></td></tr>
+<tr class="separator:a941917a8a840ff08ce8810ca9476ff46"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aba805b5225ad3399550f78ea15e51e93"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba805b5225ad3399550f78ea15e51e93"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#aba805b5225ad3399550f78ea15e51e93">shrink_to_fit</a> ()</td></tr>
+<tr class="memdesc:aba805b5225ad3399550f78ea15e51e93"><td class="mdescLeft"> </td><td class="mdescRight">Optimize memory usage and fragmentation. <br/></td></tr>
+<tr class="separator:aba805b5225ad3399550f78ea15e51e93"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0ec9c3ab3360e04bdaa5174956a3206d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0ec9c3ab3360e04bdaa5174956a3206d"></a>
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a0ec9c3ab3360e04bdaa5174956a3206d">max_size</a> () const </td></tr>
+<tr class="memdesc:a0ec9c3ab3360e04bdaa5174956a3206d"><td class="mdescLeft"> </td><td class="mdescRight">Upper bound on argument to reserve. <br/></td></tr>
+<tr class="separator:a0ec9c3ab3360e04bdaa5174956a3206d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab55636c80368ad7d400f3200313fcf5f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab55636c80368ad7d400f3200313fcf5f"></a>
+iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#ab55636c80368ad7d400f3200313fcf5f">begin</a> ()</td></tr>
+<tr class="memdesc:ab55636c80368ad7d400f3200313fcf5f"><td class="mdescLeft"> </td><td class="mdescRight">start iterator <br/></td></tr>
+<tr class="separator:ab55636c80368ad7d400f3200313fcf5f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aad2c07653375e4a5f89c33b375eda610"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad2c07653375e4a5f89c33b375eda610"></a>
+iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#aad2c07653375e4a5f89c33b375eda610">end</a> ()</td></tr>
+<tr class="memdesc:aad2c07653375e4a5f89c33b375eda610"><td class="mdescLeft"> </td><td class="mdescRight">end iterator <br/></td></tr>
+<tr class="separator:aad2c07653375e4a5f89c33b375eda610"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad3eb33d1b10a988a87cc708ceb08f3a9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3eb33d1b10a988a87cc708ceb08f3a9"></a>
+const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#ad3eb33d1b10a988a87cc708ceb08f3a9">begin</a> () const </td></tr>
+<tr class="memdesc:ad3eb33d1b10a988a87cc708ceb08f3a9"><td class="mdescLeft"> </td><td class="mdescRight">start const iterator <br/></td></tr>
+<tr class="separator:ad3eb33d1b10a988a87cc708ceb08f3a9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6a4ad0795a19d94df24595e748f0b193"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6a4ad0795a19d94df24595e748f0b193"></a>
+const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a6a4ad0795a19d94df24595e748f0b193">end</a> () const </td></tr>
+<tr class="memdesc:a6a4ad0795a19d94df24595e748f0b193"><td class="mdescLeft"> </td><td class="mdescRight">end const iterator <br/></td></tr>
+<tr class="separator:a6a4ad0795a19d94df24595e748f0b193"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7a1c5441fa480c07ef37d9206b6260cc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7a1c5441fa480c07ef37d9206b6260cc"></a>
+const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a7a1c5441fa480c07ef37d9206b6260cc">cbegin</a> () const </td></tr>
+<tr class="memdesc:a7a1c5441fa480c07ef37d9206b6260cc"><td class="mdescLeft"> </td><td class="mdescRight">start const iterator <br/></td></tr>
+<tr class="separator:a7a1c5441fa480c07ef37d9206b6260cc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9ea80faf139feb54d6576c036e4ba898"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9ea80faf139feb54d6576c036e4ba898"></a>
+const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a9ea80faf139feb54d6576c036e4ba898">cend</a> () const </td></tr>
+<tr class="memdesc:a9ea80faf139feb54d6576c036e4ba898"><td class="mdescLeft"> </td><td class="mdescRight">end const iterator <br/></td></tr>
+<tr class="separator:a9ea80faf139feb54d6576c036e4ba898"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9a2f8dce0adcbef8e29273c23723a78e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a2f8dce0adcbef8e29273c23723a78e"></a>
+reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a9a2f8dce0adcbef8e29273c23723a78e">rbegin</a> ()</td></tr>
+<tr class="memdesc:a9a2f8dce0adcbef8e29273c23723a78e"><td class="mdescLeft"> </td><td class="mdescRight">reverse start iterator <br/></td></tr>
+<tr class="separator:a9a2f8dce0adcbef8e29273c23723a78e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a618f38279a370c18f73ea2c29ded9cb9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a618f38279a370c18f73ea2c29ded9cb9"></a>
+reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a618f38279a370c18f73ea2c29ded9cb9">rend</a> ()</td></tr>
+<tr class="memdesc:a618f38279a370c18f73ea2c29ded9cb9"><td class="mdescLeft"> </td><td class="mdescRight">reverse end iterator <br/></td></tr>
+<tr class="separator:a618f38279a370c18f73ea2c29ded9cb9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a976b0bed19de9ab93f78c10184a4e38f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a976b0bed19de9ab93f78c10184a4e38f"></a>
+const_reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a976b0bed19de9ab93f78c10184a4e38f">rbegin</a> () const </td></tr>
+<tr class="memdesc:a976b0bed19de9ab93f78c10184a4e38f"><td class="mdescLeft"> </td><td class="mdescRight">reverse start const iterator <br/></td></tr>
+<tr class="separator:a976b0bed19de9ab93f78c10184a4e38f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abdb98e17cb65d9c445d7fd1e662c2699"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abdb98e17cb65d9c445d7fd1e662c2699"></a>
+const_reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#abdb98e17cb65d9c445d7fd1e662c2699">rend</a> () const </td></tr>
+<tr class="memdesc:abdb98e17cb65d9c445d7fd1e662c2699"><td class="mdescLeft"> </td><td class="mdescRight">reverse end const iterator <br/></td></tr>
+<tr class="separator:abdb98e17cb65d9c445d7fd1e662c2699"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2627db4a7949522ea4727320b23a6348"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2627db4a7949522ea4727320b23a6348"></a>
+const_reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a2627db4a7949522ea4727320b23a6348">crbegin</a> () const </td></tr>
+<tr class="memdesc:a2627db4a7949522ea4727320b23a6348"><td class="mdescLeft"> </td><td class="mdescRight">reverse start const iterator <br/></td></tr>
+<tr class="separator:a2627db4a7949522ea4727320b23a6348"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad097225c529dbb24cc0e13a444ab4752"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad097225c529dbb24cc0e13a444ab4752"></a>
+const_reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#ad097225c529dbb24cc0e13a444ab4752">crend</a> () const </td></tr>
+<tr class="memdesc:ad097225c529dbb24cc0e13a444ab4752"><td class="mdescLeft"> </td><td class="mdescRight">reverse end const iterator <br/></td></tr>
+<tr class="separator:ad097225c529dbb24cc0e13a444ab4752"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9bfc6d733cf543280b691ed8d7b7908a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9bfc6d733cf543280b691ed8d7b7908a"></a>
+reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a9bfc6d733cf543280b691ed8d7b7908a">front</a> ()</td></tr>
+<tr class="memdesc:a9bfc6d733cf543280b691ed8d7b7908a"><td class="mdescLeft"> </td><td class="mdescRight">the first item <br/></td></tr>
+<tr class="separator:a9bfc6d733cf543280b691ed8d7b7908a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9067259572c2c41d014840d0f9d3cdce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9067259572c2c41d014840d0f9d3cdce"></a>
+const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a9067259572c2c41d014840d0f9d3cdce">front</a> () const </td></tr>
+<tr class="memdesc:a9067259572c2c41d014840d0f9d3cdce"><td class="mdescLeft"> </td><td class="mdescRight">the first item const <br/></td></tr>
+<tr class="separator:a9067259572c2c41d014840d0f9d3cdce"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaee3ddf1d05238a8a6887f6d824b76f8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaee3ddf1d05238a8a6887f6d824b76f8"></a>
+reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#aaee3ddf1d05238a8a6887f6d824b76f8">back</a> ()</td></tr>
+<tr class="memdesc:aaee3ddf1d05238a8a6887f6d824b76f8"><td class="mdescLeft"> </td><td class="mdescRight">the last item <br/></td></tr>
+<tr class="separator:aaee3ddf1d05238a8a6887f6d824b76f8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf66eb1e82dbcb430d9926a23711c720"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf66eb1e82dbcb430d9926a23711c720"></a>
+const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#acf66eb1e82dbcb430d9926a23711c720">back</a> () const </td></tr>
+<tr class="memdesc:acf66eb1e82dbcb430d9926a23711c720"><td class="mdescLeft"> </td><td class="mdescRight">the last item const <br/></td></tr>
+<tr class="separator:acf66eb1e82dbcb430d9926a23711c720"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a88b62a9614d3f2b59c9c7c1a2143fb1e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a88b62a9614d3f2b59c9c7c1a2143fb1e"></a>
+allocator_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a88b62a9614d3f2b59c9c7c1a2143fb1e">get_allocator</a> () const </td></tr>
+<tr class="memdesc:a88b62a9614d3f2b59c9c7c1a2143fb1e"><td class="mdescLeft"> </td><td class="mdescRight">return allocator object <br/></td></tr>
+<tr class="separator:a88b62a9614d3f2b59c9c7c1a2143fb1e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a87355dce93d0882aa73333a35c9b367c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a87355dce93d0882aa73333a35c9b367c"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a87355dce93d0882aa73333a35c9b367c">assign</a> (size_type n, const_reference t)</td></tr>
+<tr class="memdesc:a87355dce93d0882aa73333a35c9b367c"><td class="mdescLeft"> </td><td class="mdescRight">assign n items by copying t item <br/></td></tr>
+<tr class="separator:a87355dce93d0882aa73333a35c9b367c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7bb5399a8499f88cf859eab39f0ed9e0"><td class="memTemplParams" colspan="2"><a class="anchor" id="a7bb5399a8499f88cf859eab39f0ed9e0"></a>
+template<class I > </td></tr>
+<tr class="memitem:a7bb5399a8499f88cf859eab39f0ed9e0"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00046.html#a7bb5399a8499f88cf859eab39f0ed9e0">assign</a> (I first, I last)</td></tr>
+<tr class="memdesc:a7bb5399a8499f88cf859eab39f0ed9e0"><td class="mdescLeft"> </td><td class="mdescRight">assign range [first, last) <br/></td></tr>
+<tr class="separator:a7bb5399a8499f88cf859eab39f0ed9e0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a584d6cda5794441b19d4f02bde399dff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a584d6cda5794441b19d4f02bde399dff"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a584d6cda5794441b19d4f02bde399dff">assign</a> (std::initializer_list< T > init_list)</td></tr>
+<tr class="memdesc:a584d6cda5794441b19d4f02bde399dff"><td class="mdescLeft"> </td><td class="mdescRight">assigns an initializer list <br/></td></tr>
+<tr class="separator:a584d6cda5794441b19d4f02bde399dff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8603bd57324fb6b60ba006884c95279d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8603bd57324fb6b60ba006884c95279d"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a8603bd57324fb6b60ba006884c95279d">swap</a> (<a class="el" href="a00046.html">concurrent_vector</a> &vector)</td></tr>
+<tr class="memdesc:a8603bd57324fb6b60ba006884c95279d"><td class="mdescLeft"> </td><td class="mdescRight">swap two instances <br/></td></tr>
+<tr class="separator:a8603bd57324fb6b60ba006884c95279d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a526ba408fb3064ef846940d633b8f365"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#a526ba408fb3064ef846940d633b8f365">clear</a> ()</td></tr>
+<tr class="memdesc:a526ba408fb3064ef846940d633b8f365"><td class="mdescLeft"> </td><td class="mdescRight">Clear container while keeping memory allocated.  <a href="#a526ba408fb3064ef846940d633b8f365">More...</a><br/></td></tr>
+<tr class="separator:a526ba408fb3064ef846940d633b8f365"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab5bcaededc9a00e7aaecd6c262fd0b38"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5bcaededc9a00e7aaecd6c262fd0b38"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html#ab5bcaededc9a00e7aaecd6c262fd0b38">~concurrent_vector</a> ()</td></tr>
+<tr class="memdesc:ab5bcaededc9a00e7aaecd6c262fd0b38"><td class="mdescLeft"> </td><td class="mdescRight">Clear and destroy vector. <br/></td></tr>
+<tr class="separator:ab5bcaededc9a00e7aaecd6c262fd0b38"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a675f1b62a651d350eb0d778a271e31e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a675f1b62a651d350eb0d778a271e31e5"></a>
+const <br class="typebreak"/>
+internal::concurrent_vector_base_v3 & </td><td class="memItemRight" valign="bottom"><b>internal_vector_base</b> () const </td></tr>
+<tr class="separator:a675f1b62a651d350eb0d778a271e31e5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a96e2626d160361d8c6f4193ca0c7a4dd"><td class="memTemplParams" colspan="2"><a class="anchor" id="a96e2626d160361d8c6f4193ca0c7a4dd"></a>
+template<typename I > </td></tr>
+<tr class="memitem:a96e2626d160361d8c6f4193ca0c7a4dd"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>copy_range</b> (void *dst, const void *p_type_erased_iterator, size_type n)</td></tr>
+<tr class="separator:a96e2626d160361d8c6f4193ca0c7a4dd"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
 Friends</h2></td></tr>
-<tr class="memitem:a1f5eec0de2e660ea5372d19393f0920b"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1f5eec0de2e660ea5372d19393f0920b"></a>
-template<typename Container , typename Value > </td></tr>
-<tr class="memitem:a1f5eec0de2e660ea5372d19393f0920b"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::concurrent_queue_iterator</b></td></tr>
-<tr class="separator:a1f5eec0de2e660ea5372d19393f0920b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a134b00c8dd9200b9e45fe81919c66b11"><td class="memTemplParams" colspan="2"><a class="anchor" id="a134b00c8dd9200b9e45fe81919c66b11"></a>
+template<typename C , typename U > </td></tr>
+<tr class="memitem:a134b00c8dd9200b9e45fe81919c66b11"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::vector_iterator</b></td></tr>
+<tr class="separator:a134b00c8dd9200b9e45fe81919c66b11"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename T, typename A = cache_aligned_allocator<T>><br/>
-class tbb::strict_ppl::concurrent_queue< T, A ></h3>
+<div class="textblock"><h3>template<typename T, class A = cache_aligned_allocator<T>><br/>
+class tbb::concurrent_vector< T, A ></h3>
 
-<p>A high-performance thread-safe non-blocking concurrent queue. </p>
-<p>Multiple threads may each push and pop concurrently. Assignment construction is not allowed. </p>
+<p>Concurrent vector container. </p>
+<pre class="fragment">concurrent_vector is a container having the following main properties:
+- It provides random indexed access to its elements. The index of the first element is 0.
+- It ensures safe concurrent growing its size (different threads can safely append new elements).
+- Adding new elements does not invalidate existing iterators and does not change indices of existing items.
+</pre><dl class="section user"><dt>Compatibility</dt><dd>The class meets all Container Requirements and Reversible Container Requirements from C++ Standard (See ISO/IEC 14882:2003(E), clause 23.1). But it doesn't meet Sequence Requirements due to absence of insert() and erase() methods.</dd></dl>
+<dl class="section user"><dt>Exception Safety</dt><dd>Methods working with memory allocation and/or new elements construction can throw an exception if allocator fails to allocate memory or element's default constructor throws one. Concurrent vector's element of type T must conform to the following requirements:<ul>
+<li>Throwing an exception is forbidden for destructor of T.</li>
+<li>Default constructor of T must not throw an exception OR its non-virtual destructor must safely work when its object memory is zero-initialized.</li>
+</ul>
+Otherwise, the program's behavior is undefined. </dd></dl>
+<dl class="section user"><dt></dt><dd>If an exception happens inside growth or assignment operation, an instance of the vector becomes invalid unless it is stated otherwise in the method documentation. Invalid state means:<ul>
+<li>There are no guarantees that all items were initialized by a constructor. The rest of items is zero-filled, including item where exception happens.</li>
+<li>An invalid vector instance cannot be repaired; it is unable to grow anymore.</li>
+<li>Size and capacity reported by the vector are incorrect, and calculated as if the failed operation were successful.</li>
+<li>Attempt to access not allocated elements using operator[] or iterators results in access violation or segmentation fault exception, and in case of using <a class="el" href="a00046.html#a629a29eb21e528414b9d5c9becfe05cd" title="Get reference to element at given index. Throws exceptions on errors. ">at()</a> method a C++ exception is thrown.</li>
+</ul>
+If a concurrent grow operation successfully completes, all the elements it has added to the vector will remain valid and accessible even if one of subsequent grow operations fails.</dd></dl>
+<dl class="section user"><dt>Fragmentation</dt><dd>Unlike an STL vector, a <a class="el" href="a00046.html" title="Concurrent vector container. ">concurrent_vector</a> does not move existing elements if it needs to allocate more memory. The container is divided into a series of contiguous arrays of elements. The first reservation, growth, or assignment operation determines the size of the first array. Using small number of elements as initial size incurs fragmentation that may increase e [...]
+<dl class="section user"><dt>Changes since TBB 2.1</dt><dd><ul>
+<li>Fixed guarantees of <a class="el" href="a00046.html#a803268c16e3688ff4681251947d257c7" title="Return size of vector. It may include elements under construction. ">concurrent_vector::size()</a> and <a class="el" href="a00046.html#ae9ef9895e88f9bf036b379035c18f035" title="Append minimal sequence of elements such that size()>=n. ">grow_to_at_least()</a> methods to assure elements are allocated.</li>
+<li>Methods <a class="el" href="a00046.html#aad2c07653375e4a5f89c33b375eda610" title="end iterator ">end()</a>/rbegin()/back() are partly thread-safe since they use <a class="el" href="a00046.html#a803268c16e3688ff4681251947d257c7" title="Return size of vector. It may include elements under construction. ">size()</a> to get the end of vector</li>
+<li>Added <a class="el" href="a00046.html#a65e53a98a1e1fdb515fdc2b84e2314e8" title="Resize the vector. Not thread-safe. ">resize()</a> methods (not thread-safe)</li>
+<li>Added cbegin/cend/crbegin/crend methods</li>
+<li>Changed return type of methods grow* and push_back to iterator</li>
+</ul>
+</dd></dl>
+<dl class="section user"><dt>Changes since TBB 2.0</dt><dd><ul>
+<li>Implemented exception-safety guarantees</li>
+<li>Added template argument for allocator</li>
+<li>Added allocator argument in constructors</li>
+<li>Faster index calculation</li>
+<li>First growth call specifies a number of segments to be merged in the first allocation.</li>
+<li>Fixed memory blow up for swarm of vector's instances of small size</li>
+<li>Added <a class="el" href="a00046.html#aa11fc991cda82cf93789fce31b37a16c" title="Grow by "delta" elements using copying constructor. ">grow_by(size_type n, const_reference t)</a> growth using copying constructor to init new items.</li>
+<li>Added STL-like constructors.</li>
+<li>Added operators ==, < and derivatives</li>
+<li>Added <a class="el" href="a00046.html#a629a29eb21e528414b9d5c9becfe05cd" title="Get reference to element at given index. Throws exceptions on errors. ">at()</a> method, approved for using after an exception was thrown inside the vector</li>
+<li>Added <a class="el" href="a00046.html#a88b62a9614d3f2b59c9c7c1a2143fb1e" title="return allocator object ">get_allocator()</a> method.</li>
+<li>Added <a class="el" href="a00046.html#a87355dce93d0882aa73333a35c9b367c" title="assign n items by copying t item ">assign()</a> methods</li>
+<li>Added compact() method to defragment first segments</li>
+<li>Added <a class="el" href="a00046.html#a8603bd57324fb6b60ba006884c95279d" title="swap two instances ">swap()</a> method</li>
+<li><a class="el" href="a00046.html#a8201f65735edcc28aeec95b6e73d75b6" title="Get range for iterating with parallel algorithms. ">range()</a> defaults on grainsize = 1 supporting auto grainsize algorithms. </li>
+</ul>
+</dd></dl>
 </div><h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="aabb1acef18196fa11ed7db8e046c3943"></a>
+<a class="anchor" id="a526ba408fb3064ef846940d633b8f365"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, class A = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00046.html">tbb::concurrent_vector</a>< T, A >::clear </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Clear container while keeping memory allocated. </p>
+<p>To free up the memory, use in conjunction with method compact(). Not thread safe </p>
+
+</div>
+</div>
+<a class="anchor" id="afae4c378515b89cc2b0a11c8cf1bcc50"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, class A = cache_aligned_allocator<T>> </div>
+<div class="memtemplate">
+template<typename... Args> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">iterator <a class="el" href="a00046.html">tbb::concurrent_vector</a>< T, A >::emplace_back </td>
+          <td>(</td>
+          <td class="paramtype">Args &&... </td>
+          <td class="paramname"><em>args</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Push item, create item "in place" with provided arguments. </p>
+<p>Returns iterator pointing to the new element. </p>
+
+</div>
+</div>
+<a class="anchor" id="ab89c2db5358048debdc282ff995caffb"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, class A = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">iterator <a class="el" href="a00046.html">tbb::concurrent_vector</a>< T, A >::grow_by </td>
+          <td>(</td>
+          <td class="paramtype">size_type </td>
+          <td class="paramname"><em>delta</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Grow by "delta" elements. </p>
+<p>Returns iterator pointing to the first new element. </p>
+
+</div>
+</div>
+<a class="anchor" id="aa11fc991cda82cf93789fce31b37a16c"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, class A = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">iterator <a class="el" href="a00046.html">tbb::concurrent_vector</a>< T, A >::grow_by </td>
+          <td>(</td>
+          <td class="paramtype">size_type </td>
+          <td class="paramname"><em>delta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const_reference </td>
+          <td class="paramname"><em>t</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Grow by "delta" elements using copying constructor. </p>
+<p>Returns iterator pointing to the first new element. </p>
+
+</div>
+</div>
+<a class="anchor" id="acfd74483ff523213b78f44fb914c8eb4"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, class A = cache_aligned_allocator<T>> </div>
+<div class="memtemplate">
+template<typename I > </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">iterator <a class="el" href="a00046.html">tbb::concurrent_vector</a>< T, A >::grow_by </td>
+          <td>(</td>
+          <td class="paramtype">I </td>
+          <td class="paramname"><em>first</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">I </td>
+          <td class="paramname"><em>last</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Returns iterator pointing to the first new element. </p>
+
+</div>
+</div>
+<a class="anchor" id="a95f57f1529e0ebd1ca6bd2d60003fcab"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, class A = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">iterator <a class="el" href="a00046.html">tbb::concurrent_vector</a>< T, A >::grow_by </td>
+          <td>(</td>
+          <td class="paramtype">std::initializer_list< T > </td>
+          <td class="paramname"><em>init_list</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Returns iterator pointing to the first new element. </p>
+
+</div>
+</div>
+<a class="anchor" id="ae9ef9895e88f9bf036b379035c18f035"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, class A = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">iterator <a class="el" href="a00046.html">tbb::concurrent_vector</a>< T, A >::grow_to_at_least </td>
+          <td>(</td>
+          <td class="paramtype">size_type </td>
+          <td class="paramname"><em>n</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Append minimal sequence of elements such that <a class="el" href="a00046.html#a803268c16e3688ff4681251947d257c7" title="Return size of vector. It may include elements under construction. ">size()</a>>=n. </p>
+<p>The new elements are default constructed. Blocks until all elements in range [0..n) are allocated. May return while other elements are being constructed by other threads. Returns iterator that points to beginning of appended sequence. If no elements were appended, returns iterator pointing to nth element. </p>
+
+</div>
+</div>
+<a class="anchor" id="a422d9689ed72a5ef2b6b72f28e4143a2"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, class A = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">iterator <a class="el" href="a00046.html">tbb::concurrent_vector</a>< T, A >::grow_to_at_least </td>
+          <td>(</td>
+          <td class="paramtype">size_type </td>
+          <td class="paramname"><em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const_reference </td>
+          <td class="paramname"><em>t</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Analogous to <a class="el" href="a00046.html#ae9ef9895e88f9bf036b379035c18f035" title="Append minimal sequence of elements such that size()>=n. ">grow_to_at_least( size_type n )</a> with exception that the new elements are initialized by copying of t instead of default construction. </p>
+
+</div>
+</div>
+<a class="anchor" id="a3097cb46511504acfc9de7da5235f4a6"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, class A = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">reference <a class="el" href="a00046.html">tbb::concurrent_vector</a>< T, A >::operator[] </td>
+          <td>(</td>
+          <td class="paramtype">size_type </td>
+          <td class="paramname"><em>index</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get reference to element at given index. </p>
+<p>This method is thread-safe for concurrent reads, and also while growing the vector, as long as the calling thread has checked that index < <a class="el" href="a00046.html#a803268c16e3688ff4681251947d257c7" title="Return size of vector. It may include elements under construction. ">size()</a>. </p>
+
+</div>
+</div>
+<a class="anchor" id="ad68d1675fedef232bfae35f200ba007d"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, class A = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">iterator <a class="el" href="a00046.html">tbb::concurrent_vector</a>< T, A >::push_back </td>
+          <td>(</td>
+          <td class="paramtype">const_reference </td>
+          <td class="paramname"><em>item</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Push item. </p>
+<p>Returns iterator pointing to the new element. </p>
+
+</div>
+</div>
+<a class="anchor" id="ac29a9f08c0fac7c20786c7b8f4f0321a"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, class A = cache_aligned_allocator<T>> </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">iterator <a class="el" href="a00046.html">tbb::concurrent_vector</a>< T, A >::push_back </td>
+          <td>(</td>
+          <td class="paramtype">T && </td>
+          <td class="paramname"><em>item</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Push item, move-aware. </p>
+<p>Returns iterator pointing to the new element. </p>
+
+</div>
+</div>
+<a class="anchor" id="a0b3284684328c58c0228c9a697ef3594"></a>
 <div class="memitem">
 <div class="memproto">
 <div class="memtemplate">
-template<typename T , typename A  = cache_aligned_allocator<T>> </div>
+template<typename T, class A = cache_aligned_allocator<T>> </div>
 <table class="mlabels">
   <tr>
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">bool <a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue</a>< T, A >::try_pop </td>
+          <td class="memname">void <a class="el" href="a00046.html">tbb::concurrent_vector</a>< T, A >::reserve </td>
           <td>(</td>
-          <td class="paramtype">T & </td>
-          <td class="paramname"><em>result</em>)</td><td></td>
+          <td class="paramtype">size_type </td>
+          <td class="paramname"><em>n</em>)</td><td></td>
           <td></td>
         </tr>
       </table>
@@ -204,18 +790,18 @@ template<typename T , typename A  = cache_aligned_allocator<T>> </di
 </table>
 </div><div class="memdoc">
 
-<p>Attempt to dequeue an item from head of queue. </p>
-<p>Does not wait for item to become available. Returns true if successful; false otherwise. </p>
+<p>Allocate enough space to grow to size n without having to allocate more memory later. </p>
+<p>Like most of the methods provided for STL compatibility, this method is <em>not</em> thread safe. The capacity afterwards may be bigger than the requested reservation. </p>
 
 </div>
 </div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>concurrent_queue.h</li>
+<li>concurrent_vector.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00046.png b/doc/html/a00046.png
index c7a9a4d..4ffff4f 100644
Binary files a/doc/html/a00046.png and b/doc/html/a00046.png differ
diff --git a/doc/html/a00047.html b/doc/html/a00047.html
index 1f61569..df031fb 100644
--- a/doc/html/a00047.html
+++ b/doc/html/a00047.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator > Class Template Reference</title>
+<title>tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,132 +33,107 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00047.html">concurrent_unordered_map</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00036.html">concurrent_hash_map</a></li><li class="navelem"><a class="el" href="a00047.html">const_accessor</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00378.html">List of all members</a>  </div>
+<a href="#pro-methods">Protected Member Functions</a> |
+<a href="#pro-attribs">Protected Attributes</a> |
+<a href="#friends">Friends</a> |
+<a href="a00360.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator > Class Template Reference</div>  </div>
+<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
+
+<p>Combines data access, locking, and garbage collection.  
+ <a href="a00047.html#details">More...</a></p>
+
+<p><code>#include <concurrent_hash_map.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >:</div>
+Inheritance diagram for tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00047.png" usemap="#tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >_map" alt=""/>
-  <map id="tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >_map" name="tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >_map">
+  <img src="a00047.png" usemap="#tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor_map" alt=""/>
+  <map id="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor_map" name="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor_map">
+<area href="a00009.html" title="Allows write access to elements and combines data access, locking, and garbage collection. " alt="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor" shape="rect" coords="0,112,488,136"/>
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:a35d2ace709769b7059e8f8b2a144f8b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a35d2ace709769b7059e8f8b2a144f8b9"></a>
-typedef Key </td><td class="memItemRight" valign="bottom"><b>key_type</b></td></tr>
-<tr class="separator:a35d2ace709769b7059e8f8b2a144f8b9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9260034417dde6b3810347c5e347a9f8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9260034417dde6b3810347c5e347a9f8"></a>
-typedef base_type::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-<tr class="separator:a9260034417dde6b3810347c5e347a9f8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8ece8ff3de51bc415d8fc1338f793cbf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8ece8ff3de51bc415d8fc1338f793cbf"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>mapped_type</b></td></tr>
-<tr class="separator:a8ece8ff3de51bc415d8fc1338f793cbf"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afeef87b046af352e20cd92e56c0fcf34"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afeef87b046af352e20cd92e56c0fcf34"></a>
-typedef Hasher </td><td class="memItemRight" valign="bottom"><b>hasher</b></td></tr>
-<tr class="separator:afeef87b046af352e20cd92e56c0fcf34"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a21f5f2fbf3b1f721051c6b4c5fa2a735"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a21f5f2fbf3b1f721051c6b4c5fa2a735"></a>
-typedef Key_equality </td><td class="memItemRight" valign="bottom"><b>key_equal</b></td></tr>
-<tr class="separator:a21f5f2fbf3b1f721051c6b4c5fa2a735"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa15c94df26d89ef38daa7516df5e0729"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa15c94df26d89ef38daa7516df5e0729"></a>
-typedef hash_compare </td><td class="memItemRight" valign="bottom"><b>key_compare</b></td></tr>
-<tr class="separator:aa15c94df26d89ef38daa7516df5e0729"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1acd4ab50584a9dc55712e0e113583e2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1acd4ab50584a9dc55712e0e113583e2"></a>
-typedef base_type::allocator_type </td><td class="memItemRight" valign="bottom"><b>allocator_type</b></td></tr>
-<tr class="separator:a1acd4ab50584a9dc55712e0e113583e2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7e29fb2f75cdec0746afdbed0b9c5451"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7e29fb2f75cdec0746afdbed0b9c5451"></a>
-typedef base_type::pointer </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-<tr class="separator:a7e29fb2f75cdec0746afdbed0b9c5451"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab5d26f7002e7810e4c02890a1d7bdc41"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5d26f7002e7810e4c02890a1d7bdc41"></a>
-typedef base_type::const_pointer </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-<tr class="separator:ab5d26f7002e7810e4c02890a1d7bdc41"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a01e118e1e0bfe57083d8f76f4f848d2b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a01e118e1e0bfe57083d8f76f4f848d2b"></a>
-typedef base_type::reference </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
-<tr class="separator:a01e118e1e0bfe57083d8f76f4f848d2b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad1072935f6765abe3ec1b04f24f80deb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad1072935f6765abe3ec1b04f24f80deb"></a>
-typedef base_type::const_reference </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
-<tr class="separator:ad1072935f6765abe3ec1b04f24f80deb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae31360122b604d6735b12fc027f10924"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae31360122b604d6735b12fc027f10924"></a>
-typedef base_type::size_type </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-<tr class="separator:ae31360122b604d6735b12fc027f10924"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0f903f0ca898b0aa80e3a6b921b8f21a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0f903f0ca898b0aa80e3a6b921b8f21a"></a>
-typedef base_type::difference_type </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
-<tr class="separator:a0f903f0ca898b0aa80e3a6b921b8f21a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a267aff808d10aa0c437fd9261286467e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a267aff808d10aa0c437fd9261286467e"></a>
-typedef base_type::iterator </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
-<tr class="separator:a267aff808d10aa0c437fd9261286467e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5c2d1a61d1e6ed09fb3df14270d61a01"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5c2d1a61d1e6ed09fb3df14270d61a01"></a>
-typedef base_type::const_iterator </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
-<tr class="separator:a5c2d1a61d1e6ed09fb3df14270d61a01"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a744c0cf93efb5a134d6ddfb3a5fb75d3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a744c0cf93efb5a134d6ddfb3a5fb75d3"></a>
-typedef base_type::iterator </td><td class="memItemRight" valign="bottom"><b>local_iterator</b></td></tr>
-<tr class="separator:a744c0cf93efb5a134d6ddfb3a5fb75d3"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5df36261f0e5a1aea64235702fdacb62"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5df36261f0e5a1aea64235702fdacb62"></a>
-typedef base_type::const_iterator </td><td class="memItemRight" valign="bottom"><b>const_local_iterator</b></td></tr>
-<tr class="separator:a5df36261f0e5a1aea64235702fdacb62"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa8ca5aef4ee14b7eddb64767b8cd5fda"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa8ca5aef4ee14b7eddb64767b8cd5fda"></a>
+typedef const <br class="typebreak"/>
+concurrent_hash_map::value_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00047.html#aa8ca5aef4ee14b7eddb64767b8cd5fda">value_type</a></td></tr>
+<tr class="memdesc:aa8ca5aef4ee14b7eddb64767b8cd5fda"><td class="mdescLeft"> </td><td class="mdescRight">Type of value. <br/></td></tr>
+<tr class="separator:aa8ca5aef4ee14b7eddb64767b8cd5fda"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:aeeabd4bffe47ad7a300ae896c06dc46c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeeabd4bffe47ad7a300ae896c06dc46c"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_map</b> (size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())</td></tr>
-<tr class="separator:aeeabd4bffe47ad7a300ae896c06dc46c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad0e15127e237c29c923db83fb509f624"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad0e15127e237c29c923db83fb509f624"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_map</b> (const Allocator &a)</td></tr>
-<tr class="separator:ad0e15127e237c29c923db83fb509f624"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab494f2ac22495884f64985fba6ade501"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab494f2ac22495884f64985fba6ade501"></a>
-template<typename Iterator > </td></tr>
-<tr class="memitem:ab494f2ac22495884f64985fba6ade501"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>concurrent_unordered_map</b> (Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())</td></tr>
-<tr class="separator:ab494f2ac22495884f64985fba6ade501"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a788a7225915574c1a349abc0f1f653c7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a788a7225915574c1a349abc0f1f653c7"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00047.html#a788a7225915574c1a349abc0f1f653c7">concurrent_unordered_map</a> (std::initializer_list< value_type > il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())</td></tr>
-<tr class="memdesc:a788a7225915574c1a349abc0f1f653c7"><td class="mdescLeft"> </td><td class="mdescRight">Constructor from initializer_list. <br/></td></tr>
-<tr class="separator:a788a7225915574c1a349abc0f1f653c7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1593b0f93256736d163cfbcc23c7de26"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1593b0f93256736d163cfbcc23c7de26"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_map</b> (const <a class="el" href="a00047.html">concurrent_unordered_map</a> &table)</td></tr>
-<tr class="separator:a1593b0f93256736d163cfbcc23c7de26"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a47b4eec40fac7fb8b6a8023758c1a34c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a47b4eec40fac7fb8b6a8023758c1a34c"></a>
-<a class="el" href="a00047.html">concurrent_unordered_map</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00047.html">concurrent_unordered_map</a> &table)</td></tr>
-<tr class="separator:a47b4eec40fac7fb8b6a8023758c1a34c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a53dcf022c4bd65f438b377a23a9c1bae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a53dcf022c4bd65f438b377a23a9c1bae"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_map</b> (<a class="el" href="a00047.html">concurrent_unordered_map</a> &&table)</td></tr>
-<tr class="separator:a53dcf022c4bd65f438b377a23a9c1bae"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a73f8e707280b4e55a9ead393fbb012c8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a73f8e707280b4e55a9ead393fbb012c8"></a>
-<a class="el" href="a00047.html">concurrent_unordered_map</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="a00047.html">concurrent_unordered_map</a> &&table)</td></tr>
-<tr class="separator:a73f8e707280b4e55a9ead393fbb012c8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2e1cce13f9fa458a616b424c84790c25"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2e1cce13f9fa458a616b424c84790c25"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_map</b> (const <a class="el" href="a00047.html">concurrent_unordered_map</a> &table, const Allocator &a)</td></tr>
-<tr class="separator:a2e1cce13f9fa458a616b424c84790c25"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab22288d418827a312aee4191bb6a7f11"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab22288d418827a312aee4191bb6a7f11"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_map</b> (<a class="el" href="a00047.html">concurrent_unordered_map</a> &&table, const Allocator &a)</td></tr>
-<tr class="separator:ab22288d418827a312aee4191bb6a7f11"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae49177d89c80434a30aa346201abb986"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae49177d89c80434a30aa346201abb986"></a>
-mapped_type & </td><td class="memItemRight" valign="bottom"><b>operator[]</b> (const key_type &key)</td></tr>
-<tr class="separator:ae49177d89c80434a30aa346201abb986"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af2e1ccbd986686ef2e93c880a965e861"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af2e1ccbd986686ef2e93c880a965e861"></a>
-mapped_type & </td><td class="memItemRight" valign="bottom"><b>at</b> (const key_type &key)</td></tr>
-<tr class="separator:af2e1ccbd986686ef2e93c880a965e861"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a54173c11cd3bc91b491b3f83375868e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a54173c11cd3bc91b491b3f83375868e4"></a>
-const mapped_type & </td><td class="memItemRight" valign="bottom"><b>at</b> (const key_type &key) const </td></tr>
-<tr class="separator:a54173c11cd3bc91b491b3f83375868e4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6299b523d2ae8e2613f1bc160ca99b85"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6299b523d2ae8e2613f1bc160ca99b85"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00047.html#a6299b523d2ae8e2613f1bc160ca99b85">empty</a> () const </td></tr>
+<tr class="memdesc:a6299b523d2ae8e2613f1bc160ca99b85"><td class="mdescLeft"> </td><td class="mdescRight">True if result is empty. <br/></td></tr>
+<tr class="separator:a6299b523d2ae8e2613f1bc160ca99b85"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a18390cb369369d72bdf7c867755b5190"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18390cb369369d72bdf7c867755b5190"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00047.html#a18390cb369369d72bdf7c867755b5190">release</a> ()</td></tr>
+<tr class="memdesc:a18390cb369369d72bdf7c867755b5190"><td class="mdescLeft"> </td><td class="mdescRight">Set to null. <br/></td></tr>
+<tr class="separator:a18390cb369369d72bdf7c867755b5190"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8adf04e33e7c8c876ba849f26807713a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8adf04e33e7c8c876ba849f26807713a"></a>
+const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00047.html#a8adf04e33e7c8c876ba849f26807713a">operator*</a> () const </td></tr>
+<tr class="memdesc:a8adf04e33e7c8c876ba849f26807713a"><td class="mdescLeft"> </td><td class="mdescRight">Return reference to associated value in hash table. <br/></td></tr>
+<tr class="separator:a8adf04e33e7c8c876ba849f26807713a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a28fa9b9e6c35d7e80217e69a7afe1ee5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28fa9b9e6c35d7e80217e69a7afe1ee5"></a>
+const_pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00047.html#a28fa9b9e6c35d7e80217e69a7afe1ee5">operator-></a> () const </td></tr>
+<tr class="memdesc:a28fa9b9e6c35d7e80217e69a7afe1ee5"><td class="mdescLeft"> </td><td class="mdescRight">Return pointer to associated value in hash table. <br/></td></tr>
+<tr class="separator:a28fa9b9e6c35d7e80217e69a7afe1ee5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7b26d22d228cf0d8678c9b346c63752c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b26d22d228cf0d8678c9b346c63752c"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00047.html#a7b26d22d228cf0d8678c9b346c63752c">const_accessor</a> ()</td></tr>
+<tr class="memdesc:a7b26d22d228cf0d8678c9b346c63752c"><td class="mdescLeft"> </td><td class="mdescRight">Create empty result. <br/></td></tr>
+<tr class="separator:a7b26d22d228cf0d8678c9b346c63752c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afbc0c85a146c912b9a0f94a7695957c7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbc0c85a146c912b9a0f94a7695957c7"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00047.html#afbc0c85a146c912b9a0f94a7695957c7">~const_accessor</a> ()</td></tr>
+<tr class="memdesc:afbc0c85a146c912b9a0f94a7695957c7"><td class="mdescLeft"> </td><td class="mdescRight">Destroy result after releasing the underlying reference. <br/></td></tr>
+<tr class="separator:afbc0c85a146c912b9a0f94a7695957c7"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:a05b74d408d8cd7773f7b5edfef97da1b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a05b74d408d8cd7773f7b5edfef97da1b"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>is_writer</b> ()</td></tr>
+<tr class="separator:a05b74d408d8cd7773f7b5edfef97da1b"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:ac9b96f45483ddbff95a95e8e666a8f28"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac9b96f45483ddbff95a95e8e666a8f28"></a>
+<a class="el" href="a00083.html">node</a> * </td><td class="memItemRight" valign="bottom"><b>my_node</b></td></tr>
+<tr class="separator:ac9b96f45483ddbff95a95e8e666a8f28"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5034084f595666b47734f99a6eaefa9f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5034084f595666b47734f99a6eaefa9f"></a>
+hashcode_t </td><td class="memItemRight" valign="bottom"><b>my_hash</b></td></tr>
+<tr class="separator:a5034084f595666b47734f99a6eaefa9f"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a9a30829231c2a2f13cb12430992a0701"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a30829231c2a2f13cb12430992a0701"></a>
+class </td><td class="memItemRight" valign="bottom"><b>concurrent_hash_map< Key, T, HashCompare, Allocator ></b></td></tr>
+<tr class="separator:a9a30829231c2a2f13cb12430992a0701"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab1dfccf6cc719ff15006a2b05cf70dd7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab1dfccf6cc719ff15006a2b05cf70dd7"></a>
+class </td><td class="memItemRight" valign="bottom"><b>accessor</b></td></tr>
+<tr class="separator:ab1dfccf6cc719ff15006a2b05cf70dd7"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>concurrent_unordered_map.h</li>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><h3>template<typename Key, typename T, typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >><br/>
+class tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</h3>
+
+<p>Combines data access, locking, and garbage collection. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>concurrent_hash_map.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00047.png b/doc/html/a00047.png
index 0e3c404..e861a11 100644
Binary files a/doc/html/a00047.png and b/doc/html/a00047.png differ
diff --git a/doc/html/a00048.html b/doc/html/a00048.html
index 342c019..f6fd884 100644
--- a/doc/html/a00048.html
+++ b/doc/html/a00048.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping > Class Template Reference</title>
+<title>tbb::flow::interface9::continue_msg Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,72 +33,28 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00048.html">concurrent_unordered_map_traits</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00048.html">continue_msg</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#pro-types">Protected Types</a> |
-<a href="#pro-methods">Protected Member Functions</a> |
-<a href="#pro-static-methods">Static Protected Member Functions</a> |
-<a href="#pro-attribs">Protected Attributes</a> |
-<a href="a00376.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping > Class Template Reference</div>  </div>
+<div class="title">tbb::flow::interface9::continue_msg Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html">value_compare</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-types"></a>
-Protected Types</h2></td></tr>
-<tr class="memitem:a3a4d3aae580451e86649ce3a3ae38894"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom">{ <b>allow_multimapping</b> = Allow_multimapping
- }</td></tr>
-<tr class="separator:a3a4d3aae580451e86649ce3a3ae38894"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0c77b12f17473e24cda4b60b38e847fd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0c77b12f17473e24cda4b60b38e847fd"></a>
-typedef std::pair< const Key, T > </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-<tr class="separator:a0c77b12f17473e24cda4b60b38e847fd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a133cf0868239271387488f6067ce56ee"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a133cf0868239271387488f6067ce56ee"></a>
-typedef Key </td><td class="memItemRight" valign="bottom"><b>key_type</b></td></tr>
-<tr class="separator:a133cf0868239271387488f6067ce56ee"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afdf65dc261abb44bd733ebab0f54f01b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afdf65dc261abb44bd733ebab0f54f01b"></a>
-typedef Hash_compare </td><td class="memItemRight" valign="bottom"><b>hash_compare</b></td></tr>
-<tr class="separator:afdf65dc261abb44bd733ebab0f54f01b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5f015ac2f9770d8cd69d0656447b66ac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f015ac2f9770d8cd69d0656447b66ac"></a>
-typedef Allocator::template <br class="typebreak"/>
-rebind< value_type >::other </td><td class="memItemRight" valign="bottom"><b>allocator_type</b></td></tr>
-<tr class="separator:a5f015ac2f9770d8cd69d0656447b66ac"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:ae9e1e3147bd444fb77c544ef7ecb5bef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae9e1e3147bd444fb77c544ef7ecb5bef"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_map_traits</b> (const hash_compare &hc)</td></tr>
-<tr class="separator:ae9e1e3147bd444fb77c544ef7ecb5bef"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-static-methods"></a>
-Static Protected Member Functions</h2></td></tr>
-<tr class="memitem:a561f2cf05060387c8282ad57f5c816ca"><td class="memTemplParams" colspan="2"><a class="anchor" id="a561f2cf05060387c8282ad57f5c816ca"></a>
-template<class Type1 , class Type2 > </td></tr>
-<tr class="memitem:a561f2cf05060387c8282ad57f5c816ca"><td class="memTemplItemLeft" align="right" valign="top">static const Key & </td><td class="memTemplItemRight" valign="bottom"><b>get_key</b> (const std::pair< Type1, Type2 > &value)</td></tr>
-<tr class="separator:a561f2cf05060387c8282ad57f5c816ca"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
-Protected Attributes</h2></td></tr>
-<tr class="memitem:ad8f108aa7fc21e9e38050a9d56e691b7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8f108aa7fc21e9e38050a9d56e691b7"></a>
-hash_compare </td><td class="memItemRight" valign="bottom"><b>my_hash_compare</b></td></tr>
-<tr class="separator:ad8f108aa7fc21e9e38050a9d56e691b7"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>concurrent_unordered_map.h</li>
+
+<p>An empty class used for messages that mean "I'm done".  
+ <a href="a00048.html#details">More...</a></p>
+
+<p><code>#include <flow_graph.h></code></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>An empty class used for messages that mean "I'm done". </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00188.html">flow_graph.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00049.html b/doc/html/a00049.html
index b0d6a5a..13a4067 100644
--- a/doc/html/a00049.html
+++ b/doc/html/a00049.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator > Class Template Reference</title>
+<title>tbb::flow::interface9::continue_receiver Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,123 +33,294 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00049.html">concurrent_unordered_multimap</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00049.html">continue_receiver</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00379.html">List of all members</a>  </div>
+<a href="#pro-methods">Protected Member Functions</a> |
+<a href="#pro-attribs">Protected Attributes</a> |
+<a href="#friends">Friends</a> |
+<a href="a00325.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator > Class Template Reference</div>  </div>
+<div class="title">tbb::flow::interface9::continue_receiver Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
 </div><!--header-->
 <div class="contents">
+
+<p>Base class for receivers of completion messages.  
+ <a href="a00049.html#details">More...</a></p>
+
+<p><code>#include <flow_graph.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >:</div>
+Inheritance diagram for tbb::flow::interface9::continue_receiver:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00049.png" usemap="#tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >_map" alt=""/>
-  <map id="tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >_map" name="tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >_map">
+  <img src="a00049.png" usemap="#tbb::flow::interface9::continue_receiver_map" alt=""/>
+  <map id="tbb::flow::interface9::continue_receiver_map" name="tbb::flow::interface9::continue_receiver_map">
+<area href="a00119.html" alt="tbb::flow::interface9::receiver< continue_msg >" shape="rect" coords="0,56,276,80"/>
+<area href="a00164.html" alt="tbb::flow::interface9::internal::untyped_receiver" shape="rect" coords="0,0,276,24"/>
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:a13c740f45a112984c9a0c6d0d0a1a4d8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a13c740f45a112984c9a0c6d0d0a1a4d8"></a>
-typedef Key </td><td class="memItemRight" valign="bottom"><b>key_type</b></td></tr>
-<tr class="separator:a13c740f45a112984c9a0c6d0d0a1a4d8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1b89d9eeca4d1c194433b40671da2bf2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1b89d9eeca4d1c194433b40671da2bf2"></a>
-typedef base_type::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-<tr class="separator:a1b89d9eeca4d1c194433b40671da2bf2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a627d86449ed7299d1baa4b09b6dd93f6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a627d86449ed7299d1baa4b09b6dd93f6"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>mapped_type</b></td></tr>
-<tr class="separator:a627d86449ed7299d1baa4b09b6dd93f6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8485b8d61b666ac6ddd81e1d4b286d5e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8485b8d61b666ac6ddd81e1d4b286d5e"></a>
-typedef Hasher </td><td class="memItemRight" valign="bottom"><b>hasher</b></td></tr>
-<tr class="separator:a8485b8d61b666ac6ddd81e1d4b286d5e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a72a124e1c8c64499677e58171a7b9383"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a72a124e1c8c64499677e58171a7b9383"></a>
-typedef Key_equality </td><td class="memItemRight" valign="bottom"><b>key_equal</b></td></tr>
-<tr class="separator:a72a124e1c8c64499677e58171a7b9383"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6ecb30201df0bd885fbba309b2392bd4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6ecb30201df0bd885fbba309b2392bd4"></a>
-typedef hash_compare </td><td class="memItemRight" valign="bottom"><b>key_compare</b></td></tr>
-<tr class="separator:a6ecb30201df0bd885fbba309b2392bd4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aaeeee0c045e0003b85f60a6851d1d827"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaeeee0c045e0003b85f60a6851d1d827"></a>
-typedef base_type::allocator_type </td><td class="memItemRight" valign="bottom"><b>allocator_type</b></td></tr>
-<tr class="separator:aaeeee0c045e0003b85f60a6851d1d827"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a029187ffe49ae876f41dfca39fe6f288"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a029187ffe49ae876f41dfca39fe6f288"></a>
-typedef base_type::pointer </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-<tr class="separator:a029187ffe49ae876f41dfca39fe6f288"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a55c029b4a58d1201e08ef5ba14fc0a66"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a55c029b4a58d1201e08ef5ba14fc0a66"></a>
-typedef base_type::const_pointer </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-<tr class="separator:a55c029b4a58d1201e08ef5ba14fc0a66"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac4613be39e17bc83cf85d3b90a13fa09"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac4613be39e17bc83cf85d3b90a13fa09"></a>
-typedef base_type::reference </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
-<tr class="separator:ac4613be39e17bc83cf85d3b90a13fa09"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0b9ef2bc9a8574b16ef678e838ff4e96"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0b9ef2bc9a8574b16ef678e838ff4e96"></a>
-typedef base_type::const_reference </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
-<tr class="separator:a0b9ef2bc9a8574b16ef678e838ff4e96"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a49038d8ed5f392bce440d7906b39ee53"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a49038d8ed5f392bce440d7906b39ee53"></a>
-typedef base_type::size_type </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-<tr class="separator:a49038d8ed5f392bce440d7906b39ee53"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a517a0b94b44d429f7f23b6d9f5366b36"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a517a0b94b44d429f7f23b6d9f5366b36"></a>
-typedef base_type::difference_type </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
-<tr class="separator:a517a0b94b44d429f7f23b6d9f5366b36"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a494392b2f3400393ae2696a70e2411f4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a494392b2f3400393ae2696a70e2411f4"></a>
-typedef base_type::iterator </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
-<tr class="separator:a494392b2f3400393ae2696a70e2411f4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2460242ba39d70a0473eac4ee62b898c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2460242ba39d70a0473eac4ee62b898c"></a>
-typedef base_type::const_iterator </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
-<tr class="separator:a2460242ba39d70a0473eac4ee62b898c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a75ad2607efde410d591002203deb65e6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a75ad2607efde410d591002203deb65e6"></a>
-typedef base_type::iterator </td><td class="memItemRight" valign="bottom"><b>local_iterator</b></td></tr>
-<tr class="separator:a75ad2607efde410d591002203deb65e6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab7647068dd628f35d3e3f7ed161b3fc0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab7647068dd628f35d3e3f7ed161b3fc0"></a>
-typedef base_type::const_iterator </td><td class="memItemRight" valign="bottom"><b>const_local_iterator</b></td></tr>
-<tr class="separator:ab7647068dd628f35d3e3f7ed161b3fc0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9b5c2950832344121fcc9e83ce569786"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9b5c2950832344121fcc9e83ce569786"></a>
+typedef <a class="el" href="a00048.html">continue_msg</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00049.html#a9b5c2950832344121fcc9e83ce569786">input_type</a></td></tr>
+<tr class="memdesc:a9b5c2950832344121fcc9e83ce569786"><td class="mdescLeft"> </td><td class="mdescRight">The input type. <br/></td></tr>
+<tr class="separator:a9b5c2950832344121fcc9e83ce569786"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2c67857ee60501f3a3e0afeeaf06b957"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c67857ee60501f3a3e0afeeaf06b957"></a>
+typedef <a class="el" href="a00119.html">receiver</a>< <a class="el" href="a00049.html#a9b5c2950832344121fcc9e83ce569786">input_type</a> ><br class="typebreak"/>
+::<a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">predecessor_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00049.html#a2c67857ee60501f3a3e0afeeaf06b957">predecessor_type</a></td></tr>
+<tr class="memdesc:a2c67857ee60501f3a3e0afeeaf06b957"><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br/></td></tr>
+<tr class="separator:a2c67857ee60501f3a3e0afeeaf06b957"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af1037ec9ff3f6cfb5edcaaaf5006d531"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af1037ec9ff3f6cfb5edcaaaf5006d531"></a>
+typedef <br class="typebreak"/>
+<a class="el" href="a00056.html">internal::edge_container</a><br class="typebreak"/>
+< <a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">predecessor_type</a> > </td><td class="memItemRight" valign="bottom"><b>built_predecessors_type</b></td></tr>
+<tr class="separator:af1037ec9ff3f6cfb5edcaaaf5006d531"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af04d9c8b53a171f4c0fb9191391be190"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af04d9c8b53a171f4c0fb9191391be190"></a>
+typedef <br class="typebreak"/>
+built_predecessors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>predecessor_list_type</b></td></tr>
+<tr class="separator:af04d9c8b53a171f4c0fb9191391be190"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_types_a00119"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00119')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00119.html">tbb::flow::interface9::receiver< continue_msg ></a></td></tr>
+<tr class="memitem:ac7e1e823c3a7d6e491e336ff832a2495 inherit pub_types_a00119"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac7e1e823c3a7d6e491e336ff832a2495"></a>
+typedef <a class="el" href="a00048.html">continue_msg</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html#ac7e1e823c3a7d6e491e336ff832a2495">input_type</a></td></tr>
+<tr class="memdesc:ac7e1e823c3a7d6e491e336ff832a2495 inherit pub_types_a00119"><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br/></td></tr>
+<tr class="separator:ac7e1e823c3a7d6e491e336ff832a2495 inherit pub_types_a00119"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac7e1e823c3a7d6e491e336ff832a2495 inherit pub_types_a00119"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac7e1e823c3a7d6e491e336ff832a2495"></a>
+typedef <a class="el" href="a00048.html">continue_msg</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html#ac7e1e823c3a7d6e491e336ff832a2495">input_type</a></td></tr>
+<tr class="memdesc:ac7e1e823c3a7d6e491e336ff832a2495 inherit pub_types_a00119"><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br/></td></tr>
+<tr class="separator:ac7e1e823c3a7d6e491e336ff832a2495 inherit pub_types_a00119"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a388f8aec160b0a7b799a1e34b3386305 inherit pub_types_a00119"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a388f8aec160b0a7b799a1e34b3386305"></a>
+typedef <br class="typebreak"/>
+internal::async_helpers<br class="typebreak"/>
+< <a class="el" href="a00048.html">continue_msg</a> ><br class="typebreak"/>
+::filtered_type </td><td class="memItemRight" valign="bottom"><b>filtered_type</b></td></tr>
+<tr class="separator:a388f8aec160b0a7b799a1e34b3386305 inherit pub_types_a00119"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a97b14fcd2a562cf47a9548764c4e5abc inherit pub_types_a00119"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a97b14fcd2a562cf47a9548764c4e5abc"></a>
+typedef <a class="el" href="a00139.html">sender</a>< <a class="el" href="a00048.html">continue_msg</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html#a97b14fcd2a562cf47a9548764c4e5abc">predecessor_type</a></td></tr>
+<tr class="memdesc:a97b14fcd2a562cf47a9548764c4e5abc inherit pub_types_a00119"><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br/></td></tr>
+<tr class="separator:a97b14fcd2a562cf47a9548764c4e5abc inherit pub_types_a00119"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac413d1c889007c9a6d8484d3ba6ec080 inherit pub_types_a00119"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac413d1c889007c9a6d8484d3ba6ec080"></a>
+typedef <br class="typebreak"/>
+<a class="el" href="a00056.html">internal::edge_container</a><br class="typebreak"/>
+< <a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">predecessor_type</a> > </td><td class="memItemRight" valign="bottom"><b>built_predecessors_type</b></td></tr>
+<tr class="separator:ac413d1c889007c9a6d8484d3ba6ec080 inherit pub_types_a00119"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad1a0f07bfa994f8c15441252e364fc46 inherit pub_types_a00119"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad1a0f07bfa994f8c15441252e364fc46"></a>
+typedef <br class="typebreak"/>
+built_predecessors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>predecessor_list_type</b></td></tr>
+<tr class="separator:ad1a0f07bfa994f8c15441252e364fc46 inherit pub_types_a00119"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_types_a00164"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00164')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td></tr>
+<tr class="memitem:a18472c96f8466de089aa2287460b606e inherit pub_types_a00164"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18472c96f8466de089aa2287460b606e"></a>
+typedef <a class="el" href="a00165.html">untyped_sender</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">predecessor_type</a></td></tr>
+<tr class="memdesc:a18472c96f8466de089aa2287460b606e inherit pub_types_a00164"><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br/></td></tr>
+<tr class="separator:a18472c96f8466de089aa2287460b606e inherit pub_types_a00164"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a369b0e292b94a74ffd26e95ca69a9a22 inherit pub_types_a00164"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a369b0e292b94a74ffd26e95ca69a9a22"></a>
+typedef <br class="typebreak"/>
+<a class="el" href="a00056.html">internal::edge_container</a><br class="typebreak"/>
+< <a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">predecessor_type</a> > </td><td class="memItemRight" valign="bottom"><b>built_predecessors_type</b></td></tr>
+<tr class="separator:a369b0e292b94a74ffd26e95ca69a9a22 inherit pub_types_a00164"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac83b145c22d5d95930bf40154a1ce11b inherit pub_types_a00164"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac83b145c22d5d95930bf40154a1ce11b"></a>
+typedef <br class="typebreak"/>
+built_predecessors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>predecessor_list_type</b></td></tr>
+<tr class="separator:ac83b145c22d5d95930bf40154a1ce11b inherit pub_types_a00164"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a4ea5780bcc8664253e2180987bc775d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ea5780bcc8664253e2180987bc775d0"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_multimap</b> (size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())</td></tr>
-<tr class="separator:a4ea5780bcc8664253e2180987bc775d0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae2fe78524a0f0cd268194cf2461e3ab0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae2fe78524a0f0cd268194cf2461e3ab0"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_multimap</b> (const Allocator &a)</td></tr>
-<tr class="separator:ae2fe78524a0f0cd268194cf2461e3ab0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a174ad09d37e0f648e06ded3abfa65bed"><td class="memTemplParams" colspan="2"><a class="anchor" id="a174ad09d37e0f648e06ded3abfa65bed"></a>
-template<typename Iterator > </td></tr>
-<tr class="memitem:a174ad09d37e0f648e06ded3abfa65bed"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>concurrent_unordered_multimap</b> (Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())</td></tr>
-<tr class="separator:a174ad09d37e0f648e06ded3abfa65bed"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5957d29e5fa9f8c53538de3f7a41ebc9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5957d29e5fa9f8c53538de3f7a41ebc9"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00049.html#a5957d29e5fa9f8c53538de3f7a41ebc9">concurrent_unordered_multimap</a> (std::initializer_list< value_type > il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())</td></tr>
-<tr class="memdesc:a5957d29e5fa9f8c53538de3f7a41ebc9"><td class="mdescLeft"> </td><td class="mdescRight">Constructor from initializer_list. <br/></td></tr>
-<tr class="separator:a5957d29e5fa9f8c53538de3f7a41ebc9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aacf347cd41c61dd026e844fa9311130c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aacf347cd41c61dd026e844fa9311130c"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_multimap</b> (const <a class="el" href="a00049.html">concurrent_unordered_multimap</a> &table)</td></tr>
-<tr class="separator:aacf347cd41c61dd026e844fa9311130c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a58939ac30bfced4b6e2cf0377c1b7d71"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a58939ac30bfced4b6e2cf0377c1b7d71"></a>
-<a class="el" href="a00049.html">concurrent_unordered_multimap</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00049.html">concurrent_unordered_multimap</a> &table)</td></tr>
-<tr class="separator:a58939ac30bfced4b6e2cf0377c1b7d71"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac339429f4f36730ff3614cb7fcb257cb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac339429f4f36730ff3614cb7fcb257cb"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_multimap</b> (<a class="el" href="a00049.html">concurrent_unordered_multimap</a> &&table)</td></tr>
-<tr class="separator:ac339429f4f36730ff3614cb7fcb257cb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5e9a928751361cec49b26afa38018208"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e9a928751361cec49b26afa38018208"></a>
-<a class="el" href="a00049.html">concurrent_unordered_multimap</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="a00049.html">concurrent_unordered_multimap</a> &&table)</td></tr>
-<tr class="separator:a5e9a928751361cec49b26afa38018208"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a34148bd7279ce189a6c0c26380df0a2a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a34148bd7279ce189a6c0c26380df0a2a"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_multimap</b> (const <a class="el" href="a00049.html">concurrent_unordered_multimap</a> &table, const Allocator &a)</td></tr>
-<tr class="separator:a34148bd7279ce189a6c0c26380df0a2a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a040b7c942e77cca30b0ab423ae7a2d87"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a040b7c942e77cca30b0ab423ae7a2d87"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_multimap</b> (<a class="el" href="a00049.html">concurrent_unordered_multimap</a> &&table, const Allocator &a)</td></tr>
-<tr class="separator:a040b7c942e77cca30b0ab423ae7a2d87"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1e72842b80f083994dd44bdb53e2284b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e72842b80f083994dd44bdb53e2284b"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00049.html#a1e72842b80f083994dd44bdb53e2284b">continue_receiver</a> (int number_of_predecessors=0)</td></tr>
+<tr class="memdesc:a1e72842b80f083994dd44bdb53e2284b"><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br/></td></tr>
+<tr class="separator:a1e72842b80f083994dd44bdb53e2284b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3483cef04880be4c4c3907936af9afae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3483cef04880be4c4c3907936af9afae"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00049.html#a3483cef04880be4c4c3907936af9afae">continue_receiver</a> (const <a class="el" href="a00049.html">continue_receiver</a> &src)</td></tr>
+<tr class="memdesc:a3483cef04880be4c4c3907936af9afae"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br/></td></tr>
+<tr class="separator:a3483cef04880be4c4c3907936af9afae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3921e10cb2c5666d4541259d47713754"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3921e10cb2c5666d4541259d47713754"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00049.html#a3921e10cb2c5666d4541259d47713754">register_predecessor</a> (<a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">predecessor_type</a> &) __TBB_override</td></tr>
+<tr class="memdesc:a3921e10cb2c5666d4541259d47713754"><td class="mdescLeft"> </td><td class="mdescRight">Increments the trigger threshold. <br/></td></tr>
+<tr class="separator:a3921e10cb2c5666d4541259d47713754"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa0c679a297c71fba43380b07ef69563b"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00049.html#aa0c679a297c71fba43380b07ef69563b">remove_predecessor</a> (<a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">predecessor_type</a> &) __TBB_override</td></tr>
+<tr class="memdesc:aa0c679a297c71fba43380b07ef69563b"><td class="mdescLeft"> </td><td class="mdescRight">Decrements the trigger threshold.  <a href="#aa0c679a297c71fba43380b07ef69563b">More...</a><br/></td></tr>
+<tr class="separator:aa0c679a297c71fba43380b07ef69563b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aff28d4bd579e21b6471adfbbc115ed28"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aff28d4bd579e21b6471adfbbc115ed28"></a>
+<a class="el" href="a00056.html">built_predecessors_type</a> & </td><td class="memItemRight" valign="bottom"><b>built_predecessors</b> () __TBB_override</td></tr>
+<tr class="separator:aff28d4bd579e21b6471adfbbc115ed28"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0734c8ca4ad1b0c3237ebdf9446b59b1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0734c8ca4ad1b0c3237ebdf9446b59b1"></a>
+void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_predecessor</b> (<a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">predecessor_type</a> &s) __TBB_override</td></tr>
+<tr class="separator:a0734c8ca4ad1b0c3237ebdf9446b59b1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaf7f670011d394d220a4f1aaa60b37e1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaf7f670011d394d220a4f1aaa60b37e1"></a>
+void </td><td class="memItemRight" valign="bottom"><b>internal_delete_built_predecessor</b> (<a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">predecessor_type</a> &s) __TBB_override</td></tr>
+<tr class="separator:aaf7f670011d394d220a4f1aaa60b37e1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae15016fbe08fc0530989405bfab98e9c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae15016fbe08fc0530989405bfab98e9c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>copy_predecessors</b> (predecessor_list_type &v) __TBB_override</td></tr>
+<tr class="separator:ae15016fbe08fc0530989405bfab98e9c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aae2dbd7283ea44d0834fcd5c31176261"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aae2dbd7283ea44d0834fcd5c31176261"></a>
+size_t </td><td class="memItemRight" valign="bottom"><b>predecessor_count</b> () __TBB_override</td></tr>
+<tr class="separator:aae2dbd7283ea44d0834fcd5c31176261"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_methods_a00119"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00119')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00119.html">tbb::flow::interface9::receiver< continue_msg ></a></td></tr>
+<tr class="memitem:a6ac09b1571cea3efd1fdbdaf4e6ce71a inherit pub_methods_a00119"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6ac09b1571cea3efd1fdbdaf4e6ce71a"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html#a6ac09b1571cea3efd1fdbdaf4e6ce71a">try_put</a> (const typename internal::async_helpers< <a class="el" href="a00048.html">continue_msg</a> >::filtered_type &t)</td></tr>
+<tr class="memdesc:a6ac09b1571cea3efd1fdbdaf4e6ce71a inherit pub_methods_a00119"><td class="mdescLeft"> </td><td class="mdescRight">Put an item to the receiver. <br/></td></tr>
+<tr class="separator:a6ac09b1571cea3efd1fdbdaf4e6ce71a inherit pub_methods_a00119"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af4b8b1ae090b4b5f2c2ba39b2d85401b inherit pub_methods_a00119"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af4b8b1ae090b4b5f2c2ba39b2d85401b"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>try_put</b> (const typename internal::async_helpers< <a class="el" href="a00048.html">continue_msg</a> >::async_type &t)</td></tr>
+<tr class="separator:af4b8b1ae090b4b5f2c2ba39b2d85401b inherit pub_methods_a00119"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7f58c8ec0f790193be2e477b2546ead2 inherit pub_methods_a00119"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f58c8ec0f790193be2e477b2546ead2"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html#a7f58c8ec0f790193be2e477b2546ead2">try_put</a> (const <a class="el" href="a00048.html">continue_msg</a> &t)</td></tr>
+<tr class="memdesc:a7f58c8ec0f790193be2e477b2546ead2 inherit pub_methods_a00119"><td class="mdescLeft"> </td><td class="mdescRight">Put an item to the receiver. <br/></td></tr>
+<tr class="separator:a7f58c8ec0f790193be2e477b2546ead2 inherit pub_methods_a00119"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a33c66d3eb36a9e95db44fce5efeb65b4 inherit pub_methods_a00119"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a33c66d3eb36a9e95db44fce5efeb65b4"></a>
+virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html#a33c66d3eb36a9e95db44fce5efeb65b4">~receiver</a> ()</td></tr>
+<tr class="memdesc:a33c66d3eb36a9e95db44fce5efeb65b4 inherit pub_methods_a00119"><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br/></td></tr>
+<tr class="separator:a33c66d3eb36a9e95db44fce5efeb65b4 inherit pub_methods_a00119"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_methods_a00164"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00164')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td></tr>
+<tr class="memitem:a632631c8a370c1dd1fa8815cbc5e18ec inherit pub_methods_a00164"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a632631c8a370c1dd1fa8815cbc5e18ec"></a>
+virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#a632631c8a370c1dd1fa8815cbc5e18ec">~untyped_receiver</a> ()</td></tr>
+<tr class="memdesc:a632631c8a370c1dd1fa8815cbc5e18ec inherit pub_methods_a00164"><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br/></td></tr>
+<tr class="separator:a632631c8a370c1dd1fa8815cbc5e18ec inherit pub_methods_a00164"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a84f8406cd5e3252965d9e238575eaede inherit pub_methods_a00164"><td class="memTemplParams" colspan="2"><a class="anchor" id="a84f8406cd5e3252965d9e238575eaede"></a>
+template<typename X > </td></tr>
+<tr class="memitem:a84f8406cd5e3252965d9e238575eaede inherit pub_methods_a00164"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00164.html#a84f8406cd5e3252965d9e238575eaede">try_put</a> (const X &t)</td></tr>
+<tr class="memdesc:a84f8406cd5e3252965d9e238575eaede inherit pub_methods_a00164"><td class="mdescLeft"> </td><td class="mdescRight">Put an item to the receiver. <br/></td></tr>
+<tr class="separator:a84f8406cd5e3252965d9e238575eaede inherit pub_methods_a00164"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:a83b0bfae936dac53172d62a6dab4062e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a83b0bfae936dac53172d62a6dab4062e"></a>
+task * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00049.html#a83b0bfae936dac53172d62a6dab4062e">try_put_task</a> (const <a class="el" href="a00049.html#a9b5c2950832344121fcc9e83ce569786">input_type</a> &) __TBB_override</td></tr>
+<tr class="memdesc:a83b0bfae936dac53172d62a6dab4062e"><td class="mdescLeft"> </td><td class="mdescRight">Put item to successor; return task to run the successor if possible. <br/></td></tr>
+<tr class="separator:a83b0bfae936dac53172d62a6dab4062e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7074cdcd8437cde18780f7dcca69e349"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7074cdcd8437cde18780f7dcca69e349"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00049.html#a7074cdcd8437cde18780f7dcca69e349">reset_receiver</a> (reset_flags f) __TBB_override</td></tr>
+<tr class="memdesc:a7074cdcd8437cde18780f7dcca69e349"><td class="mdescLeft"> </td><td class="mdescRight">put receiver back in initial state <br/></td></tr>
+<tr class="separator:a7074cdcd8437cde18780f7dcca69e349"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ace97f82507453a8f3bc234d8de9f960d"><td class="memItemLeft" align="right" valign="top">virtual task * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00049.html#ace97f82507453a8f3bc234d8de9f960d">execute</a> ()=0</td></tr>
+<tr class="memdesc:ace97f82507453a8f3bc234d8de9f960d"><td class="mdescLeft"> </td><td class="mdescRight">Does whatever should happen when the threshold is reached.  <a href="#ace97f82507453a8f3bc234d8de9f960d">More...</a><br/></td></tr>
+<tr class="separator:ace97f82507453a8f3bc234d8de9f960d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a533c7cbad8f0b004cce7c018b33ff091"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a533c7cbad8f0b004cce7c018b33ff091"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>is_continue_receiver</b> () __TBB_override</td></tr>
+<tr class="separator:a533c7cbad8f0b004cce7c018b33ff091"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pro_methods_a00119"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00119')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00119.html">tbb::flow::interface9::receiver< continue_msg ></a></td></tr>
+<tr class="memitem:a1e7c654dfee72d5ceb414cf2048e2587 inherit pro_methods_a00119"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e7c654dfee72d5ceb414cf2048e2587"></a>
+virtual task * </td><td class="memItemRight" valign="bottom"><b>try_put_task_wrapper</b> (const void *p, bool is_async) __TBB_override</td></tr>
+<tr class="separator:a1e7c654dfee72d5ceb414cf2048e2587 inherit pro_methods_a00119"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pro_methods_a00164"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00164')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td></tr>
+<tr class="memitem:a999d560da68ba411a66954b40bd93b54 inherit pro_methods_a00164"><td class="memTemplParams" colspan="2"><a class="anchor" id="a999d560da68ba411a66954b40bd93b54"></a>
+template<typename X > </td></tr>
+<tr class="memitem:a999d560da68ba411a66954b40bd93b54 inherit pro_methods_a00164"><td class="memTemplItemLeft" align="right" valign="top">task * </td><td class="memTemplItemRight" valign="bottom"><b>try_put_task</b> (const X &t)</td></tr>
+<tr class="separator:a999d560da68ba411a66954b40bd93b54 inherit pro_methods_a00164"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:a1d97ad36d754a37ec203f64d9ee1ebf1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1d97ad36d754a37ec203f64d9ee1ebf1"></a>
+<a class="el" href="a00056.html">built_predecessors_type</a> </td><td class="memItemRight" valign="bottom"><b>my_built_predecessors</b></td></tr>
+<tr class="separator:a1d97ad36d754a37ec203f64d9ee1ebf1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adcb55d77f7327e6ac7535909acbc435b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adcb55d77f7327e6ac7535909acbc435b"></a>
+<a class="el" href="a00140.html">spin_mutex</a> </td><td class="memItemRight" valign="bottom"><b>my_mutex</b></td></tr>
+<tr class="separator:adcb55d77f7327e6ac7535909acbc435b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a11f530867dc6379df8549d4a4eed190b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a11f530867dc6379df8549d4a4eed190b"></a>
+int </td><td class="memItemRight" valign="bottom"><b>my_predecessor_count</b></td></tr>
+<tr class="separator:a11f530867dc6379df8549d4a4eed190b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac239ad3bd3ac969ea62485ae08a37f73"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac239ad3bd3ac969ea62485ae08a37f73"></a>
+int </td><td class="memItemRight" valign="bottom"><b>my_current_count</b></td></tr>
+<tr class="separator:ac239ad3bd3ac969ea62485ae08a37f73"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae69537e3d76b4ef916ada355407dac1c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae69537e3d76b4ef916ada355407dac1c"></a>
+int </td><td class="memItemRight" valign="bottom"><b>my_initial_predecessor_count</b></td></tr>
+<tr class="separator:ae69537e3d76b4ef916ada355407dac1c"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplParams" colspan="2"><a class="anchor" id="abaf9bf74ca5f2854d09f5f07337280eb"></a>
+template<typename R , typename B > </td></tr>
+<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>run_and_put_task</b></td></tr>
+<tr class="separator:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1360e38efe396058978cf3754ad620f5"></a>
+template<typename X , typename Y > </td></tr>
+<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::broadcast_cache</b></td></tr>
+<tr class="separator:a1360e38efe396058978cf3754ad620f5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplParams" colspan="2"><a class="anchor" id="acbd9ac2610587a99cd7d43344297cc49"></a>
+template<typename X , typename Y > </td></tr>
+<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::round_robin_cache</b></td></tr>
+<tr class="separator:acbd9ac2610587a99cd7d43344297cc49"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a05ec930a348f7eed564236d00edbda24"><td class="memTemplParams" colspan="2"><a class="anchor" id="a05ec930a348f7eed564236d00edbda24"></a>
+template<typename U > </td></tr>
+<tr class="memitem:a05ec930a348f7eed564236d00edbda24"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>limiter_node</b></td></tr>
+<tr class="separator:a05ec930a348f7eed564236d00edbda24"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a73cd25db4e6e9497940262f70f3ffc54"><td class="memTemplParams" colspan="2"><a class="anchor" id="a73cd25db4e6e9497940262f70f3ffc54"></a>
+template<typename TT , typename M > </td></tr>
+<tr class="memitem:a73cd25db4e6e9497940262f70f3ffc54"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::successor_cache</b></td></tr>
+<tr class="separator:a73cd25db4e6e9497940262f70f3ffc54"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Base class for receivers of completion messages. </p>
+<p>These receivers automatically reset, but cannot be explicitly waited on </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="ace97f82507453a8f3bc234d8de9f960d"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual task* tbb::flow::interface9::continue_receiver::execute </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Does whatever should happen when the threshold is reached. </p>
+<p>This should be very fast or else spawn a task. This is called while the sender is blocked in the <a class="el" href="a00119.html#a6ac09b1571cea3efd1fdbdaf4e6ce71a" title="Put an item to the receiver. ">try_put()</a>. </p>
+
+<p>Referenced by <a class="el" href="a00049.html#a83b0bfae936dac53172d62a6dab4062e">try_put_task()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa0c679a297c71fba43380b07ef69563b"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::flow::interface9::continue_receiver::remove_predecessor </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">predecessor_type</a> & </td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Decrements the trigger threshold. </p>
+<p>Does not check to see if the removal of the predecessor now makes the current count exceed the new threshold. So removing a predecessor while the graph is active can cause unexpected results. </p>
+
+<p>Reimplemented from <a class="el" href="a00119.html#ae8f45b84f3179964dd77f32835ece6c0">tbb::flow::interface9::receiver< continue_msg ></a>.</p>
+
+</div>
+</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>concurrent_unordered_map.h</li>
+<li><a class="el" href="a00188.html">flow_graph.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00049.png b/doc/html/a00049.png
index 6fa3b58..e745c66 100644
Binary files a/doc/html/a00049.png and b/doc/html/a00049.png differ
diff --git a/doc/html/a00050.html b/doc/html/a00050.html
index c738938..2210603 100644
--- a/doc/html/a00050.html
+++ b/doc/html/a00050.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator > Class Template Reference</title>
+<title>tbb::internal::critical_section_v4 Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,123 +33,67 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00050.html">concurrent_unordered_multiset</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00050.html">critical_section_v4</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-types">Public Types</a> |
+<a href="#nested-classes">Classes</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00382.html">List of all members</a>  </div>
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="a00395.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator > Class Template Reference</div>  </div>
+<div class="title">tbb::internal::critical_section_v4 Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 <div class="dynheader">
-Inheritance diagram for tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >:</div>
+Inheritance diagram for tbb::internal::critical_section_v4:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00050.png" usemap="#tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >_map" alt=""/>
-  <map id="tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >_map" name="tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >_map">
+  <img src="a00050.png" usemap="#tbb::internal::critical_section_v4_map" alt=""/>
+  <map id="tbb::internal::critical_section_v4_map" name="tbb::internal::critical_section_v4_map">
 </map>
  </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:af1eb846a05a4e2d30a3ff7f66acad7c7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af1eb846a05a4e2d30a3ff7f66acad7c7"></a>
-typedef Key </td><td class="memItemRight" valign="bottom"><b>key_type</b></td></tr>
-<tr class="separator:af1eb846a05a4e2d30a3ff7f66acad7c7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a559df68fc84a16b494a9638085c7379b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a559df68fc84a16b494a9638085c7379b"></a>
-typedef base_type::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-<tr class="separator:a559df68fc84a16b494a9638085c7379b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ada492d245619aac2683b57c9f52106c7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ada492d245619aac2683b57c9f52106c7"></a>
-typedef Key </td><td class="memItemRight" valign="bottom"><b>mapped_type</b></td></tr>
-<tr class="separator:ada492d245619aac2683b57c9f52106c7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab6b0ed8e5a20690cc06644520d0e5ef3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab6b0ed8e5a20690cc06644520d0e5ef3"></a>
-typedef Hasher </td><td class="memItemRight" valign="bottom"><b>hasher</b></td></tr>
-<tr class="separator:ab6b0ed8e5a20690cc06644520d0e5ef3"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa3d8b36c79741c229cf9a5c9d93516b7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa3d8b36c79741c229cf9a5c9d93516b7"></a>
-typedef Key_equality </td><td class="memItemRight" valign="bottom"><b>key_equal</b></td></tr>
-<tr class="separator:aa3d8b36c79741c229cf9a5c9d93516b7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8ec7f32ab51ebbfdb06d57ab8b17044b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8ec7f32ab51ebbfdb06d57ab8b17044b"></a>
-typedef hash_compare </td><td class="memItemRight" valign="bottom"><b>key_compare</b></td></tr>
-<tr class="separator:a8ec7f32ab51ebbfdb06d57ab8b17044b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1f89a49912b58d42ddbb3f344b6304ca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1f89a49912b58d42ddbb3f344b6304ca"></a>
-typedef base_type::allocator_type </td><td class="memItemRight" valign="bottom"><b>allocator_type</b></td></tr>
-<tr class="separator:a1f89a49912b58d42ddbb3f344b6304ca"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad4ff41efe0ead5030b011c999dd748de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad4ff41efe0ead5030b011c999dd748de"></a>
-typedef base_type::pointer </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-<tr class="separator:ad4ff41efe0ead5030b011c999dd748de"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab4327ff04c8a5dc7653b47763263b9f9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab4327ff04c8a5dc7653b47763263b9f9"></a>
-typedef base_type::const_pointer </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-<tr class="separator:ab4327ff04c8a5dc7653b47763263b9f9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aef5518b17cd9da59b9e6d9b9374f5245"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aef5518b17cd9da59b9e6d9b9374f5245"></a>
-typedef base_type::reference </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
-<tr class="separator:aef5518b17cd9da59b9e6d9b9374f5245"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7084b7dd3f9b1df0ffdd520529e87f3c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7084b7dd3f9b1df0ffdd520529e87f3c"></a>
-typedef base_type::const_reference </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
-<tr class="separator:a7084b7dd3f9b1df0ffdd520529e87f3c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad04d6c35ee079e8a49d38744c8f305b3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad04d6c35ee079e8a49d38744c8f305b3"></a>
-typedef base_type::size_type </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-<tr class="separator:ad04d6c35ee079e8a49d38744c8f305b3"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6e9babf06dc79948bb787793a7cb0d37"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6e9babf06dc79948bb787793a7cb0d37"></a>
-typedef base_type::difference_type </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
-<tr class="separator:a6e9babf06dc79948bb787793a7cb0d37"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a229ae1c0786ea9509c66256fcf1c8f47"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a229ae1c0786ea9509c66256fcf1c8f47"></a>
-typedef base_type::iterator </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
-<tr class="separator:a229ae1c0786ea9509c66256fcf1c8f47"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a69ed6ae85fe54e53b2804b61a6f30fa2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69ed6ae85fe54e53b2804b61a6f30fa2"></a>
-typedef base_type::const_iterator </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
-<tr class="separator:a69ed6ae85fe54e53b2804b61a6f30fa2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a532cdc67028e27231846b41bfd9a0e26"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a532cdc67028e27231846b41bfd9a0e26"></a>
-typedef base_type::iterator </td><td class="memItemRight" valign="bottom"><b>local_iterator</b></td></tr>
-<tr class="separator:a532cdc67028e27231846b41bfd9a0e26"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af4f42202dd9f2bc114c9411928431217"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af4f42202dd9f2bc114c9411928431217"></a>
-typedef base_type::const_iterator </td><td class="memItemRight" valign="bottom"><b>const_local_iterator</b></td></tr>
-<tr class="separator:af4f42202dd9f2bc114c9411928431217"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html">scoped_lock</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:afa7c1f095ac1f56c7811811aabe6b77c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa7c1f095ac1f56c7811811aabe6b77c"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_multiset</b> (size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())</td></tr>
-<tr class="separator:afa7c1f095ac1f56c7811811aabe6b77c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:adf8c095a7be6913dd96e22a6ce9af187"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adf8c095a7be6913dd96e22a6ce9af187"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_multiset</b> (const Allocator &a)</td></tr>
-<tr class="separator:adf8c095a7be6913dd96e22a6ce9af187"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2eede1ccad9975aac7acbffbd991e26c"><td class="memTemplParams" colspan="2"><a class="anchor" id="a2eede1ccad9975aac7acbffbd991e26c"></a>
-template<typename Iterator > </td></tr>
-<tr class="memitem:a2eede1ccad9975aac7acbffbd991e26c"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>concurrent_unordered_multiset</b> (Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())</td></tr>
-<tr class="separator:a2eede1ccad9975aac7acbffbd991e26c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a15631f048043195863c66bad6533bccb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15631f048043195863c66bad6533bccb"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00050.html#a15631f048043195863c66bad6533bccb">concurrent_unordered_multiset</a> (std::initializer_list< value_type > il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())</td></tr>
-<tr class="memdesc:a15631f048043195863c66bad6533bccb"><td class="mdescLeft"> </td><td class="mdescRight">Constructor from initializer_list. <br/></td></tr>
-<tr class="separator:a15631f048043195863c66bad6533bccb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3110fb1a6f8e2a3071d2acbe4b7b154b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3110fb1a6f8e2a3071d2acbe4b7b154b"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_multiset</b> (const <a class="el" href="a00050.html">concurrent_unordered_multiset</a> &table)</td></tr>
-<tr class="separator:a3110fb1a6f8e2a3071d2acbe4b7b154b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac1fb116ee3fdf6c6c810fe21eb01e209"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac1fb116ee3fdf6c6c810fe21eb01e209"></a>
-<a class="el" href="a00050.html">concurrent_unordered_multiset</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00050.html">concurrent_unordered_multiset</a> &table)</td></tr>
-<tr class="separator:ac1fb116ee3fdf6c6c810fe21eb01e209"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aeb435d8d31e95357c2f59656ec96dbbb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeb435d8d31e95357c2f59656ec96dbbb"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_multiset</b> (<a class="el" href="a00050.html">concurrent_unordered_multiset</a> &&table)</td></tr>
-<tr class="separator:aeb435d8d31e95357c2f59656ec96dbbb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab6c980c4bf29824a52610d94e6597b28"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab6c980c4bf29824a52610d94e6597b28"></a>
-<a class="el" href="a00050.html">concurrent_unordered_multiset</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="a00050.html">concurrent_unordered_multiset</a> &&table)</td></tr>
-<tr class="separator:ab6c980c4bf29824a52610d94e6597b28"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a229089da66522fd4f3d77e9f57e19fbb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a229089da66522fd4f3d77e9f57e19fbb"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_multiset</b> (const <a class="el" href="a00050.html">concurrent_unordered_multiset</a> &table, const Allocator &a)</td></tr>
-<tr class="separator:a229089da66522fd4f3d77e9f57e19fbb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aaa0a295004627bb5473b4371c6e20c80"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaa0a295004627bb5473b4371c6e20c80"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_multiset</b> (<a class="el" href="a00050.html">concurrent_unordered_multiset</a> &&table, const Allocator &a)</td></tr>
-<tr class="separator:aaa0a295004627bb5473b4371c6e20c80"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab661617ca865c4af0f34e07276f73c9e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab661617ca865c4af0f34e07276f73c9e"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>internal_construct</b> ()</td></tr>
+<tr class="separator:ab661617ca865c4af0f34e07276f73c9e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afb1ccdfc59fdd3f5a3a8db17c56102e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afb1ccdfc59fdd3f5a3a8db17c56102e8"></a>
+void </td><td class="memItemRight" valign="bottom"><b>lock</b> ()</td></tr>
+<tr class="separator:afb1ccdfc59fdd3f5a3a8db17c56102e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adbbd611ea04432e112b08e56251bc8b5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbbd611ea04432e112b08e56251bc8b5"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>try_lock</b> ()</td></tr>
+<tr class="separator:adbbd611ea04432e112b08e56251bc8b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a081d4eae71879fd7dcf2c4ca9ea7fb67"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a081d4eae71879fd7dcf2c4ca9ea7fb67"></a>
+void </td><td class="memItemRight" valign="bottom"><b>unlock</b> ()</td></tr>
+<tr class="separator:a081d4eae71879fd7dcf2c4ca9ea7fb67"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a7a62f98ad578ec8ac01d88de55bd271c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7a62f98ad578ec8ac01d88de55bd271c"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
+<tr class="separator:a7a62f98ad578ec8ac01d88de55bd271c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a47f75eb62f02cbdee0d602dff38075e9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a47f75eb62f02cbdee0d602dff38075e9"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
+<tr class="separator:a47f75eb62f02cbdee0d602dff38075e9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a12f986c4c554db133c2ae657acf2a496"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a12f986c4c554db133c2ae657acf2a496"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = true</td></tr>
+<tr class="separator:a12f986c4c554db133c2ae657acf2a496"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>concurrent_unordered_set.h</li>
+<li>critical_section.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00050.png b/doc/html/a00050.png
index 3ef6d19..835e586 100644
Binary files a/doc/html/a00050.png and b/doc/html/a00050.png differ
diff --git a/doc/html/a00051.html b/doc/html/a00051.html
index 0ca5030..f844fe9 100644
--- a/doc/html/a00051.html
+++ b/doc/html/a00051.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator > Class Template Reference</title>
+<title>tbb::flow::interface9::default_opencl_factory Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,123 +33,83 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00051.html">concurrent_unordered_set</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00051.html">default_opencl_factory</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00381.html">List of all members</a>  </div>
+<a href="a00343.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator > Class Template Reference</div>  </div>
+<div class="title">tbb::flow::interface9::default_opencl_factory Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 <div class="dynheader">
-Inheritance diagram for tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >:</div>
+Inheritance diagram for tbb::flow::interface9::default_opencl_factory:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00051.png" usemap="#tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >_map" alt=""/>
-  <map id="tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >_map" name="tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >_map">
+  <img src="a00051.png" usemap="#tbb::flow::interface9::default_opencl_factory_map" alt=""/>
+  <map id="tbb::flow::interface9::default_opencl_factory_map" name="tbb::flow::interface9::default_opencl_factory_map">
+<area href="a00091.html" alt="tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter >" shape="rect" coords="0,0,443,24"/>
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:afad91155e1803ee686e5f42637594e7b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afad91155e1803ee686e5f42637594e7b"></a>
-typedef Key </td><td class="memItemRight" valign="bottom"><b>key_type</b></td></tr>
-<tr class="separator:afad91155e1803ee686e5f42637594e7b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a461fe414bf3ae73e7cc57e851ff592e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a461fe414bf3ae73e7cc57e851ff592e4"></a>
-typedef base_type::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-<tr class="separator:a461fe414bf3ae73e7cc57e851ff592e4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3a64703b55d07509d5c88810c2342ba5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3a64703b55d07509d5c88810c2342ba5"></a>
-typedef Key </td><td class="memItemRight" valign="bottom"><b>mapped_type</b></td></tr>
-<tr class="separator:a3a64703b55d07509d5c88810c2342ba5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6952de8a7ff93025c1065bb3e729da72"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6952de8a7ff93025c1065bb3e729da72"></a>
-typedef Hasher </td><td class="memItemRight" valign="bottom"><b>hasher</b></td></tr>
-<tr class="separator:a6952de8a7ff93025c1065bb3e729da72"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a376a7355aa091fff6a30689141407acd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a376a7355aa091fff6a30689141407acd"></a>
-typedef Key_equality </td><td class="memItemRight" valign="bottom"><b>key_equal</b></td></tr>
-<tr class="separator:a376a7355aa091fff6a30689141407acd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acc450473249e39658c46596d8252eef0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acc450473249e39658c46596d8252eef0"></a>
-typedef hash_compare </td><td class="memItemRight" valign="bottom"><b>key_compare</b></td></tr>
-<tr class="separator:acc450473249e39658c46596d8252eef0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2010e490e8bfb13d9b969ec2fd5e4de4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2010e490e8bfb13d9b969ec2fd5e4de4"></a>
-typedef base_type::allocator_type </td><td class="memItemRight" valign="bottom"><b>allocator_type</b></td></tr>
-<tr class="separator:a2010e490e8bfb13d9b969ec2fd5e4de4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5a8c52d4a2b57b9b4b5d889e96d88f44"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5a8c52d4a2b57b9b4b5d889e96d88f44"></a>
-typedef base_type::pointer </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-<tr class="separator:a5a8c52d4a2b57b9b4b5d889e96d88f44"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a281276279a33ef1c5dfba5c196118ae7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a281276279a33ef1c5dfba5c196118ae7"></a>
-typedef base_type::const_pointer </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-<tr class="separator:a281276279a33ef1c5dfba5c196118ae7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aec3d473d0fa601d51f13efe605cd9862"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aec3d473d0fa601d51f13efe605cd9862"></a>
-typedef base_type::reference </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
-<tr class="separator:aec3d473d0fa601d51f13efe605cd9862"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab7da53912d0deffca91618b73ed4995f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab7da53912d0deffca91618b73ed4995f"></a>
-typedef base_type::const_reference </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
-<tr class="separator:ab7da53912d0deffca91618b73ed4995f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5808a50995fc228f114c3c93aeddf331"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5808a50995fc228f114c3c93aeddf331"></a>
-typedef base_type::size_type </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-<tr class="separator:a5808a50995fc228f114c3c93aeddf331"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7aaed1937820a90cb657a824e1391c1f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7aaed1937820a90cb657a824e1391c1f"></a>
-typedef base_type::difference_type </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
-<tr class="separator:a7aaed1937820a90cb657a824e1391c1f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abb76557f1755f96dc2e78728cb231e57"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abb76557f1755f96dc2e78728cb231e57"></a>
-typedef base_type::iterator </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
-<tr class="separator:abb76557f1755f96dc2e78728cb231e57"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a983d10264bc785a59b11dc94001e0042"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a983d10264bc785a59b11dc94001e0042"></a>
-typedef base_type::const_iterator </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
-<tr class="separator:a983d10264bc785a59b11dc94001e0042"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acb12b4b1df9a7108a5193b0d3bbfc677"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acb12b4b1df9a7108a5193b0d3bbfc677"></a>
-typedef base_type::iterator </td><td class="memItemRight" valign="bottom"><b>local_iterator</b></td></tr>
-<tr class="separator:acb12b4b1df9a7108a5193b0d3bbfc677"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af111bc738ee2a1b4b1cf2967a1252322"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af111bc738ee2a1b4b1cf2967a1252322"></a>
-typedef base_type::const_iterator </td><td class="memItemRight" valign="bottom"><b>const_local_iterator</b></td></tr>
-<tr class="separator:af111bc738ee2a1b4b1cf2967a1252322"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af33d7978e1c0ba4dfd3ffda9cec7ea69"><td class="memTemplParams" colspan="2"><a class="anchor" id="af33d7978e1c0ba4dfd3ffda9cec7ea69"></a>
+template<typename T > </td></tr>
+<tr class="memitem:af33d7978e1c0ba4dfd3ffda9cec7ea69"><td class="memTemplItemLeft" align="right" valign="top">using </td><td class="memTemplItemRight" valign="bottom"><b>async_msg_type</b> = <a class="el" href="a00053.html">dependency_msg</a>< T, <a class="el" href="a00051.html">default_opencl_factory</a> ></td></tr>
+<tr class="separator:af33d7978e1c0ba4dfd3ffda9cec7ea69"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_types_a00091"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00091')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter ></a></td></tr>
+<tr class="memitem:ac73eaeeacc0bb5870d2d243d67ba9301 inherit pub_types_a00091"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac73eaeeacc0bb5870d2d243d67ba9301"></a>
+using </td><td class="memItemRight" valign="bottom"><b>async_msg_type</b> = <a class="el" href="a00053.html">dependency_msg</a>< T, <a class="el" href="a00091.html">opencl_factory</a>< <a class="el" href="a00052.html">default_opencl_factory_device_filter</a> >></td></tr>
+<tr class="separator:ac73eaeeacc0bb5870d2d243d67ba9301 inherit pub_types_a00091"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3b1a5a14a8418fad9e490af3a66337e8 inherit pub_types_a00091"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3b1a5a14a8418fad9e490af3a66337e8"></a>
+typedef <a class="el" href="a00089.html">opencl_device</a> </td><td class="memItemRight" valign="bottom"><b>device_type</b></td></tr>
+<tr class="separator:a3b1a5a14a8418fad9e490af3a66337e8 inherit pub_types_a00091"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abff39774d3730a68f41655c508330787 inherit pub_types_a00091"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abff39774d3730a68f41655c508330787"></a>
+typedef kernel </td><td class="memItemRight" valign="bottom"><b>kernel_type</b></td></tr>
+<tr class="separator:abff39774d3730a68f41655c508330787 inherit pub_types_a00091"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a21edc0bf4c4187d231a33ab037d98446 inherit pub_types_a00091"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a21edc0bf4c4187d231a33ab037d98446"></a>
+typedef <a class="el" href="a00100.html">opencl_range</a> </td><td class="memItemRight" valign="bottom"><b>range_type</b></td></tr>
+<tr class="separator:a21edc0bf4c4187d231a33ab037d98446 inherit pub_types_a00091"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:aad5e3bd7fa156e5d8aa81a8ff560d84e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad5e3bd7fa156e5d8aa81a8ff560d84e"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_set</b> (size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())</td></tr>
-<tr class="separator:aad5e3bd7fa156e5d8aa81a8ff560d84e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2d307ae4ebb3e2d46b0a75713824d109"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2d307ae4ebb3e2d46b0a75713824d109"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_set</b> (const Allocator &a)</td></tr>
-<tr class="separator:a2d307ae4ebb3e2d46b0a75713824d109"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afd4bc55194c4473e81398d8456a5c68a"><td class="memTemplParams" colspan="2"><a class="anchor" id="afd4bc55194c4473e81398d8456a5c68a"></a>
-template<typename Iterator > </td></tr>
-<tr class="memitem:afd4bc55194c4473e81398d8456a5c68a"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>concurrent_unordered_set</b> (Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())</td></tr>
-<tr class="separator:afd4bc55194c4473e81398d8456a5c68a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6f6d5ecff239ff13000848e925904fe7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6f6d5ecff239ff13000848e925904fe7"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00051.html#a6f6d5ecff239ff13000848e925904fe7">concurrent_unordered_set</a> (std::initializer_list< value_type > il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())</td></tr>
-<tr class="memdesc:a6f6d5ecff239ff13000848e925904fe7"><td class="mdescLeft"> </td><td class="mdescRight">Constructor from initializer_list. <br/></td></tr>
-<tr class="separator:a6f6d5ecff239ff13000848e925904fe7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac3c68d5286d6ca29fba2b38c59bdbc66"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac3c68d5286d6ca29fba2b38c59bdbc66"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_set</b> (const <a class="el" href="a00051.html">concurrent_unordered_set</a> &table)</td></tr>
-<tr class="separator:ac3c68d5286d6ca29fba2b38c59bdbc66"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a39097dddf99fd057919197b8293bd807"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a39097dddf99fd057919197b8293bd807"></a>
-<a class="el" href="a00051.html">concurrent_unordered_set</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00051.html">concurrent_unordered_set</a> &table)</td></tr>
-<tr class="separator:a39097dddf99fd057919197b8293bd807"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9dde7a48af7449fde97d4449691207c5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9dde7a48af7449fde97d4449691207c5"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_set</b> (<a class="el" href="a00051.html">concurrent_unordered_set</a> &&table)</td></tr>
-<tr class="separator:a9dde7a48af7449fde97d4449691207c5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a49ad03a5e20f90beac704325aaa6567f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a49ad03a5e20f90beac704325aaa6567f"></a>
-<a class="el" href="a00051.html">concurrent_unordered_set</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="a00051.html">concurrent_unordered_set</a> &&table)</td></tr>
-<tr class="separator:a49ad03a5e20f90beac704325aaa6567f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aecea62fe5c8beab0d7907dbc33ef583f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aecea62fe5c8beab0d7907dbc33ef583f"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_set</b> (const <a class="el" href="a00051.html">concurrent_unordered_set</a> &table, const Allocator &a)</td></tr>
-<tr class="separator:aecea62fe5c8beab0d7907dbc33ef583f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6ef0de826333371f1e9cb33349b35baf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6ef0de826333371f1e9cb33349b35baf"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_set</b> (<a class="el" href="a00051.html">concurrent_unordered_set</a> &&table, const Allocator &a)</td></tr>
-<tr class="separator:a6ef0de826333371f1e9cb33349b35baf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae13c4d295d3e4aed31832992dedccaa0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae13c4d295d3e4aed31832992dedccaa0"></a>
+ </td><td class="memItemRight" valign="bottom"><b>default_opencl_factory</b> (<a class="el" href="a00093.html">opencl_graph</a> &g)</td></tr>
+<tr class="separator:ae13c4d295d3e4aed31832992dedccaa0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_methods_a00091"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00091')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter ></a></td></tr>
+<tr class="memitem:ade429751f6add3517a78d3b2bfeb4557 inherit pub_methods_a00091"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ade429751f6add3517a78d3b2bfeb4557"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_factory</b> (<a class="el" href="a00093.html">opencl_graph</a> &g)</td></tr>
+<tr class="separator:ade429751f6add3517a78d3b2bfeb4557 inherit pub_methods_a00091"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a388b83e950cd43581da1aef8033ea914 inherit pub_methods_a00091"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a388b83e950cd43581da1aef8033ea914"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>init</b> (const <a class="el" href="a00090.html">opencl_device_list</a> &device_list)</td></tr>
+<tr class="separator:a388b83e950cd43581da1aef8033ea914 inherit pub_methods_a00091"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac1c47c68f91720aaf37e7faf2ef2628d inherit pub_methods_a00091"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac1c47c68f91720aaf37e7faf2ef2628d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>send_kernel</b> (<a class="el" href="a00089.html">opencl_device</a> device, const kernel_type &kernel, const <a class="el" href="a00100.html">range_type</a> &work_size, Args &...args)</td></tr>
+<tr class="separator:ac1c47c68f91720aaf37e7faf2ef2628d inherit pub_methods_a00091"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac2f834bb6c81d620258c1784b8e2b8b4 inherit pub_methods_a00091"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac2f834bb6c81d620258c1784b8e2b8b4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>send_data</b> (<a class="el" href="a00089.html">opencl_device</a> device, T &t, Rest &...args)</td></tr>
+<tr class="separator:ac2f834bb6c81d620258c1784b8e2b8b4 inherit pub_methods_a00091"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5d53ca3584a153a174907b74339ec225 inherit pub_methods_a00091"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5d53ca3584a153a174907b74339ec225"></a>
+void </td><td class="memItemRight" valign="bottom"><b>send_data</b> (<a class="el" href="a00089.html">opencl_device</a>)</td></tr>
+<tr class="separator:a5d53ca3584a153a174907b74339ec225 inherit pub_methods_a00091"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a36da25d12bd88746012075a595a551b3 inherit pub_methods_a00091"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a36da25d12bd88746012075a595a551b3"></a>
+void </td><td class="memItemRight" valign="bottom"><b>finalize</b> (<a class="el" href="a00089.html">opencl_device</a> device, FinalizeFn fn, Args &...args)</td></tr>
+<tr class="separator:a36da25d12bd88746012075a595a551b3 inherit pub_methods_a00091"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a157927a7d6174e08a65f66d49e0dd0c6 inherit pub_methods_a00091"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a157927a7d6174e08a65f66d49e0dd0c6"></a>
+const <a class="el" href="a00090.html">opencl_device_list</a> & </td><td class="memItemRight" valign="bottom"><b>devices</b> ()</td></tr>
+<tr class="separator:a157927a7d6174e08a65f66d49e0dd0c6 inherit pub_methods_a00091"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>concurrent_unordered_set.h</li>
+<li>flow_graph_opencl_node.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00051.png b/doc/html/a00051.png
index 9f9a099..e2449e1 100644
Binary files a/doc/html/a00051.png and b/doc/html/a00051.png differ
diff --git a/doc/html/a00052.html b/doc/html/a00052.html
index 91b42aa..2cf0bcb 100644
--- a/doc/html/a00052.html
+++ b/doc/html/a00052.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping > Class Template Reference</title>
+<title>tbb::flow::interface9::default_opencl_factory_device_filter Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,68 +33,31 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00052.html">concurrent_unordered_set_traits</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00052.html">default_opencl_factory_device_filter</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pro-types">Protected Types</a> |
-<a href="#pro-methods">Protected Member Functions</a> |
-<a href="#pro-static-methods">Static Protected Member Functions</a> |
-<a href="#pro-attribs">Protected Attributes</a> |
-<a href="a00380.html">List of all members</a>  </div>
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="a00342.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping > Class Template Reference</div>  </div>
+<div class="title">tbb::flow::interface9::default_opencl_factory_device_filter Struct Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-types"></a>
-Protected Types</h2></td></tr>
-<tr class="memitem:a10fca95c59a7c0542d2d6bc1b8306e1c"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom">{ <b>allow_multimapping</b> = Allow_multimapping
- }</td></tr>
-<tr class="separator:a10fca95c59a7c0542d2d6bc1b8306e1c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a935ab6e249964c5a7e1caffd308bf008"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a935ab6e249964c5a7e1caffd308bf008"></a>
-typedef Key </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-<tr class="separator:a935ab6e249964c5a7e1caffd308bf008"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8b1d770b7db20b5d0d51af0b910aebb2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8b1d770b7db20b5d0d51af0b910aebb2"></a>
-typedef Key </td><td class="memItemRight" valign="bottom"><b>key_type</b></td></tr>
-<tr class="separator:a8b1d770b7db20b5d0d51af0b910aebb2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3c1ef314e63eb78db91ce99cb8617b87"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c1ef314e63eb78db91ce99cb8617b87"></a>
-typedef Hash_compare </td><td class="memItemRight" valign="bottom"><b>hash_compare</b></td></tr>
-<tr class="separator:a3c1ef314e63eb78db91ce99cb8617b87"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a453126bb05d3c798914cb91852e0b3a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a453126bb05d3c798914cb91852e0b3a5"></a>
-typedef Allocator::template <br class="typebreak"/>
-rebind< value_type >::other </td><td class="memItemRight" valign="bottom"><b>allocator_type</b></td></tr>
-<tr class="separator:a453126bb05d3c798914cb91852e0b3a5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa846331955302afdcaa6ba10e47ff427"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa846331955302afdcaa6ba10e47ff427"></a>
-typedef hash_compare </td><td class="memItemRight" valign="bottom"><b>value_compare</b></td></tr>
-<tr class="separator:aa846331955302afdcaa6ba10e47ff427"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:a958c02e4dbd967575a9f03290bb0cad3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a958c02e4dbd967575a9f03290bb0cad3"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_set_traits</b> (const hash_compare &hc)</td></tr>
-<tr class="separator:a958c02e4dbd967575a9f03290bb0cad3"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-static-methods"></a>
-Static Protected Member Functions</h2></td></tr>
-<tr class="memitem:a3f4bfe96ddb3db04d4701e06611fc73d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3f4bfe96ddb3db04d4701e06611fc73d"></a>
-static const Key & </td><td class="memItemRight" valign="bottom"><b>get_key</b> (const value_type &value)</td></tr>
-<tr class="separator:a3f4bfe96ddb3db04d4701e06611fc73d"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
-Protected Attributes</h2></td></tr>
-<tr class="memitem:ae134f56adf668d7bd31f7ee8fb36ead5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae134f56adf668d7bd31f7ee8fb36ead5"></a>
-hash_compare </td><td class="memItemRight" valign="bottom"><b>my_hash_compare</b></td></tr>
-<tr class="separator:ae134f56adf668d7bd31f7ee8fb36ead5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a6d5e0252d3da743e76bbb239f79705b0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6d5e0252d3da743e76bbb239f79705b0"></a>
+<a class="el" href="a00090.html">opencl_device_list</a> </td><td class="memItemRight" valign="bottom"><b>operator()</b> (const <a class="el" href="a00090.html">opencl_device_list</a> &devices)</td></tr>
+<tr class="separator:a6d5e0252d3da743e76bbb239f79705b0"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>concurrent_unordered_set.h</li>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>flow_graph_opencl_node.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00053.html b/doc/html/a00053.html
index f05970b..434fddb 100644
--- a/doc/html/a00053.html
+++ b/doc/html/a00053.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::concurrent_vector< T, A > Class Template Reference</title>
+<title>tbb::flow::interface9::dependency_msg< T, Factory > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,775 +33,96 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00053.html">concurrent_vector</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00053.html">dependency_msg</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#friends">Friends</a> |
-<a href="a00277.html">List of all members</a>  </div>
+<a href="#pro-methods">Protected Member Functions</a> |
+<a href="a00333.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::concurrent_vector< T, A > Class Template Reference<div class="ingroups"><a class="el" href="a00256.html">Containers</a></div></div>  </div>
+<div class="title">tbb::flow::interface9::dependency_msg< T, Factory > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Concurrent vector container.  
- <a href="a00053.html#details">More...</a></p>
-
-<p><code>#include <concurrent_vector.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::concurrent_vector< T, A >:</div>
+Inheritance diagram for tbb::flow::interface9::dependency_msg< T, Factory >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00053.png" usemap="#tbb::concurrent_vector< T, A >_map" alt=""/>
-  <map id="tbb::concurrent_vector< T, A >_map" name="tbb::concurrent_vector< T, A >_map">
+  <img src="a00053.png" usemap="#tbb::flow::interface9::dependency_msg< T, Factory >_map" alt=""/>
+  <map id="tbb::flow::interface9::dependency_msg< T, Factory >_map" name="tbb::flow::interface9::dependency_msg< T, Factory >_map">
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:ada098ff121699bfed7ae37e759eff93d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ada098ff121699bfed7ae37e759eff93d"></a>
-typedef <br class="typebreak"/>
-internal::concurrent_vector_base_v3::size_type </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-<tr class="separator:ada098ff121699bfed7ae37e759eff93d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7560567b5735c57159e55b12d20b6710"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7560567b5735c57159e55b12d20b6710"></a>
-typedef <br class="typebreak"/>
-internal::allocator_base< T, A ><br class="typebreak"/>
-::allocator_type </td><td class="memItemRight" valign="bottom"><b>allocator_type</b></td></tr>
-<tr class="separator:a7560567b5735c57159e55b12d20b6710"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5cf801a503d4e5fe739f53d7321dd2ef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5cf801a503d4e5fe739f53d7321dd2ef"></a>
+<tr class="memitem:a890d21837a11d3fbf7d5e3f3956f05e9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a890d21837a11d3fbf7d5e3f3956f05e9"></a>
 typedef T </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-<tr class="separator:a5cf801a503d4e5fe739f53d7321dd2ef"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1bb52adb877d3b680dac5f0bd289700b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1bb52adb877d3b680dac5f0bd289700b"></a>
-typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
-<tr class="separator:a1bb52adb877d3b680dac5f0bd289700b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a412441e93ad8656f96b14c5ecb9d817f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a412441e93ad8656f96b14c5ecb9d817f"></a>
-typedef T & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
-<tr class="separator:a412441e93ad8656f96b14c5ecb9d817f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5ecbb1eb2c7264df9d58255ce211207c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5ecbb1eb2c7264df9d58255ce211207c"></a>
-typedef const T & </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
-<tr class="separator:a5ecbb1eb2c7264df9d58255ce211207c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa2c4f00678df69d2d11497e8dd6ed9cf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa2c4f00678df69d2d11497e8dd6ed9cf"></a>
-typedef T * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-<tr class="separator:aa2c4f00678df69d2d11497e8dd6ed9cf"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afa0d28eb686589cbaf4733ca0eabc071"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa0d28eb686589cbaf4733ca0eabc071"></a>
-typedef const T * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-<tr class="separator:afa0d28eb686589cbaf4733ca0eabc071"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4cee8eaee236867c0b6e87309380cb0f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4cee8eaee236867c0b6e87309380cb0f"></a>
-typedef <br class="typebreak"/>
-internal::vector_iterator<br class="typebreak"/>
-< <a class="el" href="a00053.html">concurrent_vector</a>, T > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
-<tr class="separator:a4cee8eaee236867c0b6e87309380cb0f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa9a55035528c055ae985db2a61c8b0b2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa9a55035528c055ae985db2a61c8b0b2"></a>
-typedef <br class="typebreak"/>
-internal::vector_iterator<br class="typebreak"/>
-< <a class="el" href="a00053.html">concurrent_vector</a>, const T > </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
-<tr class="separator:aa9a55035528c055ae985db2a61c8b0b2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1623110816f9ef8f08e7bf6768aed273"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1623110816f9ef8f08e7bf6768aed273"></a>
-typedef std::reverse_iterator<br class="typebreak"/>
-< iterator > </td><td class="memItemRight" valign="bottom"><b>reverse_iterator</b></td></tr>
-<tr class="separator:a1623110816f9ef8f08e7bf6768aed273"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ada43b048144c3814036da624d3bb8c58"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ada43b048144c3814036da624d3bb8c58"></a>
-typedef std::reverse_iterator<br class="typebreak"/>
-< const_iterator > </td><td class="memItemRight" valign="bottom"><b>const_reverse_iterator</b></td></tr>
-<tr class="separator:ada43b048144c3814036da624d3bb8c58"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:adbeeef740ea402fa136ca3962fc0c307"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbeeef740ea402fa136ca3962fc0c307"></a>
-typedef std::reverse_iterator<br class="typebreak"/>
-< iterator, T, T &, T * > </td><td class="memItemRight" valign="bottom"><b>reverse_iterator</b></td></tr>
-<tr class="separator:adbeeef740ea402fa136ca3962fc0c307"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a705a54ffc90b914fc9c30d4177e8228a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a705a54ffc90b914fc9c30d4177e8228a"></a>
-typedef std::reverse_iterator<br class="typebreak"/>
-< const_iterator, T, const T <br class="typebreak"/>
-&, const T * > </td><td class="memItemRight" valign="bottom"><b>const_reverse_iterator</b></td></tr>
-<tr class="separator:a705a54ffc90b914fc9c30d4177e8228a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a443492ee9918c9e3372b5daca82314ca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a443492ee9918c9e3372b5daca82314ca"></a>
-typedef generic_range_type<br class="typebreak"/>
-< iterator > </td><td class="memItemRight" valign="bottom"><b>range_type</b></td></tr>
-<tr class="separator:a443492ee9918c9e3372b5daca82314ca"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1312eb29abf7ca07aa365c727b7844e3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1312eb29abf7ca07aa365c727b7844e3"></a>
-typedef generic_range_type<br class="typebreak"/>
-< const_iterator > </td><td class="memItemRight" valign="bottom"><b>const_range_type</b></td></tr>
-<tr class="separator:a1312eb29abf7ca07aa365c727b7844e3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="separator:a890d21837a11d3fbf7d5e3f3956f05e9"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a5bd95c2241653c760704a92b2c887a48"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5bd95c2241653c760704a92b2c887a48"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a5bd95c2241653c760704a92b2c887a48">concurrent_vector</a> (const allocator_type &a=allocator_type())</td></tr>
-<tr class="memdesc:a5bd95c2241653c760704a92b2c887a48"><td class="mdescLeft"> </td><td class="mdescRight">Construct empty vector. <br/></td></tr>
-<tr class="separator:a5bd95c2241653c760704a92b2c887a48"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa25dccd2f65fbfa148e92d01a11c20ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa25dccd2f65fbfa148e92d01a11c20ff"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#aa25dccd2f65fbfa148e92d01a11c20ff">concurrent_vector</a> (std::initializer_list< T > init_list, const allocator_type &a=allocator_type())</td></tr>
-<tr class="memdesc:aa25dccd2f65fbfa148e92d01a11c20ff"><td class="mdescLeft"> </td><td class="mdescRight">Constructor from initializer_list. <br/></td></tr>
-<tr class="separator:aa25dccd2f65fbfa148e92d01a11c20ff"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a03b5a0e9069b30dc4e2e5fc2f191ccb6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a03b5a0e9069b30dc4e2e5fc2f191ccb6"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a03b5a0e9069b30dc4e2e5fc2f191ccb6">concurrent_vector</a> (const <a class="el" href="a00053.html">concurrent_vector</a> &vector, const allocator_type &a=allocator_type())</td></tr>
-<tr class="memdesc:a03b5a0e9069b30dc4e2e5fc2f191ccb6"><td class="mdescLeft"> </td><td class="mdescRight">Copying constructor. <br/></td></tr>
-<tr class="separator:a03b5a0e9069b30dc4e2e5fc2f191ccb6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aafb048cfda83d0e7803888ead76c06a9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aafb048cfda83d0e7803888ead76c06a9"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#aafb048cfda83d0e7803888ead76c06a9">concurrent_vector</a> (<a class="el" href="a00053.html">concurrent_vector</a> &&source)</td></tr>
-<tr class="memdesc:aafb048cfda83d0e7803888ead76c06a9"><td class="mdescLeft"> </td><td class="mdescRight">Move constructor. <br/></td></tr>
-<tr class="separator:aafb048cfda83d0e7803888ead76c06a9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aef020f41f3017fecc43e70a22d3e0fc0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aef020f41f3017fecc43e70a22d3e0fc0"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_vector</b> (<a class="el" href="a00053.html">concurrent_vector</a> &&source, const allocator_type &a)</td></tr>
-<tr class="separator:aef020f41f3017fecc43e70a22d3e0fc0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abb0e376a31c3fdb91beaaa98441735f5"><td class="memTemplParams" colspan="2"><a class="anchor" id="abb0e376a31c3fdb91beaaa98441735f5"></a>
-template<class M > </td></tr>
-<tr class="memitem:abb0e376a31c3fdb91beaaa98441735f5"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00053.html#abb0e376a31c3fdb91beaaa98441735f5">concurrent_vector</a> (const <a class="el" href="a00053.html">concurrent_vector</a>< T, M > &vector, const allocator_type &a=allocator_type())</td></tr>
-<tr class="memdesc:abb0e376a31c3fdb91beaaa98441735f5"><td class="mdescLeft"> </td><td class="mdescRight">Copying constructor for vector with different allocator type. <br/></td></tr>
-<tr class="separator:abb0e376a31c3fdb91beaaa98441735f5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa898a39aad73711ceca70cd465dc0b4f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa898a39aad73711ceca70cd465dc0b4f"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#aa898a39aad73711ceca70cd465dc0b4f">concurrent_vector</a> (size_type n)</td></tr>
-<tr class="memdesc:aa898a39aad73711ceca70cd465dc0b4f"><td class="mdescLeft"> </td><td class="mdescRight">Construction with initial size specified by argument n. <br/></td></tr>
-<tr class="separator:aa898a39aad73711ceca70cd465dc0b4f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a736c6e35f1df11625636968ea546e21f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a736c6e35f1df11625636968ea546e21f"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a736c6e35f1df11625636968ea546e21f">concurrent_vector</a> (size_type n, const_reference t, const allocator_type &a=allocator_type())</td></tr>
-<tr class="memdesc:a736c6e35f1df11625636968ea546e21f"><td class="mdescLeft"> </td><td class="mdescRight">Construction with initial size specified by argument n, initialization by copying of t, and given allocator instance. <br/></td></tr>
-<tr class="separator:a736c6e35f1df11625636968ea546e21f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae0d384ec56032d18f63e26960029d3ce"><td class="memTemplParams" colspan="2"><a class="anchor" id="ae0d384ec56032d18f63e26960029d3ce"></a>
-template<class I > </td></tr>
-<tr class="memitem:ae0d384ec56032d18f63e26960029d3ce"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00053.html#ae0d384ec56032d18f63e26960029d3ce">concurrent_vector</a> (I first, I last, const allocator_type &a=allocator_type())</td></tr>
-<tr class="memdesc:ae0d384ec56032d18f63e26960029d3ce"><td class="mdescLeft"> </td><td class="mdescRight">Construction with copying iteration range and given allocator instance. <br/></td></tr>
-<tr class="separator:ae0d384ec56032d18f63e26960029d3ce"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a920384aece0eb8beea3049956320ec91"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a920384aece0eb8beea3049956320ec91"></a>
-<a class="el" href="a00053.html">concurrent_vector</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a920384aece0eb8beea3049956320ec91">operator=</a> (const <a class="el" href="a00053.html">concurrent_vector</a> &vector)</td></tr>
-<tr class="memdesc:a920384aece0eb8beea3049956320ec91"><td class="mdescLeft"> </td><td class="mdescRight">Assignment. <br/></td></tr>
-<tr class="separator:a920384aece0eb8beea3049956320ec91"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0d26889a94203cdb5f5460fade7497c7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0d26889a94203cdb5f5460fade7497c7"></a>
-<a class="el" href="a00053.html">concurrent_vector</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a0d26889a94203cdb5f5460fade7497c7">operator=</a> (<a class="el" href="a00053.html">concurrent_vector</a> &&other)</td></tr>
-<tr class="memdesc:a0d26889a94203cdb5f5460fade7497c7"><td class="mdescLeft"> </td><td class="mdescRight">Move assignment. <br/></td></tr>
-<tr class="separator:a0d26889a94203cdb5f5460fade7497c7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1fe7f0b60bbf304890a9293a35e6819d"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1fe7f0b60bbf304890a9293a35e6819d"></a>
-template<class M > </td></tr>
-<tr class="memitem:a1fe7f0b60bbf304890a9293a35e6819d"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="a00053.html">concurrent_vector</a> & </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00053.html#a1fe7f0b60bbf304890a9293a35e6819d">operator=</a> (const <a class="el" href="a00053.html">concurrent_vector</a>< T, M > &vector)</td></tr>
-<tr class="memdesc:a1fe7f0b60bbf304890a9293a35e6819d"><td class="mdescLeft"> </td><td class="mdescRight">Assignment for vector with different allocator type. <br/></td></tr>
-<tr class="separator:a1fe7f0b60bbf304890a9293a35e6819d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8498a1335a3bbac2f4925a4e8d70cdb8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8498a1335a3bbac2f4925a4e8d70cdb8"></a>
-<a class="el" href="a00053.html">concurrent_vector</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a8498a1335a3bbac2f4925a4e8d70cdb8">operator=</a> (std::initializer_list< T > init_list)</td></tr>
-<tr class="memdesc:a8498a1335a3bbac2f4925a4e8d70cdb8"><td class="mdescLeft"> </td><td class="mdescRight">Assignment for initializer_list. <br/></td></tr>
-<tr class="separator:a8498a1335a3bbac2f4925a4e8d70cdb8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab89c2db5358048debdc282ff995caffb"><td class="memItemLeft" align="right" valign="top">iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#ab89c2db5358048debdc282ff995caffb">grow_by</a> (size_type delta)</td></tr>
-<tr class="memdesc:ab89c2db5358048debdc282ff995caffb"><td class="mdescLeft"> </td><td class="mdescRight">Grow by "delta" elements.  <a href="#ab89c2db5358048debdc282ff995caffb">More...</a><br/></td></tr>
-<tr class="separator:ab89c2db5358048debdc282ff995caffb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa11fc991cda82cf93789fce31b37a16c"><td class="memItemLeft" align="right" valign="top">iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#aa11fc991cda82cf93789fce31b37a16c">grow_by</a> (size_type delta, const_reference t)</td></tr>
-<tr class="memdesc:aa11fc991cda82cf93789fce31b37a16c"><td class="mdescLeft"> </td><td class="mdescRight">Grow by "delta" elements using copying constructor.  <a href="#aa11fc991cda82cf93789fce31b37a16c">More...</a><br/></td></tr>
-<tr class="separator:aa11fc991cda82cf93789fce31b37a16c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acfd74483ff523213b78f44fb914c8eb4"><td class="memTemplParams" colspan="2">template<typename I > </td></tr>
-<tr class="memitem:acfd74483ff523213b78f44fb914c8eb4"><td class="memTemplItemLeft" align="right" valign="top">iterator </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00053.html#acfd74483ff523213b78f44fb914c8eb4">grow_by</a> (I first, I last)</td></tr>
-<tr class="separator:acfd74483ff523213b78f44fb914c8eb4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a95f57f1529e0ebd1ca6bd2d60003fcab"><td class="memItemLeft" align="right" valign="top">iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a95f57f1529e0ebd1ca6bd2d60003fcab">grow_by</a> (std::initializer_list< T > init_list)</td></tr>
-<tr class="separator:a95f57f1529e0ebd1ca6bd2d60003fcab"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae9ef9895e88f9bf036b379035c18f035"><td class="memItemLeft" align="right" valign="top">iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#ae9ef9895e88f9bf036b379035c18f035">grow_to_at_least</a> (size_type n)</td></tr>
-<tr class="memdesc:ae9ef9895e88f9bf036b379035c18f035"><td class="mdescLeft"> </td><td class="mdescRight">Append minimal sequence of elements such that <a class="el" href="a00053.html#a803268c16e3688ff4681251947d257c7" title="Return size of vector. It may include elements under construction. ">size()</a>>=n.  <a href="#ae9ef9895e88f9bf036b379035c18f035">More...</a><br/></td></tr>
-<tr class="separator:ae9ef9895e88f9bf036b379035c18f035"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a422d9689ed72a5ef2b6b72f28e4143a2"><td class="memItemLeft" align="right" valign="top">iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a422d9689ed72a5ef2b6b72f28e4143a2">grow_to_at_least</a> (size_type n, const_reference t)</td></tr>
-<tr class="separator:a422d9689ed72a5ef2b6b72f28e4143a2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad68d1675fedef232bfae35f200ba007d"><td class="memItemLeft" align="right" valign="top">iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#ad68d1675fedef232bfae35f200ba007d">push_back</a> (const_reference item)</td></tr>
-<tr class="memdesc:ad68d1675fedef232bfae35f200ba007d"><td class="mdescLeft"> </td><td class="mdescRight">Push item.  <a href="#ad68d1675fedef232bfae35f200ba007d">More...</a><br/></td></tr>
-<tr class="separator:ad68d1675fedef232bfae35f200ba007d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac29a9f08c0fac7c20786c7b8f4f0321a"><td class="memItemLeft" align="right" valign="top">iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#ac29a9f08c0fac7c20786c7b8f4f0321a">push_back</a> (T &&item)</td></tr>
-<tr class="memdesc:ac29a9f08c0fac7c20786c7b8f4f0321a"><td class="mdescLeft"> </td><td class="mdescRight">Push item, move-aware.  <a href="#ac29a9f08c0fac7c20786c7b8f4f0321a">More...</a><br/></td></tr>
-<tr class="separator:ac29a9f08c0fac7c20786c7b8f4f0321a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afae4c378515b89cc2b0a11c8cf1bcc50"><td class="memTemplParams" colspan="2">template<typename... Args> </td></tr>
-<tr class="memitem:afae4c378515b89cc2b0a11c8cf1bcc50"><td class="memTemplItemLeft" align="right" valign="top">iterator </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00053.html#afae4c378515b89cc2b0a11c8cf1bcc50">emplace_back</a> (Args &&...args)</td></tr>
-<tr class="memdesc:afae4c378515b89cc2b0a11c8cf1bcc50"><td class="mdescLeft"> </td><td class="mdescRight">Push item, create item "in place" with provided arguments.  <a href="#afae4c378515b89cc2b0a11c8cf1bcc50">More...</a><br/></td></tr>
-<tr class="separator:afae4c378515b89cc2b0a11c8cf1bcc50"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3097cb46511504acfc9de7da5235f4a6"><td class="memItemLeft" align="right" valign="top">reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a3097cb46511504acfc9de7da5235f4a6">operator[]</a> (size_type index)</td></tr>
-<tr class="memdesc:a3097cb46511504acfc9de7da5235f4a6"><td class="mdescLeft"> </td><td class="mdescRight">Get reference to element at given index.  <a href="#a3097cb46511504acfc9de7da5235f4a6">More...</a><br/></td></tr>
-<tr class="separator:a3097cb46511504acfc9de7da5235f4a6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abd6ca67f2f97fafca48395af2e693e73"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abd6ca67f2f97fafca48395af2e693e73"></a>
-const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#abd6ca67f2f97fafca48395af2e693e73">operator[]</a> (size_type index) const </td></tr>
-<tr class="memdesc:abd6ca67f2f97fafca48395af2e693e73"><td class="mdescLeft"> </td><td class="mdescRight">Get const reference to element at given index. <br/></td></tr>
-<tr class="separator:abd6ca67f2f97fafca48395af2e693e73"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a629a29eb21e528414b9d5c9becfe05cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a629a29eb21e528414b9d5c9becfe05cd"></a>
-reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a629a29eb21e528414b9d5c9becfe05cd">at</a> (size_type index)</td></tr>
-<tr class="memdesc:a629a29eb21e528414b9d5c9becfe05cd"><td class="mdescLeft"> </td><td class="mdescRight">Get reference to element at given index. Throws exceptions on errors. <br/></td></tr>
-<tr class="separator:a629a29eb21e528414b9d5c9becfe05cd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae4dc6c1b55c0e0b73f0a8675ef2b60a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae4dc6c1b55c0e0b73f0a8675ef2b60a4"></a>
-const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#ae4dc6c1b55c0e0b73f0a8675ef2b60a4">at</a> (size_type index) const </td></tr>
-<tr class="memdesc:ae4dc6c1b55c0e0b73f0a8675ef2b60a4"><td class="mdescLeft"> </td><td class="mdescRight">Get const reference to element at given index. Throws exceptions on errors. <br/></td></tr>
-<tr class="separator:ae4dc6c1b55c0e0b73f0a8675ef2b60a4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8201f65735edcc28aeec95b6e73d75b6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8201f65735edcc28aeec95b6e73d75b6"></a>
-range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a8201f65735edcc28aeec95b6e73d75b6">range</a> (size_t grainsize=1)</td></tr>
-<tr class="memdesc:a8201f65735edcc28aeec95b6e73d75b6"><td class="mdescLeft"> </td><td class="mdescRight">Get range for iterating with parallel algorithms. <br/></td></tr>
-<tr class="separator:a8201f65735edcc28aeec95b6e73d75b6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8fcc32ec9ccb48c3327a88fe288c7538"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8fcc32ec9ccb48c3327a88fe288c7538"></a>
-const_range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a8fcc32ec9ccb48c3327a88fe288c7538">range</a> (size_t grainsize=1) const </td></tr>
-<tr class="memdesc:a8fcc32ec9ccb48c3327a88fe288c7538"><td class="mdescLeft"> </td><td class="mdescRight">Get const range for iterating with parallel algorithms. <br/></td></tr>
-<tr class="separator:a8fcc32ec9ccb48c3327a88fe288c7538"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a803268c16e3688ff4681251947d257c7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a803268c16e3688ff4681251947d257c7"></a>
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a803268c16e3688ff4681251947d257c7">size</a> () const </td></tr>
-<tr class="memdesc:a803268c16e3688ff4681251947d257c7"><td class="mdescLeft"> </td><td class="mdescRight">Return size of vector. It may include elements under construction. <br/></td></tr>
-<tr class="separator:a803268c16e3688ff4681251947d257c7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa3f6774107e65642f73c0dcc9a962fe7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa3f6774107e65642f73c0dcc9a962fe7"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#aa3f6774107e65642f73c0dcc9a962fe7">empty</a> () const </td></tr>
-<tr class="memdesc:aa3f6774107e65642f73c0dcc9a962fe7"><td class="mdescLeft"> </td><td class="mdescRight">Return false if vector is not empty or has elements under construction at least. <br/></td></tr>
-<tr class="separator:aa3f6774107e65642f73c0dcc9a962fe7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a96c2ae9dfedc24d62554feb627df76c3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a96c2ae9dfedc24d62554feb627df76c3"></a>
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a96c2ae9dfedc24d62554feb627df76c3">capacity</a> () const </td></tr>
-<tr class="memdesc:a96c2ae9dfedc24d62554feb627df76c3"><td class="mdescLeft"> </td><td class="mdescRight">Maximum size to which array can grow without allocating more memory. Concurrent allocations are not included in the value. <br/></td></tr>
-<tr class="separator:a96c2ae9dfedc24d62554feb627df76c3"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0b3284684328c58c0228c9a697ef3594"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a0b3284684328c58c0228c9a697ef3594">reserve</a> (size_type n)</td></tr>
-<tr class="memdesc:a0b3284684328c58c0228c9a697ef3594"><td class="mdescLeft"> </td><td class="mdescRight">Allocate enough space to grow to size n without having to allocate more memory later.  <a href="#a0b3284684328c58c0228c9a697ef3594">More...</a><br/></td></tr>
-<tr class="separator:a0b3284684328c58c0228c9a697ef3594"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a65e53a98a1e1fdb515fdc2b84e2314e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a65e53a98a1e1fdb515fdc2b84e2314e8"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a65e53a98a1e1fdb515fdc2b84e2314e8">resize</a> (size_type n)</td></tr>
-<tr class="memdesc:a65e53a98a1e1fdb515fdc2b84e2314e8"><td class="mdescLeft"> </td><td class="mdescRight">Resize the vector. Not thread-safe. <br/></td></tr>
-<tr class="separator:a65e53a98a1e1fdb515fdc2b84e2314e8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a941917a8a840ff08ce8810ca9476ff46"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a941917a8a840ff08ce8810ca9476ff46"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a941917a8a840ff08ce8810ca9476ff46">resize</a> (size_type n, const_reference t)</td></tr>
-<tr class="memdesc:a941917a8a840ff08ce8810ca9476ff46"><td class="mdescLeft"> </td><td class="mdescRight">Resize the vector, copy t for new elements. Not thread-safe. <br/></td></tr>
-<tr class="separator:a941917a8a840ff08ce8810ca9476ff46"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aba805b5225ad3399550f78ea15e51e93"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba805b5225ad3399550f78ea15e51e93"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#aba805b5225ad3399550f78ea15e51e93">shrink_to_fit</a> ()</td></tr>
-<tr class="memdesc:aba805b5225ad3399550f78ea15e51e93"><td class="mdescLeft"> </td><td class="mdescRight">Optimize memory usage and fragmentation. <br/></td></tr>
-<tr class="separator:aba805b5225ad3399550f78ea15e51e93"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0ec9c3ab3360e04bdaa5174956a3206d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0ec9c3ab3360e04bdaa5174956a3206d"></a>
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a0ec9c3ab3360e04bdaa5174956a3206d">max_size</a> () const </td></tr>
-<tr class="memdesc:a0ec9c3ab3360e04bdaa5174956a3206d"><td class="mdescLeft"> </td><td class="mdescRight">Upper bound on argument to reserve. <br/></td></tr>
-<tr class="separator:a0ec9c3ab3360e04bdaa5174956a3206d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab55636c80368ad7d400f3200313fcf5f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab55636c80368ad7d400f3200313fcf5f"></a>
-iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#ab55636c80368ad7d400f3200313fcf5f">begin</a> ()</td></tr>
-<tr class="memdesc:ab55636c80368ad7d400f3200313fcf5f"><td class="mdescLeft"> </td><td class="mdescRight">start iterator <br/></td></tr>
-<tr class="separator:ab55636c80368ad7d400f3200313fcf5f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aad2c07653375e4a5f89c33b375eda610"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad2c07653375e4a5f89c33b375eda610"></a>
-iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#aad2c07653375e4a5f89c33b375eda610">end</a> ()</td></tr>
-<tr class="memdesc:aad2c07653375e4a5f89c33b375eda610"><td class="mdescLeft"> </td><td class="mdescRight">end iterator <br/></td></tr>
-<tr class="separator:aad2c07653375e4a5f89c33b375eda610"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad3eb33d1b10a988a87cc708ceb08f3a9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3eb33d1b10a988a87cc708ceb08f3a9"></a>
-const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#ad3eb33d1b10a988a87cc708ceb08f3a9">begin</a> () const </td></tr>
-<tr class="memdesc:ad3eb33d1b10a988a87cc708ceb08f3a9"><td class="mdescLeft"> </td><td class="mdescRight">start const iterator <br/></td></tr>
-<tr class="separator:ad3eb33d1b10a988a87cc708ceb08f3a9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6a4ad0795a19d94df24595e748f0b193"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6a4ad0795a19d94df24595e748f0b193"></a>
-const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a6a4ad0795a19d94df24595e748f0b193">end</a> () const </td></tr>
-<tr class="memdesc:a6a4ad0795a19d94df24595e748f0b193"><td class="mdescLeft"> </td><td class="mdescRight">end const iterator <br/></td></tr>
-<tr class="separator:a6a4ad0795a19d94df24595e748f0b193"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7a1c5441fa480c07ef37d9206b6260cc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7a1c5441fa480c07ef37d9206b6260cc"></a>
-const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a7a1c5441fa480c07ef37d9206b6260cc">cbegin</a> () const </td></tr>
-<tr class="memdesc:a7a1c5441fa480c07ef37d9206b6260cc"><td class="mdescLeft"> </td><td class="mdescRight">start const iterator <br/></td></tr>
-<tr class="separator:a7a1c5441fa480c07ef37d9206b6260cc"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9ea80faf139feb54d6576c036e4ba898"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9ea80faf139feb54d6576c036e4ba898"></a>
-const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a9ea80faf139feb54d6576c036e4ba898">cend</a> () const </td></tr>
-<tr class="memdesc:a9ea80faf139feb54d6576c036e4ba898"><td class="mdescLeft"> </td><td class="mdescRight">end const iterator <br/></td></tr>
-<tr class="separator:a9ea80faf139feb54d6576c036e4ba898"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9a2f8dce0adcbef8e29273c23723a78e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a2f8dce0adcbef8e29273c23723a78e"></a>
-reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a9a2f8dce0adcbef8e29273c23723a78e">rbegin</a> ()</td></tr>
-<tr class="memdesc:a9a2f8dce0adcbef8e29273c23723a78e"><td class="mdescLeft"> </td><td class="mdescRight">reverse start iterator <br/></td></tr>
-<tr class="separator:a9a2f8dce0adcbef8e29273c23723a78e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a618f38279a370c18f73ea2c29ded9cb9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a618f38279a370c18f73ea2c29ded9cb9"></a>
-reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a618f38279a370c18f73ea2c29ded9cb9">rend</a> ()</td></tr>
-<tr class="memdesc:a618f38279a370c18f73ea2c29ded9cb9"><td class="mdescLeft"> </td><td class="mdescRight">reverse end iterator <br/></td></tr>
-<tr class="separator:a618f38279a370c18f73ea2c29ded9cb9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a976b0bed19de9ab93f78c10184a4e38f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a976b0bed19de9ab93f78c10184a4e38f"></a>
-const_reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a976b0bed19de9ab93f78c10184a4e38f">rbegin</a> () const </td></tr>
-<tr class="memdesc:a976b0bed19de9ab93f78c10184a4e38f"><td class="mdescLeft"> </td><td class="mdescRight">reverse start const iterator <br/></td></tr>
-<tr class="separator:a976b0bed19de9ab93f78c10184a4e38f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abdb98e17cb65d9c445d7fd1e662c2699"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abdb98e17cb65d9c445d7fd1e662c2699"></a>
-const_reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#abdb98e17cb65d9c445d7fd1e662c2699">rend</a> () const </td></tr>
-<tr class="memdesc:abdb98e17cb65d9c445d7fd1e662c2699"><td class="mdescLeft"> </td><td class="mdescRight">reverse end const iterator <br/></td></tr>
-<tr class="separator:abdb98e17cb65d9c445d7fd1e662c2699"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2627db4a7949522ea4727320b23a6348"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2627db4a7949522ea4727320b23a6348"></a>
-const_reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a2627db4a7949522ea4727320b23a6348">crbegin</a> () const </td></tr>
-<tr class="memdesc:a2627db4a7949522ea4727320b23a6348"><td class="mdescLeft"> </td><td class="mdescRight">reverse start const iterator <br/></td></tr>
-<tr class="separator:a2627db4a7949522ea4727320b23a6348"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad097225c529dbb24cc0e13a444ab4752"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad097225c529dbb24cc0e13a444ab4752"></a>
-const_reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#ad097225c529dbb24cc0e13a444ab4752">crend</a> () const </td></tr>
-<tr class="memdesc:ad097225c529dbb24cc0e13a444ab4752"><td class="mdescLeft"> </td><td class="mdescRight">reverse end const iterator <br/></td></tr>
-<tr class="separator:ad097225c529dbb24cc0e13a444ab4752"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9bfc6d733cf543280b691ed8d7b7908a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9bfc6d733cf543280b691ed8d7b7908a"></a>
-reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a9bfc6d733cf543280b691ed8d7b7908a">front</a> ()</td></tr>
-<tr class="memdesc:a9bfc6d733cf543280b691ed8d7b7908a"><td class="mdescLeft"> </td><td class="mdescRight">the first item <br/></td></tr>
-<tr class="separator:a9bfc6d733cf543280b691ed8d7b7908a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9067259572c2c41d014840d0f9d3cdce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9067259572c2c41d014840d0f9d3cdce"></a>
-const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a9067259572c2c41d014840d0f9d3cdce">front</a> () const </td></tr>
-<tr class="memdesc:a9067259572c2c41d014840d0f9d3cdce"><td class="mdescLeft"> </td><td class="mdescRight">the first item const <br/></td></tr>
-<tr class="separator:a9067259572c2c41d014840d0f9d3cdce"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aaee3ddf1d05238a8a6887f6d824b76f8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaee3ddf1d05238a8a6887f6d824b76f8"></a>
-reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#aaee3ddf1d05238a8a6887f6d824b76f8">back</a> ()</td></tr>
-<tr class="memdesc:aaee3ddf1d05238a8a6887f6d824b76f8"><td class="mdescLeft"> </td><td class="mdescRight">the last item <br/></td></tr>
-<tr class="separator:aaee3ddf1d05238a8a6887f6d824b76f8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acf66eb1e82dbcb430d9926a23711c720"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf66eb1e82dbcb430d9926a23711c720"></a>
-const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#acf66eb1e82dbcb430d9926a23711c720">back</a> () const </td></tr>
-<tr class="memdesc:acf66eb1e82dbcb430d9926a23711c720"><td class="mdescLeft"> </td><td class="mdescRight">the last item const <br/></td></tr>
-<tr class="separator:acf66eb1e82dbcb430d9926a23711c720"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a88b62a9614d3f2b59c9c7c1a2143fb1e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a88b62a9614d3f2b59c9c7c1a2143fb1e"></a>
-allocator_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a88b62a9614d3f2b59c9c7c1a2143fb1e">get_allocator</a> () const </td></tr>
-<tr class="memdesc:a88b62a9614d3f2b59c9c7c1a2143fb1e"><td class="mdescLeft"> </td><td class="mdescRight">return allocator object <br/></td></tr>
-<tr class="separator:a88b62a9614d3f2b59c9c7c1a2143fb1e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a87355dce93d0882aa73333a35c9b367c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a87355dce93d0882aa73333a35c9b367c"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a87355dce93d0882aa73333a35c9b367c">assign</a> (size_type n, const_reference t)</td></tr>
-<tr class="memdesc:a87355dce93d0882aa73333a35c9b367c"><td class="mdescLeft"> </td><td class="mdescRight">assign n items by copying t item <br/></td></tr>
-<tr class="separator:a87355dce93d0882aa73333a35c9b367c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7bb5399a8499f88cf859eab39f0ed9e0"><td class="memTemplParams" colspan="2"><a class="anchor" id="a7bb5399a8499f88cf859eab39f0ed9e0"></a>
-template<class I > </td></tr>
-<tr class="memitem:a7bb5399a8499f88cf859eab39f0ed9e0"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00053.html#a7bb5399a8499f88cf859eab39f0ed9e0">assign</a> (I first, I last)</td></tr>
-<tr class="memdesc:a7bb5399a8499f88cf859eab39f0ed9e0"><td class="mdescLeft"> </td><td class="mdescRight">assign range [first, last) <br/></td></tr>
-<tr class="separator:a7bb5399a8499f88cf859eab39f0ed9e0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a584d6cda5794441b19d4f02bde399dff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a584d6cda5794441b19d4f02bde399dff"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a584d6cda5794441b19d4f02bde399dff">assign</a> (std::initializer_list< T > init_list)</td></tr>
-<tr class="memdesc:a584d6cda5794441b19d4f02bde399dff"><td class="mdescLeft"> </td><td class="mdescRight">assigns an initializer list <br/></td></tr>
-<tr class="separator:a584d6cda5794441b19d4f02bde399dff"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8603bd57324fb6b60ba006884c95279d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8603bd57324fb6b60ba006884c95279d"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a8603bd57324fb6b60ba006884c95279d">swap</a> (<a class="el" href="a00053.html">concurrent_vector</a> &vector)</td></tr>
-<tr class="memdesc:a8603bd57324fb6b60ba006884c95279d"><td class="mdescLeft"> </td><td class="mdescRight">swap two instances <br/></td></tr>
-<tr class="separator:a8603bd57324fb6b60ba006884c95279d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a526ba408fb3064ef846940d633b8f365"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#a526ba408fb3064ef846940d633b8f365">clear</a> ()</td></tr>
-<tr class="memdesc:a526ba408fb3064ef846940d633b8f365"><td class="mdescLeft"> </td><td class="mdescRight">Clear container while keeping memory allocated.  <a href="#a526ba408fb3064ef846940d633b8f365">More...</a><br/></td></tr>
-<tr class="separator:a526ba408fb3064ef846940d633b8f365"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab5bcaededc9a00e7aaecd6c262fd0b38"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5bcaededc9a00e7aaecd6c262fd0b38"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html#ab5bcaededc9a00e7aaecd6c262fd0b38">~concurrent_vector</a> ()</td></tr>
-<tr class="memdesc:ab5bcaededc9a00e7aaecd6c262fd0b38"><td class="mdescLeft"> </td><td class="mdescRight">Clear and destroy vector. <br/></td></tr>
-<tr class="separator:ab5bcaededc9a00e7aaecd6c262fd0b38"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a675f1b62a651d350eb0d778a271e31e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a675f1b62a651d350eb0d778a271e31e5"></a>
-const <br class="typebreak"/>
-internal::concurrent_vector_base_v3 & </td><td class="memItemRight" valign="bottom"><b>internal_vector_base</b> () const </td></tr>
-<tr class="separator:a675f1b62a651d350eb0d778a271e31e5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a96e2626d160361d8c6f4193ca0c7a4dd"><td class="memTemplParams" colspan="2"><a class="anchor" id="a96e2626d160361d8c6f4193ca0c7a4dd"></a>
-template<typename I > </td></tr>
-<tr class="memitem:a96e2626d160361d8c6f4193ca0c7a4dd"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>copy_range</b> (void *dst, const void *p_type_erased_iterator, size_type n)</td></tr>
-<tr class="separator:a96e2626d160361d8c6f4193ca0c7a4dd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9208c03bf866e99fdf0edab55199359b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9208c03bf866e99fdf0edab55199359b"></a>
+ </td><td class="memItemRight" valign="bottom"><b>dependency_msg</b> (const T &data)</td></tr>
+<tr class="separator:a9208c03bf866e99fdf0edab55199359b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7505f5bbba39d10307e78e8c3f53f10b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7505f5bbba39d10307e78e8c3f53f10b"></a>
+ </td><td class="memItemRight" valign="bottom"><b>dependency_msg</b> (<a class="el" href="a00093.html">opencl_graph</a> &g, const T &data)</td></tr>
+<tr class="separator:a7505f5bbba39d10307e78e8c3f53f10b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a08e190653d57e66345bf805030b1dbb2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a08e190653d57e66345bf805030b1dbb2"></a>
+ </td><td class="memItemRight" valign="bottom"><b>dependency_msg</b> (const T &data, cl_event event)</td></tr>
+<tr class="separator:a08e190653d57e66345bf805030b1dbb2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6584ef2426b12e91ce6047d6d3338991"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6584ef2426b12e91ce6047d6d3338991"></a>
+T & </td><td class="memItemRight" valign="bottom"><b>data</b> (bool wait=true)</td></tr>
+<tr class="separator:a6584ef2426b12e91ce6047d6d3338991"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2e164b60805db11949367d43a66aed01"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2e164b60805db11949367d43a66aed01"></a>
+const T & </td><td class="memItemRight" valign="bottom"><b>data</b> (bool wait=true) const </td></tr>
+<tr class="separator:a2e164b60805db11949367d43a66aed01"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a312b4b257556b3304d234993ae69022d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a312b4b257556b3304d234993ae69022d"></a>
+ </td><td class="memItemRight" valign="bottom"><b>dependency_msg</b> (const <a class="el" href="a00053.html">dependency_msg</a> &dmsg)</td></tr>
+<tr class="separator:a312b4b257556b3304d234993ae69022d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a56758d7f14feb7b1d1453aa5a96ca69b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a56758d7f14feb7b1d1453aa5a96ca69b"></a>
+ </td><td class="memItemRight" valign="bottom"><b>dependency_msg</b> (<a class="el" href="a00053.html">dependency_msg</a> &&dmsg)</td></tr>
+<tr class="separator:a56758d7f14feb7b1d1453aa5a96ca69b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2cc662b97373b18b3966932f395716b8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2cc662b97373b18b3966932f395716b8"></a>
+<a class="el" href="a00053.html">dependency_msg</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00053.html">dependency_msg</a> &dmsg)</td></tr>
+<tr class="separator:a2cc662b97373b18b3966932f395716b8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab2d6c283e0b089c3ef103101066ac38a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab2d6c283e0b089c3ef103101066ac38a"></a>
+cl_event const * </td><td class="memItemRight" valign="bottom"><b>get_event</b> () const </td></tr>
+<tr class="separator:ab2d6c283e0b089c3ef103101066ac38a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a243789ba27de4ef9a0f5ec272b49f32b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a243789ba27de4ef9a0f5ec272b49f32b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_event</b> (cl_event e) const </td></tr>
+<tr class="separator:a243789ba27de4ef9a0f5ec272b49f32b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abc3b68b87b631930e2f0e82db9191d87"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abc3b68b87b631930e2f0e82db9191d87"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_graph</b> (graph &g)</td></tr>
+<tr class="separator:abc3b68b87b631930e2f0e82db9191d87"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad5828a56c57bd7c41b3f94343563eaf8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad5828a56c57bd7c41b3f94343563eaf8"></a>
+void </td><td class="memItemRight" valign="bottom"><b>clear_event</b> () const </td></tr>
+<tr class="separator:ad5828a56c57bd7c41b3f94343563eaf8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4c32ca3beb419dbc76fc6162fd16d523"><td class="memTemplParams" colspan="2"><a class="anchor" id="a4c32ca3beb419dbc76fc6162fd16d523"></a>
+template<typename Callback > </td></tr>
+<tr class="memitem:a4c32ca3beb419dbc76fc6162fd16d523"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>register_callback</b> (Callback c) const </td></tr>
+<tr class="separator:a4c32ca3beb419dbc76fc6162fd16d523"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeebb5e25c3887a8ece7927c4a3a37135"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeebb5e25c3887a8ece7927c4a3a37135"></a>
+ </td><td class="memItemRight" valign="bottom"><b>operator T &</b> ()</td></tr>
+<tr class="separator:aeebb5e25c3887a8ece7927c4a3a37135"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a97ad30465e9d8831e6ac6ba9423b08d6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a97ad30465e9d8831e6ac6ba9423b08d6"></a>
+ </td><td class="memItemRight" valign="bottom"><b>operator const T &</b> () const </td></tr>
+<tr class="separator:a97ad30465e9d8831e6ac6ba9423b08d6"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:a134b00c8dd9200b9e45fe81919c66b11"><td class="memTemplParams" colspan="2"><a class="anchor" id="a134b00c8dd9200b9e45fe81919c66b11"></a>
-template<typename C , typename U > </td></tr>
-<tr class="memitem:a134b00c8dd9200b9e45fe81919c66b11"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::vector_iterator</b></td></tr>
-<tr class="separator:a134b00c8dd9200b9e45fe81919c66b11"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:a2c14378ba4034c68fecb50b8f914709d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c14378ba4034c68fecb50b8f914709d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>finalize</b> () const __TBB_override</td></tr>
+<tr class="separator:a2c14378ba4034c68fecb50b8f914709d"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename T, class A = cache_aligned_allocator<T>><br/>
-class tbb::concurrent_vector< T, A ></h3>
-
-<p>Concurrent vector container. </p>
-<pre class="fragment">concurrent_vector is a container having the following main properties:
-- It provides random indexed access to its elements. The index of the first element is 0.
-- It ensures safe concurrent growing its size (different threads can safely append new elements).
-- Adding new elements does not invalidate existing iterators and does not change indices of existing items.
-</pre><dl class="section user"><dt>Compatibility</dt><dd>The class meets all Container Requirements and Reversible Container Requirements from C++ Standard (See ISO/IEC 14882:2003(E), clause 23.1). But it doesn't meet Sequence Requirements due to absence of insert() and erase() methods.</dd></dl>
-<dl class="section user"><dt>Exception Safety</dt><dd>Methods working with memory allocation and/or new elements construction can throw an exception if allocator fails to allocate memory or element's default constructor throws one. Concurrent vector's element of type T must conform to the following requirements:<ul>
-<li>Throwing an exception is forbidden for destructor of T.</li>
-<li>Default constructor of T must not throw an exception OR its non-virtual destructor must safely work when its object memory is zero-initialized.</li>
-</ul>
-Otherwise, the program's behavior is undefined. </dd></dl>
-<dl class="section user"><dt></dt><dd>If an exception happens inside growth or assignment operation, an instance of the vector becomes invalid unless it is stated otherwise in the method documentation. Invalid state means:<ul>
-<li>There are no guarantees that all items were initialized by a constructor. The rest of items is zero-filled, including item where exception happens.</li>
-<li>An invalid vector instance cannot be repaired; it is unable to grow anymore.</li>
-<li>Size and capacity reported by the vector are incorrect, and calculated as if the failed operation were successful.</li>
-<li>Attempt to access not allocated elements using operator[] or iterators results in access violation or segmentation fault exception, and in case of using <a class="el" href="a00053.html#a629a29eb21e528414b9d5c9becfe05cd" title="Get reference to element at given index. Throws exceptions on errors. ">at()</a> method a C++ exception is thrown.</li>
-</ul>
-If a concurrent grow operation successfully completes, all the elements it has added to the vector will remain valid and accessible even if one of subsequent grow operations fails.</dd></dl>
-<dl class="section user"><dt>Fragmentation</dt><dd>Unlike an STL vector, a <a class="el" href="a00053.html" title="Concurrent vector container. ">concurrent_vector</a> does not move existing elements if it needs to allocate more memory. The container is divided into a series of contiguous arrays of elements. The first reservation, growth, or assignment operation determines the size of the first array. Using small number of elements as initial size incurs fragmentation that may increase e [...]
-<dl class="section user"><dt>Changes since TBB 2.1</dt><dd><ul>
-<li>Fixed guarantees of <a class="el" href="a00053.html#a803268c16e3688ff4681251947d257c7" title="Return size of vector. It may include elements under construction. ">concurrent_vector::size()</a> and <a class="el" href="a00053.html#ae9ef9895e88f9bf036b379035c18f035" title="Append minimal sequence of elements such that size()>=n. ">grow_to_at_least()</a> methods to assure elements are allocated.</li>
-<li>Methods <a class="el" href="a00053.html#aad2c07653375e4a5f89c33b375eda610" title="end iterator ">end()</a>/rbegin()/back() are partly thread-safe since they use <a class="el" href="a00053.html#a803268c16e3688ff4681251947d257c7" title="Return size of vector. It may include elements under construction. ">size()</a> to get the end of vector</li>
-<li>Added <a class="el" href="a00053.html#a65e53a98a1e1fdb515fdc2b84e2314e8" title="Resize the vector. Not thread-safe. ">resize()</a> methods (not thread-safe)</li>
-<li>Added cbegin/cend/crbegin/crend methods</li>
-<li>Changed return type of methods grow* and push_back to iterator</li>
-</ul>
-</dd></dl>
-<dl class="section user"><dt>Changes since TBB 2.0</dt><dd><ul>
-<li>Implemented exception-safety guarantees</li>
-<li>Added template argument for allocator</li>
-<li>Added allocator argument in constructors</li>
-<li>Faster index calculation</li>
-<li>First growth call specifies a number of segments to be merged in the first allocation.</li>
-<li>Fixed memory blow up for swarm of vector's instances of small size</li>
-<li>Added <a class="el" href="a00053.html#aa11fc991cda82cf93789fce31b37a16c" title="Grow by "delta" elements using copying constructor. ">grow_by(size_type n, const_reference t)</a> growth using copying constructor to init new items.</li>
-<li>Added STL-like constructors.</li>
-<li>Added operators ==, < and derivatives</li>
-<li>Added <a class="el" href="a00053.html#a629a29eb21e528414b9d5c9becfe05cd" title="Get reference to element at given index. Throws exceptions on errors. ">at()</a> method, approved for using after an exception was thrown inside the vector</li>
-<li>Added <a class="el" href="a00053.html#a88b62a9614d3f2b59c9c7c1a2143fb1e" title="return allocator object ">get_allocator()</a> method.</li>
-<li>Added <a class="el" href="a00053.html#a87355dce93d0882aa73333a35c9b367c" title="assign n items by copying t item ">assign()</a> methods</li>
-<li>Added compact() method to defragment first segments</li>
-<li>Added <a class="el" href="a00053.html#a8603bd57324fb6b60ba006884c95279d" title="swap two instances ">swap()</a> method</li>
-<li><a class="el" href="a00053.html#a8201f65735edcc28aeec95b6e73d75b6" title="Get range for iterating with parallel algorithms. ">range()</a> defaults on grainsize = 1 supporting auto grainsize algorithms. </li>
-</ul>
-</dd></dl>
-</div><h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="a526ba408fb3064ef846940d633b8f365"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00053.html">tbb::concurrent_vector</a>< T, A >::clear </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Clear container while keeping memory allocated. </p>
-<p>To free up the memory, use in conjunction with method compact(). Not thread safe </p>
-
-</div>
-</div>
-<a class="anchor" id="afae4c378515b89cc2b0a11c8cf1bcc50"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A = cache_aligned_allocator<T>> </div>
-<div class="memtemplate">
-template<typename... Args> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">iterator <a class="el" href="a00053.html">tbb::concurrent_vector</a>< T, A >::emplace_back </td>
-          <td>(</td>
-          <td class="paramtype">Args &&... </td>
-          <td class="paramname"><em>args</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Push item, create item "in place" with provided arguments. </p>
-<p>Returns iterator pointing to the new element. </p>
-
-</div>
-</div>
-<a class="anchor" id="ab89c2db5358048debdc282ff995caffb"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">iterator <a class="el" href="a00053.html">tbb::concurrent_vector</a>< T, A >::grow_by </td>
-          <td>(</td>
-          <td class="paramtype">size_type </td>
-          <td class="paramname"><em>delta</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Grow by "delta" elements. </p>
-<p>Returns iterator pointing to the first new element. </p>
-
-</div>
-</div>
-<a class="anchor" id="aa11fc991cda82cf93789fce31b37a16c"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">iterator <a class="el" href="a00053.html">tbb::concurrent_vector</a>< T, A >::grow_by </td>
-          <td>(</td>
-          <td class="paramtype">size_type </td>
-          <td class="paramname"><em>delta</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const_reference </td>
-          <td class="paramname"><em>t</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Grow by "delta" elements using copying constructor. </p>
-<p>Returns iterator pointing to the first new element. </p>
-
-</div>
-</div>
-<a class="anchor" id="acfd74483ff523213b78f44fb914c8eb4"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A = cache_aligned_allocator<T>> </div>
-<div class="memtemplate">
-template<typename I > </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">iterator <a class="el" href="a00053.html">tbb::concurrent_vector</a>< T, A >::grow_by </td>
-          <td>(</td>
-          <td class="paramtype">I </td>
-          <td class="paramname"><em>first</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">I </td>
-          <td class="paramname"><em>last</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Returns iterator pointing to the first new element. </p>
-
-</div>
-</div>
-<a class="anchor" id="a95f57f1529e0ebd1ca6bd2d60003fcab"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">iterator <a class="el" href="a00053.html">tbb::concurrent_vector</a>< T, A >::grow_by </td>
-          <td>(</td>
-          <td class="paramtype">std::initializer_list< T > </td>
-          <td class="paramname"><em>init_list</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Returns iterator pointing to the first new element. </p>
-
-</div>
-</div>
-<a class="anchor" id="ae9ef9895e88f9bf036b379035c18f035"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">iterator <a class="el" href="a00053.html">tbb::concurrent_vector</a>< T, A >::grow_to_at_least </td>
-          <td>(</td>
-          <td class="paramtype">size_type </td>
-          <td class="paramname"><em>n</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Append minimal sequence of elements such that <a class="el" href="a00053.html#a803268c16e3688ff4681251947d257c7" title="Return size of vector. It may include elements under construction. ">size()</a>>=n. </p>
-<p>The new elements are default constructed. Blocks until all elements in range [0..n) are allocated. May return while other elements are being constructed by other threads. Returns iterator that points to beginning of appended sequence. If no elements were appended, returns iterator pointing to nth element. </p>
-
-</div>
-</div>
-<a class="anchor" id="a422d9689ed72a5ef2b6b72f28e4143a2"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">iterator <a class="el" href="a00053.html">tbb::concurrent_vector</a>< T, A >::grow_to_at_least </td>
-          <td>(</td>
-          <td class="paramtype">size_type </td>
-          <td class="paramname"><em>n</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const_reference </td>
-          <td class="paramname"><em>t</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Analogous to <a class="el" href="a00053.html#ae9ef9895e88f9bf036b379035c18f035" title="Append minimal sequence of elements such that size()>=n. ">grow_to_at_least( size_type n )</a> with exception that the new elements are initialized by copying of t instead of default construction. </p>
-
-</div>
-</div>
-<a class="anchor" id="a3097cb46511504acfc9de7da5235f4a6"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">reference <a class="el" href="a00053.html">tbb::concurrent_vector</a>< T, A >::operator[] </td>
-          <td>(</td>
-          <td class="paramtype">size_type </td>
-          <td class="paramname"><em>index</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get reference to element at given index. </p>
-<p>This method is thread-safe for concurrent reads, and also while growing the vector, as long as the calling thread has checked that index < <a class="el" href="a00053.html#a803268c16e3688ff4681251947d257c7" title="Return size of vector. It may include elements under construction. ">size()</a>. </p>
-
-</div>
-</div>
-<a class="anchor" id="ad68d1675fedef232bfae35f200ba007d"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">iterator <a class="el" href="a00053.html">tbb::concurrent_vector</a>< T, A >::push_back </td>
-          <td>(</td>
-          <td class="paramtype">const_reference </td>
-          <td class="paramname"><em>item</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Push item. </p>
-<p>Returns iterator pointing to the new element. </p>
-
-</div>
-</div>
-<a class="anchor" id="ac29a9f08c0fac7c20786c7b8f4f0321a"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">iterator <a class="el" href="a00053.html">tbb::concurrent_vector</a>< T, A >::push_back </td>
-          <td>(</td>
-          <td class="paramtype">T && </td>
-          <td class="paramname"><em>item</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Push item, move-aware. </p>
-<p>Returns iterator pointing to the new element. </p>
-
-</div>
-</div>
-<a class="anchor" id="a0b3284684328c58c0228c9a697ef3594"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A = cache_aligned_allocator<T>> </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00053.html">tbb::concurrent_vector</a>< T, A >::reserve </td>
-          <td>(</td>
-          <td class="paramtype">size_type </td>
-          <td class="paramname"><em>n</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Allocate enough space to grow to size n without having to allocate more memory later. </p>
-<p>Like most of the methods provided for STL compatibility, this method is <em>not</em> thread safe. The capacity afterwards may be bigger than the requested reservation. </p>
-
-</div>
-</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>concurrent_vector.h</li>
+<li>flow_graph_opencl_node.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00053.png b/doc/html/a00053.png
index 4ffff4f..9f19dff 100644
Binary files a/doc/html/a00053.png and b/doc/html/a00053.png differ
diff --git a/doc/html/a00054.html b/doc/html/a00054.html
index 93d18b1..c50d51d 100644
--- a/doc/html/a00054.html
+++ b/doc/html/a00054.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor Class Reference</title>
+<title>tbb::flow::interface9::gfx_factory::device_type Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,107 +33,21 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00043.html">concurrent_hash_map</a></li><li class="navelem"><a class="el" href="a00054.html">const_accessor</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00067.html">gfx_factory</a></li><li class="navelem"><a class="el" href="a00054.html">device_type</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="summary">
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-methods">Protected Member Functions</a> |
-<a href="#pro-attribs">Protected Attributes</a> |
-<a href="#friends">Friends</a> |
-<a href="a00373.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor Class Reference</div>  </div>
+<div class="title">tbb::flow::interface9::gfx_factory::device_type Struct Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Combines data access, locking, and garbage collection.  
- <a href="a00054.html#details">More...</a></p>
-
-<p><code>#include <concurrent_hash_map.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00054.png" usemap="#tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor_map" alt=""/>
-  <map id="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor_map" name="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor_map">
-<area href="a00010.html" title="Allows write access to elements and combines data access, locking, and garbage collection. " alt="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor" shape="rect" coords="0,112,488,136"/>
-</map>
- </div></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:aa8ca5aef4ee14b7eddb64767b8cd5fda"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa8ca5aef4ee14b7eddb64767b8cd5fda"></a>
-typedef const <br class="typebreak"/>
-concurrent_hash_map::value_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00054.html#aa8ca5aef4ee14b7eddb64767b8cd5fda">value_type</a></td></tr>
-<tr class="memdesc:aa8ca5aef4ee14b7eddb64767b8cd5fda"><td class="mdescLeft"> </td><td class="mdescRight">Type of value. <br/></td></tr>
-<tr class="separator:aa8ca5aef4ee14b7eddb64767b8cd5fda"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a6299b523d2ae8e2613f1bc160ca99b85"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6299b523d2ae8e2613f1bc160ca99b85"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00054.html#a6299b523d2ae8e2613f1bc160ca99b85">empty</a> () const </td></tr>
-<tr class="memdesc:a6299b523d2ae8e2613f1bc160ca99b85"><td class="mdescLeft"> </td><td class="mdescRight">True if result is empty. <br/></td></tr>
-<tr class="separator:a6299b523d2ae8e2613f1bc160ca99b85"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a18390cb369369d72bdf7c867755b5190"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18390cb369369d72bdf7c867755b5190"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00054.html#a18390cb369369d72bdf7c867755b5190">release</a> ()</td></tr>
-<tr class="memdesc:a18390cb369369d72bdf7c867755b5190"><td class="mdescLeft"> </td><td class="mdescRight">Set to null. <br/></td></tr>
-<tr class="separator:a18390cb369369d72bdf7c867755b5190"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8adf04e33e7c8c876ba849f26807713a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8adf04e33e7c8c876ba849f26807713a"></a>
-const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00054.html#a8adf04e33e7c8c876ba849f26807713a">operator*</a> () const </td></tr>
-<tr class="memdesc:a8adf04e33e7c8c876ba849f26807713a"><td class="mdescLeft"> </td><td class="mdescRight">Return reference to associated value in hash table. <br/></td></tr>
-<tr class="separator:a8adf04e33e7c8c876ba849f26807713a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a28fa9b9e6c35d7e80217e69a7afe1ee5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28fa9b9e6c35d7e80217e69a7afe1ee5"></a>
-const_pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00054.html#a28fa9b9e6c35d7e80217e69a7afe1ee5">operator-></a> () const </td></tr>
-<tr class="memdesc:a28fa9b9e6c35d7e80217e69a7afe1ee5"><td class="mdescLeft"> </td><td class="mdescRight">Return pointer to associated value in hash table. <br/></td></tr>
-<tr class="separator:a28fa9b9e6c35d7e80217e69a7afe1ee5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7b26d22d228cf0d8678c9b346c63752c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b26d22d228cf0d8678c9b346c63752c"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00054.html#a7b26d22d228cf0d8678c9b346c63752c">const_accessor</a> ()</td></tr>
-<tr class="memdesc:a7b26d22d228cf0d8678c9b346c63752c"><td class="mdescLeft"> </td><td class="mdescRight">Create empty result. <br/></td></tr>
-<tr class="separator:a7b26d22d228cf0d8678c9b346c63752c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afbc0c85a146c912b9a0f94a7695957c7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbc0c85a146c912b9a0f94a7695957c7"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00054.html#afbc0c85a146c912b9a0f94a7695957c7">~const_accessor</a> ()</td></tr>
-<tr class="memdesc:afbc0c85a146c912b9a0f94a7695957c7"><td class="mdescLeft"> </td><td class="mdescRight">Destroy result after releasing the underlying reference. <br/></td></tr>
-<tr class="separator:afbc0c85a146c912b9a0f94a7695957c7"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:a05b74d408d8cd7773f7b5edfef97da1b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a05b74d408d8cd7773f7b5edfef97da1b"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>is_writer</b> ()</td></tr>
-<tr class="separator:a05b74d408d8cd7773f7b5edfef97da1b"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
-Protected Attributes</h2></td></tr>
-<tr class="memitem:ac9b96f45483ddbff95a95e8e666a8f28"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac9b96f45483ddbff95a95e8e666a8f28"></a>
-<a class="el" href="a00100.html">node</a> * </td><td class="memItemRight" valign="bottom"><b>my_node</b></td></tr>
-<tr class="separator:ac9b96f45483ddbff95a95e8e666a8f28"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5034084f595666b47734f99a6eaefa9f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5034084f595666b47734f99a6eaefa9f"></a>
-hashcode_t </td><td class="memItemRight" valign="bottom"><b>my_hash</b></td></tr>
-<tr class="separator:a5034084f595666b47734f99a6eaefa9f"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:a9a30829231c2a2f13cb12430992a0701"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a30829231c2a2f13cb12430992a0701"></a>
-class </td><td class="memItemRight" valign="bottom"><b>concurrent_hash_map< Key, T, HashCompare, Allocator ></b></td></tr>
-<tr class="separator:a9a30829231c2a2f13cb12430992a0701"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab1dfccf6cc719ff15006a2b05cf70dd7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab1dfccf6cc719ff15006a2b05cf70dd7"></a>
-class </td><td class="memItemRight" valign="bottom"><b>accessor</b></td></tr>
-<tr class="separator:ab1dfccf6cc719ff15006a2b05cf70dd7"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename Key, typename T, typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >><br/>
-class tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</h3>
-
-<p>Combines data access, locking, and garbage collection. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>concurrent_hash_map.h</li>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>gfx_factory.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00054.png b/doc/html/a00054.png
deleted file mode 100644
index e861a11..0000000
Binary files a/doc/html/a00054.png and /dev/null differ
diff --git a/doc/html/a00055.html b/doc/html/a00055.html
index 53d79f6..e672227 100644
--- a/doc/html/a00055.html
+++ b/doc/html/a00055.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::continue_msg Class Reference</title>
+<title>tbb::flow::interface9::gfx_factory::dummy_device_selector Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,28 +33,31 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00055.html">continue_msg</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00067.html">gfx_factory</a></li><li class="navelem"><a class="el" href="a00055.html">dummy_device_selector</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="a00351.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::continue_msg Class Reference</div>  </div>
+<div class="title">tbb::flow::interface9::gfx_factory::dummy_device_selector Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>An empty class used for messages that mean "I'm done".  
- <a href="a00055.html#details">More...</a></p>
-
-<p><code>#include <flow_graph.h></code></p>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>An empty class used for messages that mean "I'm done". </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a4b3ff6023818444a3a74c08c426e0f6a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4b3ff6023818444a3a74c08c426e0f6a"></a>
+<a class="el" href="a00054.html">device_type</a> </td><td class="memItemRight" valign="bottom"><b>operator()</b> (<a class="el" href="a00067.html">gfx_factory</a> &)</td></tr>
+<tr class="separator:a4b3ff6023818444a3a74c08c426e0f6a"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>gfx_factory.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00056.html b/doc/html/a00056.html
index 4809251..56d3e01 100644
--- a/doc/html/a00056.html
+++ b/doc/html/a00056.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::continue_node< Output > Class Template Reference</title>
+<title>tbb::flow::interface9::internal::edge_container< C > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,141 +33,59 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00056.html">continue_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00056.html">edge_container</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-methods">Protected Member Functions</a> |
-<a href="#friends">Friends</a> |
-<a href="a00339.html">List of all members</a>  </div>
+<a href="a00352.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::continue_node< Output > Class Template Reference</div>  </div>
+<div class="title">tbb::flow::interface9::internal::edge_container< C > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Implements an executable node that supports <a class="el" href="a00055.html" title="An empty class used for messages that mean "I'm done". ">continue_msg</a> -> Output.  
- <a href="a00056.html#details">More...</a></p>
-
-<p><code>#include <flow_graph.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::continue_node< Output >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00056.png" usemap="#tbb::flow::interface7::continue_node< Output >_map" alt=""/>
-  <map id="tbb::flow::interface7::continue_node< Output >_map" name="tbb::flow::interface7::continue_node< Output >_map">
-<area href="a00072.html" title="The base of all graph nodes. " alt="tbb::flow::interface7::graph_node" shape="rect" coords="0,56,271,80"/>
-</map>
- </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:ab991c2791fd727c253424c8ed32d5be5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab991c2791fd727c253424c8ed32d5be5"></a>
-typedef <a class="el" href="a00055.html">continue_msg</a> </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
-<tr class="separator:ab991c2791fd727c253424c8ed32d5be5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8d48230ed7707c493a7fc6c63b9781d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8d48230ed7707c493a7fc6c63b9781d0"></a>
-typedef Output </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:a8d48230ed7707c493a7fc6c63b9781d0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9754b0bba9834b11320f6779068c4523"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9754b0bba9834b11320f6779068c4523"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00055.html">input_type</a> > </td><td class="memItemRight" valign="bottom"><b>predecessor_type</b></td></tr>
-<tr class="separator:a9754b0bba9834b11320f6779068c4523"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0bc6b0b8426167ce53ac3626fccb7389"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0bc6b0b8426167ce53ac3626fccb7389"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< output_type > </td><td class="memItemRight" valign="bottom"><b>successor_type</b></td></tr>
-<tr class="separator:a0bc6b0b8426167ce53ac3626fccb7389"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af8ff6b8ea9aa5838f37d0c5c7e383178"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af8ff6b8ea9aa5838f37d0c5c7e383178"></a>
-typedef <br class="typebreak"/>
-internal::continue_input<br class="typebreak"/>
-< Output > </td><td class="memItemRight" valign="bottom"><b>fInput_type</b></td></tr>
-<tr class="separator:af8ff6b8ea9aa5838f37d0c5c7e383178"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9a24302662809af4644758edc9a9461c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a24302662809af4644758edc9a9461c"></a>
-typedef <br class="typebreak"/>
-internal::function_output<br class="typebreak"/>
-< output_type > </td><td class="memItemRight" valign="bottom"><b>fOutput_type</b></td></tr>
-<tr class="separator:a9a24302662809af4644758edc9a9461c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeacd135eea7439046af8ed68c52cd90b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeacd135eea7439046af8ed68c52cd90b"></a>
+typedef std::list< C <br class="typebreak"/>
+*, <a class="el" href="a00153.html">tbb::tbb_allocator</a>< C * > > </td><td class="memItemRight" valign="bottom"><b>edge_list_type</b></td></tr>
+<tr class="separator:aeacd135eea7439046af8ed68c52cd90b"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a7b96b9eb41772ff1d7a52329ac56b8f0"><td class="memTemplParams" colspan="2"><a class="anchor" id="a7b96b9eb41772ff1d7a52329ac56b8f0"></a>
-template<typename Body > </td></tr>
-<tr class="memitem:a7b96b9eb41772ff1d7a52329ac56b8f0"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00056.html#a7b96b9eb41772ff1d7a52329ac56b8f0">continue_node</a> (<a class="el" href="a00070.html">graph</a> &g, Body body)</td></tr>
-<tr class="memdesc:a7b96b9eb41772ff1d7a52329ac56b8f0"><td class="mdescLeft"> </td><td class="mdescRight">Constructor for executable node with <a class="el" href="a00055.html" title="An empty class used for messages that mean "I'm done". ">continue_msg</a> -> Output. <br/></td></tr>
-<tr class="separator:a7b96b9eb41772ff1d7a52329ac56b8f0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a05e8957de1cb5a940d2ed3f9fc7637ed"><td class="memTemplParams" colspan="2"><a class="anchor" id="a05e8957de1cb5a940d2ed3f9fc7637ed"></a>
-template<typename Body > </td></tr>
-<tr class="memitem:a05e8957de1cb5a940d2ed3f9fc7637ed"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00056.html#a05e8957de1cb5a940d2ed3f9fc7637ed">continue_node</a> (<a class="el" href="a00070.html">graph</a> &g, int number_of_predecessors, Body body)</td></tr>
-<tr class="memdesc:a05e8957de1cb5a940d2ed3f9fc7637ed"><td class="mdescLeft"> </td><td class="mdescRight">Constructor for executable node with <a class="el" href="a00055.html" title="An empty class used for messages that mean "I'm done". ">continue_msg</a> -> Output. <br/></td></tr>
-<tr class="separator:a05e8957de1cb5a940d2ed3f9fc7637ed"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8ab0750127a7ead08e14b8910a21cf50"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8ab0750127a7ead08e14b8910a21cf50"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00056.html#a8ab0750127a7ead08e14b8910a21cf50">continue_node</a> (const <a class="el" href="a00056.html">continue_node</a> &src)</td></tr>
-<tr class="memdesc:a8ab0750127a7ead08e14b8910a21cf50"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br/></td></tr>
-<tr class="separator:a8ab0750127a7ead08e14b8910a21cf50"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9760c1d6e4a2861fa42521f5a669b542"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9760c1d6e4a2861fa42521f5a669b542"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:a9760c1d6e4a2861fa42521f5a669b542"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1974bde02e343fd028995cf632479d96"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1974bde02e343fd028995cf632479d96"></a>
-void </td><td class="memItemRight" valign="bottom"><b>extract</b> ()</td></tr>
-<tr class="separator:a1974bde02e343fd028995cf632479d96"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00072')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4badd313105e30f539882276353dcb8e"></a>
- </td><td class="memItemRight" valign="bottom"><b>graph_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:add49002d89a2d32fa244b3d5100625c2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add49002d89a2d32fa244b3d5100625c2"></a>
-<a class="el" href="a00027.html">internal::broadcast_cache</a><br class="typebreak"/>
-< output_type > & </td><td class="memItemRight" valign="bottom"><b>successors</b> ()</td></tr>
-<tr class="separator:add49002d89a2d32fa244b3d5100625c2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abce39516e3b0bdcee87c10594b516637"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abce39516e3b0bdcee87c10594b516637"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f))</td></tr>
-<tr class="separator:abce39516e3b0bdcee87c10594b516637"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00072')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac25a4633873c052047b1dd568824d055"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0</td></tr>
-<tr class="separator:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplParams" colspan="2"><a class="anchor" id="abaf9bf74ca5f2854d09f5f07337280eb"></a>
-template<typename R , typename B > </td></tr>
-<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>run_and_put_task</b></td></tr>
-<tr class="separator:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1360e38efe396058978cf3754ad620f5"></a>
-template<typename X , typename Y > </td></tr>
-<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::broadcast_cache</b></td></tr>
-<tr class="separator:a1360e38efe396058978cf3754ad620f5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplParams" colspan="2"><a class="anchor" id="acbd9ac2610587a99cd7d43344297cc49"></a>
-template<typename X , typename Y > </td></tr>
-<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::round_robin_cache</b></td></tr>
-<tr class="separator:acbd9ac2610587a99cd7d43344297cc49"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pro_attribs_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00072')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1caee1c5677047b05d18b1662ca6fdf8"></a>
-<a class="el" href="a00070.html">graph</a> & </td><td class="memItemRight" valign="bottom"><b>my_graph</b></td></tr>
-<tr class="separator:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af48cd0cd4f6e44efc3b353adb55f86a8"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>next</b></td></tr>
-<tr class="separator:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6917bffc3cb150319679bf2395e68caa"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>prev</b></td></tr>
-<tr class="separator:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7a1c854a83c772662364e89b128d3480"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7a1c854a83c772662364e89b128d3480"></a>
+void </td><td class="memItemRight" valign="bottom"><b>add_edge</b> (C &s)</td></tr>
+<tr class="separator:a7a1c854a83c772662364e89b128d3480"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a77339a7036271b95c7bb7d9626ed70ee"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a77339a7036271b95c7bb7d9626ed70ee"></a>
+void </td><td class="memItemRight" valign="bottom"><b>delete_edge</b> (C &s)</td></tr>
+<tr class="separator:a77339a7036271b95c7bb7d9626ed70ee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae53f03d271f9b45c60cd821e8464cc4b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae53f03d271f9b45c60cd821e8464cc4b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>copy_edges</b> (edge_list_type &v)</td></tr>
+<tr class="separator:ae53f03d271f9b45c60cd821e8464cc4b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a60a6b110d6c63692be91abb1a56f3f19"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a60a6b110d6c63692be91abb1a56f3f19"></a>
+size_t </td><td class="memItemRight" valign="bottom"><b>edge_count</b> ()</td></tr>
+<tr class="separator:a60a6b110d6c63692be91abb1a56f3f19"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a62396793ae30714948135b52a335b257"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a62396793ae30714948135b52a335b257"></a>
+void </td><td class="memItemRight" valign="bottom"><b>clear</b> ()</td></tr>
+<tr class="separator:a62396793ae30714948135b52a335b257"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a803b8767a594cd57d4e1c7513917cfaa"><td class="memTemplParams" colspan="2"><a class="anchor" id="a803b8767a594cd57d4e1c7513917cfaa"></a>
+template<typename S > </td></tr>
+<tr class="memitem:a803b8767a594cd57d4e1c7513917cfaa"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>sender_extract</b> (S &s)</td></tr>
+<tr class="separator:a803b8767a594cd57d4e1c7513917cfaa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3ba045593d60fa7ebe227bca1e6d33db"><td class="memTemplParams" colspan="2"><a class="anchor" id="a3ba045593d60fa7ebe227bca1e6d33db"></a>
+template<typename R > </td></tr>
+<tr class="memitem:a3ba045593d60fa7ebe227bca1e6d33db"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>receiver_extract</b> (R &r)</td></tr>
+<tr class="separator:a3ba045593d60fa7ebe227bca1e6d33db"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename Output><br/>
-class tbb::flow::interface7::continue_node< Output ></h3>
-
-<p>Implements an executable node that supports <a class="el" href="a00055.html" title="An empty class used for messages that mean "I'm done". ">continue_msg</a> -> Output. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00188.html">flow_graph.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00056.png b/doc/html/a00056.png
deleted file mode 100644
index b695c11..0000000
Binary files a/doc/html/a00056.png and /dev/null differ
diff --git a/doc/html/a00057.html b/doc/html/a00057.html
index 875b2a2..c7aa340 100644
--- a/doc/html/a00057.html
+++ b/doc/html/a00057.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::continue_receiver Class Reference</title>
+<title>tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,246 +33,49 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00057.html">continue_receiver</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00046.html">concurrent_vector</a></li><li class="navelem"><b>push_back_helper</b></li><li class="navelem"><a class="el" href="a00057.html">element_construction_guard</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-methods">Protected Member Functions</a> |
-<a href="#pro-attribs">Protected Attributes</a> |
-<a href="#friends">Friends</a> |
-<a href="a00331.html">List of all members</a>  </div>
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="a00274.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::continue_receiver Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
+<div class="title">tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard Struct Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Base class for receivers of completion messages.  
- <a href="a00057.html#details">More...</a></p>
-
-<p><code>#include <flow_graph.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::continue_receiver:</div>
+Inheritance diagram for tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00057.png" usemap="#tbb::flow::interface7::continue_receiver_map" alt=""/>
-  <map id="tbb::flow::interface7::continue_receiver_map" name="tbb::flow::interface7::continue_receiver_map">
-<area href="a00124.html" alt="tbb::flow::interface7::receiver< continue_msg >" shape="rect" coords="0,0,276,24"/>
+  <img src="a00057.png" usemap="#tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard_map" alt=""/>
+  <map id="tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard_map" name="tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard_map">
 </map>
  </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a7474ed0edad2bb26d9f86065ecf2c93d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7474ed0edad2bb26d9f86065ecf2c93d"></a>
-typedef <a class="el" href="a00055.html">continue_msg</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00057.html#a7474ed0edad2bb26d9f86065ecf2c93d">input_type</a></td></tr>
-<tr class="memdesc:a7474ed0edad2bb26d9f86065ecf2c93d"><td class="mdescLeft"> </td><td class="mdescRight">The input type. <br/></td></tr>
-<tr class="separator:a7474ed0edad2bb26d9f86065ecf2c93d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a86d210b5614d47aaa43731b7e303751f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a86d210b5614d47aaa43731b7e303751f"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00055.html">continue_msg</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00057.html#a86d210b5614d47aaa43731b7e303751f">predecessor_type</a></td></tr>
-<tr class="memdesc:a86d210b5614d47aaa43731b7e303751f"><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br/></td></tr>
-<tr class="separator:a86d210b5614d47aaa43731b7e303751f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab5e10cb698cde6f18425b0ce8eff3108"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5e10cb698cde6f18425b0ce8eff3108"></a>
-typedef <br class="typebreak"/>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00057.html#a86d210b5614d47aaa43731b7e303751f">predecessor_type</a> > </td><td class="memItemRight" valign="bottom"><b>built_predecessors_type</b></td></tr>
-<tr class="separator:ab5e10cb698cde6f18425b0ce8eff3108"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abc4774db0bda7ecc6221008f834fcb70"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abc4774db0bda7ecc6221008f834fcb70"></a>
-typedef <br class="typebreak"/>
-built_predecessors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>predecessor_list_type</b></td></tr>
-<tr class="separator:abc4774db0bda7ecc6221008f834fcb70"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00124"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00124')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< continue_msg ></a></td></tr>
-<tr class="memitem:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16eccc851b858604344bb8f1bb9eedc8"></a>
-typedef <a class="el" href="a00055.html">continue_msg</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a></td></tr>
-<tr class="memdesc:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br/></td></tr>
-<tr class="separator:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbadf5511bd568d283040cd88bd4e81e"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00055.html">continue_msg</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a></td></tr>
-<tr class="memdesc:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br/></td></tr>
-<tr class="separator:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00d44512fd61d416e6f615e88063d038 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00d44512fd61d416e6f615e88063d038"></a>
-typedef <br class="typebreak"/>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> > </td><td class="memItemRight" valign="bottom"><b>built_predecessors_type</b></td></tr>
-<tr class="separator:a00d44512fd61d416e6f615e88063d038 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2cc119d6dff16073fc5f0d4855a9e4b7 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2cc119d6dff16073fc5f0d4855a9e4b7"></a>
-typedef <br class="typebreak"/>
-built_predecessors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>predecessor_list_type</b></td></tr>
-<tr class="separator:a2cc119d6dff16073fc5f0d4855a9e4b7 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a1ac173b0a739731b0b1db5a1e91d9326"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1ac173b0a739731b0b1db5a1e91d9326"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00057.html#a1ac173b0a739731b0b1db5a1e91d9326">continue_receiver</a> (int number_of_predecessors=0)</td></tr>
-<tr class="memdesc:a1ac173b0a739731b0b1db5a1e91d9326"><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br/></td></tr>
-<tr class="separator:a1ac173b0a739731b0b1db5a1e91d9326"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3055f8a570f7558b6eb9e210feb91b90"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3055f8a570f7558b6eb9e210feb91b90"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00057.html#a3055f8a570f7558b6eb9e210feb91b90">continue_receiver</a> (const <a class="el" href="a00057.html">continue_receiver</a> &src)</td></tr>
-<tr class="memdesc:a3055f8a570f7558b6eb9e210feb91b90"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br/></td></tr>
-<tr class="separator:a3055f8a570f7558b6eb9e210feb91b90"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2ca2de23e1e1eeb7071a838a457a50b2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ca2de23e1e1eeb7071a838a457a50b2"></a>
-virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00057.html#a2ca2de23e1e1eeb7071a838a457a50b2">~continue_receiver</a> ()</td></tr>
-<tr class="memdesc:a2ca2de23e1e1eeb7071a838a457a50b2"><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br/></td></tr>
-<tr class="separator:a2ca2de23e1e1eeb7071a838a457a50b2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9ff043995b7b4d39ab0ec41c9e3628bf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9ff043995b7b4d39ab0ec41c9e3628bf"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00057.html#a9ff043995b7b4d39ab0ec41c9e3628bf">register_predecessor</a> (<a class="el" href="a00057.html#a86d210b5614d47aaa43731b7e303751f">predecessor_type</a> &)</td></tr>
-<tr class="memdesc:a9ff043995b7b4d39ab0ec41c9e3628bf"><td class="mdescLeft"> </td><td class="mdescRight">Increments the trigger threshold. <br/></td></tr>
-<tr class="separator:a9ff043995b7b4d39ab0ec41c9e3628bf"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aea58a2200f20acd9cda829ba6958b22a"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00057.html#aea58a2200f20acd9cda829ba6958b22a">remove_predecessor</a> (<a class="el" href="a00057.html#a86d210b5614d47aaa43731b7e303751f">predecessor_type</a> &)</td></tr>
-<tr class="memdesc:aea58a2200f20acd9cda829ba6958b22a"><td class="mdescLeft"> </td><td class="mdescRight">Decrements the trigger threshold.  <a href="#aea58a2200f20acd9cda829ba6958b22a">More...</a><br/></td></tr>
-<tr class="separator:aea58a2200f20acd9cda829ba6958b22a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6427bfdcc692e76b86a52bc86869d17d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6427bfdcc692e76b86a52bc86869d17d"></a>
-<a class="el" href="a00059.html">built_predecessors_type</a> & </td><td class="memItemRight" valign="bottom"><b>built_predecessors</b> ()</td></tr>
-<tr class="separator:a6427bfdcc692e76b86a52bc86869d17d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a70bf1963304bb90d92075d412e890863"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a70bf1963304bb90d92075d412e890863"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_predecessor</b> (<a class="el" href="a00057.html#a86d210b5614d47aaa43731b7e303751f">predecessor_type</a> &s)</td></tr>
-<tr class="separator:a70bf1963304bb90d92075d412e890863"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae4f3b17d7a3df79bd0ff09745b1218ac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae4f3b17d7a3df79bd0ff09745b1218ac"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_delete_built_predecessor</b> (<a class="el" href="a00057.html#a86d210b5614d47aaa43731b7e303751f">predecessor_type</a> &s)</td></tr>
-<tr class="separator:ae4f3b17d7a3df79bd0ff09745b1218ac"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a94141a7210a22dd46746518c9878cf9e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a94141a7210a22dd46746518c9878cf9e"></a>
-void </td><td class="memItemRight" valign="bottom"><b>copy_predecessors</b> (predecessor_list_type &v)</td></tr>
-<tr class="separator:a94141a7210a22dd46746518c9878cf9e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abe8eb9ac6a687dd4dbcfd98e48efa990"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe8eb9ac6a687dd4dbcfd98e48efa990"></a>
-size_t </td><td class="memItemRight" valign="bottom"><b>predecessor_count</b> ()</td></tr>
-<tr class="separator:abe8eb9ac6a687dd4dbcfd98e48efa990"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00124"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00124')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< continue_msg ></a></td></tr>
-<tr class="memitem:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a733889a9053478ef2fb2528e2205bf07"></a>
-virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a733889a9053478ef2fb2528e2205bf07">~receiver</a> ()</td></tr>
-<tr class="memdesc:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br/></td></tr>
-<tr class="separator:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee5067bb4f4b71ffa786c1b33cb9aa6a"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#aee5067bb4f4b71ffa786c1b33cb9aa6a">try_put</a> (const <a class="el" href="a00055.html">continue_msg</a> &t)</td></tr>
-<tr class="memdesc:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Put an item to the receiver. <br/></td></tr>
-<tr class="separator:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:a67b19ab95b89f43e6033d8d124cc84be"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a67b19ab95b89f43e6033d8d124cc84be"></a>
-task * </td><td class="memItemRight" valign="bottom"><b>try_put_task</b> (const <a class="el" href="a00057.html#a7474ed0edad2bb26d9f86065ecf2c93d">input_type</a> &)</td></tr>
-<tr class="separator:a67b19ab95b89f43e6033d8d124cc84be"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af777c0ca7aff9c98aa2c8179a485613d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af777c0ca7aff9c98aa2c8179a485613d"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_receiver</b> (__TBB_PFG_RESET_ARG(reset_flags f))</td></tr>
-<tr class="separator:af777c0ca7aff9c98aa2c8179a485613d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:adf70ce80d67a565d04e029da461bbe72"><td class="memItemLeft" align="right" valign="top">virtual task * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00057.html#adf70ce80d67a565d04e029da461bbe72">execute</a> ()=0</td></tr>
-<tr class="memdesc:adf70ce80d67a565d04e029da461bbe72"><td class="mdescLeft"> </td><td class="mdescRight">Does whatever should happen when the threshold is reached.  <a href="#adf70ce80d67a565d04e029da461bbe72">More...</a><br/></td></tr>
-<tr class="separator:adf70ce80d67a565d04e029da461bbe72"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa0372ce2435ae0f97c2db34af185e6f7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0372ce2435ae0f97c2db34af185e6f7"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>is_continue_receiver</b> ()</td></tr>
-<tr class="separator:aa0372ce2435ae0f97c2db34af185e6f7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00124"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00124')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< continue_msg ></a></td></tr>
-<tr class="memitem:ac902b1e09eea9748223eb50dc38d3575 inherit pro_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac902b1e09eea9748223eb50dc38d3575"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>reset_receiver</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0</td></tr>
-<tr class="separator:ac902b1e09eea9748223eb50dc38d3575 inherit pro_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
-Protected Attributes</h2></td></tr>
-<tr class="memitem:a6b8534e4346e437a059a4e40c46768e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6b8534e4346e437a059a4e40c46768e8"></a>
-<a class="el" href="a00059.html">built_predecessors_type</a> </td><td class="memItemRight" valign="bottom"><b>my_built_predecessors</b></td></tr>
-<tr class="separator:a6b8534e4346e437a059a4e40c46768e8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a507abe0cc02ae0663e0906a83a8a39da"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a507abe0cc02ae0663e0906a83a8a39da"></a>
-<a class="el" href="a00145.html">spin_mutex</a> </td><td class="memItemRight" valign="bottom"><b>my_mutex</b></td></tr>
-<tr class="separator:a507abe0cc02ae0663e0906a83a8a39da"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afa5e52e452426600619b4431a649a68a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa5e52e452426600619b4431a649a68a"></a>
-int </td><td class="memItemRight" valign="bottom"><b>my_predecessor_count</b></td></tr>
-<tr class="separator:afa5e52e452426600619b4431a649a68a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a71ae0a26f737efd7d38c9fc868d5ee41"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a71ae0a26f737efd7d38c9fc868d5ee41"></a>
-int </td><td class="memItemRight" valign="bottom"><b>my_current_count</b></td></tr>
-<tr class="separator:a71ae0a26f737efd7d38c9fc868d5ee41"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8b5668e21d779aefc8843347f9f78517"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8b5668e21d779aefc8843347f9f78517"></a>
-int </td><td class="memItemRight" valign="bottom"><b>my_initial_predecessor_count</b></td></tr>
-<tr class="separator:a8b5668e21d779aefc8843347f9f78517"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab4eaaf8394013e2af109f6228ab1bebe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab4eaaf8394013e2af109f6228ab1bebe"></a>
+ </td><td class="memItemRight" valign="bottom"><b>element_construction_guard</b> (pointer an_element)</td></tr>
+<tr class="separator:ab4eaaf8394013e2af109f6228ab1bebe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adcc00c3764106ca035731a44b92238a8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adcc00c3764106ca035731a44b92238a8"></a>
+void </td><td class="memItemRight" valign="bottom"><b>dismiss</b> ()</td></tr>
+<tr class="separator:adcc00c3764106ca035731a44b92238a8"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplParams" colspan="2"><a class="anchor" id="abaf9bf74ca5f2854d09f5f07337280eb"></a>
-template<typename R , typename B > </td></tr>
-<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>run_and_put_task</b></td></tr>
-<tr class="separator:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1360e38efe396058978cf3754ad620f5"></a>
-template<typename X , typename Y > </td></tr>
-<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::broadcast_cache</b></td></tr>
-<tr class="separator:a1360e38efe396058978cf3754ad620f5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplParams" colspan="2"><a class="anchor" id="acbd9ac2610587a99cd7d43344297cc49"></a>
-template<typename X , typename Y > </td></tr>
-<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::round_robin_cache</b></td></tr>
-<tr class="separator:acbd9ac2610587a99cd7d43344297cc49"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a05ec930a348f7eed564236d00edbda24"><td class="memTemplParams" colspan="2"><a class="anchor" id="a05ec930a348f7eed564236d00edbda24"></a>
-template<typename U > </td></tr>
-<tr class="memitem:a05ec930a348f7eed564236d00edbda24"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>limiter_node</b></td></tr>
-<tr class="separator:a05ec930a348f7eed564236d00edbda24"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a73cd25db4e6e9497940262f70f3ffc54"><td class="memTemplParams" colspan="2"><a class="anchor" id="a73cd25db4e6e9497940262f70f3ffc54"></a>
-template<typename TT , typename M > </td></tr>
-<tr class="memitem:a73cd25db4e6e9497940262f70f3ffc54"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::successor_cache</b></td></tr>
-<tr class="separator:a73cd25db4e6e9497940262f70f3ffc54"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:abdb5e90a894c8d1f19a1a0c53f8779e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abdb5e90a894c8d1f19a1a0c53f8779e8"></a>
+pointer </td><td class="memItemRight" valign="bottom"><b>element</b></td></tr>
+<tr class="separator:abdb5e90a894c8d1f19a1a0c53f8779e8"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Base class for receivers of completion messages. </p>
-<p>These receivers automatically reset, but cannot be explicitly waited on </p>
-</div><h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="adf70ce80d67a565d04e029da461bbe72"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual task* tbb::flow::interface7::continue_receiver::execute </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Does whatever should happen when the threshold is reached. </p>
-<p>This should be very fast or else spawn a task. This is called while the sender is blocked in the <a class="el" href="a00124.html#aee5067bb4f4b71ffa786c1b33cb9aa6a" title="Put an item to the receiver. ">try_put()</a>. </p>
-
-</div>
-</div>
-<a class="anchor" id="aea58a2200f20acd9cda829ba6958b22a"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool tbb::flow::interface7::continue_receiver::remove_predecessor </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00057.html#a86d210b5614d47aaa43731b7e303751f">predecessor_type</a> & </td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Decrements the trigger threshold. </p>
-<p>Does not check to see if the removal of the predecessor now makes the current count exceed the new threshold. So removing a predecessor while the graph is active can cause unexpected results. </p>
-
-<p>Reimplemented from <a class="el" href="a00124.html#a55adae6228bbdc1539695e1ec20e9762">tbb::flow::interface7::receiver< continue_msg ></a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>concurrent_vector.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00057.png b/doc/html/a00057.png
index a069fbb..0b05314 100644
Binary files a/doc/html/a00057.png and b/doc/html/a00057.png differ
diff --git a/doc/html/a00058.html b/doc/html/a00058.html
index 922bc26..cfe1f36 100644
--- a/doc/html/a00058.html
+++ b/doc/html/a00058.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::internal::critical_section_v4 Class Reference</title>
+<title>tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,67 +33,226 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00058.html">critical_section_v4</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00058.html">enumerable_thread_specific</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#nested-classes">Classes</a> |
+<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-static-attribs">Static Public Attributes</a> |
-<a href="a00409.html">List of all members</a>  </div>
+<a href="#friends">Friends</a> |
+<a href="a00378.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::internal::critical_section_v4 Class Reference</div>  </div>
+<div class="title">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type > Class Template Reference<div class="ingroups"><a class="el" href="a00253.html">Containers</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
+
+<p>The <a class="el" href="a00058.html" title="The enumerable_thread_specific container. ">enumerable_thread_specific</a> container.  
+ <a href="a00058.html#details">More...</a></p>
+
+<p><code>#include <enumerable_thread_specific.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::internal::critical_section_v4:</div>
+Inheritance diagram for tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00058.png" usemap="#tbb::internal::critical_section_v4_map" alt=""/>
-  <map id="tbb::internal::critical_section_v4_map" name="tbb::internal::critical_section_v4_map">
+  <img src="a00058.png" usemap="#tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >_map" alt=""/>
+  <map id="tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >_map" name="tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >_map">
 </map>
  </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html">scoped_lock</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:ad50ceae1b0e91d0fd31fe506e690692b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad50ceae1b0e91d0fd31fe506e690692b"></a>
+typedef Allocator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#ad50ceae1b0e91d0fd31fe506e690692b">allocator_type</a></td></tr>
+<tr class="memdesc:ad50ceae1b0e91d0fd31fe506e690692b"><td class="mdescLeft"> </td><td class="mdescRight">Basic types. <br/></td></tr>
+<tr class="separator:ad50ceae1b0e91d0fd31fe506e690692b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a931b97e237cd2ed6eabe0d939bd141da"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a931b97e237cd2ed6eabe0d939bd141da"></a>
+typedef T </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+<tr class="separator:a931b97e237cd2ed6eabe0d939bd141da"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a353a42e7bdda1720b7150cca99cf730b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a353a42e7bdda1720b7150cca99cf730b"></a>
+typedef T & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+<tr class="separator:a353a42e7bdda1720b7150cca99cf730b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6c722a4b20fb6cae21316240b61d98d2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6c722a4b20fb6cae21316240b61d98d2"></a>
+typedef const T & </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
+<tr class="separator:a6c722a4b20fb6cae21316240b61d98d2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad88abc185701214e53e81973235ab6de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad88abc185701214e53e81973235ab6de"></a>
+typedef T * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+<tr class="separator:ad88abc185701214e53e81973235ab6de"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4aff438f46812452ab4a6f893df94fc3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4aff438f46812452ab4a6f893df94fc3"></a>
+typedef const T * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+<tr class="separator:a4aff438f46812452ab4a6f893df94fc3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a65e9cdc58e19d96b31b467c70c79122d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a65e9cdc58e19d96b31b467c70c79122d"></a>
+typedef <br class="typebreak"/>
+internal_collection_type::size_type </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
+<tr class="separator:a65e9cdc58e19d96b31b467c70c79122d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0b6f002367fa7ca2e3e245e76d91ea7e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0b6f002367fa7ca2e3e245e76d91ea7e"></a>
+typedef <br class="typebreak"/>
+internal_collection_type::difference_type </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
+<tr class="separator:a0b6f002367fa7ca2e3e245e76d91ea7e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a713e97c954eef04e3fda62cf8c8bd63f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a713e97c954eef04e3fda62cf8c8bd63f"></a>
+typedef <br class="typebreak"/>
+internal::enumerable_thread_specific_iterator<br class="typebreak"/>
+< <a class="el" href="a00046.html">internal_collection_type</a>, <br class="typebreak"/>
+value_type > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+<tr class="separator:a713e97c954eef04e3fda62cf8c8bd63f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9dacd1e38e45ee787faafd3a71b23fc2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9dacd1e38e45ee787faafd3a71b23fc2"></a>
+typedef <br class="typebreak"/>
+internal::enumerable_thread_specific_iterator<br class="typebreak"/>
+< <a class="el" href="a00046.html">internal_collection_type</a>, <br class="typebreak"/>
+const value_type > </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
+<tr class="separator:a9dacd1e38e45ee787faafd3a71b23fc2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2200200e24eaf5ed6496ff3eaa6c4dcc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2200200e24eaf5ed6496ff3eaa6c4dcc"></a>
+typedef generic_range_type<br class="typebreak"/>
+< iterator > </td><td class="memItemRight" valign="bottom"><b>range_type</b></td></tr>
+<tr class="separator:a2200200e24eaf5ed6496ff3eaa6c4dcc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9877dc4e09dc6c625a86a463f56f180d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9877dc4e09dc6c625a86a463f56f180d"></a>
+typedef generic_range_type<br class="typebreak"/>
+< const_iterator > </td><td class="memItemRight" valign="bottom"><b>const_range_type</b></td></tr>
+<tr class="separator:a9877dc4e09dc6c625a86a463f56f180d"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:ab661617ca865c4af0f34e07276f73c9e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab661617ca865c4af0f34e07276f73c9e"></a>
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>internal_construct</b> ()</td></tr>
-<tr class="separator:ab661617ca865c4af0f34e07276f73c9e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afb1ccdfc59fdd3f5a3a8db17c56102e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afb1ccdfc59fdd3f5a3a8db17c56102e8"></a>
-void </td><td class="memItemRight" valign="bottom"><b>lock</b> ()</td></tr>
-<tr class="separator:afb1ccdfc59fdd3f5a3a8db17c56102e8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:adbbd611ea04432e112b08e56251bc8b5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbbd611ea04432e112b08e56251bc8b5"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>try_lock</b> ()</td></tr>
-<tr class="separator:adbbd611ea04432e112b08e56251bc8b5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a081d4eae71879fd7dcf2c4ca9ea7fb67"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a081d4eae71879fd7dcf2c4ca9ea7fb67"></a>
-void </td><td class="memItemRight" valign="bottom"><b>unlock</b> ()</td></tr>
-<tr class="separator:a081d4eae71879fd7dcf2c4ca9ea7fb67"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad95ccef01367c0b6d75f6f91f5bf5315"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad95ccef01367c0b6d75f6f91f5bf5315"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#ad95ccef01367c0b6d75f6f91f5bf5315">enumerable_thread_specific</a> ()</td></tr>
+<tr class="memdesc:ad95ccef01367c0b6d75f6f91f5bf5315"><td class="mdescLeft"> </td><td class="mdescRight">Default constructor. Each local instance of T is default constructed. <br/></td></tr>
+<tr class="separator:ad95ccef01367c0b6d75f6f91f5bf5315"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aafd6049aa255826c712aaba778524a7c"><td class="memTemplParams" colspan="2"><a class="anchor" id="aafd6049aa255826c712aaba778524a7c"></a>
+template<typename Finit#if __TBB_ETS_USE_CPP11, typename  = typename internal::enable_if<internal::is_callable_no_args<typename internal::strip<Finit>::type>::value>::type #endif> </td></tr>
+<tr class="memitem:aafd6049aa255826c712aaba778524a7c"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00058.html#aafd6049aa255826c712aaba778524a7c">enumerable_thread_specific</a> (Finit finit)</td></tr>
+<tr class="memdesc:aafd6049aa255826c712aaba778524a7c"><td class="mdescLeft"> </td><td class="mdescRight">Constructor with initializer functor. Each local instance of T is constructed by T(finit()). <br/></td></tr>
+<tr class="separator:aafd6049aa255826c712aaba778524a7c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6f0249ee95fa56665da4b6984f3a685a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6f0249ee95fa56665da4b6984f3a685a"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#a6f0249ee95fa56665da4b6984f3a685a">enumerable_thread_specific</a> (const T &exemplar)</td></tr>
+<tr class="memdesc:a6f0249ee95fa56665da4b6984f3a685a"><td class="mdescLeft"> </td><td class="mdescRight">Constructor with exemplar. Each local instance of T is copy-constructed from the exemplar. <br/></td></tr>
+<tr class="separator:a6f0249ee95fa56665da4b6984f3a685a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0db9450c25a0d0bc94bf8d77e51653d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0db9450c25a0d0bc94bf8d77e51653d5"></a>
+ </td><td class="memItemRight" valign="bottom"><b>enumerable_thread_specific</b> (T &&exemplar)</td></tr>
+<tr class="separator:a0db9450c25a0d0bc94bf8d77e51653d5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa636348d57b1fc5127c7d642af51f6da"><td class="memTemplParams" colspan="2"><a class="anchor" id="aa636348d57b1fc5127c7d642af51f6da"></a>
+template<typename P1 , typename... P, typename  = typename internal::enable_if<!internal::is_callable_no_args<typename internal::strip<P1>::type>::value                                                          && !internal::is_compatible_ets<T, typename internal::strip<P1>::type>::value                                                          && !internal::is_same_type<T, typename internal::strip<P1>::type>::value                  [...]
+<tr class="memitem:aa636348d57b1fc5127c7d642af51f6da"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00058.html#aa636348d57b1fc5127c7d642af51f6da">enumerable_thread_specific</a> (P1 &&arg1, P &&...args)</td></tr>
+<tr class="memdesc:aa636348d57b1fc5127c7d642af51f6da"><td class="mdescLeft"> </td><td class="mdescRight">Variadic constructor with initializer arguments. Each local instance of T is constructed by T(args...) <br/></td></tr>
+<tr class="separator:aa636348d57b1fc5127c7d642af51f6da"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6ea8d717f770acb63efc406df52d4585"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6ea8d717f770acb63efc406df52d4585"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#a6ea8d717f770acb63efc406df52d4585">~enumerable_thread_specific</a> ()</td></tr>
+<tr class="memdesc:a6ea8d717f770acb63efc406df52d4585"><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br/></td></tr>
+<tr class="separator:a6ea8d717f770acb63efc406df52d4585"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aea846c6cbafbe2ff6bde6e8c2a2ee97e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aea846c6cbafbe2ff6bde6e8c2a2ee97e"></a>
+reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#aea846c6cbafbe2ff6bde6e8c2a2ee97e">local</a> ()</td></tr>
+<tr class="memdesc:aea846c6cbafbe2ff6bde6e8c2a2ee97e"><td class="mdescLeft"> </td><td class="mdescRight">returns reference to local, discarding exists <br/></td></tr>
+<tr class="separator:aea846c6cbafbe2ff6bde6e8c2a2ee97e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abbbc24a5816dc163d5df057c5e7f379d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abbbc24a5816dc163d5df057c5e7f379d"></a>
+reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#abbbc24a5816dc163d5df057c5e7f379d">local</a> (bool &exists)</td></tr>
+<tr class="memdesc:abbbc24a5816dc163d5df057c5e7f379d"><td class="mdescLeft"> </td><td class="mdescRight">Returns reference to calling thread's local copy, creating one if necessary. <br/></td></tr>
+<tr class="separator:abbbc24a5816dc163d5df057c5e7f379d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4c33c5390783e17daf2b25d53ae919fb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c33c5390783e17daf2b25d53ae919fb"></a>
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#a4c33c5390783e17daf2b25d53ae919fb">size</a> () const </td></tr>
+<tr class="memdesc:a4c33c5390783e17daf2b25d53ae919fb"><td class="mdescLeft"> </td><td class="mdescRight">Get the number of local copies. <br/></td></tr>
+<tr class="separator:a4c33c5390783e17daf2b25d53ae919fb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adfa4b2e13e47ab825dc40c4f195d2bc5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adfa4b2e13e47ab825dc40c4f195d2bc5"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#adfa4b2e13e47ab825dc40c4f195d2bc5">empty</a> () const </td></tr>
+<tr class="memdesc:adfa4b2e13e47ab825dc40c4f195d2bc5"><td class="mdescLeft"> </td><td class="mdescRight">true if there have been no local copies created <br/></td></tr>
+<tr class="separator:adfa4b2e13e47ab825dc40c4f195d2bc5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a070d26debf1f65c83de13f64f91aefdc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a070d26debf1f65c83de13f64f91aefdc"></a>
+iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#a070d26debf1f65c83de13f64f91aefdc">begin</a> ()</td></tr>
+<tr class="memdesc:a070d26debf1f65c83de13f64f91aefdc"><td class="mdescLeft"> </td><td class="mdescRight">begin iterator <br/></td></tr>
+<tr class="separator:a070d26debf1f65c83de13f64f91aefdc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad225e2e8a968b131bf05d72f5686b924"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad225e2e8a968b131bf05d72f5686b924"></a>
+iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#ad225e2e8a968b131bf05d72f5686b924">end</a> ()</td></tr>
+<tr class="memdesc:ad225e2e8a968b131bf05d72f5686b924"><td class="mdescLeft"> </td><td class="mdescRight">end iterator <br/></td></tr>
+<tr class="separator:ad225e2e8a968b131bf05d72f5686b924"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa097383eb6f90e4a551830fc00b60b3a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa097383eb6f90e4a551830fc00b60b3a"></a>
+const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#aa097383eb6f90e4a551830fc00b60b3a">begin</a> () const </td></tr>
+<tr class="memdesc:aa097383eb6f90e4a551830fc00b60b3a"><td class="mdescLeft"> </td><td class="mdescRight">begin const iterator <br/></td></tr>
+<tr class="separator:aa097383eb6f90e4a551830fc00b60b3a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5ed0248f10a7aa5045d2cda77dad9588"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5ed0248f10a7aa5045d2cda77dad9588"></a>
+const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#a5ed0248f10a7aa5045d2cda77dad9588">end</a> () const </td></tr>
+<tr class="memdesc:a5ed0248f10a7aa5045d2cda77dad9588"><td class="mdescLeft"> </td><td class="mdescRight">end const iterator <br/></td></tr>
+<tr class="separator:a5ed0248f10a7aa5045d2cda77dad9588"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac94dd896ed78df240da4a450defbca6c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac94dd896ed78df240da4a450defbca6c"></a>
+range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#ac94dd896ed78df240da4a450defbca6c">range</a> (size_t grainsize=1)</td></tr>
+<tr class="memdesc:ac94dd896ed78df240da4a450defbca6c"><td class="mdescLeft"> </td><td class="mdescRight">Get range for parallel algorithms. <br/></td></tr>
+<tr class="separator:ac94dd896ed78df240da4a450defbca6c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a25b9153dfe994c8122a7f0227cffe793"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a25b9153dfe994c8122a7f0227cffe793"></a>
+const_range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#a25b9153dfe994c8122a7f0227cffe793">range</a> (size_t grainsize=1) const </td></tr>
+<tr class="memdesc:a25b9153dfe994c8122a7f0227cffe793"><td class="mdescLeft"> </td><td class="mdescRight">Get const range for parallel algorithms. <br/></td></tr>
+<tr class="separator:a25b9153dfe994c8122a7f0227cffe793"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a85a0d8f088ef1ee07aeb2c0e944a4a5e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a85a0d8f088ef1ee07aeb2c0e944a4a5e"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html#a85a0d8f088ef1ee07aeb2c0e944a4a5e">clear</a> ()</td></tr>
+<tr class="memdesc:a85a0d8f088ef1ee07aeb2c0e944a4a5e"><td class="mdescLeft"> </td><td class="mdescRight">Destroys local copies. <br/></td></tr>
+<tr class="separator:a85a0d8f088ef1ee07aeb2c0e944a4a5e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6b614f913497b8dc168a8e6ea03eac48"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6b614f913497b8dc168a8e6ea03eac48"></a>
+ </td><td class="memItemRight" valign="bottom"><b>enumerable_thread_specific</b> (const <a class="el" href="a00058.html">enumerable_thread_specific</a> &other)</td></tr>
+<tr class="separator:a6b614f913497b8dc168a8e6ea03eac48"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a15960d5f730ea183a581730e912700c8"><td class="memTemplParams" colspan="2"><a class="anchor" id="a15960d5f730ea183a581730e912700c8"></a>
+template<typename Alloc , ets_key_usage_type Cachetype> </td></tr>
+<tr class="memitem:a15960d5f730ea183a581730e912700c8"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>enumerable_thread_specific</b> (const <a class="el" href="a00058.html">enumerable_thread_specific</a>< T, Alloc, Cachetype > &other)</td></tr>
+<tr class="separator:a15960d5f730ea183a581730e912700c8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a04038b049009e17c637cc62a175afa29"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a04038b049009e17c637cc62a175afa29"></a>
+ </td><td class="memItemRight" valign="bottom"><b>enumerable_thread_specific</b> (<a class="el" href="a00058.html">enumerable_thread_specific</a> &&other)</td></tr>
+<tr class="separator:a04038b049009e17c637cc62a175afa29"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a33e410c904bc378c66e8e6724ea16671"><td class="memTemplParams" colspan="2"><a class="anchor" id="a33e410c904bc378c66e8e6724ea16671"></a>
+template<typename Alloc , ets_key_usage_type Cachetype> </td></tr>
+<tr class="memitem:a33e410c904bc378c66e8e6724ea16671"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>enumerable_thread_specific</b> (<a class="el" href="a00058.html">enumerable_thread_specific</a>< T, Alloc, Cachetype > &&other)</td></tr>
+<tr class="separator:a33e410c904bc378c66e8e6724ea16671"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7af8784cd0d0f04b3f9f50988b8f0885"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7af8784cd0d0f04b3f9f50988b8f0885"></a>
+<a class="el" href="a00058.html">enumerable_thread_specific</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00058.html">enumerable_thread_specific</a> &other)</td></tr>
+<tr class="separator:a7af8784cd0d0f04b3f9f50988b8f0885"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5e2cfddffa47dd0eb042cf6cbcea815f"><td class="memTemplParams" colspan="2"><a class="anchor" id="a5e2cfddffa47dd0eb042cf6cbcea815f"></a>
+template<typename Alloc , ets_key_usage_type Cachetype> </td></tr>
+<tr class="memitem:a5e2cfddffa47dd0eb042cf6cbcea815f"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="a00058.html">enumerable_thread_specific</a> & </td><td class="memTemplItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00058.html">enumerable_thread_specific</a>< T, Alloc, Cachetype > &other)</td></tr>
+<tr class="separator:a5e2cfddffa47dd0eb042cf6cbcea815f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae01add07bc8d4fbda9db79f692c1ae8b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae01add07bc8d4fbda9db79f692c1ae8b"></a>
+<a class="el" href="a00058.html">enumerable_thread_specific</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="a00058.html">enumerable_thread_specific</a> &&other)</td></tr>
+<tr class="separator:ae01add07bc8d4fbda9db79f692c1ae8b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a324887df609279ad02d36b3b8e238729"><td class="memTemplParams" colspan="2"><a class="anchor" id="a324887df609279ad02d36b3b8e238729"></a>
+template<typename Alloc , ets_key_usage_type Cachetype> </td></tr>
+<tr class="memitem:a324887df609279ad02d36b3b8e238729"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="a00058.html">enumerable_thread_specific</a> & </td><td class="memTemplItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="a00058.html">enumerable_thread_specific</a>< T, Alloc, Cachetype > &&other)</td></tr>
+<tr class="separator:a324887df609279ad02d36b3b8e238729"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7ab62b7fd2aeeb12e1a3b93c9ce99f27"><td class="memTemplParams" colspan="2"><a class="anchor" id="a7ab62b7fd2aeeb12e1a3b93c9ce99f27"></a>
+template<typename combine_func_t > </td></tr>
+<tr class="memitem:a7ab62b7fd2aeeb12e1a3b93c9ce99f27"><td class="memTemplItemLeft" align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>combine</b> (combine_func_t f_combine)</td></tr>
+<tr class="separator:a7ab62b7fd2aeeb12e1a3b93c9ce99f27"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae644ea36b776fdc698d87a60ef4a3179"><td class="memTemplParams" colspan="2"><a class="anchor" id="ae644ea36b776fdc698d87a60ef4a3179"></a>
+template<typename combine_func_t > </td></tr>
+<tr class="memitem:ae644ea36b776fdc698d87a60ef4a3179"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>combine_each</b> (combine_func_t f_combine)</td></tr>
+<tr class="separator:ae644ea36b776fdc698d87a60ef4a3179"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr class="memitem:a7a62f98ad578ec8ac01d88de55bd271c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7a62f98ad578ec8ac01d88de55bd271c"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
-<tr class="separator:a7a62f98ad578ec8ac01d88de55bd271c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a47f75eb62f02cbdee0d602dff38075e9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a47f75eb62f02cbdee0d602dff38075e9"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
-<tr class="separator:a47f75eb62f02cbdee0d602dff38075e9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a12f986c4c554db133c2ae657acf2a496"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a12f986c4c554db133c2ae657acf2a496"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = true</td></tr>
-<tr class="separator:a12f986c4c554db133c2ae657acf2a496"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a408a399f5d1ceaf6d0adc9451932a96a"><td class="memTemplParams" colspan="2"><a class="anchor" id="a408a399f5d1ceaf6d0adc9451932a96a"></a>
+template<typename U , typename A , ets_key_usage_type C> </td></tr>
+<tr class="memitem:a408a399f5d1ceaf6d0adc9451932a96a"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>enumerable_thread_specific</b></td></tr>
+<tr class="separator:a408a399f5d1ceaf6d0adc9451932a96a"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>critical_section.h</li>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><h3>template<typename T, typename Allocator, ets_key_usage_type ETS_key_type><br/>
+class tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></h3>
+
+<p>The <a class="el" href="a00058.html" title="The enumerable_thread_specific container. ">enumerable_thread_specific</a> container. </p>
+<pre class="fragment">enumerable_thread_specific has the following properties:
+- thread-local copies are lazily created, with default, exemplar or function initialization.
+- thread-local copies do not move (during lifetime, and excepting clear()) so the address of a copy is invariant.
+- the contained objects need not have operator=() defined if combine is not used.
+- enumerable_thread_specific containers may be copy-constructed or assigned.
+- thread-local copies can be managed by hash-table, or can be accessed via TLS storage for speed.
+- outside of parallel contexts, the contents of all thread-local copies are accessible by iterator or using combine or combine_each methods
+</pre><dl class="section user"><dt>Segmented iterator</dt><dd>When the thread-local objects are containers with input_iterators defined, a segmented iterator may be used to iterate over all the elements of all thread-local copies.</dd></dl>
+<dl class="section user"><dt>combine and combine_each</dt><dd><ul>
+<li>Both methods are defined for <a class="el" href="a00058.html" title="The enumerable_thread_specific container. ">enumerable_thread_specific</a>.</li>
+<li>combine() requires the type T have operator=() defined.</li>
+<li>neither method modifies the contents of the object (though there is no guarantee that the applied methods do not modify the object.)</li>
+<li>Both are evaluated in serial context (the methods are assumed to be non-benign.) </li>
+</ul>
+</dd></dl>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>enumerable_thread_specific.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00058.png b/doc/html/a00058.png
index 835e586..fba36b8 100644
Binary files a/doc/html/a00058.png and b/doc/html/a00058.png differ
diff --git a/doc/html/a00059.html b/doc/html/a00059.html
index 13031b4..13dd50e 100644
--- a/doc/html/a00059.html
+++ b/doc/html/a00059.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::internal::edge_container< C > Class Template Reference</title>
+<title>tbb::filter Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,59 +33,111 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00059.html">edge_container</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00059.html">filter</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="a00366.html">List of all members</a>  </div>
+<a href="#pro-static-attribs">Static Protected Attributes</a> |
+<a href="a00284.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::internal::edge_container< C > Class Template Reference</div>  </div>
+<div class="title">tbb::filter Class Reference<div class="ingroups"><a class="el" href="a00252.html">Algorithms</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
+
+<p>A stage in a pipeline.  
+ <a href="a00059.html#details">More...</a></p>
+
+<p><code>#include <pipeline.h></code></p>
+<div class="dynheader">
+Inheritance diagram for tbb::filter:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00059.png" usemap="#tbb::filter_map" alt=""/>
+  <map id="tbb::filter_map" name="tbb::filter_map">
+<area href="a00158.html" title="A stage in a pipeline served by a user thread. " alt="tbb::thread_bound_filter" shape="rect" coords="0,112,145,136"/>
+</map>
+ </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a2d06967c2c2f22bf68ab5f0d06239724"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2d06967c2c2f22bf68ab5f0d06239724"></a>
-typedef std::list< C <br class="typebreak"/>
-*, <a class="el" href="a00159.html">tbb::tbb_allocator</a>< C * > > </td><td class="memItemRight" valign="bottom"><b>edge_list_type</b></td></tr>
-<tr class="separator:a2d06967c2c2f22bf68ab5f0d06239724"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a3f2166f764e6763f2e7555c3221d4a18"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3f2166f764e6763f2e7555c3221d4a18"></a>
-void </td><td class="memItemRight" valign="bottom"><b>add_edge</b> (C &s)</td></tr>
-<tr class="separator:a3f2166f764e6763f2e7555c3221d4a18"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac9e82eb2f7c88f70c32dbbc07d611817"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac9e82eb2f7c88f70c32dbbc07d611817"></a>
-void </td><td class="memItemRight" valign="bottom"><b>delete_edge</b> (C &s)</td></tr>
-<tr class="separator:ac9e82eb2f7c88f70c32dbbc07d611817"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad6cdc986955e0093dc6265a317e06078"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad6cdc986955e0093dc6265a317e06078"></a>
-void </td><td class="memItemRight" valign="bottom"><b>copy_edges</b> (edge_list_type &v)</td></tr>
-<tr class="separator:ad6cdc986955e0093dc6265a317e06078"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5116952e2f84db3930ef67dfb33eae2f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5116952e2f84db3930ef67dfb33eae2f"></a>
-size_t </td><td class="memItemRight" valign="bottom"><b>edge_count</b> ()</td></tr>
-<tr class="separator:a5116952e2f84db3930ef67dfb33eae2f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa493403da8fd306842468240cd6ae261"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa493403da8fd306842468240cd6ae261"></a>
-void </td><td class="memItemRight" valign="bottom"><b>clear</b> ()</td></tr>
-<tr class="separator:aa493403da8fd306842468240cd6ae261"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a95b528677dff16e4675ac0ace3bb9a14"><td class="memTemplParams" colspan="2"><a class="anchor" id="a95b528677dff16e4675ac0ace3bb9a14"></a>
-template<typename S > </td></tr>
-<tr class="memitem:a95b528677dff16e4675ac0ace3bb9a14"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>sender_extract</b> (S &s)</td></tr>
-<tr class="separator:a95b528677dff16e4675ac0ace3bb9a14"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a64f6139acdf1bd52f2c6e6fdb208dd33"><td class="memTemplParams" colspan="2"><a class="anchor" id="a64f6139acdf1bd52f2c6e6fdb208dd33"></a>
-template<typename R > </td></tr>
-<tr class="memitem:a64f6139acdf1bd52f2c6e6fdb208dd33"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>receiver_extract</b> (R &r)</td></tr>
-<tr class="separator:a64f6139acdf1bd52f2c6e6fdb208dd33"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-static-attribs"></a>
+Static Protected Attributes</h2></td></tr>
+<tr class="memitem:ae9dab2e01b0963b341ab04b59eec1475"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae9dab2e01b0963b341ab04b59eec1475"></a>
+static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00059.html#ae9dab2e01b0963b341ab04b59eec1475">filter_is_serial</a> = 0x1</td></tr>
+<tr class="memdesc:ae9dab2e01b0963b341ab04b59eec1475"><td class="mdescLeft"> </td><td class="mdescRight">The lowest bit 0 is for parallel vs. serial. <br/></td></tr>
+<tr class="separator:ae9dab2e01b0963b341ab04b59eec1475"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a091fcf6abc79edfa5c8bf01f742e2392"><td class="memItemLeft" align="right" valign="top">static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00059.html#a091fcf6abc79edfa5c8bf01f742e2392">filter_is_out_of_order</a> = 0x1<<4</td></tr>
+<tr class="memdesc:a091fcf6abc79edfa5c8bf01f742e2392"><td class="mdescLeft"> </td><td class="mdescRight">4th bit distinguishes ordered vs unordered filters.  <a href="#a091fcf6abc79edfa5c8bf01f742e2392">More...</a><br/></td></tr>
+<tr class="separator:a091fcf6abc79edfa5c8bf01f742e2392"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1382f216bd094064a18eb48ecc43c86b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1382f216bd094064a18eb48ecc43c86b"></a>
+static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00059.html#a1382f216bd094064a18eb48ecc43c86b">filter_is_bound</a> = 0x1<<5</td></tr>
+<tr class="memdesc:a1382f216bd094064a18eb48ecc43c86b"><td class="mdescLeft"> </td><td class="mdescRight">5th bit distinguishes thread-bound and regular filters. <br/></td></tr>
+<tr class="separator:a1382f216bd094064a18eb48ecc43c86b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6645ec56872b6ba2056dcaa467e292f7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6645ec56872b6ba2056dcaa467e292f7"></a>
+static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00059.html#a6645ec56872b6ba2056dcaa467e292f7">filter_may_emit_null</a> = 0x1<<6</td></tr>
+<tr class="memdesc:a6645ec56872b6ba2056dcaa467e292f7"><td class="mdescLeft"> </td><td class="mdescRight">6th bit marks input filters emitting small objects <br/></td></tr>
+<tr class="separator:a6645ec56872b6ba2056dcaa467e292f7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aab9689e23a96c6c9bf1c8caae74d92ee"><td class="memItemLeft" align="right" valign="top">static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00059.html#aab9689e23a96c6c9bf1c8caae74d92ee">exact_exception_propagation</a></td></tr>
+<tr class="memdesc:aab9689e23a96c6c9bf1c8caae74d92ee"><td class="mdescLeft"> </td><td class="mdescRight">7th bit defines exception propagation mode expected by the application.  <a href="#aab9689e23a96c6c9bf1c8caae74d92ee">More...</a><br/></td></tr>
+<tr class="separator:aab9689e23a96c6c9bf1c8caae74d92ee"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>A stage in a pipeline. </p>
+</div><h2 class="groupheader">Member Data Documentation</h2>
+<a class="anchor" id="aab9689e23a96c6c9bf1c8caae74d92ee"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">const unsigned char tbb::filter::exact_exception_propagation</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<b>Initial value:</b><div class="fragment"><div class="line">=</div>
+<div class="line"><span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span></div>
+<div class="line"><span class="preprocessor">            0x0</span></div>
+</div><!-- fragment -->
+<p>7th bit defines exception propagation mode expected by the application. </p>
+
+</div>
+</div>
+<a class="anchor" id="a091fcf6abc79edfa5c8bf01f742e2392"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">const unsigned char tbb::filter::filter_is_out_of_order = 0x1<<4</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>4th bit distinguishes ordered vs unordered filters. </p>
+<p>The bit was not set for parallel filters in TBB 2.1 and earlier, but is_ordered() function always treats parallel filters as out of order. </p>
+
+</div>
+</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<li>pipeline.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00062.png b/doc/html/a00059.png
similarity index 100%
copy from doc/html/a00062.png
copy to doc/html/a00059.png
diff --git a/doc/html/a00060.html b/doc/html/a00060.html
index de251d7..e18d4e2 100644
--- a/doc/html/a00060.html
+++ b/doc/html/a00060.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard Struct Reference</title>
+<title>tbb::interface6::filter_t< T, U > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,49 +33,67 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00053.html">concurrent_vector</a></li><li class="navelem"><b>push_back_helper</b></li><li class="navelem"><a class="el" href="a00060.html">element_construction_guard</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00060.html">filter_t</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-attribs">Public Attributes</a> |
-<a href="a00278.html">List of all members</a>  </div>
+<a href="#friends">Friends</a> |
+<a href="a00387.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard Struct Reference</div>  </div>
+<div class="title">tbb::interface6::filter_t< T, U > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="dynheader">
-Inheritance diagram for tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00060.png" usemap="#tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard_map" alt=""/>
-  <map id="tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard_map" name="tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard_map">
-</map>
- </div></div>
+
+<p>Class representing a chain of type-safe pipeline filters.  
+ <a href="a00060.html#details">More...</a></p>
+
+<p><code>#include <pipeline.h></code></p>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:ab4eaaf8394013e2af109f6228ab1bebe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab4eaaf8394013e2af109f6228ab1bebe"></a>
- </td><td class="memItemRight" valign="bottom"><b>element_construction_guard</b> (pointer an_element)</td></tr>
-<tr class="separator:ab4eaaf8394013e2af109f6228ab1bebe"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:adcc00c3764106ca035731a44b92238a8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adcc00c3764106ca035731a44b92238a8"></a>
-void </td><td class="memItemRight" valign="bottom"><b>dismiss</b> ()</td></tr>
-<tr class="separator:adcc00c3764106ca035731a44b92238a8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a291e76dc7ae92a66109a102904836b62"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a291e76dc7ae92a66109a102904836b62"></a>
+ </td><td class="memItemRight" valign="bottom"><b>filter_t</b> (const <a class="el" href="a00060.html">filter_t</a>< T, U > &rhs)</td></tr>
+<tr class="separator:a291e76dc7ae92a66109a102904836b62"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a86c29832da3f4941254b8dce9e1ff6f0"><td class="memTemplParams" colspan="2"><a class="anchor" id="a86c29832da3f4941254b8dce9e1ff6f0"></a>
+template<typename Body > </td></tr>
+<tr class="memitem:a86c29832da3f4941254b8dce9e1ff6f0"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>filter_t</b> (tbb::filter::mode mode, const Body &body)</td></tr>
+<tr class="separator:a86c29832da3f4941254b8dce9e1ff6f0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae765b59c54ca11f9cdb9f7f2c6c3bd68"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae765b59c54ca11f9cdb9f7f2c6c3bd68"></a>
+void </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00060.html">filter_t</a>< T, U > &rhs)</td></tr>
+<tr class="separator:ae765b59c54ca11f9cdb9f7f2c6c3bd68"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a445602c2d364b5bbcd8cc9e0b7f37376"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a445602c2d364b5bbcd8cc9e0b7f37376"></a>
+void </td><td class="memItemRight" valign="bottom"><b>clear</b> ()</td></tr>
+<tr class="separator:a445602c2d364b5bbcd8cc9e0b7f37376"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:abdb5e90a894c8d1f19a1a0c53f8779e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abdb5e90a894c8d1f19a1a0c53f8779e8"></a>
-pointer </td><td class="memItemRight" valign="bottom"><b>element</b></td></tr>
-<tr class="separator:abdb5e90a894c8d1f19a1a0c53f8779e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a49b422a3c97d5dc848d177246de4c149"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a49b422a3c97d5dc848d177246de4c149"></a>
+class </td><td class="memItemRight" valign="bottom"><b>internal::pipeline_proxy</b></td></tr>
+<tr class="separator:a49b422a3c97d5dc848d177246de4c149"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a21460fde704da22caa222778f5abb140"><td class="memTemplParams" colspan="2"><a class="anchor" id="a21460fde704da22caa222778f5abb140"></a>
+template<typename T_ , typename U_ , typename Body > </td></tr>
+<tr class="memitem:a21460fde704da22caa222778f5abb140"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="a00060.html">filter_t</a>< T_, U_ > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00060.html#a21460fde704da22caa222778f5abb140">make_filter</a> (tbb::filter::mode, const Body &)</td></tr>
+<tr class="memdesc:a21460fde704da22caa222778f5abb140"><td class="mdescLeft"> </td><td class="mdescRight">Create a filter to participate in parallel_pipeline. <br/></td></tr>
+<tr class="separator:a21460fde704da22caa222778f5abb140"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa80730e1b71fa4266ca0d1dc12da6caa"><td class="memTemplParams" colspan="2"><a class="anchor" id="aa80730e1b71fa4266ca0d1dc12da6caa"></a>
+template<typename T_ , typename V_ , typename U_ > </td></tr>
+<tr class="memitem:aa80730e1b71fa4266ca0d1dc12da6caa"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="a00060.html">filter_t</a>< T_, U_ > </td><td class="memTemplItemRight" valign="bottom"><b>operator&</b> (const <a class="el" href="a00060.html">filter_t</a>< T_, V_ > &, const <a class="el" href="a00060.html">filter_t</a>< V_, U_ > &)</td></tr>
+<tr class="separator:aa80730e1b71fa4266ca0d1dc12da6caa"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<hr/>The documentation for this struct was generated from the following file:<ul>
-<li>concurrent_vector.h</li>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><h3>template<typename T, typename U><br/>
+class tbb::interface6::filter_t< T, U ></h3>
+
+<p>Class representing a chain of type-safe pipeline filters. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>pipeline.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00060.png b/doc/html/a00060.png
deleted file mode 100644
index 0b05314..0000000
Binary files a/doc/html/a00060.png and /dev/null differ
diff --git a/doc/html/a00061.html b/doc/html/a00061.html
index ab0d500..6ede4cb 100644
--- a/doc/html/a00061.html
+++ b/doc/html/a00061.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type > Class Template Reference</title>
+<title>tbb::final_scan_tag Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,212 +33,38 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00061.html">enumerable_thread_specific</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00061.html">final_scan_tag</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#friends">Friends</a> |
-<a href="a00392.html">List of all members</a>  </div>
+<a href="#pub-static-methods">Static Public Member Functions</a> |
+<a href="a00282.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type > Class Template Reference<div class="ingroups"><a class="el" href="a00256.html">Containers</a></div></div>  </div>
+<div class="title">tbb::final_scan_tag Struct Reference<div class="ingroups"><a class="el" href="a00252.html">Algorithms</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>The <a class="el" href="a00061.html" title="The enumerable_thread_specific container. ">enumerable_thread_specific</a> container.  
+<p>Used to indicate that the final scan is being performed.  
  <a href="a00061.html#details">More...</a></p>
 
-<p><code>#include <enumerable_thread_specific.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00061.png" usemap="#tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >_map" alt=""/>
-  <map id="tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >_map" name="tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >_map">
-</map>
- </div></div>
+<p><code>#include <parallel_scan.h></code></p>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:ad50ceae1b0e91d0fd31fe506e690692b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad50ceae1b0e91d0fd31fe506e690692b"></a>
-typedef Allocator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00061.html#ad50ceae1b0e91d0fd31fe506e690692b">allocator_type</a></td></tr>
-<tr class="memdesc:ad50ceae1b0e91d0fd31fe506e690692b"><td class="mdescLeft"> </td><td class="mdescRight">Basic types. <br/></td></tr>
-<tr class="separator:ad50ceae1b0e91d0fd31fe506e690692b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a931b97e237cd2ed6eabe0d939bd141da"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a931b97e237cd2ed6eabe0d939bd141da"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-<tr class="separator:a931b97e237cd2ed6eabe0d939bd141da"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a353a42e7bdda1720b7150cca99cf730b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a353a42e7bdda1720b7150cca99cf730b"></a>
-typedef T & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
-<tr class="separator:a353a42e7bdda1720b7150cca99cf730b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6c722a4b20fb6cae21316240b61d98d2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6c722a4b20fb6cae21316240b61d98d2"></a>
-typedef const T & </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
-<tr class="separator:a6c722a4b20fb6cae21316240b61d98d2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad88abc185701214e53e81973235ab6de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad88abc185701214e53e81973235ab6de"></a>
-typedef T * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-<tr class="separator:ad88abc185701214e53e81973235ab6de"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4aff438f46812452ab4a6f893df94fc3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4aff438f46812452ab4a6f893df94fc3"></a>
-typedef const T * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-<tr class="separator:a4aff438f46812452ab4a6f893df94fc3"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a65e9cdc58e19d96b31b467c70c79122d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a65e9cdc58e19d96b31b467c70c79122d"></a>
-typedef <br class="typebreak"/>
-internal_collection_type::size_type </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-<tr class="separator:a65e9cdc58e19d96b31b467c70c79122d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0b6f002367fa7ca2e3e245e76d91ea7e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0b6f002367fa7ca2e3e245e76d91ea7e"></a>
-typedef <br class="typebreak"/>
-internal_collection_type::difference_type </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
-<tr class="separator:a0b6f002367fa7ca2e3e245e76d91ea7e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a713e97c954eef04e3fda62cf8c8bd63f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a713e97c954eef04e3fda62cf8c8bd63f"></a>
-typedef <br class="typebreak"/>
-internal::enumerable_thread_specific_iterator<br class="typebreak"/>
-< <a class="el" href="a00053.html">internal_collection_type</a>, <br class="typebreak"/>
-value_type > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
-<tr class="separator:a713e97c954eef04e3fda62cf8c8bd63f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9dacd1e38e45ee787faafd3a71b23fc2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9dacd1e38e45ee787faafd3a71b23fc2"></a>
-typedef <br class="typebreak"/>
-internal::enumerable_thread_specific_iterator<br class="typebreak"/>
-< <a class="el" href="a00053.html">internal_collection_type</a>, <br class="typebreak"/>
-const value_type > </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
-<tr class="separator:a9dacd1e38e45ee787faafd3a71b23fc2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2200200e24eaf5ed6496ff3eaa6c4dcc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2200200e24eaf5ed6496ff3eaa6c4dcc"></a>
-typedef generic_range_type<br class="typebreak"/>
-< iterator > </td><td class="memItemRight" valign="bottom"><b>range_type</b></td></tr>
-<tr class="separator:a2200200e24eaf5ed6496ff3eaa6c4dcc"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9877dc4e09dc6c625a86a463f56f180d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9877dc4e09dc6c625a86a463f56f180d"></a>
-typedef generic_range_type<br class="typebreak"/>
-< const_iterator > </td><td class="memItemRight" valign="bottom"><b>const_range_type</b></td></tr>
-<tr class="separator:a9877dc4e09dc6c625a86a463f56f180d"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:ad95ccef01367c0b6d75f6f91f5bf5315"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad95ccef01367c0b6d75f6f91f5bf5315"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00061.html#ad95ccef01367c0b6d75f6f91f5bf5315">enumerable_thread_specific</a> ()</td></tr>
-<tr class="memdesc:ad95ccef01367c0b6d75f6f91f5bf5315"><td class="mdescLeft"> </td><td class="mdescRight">Default constructor. Each local instance of T is default constructed. <br/></td></tr>
-<tr class="separator:ad95ccef01367c0b6d75f6f91f5bf5315"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aafd6049aa255826c712aaba778524a7c"><td class="memTemplParams" colspan="2"><a class="anchor" id="aafd6049aa255826c712aaba778524a7c"></a>
-template<typename Finit#if __TBB_ETS_USE_CPP11, typename  = typename internal::enable_if<internal::is_callable_no_args<typename internal::strip<Finit>::type>::value>::type #endif> </td></tr>
-<tr class="memitem:aafd6049aa255826c712aaba778524a7c"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00061.html#aafd6049aa255826c712aaba778524a7c">enumerable_thread_specific</a> (Finit finit)</td></tr>
-<tr class="memdesc:aafd6049aa255826c712aaba778524a7c"><td class="mdescLeft"> </td><td class="mdescRight">Constructor with initializer functor. Each local instance of T is constructed by T(finit()). <br/></td></tr>
-<tr class="separator:aafd6049aa255826c712aaba778524a7c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6f0249ee95fa56665da4b6984f3a685a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6f0249ee95fa56665da4b6984f3a685a"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00061.html#a6f0249ee95fa56665da4b6984f3a685a">enumerable_thread_specific</a> (const T &exemplar)</td></tr>
-<tr class="memdesc:a6f0249ee95fa56665da4b6984f3a685a"><td class="mdescLeft"> </td><td class="mdescRight">Constructor with exemplar. Each local instance of T is copy-constructed from the exemplar. <br/></td></tr>
-<tr class="separator:a6f0249ee95fa56665da4b6984f3a685a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0db9450c25a0d0bc94bf8d77e51653d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0db9450c25a0d0bc94bf8d77e51653d5"></a>
- </td><td class="memItemRight" valign="bottom"><b>enumerable_thread_specific</b> (T &&exemplar)</td></tr>
-<tr class="separator:a0db9450c25a0d0bc94bf8d77e51653d5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa636348d57b1fc5127c7d642af51f6da"><td class="memTemplParams" colspan="2"><a class="anchor" id="aa636348d57b1fc5127c7d642af51f6da"></a>
-template<typename P1 , typename... P, typename  = typename internal::enable_if<!internal::is_callable_no_args<typename internal::strip<P1>::type>::value                                                          && !internal::is_compatible_ets<T, typename internal::strip<P1>::type>::value                                                          && !internal::is_same_type<T, typename internal::strip<P1>::type>::value                  [...]
-<tr class="memitem:aa636348d57b1fc5127c7d642af51f6da"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00061.html#aa636348d57b1fc5127c7d642af51f6da">enumerable_thread_specific</a> (P1 &&arg1, P &&...args)</td></tr>
-<tr class="memdesc:aa636348d57b1fc5127c7d642af51f6da"><td class="mdescLeft"> </td><td class="mdescRight">Variadic constructor with initializer arguments. Each local instance of T is constructed by T(args...) <br/></td></tr>
-<tr class="separator:aa636348d57b1fc5127c7d642af51f6da"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6ea8d717f770acb63efc406df52d4585"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6ea8d717f770acb63efc406df52d4585"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00061.html#a6ea8d717f770acb63efc406df52d4585">~enumerable_thread_specific</a> ()</td></tr>
-<tr class="memdesc:a6ea8d717f770acb63efc406df52d4585"><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br/></td></tr>
-<tr class="separator:a6ea8d717f770acb63efc406df52d4585"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aea846c6cbafbe2ff6bde6e8c2a2ee97e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aea846c6cbafbe2ff6bde6e8c2a2ee97e"></a>
-reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00061.html#aea846c6cbafbe2ff6bde6e8c2a2ee97e">local</a> ()</td></tr>
-<tr class="memdesc:aea846c6cbafbe2ff6bde6e8c2a2ee97e"><td class="mdescLeft"> </td><td class="mdescRight">returns reference to local, discarding exists <br/></td></tr>
-<tr class="separator:aea846c6cbafbe2ff6bde6e8c2a2ee97e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abbbc24a5816dc163d5df057c5e7f379d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abbbc24a5816dc163d5df057c5e7f379d"></a>
-reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00061.html#abbbc24a5816dc163d5df057c5e7f379d">local</a> (bool &exists)</td></tr>
-<tr class="memdesc:abbbc24a5816dc163d5df057c5e7f379d"><td class="mdescLeft"> </td><td class="mdescRight">Returns reference to calling thread's local copy, creating one if necessary. <br/></td></tr>
-<tr class="separator:abbbc24a5816dc163d5df057c5e7f379d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4c33c5390783e17daf2b25d53ae919fb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c33c5390783e17daf2b25d53ae919fb"></a>
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00061.html#a4c33c5390783e17daf2b25d53ae919fb">size</a> () const </td></tr>
-<tr class="memdesc:a4c33c5390783e17daf2b25d53ae919fb"><td class="mdescLeft"> </td><td class="mdescRight">Get the number of local copies. <br/></td></tr>
-<tr class="separator:a4c33c5390783e17daf2b25d53ae919fb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:adfa4b2e13e47ab825dc40c4f195d2bc5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adfa4b2e13e47ab825dc40c4f195d2bc5"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00061.html#adfa4b2e13e47ab825dc40c4f195d2bc5">empty</a> () const </td></tr>
-<tr class="memdesc:adfa4b2e13e47ab825dc40c4f195d2bc5"><td class="mdescLeft"> </td><td class="mdescRight">true if there have been no local copies created <br/></td></tr>
-<tr class="separator:adfa4b2e13e47ab825dc40c4f195d2bc5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a070d26debf1f65c83de13f64f91aefdc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a070d26debf1f65c83de13f64f91aefdc"></a>
-iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00061.html#a070d26debf1f65c83de13f64f91aefdc">begin</a> ()</td></tr>
-<tr class="memdesc:a070d26debf1f65c83de13f64f91aefdc"><td class="mdescLeft"> </td><td class="mdescRight">begin iterator <br/></td></tr>
-<tr class="separator:a070d26debf1f65c83de13f64f91aefdc"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad225e2e8a968b131bf05d72f5686b924"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad225e2e8a968b131bf05d72f5686b924"></a>
-iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00061.html#ad225e2e8a968b131bf05d72f5686b924">end</a> ()</td></tr>
-<tr class="memdesc:ad225e2e8a968b131bf05d72f5686b924"><td class="mdescLeft"> </td><td class="mdescRight">end iterator <br/></td></tr>
-<tr class="separator:ad225e2e8a968b131bf05d72f5686b924"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa097383eb6f90e4a551830fc00b60b3a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa097383eb6f90e4a551830fc00b60b3a"></a>
-const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00061.html#aa097383eb6f90e4a551830fc00b60b3a">begin</a> () const </td></tr>
-<tr class="memdesc:aa097383eb6f90e4a551830fc00b60b3a"><td class="mdescLeft"> </td><td class="mdescRight">begin const iterator <br/></td></tr>
-<tr class="separator:aa097383eb6f90e4a551830fc00b60b3a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5ed0248f10a7aa5045d2cda77dad9588"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5ed0248f10a7aa5045d2cda77dad9588"></a>
-const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00061.html#a5ed0248f10a7aa5045d2cda77dad9588">end</a> () const </td></tr>
-<tr class="memdesc:a5ed0248f10a7aa5045d2cda77dad9588"><td class="mdescLeft"> </td><td class="mdescRight">end const iterator <br/></td></tr>
-<tr class="separator:a5ed0248f10a7aa5045d2cda77dad9588"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac94dd896ed78df240da4a450defbca6c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac94dd896ed78df240da4a450defbca6c"></a>
-range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00061.html#ac94dd896ed78df240da4a450defbca6c">range</a> (size_t grainsize=1)</td></tr>
-<tr class="memdesc:ac94dd896ed78df240da4a450defbca6c"><td class="mdescLeft"> </td><td class="mdescRight">Get range for parallel algorithms. <br/></td></tr>
-<tr class="separator:ac94dd896ed78df240da4a450defbca6c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a25b9153dfe994c8122a7f0227cffe793"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a25b9153dfe994c8122a7f0227cffe793"></a>
-const_range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00061.html#a25b9153dfe994c8122a7f0227cffe793">range</a> (size_t grainsize=1) const </td></tr>
-<tr class="memdesc:a25b9153dfe994c8122a7f0227cffe793"><td class="mdescLeft"> </td><td class="mdescRight">Get const range for parallel algorithms. <br/></td></tr>
-<tr class="separator:a25b9153dfe994c8122a7f0227cffe793"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a85a0d8f088ef1ee07aeb2c0e944a4a5e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a85a0d8f088ef1ee07aeb2c0e944a4a5e"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00061.html#a85a0d8f088ef1ee07aeb2c0e944a4a5e">clear</a> ()</td></tr>
-<tr class="memdesc:a85a0d8f088ef1ee07aeb2c0e944a4a5e"><td class="mdescLeft"> </td><td class="mdescRight">Destroys local copies. <br/></td></tr>
-<tr class="separator:a85a0d8f088ef1ee07aeb2c0e944a4a5e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a15960d5f730ea183a581730e912700c8"><td class="memTemplParams" colspan="2"><a class="anchor" id="a15960d5f730ea183a581730e912700c8"></a>
-template<typename Alloc , ets_key_usage_type Cachetype> </td></tr>
-<tr class="memitem:a15960d5f730ea183a581730e912700c8"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>enumerable_thread_specific</b> (const <a class="el" href="a00061.html">enumerable_thread_specific</a>< T, Alloc, Cachetype > &other)</td></tr>
-<tr class="separator:a15960d5f730ea183a581730e912700c8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6b614f913497b8dc168a8e6ea03eac48"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6b614f913497b8dc168a8e6ea03eac48"></a>
- </td><td class="memItemRight" valign="bottom"><b>enumerable_thread_specific</b> (const <a class="el" href="a00061.html">enumerable_thread_specific</a> &other)</td></tr>
-<tr class="separator:a6b614f913497b8dc168a8e6ea03eac48"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7af8784cd0d0f04b3f9f50988b8f0885"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7af8784cd0d0f04b3f9f50988b8f0885"></a>
-<a class="el" href="a00061.html">enumerable_thread_specific</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00061.html">enumerable_thread_specific</a> &other)</td></tr>
-<tr class="separator:a7af8784cd0d0f04b3f9f50988b8f0885"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5e2cfddffa47dd0eb042cf6cbcea815f"><td class="memTemplParams" colspan="2"><a class="anchor" id="a5e2cfddffa47dd0eb042cf6cbcea815f"></a>
-template<typename Alloc , ets_key_usage_type Cachetype> </td></tr>
-<tr class="memitem:a5e2cfddffa47dd0eb042cf6cbcea815f"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="a00061.html">enumerable_thread_specific</a> & </td><td class="memTemplItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00061.html">enumerable_thread_specific</a>< T, Alloc, Cachetype > &other)</td></tr>
-<tr class="separator:a5e2cfddffa47dd0eb042cf6cbcea815f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7ab62b7fd2aeeb12e1a3b93c9ce99f27"><td class="memTemplParams" colspan="2"><a class="anchor" id="a7ab62b7fd2aeeb12e1a3b93c9ce99f27"></a>
-template<typename combine_func_t > </td></tr>
-<tr class="memitem:a7ab62b7fd2aeeb12e1a3b93c9ce99f27"><td class="memTemplItemLeft" align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>combine</b> (combine_func_t f_combine)</td></tr>
-<tr class="separator:a7ab62b7fd2aeeb12e1a3b93c9ce99f27"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae644ea36b776fdc698d87a60ef4a3179"><td class="memTemplParams" colspan="2"><a class="anchor" id="ae644ea36b776fdc698d87a60ef4a3179"></a>
-template<typename combine_func_t > </td></tr>
-<tr class="memitem:ae644ea36b776fdc698d87a60ef4a3179"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>combine_each</b> (combine_func_t f_combine)</td></tr>
-<tr class="separator:ae644ea36b776fdc698d87a60ef4a3179"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:a408a399f5d1ceaf6d0adc9451932a96a"><td class="memTemplParams" colspan="2"><a class="anchor" id="a408a399f5d1ceaf6d0adc9451932a96a"></a>
-template<typename U , typename A , ets_key_usage_type C> </td></tr>
-<tr class="memitem:a408a399f5d1ceaf6d0adc9451932a96a"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>enumerable_thread_specific</b></td></tr>
-<tr class="separator:a408a399f5d1ceaf6d0adc9451932a96a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:add2b3159a444aad51e3cf7ffe4d1d636"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add2b3159a444aad51e3cf7ffe4d1d636"></a>
+static bool </td><td class="memItemRight" valign="bottom"><b>is_final_scan</b> ()</td></tr>
+<tr class="separator:add2b3159a444aad51e3cf7ffe4d1d636"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename T, typename Allocator, ets_key_usage_type ETS_key_type><br/>
-class tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></h3>
-
-<p>The <a class="el" href="a00061.html" title="The enumerable_thread_specific container. ">enumerable_thread_specific</a> container. </p>
-<pre class="fragment">enumerable_thread_specific has the following properties:
-- thread-local copies are lazily created, with default, exemplar or function initialization.
-- thread-local copies do not move (during lifetime, and excepting clear()) so the address of a copy is invariant.
-- the contained objects need not have operator=() defined if combine is not used.
-- enumerable_thread_specific containers may be copy-constructed or assigned.
-- thread-local copies can be managed by hash-table, or can be accessed via TLS storage for speed.
-- outside of parallel contexts, the contents of all thread-local copies are accessible by iterator or using combine or combine_each methods
-</pre><dl class="section user"><dt>Segmented iterator</dt><dd>When the thread-local objects are containers with input_iterators defined, a segmented iterator may be used to iterate over all the elements of all thread-local copies.</dd></dl>
-<dl class="section user"><dt>combine and combine_each</dt><dd><ul>
-<li>Both methods are defined for <a class="el" href="a00061.html" title="The enumerable_thread_specific container. ">enumerable_thread_specific</a>.</li>
-<li>combine() requires the type T have operator=() defined.</li>
-<li>neither method modifies the contents of the object (though there is no guarantee that the applied methods do not modify the object.)</li>
-<li>Both are evaluated in serial context (the methods are assumed to be non-benign.) </li>
-</ul>
-</dd></dl>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>enumerable_thread_specific.h</li>
+<div class="textblock"><p>Used to indicate that the final scan is being performed. </p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>parallel_scan.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00061.png b/doc/html/a00061.png
deleted file mode 100644
index fba36b8..0000000
Binary files a/doc/html/a00061.png and /dev/null differ
diff --git a/doc/html/a00062.html b/doc/html/a00062.html
index 679c993..d8ce8d6 100644
--- a/doc/html/a00062.html
+++ b/doc/html/a00062.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::filter Class Reference</title>
+<title>tbb::interface6::fixed_pool Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,111 +33,44 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00062.html">filter</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00062.html">fixed_pool</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pro-static-attribs">Static Protected Attributes</a> |
-<a href="a00289.html">List of all members</a>  </div>
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="a00385.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::filter Class Reference<div class="ingroups"><a class="el" href="a00255.html">Algorithms</a></div></div>  </div>
+<div class="title">tbb::interface6::fixed_pool Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>A stage in a pipeline.  
- <a href="a00062.html#details">More...</a></p>
-
-<p><code>#include <pipeline.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::filter:</div>
+Inheritance diagram for tbb::interface6::fixed_pool:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00062.png" usemap="#tbb::filter_map" alt=""/>
-  <map id="tbb::filter_map" name="tbb::filter_map">
-<area href="a00165.html" title="A stage in a pipeline served by a user thread. " alt="tbb::thread_bound_filter" shape="rect" coords="0,112,145,136"/>
+  <img src="a00062.png" usemap="#tbb::interface6::fixed_pool_map" alt=""/>
+  <map id="tbb::interface6::fixed_pool_map" name="tbb::interface6::fixed_pool_map">
 </map>
  </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-static-attribs"></a>
-Static Protected Attributes</h2></td></tr>
-<tr class="memitem:ae9dab2e01b0963b341ab04b59eec1475"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae9dab2e01b0963b341ab04b59eec1475"></a>
-static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00062.html#ae9dab2e01b0963b341ab04b59eec1475">filter_is_serial</a> = 0x1</td></tr>
-<tr class="memdesc:ae9dab2e01b0963b341ab04b59eec1475"><td class="mdescLeft"> </td><td class="mdescRight">The lowest bit 0 is for parallel vs. serial. <br/></td></tr>
-<tr class="separator:ae9dab2e01b0963b341ab04b59eec1475"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a091fcf6abc79edfa5c8bf01f742e2392"><td class="memItemLeft" align="right" valign="top">static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00062.html#a091fcf6abc79edfa5c8bf01f742e2392">filter_is_out_of_order</a> = 0x1<<4</td></tr>
-<tr class="memdesc:a091fcf6abc79edfa5c8bf01f742e2392"><td class="mdescLeft"> </td><td class="mdescRight">4th bit distinguishes ordered vs unordered filters.  <a href="#a091fcf6abc79edfa5c8bf01f742e2392">More...</a><br/></td></tr>
-<tr class="separator:a091fcf6abc79edfa5c8bf01f742e2392"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1382f216bd094064a18eb48ecc43c86b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1382f216bd094064a18eb48ecc43c86b"></a>
-static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00062.html#a1382f216bd094064a18eb48ecc43c86b">filter_is_bound</a> = 0x1<<5</td></tr>
-<tr class="memdesc:a1382f216bd094064a18eb48ecc43c86b"><td class="mdescLeft"> </td><td class="mdescRight">5th bit distinguishes thread-bound and regular filters. <br/></td></tr>
-<tr class="separator:a1382f216bd094064a18eb48ecc43c86b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6645ec56872b6ba2056dcaa467e292f7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6645ec56872b6ba2056dcaa467e292f7"></a>
-static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00062.html#a6645ec56872b6ba2056dcaa467e292f7">filter_may_emit_null</a> = 0x1<<6</td></tr>
-<tr class="memdesc:a6645ec56872b6ba2056dcaa467e292f7"><td class="mdescLeft"> </td><td class="mdescRight">6th bit marks input filters emitting small objects <br/></td></tr>
-<tr class="separator:a6645ec56872b6ba2056dcaa467e292f7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aab9689e23a96c6c9bf1c8caae74d92ee"><td class="memItemLeft" align="right" valign="top">static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00062.html#aab9689e23a96c6c9bf1c8caae74d92ee">exact_exception_propagation</a></td></tr>
-<tr class="memdesc:aab9689e23a96c6c9bf1c8caae74d92ee"><td class="mdescLeft"> </td><td class="mdescRight">7th bit defines exception propagation mode expected by the application.  <a href="#aab9689e23a96c6c9bf1c8caae74d92ee">More...</a><br/></td></tr>
-<tr class="separator:aab9689e23a96c6c9bf1c8caae74d92ee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:aa3811fe3d437ba2eefa926d52732491a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa3811fe3d437ba2eefa926d52732491a"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00062.html#aa3811fe3d437ba2eefa926d52732491a">fixed_pool</a> (void *buf, size_t size)</td></tr>
+<tr class="memdesc:aa3811fe3d437ba2eefa926d52732491a"><td class="mdescLeft"> </td><td class="mdescRight">construct pool with underlying allocator <br/></td></tr>
+<tr class="separator:aa3811fe3d437ba2eefa926d52732491a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab854a85575e5c1e9c9f4d3eafcc28044"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab854a85575e5c1e9c9f4d3eafcc28044"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00062.html#ab854a85575e5c1e9c9f4d3eafcc28044">~fixed_pool</a> ()</td></tr>
+<tr class="memdesc:ab854a85575e5c1e9c9f4d3eafcc28044"><td class="mdescLeft"> </td><td class="mdescRight">destroy pool <br/></td></tr>
+<tr class="separator:ab854a85575e5c1e9c9f4d3eafcc28044"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>A stage in a pipeline. </p>
-</div><h2 class="groupheader">Member Data Documentation</h2>
-<a class="anchor" id="aab9689e23a96c6c9bf1c8caae74d92ee"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">const unsigned char tbb::filter::exact_exception_propagation</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<b>Initial value:</b><div class="fragment"><div class="line">=</div>
-<div class="line"><span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span></div>
-<div class="line"><span class="preprocessor">            0x0</span></div>
-</div><!-- fragment -->
-<p>7th bit defines exception propagation mode expected by the application. </p>
-
-</div>
-</div>
-<a class="anchor" id="a091fcf6abc79edfa5c8bf01f742e2392"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">const unsigned char tbb::filter::filter_is_out_of_order = 0x1<<4</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>4th bit distinguishes ordered vs unordered filters. </p>
-<p>The bit was not set for parallel filters in TBB 2.1 and earlier, but is_ordered() function always treats parallel filters as out of order. </p>
-
-</div>
-</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>pipeline.h</li>
+<li><a class="el" href="a00193.html">memory_pool.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00062.png b/doc/html/a00062.png
index a4923e5..8cf0f93 100644
Binary files a/doc/html/a00062.png and b/doc/html/a00062.png differ
diff --git a/doc/html/a00063.html b/doc/html/a00063.html
index 768fe74..881d42f 100644
--- a/doc/html/a00063.html
+++ b/doc/html/a00063.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface6::filter_t< T, U > Class Template Reference</title>
+<title>tbb::interface6::flattened2d< Container > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,67 +33,90 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00063.html">filter_t</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00063.html">flattened2d</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#friends">Friends</a> |
-<a href="a00401.html">List of all members</a>  </div>
+<a href="a00379.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface6::filter_t< T, U > Class Template Reference</div>  </div>
+<div class="title">tbb::interface6::flattened2d< Container > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Class representing a chain of type-safe pipeline filters.  
- <a href="a00063.html#details">More...</a></p>
-
-<p><code>#include <pipeline.h></code></p>
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a8b84f8f2cc4499f49d17141eaedc99c0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8b84f8f2cc4499f49d17141eaedc99c0"></a>
+typedef conval_type::size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00063.html#a8b84f8f2cc4499f49d17141eaedc99c0">size_type</a></td></tr>
+<tr class="memdesc:a8b84f8f2cc4499f49d17141eaedc99c0"><td class="mdescLeft"> </td><td class="mdescRight">Basic types. <br/></td></tr>
+<tr class="separator:a8b84f8f2cc4499f49d17141eaedc99c0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab0352636ee7434478866739224852d32"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab0352636ee7434478866739224852d32"></a>
+typedef <br class="typebreak"/>
+conval_type::difference_type </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
+<tr class="separator:ab0352636ee7434478866739224852d32"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a426e0eab82833206df0dc36648419647"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a426e0eab82833206df0dc36648419647"></a>
+typedef conval_type::allocator_type </td><td class="memItemRight" valign="bottom"><b>allocator_type</b></td></tr>
+<tr class="separator:a426e0eab82833206df0dc36648419647"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7070453b83df5930615d4307eb2f38b5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7070453b83df5930615d4307eb2f38b5"></a>
+typedef conval_type::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+<tr class="separator:a7070453b83df5930615d4307eb2f38b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a92b8ef6b07970e3f973b3ece9d2a6201"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a92b8ef6b07970e3f973b3ece9d2a6201"></a>
+typedef conval_type::reference </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+<tr class="separator:a92b8ef6b07970e3f973b3ece9d2a6201"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9715dae5bf107ca3530a8c5bea12739c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9715dae5bf107ca3530a8c5bea12739c"></a>
+typedef <br class="typebreak"/>
+conval_type::const_reference </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
+<tr class="separator:a9715dae5bf107ca3530a8c5bea12739c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a14285cc70108c2f0bc417bb034484a0b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a14285cc70108c2f0bc417bb034484a0b"></a>
+typedef conval_type::pointer </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+<tr class="separator:a14285cc70108c2f0bc417bb034484a0b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4f67e5e005e394746b4c6d54a5c2748c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4f67e5e005e394746b4c6d54a5c2748c"></a>
+typedef conval_type::const_pointer </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+<tr class="separator:a4f67e5e005e394746b4c6d54a5c2748c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a14b3602cf1c408c89015d7bf6bf59072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a14b3602cf1c408c89015d7bf6bf59072"></a>
+typedef <br class="typebreak"/>
+internal::segmented_iterator<br class="typebreak"/>
+< Container, value_type > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+<tr class="separator:a14b3602cf1c408c89015d7bf6bf59072"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a295c0b8755120359595a1b1f7447bbc8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a295c0b8755120359595a1b1f7447bbc8"></a>
+typedef <br class="typebreak"/>
+internal::segmented_iterator<br class="typebreak"/>
+< Container, const value_type > </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
+<tr class="separator:a295c0b8755120359595a1b1f7447bbc8"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a291e76dc7ae92a66109a102904836b62"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a291e76dc7ae92a66109a102904836b62"></a>
- </td><td class="memItemRight" valign="bottom"><b>filter_t</b> (const <a class="el" href="a00063.html">filter_t</a>< T, U > &rhs)</td></tr>
-<tr class="separator:a291e76dc7ae92a66109a102904836b62"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a86c29832da3f4941254b8dce9e1ff6f0"><td class="memTemplParams" colspan="2"><a class="anchor" id="a86c29832da3f4941254b8dce9e1ff6f0"></a>
-template<typename Body > </td></tr>
-<tr class="memitem:a86c29832da3f4941254b8dce9e1ff6f0"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>filter_t</b> (tbb::filter::mode mode, const Body &body)</td></tr>
-<tr class="separator:a86c29832da3f4941254b8dce9e1ff6f0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae765b59c54ca11f9cdb9f7f2c6c3bd68"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae765b59c54ca11f9cdb9f7f2c6c3bd68"></a>
-void </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00063.html">filter_t</a>< T, U > &rhs)</td></tr>
-<tr class="separator:ae765b59c54ca11f9cdb9f7f2c6c3bd68"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a445602c2d364b5bbcd8cc9e0b7f37376"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a445602c2d364b5bbcd8cc9e0b7f37376"></a>
-void </td><td class="memItemRight" valign="bottom"><b>clear</b> ()</td></tr>
-<tr class="separator:a445602c2d364b5bbcd8cc9e0b7f37376"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:a49b422a3c97d5dc848d177246de4c149"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a49b422a3c97d5dc848d177246de4c149"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::pipeline_proxy</b></td></tr>
-<tr class="separator:a49b422a3c97d5dc848d177246de4c149"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a21460fde704da22caa222778f5abb140"><td class="memTemplParams" colspan="2"><a class="anchor" id="a21460fde704da22caa222778f5abb140"></a>
-template<typename T_ , typename U_ , typename Body > </td></tr>
-<tr class="memitem:a21460fde704da22caa222778f5abb140"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="a00063.html">filter_t</a>< T_, U_ > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00063.html#a21460fde704da22caa222778f5abb140">make_filter</a> (tbb::filter::mode, const Body &)</td></tr>
-<tr class="memdesc:a21460fde704da22caa222778f5abb140"><td class="mdescLeft"> </td><td class="mdescRight">Create a filter to participate in parallel_pipeline. <br/></td></tr>
-<tr class="separator:a21460fde704da22caa222778f5abb140"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa80730e1b71fa4266ca0d1dc12da6caa"><td class="memTemplParams" colspan="2"><a class="anchor" id="aa80730e1b71fa4266ca0d1dc12da6caa"></a>
-template<typename T_ , typename V_ , typename U_ > </td></tr>
-<tr class="memitem:aa80730e1b71fa4266ca0d1dc12da6caa"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="a00063.html">filter_t</a>< T_, U_ > </td><td class="memTemplItemRight" valign="bottom"><b>operator&</b> (const <a class="el" href="a00063.html">filter_t</a>< T_, V_ > &, const <a class="el" href="a00063.html">filter_t</a>< V_, U_ > &)</td></tr>
-<tr class="separator:aa80730e1b71fa4266ca0d1dc12da6caa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a96d4bef4d78e9e04f43a4ce0855f2ec7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a96d4bef4d78e9e04f43a4ce0855f2ec7"></a>
+ </td><td class="memItemRight" valign="bottom"><b>flattened2d</b> (const Container &c, typename Container::const_iterator b, typename Container::const_iterator e)</td></tr>
+<tr class="separator:a96d4bef4d78e9e04f43a4ce0855f2ec7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abcc3a2e4b1eae8ef6ee1dfba8b030680"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abcc3a2e4b1eae8ef6ee1dfba8b030680"></a>
+ </td><td class="memItemRight" valign="bottom"><b>flattened2d</b> (const Container &c)</td></tr>
+<tr class="separator:abcc3a2e4b1eae8ef6ee1dfba8b030680"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a783ca9408f58ca7f5df00bc1035ff6b2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a783ca9408f58ca7f5df00bc1035ff6b2"></a>
+iterator </td><td class="memItemRight" valign="bottom"><b>begin</b> ()</td></tr>
+<tr class="separator:a783ca9408f58ca7f5df00bc1035ff6b2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab722e1c2b58641d516cb98b0360b9734"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab722e1c2b58641d516cb98b0360b9734"></a>
+iterator </td><td class="memItemRight" valign="bottom"><b>end</b> ()</td></tr>
+<tr class="separator:ab722e1c2b58641d516cb98b0360b9734"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf0c0dff2b7b8530f06e6aa22b9a79ea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf0c0dff2b7b8530f06e6aa22b9a79ea"></a>
+const_iterator </td><td class="memItemRight" valign="bottom"><b>begin</b> () const </td></tr>
+<tr class="separator:acf0c0dff2b7b8530f06e6aa22b9a79ea"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5b79fe79b6939327ab74628283974226"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b79fe79b6939327ab74628283974226"></a>
+const_iterator </td><td class="memItemRight" valign="bottom"><b>end</b> () const </td></tr>
+<tr class="separator:a5b79fe79b6939327ab74628283974226"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ade48bc8ab723d06790e5d98365e8a4f5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ade48bc8ab723d06790e5d98365e8a4f5"></a>
+<a class="el" href="a00063.html#a8b84f8f2cc4499f49d17141eaedc99c0">size_type</a> </td><td class="memItemRight" valign="bottom"><b>size</b> () const </td></tr>
+<tr class="separator:ade48bc8ab723d06790e5d98365e8a4f5"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename T, typename U><br/>
-class tbb::interface6::filter_t< T, U ></h3>
-
-<p>Class representing a chain of type-safe pipeline filters. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>pipeline.h</li>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>enumerable_thread_specific.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00064.html b/doc/html/a00064.html
index 772d407..06f9891 100644
--- a/doc/html/a00064.html
+++ b/doc/html/a00064.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::final_scan_tag Struct Reference</title>
+<title>tbb::interface6::flow_control Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,38 +33,46 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00064.html">final_scan_tag</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00064.html">flow_control</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-static-methods">Static Public Member Functions</a> |
-<a href="a00287.html">List of all members</a>  </div>
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#friends">Friends</a> |
+<a href="a00386.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::final_scan_tag Struct Reference<div class="ingroups"><a class="el" href="a00255.html">Algorithms</a></div></div>  </div>
+<div class="title">tbb::interface6::flow_control Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>Used to indicate that the final scan is being performed.  
+<p>input_filter control to signal end-of-input for parallel_pipeline  
  <a href="a00064.html#details">More...</a></p>
 
-<p><code>#include <parallel_scan.h></code></p>
+<p><code>#include <pipeline.h></code></p>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
-Static Public Member Functions</h2></td></tr>
-<tr class="memitem:add2b3159a444aad51e3cf7ffe4d1d636"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add2b3159a444aad51e3cf7ffe4d1d636"></a>
-static bool </td><td class="memItemRight" valign="bottom"><b>is_final_scan</b> ()</td></tr>
-<tr class="separator:add2b3159a444aad51e3cf7ffe4d1d636"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a21a61b812ca97a6eb5549dab4b4ae490"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a21a61b812ca97a6eb5549dab4b4ae490"></a>
+void </td><td class="memItemRight" valign="bottom"><b>stop</b> ()</td></tr>
+<tr class="separator:a21a61b812ca97a6eb5549dab4b4ae490"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:ae4743f434cefacb6650e3e736daf9392"><td class="memTemplParams" colspan="2"><a class="anchor" id="ae4743f434cefacb6650e3e736daf9392"></a>
+template<typename T , typename U , typename Body > </td></tr>
+<tr class="memitem:ae4743f434cefacb6650e3e736daf9392"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::concrete_filter</b></td></tr>
+<tr class="separator:ae4743f434cefacb6650e3e736daf9392"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Used to indicate that the final scan is being performed. </p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>parallel_scan.h</li>
+<div class="textblock"><p>input_filter control to signal end-of-input for parallel_pipeline </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>pipeline.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00065.html b/doc/html/a00065.html
index 252a6ed..ee79526 100644
--- a/doc/html/a00065.html
+++ b/doc/html/a00065.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface6::fixed_pool Class Reference</title>
+<title>tbb::flow::interface9::gfx_async_msg< T > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,44 +33,58 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00065.html">fixed_pool</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00065.html">gfx_async_msg</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00399.html">List of all members</a>  </div>
+<a href="a00349.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface6::fixed_pool Class Reference</div>  </div>
+<div class="title">tbb::flow::interface9::gfx_async_msg< T > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 <div class="dynheader">
-Inheritance diagram for tbb::interface6::fixed_pool:</div>
+Inheritance diagram for tbb::flow::interface9::gfx_async_msg< T >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00065.png" usemap="#tbb::interface6::fixed_pool_map" alt=""/>
-  <map id="tbb::interface6::fixed_pool_map" name="tbb::interface6::fixed_pool_map">
+  <img src="a00065.png" usemap="#tbb::flow::interface9::gfx_async_msg< T >_map" alt=""/>
+  <map id="tbb::flow::interface9::gfx_async_msg< T >_map" name="tbb::flow::interface9::gfx_async_msg< T >_map">
 </map>
  </div></div>
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a98cc30d2957b8a1a571d237d733d6ae4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a98cc30d2957b8a1a571d237d733d6ae4"></a>
+typedef gfx_offload::task_id_type </td><td class="memItemRight" valign="bottom"><b>kernel_id_type</b></td></tr>
+<tr class="separator:a98cc30d2957b8a1a571d237d733d6ae4"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:aa3811fe3d437ba2eefa926d52732491a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa3811fe3d437ba2eefa926d52732491a"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00065.html#aa3811fe3d437ba2eefa926d52732491a">fixed_pool</a> (void *buf, size_t size)</td></tr>
-<tr class="memdesc:aa3811fe3d437ba2eefa926d52732491a"><td class="mdescLeft"> </td><td class="mdescRight">construct pool with underlying allocator <br/></td></tr>
-<tr class="separator:aa3811fe3d437ba2eefa926d52732491a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab854a85575e5c1e9c9f4d3eafcc28044"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab854a85575e5c1e9c9f4d3eafcc28044"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00065.html#ab854a85575e5c1e9c9f4d3eafcc28044">~fixed_pool</a> ()</td></tr>
-<tr class="memdesc:ab854a85575e5c1e9c9f4d3eafcc28044"><td class="mdescLeft"> </td><td class="mdescRight">destroy pool <br/></td></tr>
-<tr class="separator:ab854a85575e5c1e9c9f4d3eafcc28044"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab32f15e9fc934c2e9bd7ea6766d0c5dd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab32f15e9fc934c2e9bd7ea6766d0c5dd"></a>
+ </td><td class="memItemRight" valign="bottom"><b>gfx_async_msg</b> (const T &input_data)</td></tr>
+<tr class="separator:ab32f15e9fc934c2e9bd7ea6766d0c5dd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af8a27be7f50b5e6f5a43485d9212c87b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af8a27be7f50b5e6f5a43485d9212c87b"></a>
+T & </td><td class="memItemRight" valign="bottom"><b>data</b> ()</td></tr>
+<tr class="separator:af8a27be7f50b5e6f5a43485d9212c87b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad1af996a1c91b974832c98fe7c88022a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad1af996a1c91b974832c98fe7c88022a"></a>
+const T & </td><td class="memItemRight" valign="bottom"><b>data</b> () const </td></tr>
+<tr class="separator:ad1af996a1c91b974832c98fe7c88022a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a93093df4f22379a96ec253fc22db1b42"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a93093df4f22379a96ec253fc22db1b42"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_task_id</b> (kernel_id_type id)</td></tr>
+<tr class="separator:a93093df4f22379a96ec253fc22db1b42"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a28a3c2a0b608b2dbc1cc012361c72357"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28a3c2a0b608b2dbc1cc012361c72357"></a>
+kernel_id_type </td><td class="memItemRight" valign="bottom"><b>task_id</b> () const </td></tr>
+<tr class="separator:a28a3c2a0b608b2dbc1cc012361c72357"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00198.html">memory_pool.h</a></li>
+<li>gfx_factory.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00065.png b/doc/html/a00065.png
index 8cf0f93..6a00083 100644
Binary files a/doc/html/a00065.png and b/doc/html/a00065.png differ
diff --git a/doc/html/a00066.html b/doc/html/a00066.html
index 0f3cccf..20b09dc 100644
--- a/doc/html/a00066.html
+++ b/doc/html/a00066.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface6::flattened2d< Container > Class Template Reference</title>
+<title>tbb::flow::interface9::gfx_buffer< T > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,90 +33,72 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00066.html">flattened2d</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00066.html">gfx_buffer</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00393.html">List of all members</a>  </div>
+<a href="a00348.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface6::flattened2d< Container > Class Template Reference</div>  </div>
+<div class="title">tbb::flow::interface9::gfx_buffer< T > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:a8b84f8f2cc4499f49d17141eaedc99c0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8b84f8f2cc4499f49d17141eaedc99c0"></a>
-typedef conval_type::size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00066.html#a8b84f8f2cc4499f49d17141eaedc99c0">size_type</a></td></tr>
-<tr class="memdesc:a8b84f8f2cc4499f49d17141eaedc99c0"><td class="mdescLeft"> </td><td class="mdescRight">Basic types. <br/></td></tr>
-<tr class="separator:a8b84f8f2cc4499f49d17141eaedc99c0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab0352636ee7434478866739224852d32"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab0352636ee7434478866739224852d32"></a>
-typedef <br class="typebreak"/>
-conval_type::difference_type </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
-<tr class="separator:ab0352636ee7434478866739224852d32"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a426e0eab82833206df0dc36648419647"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a426e0eab82833206df0dc36648419647"></a>
-typedef conval_type::allocator_type </td><td class="memItemRight" valign="bottom"><b>allocator_type</b></td></tr>
-<tr class="separator:a426e0eab82833206df0dc36648419647"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7070453b83df5930615d4307eb2f38b5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7070453b83df5930615d4307eb2f38b5"></a>
-typedef conval_type::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-<tr class="separator:a7070453b83df5930615d4307eb2f38b5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a92b8ef6b07970e3f973b3ece9d2a6201"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a92b8ef6b07970e3f973b3ece9d2a6201"></a>
-typedef conval_type::reference </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
-<tr class="separator:a92b8ef6b07970e3f973b3ece9d2a6201"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9715dae5bf107ca3530a8c5bea12739c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9715dae5bf107ca3530a8c5bea12739c"></a>
-typedef <br class="typebreak"/>
-conval_type::const_reference </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
-<tr class="separator:a9715dae5bf107ca3530a8c5bea12739c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a14285cc70108c2f0bc417bb034484a0b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a14285cc70108c2f0bc417bb034484a0b"></a>
-typedef conval_type::pointer </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-<tr class="separator:a14285cc70108c2f0bc417bb034484a0b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4f67e5e005e394746b4c6d54a5c2748c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4f67e5e005e394746b4c6d54a5c2748c"></a>
-typedef conval_type::const_pointer </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-<tr class="separator:a4f67e5e005e394746b4c6d54a5c2748c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a14b3602cf1c408c89015d7bf6bf59072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a14b3602cf1c408c89015d7bf6bf59072"></a>
-typedef <br class="typebreak"/>
-internal::segmented_iterator<br class="typebreak"/>
-< Container, value_type > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
-<tr class="separator:a14b3602cf1c408c89015d7bf6bf59072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a295c0b8755120359595a1b1f7447bbc8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a295c0b8755120359595a1b1f7447bbc8"></a>
-typedef <br class="typebreak"/>
-internal::segmented_iterator<br class="typebreak"/>
-< Container, const value_type > </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
-<tr class="separator:a295c0b8755120359595a1b1f7447bbc8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a201b594a833fcd334ca256d6fbbceaa2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a201b594a833fcd334ca256d6fbbceaa2"></a>
+typedef std::vector< T >::iterator </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+<tr class="separator:a201b594a833fcd334ca256d6fbbceaa2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac35ff3055f507c9de417f1be90b801bf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac35ff3055f507c9de417f1be90b801bf"></a>
+typedef std::vector< T ><br class="typebreak"/>
+::const_iterator </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
+<tr class="separator:ac35ff3055f507c9de417f1be90b801bf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a458b3a7e4674b4f70405049bce00939c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a458b3a7e4674b4f70405049bce00939c"></a>
+typedef std::size_t </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
+<tr class="separator:a458b3a7e4674b4f70405049bce00939c"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a96d4bef4d78e9e04f43a4ce0855f2ec7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a96d4bef4d78e9e04f43a4ce0855f2ec7"></a>
- </td><td class="memItemRight" valign="bottom"><b>flattened2d</b> (const Container &c, typename Container::const_iterator b, typename Container::const_iterator e)</td></tr>
-<tr class="separator:a96d4bef4d78e9e04f43a4ce0855f2ec7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abcc3a2e4b1eae8ef6ee1dfba8b030680"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abcc3a2e4b1eae8ef6ee1dfba8b030680"></a>
- </td><td class="memItemRight" valign="bottom"><b>flattened2d</b> (const Container &c)</td></tr>
-<tr class="separator:abcc3a2e4b1eae8ef6ee1dfba8b030680"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a783ca9408f58ca7f5df00bc1035ff6b2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a783ca9408f58ca7f5df00bc1035ff6b2"></a>
+<tr class="memitem:a008bcf0693109dcd376871bcff0378bd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a008bcf0693109dcd376871bcff0378bd"></a>
+ </td><td class="memItemRight" valign="bottom"><b>gfx_buffer</b> (size_type size)</td></tr>
+<tr class="separator:a008bcf0693109dcd376871bcff0378bd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a919ae73a47d2ef2809fb65e10c9e0145"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a919ae73a47d2ef2809fb65e10c9e0145"></a>
+T * </td><td class="memItemRight" valign="bottom"><b>data</b> ()</td></tr>
+<tr class="separator:a919ae73a47d2ef2809fb65e10c9e0145"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a17627787221944d6cc7154a2863582b2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a17627787221944d6cc7154a2863582b2"></a>
+const T * </td><td class="memItemRight" valign="bottom"><b>data</b> () const </td></tr>
+<tr class="separator:a17627787221944d6cc7154a2863582b2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad7dd0d1242b09bd3532cc8953f8551d1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad7dd0d1242b09bd3532cc8953f8551d1"></a>
+size_type </td><td class="memItemRight" valign="bottom"><b>size</b> () const </td></tr>
+<tr class="separator:ad7dd0d1242b09bd3532cc8953f8551d1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae3b0ac3d0426f0492806b2031e561352"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae3b0ac3d0426f0492806b2031e561352"></a>
+const_iterator </td><td class="memItemRight" valign="bottom"><b>cbegin</b> () const </td></tr>
+<tr class="separator:ae3b0ac3d0426f0492806b2031e561352"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a11a2e545a8538312360d69d95ff07269"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a11a2e545a8538312360d69d95ff07269"></a>
+const_iterator </td><td class="memItemRight" valign="bottom"><b>cend</b> () const </td></tr>
+<tr class="separator:a11a2e545a8538312360d69d95ff07269"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3637182841db17a6e7a56d819ddb94d2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3637182841db17a6e7a56d819ddb94d2"></a>
 iterator </td><td class="memItemRight" valign="bottom"><b>begin</b> ()</td></tr>
-<tr class="separator:a783ca9408f58ca7f5df00bc1035ff6b2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab722e1c2b58641d516cb98b0360b9734"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab722e1c2b58641d516cb98b0360b9734"></a>
+<tr class="separator:a3637182841db17a6e7a56d819ddb94d2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a28b98e880f24b77243ac8c4c22b63177"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28b98e880f24b77243ac8c4c22b63177"></a>
 iterator </td><td class="memItemRight" valign="bottom"><b>end</b> ()</td></tr>
-<tr class="separator:ab722e1c2b58641d516cb98b0360b9734"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acf0c0dff2b7b8530f06e6aa22b9a79ea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf0c0dff2b7b8530f06e6aa22b9a79ea"></a>
-const_iterator </td><td class="memItemRight" valign="bottom"><b>begin</b> () const </td></tr>
-<tr class="separator:acf0c0dff2b7b8530f06e6aa22b9a79ea"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5b79fe79b6939327ab74628283974226"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b79fe79b6939327ab74628283974226"></a>
-const_iterator </td><td class="memItemRight" valign="bottom"><b>end</b> () const </td></tr>
-<tr class="separator:a5b79fe79b6939327ab74628283974226"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ade48bc8ab723d06790e5d98365e8a4f5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ade48bc8ab723d06790e5d98365e8a4f5"></a>
-<a class="el" href="a00066.html#a8b84f8f2cc4499f49d17141eaedc99c0">size_type</a> </td><td class="memItemRight" valign="bottom"><b>size</b> () const </td></tr>
-<tr class="separator:ade48bc8ab723d06790e5d98365e8a4f5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="separator:a28b98e880f24b77243ac8c4c22b63177"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a743acfba864a10b8dad3c119db735425"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a743acfba864a10b8dad3c119db735425"></a>
+T & </td><td class="memItemRight" valign="bottom"><b>operator[]</b> (size_type pos)</td></tr>
+<tr class="separator:a743acfba864a10b8dad3c119db735425"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2146f49b0d2f5d87b7b6721babcd42e6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2146f49b0d2f5d87b7b6721babcd42e6"></a>
+const T & </td><td class="memItemRight" valign="bottom"><b>operator[]</b> (size_type pos) const </td></tr>
+<tr class="separator:a2146f49b0d2f5d87b7b6721babcd42e6"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>enumerable_thread_specific.h</li>
+<li>gfx_factory.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00067.html b/doc/html/a00067.html
index e2d9d0a..10079cc 100644
--- a/doc/html/a00067.html
+++ b/doc/html/a00067.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface6::flow_control Class Reference</title>
+<title>tbb::flow::interface9::gfx_factory Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,46 +33,65 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00067.html">flow_control</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00067.html">gfx_factory</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#friends">Friends</a> |
-<a href="a00400.html">List of all members</a>  </div>
+<a href="a00350.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface6::flow_control Class Reference</div>  </div>
+<div class="title">tbb::flow::interface9::gfx_factory Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>input_filter control to signal end-of-input for parallel_pipeline  
- <a href="a00067.html#details">More...</a></p>
-
-<p><code>#include <pipeline.h></code></p>
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00054.html">device_type</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00055.html">dummy_device_selector</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:ad7170d237ab8e643a73adbe258527eca"><td class="memTemplParams" colspan="2"><a class="anchor" id="ad7170d237ab8e643a73adbe258527eca"></a>
+template<typename T > </td></tr>
+<tr class="memitem:ad7170d237ab8e643a73adbe258527eca"><td class="memTemplItemLeft" align="right" valign="top">using </td><td class="memTemplItemRight" valign="bottom"><b>async_msg_type</b> = <a class="el" href="a00065.html">gfx_async_msg</a>< T ></td></tr>
+<tr class="separator:ad7170d237ab8e643a73adbe258527eca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9c26133f572549b4730f33d951bfcccf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9c26133f572549b4730f33d951bfcccf"></a>
+typedef func_wrapper </td><td class="memItemRight" valign="bottom"><b>kernel_type</b></td></tr>
+<tr class="separator:a9c26133f572549b4730f33d951bfcccf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a437863d05736e2fb9efead005bb009ca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a437863d05736e2fb9efead005bb009ca"></a>
+typedef gfx_offload::task_id_type </td><td class="memItemRight" valign="bottom"><b>kernel_id_type</b></td></tr>
+<tr class="separator:a437863d05736e2fb9efead005bb009ca"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a21a61b812ca97a6eb5549dab4b4ae490"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a21a61b812ca97a6eb5549dab4b4ae490"></a>
-void </td><td class="memItemRight" valign="bottom"><b>stop</b> ()</td></tr>
-<tr class="separator:a21a61b812ca97a6eb5549dab4b4ae490"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:ae4743f434cefacb6650e3e736daf9392"><td class="memTemplParams" colspan="2"><a class="anchor" id="ae4743f434cefacb6650e3e736daf9392"></a>
-template<typename T , typename U , typename Body > </td></tr>
-<tr class="memitem:ae4743f434cefacb6650e3e736daf9392"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::concrete_filter</b></td></tr>
-<tr class="separator:ae4743f434cefacb6650e3e736daf9392"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae67f4514754d58e524c30b6567f3829b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae67f4514754d58e524c30b6567f3829b"></a>
+ </td><td class="memItemRight" valign="bottom"><b>gfx_factory</b> (tbb::flow::graph &g)</td></tr>
+<tr class="separator:ae67f4514754d58e524c30b6567f3829b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8ba5e88a76a43cd85e122d30e25761ce"><td class="memTemplParams" colspan="2"><a class="anchor" id="a8ba5e88a76a43cd85e122d30e25761ce"></a>
+template<typename... Args> </td></tr>
+<tr class="memitem:a8ba5e88a76a43cd85e122d30e25761ce"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>send_data</b> (<a class="el" href="a00054.html">device_type</a>, Args &...args)</td></tr>
+<tr class="separator:a8ba5e88a76a43cd85e122d30e25761ce"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad02cbeeadac99f4ebecfb849439a3eb6"><td class="memTemplParams" colspan="2"><a class="anchor" id="ad02cbeeadac99f4ebecfb849439a3eb6"></a>
+template<typename... Args> </td></tr>
+<tr class="memitem:ad02cbeeadac99f4ebecfb849439a3eb6"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>send_kernel</b> (<a class="el" href="a00054.html">device_type</a>, const kernel_type &kernel, Args &...args)</td></tr>
+<tr class="separator:ad02cbeeadac99f4ebecfb849439a3eb6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae01ef652b38b2ef99729a39bd26eac5a"><td class="memTemplParams" colspan="2"><a class="anchor" id="ae01ef652b38b2ef99729a39bd26eac5a"></a>
+template<typename FinalizeFn , typename... Args> </td></tr>
+<tr class="memitem:ae01ef652b38b2ef99729a39bd26eac5a"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>finalize</b> (<a class="el" href="a00054.html">device_type</a>, FinalizeFn fn, Args &...)</td></tr>
+<tr class="separator:ae01ef652b38b2ef99729a39bd26eac5a"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>input_filter control to signal end-of-input for parallel_pipeline </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>pipeline.h</li>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>gfx_factory.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00068.html b/doc/html/a00068.html
index 7edb1e8..96334af 100644
--- a/doc/html/a00068.html
+++ b/doc/html/a00068.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::function_node< Input, Output, G, Allocator > Class Template Reference</title>
+<title>tbb::interface9::global_control Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,142 +33,47 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00068.html">function_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00068.html">global_control</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-methods">Protected Member Functions</a> |
-<a href="#friends">Friends</a> |
-<a href="a00336.html">List of all members</a>  </div>
+<a href="#pub-static-methods">Static Public Member Functions</a> |
+<a href="a00394.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::function_node< Input, Output, G, Allocator > Class Template Reference</div>  </div>
+<div class="title">tbb::interface9::global_control Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Implements a function node that supports Input -> Output.  
- <a href="a00068.html#details">More...</a></p>
-
-<p><code>#include <flow_graph.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::function_node< Input, Output, G, Allocator >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00068.png" usemap="#tbb::flow::interface7::function_node< Input, Output, G, Allocator >_map" alt=""/>
-  <map id="tbb::flow::interface7::function_node< Input, Output, G, Allocator >_map" name="tbb::flow::interface7::function_node< Input, Output, G, Allocator >_map">
-<area href="a00072.html" title="The base of all graph nodes. " alt="tbb::flow::interface7::graph_node" shape="rect" coords="0,56,382,80"/>
-</map>
- </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:a87000eb73b8e27c836e3684fb8f4f71f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a87000eb73b8e27c836e3684fb8f4f71f"></a>
-typedef Input </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
-<tr class="separator:a87000eb73b8e27c836e3684fb8f4f71f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a14ca11984d1d1b3b63628349f6619fba"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a14ca11984d1d1b3b63628349f6619fba"></a>
-typedef Output </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:a14ca11984d1d1b3b63628349f6619fba"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5a28361967c5a1e6dbd9d4eaa5bd592e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5a28361967c5a1e6dbd9d4eaa5bd592e"></a>
-typedef <a class="el" href="a00142.html">sender</a>< input_type > </td><td class="memItemRight" valign="bottom"><b>predecessor_type</b></td></tr>
-<tr class="separator:a5a28361967c5a1e6dbd9d4eaa5bd592e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aca53d4cfd9837142fb09ed952e78eda1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aca53d4cfd9837142fb09ed952e78eda1"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< output_type > </td><td class="memItemRight" valign="bottom"><b>successor_type</b></td></tr>
-<tr class="separator:aca53d4cfd9837142fb09ed952e78eda1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aebdfcaea471c2f221cc538f051e2981d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aebdfcaea471c2f221cc538f051e2981d"></a>
-typedef <br class="typebreak"/>
-internal::function_input<br class="typebreak"/>
-< input_type, output_type, <br class="typebreak"/>
-Allocator > </td><td class="memItemRight" valign="bottom"><b>fInput_type</b></td></tr>
-<tr class="separator:aebdfcaea471c2f221cc538f051e2981d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a057a4fff65c9d265399d6a7bc952dade"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a057a4fff65c9d265399d6a7bc952dade"></a>
-typedef <br class="typebreak"/>
-internal::function_input_queue<br class="typebreak"/>
-< input_type, Allocator > </td><td class="memItemRight" valign="bottom"><b>input_queue_type</b></td></tr>
-<tr class="separator:a057a4fff65c9d265399d6a7bc952dade"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a072953a37814d5f9d32bfdc6e4ae14c6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a072953a37814d5f9d32bfdc6e4ae14c6"></a>
-typedef <br class="typebreak"/>
-internal::function_output<br class="typebreak"/>
-< output_type > </td><td class="memItemRight" valign="bottom"><b>fOutput_type</b></td></tr>
-<tr class="separator:a072953a37814d5f9d32bfdc6e4ae14c6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a04221b8e619bef332234db90d31f3e5e"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>parameter</b> { <b>max_allowed_parallelism</b>, 
+<b>thread_stack_size</b>, 
+<b>parameter_max</b>
+ }</td></tr>
+<tr class="separator:a04221b8e619bef332234db90d31f3e5e"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a00e4607cc585926677f3d10458ff4f6d"><td class="memTemplParams" colspan="2"><a class="anchor" id="a00e4607cc585926677f3d10458ff4f6d"></a>
-template<typename Body > </td></tr>
-<tr class="memitem:a00e4607cc585926677f3d10458ff4f6d"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00068.html#a00e4607cc585926677f3d10458ff4f6d">function_node</a> (<a class="el" href="a00070.html">graph</a> &g, size_t concurrency, Body body)</td></tr>
-<tr class="memdesc:a00e4607cc585926677f3d10458ff4f6d"><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br/></td></tr>
-<tr class="separator:a00e4607cc585926677f3d10458ff4f6d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1bb4915f2b6d6fbfbe6bfacece5639c6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1bb4915f2b6d6fbfbe6bfacece5639c6"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00068.html#a1bb4915f2b6d6fbfbe6bfacece5639c6">function_node</a> (const <a class="el" href="a00068.html">function_node</a> &src)</td></tr>
-<tr class="memdesc:a1bb4915f2b6d6fbfbe6bfacece5639c6"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br/></td></tr>
-<tr class="separator:a1bb4915f2b6d6fbfbe6bfacece5639c6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8aa6a9f38f975784c88c0722dca261dd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8aa6a9f38f975784c88c0722dca261dd"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:a8aa6a9f38f975784c88c0722dca261dd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6ac8dceeb96897eabdfa3adbec659c9a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6ac8dceeb96897eabdfa3adbec659c9a"></a>
-void </td><td class="memItemRight" valign="bottom"><b>extract</b> ()</td></tr>
-<tr class="separator:a6ac8dceeb96897eabdfa3adbec659c9a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00072')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4badd313105e30f539882276353dcb8e"></a>
- </td><td class="memItemRight" valign="bottom"><b>graph_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5375ee43ca415f20f3c1f47db5220302"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5375ee43ca415f20f3c1f47db5220302"></a>
+ </td><td class="memItemRight" valign="bottom"><b>global_control</b> (parameter p, size_t value)</td></tr>
+<tr class="separator:a5375ee43ca415f20f3c1f47db5220302"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:aa7f21909422d66d7a5a6376ec85acf60"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa7f21909422d66d7a5a6376ec85acf60"></a>
-<a class="el" href="a00027.html">internal::broadcast_cache</a><br class="typebreak"/>
-< output_type > & </td><td class="memItemRight" valign="bottom"><b>successors</b> ()</td></tr>
-<tr class="separator:aa7f21909422d66d7a5a6376ec85acf60"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a596fc6ee9f4bcccf96195e8220fe6307"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a596fc6ee9f4bcccf96195e8220fe6307"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f))</td></tr>
-<tr class="separator:a596fc6ee9f4bcccf96195e8220fe6307"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00072')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac25a4633873c052047b1dd568824d055"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0</td></tr>
-<tr class="separator:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplParams" colspan="2"><a class="anchor" id="abaf9bf74ca5f2854d09f5f07337280eb"></a>
-template<typename R , typename B > </td></tr>
-<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>run_and_put_task</b></td></tr>
-<tr class="separator:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1360e38efe396058978cf3754ad620f5"></a>
-template<typename X , typename Y > </td></tr>
-<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::broadcast_cache</b></td></tr>
-<tr class="separator:a1360e38efe396058978cf3754ad620f5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplParams" colspan="2"><a class="anchor" id="acbd9ac2610587a99cd7d43344297cc49"></a>
-template<typename X , typename Y > </td></tr>
-<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::round_robin_cache</b></td></tr>
-<tr class="separator:acbd9ac2610587a99cd7d43344297cc49"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pro_attribs_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00072')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1caee1c5677047b05d18b1662ca6fdf8"></a>
-<a class="el" href="a00070.html">graph</a> & </td><td class="memItemRight" valign="bottom"><b>my_graph</b></td></tr>
-<tr class="separator:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af48cd0cd4f6e44efc3b353adb55f86a8"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>next</b></td></tr>
-<tr class="separator:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6917bffc3cb150319679bf2395e68caa"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>prev</b></td></tr>
-<tr class="separator:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:a8451d931cfc205d896ca2da26fe123ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8451d931cfc205d896ca2da26fe123ff"></a>
+static size_t </td><td class="memItemRight" valign="bottom"><b>active_value</b> (parameter p)</td></tr>
+<tr class="separator:a8451d931cfc205d896ca2da26fe123ff"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename Input, typename Output = continue_msg, graph_buffer_policy G = queueing, typename Allocator = cache_aligned_allocator<Input>><br/>
-class tbb::flow::interface7::function_node< Input, Output, G, Allocator ></h3>
-
-<p>Implements a function node that supports Input -> Output. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>global_control.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00068.png b/doc/html/a00068.png
deleted file mode 100644
index 251abe7..0000000
Binary files a/doc/html/a00068.png and /dev/null differ
diff --git a/doc/html/a00069.html b/doc/html/a00069.html
index f078cb6..acd0c4e 100644
--- a/doc/html/a00069.html
+++ b/doc/html/a00069.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface9::global_control Class Reference</title>
+<title>tbb::flow::interface9::graph_proxy Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,47 +33,52 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00069.html">global_control</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00069.html">graph_proxy</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-static-methods">Static Public Member Functions</a> |
-<a href="a00408.html">List of all members</a>  </div>
+<a href="a00326.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface9::global_control Class Reference</div>  </div>
+<div class="title">tbb::flow::interface9::graph_proxy Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
 </div><!--header-->
 <div class="contents">
+
+<p>Pure virtual template classes that define interfaces for async communication.  
+ <a href="a00069.html#details">More...</a></p>
+
+<p><code>#include <flow_graph_abstractions.h></code></p>
+<div class="dynheader">
+Inheritance diagram for tbb::flow::interface9::graph_proxy:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00069.png" usemap="#tbb::flow::interface9::graph_proxy_map" alt=""/>
+  <map id="tbb::flow::interface9::graph_proxy_map" name="tbb::flow::interface9::graph_proxy_map">
+<area href="a00120.html" alt="tbb::flow::interface9::receiver_gateway< Input >" shape="rect" coords="0,56,280,80"/>
+</map>
+ </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a04221b8e619bef332234db90d31f3e5e"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>parameter</b> { <b>max_allowed_parallelism</b>, 
-<b>thread_stack_size</b>, 
-<b>parameter_max</b>
- }</td></tr>
-<tr class="separator:a04221b8e619bef332234db90d31f3e5e"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a5375ee43ca415f20f3c1f47db5220302"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5375ee43ca415f20f3c1f47db5220302"></a>
- </td><td class="memItemRight" valign="bottom"><b>global_control</b> (parameter p, size_t value)</td></tr>
-<tr class="separator:a5375ee43ca415f20f3c1f47db5220302"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
-Static Public Member Functions</h2></td></tr>
-<tr class="memitem:a8451d931cfc205d896ca2da26fe123ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8451d931cfc205d896ca2da26fe123ff"></a>
-static size_t </td><td class="memItemRight" valign="bottom"><b>active_value</b> (parameter p)</td></tr>
-<tr class="separator:a8451d931cfc205d896ca2da26fe123ff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a89db56a08929f4d3e45d27838cec3272"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a89db56a08929f4d3e45d27838cec3272"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00069.html#a89db56a08929f4d3e45d27838cec3272">reserve_wait</a> ()=0</td></tr>
+<tr class="memdesc:a89db56a08929f4d3e45d27838cec3272"><td class="mdescLeft"> </td><td class="mdescRight">Inform a graph that messages may come from outside, to prevent premature graph completion. <br/></td></tr>
+<tr class="separator:a89db56a08929f4d3e45d27838cec3272"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5f751c4f3a0b5be4f97b2b857aaecea0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f751c4f3a0b5be4f97b2b857aaecea0"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00069.html#a5f751c4f3a0b5be4f97b2b857aaecea0">release_wait</a> ()=0</td></tr>
+<tr class="memdesc:a5f751c4f3a0b5be4f97b2b857aaecea0"><td class="mdescLeft"> </td><td class="mdescRight">Inform a graph that a previous call to reserve_wait is no longer in effect. <br/></td></tr>
+<tr class="separator:a5f751c4f3a0b5be4f97b2b857aaecea0"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>global_control.h</li>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Pure virtual template classes that define interfaces for async communication. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>flow_graph_abstractions.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00069.png b/doc/html/a00069.png
new file mode 100644
index 0000000..9360697
Binary files /dev/null and b/doc/html/a00069.png differ
diff --git a/doc/html/a00070.html b/doc/html/a00070.html
index 17a8430..06bb5f6 100644
--- a/doc/html/a00070.html
+++ b/doc/html/a00070.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::graph Class Reference</title>
+<title>tbb::internal::tbb_thread_v3::id Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,317 +33,64 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00070.html">graph</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00157.html">tbb_thread_v3</a></li><li class="navelem"><a class="el" href="a00070.html">id</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-methods">Public Member Functions</a> |
 <a href="#friends">Friends</a> |
-<a href="a00333.html">List of all members</a>  </div>
+<a href="a00406.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::graph Class Reference</div>  </div>
+<div class="title">tbb::internal::tbb_thread_v3::id Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>The graph class.  
- <a href="a00070.html#details">More...</a></p>
-
-<p><code>#include <flow_graph.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::graph:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00070.png" usemap="#tbb::flow::interface7::graph_map" alt=""/>
-  <map id="tbb::flow::interface7::graph_map" name="tbb::flow::interface7::graph_map">
-</map>
- </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:aadf8d25297819e6b7c01e271ba504906"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aadf8d25297819e6b7c01e271ba504906"></a>
-typedef <a class="el" href="a00071.html">graph_iterator</a>< <a class="el" href="a00070.html">graph</a>, <br class="typebreak"/>
-<a class="el" href="a00072.html">graph_node</a> > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
-<tr class="separator:aadf8d25297819e6b7c01e271ba504906"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a278ce7d4ece4894554b6706d915e16a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a278ce7d4ece4894554b6706d915e16a4"></a>
-typedef <a class="el" href="a00071.html">graph_iterator</a>< const <br class="typebreak"/>
-<a class="el" href="a00070.html">graph</a>, const <a class="el" href="a00072.html">graph_node</a> > </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
-<tr class="separator:a278ce7d4ece4894554b6706d915e16a4"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:ac274a9006e66ecc75bcd59f784fe1867"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac274a9006e66ecc75bcd59f784fe1867"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00070.html#ac274a9006e66ecc75bcd59f784fe1867">graph</a> ()</td></tr>
-<tr class="memdesc:ac274a9006e66ecc75bcd59f784fe1867"><td class="mdescLeft"> </td><td class="mdescRight">Constructs a graph with isolated <a class="el" href="a00153.html">task_group_context</a>. <br/></td></tr>
-<tr class="separator:ac274a9006e66ecc75bcd59f784fe1867"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a656cee3d0240a3f142a450800e6b17c7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a656cee3d0240a3f142a450800e6b17c7"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00070.html#a656cee3d0240a3f142a450800e6b17c7">graph</a> (<a class="el" href="a00153.html">task_group_context</a> &use_this_context)</td></tr>
-<tr class="memdesc:a656cee3d0240a3f142a450800e6b17c7"><td class="mdescLeft"> </td><td class="mdescRight">Constructs a graph with use_this_context as context. <br/></td></tr>
-<tr class="separator:a656cee3d0240a3f142a450800e6b17c7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3412df4d4bf0113aed93c958bbb49ec4"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00070.html#a3412df4d4bf0113aed93c958bbb49ec4">~graph</a> ()</td></tr>
-<tr class="memdesc:a3412df4d4bf0113aed93c958bbb49ec4"><td class="mdescLeft"> </td><td class="mdescRight">Destroys the graph.  <a href="#a3412df4d4bf0113aed93c958bbb49ec4">More...</a><br/></td></tr>
-<tr class="separator:a3412df4d4bf0113aed93c958bbb49ec4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0d13293f3c2d0f2e79e9a93afb0e8fd4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0d13293f3c2d0f2e79e9a93afb0e8fd4"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:a0d13293f3c2d0f2e79e9a93afb0e8fd4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad96c910ae45e6c5d2433bb1d9e910891"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00070.html#ad96c910ae45e6c5d2433bb1d9e910891">increment_wait_count</a> ()</td></tr>
-<tr class="memdesc:ad96c910ae45e6c5d2433bb1d9e910891"><td class="mdescLeft"> </td><td class="mdescRight">Used to register that an external entity may still interact with the graph.  <a href="#ad96c910ae45e6c5d2433bb1d9e910891">More...</a><br/></td></tr>
-<tr class="separator:ad96c910ae45e6c5d2433bb1d9e910891"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af16d14eaed1355ae376bb78dde7762c3"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00070.html#af16d14eaed1355ae376bb78dde7762c3">decrement_wait_count</a> ()</td></tr>
-<tr class="memdesc:af16d14eaed1355ae376bb78dde7762c3"><td class="mdescLeft"> </td><td class="mdescRight">Deregisters an external entity that may have interacted with the graph.  <a href="#af16d14eaed1355ae376bb78dde7762c3">More...</a><br/></td></tr>
-<tr class="separator:af16d14eaed1355ae376bb78dde7762c3"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac0a03f1d59dc2ccb9526995599c2c83c"><td class="memTemplParams" colspan="2">template<typename Receiver , typename Body > </td></tr>
-<tr class="memitem:ac0a03f1d59dc2ccb9526995599c2c83c"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00070.html#ac0a03f1d59dc2ccb9526995599c2c83c">run</a> (Receiver &r, Body body)</td></tr>
-<tr class="memdesc:ac0a03f1d59dc2ccb9526995599c2c83c"><td class="mdescLeft"> </td><td class="mdescRight">Spawns a task that runs a body and puts its output to a specific receiver.  <a href="#ac0a03f1d59dc2ccb9526995599c2c83c">More...</a><br/></td></tr>
-<tr class="separator:ac0a03f1d59dc2ccb9526995599c2c83c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6e428c2d7c8780f3c2587a71c4d92466"><td class="memTemplParams" colspan="2">template<typename Body > </td></tr>
-<tr class="memitem:a6e428c2d7c8780f3c2587a71c4d92466"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00070.html#a6e428c2d7c8780f3c2587a71c4d92466">run</a> (Body body)</td></tr>
-<tr class="memdesc:a6e428c2d7c8780f3c2587a71c4d92466"><td class="mdescLeft"> </td><td class="mdescRight">Spawns a task that runs a function object.  <a href="#a6e428c2d7c8780f3c2587a71c4d92466">More...</a><br/></td></tr>
-<tr class="separator:a6e428c2d7c8780f3c2587a71c4d92466"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a397208ce3b432c83cd24f416b082e8db"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00070.html#a397208ce3b432c83cd24f416b082e8db">wait_for_all</a> ()</td></tr>
-<tr class="memdesc:a397208ce3b432c83cd24f416b082e8db"><td class="mdescLeft"> </td><td class="mdescRight">Wait until graph is idle and decrement_wait_count calls equals increment_wait_count calls.  <a href="#a397208ce3b432c83cd24f416b082e8db">More...</a><br/></td></tr>
-<tr class="separator:a397208ce3b432c83cd24f416b082e8db"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae5f59627a7d130cf289f105a849ad3f0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae5f59627a7d130cf289f105a849ad3f0"></a>
-task * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00070.html#ae5f59627a7d130cf289f105a849ad3f0">root_task</a> ()</td></tr>
-<tr class="memdesc:ae5f59627a7d130cf289f105a849ad3f0"><td class="mdescLeft"> </td><td class="mdescRight">Returns the root task of the graph. <br/></td></tr>
-<tr class="separator:ae5f59627a7d130cf289f105a849ad3f0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab1995f97d775a0f601568bba9182fa7c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab1995f97d775a0f601568bba9182fa7c"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_active</b> (bool a=true)</td></tr>
-<tr class="separator:ab1995f97d775a0f601568bba9182fa7c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5d4dc18ca659159cc4454dd4cac48213"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5d4dc18ca659159cc4454dd4cac48213"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>is_active</b> ()</td></tr>
-<tr class="separator:a5d4dc18ca659159cc4454dd4cac48213"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a91d2f9921342a504668b2cdc3064a846"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a91d2f9921342a504668b2cdc3064a846"></a>
-<a class="el" href="a00071.html">iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00070.html#a91d2f9921342a504668b2cdc3064a846">begin</a> ()</td></tr>
-<tr class="memdesc:a91d2f9921342a504668b2cdc3064a846"><td class="mdescLeft"> </td><td class="mdescRight">start iterator <br/></td></tr>
-<tr class="separator:a91d2f9921342a504668b2cdc3064a846"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a221a7ee0a1f0e69a01add5c1dda43be7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a221a7ee0a1f0e69a01add5c1dda43be7"></a>
-<a class="el" href="a00071.html">iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00070.html#a221a7ee0a1f0e69a01add5c1dda43be7">end</a> ()</td></tr>
-<tr class="memdesc:a221a7ee0a1f0e69a01add5c1dda43be7"><td class="mdescLeft"> </td><td class="mdescRight">end iterator <br/></td></tr>
-<tr class="separator:a221a7ee0a1f0e69a01add5c1dda43be7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac404d2e08620aca079532124551a646a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac404d2e08620aca079532124551a646a"></a>
-<a class="el" href="a00071.html">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00070.html#ac404d2e08620aca079532124551a646a">begin</a> () const </td></tr>
-<tr class="memdesc:ac404d2e08620aca079532124551a646a"><td class="mdescLeft"> </td><td class="mdescRight">start const iterator <br/></td></tr>
-<tr class="separator:ac404d2e08620aca079532124551a646a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a599e6a885a76db84928b039063c299e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a599e6a885a76db84928b039063c299e4"></a>
-<a class="el" href="a00071.html">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00070.html#a599e6a885a76db84928b039063c299e4">end</a> () const </td></tr>
-<tr class="memdesc:a599e6a885a76db84928b039063c299e4"><td class="mdescLeft"> </td><td class="mdescRight">end const iterator <br/></td></tr>
-<tr class="separator:a599e6a885a76db84928b039063c299e4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2af8f195917817ce2b77ff7b6463c344"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2af8f195917817ce2b77ff7b6463c344"></a>
-<a class="el" href="a00071.html">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00070.html#a2af8f195917817ce2b77ff7b6463c344">cbegin</a> () const </td></tr>
-<tr class="memdesc:a2af8f195917817ce2b77ff7b6463c344"><td class="mdescLeft"> </td><td class="mdescRight">start const iterator <br/></td></tr>
-<tr class="separator:a2af8f195917817ce2b77ff7b6463c344"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acf6d3f610c2675eaf8bf2a40853081aa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf6d3f610c2675eaf8bf2a40853081aa"></a>
-<a class="el" href="a00071.html">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00070.html#acf6d3f610c2675eaf8bf2a40853081aa">cend</a> () const </td></tr>
-<tr class="memdesc:acf6d3f610c2675eaf8bf2a40853081aa"><td class="mdescLeft"> </td><td class="mdescRight">end const iterator <br/></td></tr>
-<tr class="separator:acf6d3f610c2675eaf8bf2a40853081aa"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9e26f4f5d608e39c8adc9dc6d06a7a01"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9e26f4f5d608e39c8adc9dc6d06a7a01"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00070.html#a9e26f4f5d608e39c8adc9dc6d06a7a01">is_cancelled</a> ()</td></tr>
-<tr class="memdesc:a9e26f4f5d608e39c8adc9dc6d06a7a01"><td class="mdescLeft"> </td><td class="mdescRight">return status of graph execution <br/></td></tr>
-<tr class="separator:a9e26f4f5d608e39c8adc9dc6d06a7a01"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8183d2d71ce8c8b35d314bbb7d66bda3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8183d2d71ce8c8b35d314bbb7d66bda3"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>exception_thrown</b> ()</td></tr>
-<tr class="separator:a8183d2d71ce8c8b35d314bbb7d66bda3"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0018db4ee4e5792c0e7e1a2065fbf5c4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0018db4ee4e5792c0e7e1a2065fbf5c4"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))</td></tr>
-<tr class="separator:a0018db4ee4e5792c0e7e1a2065fbf5c4"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
 Friends</h2></td></tr>
-<tr class="memitem:a8bb549de1ad8539cd820379b4a9bc568"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8bb549de1ad8539cd820379b4a9bc568"></a>
-class </td><td class="memItemRight" valign="bottom"><b>graph_node</b></td></tr>
-<tr class="separator:a8bb549de1ad8539cd820379b4a9bc568"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aaa1d1a46765052516277dce8e9bdf63e"><td class="memTemplParams" colspan="2"><a class="anchor" id="aaa1d1a46765052516277dce8e9bdf63e"></a>
-template<typename C , typename N > </td></tr>
-<tr class="memitem:aaa1d1a46765052516277dce8e9bdf63e"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>graph_iterator</b></td></tr>
-<tr class="separator:aaa1d1a46765052516277dce8e9bdf63e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa08381fcad9d2adc0bf8fb009ad38366"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa08381fcad9d2adc0bf8fb009ad38366"></a>
+class </td><td class="memItemRight" valign="bottom"><b>tbb_thread_v3</b></td></tr>
+<tr class="separator:aa08381fcad9d2adc0bf8fb009ad38366"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1ffa9d9b2f7e18d73535b2879ba64ae0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1ffa9d9b2f7e18d73535b2879ba64ae0"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>operator==</b> (<a class="el" href="a00070.html">tbb_thread_v3::id</a> x, <a class="el" href="a00070.html">tbb_thread_v3::id</a> y) __TBB_NOEXCEPT(true)</td></tr>
+<tr class="separator:a1ffa9d9b2f7e18d73535b2879ba64ae0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3be52bbc6138f2d2180d89d588b5c404"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3be52bbc6138f2d2180d89d588b5c404"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>operator!=</b> (<a class="el" href="a00070.html">tbb_thread_v3::id</a> x, <a class="el" href="a00070.html">tbb_thread_v3::id</a> y) __TBB_NOEXCEPT(true)</td></tr>
+<tr class="separator:a3be52bbc6138f2d2180d89d588b5c404"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5cd4a67d579d3ea07557ce6a632bdff0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5cd4a67d579d3ea07557ce6a632bdff0"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>operator<</b> (<a class="el" href="a00070.html">tbb_thread_v3::id</a> x, <a class="el" href="a00070.html">tbb_thread_v3::id</a> y) __TBB_NOEXCEPT(true)</td></tr>
+<tr class="separator:a5cd4a67d579d3ea07557ce6a632bdff0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaf358e695ce2c3bc64029bb69b6b7841"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaf358e695ce2c3bc64029bb69b6b7841"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>operator<=</b> (<a class="el" href="a00070.html">tbb_thread_v3::id</a> x, <a class="el" href="a00070.html">tbb_thread_v3::id</a> y) __TBB_NOEXCEPT(true)</td></tr>
+<tr class="separator:aaf358e695ce2c3bc64029bb69b6b7841"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad9277ffe4c9b7cdd4687d0cab4bf8cd8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad9277ffe4c9b7cdd4687d0cab4bf8cd8"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>operator></b> (<a class="el" href="a00070.html">tbb_thread_v3::id</a> x, <a class="el" href="a00070.html">tbb_thread_v3::id</a> y) __TBB_NOEXCEPT(true)</td></tr>
+<tr class="separator:ad9277ffe4c9b7cdd4687d0cab4bf8cd8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9f559c30c06931effca0ee4a351d8fff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9f559c30c06931effca0ee4a351d8fff"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>operator>=</b> (<a class="el" href="a00070.html">tbb_thread_v3::id</a> x, <a class="el" href="a00070.html">tbb_thread_v3::id</a> y) __TBB_NOEXCEPT(true)</td></tr>
+<tr class="separator:a9f559c30c06931effca0ee4a351d8fff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8dcf9ef009469428dc3752f54240eb69"><td class="memTemplParams" colspan="2"><a class="anchor" id="a8dcf9ef009469428dc3752f54240eb69"></a>
+template<class charT , class traits > </td></tr>
+<tr class="memitem:a8dcf9ef009469428dc3752f54240eb69"><td class="memTemplItemLeft" align="right" valign="top">std::basic_ostream< charT, <br class="typebreak"/>
+traits > & </td><td class="memTemplItemRight" valign="bottom"><b>operator<<</b> (std::basic_ostream< charT, traits > &out, <a class="el" href="a00070.html">tbb_thread_v3::id</a> <a class="el" href="a00070.html">id</a>)</td></tr>
+<tr class="separator:a8dcf9ef009469428dc3752f54240eb69"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0a77bf86c87119e219bb508d787d97da"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0a77bf86c87119e219bb508d787d97da"></a>
+<a class="el" href="a00070.html">tbb_thread_v3::id</a> <br class="typebreak"/>
+__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><b>thread_get_id_v3</b> ()</td></tr>
+<tr class="separator:a0a77bf86c87119e219bb508d787d97da"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9245f821db4ab0e093ec5e7b7f02eb8b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9245f821db4ab0e093ec5e7b7f02eb8b"></a>
+size_t </td><td class="memItemRight" valign="bottom"><b>tbb_hasher</b> (const <a class="el" href="a00070.html">tbb_thread_v3::id</a> &<a class="el" href="a00070.html">id</a>)</td></tr>
+<tr class="separator:a9245f821db4ab0e093ec5e7b7f02eb8b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af6fded011b60cda6876a33f68b2368ee"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af6fded011b60cda6876a33f68b2368ee"></a>
+<a class="el" href="a00070.html">id</a> </td><td class="memItemRight" valign="bottom"><b>atomic_compare_and_swap</b> (<a class="el" href="a00070.html">id</a> &location, const <a class="el" href="a00070.html">id</a> &value, const <a class="el" href="a00070.html">id</a> &comparand)</td></tr>
+<tr class="separator:af6fded011b60cda6876a33f68b2368ee"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>The graph class. </p>
-<p>This class serves as a handle to the graph </p>
-</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a3412df4d4bf0113aed93c958bbb49ec4"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">tbb::flow::interface7::graph::~graph </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Destroys the graph. </p>
-<p>Calls wait_for_all, then destroys the root task and context. </p>
-
-</div>
-</div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="af16d14eaed1355ae376bb78dde7762c3"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::flow::interface7::graph::decrement_wait_count </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Deregisters an external entity that may have interacted with the graph. </p>
-<p>The graph will not return from wait_for_all until all the number of decrement_wait_count calls matches the number of increment_wait_count calls. </p>
-
-</div>
-</div>
-<a class="anchor" id="ad96c910ae45e6c5d2433bb1d9e910891"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::flow::interface7::graph::increment_wait_count </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Used to register that an external entity may still interact with the graph. </p>
-<p>The graph will not return from wait_for_all until a matching number of decrement_wait_count calls is made. </p>
-
-</div>
-</div>
-<a class="anchor" id="ac0a03f1d59dc2ccb9526995599c2c83c"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Receiver , typename Body > </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::flow::interface7::graph::run </td>
-          <td>(</td>
-          <td class="paramtype">Receiver & </td>
-          <td class="paramname"><em>r</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">Body </td>
-          <td class="paramname"><em>body</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Spawns a task that runs a body and puts its output to a specific receiver. </p>
-<p>The task is spawned as a child of the graph. This is useful for running tasks that need to block a <a class="el" href="a00070.html#a397208ce3b432c83cd24f416b082e8db" title="Wait until graph is idle and decrement_wait_count calls equals increment_wait_count calls...">wait_for_all()</a> on the graph. For example a one-off source. </p>
-
-</div>
-</div>
-<a class="anchor" id="a6e428c2d7c8780f3c2587a71c4d92466"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Body > </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::flow::interface7::graph::run </td>
-          <td>(</td>
-          <td class="paramtype">Body </td>
-          <td class="paramname"><em>body</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Spawns a task that runs a function object. </p>
-<p>The task is spawned as a child of the graph. This is useful for running tasks that need to block a <a class="el" href="a00070.html#a397208ce3b432c83cd24f416b082e8db" title="Wait until graph is idle and decrement_wait_count calls equals increment_wait_count calls...">wait_for_all()</a> on the graph. For example a one-off source. </p>
-
-</div>
-</div>
-<a class="anchor" id="a397208ce3b432c83cd24f416b082e8db"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::flow::interface7::graph::wait_for_all </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Wait until graph is idle and decrement_wait_count calls equals increment_wait_count calls. </p>
-<p>The waiting thread will go off and steal work while it is block in the wait_for_all. </p>
-
-</div>
-</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<li>tbb_thread.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00070.png b/doc/html/a00070.png
deleted file mode 100644
index 9ec4ddf..0000000
Binary files a/doc/html/a00070.png and /dev/null differ
diff --git a/doc/html/a00071.html b/doc/html/a00071.html
index c5c2b73..e297a74 100644
--- a/doc/html/a00071.html
+++ b/doc/html/a00071.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType > Class Template Reference</title>
+<title>tbb::improper_lock Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,96 +33,46 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00071.html">graph_iterator</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00071.html">improper_lock</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#friends">Friends</a> |
-<a href="a00332.html">List of all members</a>  </div>
+<a href="a00314.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType > Class Template Reference</div>  </div>
+<div class="title">tbb::improper_lock Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
+
+<p>Exception for PPL locks.  
+ <a href="a00071.html#details">More...</a></p>
+
+<p><code>#include <tbb_exception.h></code></p>
+<div class="dynheader">
+Inheritance diagram for tbb::improper_lock:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00071.png" usemap="#tbb::improper_lock_map" alt=""/>
+  <map id="tbb::improper_lock_map" name="tbb::improper_lock_map">
+</map>
+ </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:abdd4f54a62d4b1e34661795501ab96a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abdd4f54a62d4b1e34661795501ab96a4"></a>
-typedef size_t </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-<tr class="separator:abdd4f54a62d4b1e34661795501ab96a4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9cc8bbd5e318ac345e2948f957aba1c2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9cc8bbd5e318ac345e2948f957aba1c2"></a>
-typedef GraphNodeType </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-<tr class="separator:a9cc8bbd5e318ac345e2948f957aba1c2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4376f2192af42eb189c7fe4769b51ea8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4376f2192af42eb189c7fe4769b51ea8"></a>
-typedef GraphNodeType * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-<tr class="separator:a4376f2192af42eb189c7fe4769b51ea8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1628ccc82db8c7ae48042e75629df9c3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1628ccc82db8c7ae48042e75629df9c3"></a>
-typedef GraphNodeType & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
-<tr class="separator:a1628ccc82db8c7ae48042e75629df9c3"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a279af8fa5e64a54f31d6bb0d42708697"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a279af8fa5e64a54f31d6bb0d42708697"></a>
-typedef const GraphNodeType & </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
-<tr class="separator:a279af8fa5e64a54f31d6bb0d42708697"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6ef18324f0aab60b4e9b3a5a242224ce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6ef18324f0aab60b4e9b3a5a242224ce"></a>
-typedef std::forward_iterator_tag </td><td class="memItemRight" valign="bottom"><b>iterator_category</b></td></tr>
-<tr class="separator:a6ef18324f0aab60b4e9b3a5a242224ce"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a5082b1f425ffbd4a93533230d6ff99c0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5082b1f425ffbd4a93533230d6ff99c0"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00071.html#a5082b1f425ffbd4a93533230d6ff99c0">graph_iterator</a> ()</td></tr>
-<tr class="memdesc:a5082b1f425ffbd4a93533230d6ff99c0"><td class="mdescLeft"> </td><td class="mdescRight">Default constructor. <br/></td></tr>
-<tr class="separator:a5082b1f425ffbd4a93533230d6ff99c0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a72937fa822ca1e285a4cb22e544bafbf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a72937fa822ca1e285a4cb22e544bafbf"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00071.html#a72937fa822ca1e285a4cb22e544bafbf">graph_iterator</a> (const <a class="el" href="a00071.html">graph_iterator</a> &other)</td></tr>
-<tr class="memdesc:a72937fa822ca1e285a4cb22e544bafbf"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br/></td></tr>
-<tr class="separator:a72937fa822ca1e285a4cb22e544bafbf"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ada73cea77a417f0df629eeaf4c1e2002"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ada73cea77a417f0df629eeaf4c1e2002"></a>
-<a class="el" href="a00071.html">graph_iterator</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00071.html#ada73cea77a417f0df629eeaf4c1e2002">operator=</a> (const <a class="el" href="a00071.html">graph_iterator</a> &other)</td></tr>
-<tr class="memdesc:ada73cea77a417f0df629eeaf4c1e2002"><td class="mdescLeft"> </td><td class="mdescRight">Assignment. <br/></td></tr>
-<tr class="separator:ada73cea77a417f0df629eeaf4c1e2002"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1daffd203bebae367ed0f32917048f22"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1daffd203bebae367ed0f32917048f22"></a>
-reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00071.html#a1daffd203bebae367ed0f32917048f22">operator*</a> () const </td></tr>
-<tr class="memdesc:a1daffd203bebae367ed0f32917048f22"><td class="mdescLeft"> </td><td class="mdescRight">Dereference. <br/></td></tr>
-<tr class="separator:a1daffd203bebae367ed0f32917048f22"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abfb28c989f76822e26b47211febe3d72"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abfb28c989f76822e26b47211febe3d72"></a>
-pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00071.html#abfb28c989f76822e26b47211febe3d72">operator-></a> () const </td></tr>
-<tr class="memdesc:abfb28c989f76822e26b47211febe3d72"><td class="mdescLeft"> </td><td class="mdescRight">Dereference. <br/></td></tr>
-<tr class="separator:abfb28c989f76822e26b47211febe3d72"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3b0d834dffd2a99a596e9541b7a96d2a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3b0d834dffd2a99a596e9541b7a96d2a"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00071.html#a3b0d834dffd2a99a596e9541b7a96d2a">operator==</a> (const <a class="el" href="a00071.html">graph_iterator</a> &other) const </td></tr>
-<tr class="memdesc:a3b0d834dffd2a99a596e9541b7a96d2a"><td class="mdescLeft"> </td><td class="mdescRight">Equality. <br/></td></tr>
-<tr class="separator:a3b0d834dffd2a99a596e9541b7a96d2a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af3f6d2cc6cbec2dc1194f7d5f4091a73"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af3f6d2cc6cbec2dc1194f7d5f4091a73"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00071.html#af3f6d2cc6cbec2dc1194f7d5f4091a73">operator!=</a> (const <a class="el" href="a00071.html">graph_iterator</a> &other) const </td></tr>
-<tr class="memdesc:af3f6d2cc6cbec2dc1194f7d5f4091a73"><td class="mdescLeft"> </td><td class="mdescRight">Inequality. <br/></td></tr>
-<tr class="separator:af3f6d2cc6cbec2dc1194f7d5f4091a73"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab84587ed134f01886f6a0d64d5a6ccef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab84587ed134f01886f6a0d64d5a6ccef"></a>
-<a class="el" href="a00071.html">graph_iterator</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00071.html#ab84587ed134f01886f6a0d64d5a6ccef">operator++</a> ()</td></tr>
-<tr class="memdesc:ab84587ed134f01886f6a0d64d5a6ccef"><td class="mdescLeft"> </td><td class="mdescRight">Pre-increment. <br/></td></tr>
-<tr class="separator:ab84587ed134f01886f6a0d64d5a6ccef"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abc9d079735fe9c1b07d136284556e15a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abc9d079735fe9c1b07d136284556e15a"></a>
-<a class="el" href="a00071.html">graph_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00071.html#abc9d079735fe9c1b07d136284556e15a">operator++</a> (int)</td></tr>
-<tr class="memdesc:abc9d079735fe9c1b07d136284556e15a"><td class="mdescLeft"> </td><td class="mdescRight">Post-increment. <br/></td></tr>
-<tr class="separator:abc9d079735fe9c1b07d136284556e15a"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:ab8b0dbc1b36724e5e4635ac651c218cb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab8b0dbc1b36724e5e4635ac651c218cb"></a>
-class </td><td class="memItemRight" valign="bottom"><b>graph</b></td></tr>
-<tr class="separator:ab8b0dbc1b36724e5e4635ac651c218cb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8bb549de1ad8539cd820379b4a9bc568"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8bb549de1ad8539cd820379b4a9bc568"></a>
-class </td><td class="memItemRight" valign="bottom"><b>graph_node</b></td></tr>
-<tr class="separator:a8bb549de1ad8539cd820379b4a9bc568"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a21c70e6c3868a93a7cd0e725d411da50"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a21c70e6c3868a93a7cd0e725d411da50"></a>
+const char * </td><td class="memItemRight" valign="bottom"><b>what</b> () const __TBB_override  throw ()</td></tr>
+<tr class="separator:a21c70e6c3868a93a7cd0e725d411da50"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Exception for PPL locks. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>tbb_exception.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00074.png b/doc/html/a00071.png
similarity index 100%
copy from doc/html/a00074.png
copy to doc/html/a00071.png
diff --git a/doc/html/a00072.html b/doc/html/a00072.html
index 647a4f0..59ca263 100644
--- a/doc/html/a00072.html
+++ b/doc/html/a00072.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::graph_node Class Reference</title>
+<title>tbb::tick_count::interval_t Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,96 +33,74 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00072.html">graph_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00163.html">tick_count</a></li><li class="navelem"><a class="el" href="a00072.html">interval_t</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-methods">Protected Member Functions</a> |
-<a href="#pro-attribs">Protected Attributes</a> |
 <a href="#friends">Friends</a> |
-<a href="a00334.html">List of all members</a>  </div>
+<a href="a00322.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::graph_node Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
+<div class="title">tbb::tick_count::interval_t Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>The base of all graph nodes.  
+<p>Relative time interval.  
  <a href="a00072.html#details">More...</a></p>
 
-<p><code>#include <flow_graph.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::graph_node:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00072.png" usemap="#tbb::flow::interface7::graph_node_map" alt=""/>
-  <map id="tbb::flow::interface7::graph_node_map" name="tbb::flow::interface7::graph_node_map">
-<area href="a00098.html" alt="tbb::flow::interface7::multifunction_node< TupleType, TupleType, rejecting, Allocator >" shape="rect" coords="613,112,1216,136"/>
-<area href="a00017.html" title="Implements a async node. " alt="tbb::flow::interface7::async_node< Input, Output, Allocator >" shape="rect" coords="613,168,1216,192"/>
-<area href="a00028.html" title="Forwards messages of type T to all successors. " alt="tbb::flow::interface7::broadcast_node< T >" shape="rect" coords="613,224,1216,248"/>
-<area href="a00030.html" title="Forwards messages in arbitrary order. " alt="tbb::flow::interface7::buffer_node< T, A >" shape="rect" coords="613,280,1216,304"/>
-<area href="a00038.html" alt="tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> >" shape="rect" coords="613,336,1216,360"/>
-<area href="a00039.html" alt="tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> >" shape="rect" coords="613,392,1216,416"/>
-<area href="a00040.html" alt="tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> >" shape="rect" coords="613,448,1216,472"/>
-<area href="a00056.html" title="Implements an executable node that supports continue_msg -> Output. " alt="tbb::flow::interface7::continue_node< Output >" shape="rect" coords="613,504,1216,528"/>
-<area href="a00068.html" title="Implements a function node that supports Input -> Output. " alt="tbb::flow::interface7::function_node< Input, Output, G, Allocator >" shape="rect" coords="613,560,1216,584"/>
-<area href="a00091.html" title="Forwards messages only if the threshold has not been reached. " alt="tbb::flow::interface7::limiter_node< T >" shape="rect" coords="613,616,1216,640"/>
-<area href="a00098.html" title="implements a function node that supports Input -> (set of outputs) " alt="tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator >" shape="rect" coords="613,672,1216,696"/>
-<area href="a00104.html" alt="tbb::flow::interface7::overwrite_node< T >" shape="rect" coords="613,728,1216,752"/>
-<area href="a00144.html" title="An executable node that acts as a source, i.e. it has no predecessors. " alt="tbb::flow::interface7::source_node< Output >" shape="rect" coords="613,784,1216,808"/>
-</map>
- </div></div>
+<p><code>#include <tick_count.h></code></p>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a4badd313105e30f539882276353dcb8e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4badd313105e30f539882276353dcb8e"></a>
- </td><td class="memItemRight" valign="bottom"><b>graph_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a4badd313105e30f539882276353dcb8e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2eaba3736a405fc5c2267d9e7eb95c27"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2eaba3736a405fc5c2267d9e7eb95c27"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)=0</td></tr>
-<tr class="separator:a2eaba3736a405fc5c2267d9e7eb95c27"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a919d1ec7f0ce43511a03dde7445dcd00"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a919d1ec7f0ce43511a03dde7445dcd00"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>extract</b> ()=0</td></tr>
-<tr class="separator:a919d1ec7f0ce43511a03dde7445dcd00"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:ac25a4633873c052047b1dd568824d055"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac25a4633873c052047b1dd568824d055"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0</td></tr>
-<tr class="separator:ac25a4633873c052047b1dd568824d055"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
-Protected Attributes</h2></td></tr>
-<tr class="memitem:a1caee1c5677047b05d18b1662ca6fdf8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1caee1c5677047b05d18b1662ca6fdf8"></a>
-<a class="el" href="a00070.html">graph</a> & </td><td class="memItemRight" valign="bottom"><b>my_graph</b></td></tr>
-<tr class="separator:a1caee1c5677047b05d18b1662ca6fdf8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af48cd0cd4f6e44efc3b353adb55f86a8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af48cd0cd4f6e44efc3b353adb55f86a8"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>next</b></td></tr>
-<tr class="separator:af48cd0cd4f6e44efc3b353adb55f86a8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6917bffc3cb150319679bf2395e68caa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6917bffc3cb150319679bf2395e68caa"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>prev</b></td></tr>
-<tr class="separator:a6917bffc3cb150319679bf2395e68caa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a95e3e14750bebafe719856176e2737db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a95e3e14750bebafe719856176e2737db"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00072.html#a95e3e14750bebafe719856176e2737db">interval_t</a> ()</td></tr>
+<tr class="memdesc:a95e3e14750bebafe719856176e2737db"><td class="mdescLeft"> </td><td class="mdescRight">Construct a time interval representing zero time duration. <br/></td></tr>
+<tr class="separator:a95e3e14750bebafe719856176e2737db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a73b462297173f6bffa15bc5a86c30ef4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a73b462297173f6bffa15bc5a86c30ef4"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00072.html#a73b462297173f6bffa15bc5a86c30ef4">interval_t</a> (double sec)</td></tr>
+<tr class="memdesc:a73b462297173f6bffa15bc5a86c30ef4"><td class="mdescLeft"> </td><td class="mdescRight">Construct a time interval representing sec seconds time duration. <br/></td></tr>
+<tr class="separator:a73b462297173f6bffa15bc5a86c30ef4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abe81446bbbb6b6e98d854b91acf47809"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe81446bbbb6b6e98d854b91acf47809"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="a00072.html#abe81446bbbb6b6e98d854b91acf47809">seconds</a> () const </td></tr>
+<tr class="memdesc:abe81446bbbb6b6e98d854b91acf47809"><td class="mdescLeft"> </td><td class="mdescRight">Return the length of a time interval in seconds. <br/></td></tr>
+<tr class="separator:abe81446bbbb6b6e98d854b91acf47809"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a19bf32f4541252daaa6b09fd33fa9177"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a19bf32f4541252daaa6b09fd33fa9177"></a>
+<a class="el" href="a00072.html">interval_t</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00072.html#a19bf32f4541252daaa6b09fd33fa9177">operator+=</a> (const <a class="el" href="a00072.html">interval_t</a> &i)</td></tr>
+<tr class="memdesc:a19bf32f4541252daaa6b09fd33fa9177"><td class="mdescLeft"> </td><td class="mdescRight">Accumulation operator. <br/></td></tr>
+<tr class="separator:a19bf32f4541252daaa6b09fd33fa9177"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3394d9f3678e6a4c3d6e1be840fe2ff2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3394d9f3678e6a4c3d6e1be840fe2ff2"></a>
+<a class="el" href="a00072.html">interval_t</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00072.html#a3394d9f3678e6a4c3d6e1be840fe2ff2">operator-=</a> (const <a class="el" href="a00072.html">interval_t</a> &i)</td></tr>
+<tr class="memdesc:a3394d9f3678e6a4c3d6e1be840fe2ff2"><td class="mdescLeft"> </td><td class="mdescRight">Subtraction operator. <br/></td></tr>
+<tr class="separator:a3394d9f3678e6a4c3d6e1be840fe2ff2"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
 Friends</h2></td></tr>
-<tr class="memitem:ab8b0dbc1b36724e5e4635ac651c218cb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab8b0dbc1b36724e5e4635ac651c218cb"></a>
-class </td><td class="memItemRight" valign="bottom"><b>graph</b></td></tr>
-<tr class="separator:ab8b0dbc1b36724e5e4635ac651c218cb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aaa1d1a46765052516277dce8e9bdf63e"><td class="memTemplParams" colspan="2"><a class="anchor" id="aaa1d1a46765052516277dce8e9bdf63e"></a>
-template<typename C , typename N > </td></tr>
-<tr class="memitem:aaa1d1a46765052516277dce8e9bdf63e"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>graph_iterator</b></td></tr>
-<tr class="separator:aaa1d1a46765052516277dce8e9bdf63e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a68e741a8f6e2384027e93d1f654ad100"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a68e741a8f6e2384027e93d1f654ad100"></a>
+class </td><td class="memItemRight" valign="bottom"><b>tbb::tick_count</b></td></tr>
+<tr class="separator:a68e741a8f6e2384027e93d1f654ad100"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab5ceaed3ebf5a0d41088a5bc7c8dc653"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5ceaed3ebf5a0d41088a5bc7c8dc653"></a>
+<a class="el" href="a00072.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00072.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653">operator-</a> (const <a class="el" href="a00163.html">tick_count</a> &t1, const <a class="el" href="a00163.html">tick_count</a> &t0)</td></tr>
+<tr class="memdesc:ab5ceaed3ebf5a0d41088a5bc7c8dc653"><td class="mdescLeft"> </td><td class="mdescRight">Extract the intervals from the tick_counts and subtract them. <br/></td></tr>
+<tr class="separator:ab5ceaed3ebf5a0d41088a5bc7c8dc653"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac8910ee3b69f68eb905af787c273e9a8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac8910ee3b69f68eb905af787c273e9a8"></a>
+<a class="el" href="a00072.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00072.html#ac8910ee3b69f68eb905af787c273e9a8">operator+</a> (const <a class="el" href="a00072.html">interval_t</a> &i, const <a class="el" href="a00072.html">interval_t</a> &j)</td></tr>
+<tr class="memdesc:ac8910ee3b69f68eb905af787c273e9a8"><td class="mdescLeft"> </td><td class="mdescRight">Add two intervals. <br/></td></tr>
+<tr class="separator:ac8910ee3b69f68eb905af787c273e9a8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3d11133daa9a7d3c903d070293278f8f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d11133daa9a7d3c903d070293278f8f"></a>
+<a class="el" href="a00072.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00072.html#a3d11133daa9a7d3c903d070293278f8f">operator-</a> (const <a class="el" href="a00072.html">interval_t</a> &i, const <a class="el" href="a00072.html">interval_t</a> &j)</td></tr>
+<tr class="memdesc:a3d11133daa9a7d3c903d070293278f8f"><td class="mdescLeft"> </td><td class="mdescRight">Subtract two intervals. <br/></td></tr>
+<tr class="separator:a3d11133daa9a7d3c903d070293278f8f"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>The base of all graph nodes. </p>
+<div class="textblock"><p>Relative time interval. </p>
 </div><hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<li>tick_count.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00072.png b/doc/html/a00072.png
deleted file mode 100644
index 2f5ee7a..0000000
Binary files a/doc/html/a00072.png and /dev/null differ
diff --git a/doc/html/a00073.html b/doc/html/a00073.html
index 36a12f4..219dc19 100644
--- a/doc/html/a00073.html
+++ b/doc/html/a00073.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::internal::tbb_thread_v3::id Class Reference</title>
+<title>tbb::invalid_multiple_scheduling Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,58 +33,46 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00164.html">tbb_thread_v3</a></li><li class="navelem"><a class="el" href="a00073.html">id</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00073.html">invalid_multiple_scheduling</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#friends">Friends</a> |
-<a href="a00420.html">List of all members</a>  </div>
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="a00317.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::internal::tbb_thread_v3::id Class Reference</div>  </div>
+<div class="title">tbb::invalid_multiple_scheduling Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
+
+<p>Exception for repeated scheduling of the same <a class="el" href="a00148.html">task_handle</a>.  
+ <a href="a00073.html#details">More...</a></p>
+
+<p><code>#include <tbb_exception.h></code></p>
+<div class="dynheader">
+Inheritance diagram for tbb::invalid_multiple_scheduling:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00073.png" usemap="#tbb::invalid_multiple_scheduling_map" alt=""/>
+  <map id="tbb::invalid_multiple_scheduling_map" name="tbb::invalid_multiple_scheduling_map">
+</map>
+ </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:aa08381fcad9d2adc0bf8fb009ad38366"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa08381fcad9d2adc0bf8fb009ad38366"></a>
-class </td><td class="memItemRight" valign="bottom"><b>tbb_thread_v3</b></td></tr>
-<tr class="separator:aa08381fcad9d2adc0bf8fb009ad38366"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1ffa9d9b2f7e18d73535b2879ba64ae0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1ffa9d9b2f7e18d73535b2879ba64ae0"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>operator==</b> (<a class="el" href="a00073.html">tbb_thread_v3::id</a> x, <a class="el" href="a00073.html">tbb_thread_v3::id</a> y) __TBB_NOEXCEPT(true)</td></tr>
-<tr class="separator:a1ffa9d9b2f7e18d73535b2879ba64ae0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3be52bbc6138f2d2180d89d588b5c404"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3be52bbc6138f2d2180d89d588b5c404"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>operator!=</b> (<a class="el" href="a00073.html">tbb_thread_v3::id</a> x, <a class="el" href="a00073.html">tbb_thread_v3::id</a> y) __TBB_NOEXCEPT(true)</td></tr>
-<tr class="separator:a3be52bbc6138f2d2180d89d588b5c404"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5cd4a67d579d3ea07557ce6a632bdff0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5cd4a67d579d3ea07557ce6a632bdff0"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>operator<</b> (<a class="el" href="a00073.html">tbb_thread_v3::id</a> x, <a class="el" href="a00073.html">tbb_thread_v3::id</a> y) __TBB_NOEXCEPT(true)</td></tr>
-<tr class="separator:a5cd4a67d579d3ea07557ce6a632bdff0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aaf358e695ce2c3bc64029bb69b6b7841"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaf358e695ce2c3bc64029bb69b6b7841"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>operator<=</b> (<a class="el" href="a00073.html">tbb_thread_v3::id</a> x, <a class="el" href="a00073.html">tbb_thread_v3::id</a> y) __TBB_NOEXCEPT(true)</td></tr>
-<tr class="separator:aaf358e695ce2c3bc64029bb69b6b7841"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad9277ffe4c9b7cdd4687d0cab4bf8cd8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad9277ffe4c9b7cdd4687d0cab4bf8cd8"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>operator></b> (<a class="el" href="a00073.html">tbb_thread_v3::id</a> x, <a class="el" href="a00073.html">tbb_thread_v3::id</a> y) __TBB_NOEXCEPT(true)</td></tr>
-<tr class="separator:ad9277ffe4c9b7cdd4687d0cab4bf8cd8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9f559c30c06931effca0ee4a351d8fff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9f559c30c06931effca0ee4a351d8fff"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>operator>=</b> (<a class="el" href="a00073.html">tbb_thread_v3::id</a> x, <a class="el" href="a00073.html">tbb_thread_v3::id</a> y) __TBB_NOEXCEPT(true)</td></tr>
-<tr class="separator:a9f559c30c06931effca0ee4a351d8fff"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8dcf9ef009469428dc3752f54240eb69"><td class="memTemplParams" colspan="2"><a class="anchor" id="a8dcf9ef009469428dc3752f54240eb69"></a>
-template<class charT , class traits > </td></tr>
-<tr class="memitem:a8dcf9ef009469428dc3752f54240eb69"><td class="memTemplItemLeft" align="right" valign="top">std::basic_ostream< charT, <br class="typebreak"/>
-traits > & </td><td class="memTemplItemRight" valign="bottom"><b>operator<<</b> (std::basic_ostream< charT, traits > &out, <a class="el" href="a00073.html">tbb_thread_v3::id</a> <a class="el" href="a00073.html">id</a>)</td></tr>
-<tr class="separator:a8dcf9ef009469428dc3752f54240eb69"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0a77bf86c87119e219bb508d787d97da"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0a77bf86c87119e219bb508d787d97da"></a>
-<a class="el" href="a00073.html">tbb_thread_v3::id</a> <br class="typebreak"/>
-__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><b>thread_get_id_v3</b> ()</td></tr>
-<tr class="separator:a0a77bf86c87119e219bb508d787d97da"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a602e4e959e7320daca2f31ea912a7538"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a602e4e959e7320daca2f31ea912a7538"></a>
+const char * </td><td class="memItemRight" valign="bottom"><b>what</b> () const __TBB_override  throw ()</td></tr>
+<tr class="separator:a602e4e959e7320daca2f31ea912a7538"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>tbb_thread.h</li>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Exception for repeated scheduling of the same <a class="el" href="a00148.html">task_handle</a>. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>tbb_exception.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00086.png b/doc/html/a00073.png
similarity index 100%
rename from doc/html/a00086.png
rename to doc/html/a00073.png
diff --git a/doc/html/a00074.html b/doc/html/a00074.html
index 58d72bf..2555187 100644
--- a/doc/html/a00074.html
+++ b/doc/html/a00074.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::improper_lock Class Reference</title>
+<title>tbb::flow::interface9::opencl_factory< DeviceFilter >::kernel Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,46 +33,51 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00074.html">improper_lock</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00091.html">opencl_factory</a></li><li class="navelem"><a class="el" href="a00074.html">kernel</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00319.html">List of all members</a>  </div>
+<a href="#friends">Friends</a> |
+<a href="a00332.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::improper_lock Class Reference</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_factory< DeviceFilter >::kernel Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Exception for PPL locks.  
- <a href="a00074.html#details">More...</a></p>
-
-<p><code>#include <tbb_exception.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::improper_lock:</div>
+Inheritance diagram for tbb::flow::interface9::opencl_factory< DeviceFilter >::kernel:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00074.png" usemap="#tbb::improper_lock_map" alt=""/>
-  <map id="tbb::improper_lock_map" name="tbb::improper_lock_map">
+  <img src="a00074.png" usemap="#tbb::flow::interface9::opencl_factory< DeviceFilter >::kernel_map" alt=""/>
+  <map id="tbb::flow::interface9::opencl_factory< DeviceFilter >::kernel_map" name="tbb::flow::interface9::opencl_factory< DeviceFilter >::kernel_map">
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a71847061d0e5bef413e28a9031e1f07e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a71847061d0e5bef413e28a9031e1f07e"></a>
-const char * </td><td class="memItemRight" valign="bottom"><b>what</b> () const   throw ()</td></tr>
-<tr class="separator:a71847061d0e5bef413e28a9031e1f07e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acd2ea1fd04a1c93194135e80366e39b5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acd2ea1fd04a1c93194135e80366e39b5"></a>
+ </td><td class="memItemRight" valign="bottom"><b>kernel</b> (const <a class="el" href="a00074.html">kernel</a> &k)</td></tr>
+<tr class="separator:acd2ea1fd04a1c93194135e80366e39b5"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a357c187838aa075f23be7b8c86ddcbd3"><td class="memTemplParams" colspan="2"><a class="anchor" id="a357c187838aa075f23be7b8c86ddcbd3"></a>
+template<typename DeviceFilter_ > </td></tr>
+<tr class="memitem:a357c187838aa075f23be7b8c86ddcbd3"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>opencl_factory</b></td></tr>
+<tr class="separator:a357c187838aa075f23be7b8c86ddcbd3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a083a3933f9cd414d4b5cabb4c5c3ad7c"><td class="memTemplParams" colspan="2"><a class="anchor" id="a083a3933f9cd414d4b5cabb4c5c3ad7c"></a>
+template<typename Factory > </td></tr>
+<tr class="memitem:a083a3933f9cd414d4b5cabb4c5c3ad7c"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>opencl_program</b></td></tr>
+<tr class="separator:a083a3933f9cd414d4b5cabb4c5c3ad7c"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Exception for PPL locks. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>tbb_exception.h</li>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>flow_graph_opencl_node.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00074.png b/doc/html/a00074.png
index 7f4f557..01ca18a 100644
Binary files a/doc/html/a00074.png and b/doc/html/a00074.png differ
diff --git a/doc/html/a00075.html b/doc/html/a00075.html
index b7993c3..1e73640 100644
--- a/doc/html/a00075.html
+++ b/doc/html/a00075.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 > Class Template Reference</title>
+<title>tbb::flow::interface9::limiter_node< T > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,63 +33,21 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00075.html">indexer_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00075.html">limiter_node</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="summary">
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="a00352.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 > Class Template Reference</div>  </div>
+<div class="title">tbb::flow::interface9::limiter_node< T > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00075.png" usemap="#tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 >_map" alt=""/>
-  <map id="tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 >_map" name="tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 >_map">
-</map>
- </div></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:aa03aeff58b09fa3c2a13558681ea21fa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa03aeff58b09fa3c2a13558681ea21fa"></a>
-typedef tuple< T0, T1, T2, T3, <br class="typebreak"/>
-T4, T5, T6, T7, T8, T9 > </td><td class="memItemRight" valign="bottom"><b>InputTuple</b></td></tr>
-<tr class="separator:aa03aeff58b09fa3c2a13558681ea21fa"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a501735482a834c96f2bfd0eb4f25f098"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a501735482a834c96f2bfd0eb4f25f098"></a>
-typedef internal::tagged_msg<br class="typebreak"/>
-< size_t, T0, T1, T2, T3, T4, <br class="typebreak"/>
-T5, T6, T7, T8, T9 > </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:a501735482a834c96f2bfd0eb4f25f098"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a52e8f318e1e746e442789d697f43c2d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a52e8f318e1e746e442789d697f43c2d5"></a>
-typedef <br class="typebreak"/>
-internal::unfolded_indexer_node<br class="typebreak"/>
-< InputTuple > </td><td class="memItemRight" valign="bottom"><b>unfolded_type</b></td></tr>
-<tr class="separator:a52e8f318e1e746e442789d697f43c2d5"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:adb3dca9548b0cc44d39ad49a98580be8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adb3dca9548b0cc44d39ad49a98580be8"></a>
- </td><td class="memItemRight" valign="bottom"><b>indexer_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:adb3dca9548b0cc44d39ad49a98580be8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5a30f9c453e390e68a0d5388218dda7e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5a30f9c453e390e68a0d5388218dda7e"></a>
- </td><td class="memItemRight" valign="bottom"><b>indexer_node</b> (const <a class="el" href="a00075.html">indexer_node</a> &other)</td></tr>
-<tr class="separator:a5a30f9c453e390e68a0d5388218dda7e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3fbf113cf2affa15858afc2bbc36cd01"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3fbf113cf2affa15858afc2bbc36cd01"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:a3fbf113cf2affa15858afc2bbc36cd01"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<li><a class="el" href="a00188.html">flow_graph.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00075.png b/doc/html/a00075.png
deleted file mode 100644
index 51e8de2..0000000
Binary files a/doc/html/a00075.png and /dev/null differ
diff --git a/doc/html/a00076.html b/doc/html/a00076.html
index 4ec17d9..d8393fd 100644
--- a/doc/html/a00076.html
+++ b/doc/html/a00076.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::indexer_node< T0 > Class Template Reference</title>
+<title>tbb::interface6::memory_pool< Alloc > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,61 +33,54 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00076.html">indexer_node< T0 ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00076.html">memory_pool</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00353.html">List of all members</a>  </div>
+<a href="a00384.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::indexer_node< T0 > Class Template Reference</div>  </div>
+<div class="title">tbb::interface6::memory_pool< Alloc > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
+
+<p>Thread-safe growable pool allocator for variable-size requests.  
+ <a href="a00076.html#details">More...</a></p>
+
+<p><code>#include <memory_pool.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::indexer_node< T0 >:</div>
+Inheritance diagram for tbb::interface6::memory_pool< Alloc >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00076.png" usemap="#tbb::flow::interface7::indexer_node< T0 >_map" alt=""/>
-  <map id="tbb::flow::interface7::indexer_node< T0 >_map" name="tbb::flow::interface7::indexer_node< T0 >_map">
+  <img src="a00076.png" usemap="#tbb::interface6::memory_pool< Alloc >_map" alt=""/>
+  <map id="tbb::interface6::memory_pool< Alloc >_map" name="tbb::interface6::memory_pool< Alloc >_map">
 </map>
  </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:aa370ac336b849cad62ee587b615176dd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa370ac336b849cad62ee587b615176dd"></a>
-typedef tuple< T0 > </td><td class="memItemRight" valign="bottom"><b>InputTuple</b></td></tr>
-<tr class="separator:aa370ac336b849cad62ee587b615176dd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae5188977d7e9ea063d72fd9076655e89"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae5188977d7e9ea063d72fd9076655e89"></a>
-typedef internal::tagged_msg<br class="typebreak"/>
-< size_t, T0 > </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:ae5188977d7e9ea063d72fd9076655e89"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a19ea083d7b75d24ea588663b6d930592"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a19ea083d7b75d24ea588663b6d930592"></a>
-typedef <br class="typebreak"/>
-internal::unfolded_indexer_node<br class="typebreak"/>
-< InputTuple > </td><td class="memItemRight" valign="bottom"><b>unfolded_type</b></td></tr>
-<tr class="separator:a19ea083d7b75d24ea588663b6d930592"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a76587038b89e9483e486c5a3b1fa4dd8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a76587038b89e9483e486c5a3b1fa4dd8"></a>
- </td><td class="memItemRight" valign="bottom"><b>indexer_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a76587038b89e9483e486c5a3b1fa4dd8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa2b3a2580e67582250cf1ef9f32f92d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa2b3a2580e67582250cf1ef9f32f92d4"></a>
- </td><td class="memItemRight" valign="bottom"><b>indexer_node</b> (const <a class="el" href="a00075.html">indexer_node</a> &other)</td></tr>
-<tr class="separator:aa2b3a2580e67582250cf1ef9f32f92d4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1e8206427ce9adf2f6b88991e20fcca3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e8206427ce9adf2f6b88991e20fcca3"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:a1e8206427ce9adf2f6b88991e20fcca3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af4c36829a159eac04d630ac5a99b9354"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af4c36829a159eac04d630ac5a99b9354"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00076.html#af4c36829a159eac04d630ac5a99b9354">memory_pool</a> (const Alloc &src=Alloc())</td></tr>
+<tr class="memdesc:af4c36829a159eac04d630ac5a99b9354"><td class="mdescLeft"> </td><td class="mdescRight">construct pool with underlying allocator <br/></td></tr>
+<tr class="separator:af4c36829a159eac04d630ac5a99b9354"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad2c7645b39b7280b1b3cf393d05fbaf7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad2c7645b39b7280b1b3cf393d05fbaf7"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00076.html#ad2c7645b39b7280b1b3cf393d05fbaf7">~memory_pool</a> ()</td></tr>
+<tr class="memdesc:ad2c7645b39b7280b1b3cf393d05fbaf7"><td class="mdescLeft"> </td><td class="mdescRight">destroy pool <br/></td></tr>
+<tr class="separator:ad2c7645b39b7280b1b3cf393d05fbaf7"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><h3>template<typename Alloc><br/>
+class tbb::interface6::memory_pool< Alloc ></h3>
+
+<p>Thread-safe growable pool allocator for variable-size requests. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00193.html">memory_pool.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00076.png b/doc/html/a00076.png
index 1cddb63..040c525 100644
Binary files a/doc/html/a00076.png and b/doc/html/a00076.png differ
diff --git a/doc/html/a00077.html b/doc/html/a00077.html
index ffc57c4..4a5f467 100644
--- a/doc/html/a00077.html
+++ b/doc/html/a00077.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::indexer_node< T0, T1 > Class Template Reference</title>
+<title>tbb::interface6::memory_pool_allocator< T, P > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,61 +33,144 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00077.html">indexer_node< T0, T1 ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00077.html">memory_pool_allocator</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#nested-classes">Classes</a> |
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00354.html">List of all members</a>  </div>
+<a href="#pro-types">Protected Types</a> |
+<a href="#pro-attribs">Protected Attributes</a> |
+<a href="#friends">Friends</a> |
+<a href="a00380.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::indexer_node< T0, T1 > Class Template Reference</div>  </div>
+<div class="title">tbb::interface6::memory_pool_allocator< T, P > Class Template Reference<div class="ingroups"><a class="el" href="a00254.html">Memory Allocation</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::indexer_node< T0, T1 >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00077.png" usemap="#tbb::flow::interface7::indexer_node< T0, T1 >_map" alt=""/>
-  <map id="tbb::flow::interface7::indexer_node< T0, T1 >_map" name="tbb::flow::interface7::indexer_node< T0, T1 >_map">
-</map>
- </div></div>
+
+<p>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  
+ <a href="a00077.html#details">More...</a></p>
+
+<p><code>#include <memory_pool.h></code></p>
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00116.html">rebind</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:a4a65bc98b3484d66d07de7689af675e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a65bc98b3484d66d07de7689af675e8"></a>
-typedef tuple< T0, T1 > </td><td class="memItemRight" valign="bottom"><b>InputTuple</b></td></tr>
-<tr class="separator:a4a65bc98b3484d66d07de7689af675e8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a29b2f415ee274f7ce5289d0c9d03da96"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a29b2f415ee274f7ce5289d0c9d03da96"></a>
-typedef internal::tagged_msg<br class="typebreak"/>
-< size_t, T0, T1 > </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:a29b2f415ee274f7ce5289d0c9d03da96"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:add3df69d677bd66a17dafec4e842725a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add3df69d677bd66a17dafec4e842725a"></a>
+<tr class="memitem:a6202050e0edbded0b0534ea4be9547e0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6202050e0edbded0b0534ea4be9547e0"></a>
 typedef <br class="typebreak"/>
-internal::unfolded_indexer_node<br class="typebreak"/>
-< InputTuple > </td><td class="memItemRight" valign="bottom"><b>unfolded_type</b></td></tr>
-<tr class="separator:add3df69d677bd66a17dafec4e842725a"><td class="memSeparator" colspan="2"> </td></tr>
+tbb::internal::allocator_type<br class="typebreak"/>
+< T >::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+<tr class="separator:a6202050e0edbded0b0534ea4be9547e0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a07450f397df1af8096f31bfa8f2e1722"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a07450f397df1af8096f31bfa8f2e1722"></a>
+typedef value_type * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+<tr class="separator:a07450f397df1af8096f31bfa8f2e1722"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a972521ed466cc8140d386331a25e895a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a972521ed466cc8140d386331a25e895a"></a>
+typedef const value_type * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+<tr class="separator:a972521ed466cc8140d386331a25e895a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a83b91759effc3a452fc565ac3bb45613"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a83b91759effc3a452fc565ac3bb45613"></a>
+typedef value_type & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+<tr class="separator:a83b91759effc3a452fc565ac3bb45613"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a15abe537e2dad4132c956c08d9d0a27e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15abe537e2dad4132c956c08d9d0a27e"></a>
+typedef const value_type & </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
+<tr class="separator:a15abe537e2dad4132c956c08d9d0a27e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac20767f3b7a8fcdc1aff0b0874245d3a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac20767f3b7a8fcdc1aff0b0874245d3a"></a>
+typedef size_t </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
+<tr class="separator:ac20767f3b7a8fcdc1aff0b0874245d3a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a23267e855e2427b401b99ce4b547f83e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a23267e855e2427b401b99ce4b547f83e"></a>
+typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
+<tr class="separator:a23267e855e2427b401b99ce4b547f83e"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a20fa956b588bbf778633bdc5b16ea2f2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a20fa956b588bbf778633bdc5b16ea2f2"></a>
- </td><td class="memItemRight" valign="bottom"><b>indexer_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a20fa956b588bbf778633bdc5b16ea2f2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad3ab0a8aec4a116ad31b8f809ee55080"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3ab0a8aec4a116ad31b8f809ee55080"></a>
- </td><td class="memItemRight" valign="bottom"><b>indexer_node</b> (const <a class="el" href="a00075.html">indexer_node</a> &other)</td></tr>
-<tr class="separator:ad3ab0a8aec4a116ad31b8f809ee55080"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a360bff898006bd5a72e3f70babc26c77"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a360bff898006bd5a72e3f70babc26c77"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:a360bff898006bd5a72e3f70babc26c77"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a384be31e682a3b86b5b11e635232c9c5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a384be31e682a3b86b5b11e635232c9c5"></a>
+ </td><td class="memItemRight" valign="bottom"><b>memory_pool_allocator</b> (pool_type &pool)  throw ()</td></tr>
+<tr class="separator:a384be31e682a3b86b5b11e635232c9c5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa2b4cf16b566e40ddb196c371e5ae96e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa2b4cf16b566e40ddb196c371e5ae96e"></a>
+ </td><td class="memItemRight" valign="bottom"><b>memory_pool_allocator</b> (const <a class="el" href="a00077.html">memory_pool_allocator</a> &src)  throw ()</td></tr>
+<tr class="separator:aa2b4cf16b566e40ddb196c371e5ae96e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad32ad8245399fbdb38a0a41e912d86d9"><td class="memTemplParams" colspan="2"><a class="anchor" id="ad32ad8245399fbdb38a0a41e912d86d9"></a>
+template<typename U > </td></tr>
+<tr class="memitem:ad32ad8245399fbdb38a0a41e912d86d9"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>memory_pool_allocator</b> (const <a class="el" href="a00077.html">memory_pool_allocator</a>< U, P > &src)  throw ()</td></tr>
+<tr class="separator:ad32ad8245399fbdb38a0a41e912d86d9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a55653a8c539901be6ca24a120a5d7b72"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a55653a8c539901be6ca24a120a5d7b72"></a>
+pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (reference x) const </td></tr>
+<tr class="separator:a55653a8c539901be6ca24a120a5d7b72"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8a3e4236f6e1266f126dac557906ce2c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8a3e4236f6e1266f126dac557906ce2c"></a>
+const_pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (const_reference x) const </td></tr>
+<tr class="separator:a8a3e4236f6e1266f126dac557906ce2c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a10b9888883a3dbd66e87c4a7f874ef28"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a10b9888883a3dbd66e87c4a7f874ef28"></a>
+pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00077.html#a10b9888883a3dbd66e87c4a7f874ef28">allocate</a> (size_type n, const void *=0)</td></tr>
+<tr class="memdesc:a10b9888883a3dbd66e87c4a7f874ef28"><td class="mdescLeft"> </td><td class="mdescRight">Allocate space for n objects. <br/></td></tr>
+<tr class="separator:a10b9888883a3dbd66e87c4a7f874ef28"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9fcf288f2d653972d1bdc0c65abebed4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9fcf288f2d653972d1bdc0c65abebed4"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00077.html#a9fcf288f2d653972d1bdc0c65abebed4">deallocate</a> (pointer p, size_type)</td></tr>
+<tr class="memdesc:a9fcf288f2d653972d1bdc0c65abebed4"><td class="mdescLeft"> </td><td class="mdescRight">Free previously allocated block of memory. <br/></td></tr>
+<tr class="separator:a9fcf288f2d653972d1bdc0c65abebed4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2bded8e3fb2cec32b48771e7a1bbb838"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2bded8e3fb2cec32b48771e7a1bbb838"></a>
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00077.html#a2bded8e3fb2cec32b48771e7a1bbb838">max_size</a> () const   throw ()</td></tr>
+<tr class="memdesc:a2bded8e3fb2cec32b48771e7a1bbb838"><td class="mdescLeft"> </td><td class="mdescRight">Largest value for which method allocate might succeed. <br/></td></tr>
+<tr class="separator:a2bded8e3fb2cec32b48771e7a1bbb838"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac51b34ef90ecabdd2e0483e25603a15b"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac51b34ef90ecabdd2e0483e25603a15b"></a>
+template<typename U , typename... Args> </td></tr>
+<tr class="memitem:ac51b34ef90ecabdd2e0483e25603a15b"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00077.html#ac51b34ef90ecabdd2e0483e25603a15b">construct</a> (U *p, Args &&...args)</td></tr>
+<tr class="memdesc:ac51b34ef90ecabdd2e0483e25603a15b"><td class="mdescLeft"> </td><td class="mdescRight">Copy-construct value at location pointed to by p. <br/></td></tr>
+<tr class="separator:ac51b34ef90ecabdd2e0483e25603a15b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8be8f1b38d4b1b6bea2d83f611bf66e7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8be8f1b38d4b1b6bea2d83f611bf66e7"></a>
+void </td><td class="memItemRight" valign="bottom"><b>construct</b> (pointer p, value_type &&value)</td></tr>
+<tr class="separator:a8be8f1b38d4b1b6bea2d83f611bf66e7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:affac76f7742c4d8ea6345e0aad82792a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="affac76f7742c4d8ea6345e0aad82792a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>construct</b> (pointer p, const value_type &value)</td></tr>
+<tr class="separator:affac76f7742c4d8ea6345e0aad82792a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2223b6469f88aadc432a4b3f88728d0f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2223b6469f88aadc432a4b3f88728d0f"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00077.html#a2223b6469f88aadc432a4b3f88728d0f">destroy</a> (pointer p)</td></tr>
+<tr class="memdesc:a2223b6469f88aadc432a4b3f88728d0f"><td class="mdescLeft"> </td><td class="mdescRight">Destroy value at location pointed to by p. <br/></td></tr>
+<tr class="separator:a2223b6469f88aadc432a4b3f88728d0f"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-types"></a>
+Protected Types</h2></td></tr>
+<tr class="memitem:aecd858782faee0fb5fa707671cfc49aa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aecd858782faee0fb5fa707671cfc49aa"></a>
+typedef P </td><td class="memItemRight" valign="bottom"><b>pool_type</b></td></tr>
+<tr class="separator:aecd858782faee0fb5fa707671cfc49aa"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:a0fbd737811d556f1d2898d3722e85f32"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0fbd737811d556f1d2898d3722e85f32"></a>
+pool_type * </td><td class="memItemRight" valign="bottom"><b>my_pool</b></td></tr>
+<tr class="separator:a0fbd737811d556f1d2898d3722e85f32"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a6c34ee2e5a57845f050b507cc516a005"><td class="memTemplParams" colspan="2"><a class="anchor" id="a6c34ee2e5a57845f050b507cc516a005"></a>
+template<typename U , typename R > </td></tr>
+<tr class="memitem:a6c34ee2e5a57845f050b507cc516a005"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>memory_pool_allocator</b></td></tr>
+<tr class="separator:a6c34ee2e5a57845f050b507cc516a005"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac8c26a64f4e012f2a9cf6035cf029905"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac8c26a64f4e012f2a9cf6035cf029905"></a>
+template<typename V , typename U , typename R > </td></tr>
+<tr class="memitem:ac8c26a64f4e012f2a9cf6035cf029905"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00077.html">memory_pool_allocator</a>< V, R > &a, const <a class="el" href="a00077.html">memory_pool_allocator</a>< U, R > &b)</td></tr>
+<tr class="separator:ac8c26a64f4e012f2a9cf6035cf029905"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2f7230e5bc817e7512e18b5311b3371b"><td class="memTemplParams" colspan="2"><a class="anchor" id="a2f7230e5bc817e7512e18b5311b3371b"></a>
+template<typename V , typename U , typename R > </td></tr>
+<tr class="memitem:a2f7230e5bc817e7512e18b5311b3371b"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00077.html">memory_pool_allocator</a>< V, R > &a, const <a class="el" href="a00077.html">memory_pool_allocator</a>< U, R > &b)</td></tr>
+<tr class="separator:a2f7230e5bc817e7512e18b5311b3371b"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><h3>template<typename T, typename P = internal::pool_base><br/>
+class tbb::interface6::memory_pool_allocator< T, P ></h3>
+
+<p>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00193.html">memory_pool.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00077.png b/doc/html/a00077.png
deleted file mode 100644
index f41752a..0000000
Binary files a/doc/html/a00077.png and /dev/null differ
diff --git a/doc/html/a00078.html b/doc/html/a00078.html
index c63d2f8..bf58ddf 100644
--- a/doc/html/a00078.html
+++ b/doc/html/a00078.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::indexer_node< T0, T1, T2 > Class Template Reference</title>
+<title>tbb::interface6::memory_pool_allocator< void, P > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,61 +33,93 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00078.html">indexer_node< T0, T1, T2 ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00078.html">memory_pool_allocator< void, P ></a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#nested-classes">Classes</a> |
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00355.html">List of all members</a>  </div>
+<a href="#pro-attribs">Protected Attributes</a> |
+<a href="#friends">Friends</a> |
+<a href="a00382.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::indexer_node< T0, T1, T2 > Class Template Reference</div>  </div>
+<div class="title">tbb::interface6::memory_pool_allocator< void, P > Class Template Reference<div class="ingroups"><a class="el" href="a00254.html">Memory Allocation</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::indexer_node< T0, T1, T2 >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00078.png" usemap="#tbb::flow::interface7::indexer_node< T0, T1, T2 >_map" alt=""/>
-  <map id="tbb::flow::interface7::indexer_node< T0, T1, T2 >_map" name="tbb::flow::interface7::indexer_node< T0, T1, T2 >_map">
-</map>
- </div></div>
+
+<p>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  
+ <a href="a00078.html#details">More...</a></p>
+
+<p><code>#include <memory_pool.h></code></p>
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00118.html">rebind</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:aa576ca04a627dbd1ea3ae9042e454b81"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa576ca04a627dbd1ea3ae9042e454b81"></a>
-typedef tuple< T0, T1, T2 > </td><td class="memItemRight" valign="bottom"><b>InputTuple</b></td></tr>
-<tr class="separator:aa576ca04a627dbd1ea3ae9042e454b81"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7f36c30b2fb71fb62985b7d21aca53a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f36c30b2fb71fb62985b7d21aca53a2"></a>
-typedef internal::tagged_msg<br class="typebreak"/>
-< size_t, T0, T1, T2 > </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:a7f36c30b2fb71fb62985b7d21aca53a2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af4b2b08bfc3d99eef385aaae3a4e9200"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af4b2b08bfc3d99eef385aaae3a4e9200"></a>
-typedef <br class="typebreak"/>
-internal::unfolded_indexer_node<br class="typebreak"/>
-< InputTuple > </td><td class="memItemRight" valign="bottom"><b>unfolded_type</b></td></tr>
-<tr class="separator:af4b2b08bfc3d99eef385aaae3a4e9200"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa4a3be261ace6f19c3c40ef2503c4984"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4a3be261ace6f19c3c40ef2503c4984"></a>
+typedef P </td><td class="memItemRight" valign="bottom"><b>pool_type</b></td></tr>
+<tr class="separator:aa4a3be261ace6f19c3c40ef2503c4984"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afb58c3e8f2e0a8f9152eae641ee420fa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afb58c3e8f2e0a8f9152eae641ee420fa"></a>
+typedef void * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+<tr class="separator:afb58c3e8f2e0a8f9152eae641ee420fa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5e53158493ed0d617460e8dd6534a525"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e53158493ed0d617460e8dd6534a525"></a>
+typedef const void * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+<tr class="separator:a5e53158493ed0d617460e8dd6534a525"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a676a2c2649d6ffc45466d94555d71df2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a676a2c2649d6ffc45466d94555d71df2"></a>
+typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+<tr class="separator:a676a2c2649d6ffc45466d94555d71df2"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:aed64c24dd1fe31e6786426992f3c40d1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed64c24dd1fe31e6786426992f3c40d1"></a>
- </td><td class="memItemRight" valign="bottom"><b>indexer_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:aed64c24dd1fe31e6786426992f3c40d1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3d807664352eb615a22a1337b9ae54f6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d807664352eb615a22a1337b9ae54f6"></a>
- </td><td class="memItemRight" valign="bottom"><b>indexer_node</b> (const <a class="el" href="a00075.html">indexer_node</a> &other)</td></tr>
-<tr class="separator:a3d807664352eb615a22a1337b9ae54f6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a41e9d8b9c9246662b51250f70f36b3d2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a41e9d8b9c9246662b51250f70f36b3d2"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:a41e9d8b9c9246662b51250f70f36b3d2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8e697e2d03e8f69de1728409bec4f7b5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8e697e2d03e8f69de1728409bec4f7b5"></a>
+ </td><td class="memItemRight" valign="bottom"><b>memory_pool_allocator</b> (pool_type &pool)  throw ()</td></tr>
+<tr class="separator:a8e697e2d03e8f69de1728409bec4f7b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a001103c81ba25e645305f19a82db2e4a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a001103c81ba25e645305f19a82db2e4a"></a>
+ </td><td class="memItemRight" valign="bottom"><b>memory_pool_allocator</b> (const <a class="el" href="a00077.html">memory_pool_allocator</a> &src)  throw ()</td></tr>
+<tr class="separator:a001103c81ba25e645305f19a82db2e4a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8d3db3082c1fa40ccb3997626f61e61e"><td class="memTemplParams" colspan="2"><a class="anchor" id="a8d3db3082c1fa40ccb3997626f61e61e"></a>
+template<typename U > </td></tr>
+<tr class="memitem:a8d3db3082c1fa40ccb3997626f61e61e"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>memory_pool_allocator</b> (const <a class="el" href="a00077.html">memory_pool_allocator</a>< U, P > &src)  throw ()</td></tr>
+<tr class="separator:a8d3db3082c1fa40ccb3997626f61e61e"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:a1e497d3d88dcb063ab6594eb4ad3dc35"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e497d3d88dcb063ab6594eb4ad3dc35"></a>
+pool_type * </td><td class="memItemRight" valign="bottom"><b>my_pool</b></td></tr>
+<tr class="separator:a1e497d3d88dcb063ab6594eb4ad3dc35"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a6c34ee2e5a57845f050b507cc516a005"><td class="memTemplParams" colspan="2"><a class="anchor" id="a6c34ee2e5a57845f050b507cc516a005"></a>
+template<typename U , typename R > </td></tr>
+<tr class="memitem:a6c34ee2e5a57845f050b507cc516a005"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>memory_pool_allocator</b></td></tr>
+<tr class="separator:a6c34ee2e5a57845f050b507cc516a005"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac8c26a64f4e012f2a9cf6035cf029905"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac8c26a64f4e012f2a9cf6035cf029905"></a>
+template<typename V , typename U , typename R > </td></tr>
+<tr class="memitem:ac8c26a64f4e012f2a9cf6035cf029905"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00077.html">memory_pool_allocator</a>< V, R > &a, const <a class="el" href="a00077.html">memory_pool_allocator</a>< U, R > &b)</td></tr>
+<tr class="separator:ac8c26a64f4e012f2a9cf6035cf029905"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2f7230e5bc817e7512e18b5311b3371b"><td class="memTemplParams" colspan="2"><a class="anchor" id="a2f7230e5bc817e7512e18b5311b3371b"></a>
+template<typename V , typename U , typename R > </td></tr>
+<tr class="memitem:a2f7230e5bc817e7512e18b5311b3371b"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00077.html">memory_pool_allocator</a>< V, R > &a, const <a class="el" href="a00077.html">memory_pool_allocator</a>< U, R > &b)</td></tr>
+<tr class="separator:a2f7230e5bc817e7512e18b5311b3371b"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><h3>template<typename P><br/>
+class tbb::interface6::memory_pool_allocator< void, P ></h3>
+
+<p>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00193.html">memory_pool.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00078.png b/doc/html/a00078.png
deleted file mode 100644
index effe6ee..0000000
Binary files a/doc/html/a00078.png and /dev/null differ
diff --git a/doc/html/a00079.html b/doc/html/a00079.html
index 7f9ca2d..312b24a 100644
--- a/doc/html/a00079.html
+++ b/doc/html/a00079.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::indexer_node< T0, T1, T2, T3 > Class Template Reference</title>
+<title>rml::MemPoolPolicy Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,61 +33,63 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00079.html">indexer_node< T0, T1, T2, T3 ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00230.html">rml</a></li><li class="navelem"><a class="el" href="a00079.html">MemPoolPolicy</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00356.html">List of all members</a>  </div>
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="a00260.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::indexer_node< T0, T1, T2, T3 > Class Template Reference</div>  </div>
+<div class="title">rml::MemPoolPolicy Struct Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::indexer_node< T0, T1, T2, T3 >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00079.png" usemap="#tbb::flow::interface7::indexer_node< T0, T1, T2, T3 >_map" alt=""/>
-  <map id="tbb::flow::interface7::indexer_node< T0, T1, T2, T3 >_map" name="tbb::flow::interface7::indexer_node< T0, T1, T2, T3 >_map">
-</map>
- </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:a527994fe939c7fab095ed4052d609862"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a527994fe939c7fab095ed4052d609862"></a>
-typedef tuple< T0, T1, T2, T3 > </td><td class="memItemRight" valign="bottom"><b>InputTuple</b></td></tr>
-<tr class="separator:a527994fe939c7fab095ed4052d609862"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad0aed249bd4a9579bf4f4b2d8824b682"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad0aed249bd4a9579bf4f4b2d8824b682"></a>
-typedef internal::tagged_msg<br class="typebreak"/>
-< size_t, T0, T1, T2, T3 > </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:ad0aed249bd4a9579bf4f4b2d8824b682"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6ff8d78ad7e310ed8b566ac9d9f7257a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6ff8d78ad7e310ed8b566ac9d9f7257a"></a>
-typedef <br class="typebreak"/>
-internal::unfolded_indexer_node<br class="typebreak"/>
-< InputTuple > </td><td class="memItemRight" valign="bottom"><b>unfolded_type</b></td></tr>
-<tr class="separator:a6ff8d78ad7e310ed8b566ac9d9f7257a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afec5c1b4036a54bbae8678e469e5b2bc"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom">{ <b>TBBMALLOC_POOL_VERSION</b> = 1
+ }</td></tr>
+<tr class="separator:afec5c1b4036a54bbae8678e469e5b2bc"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a57797ab933fa0143373d49c236cc5a5a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a57797ab933fa0143373d49c236cc5a5a"></a>
- </td><td class="memItemRight" valign="bottom"><b>indexer_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a57797ab933fa0143373d49c236cc5a5a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aeca6e34af6d0daffa6b5af075f9de6da"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeca6e34af6d0daffa6b5af075f9de6da"></a>
- </td><td class="memItemRight" valign="bottom"><b>indexer_node</b> (const <a class="el" href="a00075.html">indexer_node</a> &other)</td></tr>
-<tr class="separator:aeca6e34af6d0daffa6b5af075f9de6da"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8a24420d4825a39b38198d811275a615"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8a24420d4825a39b38198d811275a615"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:a8a24420d4825a39b38198d811275a615"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a73e485e36709acc04a9448eaa95bb666"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a73e485e36709acc04a9448eaa95bb666"></a>
+ </td><td class="memItemRight" valign="bottom"><b>MemPoolPolicy</b> (rawAllocType pAlloc_, rawFreeType pFree_, size_t granularity_=0, bool fixedPool_=false, bool keepAllMemory_=false)</td></tr>
+<tr class="separator:a73e485e36709acc04a9448eaa95bb666"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a0935ae38d632881a6d6cccb675cb6f27"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0935ae38d632881a6d6cccb675cb6f27"></a>
+rawAllocType </td><td class="memItemRight" valign="bottom"><b>pAlloc</b></td></tr>
+<tr class="separator:a0935ae38d632881a6d6cccb675cb6f27"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a221c0a53496a391c60d2f452fc9d76ae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a221c0a53496a391c60d2f452fc9d76ae"></a>
+rawFreeType </td><td class="memItemRight" valign="bottom"><b>pFree</b></td></tr>
+<tr class="separator:a221c0a53496a391c60d2f452fc9d76ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac91fffeccd1f4255bbb5719f25785bce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac91fffeccd1f4255bbb5719f25785bce"></a>
+size_t </td><td class="memItemRight" valign="bottom"><b>granularity</b></td></tr>
+<tr class="separator:ac91fffeccd1f4255bbb5719f25785bce"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaea7ca6973332913c839073822352046"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaea7ca6973332913c839073822352046"></a>
+int </td><td class="memItemRight" valign="bottom"><b>version</b></td></tr>
+<tr class="separator:aaea7ca6973332913c839073822352046"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab00be5199577e8dd87f25c867a488aaf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab00be5199577e8dd87f25c867a488aaf"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><b>fixedPool</b>: 1</td></tr>
+<tr class="separator:ab00be5199577e8dd87f25c867a488aaf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afc2ea43e020580853224fa430736d38a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc2ea43e020580853224fa430736d38a"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><b>keepAllMemory</b>: 1</td></tr>
+<tr class="separator:afc2ea43e020580853224fa430736d38a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2fe8bde7ec5c0f347f5c8e648c92c612"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2fe8bde7ec5c0f347f5c8e648c92c612"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><b>reserved</b>: 30</td></tr>
+<tr class="separator:a2fe8bde7ec5c0f347f5c8e648c92c612"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00212.html">scalable_allocator.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00079.png b/doc/html/a00079.png
deleted file mode 100644
index 81b31c5..0000000
Binary files a/doc/html/a00079.png and /dev/null differ
diff --git a/doc/html/a00080.html b/doc/html/a00080.html
index 31f83f2..e033bed 100644
--- a/doc/html/a00080.html
+++ b/doc/html/a00080.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4 > Class Template Reference</title>
+<title>tbb::missing_wait Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,61 +33,46 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00080.html">indexer_node< T0, T1, T2, T3, T4 ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00080.html">missing_wait</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00357.html">List of all members</a>  </div>
+<a href="a00316.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4 > Class Template Reference</div>  </div>
+<div class="title">tbb::missing_wait Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
+
+<p>Exception for missing wait on <a class="el" href="a00142.html">structured_task_group</a>.  
+ <a href="a00080.html#details">More...</a></p>
+
+<p><code>#include <tbb_exception.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4 >:</div>
+Inheritance diagram for tbb::missing_wait:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00080.png" usemap="#tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4 >_map" alt=""/>
-  <map id="tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4 >_map" name="tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4 >_map">
+  <img src="a00080.png" usemap="#tbb::missing_wait_map" alt=""/>
+  <map id="tbb::missing_wait_map" name="tbb::missing_wait_map">
 </map>
  </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:ae9798eaf903fa100e31a12dea412d573"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae9798eaf903fa100e31a12dea412d573"></a>
-typedef tuple< T0, T1, T2, T3, T4 > </td><td class="memItemRight" valign="bottom"><b>InputTuple</b></td></tr>
-<tr class="separator:ae9798eaf903fa100e31a12dea412d573"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af96acdaef97af6acca15e1f930cf8a97"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af96acdaef97af6acca15e1f930cf8a97"></a>
-typedef internal::tagged_msg<br class="typebreak"/>
-< size_t, T0, T1, T2, T3, T4 > </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:af96acdaef97af6acca15e1f930cf8a97"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab5ad5dede53da29f7643c24e5d47fd8c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5ad5dede53da29f7643c24e5d47fd8c"></a>
-typedef <br class="typebreak"/>
-internal::unfolded_indexer_node<br class="typebreak"/>
-< InputTuple > </td><td class="memItemRight" valign="bottom"><b>unfolded_type</b></td></tr>
-<tr class="separator:ab5ad5dede53da29f7643c24e5d47fd8c"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:ab5395c9d6896408234ec97c030bb014b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5395c9d6896408234ec97c030bb014b"></a>
- </td><td class="memItemRight" valign="bottom"><b>indexer_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:ab5395c9d6896408234ec97c030bb014b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aee0ef34819a584da59a913ade2c6c30f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee0ef34819a584da59a913ade2c6c30f"></a>
- </td><td class="memItemRight" valign="bottom"><b>indexer_node</b> (const <a class="el" href="a00075.html">indexer_node</a> &other)</td></tr>
-<tr class="separator:aee0ef34819a584da59a913ade2c6c30f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa1f6d3cdb2ae66b44f11abf28deb74b1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa1f6d3cdb2ae66b44f11abf28deb74b1"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:aa1f6d3cdb2ae66b44f11abf28deb74b1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a04602f54c8ae5d83a5410ebc0a5adf80"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a04602f54c8ae5d83a5410ebc0a5adf80"></a>
+const char * </td><td class="memItemRight" valign="bottom"><b>what</b> () const __TBB_override  throw ()</td></tr>
+<tr class="separator:a04602f54c8ae5d83a5410ebc0a5adf80"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Exception for missing wait on <a class="el" href="a00142.html">structured_task_group</a>. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>tbb_exception.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00080.png b/doc/html/a00080.png
index e8307e7..7f9c4b3 100644
Binary files a/doc/html/a00080.png and b/doc/html/a00080.png differ
diff --git a/doc/html/a00081.html b/doc/html/a00081.html
index 00f7818..29ccf98 100644
--- a/doc/html/a00081.html
+++ b/doc/html/a00081.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5 > Class Template Reference</title>
+<title>tbb::movable_exception< ExceptionData > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,63 +33,195 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00081.html">indexer_node< T0, T1, T2, T3, T4, T5 ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00081.html">movable_exception</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00358.html">List of all members</a>  </div>
+<a href="#pro-attribs">Protected Attributes</a> |
+<a href="a00320.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5 > Class Template Reference</div>  </div>
+<div class="title">tbb::movable_exception< ExceptionData > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
+
+<p>Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread.  
+ <a href="a00081.html#details">More...</a></p>
+
+<p><code>#include <tbb_exception.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5 >:</div>
+Inheritance diagram for tbb::movable_exception< ExceptionData >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00081.png" usemap="#tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5 >_map" alt=""/>
-  <map id="tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5 >_map" name="tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5 >_map">
+  <img src="a00081.png" usemap="#tbb::movable_exception< ExceptionData >_map" alt=""/>
+  <map id="tbb::movable_exception< ExceptionData >_map" name="tbb::movable_exception< ExceptionData >_map">
+<area href="a00155.html" title="Interface to be implemented by all exceptions TBB recognizes and propagates across the threads..." alt="tbb::tbb_exception" shape="rect" coords="0,56,248,80"/>
 </map>
  </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a49f30d4f32d5920caf9478fc0c6d3d66"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a49f30d4f32d5920caf9478fc0c6d3d66"></a>
-typedef tuple< T0, T1, T2, T3, <br class="typebreak"/>
-T4, T5 > </td><td class="memItemRight" valign="bottom"><b>InputTuple</b></td></tr>
-<tr class="separator:a49f30d4f32d5920caf9478fc0c6d3d66"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae83c4ee86b74731091679be1f6844b90"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae83c4ee86b74731091679be1f6844b90"></a>
-typedef internal::tagged_msg<br class="typebreak"/>
-< size_t, T0, T1, T2, T3, T4, <br class="typebreak"/>
-T5 > </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:ae83c4ee86b74731091679be1f6844b90"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a854b9ed6872f86f9540ce23e71b2940e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a854b9ed6872f86f9540ce23e71b2940e"></a>
-typedef <br class="typebreak"/>
-internal::unfolded_indexer_node<br class="typebreak"/>
-< InputTuple > </td><td class="memItemRight" valign="bottom"><b>unfolded_type</b></td></tr>
-<tr class="separator:a854b9ed6872f86f9540ce23e71b2940e"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a902f3a82ff3dd079f554a3b3ff292a9d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a902f3a82ff3dd079f554a3b3ff292a9d"></a>
- </td><td class="memItemRight" valign="bottom"><b>indexer_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a902f3a82ff3dd079f554a3b3ff292a9d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4ec48d729f44a5bfaf6a1c7f867f2367"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ec48d729f44a5bfaf6a1c7f867f2367"></a>
- </td><td class="memItemRight" valign="bottom"><b>indexer_node</b> (const <a class="el" href="a00075.html">indexer_node</a> &other)</td></tr>
-<tr class="separator:a4ec48d729f44a5bfaf6a1c7f867f2367"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad2f30b4e96b4951ceb360ba7d34e3906"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad2f30b4e96b4951ceb360ba7d34e3906"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:ad2f30b4e96b4951ceb360ba7d34e3906"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a785b749022a1e6a7486d315b84bd37e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a785b749022a1e6a7486d315b84bd37e5"></a>
+ </td><td class="memItemRight" valign="bottom"><b>movable_exception</b> (const ExceptionData &data_)</td></tr>
+<tr class="separator:a785b749022a1e6a7486d315b84bd37e5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7be7103edd861653baebbca5aeed5205"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7be7103edd861653baebbca5aeed5205"></a>
+ </td><td class="memItemRight" valign="bottom"><b>movable_exception</b> (const <a class="el" href="a00081.html">movable_exception</a> &src)  throw ()</td></tr>
+<tr class="separator:a7be7103edd861653baebbca5aeed5205"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a35a4bf997b56ea221ae1bd9bb17cd33b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a35a4bf997b56ea221ae1bd9bb17cd33b"></a>
+const <a class="el" href="a00081.html">movable_exception</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00081.html">movable_exception</a> &src)</td></tr>
+<tr class="separator:a35a4bf997b56ea221ae1bd9bb17cd33b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4eac52bc2a10d4bfcd74ad85c2853740"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4eac52bc2a10d4bfcd74ad85c2853740"></a>
+ExceptionData & </td><td class="memItemRight" valign="bottom"><b>data</b> ()  throw ()</td></tr>
+<tr class="separator:a4eac52bc2a10d4bfcd74ad85c2853740"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a394c11a07cfcd4977327f58362aa1439"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a394c11a07cfcd4977327f58362aa1439"></a>
+const ExceptionData & </td><td class="memItemRight" valign="bottom"><b>data</b> () const   throw ()</td></tr>
+<tr class="separator:a394c11a07cfcd4977327f58362aa1439"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae74fdea1aac39197bc1f5026dfd0a840"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae74fdea1aac39197bc1f5026dfd0a840"></a>
+const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00081.html#ae74fdea1aac39197bc1f5026dfd0a840">name</a> () const __TBB_override  throw ()</td></tr>
+<tr class="memdesc:ae74fdea1aac39197bc1f5026dfd0a840"><td class="mdescLeft"> </td><td class="mdescRight">Returns RTTI name of the originally intercepted exception. <br/></td></tr>
+<tr class="separator:ae74fdea1aac39197bc1f5026dfd0a840"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a59040b31c3147f7c77232a6cbc76ba05"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59040b31c3147f7c77232a6cbc76ba05"></a>
+const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00081.html#a59040b31c3147f7c77232a6cbc76ba05">what</a> () const __TBB_override  throw ()</td></tr>
+<tr class="memdesc:a59040b31c3147f7c77232a6cbc76ba05"><td class="mdescLeft"> </td><td class="mdescRight">Returns the result of originally intercepted exception's <a class="el" href="a00081.html#a59040b31c3147f7c77232a6cbc76ba05" title="Returns the result of originally intercepted exception's what() method. ">what()</a> method. <br/></td></tr>
+<tr class="separator:a59040b31c3147f7c77232a6cbc76ba05"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a46eee42a3279007f48c9e8f11d074d16"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00081.html">movable_exception</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00081.html#a46eee42a3279007f48c9e8f11d074d16">move</a> () __TBB_override  throw ()</td></tr>
+<tr class="memdesc:a46eee42a3279007f48c9e8f11d074d16"><td class="mdescLeft"> </td><td class="mdescRight">Creates and returns pointer to the deep copy of this exception object.  <a href="#a46eee42a3279007f48c9e8f11d074d16">More...</a><br/></td></tr>
+<tr class="separator:a46eee42a3279007f48c9e8f11d074d16"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa4be7e2bf375edcb218fb5d7ed8e279b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00081.html#aa4be7e2bf375edcb218fb5d7ed8e279b">destroy</a> () __TBB_override  throw ()</td></tr>
+<tr class="memdesc:aa4be7e2bf375edcb218fb5d7ed8e279b"><td class="mdescLeft"> </td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00081.html#a46eee42a3279007f48c9e8f11d074d16" title="Creates and returns pointer to the deep copy of this exception object. ">move()</a> method.  <a href="#aa4be7e2bf375edcb218fb5d7ed8e279b">More...</a><br/></td></tr>
+<tr class="separator:aa4be7e2bf375edcb218fb5d7ed8e279b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0e9ac8a4468eb0ff3b2bb246b806a10e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00081.html#a0e9ac8a4468eb0ff3b2bb246b806a10e">throw_self</a> () __TBB_override</td></tr>
+<tr class="memdesc:a0e9ac8a4468eb0ff3b2bb246b806a10e"><td class="mdescLeft"> </td><td class="mdescRight">Throws this exception object.  <a href="#a0e9ac8a4468eb0ff3b2bb246b806a10e">More...</a><br/></td></tr>
+<tr class="separator:a0e9ac8a4468eb0ff3b2bb246b806a10e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_methods_a00155"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00155')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00155.html">tbb::tbb_exception</a></td></tr>
+<tr class="memitem:a6a973c37078afedf7d457ff4704bf8cd inherit pub_methods_a00155"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#a6a973c37078afedf7d457ff4704bf8cd">operator delete</a> (void *p)</td></tr>
+<tr class="separator:a6a973c37078afedf7d457ff4704bf8cd inherit pub_methods_a00155"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:adba063da80054afe64d5268711084d9b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adba063da80054afe64d5268711084d9b"></a>
+ExceptionData </td><td class="memItemRight" valign="bottom"><a class="el" href="a00081.html#adba063da80054afe64d5268711084d9b">my_exception_data</a></td></tr>
+<tr class="memdesc:adba063da80054afe64d5268711084d9b"><td class="mdescLeft"> </td><td class="mdescRight">User data. <br/></td></tr>
+<tr class="separator:adba063da80054afe64d5268711084d9b"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><h3>template<typename ExceptionData><br/>
+class tbb::movable_exception< ExceptionData ></h3>
+
+<p>Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread. </p>
+<p>Code using TBB can instantiate this template with an arbitrary ExceptionData type and throw this exception object. Such exceptions are intercepted by the TBB scheduler and delivered to the root thread (). </p>
+<dl class="section see"><dt>See Also</dt><dd><a class="el" href="a00155.html" title="Interface to be implemented by all exceptions TBB recognizes and propagates across the threads...">tbb::tbb_exception</a> </dd></dl>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="aa4be7e2bf375edcb218fb5d7ed8e279b"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename ExceptionData > </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00081.html">tbb::movable_exception</a>< ExceptionData >::destroy </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+        <tr>
+          <td align="right">throw </td><td>(</td><td colspan="2"></td>
+        </tr>
+        <tr>
+          <td align="right"></td><td>)</td><td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Destroys objects created by the <a class="el" href="a00081.html#a46eee42a3279007f48c9e8f11d074d16" title="Creates and returns pointer to the deep copy of this exception object. ">move()</a> method. </p>
+<p>Frees memory and calls destructor for this exception object. Can and must be used only on objects created by the move method. </p>
+
+<p>Implements <a class="el" href="a00155.html#ad3bc09bf78c33f19a0bcdf882fdf9d41">tbb::tbb_exception</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a46eee42a3279007f48c9e8f11d074d16"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename ExceptionData > </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00081.html">movable_exception</a>* <a class="el" href="a00081.html">tbb::movable_exception</a>< ExceptionData >::move </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+        <tr>
+          <td align="right">throw </td><td>(</td><td colspan="2"></td>
+        </tr>
+        <tr>
+          <td align="right"></td><td>)</td><td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
 </table>
+</div><div class="memdoc">
+
+<p>Creates and returns pointer to the deep copy of this exception object. </p>
+<p>Move semantics is allowed. </p>
+
+<p>Implements <a class="el" href="a00155.html#a4bd4ba0d501021013d1473d21b020b69">tbb::tbb_exception</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0e9ac8a4468eb0ff3b2bb246b806a10e"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename ExceptionData > </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00081.html">tbb::movable_exception</a>< ExceptionData >::throw_self </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Throws this exception object. </p>
+<p>Make sure that if you have several levels of derivation from this interface you implement or override this method on the most derived level. The implementation is as simple as "throw *this;". Failure to do this will result in exception of a base class type being thrown. </p>
+
+<p>Implements <a class="el" href="a00155.html#ae45c08d36c7ec7ae91785da3515a8828">tbb::tbb_exception</a>.</p>
+
+</div>
+</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<li>tbb_exception.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00081.png b/doc/html/a00081.png
index 325f49e..2c2e3fe 100644
Binary files a/doc/html/a00081.png and b/doc/html/a00081.png differ
diff --git a/doc/html/a00082.html b/doc/html/a00082.html
index b72c8a3..0a40342 100644
--- a/doc/html/a00082.html
+++ b/doc/html/a00082.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6 > Class Template Reference</title>
+<title>tbb::mutex Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,63 +33,139 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00082.html">indexer_node< T0, T1, T2, T3, T4, T5, T6 ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00082.html">mutex</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#nested-classes">Classes</a> |
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00359.html">List of all members</a>  </div>
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="#friends">Friends</a> |
+<a href="a00275.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6 > Class Template Reference</div>  </div>
+<div class="title">tbb::mutex Class Reference<div class="ingroups"><a class="el" href="a00255.html">Synchronization</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
+
+<p>Wrapper around the platform's native lock.  
+ <a href="a00082.html#details">More...</a></p>
+
+<p><code>#include <mutex.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6 >:</div>
+Inheritance diagram for tbb::mutex:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00082.png" usemap="#tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6 >_map" alt=""/>
-  <map id="tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6 >_map" name="tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6 >_map">
+  <img src="a00082.png" usemap="#tbb::mutex_map" alt=""/>
+  <map id="tbb::mutex_map" name="tbb::mutex_map">
 </map>
  </div></div>
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html">scoped_lock</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00135.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:a6717dabc0a9a8bedfb1d0551ddc5183f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6717dabc0a9a8bedfb1d0551ddc5183f"></a>
-typedef tuple< T0, T1, T2, T3, <br class="typebreak"/>
-T4, T5, T6 > </td><td class="memItemRight" valign="bottom"><b>InputTuple</b></td></tr>
-<tr class="separator:a6717dabc0a9a8bedfb1d0551ddc5183f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:adfbc762fcc73ad94b5f29a41ecd13495"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adfbc762fcc73ad94b5f29a41ecd13495"></a>
-typedef internal::tagged_msg<br class="typebreak"/>
-< size_t, T0, T1, T2, T3, T4, <br class="typebreak"/>
-T5, T6 > </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:adfbc762fcc73ad94b5f29a41ecd13495"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a07b620aeaffb110d455d9ebea62c2cc4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a07b620aeaffb110d455d9ebea62c2cc4"></a>
-typedef <br class="typebreak"/>
-internal::unfolded_indexer_node<br class="typebreak"/>
-< InputTuple > </td><td class="memItemRight" valign="bottom"><b>unfolded_type</b></td></tr>
-<tr class="separator:a07b620aeaffb110d455d9ebea62c2cc4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad35737cbe356d6814f59abba680ab067"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>state_t</b> { <b>INITIALIZED</b> =0x1234, 
+<b>DESTROYED</b> =0x789A, 
+<b>HELD</b> =0x56CD
+ }</td></tr>
+<tr class="separator:ad35737cbe356d6814f59abba680ab067"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abbe0cd12246121753ace00a5a12a90b0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abbe0cd12246121753ace00a5a12a90b0"></a>
+typedef LPCRITICAL_SECTION </td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#abbe0cd12246121753ace00a5a12a90b0">native_handle_type</a></td></tr>
+<tr class="memdesc:abbe0cd12246121753ace00a5a12a90b0"><td class="mdescLeft"> </td><td class="mdescRight">Return native_handle. <br/></td></tr>
+<tr class="separator:abbe0cd12246121753ace00a5a12a90b0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0d992511dfc6f47295b10eb7fc0813d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0d992511dfc6f47295b10eb7fc0813d4"></a>
+typedef pthread_mutex_t * </td><td class="memItemRight" valign="bottom"><b>native_handle_type</b></td></tr>
+<tr class="separator:a0d992511dfc6f47295b10eb7fc0813d4"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:ac68eb8662d96109cfaa031bc05c9dfef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac68eb8662d96109cfaa031bc05c9dfef"></a>
- </td><td class="memItemRight" valign="bottom"><b>indexer_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:ac68eb8662d96109cfaa031bc05c9dfef"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4ee0f50fb34524876c2ea08abf2708d7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ee0f50fb34524876c2ea08abf2708d7"></a>
- </td><td class="memItemRight" valign="bottom"><b>indexer_node</b> (const <a class="el" href="a00075.html">indexer_node</a> &other)</td></tr>
-<tr class="separator:a4ee0f50fb34524876c2ea08abf2708d7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4bd559ee734716b72f8694af06b72caf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4bd559ee734716b72f8694af06b72caf"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:a4bd559ee734716b72f8694af06b72caf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad1b280c954ffc8b8b3e63e4ee4144035"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad1b280c954ffc8b8b3e63e4ee4144035"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#ad1b280c954ffc8b8b3e63e4ee4144035">mutex</a> ()</td></tr>
+<tr class="memdesc:ad1b280c954ffc8b8b3e63e4ee4144035"><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired mutex. <br/></td></tr>
+<tr class="separator:ad1b280c954ffc8b8b3e63e4ee4144035"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a95ff02ee699b34696001db4003c11a3a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a95ff02ee699b34696001db4003c11a3a"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#a95ff02ee699b34696001db4003c11a3a">lock</a> ()</td></tr>
+<tr class="memdesc:a95ff02ee699b34696001db4003c11a3a"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock. <br/></td></tr>
+<tr class="separator:a95ff02ee699b34696001db4003c11a3a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a480283933106941125717499f9c5ad42"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#a480283933106941125717499f9c5ad42">try_lock</a> ()</td></tr>
+<tr class="memdesc:a480283933106941125717499f9c5ad42"><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring lock (non-blocking)  <a href="#a480283933106941125717499f9c5ad42">More...</a><br/></td></tr>
+<tr class="separator:a480283933106941125717499f9c5ad42"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a721eeae7ba16f8b92535f4534b583874"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a721eeae7ba16f8b92535f4534b583874"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#a721eeae7ba16f8b92535f4534b583874">unlock</a> ()</td></tr>
+<tr class="memdesc:a721eeae7ba16f8b92535f4534b583874"><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br/></td></tr>
+<tr class="separator:a721eeae7ba16f8b92535f4534b583874"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af69874d93822c905bdea0ab9e5ca5b89"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af69874d93822c905bdea0ab9e5ca5b89"></a>
+<a class="el" href="a00082.html#abbe0cd12246121753ace00a5a12a90b0">native_handle_type</a> </td><td class="memItemRight" valign="bottom"><b>native_handle</b> ()</td></tr>
+<tr class="separator:af69874d93822c905bdea0ab9e5ca5b89"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0857c4596d7d5de09fe402ccd41d3e42"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0857c4596d7d5de09fe402ccd41d3e42"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#a0857c4596d7d5de09fe402ccd41d3e42">set_state</a> (state_t to)</td></tr>
+<tr class="memdesc:a0857c4596d7d5de09fe402ccd41d3e42"><td class="mdescLeft"> </td><td class="mdescRight">Set the internal state. <br/></td></tr>
+<tr class="separator:a0857c4596d7d5de09fe402ccd41d3e42"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a2677d672446faa842de9de38b3aff80a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2677d672446faa842de9de38b3aff80a"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
+<tr class="separator:a2677d672446faa842de9de38b3aff80a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adf7e9e11c47cc869d219298232d6c0a1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adf7e9e11c47cc869d219298232d6c0a1"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
+<tr class="separator:adf7e9e11c47cc869d219298232d6c0a1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab729ebd784af412184653c4fa90468d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab729ebd784af412184653c4fa90468d0"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = false</td></tr>
+<tr class="separator:ab729ebd784af412184653c4fa90468d0"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:afcf922650b2fd9d76b7b939d8511bbd8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afcf922650b2fd9d76b7b939d8511bbd8"></a>
+class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
+<tr class="separator:afcf922650b2fd9d76b7b939d8511bbd8"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Wrapper around the platform's native lock. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="a480283933106941125717499f9c5ad42"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::mutex::try_lock </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Try acquiring lock (non-blocking) </p>
+<p>Return true if lock acquired; false otherwise. </p>
+
+<p>References <a class="el" href="a00014.html#a3525dbbac0d4eaedfe18bc57b7760857">tbb::aligned_space< T, N >::begin()</a>.</p>
+
+<p>Referenced by <a class="el" href="a00135.html#a46f983371aa852d2427ce69f9a571f78">tbb::mutex::scoped_lock::try_acquire()</a>.</p>
+
+</div>
+</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<li>mutex.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00082.png b/doc/html/a00082.png
index 31c57db..5fdf55b 100644
Binary files a/doc/html/a00082.png and b/doc/html/a00082.png differ
diff --git a/doc/html/a00083.html b/doc/html/a00083.html
index 8280a70..489ad3e 100644
--- a/doc/html/a00083.html
+++ b/doc/html/a00083.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 > Class Template Reference</title>
+<title>tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,63 +33,71 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00083.html">indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00036.html">concurrent_hash_map</a></li><li class="navelem"><a class="el" href="a00083.html">node</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00360.html">List of all members</a>  </div>
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="a00361.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 > Class Template Reference</div>  </div>
+<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node Struct Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 <div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 >:</div>
+Inheritance diagram for tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00083.png" usemap="#tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 >_map" alt=""/>
-  <map id="tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 >_map" name="tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 >_map">
+  <img src="a00083.png" usemap="#tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node_map" alt=""/>
+  <map id="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node_map" name="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node_map">
 </map>
  </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:ab79f324307da7250ae179a55884b2c64"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab79f324307da7250ae179a55884b2c64"></a>
-typedef tuple< T0, T1, T2, T3, <br class="typebreak"/>
-T4, T5, T6, T7 > </td><td class="memItemRight" valign="bottom"><b>InputTuple</b></td></tr>
-<tr class="separator:ab79f324307da7250ae179a55884b2c64"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a98e6510c1d7136d0eecc0e5b353853e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a98e6510c1d7136d0eecc0e5b353853e4"></a>
-typedef internal::tagged_msg<br class="typebreak"/>
-< size_t, T0, T1, T2, T3, T4, <br class="typebreak"/>
-T5, T6, T7 > </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:a98e6510c1d7136d0eecc0e5b353853e4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac7486f784b6328c6ebdd4bc6ce2a469a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac7486f784b6328c6ebdd4bc6ce2a469a"></a>
-typedef <br class="typebreak"/>
-internal::unfolded_indexer_node<br class="typebreak"/>
-< InputTuple > </td><td class="memItemRight" valign="bottom"><b>unfolded_type</b></td></tr>
-<tr class="separator:ac7486f784b6328c6ebdd4bc6ce2a469a"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a2b19b5e55cffcddc41fc35a07f6a7b7a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2b19b5e55cffcddc41fc35a07f6a7b7a"></a>
- </td><td class="memItemRight" valign="bottom"><b>indexer_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a2b19b5e55cffcddc41fc35a07f6a7b7a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab533c458469cd5a0d2fbd7338f47110f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab533c458469cd5a0d2fbd7338f47110f"></a>
- </td><td class="memItemRight" valign="bottom"><b>indexer_node</b> (const <a class="el" href="a00075.html">indexer_node</a> &other)</td></tr>
-<tr class="separator:ab533c458469cd5a0d2fbd7338f47110f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4a3d1c85066c8e97036c0b4ff157cae2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a3d1c85066c8e97036c0b4ff157cae2"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:a4a3d1c85066c8e97036c0b4ff157cae2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ace61f7bd9d097375f6e33fea4758fbf9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ace61f7bd9d097375f6e33fea4758fbf9"></a>
+ </td><td class="memItemRight" valign="bottom"><b>node</b> (const Key &key)</td></tr>
+<tr class="separator:ace61f7bd9d097375f6e33fea4758fbf9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6755d387982f27a06d859811699e40b7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6755d387982f27a06d859811699e40b7"></a>
+ </td><td class="memItemRight" valign="bottom"><b>node</b> (const Key &key, const T &t)</td></tr>
+<tr class="separator:a6755d387982f27a06d859811699e40b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a61f7e6e835b09c4387fd0c8498fbf603"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a61f7e6e835b09c4387fd0c8498fbf603"></a>
+ </td><td class="memItemRight" valign="bottom"><b>node</b> (const Key &key, T &&t)</td></tr>
+<tr class="separator:a61f7e6e835b09c4387fd0c8498fbf603"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac28d72d857eccf6e7cc06a9ee146d416"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac28d72d857eccf6e7cc06a9ee146d416"></a>
+ </td><td class="memItemRight" valign="bottom"><b>node</b> (value_type &&i)</td></tr>
+<tr class="separator:ac28d72d857eccf6e7cc06a9ee146d416"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae7c083b7efff342469789f487e3561ec"><td class="memTemplParams" colspan="2"><a class="anchor" id="ae7c083b7efff342469789f487e3561ec"></a>
+template<typename... Args> </td></tr>
+<tr class="memitem:ae7c083b7efff342469789f487e3561ec"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>node</b> (Args &&...args)</td></tr>
+<tr class="separator:ae7c083b7efff342469789f487e3561ec"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad7a5d977900af48a359f428658e2876b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad7a5d977900af48a359f428658e2876b"></a>
+ </td><td class="memItemRight" valign="bottom"><b>node</b> (value_type &i)</td></tr>
+<tr class="separator:ad7a5d977900af48a359f428658e2876b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acbdc995156da4cf9b11561d006cf6821"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acbdc995156da4cf9b11561d006cf6821"></a>
+ </td><td class="memItemRight" valign="bottom"><b>node</b> (const value_type &i)</td></tr>
+<tr class="separator:acbdc995156da4cf9b11561d006cf6821"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a15b3c8955eb1b104db439e9caf3737c3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15b3c8955eb1b104db439e9caf3737c3"></a>
+void * </td><td class="memItemRight" valign="bottom"><b>operator new</b> (size_t, node_allocator_type &a)</td></tr>
+<tr class="separator:a15b3c8955eb1b104db439e9caf3737c3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa3115742612b79db574914741f2fff45"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa3115742612b79db574914741f2fff45"></a>
+void </td><td class="memItemRight" valign="bottom"><b>operator delete</b> (void *ptr, node_allocator_type &a)</td></tr>
+<tr class="separator:aa3115742612b79db574914741f2fff45"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a6977520eaa2f1dee220f726c8a884b46"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6977520eaa2f1dee220f726c8a884b46"></a>
+value_type </td><td class="memItemRight" valign="bottom"><b>item</b></td></tr>
+<tr class="separator:a6977520eaa2f1dee220f726c8a884b46"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>concurrent_hash_map.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00083.png b/doc/html/a00083.png
index ba7599f..b914379 100644
Binary files a/doc/html/a00083.png and b/doc/html/a00083.png differ
diff --git a/doc/html/a00084.html b/doc/html/a00084.html
index 393ada2..b6b6a94 100644
--- a/doc/html/a00084.html
+++ b/doc/html/a00084.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 > Class Template Reference</title>
+<title>tbb::null_mutex Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,63 +33,60 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00084.html">indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00084.html">null_mutex</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="a00361.html">List of all members</a>  </div>
+<a href="#nested-classes">Classes</a> |
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="a00277.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 > Class Template Reference</div>  </div>
+<div class="title">tbb::null_mutex Class Reference<div class="ingroups"><a class="el" href="a00255.html">Synchronization</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
+
+<p>A mutex which does nothing.  
+ <a href="a00084.html#details">More...</a></p>
+
+<p><code>#include <null_mutex.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 >:</div>
+Inheritance diagram for tbb::null_mutex:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00084.png" usemap="#tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 >_map" alt=""/>
-  <map id="tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 >_map" name="tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 >_map">
+  <img src="a00084.png" usemap="#tbb::null_mutex_map" alt=""/>
+  <map id="tbb::null_mutex_map" name="tbb::null_mutex_map">
 </map>
  </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a0e99bef85326475f953035c693cf200c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0e99bef85326475f953035c693cf200c"></a>
-typedef tuple< T0, T1, T2, T3, <br class="typebreak"/>
-T4, T5, T6, T7, T8 > </td><td class="memItemRight" valign="bottom"><b>InputTuple</b></td></tr>
-<tr class="separator:a0e99bef85326475f953035c693cf200c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad235b050ecd15ffb0c0f1c974d39f0af"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad235b050ecd15ffb0c0f1c974d39f0af"></a>
-typedef internal::tagged_msg<br class="typebreak"/>
-< size_t, T0, T1, T2, T3, T4, <br class="typebreak"/>
-T5, T6, T7, T8 > </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:ad235b050ecd15ffb0c0f1c974d39f0af"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0254ed072edda582ac805d2d56c2ee44"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0254ed072edda582ac805d2d56c2ee44"></a>
-typedef <br class="typebreak"/>
-internal::unfolded_indexer_node<br class="typebreak"/>
-< InputTuple > </td><td class="memItemRight" valign="bottom"><b>unfolded_type</b></td></tr>
-<tr class="separator:a0254ed072edda582ac805d2d56c2ee44"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00137.html">scoped_lock</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00137.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:af4e7148e9ad9c6f90f29f72059835dfb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af4e7148e9ad9c6f90f29f72059835dfb"></a>
- </td><td class="memItemRight" valign="bottom"><b>indexer_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:af4e7148e9ad9c6f90f29f72059835dfb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a237af46a79d1008dd7db4fdeda63c0fd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a237af46a79d1008dd7db4fdeda63c0fd"></a>
- </td><td class="memItemRight" valign="bottom"><b>indexer_node</b> (const <a class="el" href="a00075.html">indexer_node</a> &other)</td></tr>
-<tr class="separator:a237af46a79d1008dd7db4fdeda63c0fd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a208e395ca3b6317d46dc2cfa28534935"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a208e395ca3b6317d46dc2cfa28534935"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:a208e395ca3b6317d46dc2cfa28534935"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a20ed8301299d9ec166588401269d1788"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a20ed8301299d9ec166588401269d1788"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
+<tr class="separator:a20ed8301299d9ec166588401269d1788"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a49bd7f5da83382e39f898d06cbf0e23e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a49bd7f5da83382e39f898d06cbf0e23e"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = true</td></tr>
+<tr class="separator:a49bd7f5da83382e39f898d06cbf0e23e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae4684b268ff379a69cd1fe93718ee7fc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae4684b268ff379a69cd1fe93718ee7fc"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = true</td></tr>
+<tr class="separator:ae4684b268ff379a69cd1fe93718ee7fc"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>A mutex which does nothing. </p>
+<p>A <a class="el" href="a00084.html" title="A mutex which does nothing. ">null_mutex</a> does no operation and simulates success. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>null_mutex.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00084.png b/doc/html/a00084.png
index fe1e7f2..b72b310 100644
Binary files a/doc/html/a00084.png and b/doc/html/a00084.png differ
diff --git a/doc/html/a00085.html b/doc/html/a00085.html
index 8c0b46e..42ee03a 100644
--- a/doc/html/a00085.html
+++ b/doc/html/a00085.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::tick_count::interval_t Class Reference</title>
+<title>tbb::null_rw_mutex Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,74 +33,60 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00170.html">tick_count</a></li><li class="navelem"><a class="el" href="a00085.html">interval_t</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00085.html">null_rw_mutex</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#friends">Friends</a> |
-<a href="a00327.html">List of all members</a>  </div>
+<a href="#nested-classes">Classes</a> |
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="a00279.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::tick_count::interval_t Class Reference</div>  </div>
+<div class="title">tbb::null_rw_mutex Class Reference<div class="ingroups"><a class="el" href="a00255.html">Synchronization</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>Relative time interval.  
+<p>A rw mutex which does nothing.  
  <a href="a00085.html#details">More...</a></p>
 
-<p><code>#include <tick_count.h></code></p>
+<p><code>#include <null_rw_mutex.h></code></p>
+<div class="dynheader">
+Inheritance diagram for tbb::null_rw_mutex:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00085.png" usemap="#tbb::null_rw_mutex_map" alt=""/>
+  <map id="tbb::null_rw_mutex_map" name="tbb::null_rw_mutex_map">
+</map>
+ </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a95e3e14750bebafe719856176e2737db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a95e3e14750bebafe719856176e2737db"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00085.html#a95e3e14750bebafe719856176e2737db">interval_t</a> ()</td></tr>
-<tr class="memdesc:a95e3e14750bebafe719856176e2737db"><td class="mdescLeft"> </td><td class="mdescRight">Construct a time interval representing zero time duration. <br/></td></tr>
-<tr class="separator:a95e3e14750bebafe719856176e2737db"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a73b462297173f6bffa15bc5a86c30ef4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a73b462297173f6bffa15bc5a86c30ef4"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00085.html#a73b462297173f6bffa15bc5a86c30ef4">interval_t</a> (double sec)</td></tr>
-<tr class="memdesc:a73b462297173f6bffa15bc5a86c30ef4"><td class="mdescLeft"> </td><td class="mdescRight">Construct a time interval representing sec seconds time duration. <br/></td></tr>
-<tr class="separator:a73b462297173f6bffa15bc5a86c30ef4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abe81446bbbb6b6e98d854b91acf47809"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe81446bbbb6b6e98d854b91acf47809"></a>
-double </td><td class="memItemRight" valign="bottom"><a class="el" href="a00085.html#abe81446bbbb6b6e98d854b91acf47809">seconds</a> () const </td></tr>
-<tr class="memdesc:abe81446bbbb6b6e98d854b91acf47809"><td class="mdescLeft"> </td><td class="mdescRight">Return the length of a time interval in seconds. <br/></td></tr>
-<tr class="separator:abe81446bbbb6b6e98d854b91acf47809"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a19bf32f4541252daaa6b09fd33fa9177"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a19bf32f4541252daaa6b09fd33fa9177"></a>
-<a class="el" href="a00085.html">interval_t</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00085.html#a19bf32f4541252daaa6b09fd33fa9177">operator+=</a> (const <a class="el" href="a00085.html">interval_t</a> &i)</td></tr>
-<tr class="memdesc:a19bf32f4541252daaa6b09fd33fa9177"><td class="mdescLeft"> </td><td class="mdescRight">Accumulation operator. <br/></td></tr>
-<tr class="separator:a19bf32f4541252daaa6b09fd33fa9177"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3394d9f3678e6a4c3d6e1be840fe2ff2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3394d9f3678e6a4c3d6e1be840fe2ff2"></a>
-<a class="el" href="a00085.html">interval_t</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00085.html#a3394d9f3678e6a4c3d6e1be840fe2ff2">operator-=</a> (const <a class="el" href="a00085.html">interval_t</a> &i)</td></tr>
-<tr class="memdesc:a3394d9f3678e6a4c3d6e1be840fe2ff2"><td class="mdescLeft"> </td><td class="mdescRight">Subtraction operator. <br/></td></tr>
-<tr class="separator:a3394d9f3678e6a4c3d6e1be840fe2ff2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html">scoped_lock</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00129.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:a68e741a8f6e2384027e93d1f654ad100"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a68e741a8f6e2384027e93d1f654ad100"></a>
-class </td><td class="memItemRight" valign="bottom"><b>tbb::tick_count</b></td></tr>
-<tr class="separator:a68e741a8f6e2384027e93d1f654ad100"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab5ceaed3ebf5a0d41088a5bc7c8dc653"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5ceaed3ebf5a0d41088a5bc7c8dc653"></a>
-<a class="el" href="a00085.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00085.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653">operator-</a> (const <a class="el" href="a00170.html">tick_count</a> &t1, const <a class="el" href="a00170.html">tick_count</a> &t0)</td></tr>
-<tr class="memdesc:ab5ceaed3ebf5a0d41088a5bc7c8dc653"><td class="mdescLeft"> </td><td class="mdescRight">Extract the intervals from the tick_counts and subtract them. <br/></td></tr>
-<tr class="separator:ab5ceaed3ebf5a0d41088a5bc7c8dc653"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac8910ee3b69f68eb905af787c273e9a8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac8910ee3b69f68eb905af787c273e9a8"></a>
-<a class="el" href="a00085.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00085.html#ac8910ee3b69f68eb905af787c273e9a8">operator+</a> (const <a class="el" href="a00085.html">interval_t</a> &i, const <a class="el" href="a00085.html">interval_t</a> &j)</td></tr>
-<tr class="memdesc:ac8910ee3b69f68eb905af787c273e9a8"><td class="mdescLeft"> </td><td class="mdescRight">Add two intervals. <br/></td></tr>
-<tr class="separator:ac8910ee3b69f68eb905af787c273e9a8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3d11133daa9a7d3c903d070293278f8f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d11133daa9a7d3c903d070293278f8f"></a>
-<a class="el" href="a00085.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00085.html#a3d11133daa9a7d3c903d070293278f8f">operator-</a> (const <a class="el" href="a00085.html">interval_t</a> &i, const <a class="el" href="a00085.html">interval_t</a> &j)</td></tr>
-<tr class="memdesc:a3d11133daa9a7d3c903d070293278f8f"><td class="mdescLeft"> </td><td class="mdescRight">Subtract two intervals. <br/></td></tr>
-<tr class="separator:a3d11133daa9a7d3c903d070293278f8f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a2a676977ac67532f5f35f849ec7eac8c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2a676977ac67532f5f35f849ec7eac8c"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = true</td></tr>
+<tr class="separator:a2a676977ac67532f5f35f849ec7eac8c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab153992db6e44aee96ce8c1b2d495c94"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab153992db6e44aee96ce8c1b2d495c94"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = true</td></tr>
+<tr class="separator:ab153992db6e44aee96ce8c1b2d495c94"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab8500b8a645b1c03221fd1fb4156fa78"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab8500b8a645b1c03221fd1fb4156fa78"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = true</td></tr>
+<tr class="separator:ab8500b8a645b1c03221fd1fb4156fa78"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Relative time interval. </p>
+<div class="textblock"><p>A rw mutex which does nothing. </p>
+<p>A <a class="el" href="a00085.html" title="A rw mutex which does nothing. ">null_rw_mutex</a> is a rw mutex that does nothing and simulates successful operation. </p>
 </div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>tick_count.h</li>
+<li>null_rw_mutex.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00102.png b/doc/html/a00085.png
similarity index 100%
copy from doc/html/a00102.png
copy to doc/html/a00085.png
diff --git a/doc/html/a00086.html b/doc/html/a00086.html
index b71c353..0c3a878 100644
--- a/doc/html/a00086.html
+++ b/doc/html/a00086.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::invalid_multiple_scheduling Class Reference</title>
+<title>tbb::flow::interface9::null_type Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,46 +33,21 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00086.html">invalid_multiple_scheduling</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00086.html">null_type</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="a00322.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::invalid_multiple_scheduling Class Reference</div>  </div>
+<div class="title">tbb::flow::interface9::null_type Struct Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Exception for repeated scheduling of the same <a class="el" href="a00154.html">task_handle</a>.  
- <a href="a00086.html#details">More...</a></p>
-
-<p><code>#include <tbb_exception.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::invalid_multiple_scheduling:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00086.png" usemap="#tbb::invalid_multiple_scheduling_map" alt=""/>
-  <map id="tbb::invalid_multiple_scheduling_map" name="tbb::invalid_multiple_scheduling_map">
-</map>
- </div></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:abe0d56d15bd59f7b128a86ae5b6b8933"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe0d56d15bd59f7b128a86ae5b6b8933"></a>
-const char * </td><td class="memItemRight" valign="bottom"><b>what</b> () const   throw ()</td></tr>
-<tr class="separator:abe0d56d15bd59f7b128a86ae5b6b8933"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Exception for repeated scheduling of the same <a class="el" href="a00154.html">task_handle</a>. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>tbb_exception.h</li>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00188.html">flow_graph.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00087.html b/doc/html/a00087.html
index c95f5ad..e71c145 100644
--- a/doc/html/a00087.html
+++ b/doc/html/a00087.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::join_node< OutputTuple, JP > Class Template Reference</title>
+<title>tbb::flow::interface9::opencl_buffer< T, Factory > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,21 +33,111 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00087.html">join_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00087.html">opencl_buffer</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
+  <div class="summary">
+<a href="#pub-types">Public Types</a> |
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#friends">Friends</a> |
+<a href="a00340.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::join_node< OutputTuple, JP > Class Template Reference</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_buffer< T, Factory > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
+<div class="dynheader">
+Inheritance diagram for tbb::flow::interface9::opencl_buffer< T, Factory >:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00087.png" usemap="#tbb::flow::interface9::opencl_buffer< T, Factory >_map" alt=""/>
+  <map id="tbb::flow::interface9::opencl_buffer< T, Factory >_map" name="tbb::flow::interface9::opencl_buffer< T, Factory >_map">
+<area href="a00101.html" alt="tbb::flow::interface9::opencl_subbuffer< T, Factory >" shape="rect" coords="0,56,310,80"/>
+</map>
+ </div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a54db0ee83c4e3de8ccd479c34a4d35b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a54db0ee83c4e3de8ccd479c34a4d35b9"></a>
+typedef cl_mem </td><td class="memItemRight" valign="bottom"><b>native_object_type</b></td></tr>
+<tr class="separator:a54db0ee83c4e3de8ccd479c34a4d35b9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a91c4c176a0d017854dc0d3a687af1031"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a91c4c176a0d017854dc0d3a687af1031"></a>
+typedef <a class="el" href="a00087.html">opencl_buffer</a> </td><td class="memItemRight" valign="bottom"><b>memory_object_type</b></td></tr>
+<tr class="separator:a91c4c176a0d017854dc0d3a687af1031"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aad92f18cff1f39e34bc6c8bb0c56e7a9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad92f18cff1f39e34bc6c8bb0c56e7a9"></a>
+typedef Factory </td><td class="memItemRight" valign="bottom"><b>opencl_factory_type</b></td></tr>
+<tr class="separator:aad92f18cff1f39e34bc6c8bb0c56e7a9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab381b037311c4d248ee8fc15a29559d2"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab381b037311c4d248ee8fc15a29559d2"></a>
+template<access_type a> </td></tr>
+<tr class="memitem:ab381b037311c4d248ee8fc15a29559d2"><td class="memTemplItemLeft" align="right" valign="top">using </td><td class="memTemplItemRight" valign="bottom"><b>iterator</b> = T *</td></tr>
+<tr class="separator:ab381b037311c4d248ee8fc15a29559d2"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a209b471453aca40e5ffbf062a6f3dfee"><td class="memTemplParams" colspan="2"><a class="anchor" id="a209b471453aca40e5ffbf062a6f3dfee"></a>
+template<access_type a> </td></tr>
+<tr class="memitem:a209b471453aca40e5ffbf062a6f3dfee"><td class="memTemplItemLeft" align="right" valign="top">iterator< a > </td><td class="memTemplItemRight" valign="bottom"><b>access</b> () const </td></tr>
+<tr class="separator:a209b471453aca40e5ffbf062a6f3dfee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af09de2dced1e886b62af2edaa301395b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af09de2dced1e886b62af2edaa301395b"></a>
+T * </td><td class="memItemRight" valign="bottom"><b>data</b> () const </td></tr>
+<tr class="separator:af09de2dced1e886b62af2edaa301395b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad6ea4442b535df396143ae64072f928b"><td class="memTemplParams" colspan="2"><a class="anchor" id="ad6ea4442b535df396143ae64072f928b"></a>
+template<access_type a = read_write> </td></tr>
+<tr class="memitem:ad6ea4442b535df396143ae64072f928b"><td class="memTemplItemLeft" align="right" valign="top">iterator< a > </td><td class="memTemplItemRight" valign="bottom"><b>begin</b> () const </td></tr>
+<tr class="separator:ad6ea4442b535df396143ae64072f928b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aee44f9e698559edd86118bd8f1358c82"><td class="memTemplParams" colspan="2"><a class="anchor" id="aee44f9e698559edd86118bd8f1358c82"></a>
+template<access_type a = read_write> </td></tr>
+<tr class="memitem:aee44f9e698559edd86118bd8f1358c82"><td class="memTemplItemLeft" align="right" valign="top">iterator< a > </td><td class="memTemplItemRight" valign="bottom"><b>end</b> () const </td></tr>
+<tr class="separator:aee44f9e698559edd86118bd8f1358c82"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab17dc630609091d82ac1bd0ac028098b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab17dc630609091d82ac1bd0ac028098b"></a>
+size_t </td><td class="memItemRight" valign="bottom"><b>size</b> () const </td></tr>
+<tr class="separator:ab17dc630609091d82ac1bd0ac028098b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac60e4a4d13d7545c78b3dfbcc4e03837"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac60e4a4d13d7545c78b3dfbcc4e03837"></a>
+T & </td><td class="memItemRight" valign="bottom"><b>operator[]</b> (ptrdiff_t k)</td></tr>
+<tr class="separator:ac60e4a4d13d7545c78b3dfbcc4e03837"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a13106604ac7fed4eb395499a250c4f26"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a13106604ac7fed4eb395499a250c4f26"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_buffer</b> (<a class="el" href="a00093.html">opencl_graph</a> &g, size_t size)</td></tr>
+<tr class="separator:a13106604ac7fed4eb395499a250c4f26"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adb232dffc9a5708ba6e46e59278cb2b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adb232dffc9a5708ba6e46e59278cb2b9"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_buffer</b> (Factory &f, size_t size)</td></tr>
+<tr class="separator:adb232dffc9a5708ba6e46e59278cb2b9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9a443f7d24e2130eb8d4a654b8a45d9c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a443f7d24e2130eb8d4a654b8a45d9c"></a>
+cl_mem </td><td class="memItemRight" valign="bottom"><b>native_object</b> () const </td></tr>
+<tr class="separator:a9a443f7d24e2130eb8d4a654b8a45d9c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad71cf551ab19e9ed23460f7616c85290"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad71cf551ab19e9ed23460f7616c85290"></a>
+const <a class="el" href="a00087.html">opencl_buffer</a> & </td><td class="memItemRight" valign="bottom"><b>memory_object</b> () const </td></tr>
+<tr class="separator:ad71cf551ab19e9ed23460f7616c85290"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5546d9c6648342b56dc77ad4aa6c02af"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5546d9c6648342b56dc77ad4aa6c02af"></a>
+void </td><td class="memItemRight" valign="bottom"><b>send</b> (<a class="el" href="a00089.html">opencl_device</a> device, <a class="el" href="a00053.html">dependency_msg</a>< <a class="el" href="a00087.html">opencl_buffer</a>, Factory > &dependency) const </td></tr>
+<tr class="separator:a5546d9c6648342b56dc77ad4aa6c02af"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a41ee26bde7f0cadd98203403450aa978"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a41ee26bde7f0cadd98203403450aa978"></a>
+void </td><td class="memItemRight" valign="bottom"><b>receive</b> (const <a class="el" href="a00053.html">dependency_msg</a>< <a class="el" href="a00087.html">opencl_buffer</a>, Factory > &dependency) const </td></tr>
+<tr class="separator:a41ee26bde7f0cadd98203403450aa978"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a804d5eb9c6912c1e36c078ce4032de7c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a804d5eb9c6912c1e36c078ce4032de7c"></a>
+<a class="el" href="a00101.html">opencl_subbuffer</a>< T, Factory > </td><td class="memItemRight" valign="bottom"><b>subbuffer</b> (size_t index, size_t size) const </td></tr>
+<tr class="separator:a804d5eb9c6912c1e36c078ce4032de7c"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a357c187838aa075f23be7b8c86ddcbd3"><td class="memTemplParams" colspan="2"><a class="anchor" id="a357c187838aa075f23be7b8c86ddcbd3"></a>
+template<typename > </td></tr>
+<tr class="memitem:a357c187838aa075f23be7b8c86ddcbd3"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>opencl_factory</b></td></tr>
+<tr class="separator:a357c187838aa075f23be7b8c86ddcbd3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a518ac9631dff44b959b95caa4d9d69d8"><td class="memTemplParams" colspan="2"><a class="anchor" id="a518ac9631dff44b959b95caa4d9d69d8"></a>
+template<typename , typename > </td></tr>
+<tr class="memitem:a518ac9631dff44b959b95caa4d9d69d8"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>opencl_subbuffer</b></td></tr>
+<tr class="separator:a518ac9631dff44b959b95caa4d9d69d8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4e5bdf00651720250e564d13b624863c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4e5bdf00651720250e564d13b624863c"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00087.html">opencl_buffer</a>< T, Factory > &lhs, const <a class="el" href="a00087.html">opencl_buffer</a>< T, Factory > &rhs)</td></tr>
+<tr class="separator:a4e5bdf00651720250e564d13b624863c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<li>flow_graph_opencl_node.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00087.png b/doc/html/a00087.png
new file mode 100644
index 0000000..2896d69
Binary files /dev/null and b/doc/html/a00087.png differ
diff --git a/doc/html/a00088.html b/doc/html/a00088.html
index f157b37..eda07f2 100644
--- a/doc/html/a00088.html
+++ b/doc/html/a00088.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::join_node< OutputTuple, queueing > Class Template Reference</title>
+<title>tbb::flow::interface9::opencl_buffer_impl< Factory > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,56 +33,102 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00088.html">join_node< OutputTuple, queueing ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00088.html">opencl_buffer_impl</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00350.html">List of all members</a>  </div>
+<a href="#friends">Friends</a> |
+<a href="a00328.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::join_node< OutputTuple, queueing > Class Template Reference</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_buffer_impl< Factory > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 <div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::join_node< OutputTuple, queueing >:</div>
+Inheritance diagram for tbb::flow::interface9::opencl_buffer_impl< Factory >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00088.png" usemap="#tbb::flow::interface7::join_node< OutputTuple, queueing >_map" alt=""/>
-  <map id="tbb::flow::interface7::join_node< OutputTuple, queueing >_map" name="tbb::flow::interface7::join_node< OutputTuple, queueing >_map">
+  <img src="a00088.png" usemap="#tbb::flow::interface9::opencl_buffer_impl< Factory >_map" alt=""/>
+  <map id="tbb::flow::interface9::opencl_buffer_impl< Factory >_map" name="tbb::flow::interface9::opencl_buffer_impl< Factory >_map">
+<area href="a00094.html" alt="tbb::flow::interface9::opencl_memory< Factory >" shape="rect" coords="0,0,303,24"/>
 </map>
  </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a68f4d59b0d31a9f13e53f75fe3ded700"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a68f4d59b0d31a9f13e53f75fe3ded700"></a>
-typedef OutputTuple </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:a68f4d59b0d31a9f13e53f75fe3ded700"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7ac9b6f2600b75143ff1dea1e3786b04"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7ac9b6f2600b75143ff1dea1e3786b04"></a>
-typedef <br class="typebreak"/>
-unfolded_type::input_ports_type </td><td class="memItemRight" valign="bottom"><b>input_ports_type</b></td></tr>
-<tr class="separator:a7ac9b6f2600b75143ff1dea1e3786b04"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:ab1c49eff4420fd53b80b4425117ddb36"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab1c49eff4420fd53b80b4425117ddb36"></a>
- </td><td class="memItemRight" valign="bottom"><b>join_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:ab1c49eff4420fd53b80b4425117ddb36"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a33ff02c356a0f2f590323177e9314ccd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a33ff02c356a0f2f590323177e9314ccd"></a>
- </td><td class="memItemRight" valign="bottom"><b>join_node</b> (const <a class="el" href="a00087.html">join_node</a> &other)</td></tr>
-<tr class="separator:a33ff02c356a0f2f590323177e9314ccd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7615ce374a3ec504ed196b7babbf1e04"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7615ce374a3ec504ed196b7babbf1e04"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:a7615ce374a3ec504ed196b7babbf1e04"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae05a12ea6b1b26078d987b0323662060"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae05a12ea6b1b26078d987b0323662060"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_buffer_impl</b> (size_t size, Factory &f)</td></tr>
+<tr class="separator:ae05a12ea6b1b26078d987b0323662060"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a211b0565e56e1f5d2fc2868186cc3f77"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a211b0565e56e1f5d2fc2868186cc3f77"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_buffer_impl</b> (cl_mem m, size_t index, size_t size, Factory &f)</td></tr>
+<tr class="separator:a211b0565e56e1f5d2fc2868186cc3f77"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acc804c90ec64f530f7b951dcf6d61477"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acc804c90ec64f530f7b951dcf6d61477"></a>
+size_t </td><td class="memItemRight" valign="bottom"><b>size</b> () const </td></tr>
+<tr class="separator:acc804c90ec64f530f7b951dcf6d61477"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0fef9ccef56ec3145fcf9d4970707f76"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0fef9ccef56ec3145fcf9d4970707f76"></a>
+void </td><td class="memItemRight" valign="bottom"><b>map_memory</b> (<a class="el" href="a00089.html">opencl_device</a> device, <a class="el" href="a00053.html">dependency_msg</a>< void *, Factory > &dmsg) __TBB_override</td></tr>
+<tr class="separator:a0fef9ccef56ec3145fcf9d4970707f76"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_methods_a00094"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00094')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td></tr>
+<tr class="memitem:aef54be65fa3b36a1b573ba8a211a8605 inherit pub_methods_a00094"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aef54be65fa3b36a1b573ba8a211a8605"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_memory</b> (Factory &f)</td></tr>
+<tr class="separator:aef54be65fa3b36a1b573ba8a211a8605 inherit pub_methods_a00094"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab65f207af86a4b7e2d61b99a9eab16f5 inherit pub_methods_a00094"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab65f207af86a4b7e2d61b99a9eab16f5"></a>
+cl_mem </td><td class="memItemRight" valign="bottom"><b>get_cl_mem</b> () const </td></tr>
+<tr class="separator:ab65f207af86a4b7e2d61b99a9eab16f5 inherit pub_methods_a00094"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a98b572e433ef1684499d1e43457cbfb2 inherit pub_methods_a00094"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a98b572e433ef1684499d1e43457cbfb2"></a>
+void * </td><td class="memItemRight" valign="bottom"><b>get_host_ptr</b> ()</td></tr>
+<tr class="separator:a98b572e433ef1684499d1e43457cbfb2 inherit pub_methods_a00094"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a42af307f715c23f729aa5c47986e3844 inherit pub_methods_a00094"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a42af307f715c23f729aa5c47986e3844"></a>
+Factory * </td><td class="memItemRight" valign="bottom"><b>factory</b> () const </td></tr>
+<tr class="separator:a42af307f715c23f729aa5c47986e3844 inherit pub_methods_a00094"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a498a227b66f298eb2008229aa905eda1 inherit pub_methods_a00094"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a498a227b66f298eb2008229aa905eda1"></a>
+<a class="el" href="a00053.html">dependency_msg</a>< void *, Factory > </td><td class="memItemRight" valign="bottom"><b>send</b> (<a class="el" href="a00089.html">opencl_device</a> d, const cl_event *e)</td></tr>
+<tr class="separator:a498a227b66f298eb2008229aa905eda1 inherit pub_methods_a00094"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9d70b4417493104ee1a9f6792abf58bb inherit pub_methods_a00094"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9d70b4417493104ee1a9f6792abf58bb"></a>
+<a class="el" href="a00053.html">dependency_msg</a>< void *, Factory > </td><td class="memItemRight" valign="bottom"><b>receive</b> (const cl_event *e)</td></tr>
+<tr class="separator:a9d70b4417493104ee1a9f6792abf58bb inherit pub_methods_a00094"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a6560a38156dede308dcb1703a057c1b9"><td class="memTemplParams" colspan="2"><a class="anchor" id="a6560a38156dede308dcb1703a057c1b9"></a>
+template<typename , typename > </td></tr>
+<tr class="memitem:a6560a38156dede308dcb1703a057c1b9"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>opencl_buffer</b></td></tr>
+<tr class="separator:a6560a38156dede308dcb1703a057c1b9"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_attribs_a00094"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00094')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td></tr>
+<tr class="memitem:a34fda309cb3f04269a60f44564d3a33a inherit pro_attribs_a00094"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a34fda309cb3f04269a60f44564d3a33a"></a>
+cl_mem </td><td class="memItemRight" valign="bottom"><b>my_cl_mem</b></td></tr>
+<tr class="separator:a34fda309cb3f04269a60f44564d3a33a inherit pro_attribs_a00094"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa150727dcda8900798a09a56093d6ce8 inherit pro_attribs_a00094"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa150727dcda8900798a09a56093d6ce8"></a>
+<a class="el" href="a00015.html">tbb::atomic</a><br class="typebreak"/>
+< opencl_device::device_id_type > </td><td class="memItemRight" valign="bottom"><b>my_curr_device_id</b></td></tr>
+<tr class="separator:aa150727dcda8900798a09a56093d6ce8 inherit pro_attribs_a00094"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa16cbcaead8b32986b96d32d6663e6e8 inherit pro_attribs_a00094"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa16cbcaead8b32986b96d32d6663e6e8"></a>
+void * </td><td class="memItemRight" valign="bottom"><b>my_host_ptr</b></td></tr>
+<tr class="separator:aa16cbcaead8b32986b96d32d6663e6e8 inherit pro_attribs_a00094"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8cc55112c9ac8aa9234c1a0ab273ac62 inherit pro_attribs_a00094"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8cc55112c9ac8aa9234c1a0ab273ac62"></a>
+Factory * </td><td class="memItemRight" valign="bottom"><b>my_factory</b></td></tr>
+<tr class="separator:a8cc55112c9ac8aa9234c1a0ab273ac62 inherit pro_attribs_a00094"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab41a863a285df0fb4548c73018ce8738 inherit pro_attribs_a00094"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab41a863a285df0fb4548c73018ce8738"></a>
+<a class="el" href="a00140.html">tbb::spin_mutex</a> </td><td class="memItemRight" valign="bottom"><b>my_sending_lock</b></td></tr>
+<tr class="separator:ab41a863a285df0fb4548c73018ce8738 inherit pro_attribs_a00094"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af9b6edf72c6b3ecb51a14ada3c4c003c inherit pro_attribs_a00094"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af9b6edf72c6b3ecb51a14ada3c4c003c"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>my_sending_event_present</b></td></tr>
+<tr class="separator:af9b6edf72c6b3ecb51a14ada3c4c003c inherit pro_attribs_a00094"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:accc04a1cef88256991ba0982877d45aa inherit pro_attribs_a00094"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="accc04a1cef88256991ba0982877d45aa"></a>
+cl_event </td><td class="memItemRight" valign="bottom"><b>my_sending_event</b></td></tr>
+<tr class="separator:accc04a1cef88256991ba0982877d45aa inherit pro_attribs_a00094"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<li>flow_graph_opencl_node.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00088.png b/doc/html/a00088.png
index 4c63cb9..c835d99 100644
Binary files a/doc/html/a00088.png and b/doc/html/a00088.png differ
diff --git a/doc/html/a00089.html b/doc/html/a00089.html
index 787e47f..e16f09c 100644
--- a/doc/html/a00089.html
+++ b/doc/html/a00089.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::join_node< OutputTuple, reserving > Class Template Reference</title>
+<title>tbb::flow::interface9::opencl_device Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,56 +33,150 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00089.html">join_node< OutputTuple, reserving ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00089.html">opencl_device</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00349.html">List of all members</a>  </div>
+<a href="#friends">Friends</a> |
+<a href="a00334.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::join_node< OutputTuple, reserving > Class Template Reference</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_device Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::join_node< OutputTuple, reserving >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00089.png" usemap="#tbb::flow::interface7::join_node< OutputTuple, reserving >_map" alt=""/>
-  <map id="tbb::flow::interface7::join_node< OutputTuple, reserving >_map" name="tbb::flow::interface7::join_node< OutputTuple, reserving >_map">
-</map>
- </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:ae799a20de47e2fd168a23b63c56410ad"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae799a20de47e2fd168a23b63c56410ad"></a>
-typedef OutputTuple </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:ae799a20de47e2fd168a23b63c56410ad"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a211d1d12c7073ac9d6e7189113537952"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a211d1d12c7073ac9d6e7189113537952"></a>
-typedef <br class="typebreak"/>
-unfolded_type::input_ports_type </td><td class="memItemRight" valign="bottom"><b>input_ports_type</b></td></tr>
-<tr class="separator:a211d1d12c7073ac9d6e7189113537952"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8d60e6210d2fcab3fab0ea1d497b90ea"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom">: device_id_type { <b>unknown</b> = device_id_type( -2 ), 
+<b>host</b> = device_id_type( -1 )
+ }</td></tr>
+<tr class="separator:a8d60e6210d2fcab3fab0ea1d497b90ea"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab31ad913d5cc3021533991afaab1c5c6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab31ad913d5cc3021533991afaab1c5c6"></a>
+typedef size_t </td><td class="memItemRight" valign="bottom"><b>device_id_type</b></td></tr>
+<tr class="separator:ab31ad913d5cc3021533991afaab1c5c6"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a14b7e309c267e35b6db79cd24dfae724"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a14b7e309c267e35b6db79cd24dfae724"></a>
- </td><td class="memItemRight" valign="bottom"><b>join_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a14b7e309c267e35b6db79cd24dfae724"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a86bf13b42f0d09369b5062fe7a1d97e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a86bf13b42f0d09369b5062fe7a1d97e8"></a>
- </td><td class="memItemRight" valign="bottom"><b>join_node</b> (const <a class="el" href="a00087.html">join_node</a> &other)</td></tr>
-<tr class="separator:a86bf13b42f0d09369b5062fe7a1d97e8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5275b0f1db78ca08f968d4c905752ea5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5275b0f1db78ca08f968d4c905752ea5"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:a5275b0f1db78ca08f968d4c905752ea5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afe5a001ad1d5db357e0cb56f1de9c030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afe5a001ad1d5db357e0cb56f1de9c030"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_device</b> (cl_device_id cl_d_id, device_id_type device_id)</td></tr>
+<tr class="separator:afe5a001ad1d5db357e0cb56f1de9c030"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5e7dc8a4c2b178a36e506569d9bf53e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e7dc8a4c2b178a36e506569d9bf53e8"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>platform_profile</b> () const </td></tr>
+<tr class="separator:a5e7dc8a4c2b178a36e506569d9bf53e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a51cefef63ba6450f7a69e3784c6bb0ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a51cefef63ba6450f7a69e3784c6bb0ff"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>platform_version</b> () const </td></tr>
+<tr class="separator:a51cefef63ba6450f7a69e3784c6bb0ff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1949f11f0256d37a534a0c9c11faffbb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1949f11f0256d37a534a0c9c11faffbb"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>platform_name</b> () const </td></tr>
+<tr class="separator:a1949f11f0256d37a534a0c9c11faffbb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a14b306cb85adcfbbdb4ee662a7a9dc08"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a14b306cb85adcfbbdb4ee662a7a9dc08"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>platform_vendor</b> () const </td></tr>
+<tr class="separator:a14b306cb85adcfbbdb4ee662a7a9dc08"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab7bd158fb3a51def8936121507c07c92"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab7bd158fb3a51def8936121507c07c92"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>platform_extensions</b> () const </td></tr>
+<tr class="separator:ab7bd158fb3a51def8936121507c07c92"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9c4b0f665007513f4ccd71a95f5bdfd2"><td class="memTemplParams" colspan="2"><a class="anchor" id="a9c4b0f665007513f4ccd71a95f5bdfd2"></a>
+template<typename T > </td></tr>
+<tr class="memitem:a9c4b0f665007513f4ccd71a95f5bdfd2"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>info</b> (cl_device_info i, T &t) const </td></tr>
+<tr class="separator:a9c4b0f665007513f4ccd71a95f5bdfd2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a218a1cf850c0c1ba6d8b2c70841e16d8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a218a1cf850c0c1ba6d8b2c70841e16d8"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>version</b> () const </td></tr>
+<tr class="separator:a218a1cf850c0c1ba6d8b2c70841e16d8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9d05f1a6c1a0de9cf705fcac279fe642"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9d05f1a6c1a0de9cf705fcac279fe642"></a>
+int </td><td class="memItemRight" valign="bottom"><b>major_version</b> () const </td></tr>
+<tr class="separator:a9d05f1a6c1a0de9cf705fcac279fe642"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af96ccaad1333a3c97fd2c5ce6c74c855"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af96ccaad1333a3c97fd2c5ce6c74c855"></a>
+int </td><td class="memItemRight" valign="bottom"><b>minor_version</b> () const </td></tr>
+<tr class="separator:af96ccaad1333a3c97fd2c5ce6c74c855"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af085002dd577f978d55bcff4d8af71d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af085002dd577f978d55bcff4d8af71d0"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>out_of_order_exec_mode_on_host_present</b> () const </td></tr>
+<tr class="separator:af085002dd577f978d55bcff4d8af71d0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a48cea7e323a6164b66047ea31fb60a1f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a48cea7e323a6164b66047ea31fb60a1f"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>out_of_order_exec_mode_on_device_present</b> () const </td></tr>
+<tr class="separator:a48cea7e323a6164b66047ea31fb60a1f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa7f578e709964c125c67ecb53e98ec02"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa7f578e709964c125c67ecb53e98ec02"></a>
+std::array< size_t, 3 > </td><td class="memItemRight" valign="bottom"><b>max_work_item_sizes</b> () const </td></tr>
+<tr class="separator:aa7f578e709964c125c67ecb53e98ec02"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a879d6231621d86d6ee73afc5bd294a99"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a879d6231621d86d6ee73afc5bd294a99"></a>
+size_t </td><td class="memItemRight" valign="bottom"><b>max_work_group_size</b> () const </td></tr>
+<tr class="separator:a879d6231621d86d6ee73afc5bd294a99"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0009c2997eb227c1a2c036a42242de36"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0009c2997eb227c1a2c036a42242de36"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>built_in_kernel_available</b> (const std::string &k) const </td></tr>
+<tr class="separator:a0009c2997eb227c1a2c036a42242de36"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7bbdcded6c7ca04ded88c00c5eec9e1c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7bbdcded6c7ca04ded88c00c5eec9e1c"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>built_in_kernels</b> () const </td></tr>
+<tr class="separator:a7bbdcded6c7ca04ded88c00c5eec9e1c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1bd42d21bc5de0507eca609a163c1089"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1bd42d21bc5de0507eca609a163c1089"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>name</b> () const </td></tr>
+<tr class="separator:a1bd42d21bc5de0507eca609a163c1089"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a20706d81082e5d092acb65015394172d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a20706d81082e5d092acb65015394172d"></a>
+cl_bool </td><td class="memItemRight" valign="bottom"><b>available</b> () const </td></tr>
+<tr class="separator:a20706d81082e5d092acb65015394172d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6396326118650061e40712f8e83da9c1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6396326118650061e40712f8e83da9c1"></a>
+cl_bool </td><td class="memItemRight" valign="bottom"><b>compiler_available</b> () const </td></tr>
+<tr class="separator:a6396326118650061e40712f8e83da9c1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a51a6bff715fd32fc5a4814310dfacc8d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a51a6bff715fd32fc5a4814310dfacc8d"></a>
+cl_bool </td><td class="memItemRight" valign="bottom"><b>linker_available</b> () const </td></tr>
+<tr class="separator:a51a6bff715fd32fc5a4814310dfacc8d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7e949e8deea4991294dddf780eeb0887"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7e949e8deea4991294dddf780eeb0887"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>extension_available</b> (const std::string &ext) const </td></tr>
+<tr class="separator:a7e949e8deea4991294dddf780eeb0887"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1766f02256f44e9040fa4e4dc090471a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1766f02256f44e9040fa4e4dc090471a"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>extensions</b> () const </td></tr>
+<tr class="separator:a1766f02256f44e9040fa4e4dc090471a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a55116d6df17edd81b7d58a4cf5a62b7a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a55116d6df17edd81b7d58a4cf5a62b7a"></a>
+cl_device_type </td><td class="memItemRight" valign="bottom"><b>type</b> () const </td></tr>
+<tr class="separator:a55116d6df17edd81b7d58a4cf5a62b7a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a99669601155a42a939ba27df659d3a9d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a99669601155a42a939ba27df659d3a9d"></a>
+std::string </td><td class="memItemRight" valign="bottom"><b>vendor</b> () const </td></tr>
+<tr class="separator:a99669601155a42a939ba27df659d3a9d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3a77452c9c65c2d7e71c9461cbd60ec8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3a77452c9c65c2d7e71c9461cbd60ec8"></a>
+cl_uint </td><td class="memItemRight" valign="bottom"><b>address_bits</b> () const </td></tr>
+<tr class="separator:a3a77452c9c65c2d7e71c9461cbd60ec8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2ac1ca730e218e78e7e61e272f489885"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ac1ca730e218e78e7e61e272f489885"></a>
+cl_device_id </td><td class="memItemRight" valign="bottom"><b>device_id</b> () const </td></tr>
+<tr class="separator:a2ac1ca730e218e78e7e61e272f489885"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aff7299dfbbc06556bb7453ea89a2b95d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aff7299dfbbc06556bb7453ea89a2b95d"></a>
+cl_command_queue </td><td class="memItemRight" valign="bottom"><b>command_queue</b> () const </td></tr>
+<tr class="separator:aff7299dfbbc06556bb7453ea89a2b95d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae01f1b9d90c84d614a55fed7aacff9dd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae01f1b9d90c84d614a55fed7aacff9dd"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_command_queue</b> (cl_command_queue cmd_queue)</td></tr>
+<tr class="separator:ae01f1b9d90c84d614a55fed7aacff9dd"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a357c187838aa075f23be7b8c86ddcbd3"><td class="memTemplParams" colspan="2"><a class="anchor" id="a357c187838aa075f23be7b8c86ddcbd3"></a>
+template<typename DeviceFilter > </td></tr>
+<tr class="memitem:a357c187838aa075f23be7b8c86ddcbd3"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>opencl_factory</b></td></tr>
+<tr class="separator:a357c187838aa075f23be7b8c86ddcbd3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a563313182c8258bf25535dab83a3ca27"><td class="memTemplParams" colspan="2"><a class="anchor" id="a563313182c8258bf25535dab83a3ca27"></a>
+template<typename Factory > </td></tr>
+<tr class="memitem:a563313182c8258bf25535dab83a3ca27"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>opencl_memory</b></td></tr>
+<tr class="separator:a563313182c8258bf25535dab83a3ca27"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a083a3933f9cd414d4b5cabb4c5c3ad7c"><td class="memTemplParams" colspan="2"><a class="anchor" id="a083a3933f9cd414d4b5cabb4c5c3ad7c"></a>
+template<typename Factory > </td></tr>
+<tr class="memitem:a083a3933f9cd414d4b5cabb4c5c3ad7c"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>opencl_program</b></td></tr>
+<tr class="separator:a083a3933f9cd414d4b5cabb4c5c3ad7c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad8b4afeb2397e418a77afcc4deff6a5f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8b4afeb2397e418a77afcc4deff6a5f"></a>
+class </td><td class="memItemRight" valign="bottom"><b>opencl_foundation</b></td></tr>
+<tr class="separator:ad8b4afeb2397e418a77afcc4deff6a5f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6560a38156dede308dcb1703a057c1b9"><td class="memTemplParams" colspan="2"><a class="anchor" id="a6560a38156dede308dcb1703a057c1b9"></a>
+template<typename T , typename Factory > </td></tr>
+<tr class="memitem:a6560a38156dede308dcb1703a057c1b9"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>opencl_buffer</b></td></tr>
+<tr class="separator:a6560a38156dede308dcb1703a057c1b9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acc0eaf33faca7708edf37103a3805da4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acc0eaf33faca7708edf37103a3805da4"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>operator==</b> (<a class="el" href="a00089.html">opencl_device</a> d1, <a class="el" href="a00089.html">opencl_device</a> d2)</td></tr>
+<tr class="separator:acc0eaf33faca7708edf37103a3805da4"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<li>flow_graph_opencl_node.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00089.png b/doc/html/a00089.png
deleted file mode 100644
index 2e87a79..0000000
Binary files a/doc/html/a00089.png and /dev/null differ
diff --git a/doc/html/a00090.html b/doc/html/a00090.html
index 91a2b12..b69c9f3 100644
--- a/doc/html/a00090.html
+++ b/doc/html/a00090.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::join_node< OutputTuple, tag_matching > Class Template Reference</title>
+<title>tbb::flow::interface9::opencl_device_list Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,89 +33,72 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00090.html">join_node< OutputTuple, tag_matching ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00090.html">opencl_device_list</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00351.html">List of all members</a>  </div>
+<a href="a00335.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::join_node< OutputTuple, tag_matching > Class Template Reference</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_device_list Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::join_node< OutputTuple, tag_matching >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00090.png" usemap="#tbb::flow::interface7::join_node< OutputTuple, tag_matching >_map" alt=""/>
-  <map id="tbb::flow::interface7::join_node< OutputTuple, tag_matching >_map" name="tbb::flow::interface7::join_node< OutputTuple, tag_matching >_map">
-</map>
- </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:a781bbb3b7d716e8228ded9837c990d2e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a781bbb3b7d716e8228ded9837c990d2e"></a>
-typedef OutputTuple </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:a781bbb3b7d716e8228ded9837c990d2e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4a071f54524c83c4767b101cde5a3c98"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a071f54524c83c4767b101cde5a3c98"></a>
+<tr class="memitem:a48899edfc96022f63e82948f2fad78f9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a48899edfc96022f63e82948f2fad78f9"></a>
+typedef container_type::iterator </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+<tr class="separator:a48899edfc96022f63e82948f2fad78f9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3e04c7574eedd65062fd6da4edf810f6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3e04c7574eedd65062fd6da4edf810f6"></a>
 typedef <br class="typebreak"/>
-unfolded_type::input_ports_type </td><td class="memItemRight" valign="bottom"><b>input_ports_type</b></td></tr>
-<tr class="separator:a4a071f54524c83c4767b101cde5a3c98"><td class="memSeparator" colspan="2"> </td></tr>
+container_type::const_iterator </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
+<tr class="separator:a3e04c7574eedd65062fd6da4edf810f6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1bfa6bb5623e646aee91227d49ddefb8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1bfa6bb5623e646aee91227d49ddefb8"></a>
+typedef container_type::size_type </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
+<tr class="separator:a1bfa6bb5623e646aee91227d49ddefb8"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:ae85fc11cda08b814533a9257d6adf994"><td class="memTemplParams" colspan="2"><a class="anchor" id="ae85fc11cda08b814533a9257d6adf994"></a>
-template<typename __TBB_B0 , typename __TBB_B1 > </td></tr>
-<tr class="memitem:ae85fc11cda08b814533a9257d6adf994"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>join_node</b> (<a class="el" href="a00070.html">graph</a> &g, __TBB_B0 b0, __TBB_B1 b1)</td></tr>
-<tr class="separator:ae85fc11cda08b814533a9257d6adf994"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a03ed108eab68b8e592ab96edde3aee8b"><td class="memTemplParams" colspan="2"><a class="anchor" id="a03ed108eab68b8e592ab96edde3aee8b"></a>
-template<typename __TBB_B0 , typename __TBB_B1 , typename __TBB_B2 > </td></tr>
-<tr class="memitem:a03ed108eab68b8e592ab96edde3aee8b"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>join_node</b> (<a class="el" href="a00070.html">graph</a> &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2)</td></tr>
-<tr class="separator:a03ed108eab68b8e592ab96edde3aee8b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab24daee1d70ca07d16dd7ccdad5069f2"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab24daee1d70ca07d16dd7ccdad5069f2"></a>
-template<typename __TBB_B0 , typename __TBB_B1 , typename __TBB_B2 , typename __TBB_B3 > </td></tr>
-<tr class="memitem:ab24daee1d70ca07d16dd7ccdad5069f2"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>join_node</b> (<a class="el" href="a00070.html">graph</a> &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3)</td></tr>
-<tr class="separator:ab24daee1d70ca07d16dd7ccdad5069f2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aca64e8e0b0b032b4246d57575d73aacd"><td class="memTemplParams" colspan="2"><a class="anchor" id="aca64e8e0b0b032b4246d57575d73aacd"></a>
-template<typename __TBB_B0 , typename __TBB_B1 , typename __TBB_B2 , typename __TBB_B3 , typename __TBB_B4 > </td></tr>
-<tr class="memitem:aca64e8e0b0b032b4246d57575d73aacd"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>join_node</b> (<a class="el" href="a00070.html">graph</a> &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4)</td></tr>
-<tr class="separator:aca64e8e0b0b032b4246d57575d73aacd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a93e5f0dbdcc57290f522a89520dbce76"><td class="memTemplParams" colspan="2"><a class="anchor" id="a93e5f0dbdcc57290f522a89520dbce76"></a>
-template<typename __TBB_B0 , typename __TBB_B1 , typename __TBB_B2 , typename __TBB_B3 , typename __TBB_B4 , typename __TBB_B5 > </td></tr>
-<tr class="memitem:a93e5f0dbdcc57290f522a89520dbce76"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>join_node</b> (<a class="el" href="a00070.html">graph</a> &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5)</td></tr>
-<tr class="separator:a93e5f0dbdcc57290f522a89520dbce76"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a90567e1dddddbde9de43fa4cd6b7447f"><td class="memTemplParams" colspan="2"><a class="anchor" id="a90567e1dddddbde9de43fa4cd6b7447f"></a>
-template<typename __TBB_B0 , typename __TBB_B1 , typename __TBB_B2 , typename __TBB_B3 , typename __TBB_B4 , typename __TBB_B5 , typename __TBB_B6 > </td></tr>
-<tr class="memitem:a90567e1dddddbde9de43fa4cd6b7447f"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>join_node</b> (<a class="el" href="a00070.html">graph</a> &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5, __TBB_B6 b6)</td></tr>
-<tr class="separator:a90567e1dddddbde9de43fa4cd6b7447f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a58b25ceef8a28e344077999f8d0554b0"><td class="memTemplParams" colspan="2"><a class="anchor" id="a58b25ceef8a28e344077999f8d0554b0"></a>
-template<typename __TBB_B0 , typename __TBB_B1 , typename __TBB_B2 , typename __TBB_B3 , typename __TBB_B4 , typename __TBB_B5 , typename __TBB_B6 , typename __TBB_B7 > </td></tr>
-<tr class="memitem:a58b25ceef8a28e344077999f8d0554b0"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>join_node</b> (<a class="el" href="a00070.html">graph</a> &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5, __TBB_B6 b6, __TBB_B7 b7)</td></tr>
-<tr class="separator:a58b25ceef8a28e344077999f8d0554b0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a75c58249ea5875548a995bae56186ceb"><td class="memTemplParams" colspan="2"><a class="anchor" id="a75c58249ea5875548a995bae56186ceb"></a>
-template<typename __TBB_B0 , typename __TBB_B1 , typename __TBB_B2 , typename __TBB_B3 , typename __TBB_B4 , typename __TBB_B5 , typename __TBB_B6 , typename __TBB_B7 , typename __TBB_B8 > </td></tr>
-<tr class="memitem:a75c58249ea5875548a995bae56186ceb"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>join_node</b> (<a class="el" href="a00070.html">graph</a> &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5, __TBB_B6 b6, __TBB_B7 b7, __TBB_B8 b8)</td></tr>
-<tr class="separator:a75c58249ea5875548a995bae56186ceb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a03a7669da77b8e28460be89709071e21"><td class="memTemplParams" colspan="2"><a class="anchor" id="a03a7669da77b8e28460be89709071e21"></a>
-template<typename __TBB_B0 , typename __TBB_B1 , typename __TBB_B2 , typename __TBB_B3 , typename __TBB_B4 , typename __TBB_B5 , typename __TBB_B6 , typename __TBB_B7 , typename __TBB_B8 , typename __TBB_B9 > </td></tr>
-<tr class="memitem:a03a7669da77b8e28460be89709071e21"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>join_node</b> (<a class="el" href="a00070.html">graph</a> &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5, __TBB_B6 b6, __TBB_B7 b7, __TBB_B8 b8, __TBB_B9 b9)</td></tr>
-<tr class="separator:a03a7669da77b8e28460be89709071e21"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab84d8ca452b751406a4968143063eb5d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab84d8ca452b751406a4968143063eb5d"></a>
- </td><td class="memItemRight" valign="bottom"><b>join_node</b> (const <a class="el" href="a00087.html">join_node</a> &other)</td></tr>
-<tr class="separator:ab84d8ca452b751406a4968143063eb5d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aeaa120514905a9e5c1c5d712d4633892"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeaa120514905a9e5c1c5d712d4633892"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:aeaa120514905a9e5c1c5d712d4633892"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa1f7ec40e31b6838a0c92d0f2b4e0c2b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa1f7ec40e31b6838a0c92d0f2b4e0c2b"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_device_list</b> (std::initializer_list< <a class="el" href="a00089.html">opencl_device</a> > il)</td></tr>
+<tr class="separator:aa1f7ec40e31b6838a0c92d0f2b4e0c2b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adcafeef5fc3ccec6ec71224fd52065c1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adcafeef5fc3ccec6ec71224fd52065c1"></a>
+void </td><td class="memItemRight" valign="bottom"><b>add</b> (<a class="el" href="a00089.html">opencl_device</a> d)</td></tr>
+<tr class="separator:adcafeef5fc3ccec6ec71224fd52065c1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a36ff99b117684b7fc4e73eb83247f7df"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a36ff99b117684b7fc4e73eb83247f7df"></a>
+size_type </td><td class="memItemRight" valign="bottom"><b>size</b> () const </td></tr>
+<tr class="separator:a36ff99b117684b7fc4e73eb83247f7df"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab1b563296db2451460ddcdd5fd7f2fe1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab1b563296db2451460ddcdd5fd7f2fe1"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>empty</b> () const </td></tr>
+<tr class="separator:ab1b563296db2451460ddcdd5fd7f2fe1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a02f40e28ede3121a088c1fc8536a49f3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a02f40e28ede3121a088c1fc8536a49f3"></a>
+iterator </td><td class="memItemRight" valign="bottom"><b>begin</b> ()</td></tr>
+<tr class="separator:a02f40e28ede3121a088c1fc8536a49f3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abd0c58648d7da39ee66a31675d343d5e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abd0c58648d7da39ee66a31675d343d5e"></a>
+iterator </td><td class="memItemRight" valign="bottom"><b>end</b> ()</td></tr>
+<tr class="separator:abd0c58648d7da39ee66a31675d343d5e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6001837154cdcfada14ab00851f5a760"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6001837154cdcfada14ab00851f5a760"></a>
+const_iterator </td><td class="memItemRight" valign="bottom"><b>begin</b> () const </td></tr>
+<tr class="separator:a6001837154cdcfada14ab00851f5a760"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6831fbaa5e4764137d1b071075b8ceb0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6831fbaa5e4764137d1b071075b8ceb0"></a>
+const_iterator </td><td class="memItemRight" valign="bottom"><b>end</b> () const </td></tr>
+<tr class="separator:a6831fbaa5e4764137d1b071075b8ceb0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1f1728dfad22321793b3ea4fa4446e05"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1f1728dfad22321793b3ea4fa4446e05"></a>
+const_iterator </td><td class="memItemRight" valign="bottom"><b>cbegin</b> () const </td></tr>
+<tr class="separator:a1f1728dfad22321793b3ea4fa4446e05"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afc999f284a77e4fe7d9b35f9c354bbde"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc999f284a77e4fe7d9b35f9c354bbde"></a>
+const_iterator </td><td class="memItemRight" valign="bottom"><b>cend</b> () const </td></tr>
+<tr class="separator:afc999f284a77e4fe7d9b35f9c354bbde"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<li>flow_graph_opencl_node.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00090.png b/doc/html/a00090.png
deleted file mode 100644
index f228a80..0000000
Binary files a/doc/html/a00090.png and /dev/null differ
diff --git a/doc/html/a00091.html b/doc/html/a00091.html
index aaad6a4..825698b 100644
--- a/doc/html/a00091.html
+++ b/doc/html/a00091.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::limiter_node< T > Class Template Reference</title>
+<title>tbb::flow::interface9::opencl_factory< DeviceFilter > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,312 +33,91 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00091.html">limiter_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00091.html">opencl_factory</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#nested-classes">Classes</a> |
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-attribs">Public Attributes</a> |
-<a href="#pro-methods">Protected Member Functions</a> |
 <a href="#friends">Friends</a> |
-<a href="a00330.html">List of all members</a>  </div>
+<a href="a00331.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::limiter_node< T > Class Template Reference</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_factory< DeviceFilter > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Forwards messages only if the threshold has not been reached.  
- <a href="a00091.html#details">More...</a></p>
-
-<p><code>#include <flow_graph.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::limiter_node< T >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00091.png" usemap="#tbb::flow::interface7::limiter_node< T >_map" alt=""/>
-  <map id="tbb::flow::interface7::limiter_node< T >_map" name="tbb::flow::interface7::limiter_node< T >_map">
-<area href="a00072.html" title="The base of all graph nodes. " alt="tbb::flow::interface7::graph_node" shape="rect" coords="0,56,226,80"/>
-<area href="a00124.html" title="Pure virtual template class that defines a receiver of messages of type T. " alt="tbb::flow::interface7::receiver< T >" shape="rect" coords="236,56,462,80"/>
-<area href="a00142.html" title="Pure virtual template class that defines a sender of messages of type T. " alt="tbb::flow::interface7::sender< T >" shape="rect" coords="472,56,698,80"/>
-</map>
- </div></div>
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00074.html">kernel</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:a69eff22a9947c69979454b3e3e02de4a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69eff22a9947c69979454b3e3e02de4a"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
-<tr class="separator:a69eff22a9947c69979454b3e3e02de4a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a99fc5a0478d535dbde40afbb9104b235"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a99fc5a0478d535dbde40afbb9104b235"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:a99fc5a0478d535dbde40afbb9104b235"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad8a2c4701d026ddbdda2bb2bc7b3e0fd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8a2c4701d026ddbdda2bb2bc7b3e0fd"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> > </td><td class="memItemRight" valign="bottom"><b>predecessor_type</b></td></tr>
-<tr class="separator:ad8a2c4701d026ddbdda2bb2bc7b3e0fd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7ec4d2a468d636c36774840a2f18bc4d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7ec4d2a468d636c36774840a2f18bc4d"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> > </td><td class="memItemRight" valign="bottom"><b>successor_type</b></td></tr>
-<tr class="separator:a7ec4d2a468d636c36774840a2f18bc4d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a060ff9d32a256a10c9c5c8f267dd7d75"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a060ff9d32a256a10c9c5c8f267dd7d75"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> ><br class="typebreak"/>
-::<a class="el" href="a00059.html">built_predecessors_type</a> </td><td class="memItemRight" valign="bottom"><b>built_predecessors_type</b></td></tr>
-<tr class="separator:a060ff9d32a256a10c9c5c8f267dd7d75"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7b41cc4a6e0dc0d896773f7f81245afb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b41cc4a6e0dc0d896773f7f81245afb"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> ><br class="typebreak"/>
-::<a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a> </td><td class="memItemRight" valign="bottom"><b>built_successors_type</b></td></tr>
-<tr class="separator:a7b41cc4a6e0dc0d896773f7f81245afb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a58cc30fe31c30491557b0816afcd8caf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a58cc30fe31c30491557b0816afcd8caf"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> ><br class="typebreak"/>
-::predecessor_list_type </td><td class="memItemRight" valign="bottom"><b>predecessor_list_type</b></td></tr>
-<tr class="separator:a58cc30fe31c30491557b0816afcd8caf"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1d9f873c7e1c3f9adcf6f0aed1c04675"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1d9f873c7e1c3f9adcf6f0aed1c04675"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> ><br class="typebreak"/>
-::successor_list_type </td><td class="memItemRight" valign="bottom"><b>successor_list_type</b></td></tr>
-<tr class="separator:a1d9f873c7e1c3f9adcf6f0aed1c04675"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00124"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00124')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td></tr>
-<tr class="memitem:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16eccc851b858604344bb8f1bb9eedc8"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a></td></tr>
-<tr class="memdesc:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br/></td></tr>
-<tr class="separator:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbadf5511bd568d283040cd88bd4e81e"></a>
-typedef <a class="el" href="a00142.html">sender</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a></td></tr>
-<tr class="memdesc:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br/></td></tr>
-<tr class="separator:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00d44512fd61d416e6f615e88063d038 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00d44512fd61d416e6f615e88063d038"></a>
-typedef <br class="typebreak"/>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> > </td><td class="memItemRight" valign="bottom"><b>built_predecessors_type</b></td></tr>
-<tr class="separator:a00d44512fd61d416e6f615e88063d038 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2cc119d6dff16073fc5f0d4855a9e4b7 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2cc119d6dff16073fc5f0d4855a9e4b7"></a>
-typedef <br class="typebreak"/>
-built_predecessors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>predecessor_list_type</b></td></tr>
-<tr class="separator:a2cc119d6dff16073fc5f0d4855a9e4b7 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00142"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00142')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td></tr>
-<tr class="memitem:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add86fddf72758d8e5b05b07650c6eeed"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a></td></tr>
-<tr class="memdesc:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">The output type of this sender. <br/></td></tr>
-<tr class="separator:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7779627063a29d4d2a1fc905a5cae8db"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a></td></tr>
-<tr class="memdesc:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <br/></td></tr>
-<tr class="separator:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8aba8b2c5950f113a88f43a97c2207f5"></a>
-typedef <br class="typebreak"/>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a></td></tr>
-<tr class="memdesc:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">interface to record edges for traversal & deletion <br/></td></tr>
-<tr class="separator:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae6c01f7a39a61f6a25f1129e53047b2b inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6c01f7a39a61f6a25f1129e53047b2b"></a>
-typedef <br class="typebreak"/>
-built_successors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>successor_list_type</b></td></tr>
-<tr class="separator:ae6c01f7a39a61f6a25f1129e53047b2b inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac73eaeeacc0bb5870d2d243d67ba9301"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac73eaeeacc0bb5870d2d243d67ba9301"></a>
+template<typename T > </td></tr>
+<tr class="memitem:ac73eaeeacc0bb5870d2d243d67ba9301"><td class="memTemplItemLeft" align="right" valign="top">using </td><td class="memTemplItemRight" valign="bottom"><b>async_msg_type</b> = <a class="el" href="a00053.html">dependency_msg</a>< T, <a class="el" href="a00091.html">opencl_factory</a>< DeviceFilter >></td></tr>
+<tr class="separator:ac73eaeeacc0bb5870d2d243d67ba9301"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3b1a5a14a8418fad9e490af3a66337e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3b1a5a14a8418fad9e490af3a66337e8"></a>
+typedef <a class="el" href="a00089.html">opencl_device</a> </td><td class="memItemRight" valign="bottom"><b>device_type</b></td></tr>
+<tr class="separator:a3b1a5a14a8418fad9e490af3a66337e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abff39774d3730a68f41655c508330787"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abff39774d3730a68f41655c508330787"></a>
+typedef <a class="el" href="a00074.html">kernel</a> </td><td class="memItemRight" valign="bottom"><b>kernel_type</b></td></tr>
+<tr class="separator:abff39774d3730a68f41655c508330787"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a21edc0bf4c4187d231a33ab037d98446"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a21edc0bf4c4187d231a33ab037d98446"></a>
+typedef <a class="el" href="a00100.html">opencl_range</a> </td><td class="memItemRight" valign="bottom"><b>range_type</b></td></tr>
+<tr class="separator:a21edc0bf4c4187d231a33ab037d98446"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:af1c8daee8d1fd31e63f78dbb8d0ec87d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af1c8daee8d1fd31e63f78dbb8d0ec87d"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html#af1c8daee8d1fd31e63f78dbb8d0ec87d">limiter_node</a> (<a class="el" href="a00070.html">graph</a> &g, size_t threshold, int num_decrement_predecessors=0)</td></tr>
-<tr class="memdesc:af1c8daee8d1fd31e63f78dbb8d0ec87d"><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br/></td></tr>
-<tr class="separator:af1c8daee8d1fd31e63f78dbb8d0ec87d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a99b359e7a83de8dc72dcad01798acab8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a99b359e7a83de8dc72dcad01798acab8"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html#a99b359e7a83de8dc72dcad01798acab8">limiter_node</a> (const <a class="el" href="a00091.html">limiter_node</a> &src)</td></tr>
-<tr class="memdesc:a99b359e7a83de8dc72dcad01798acab8"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br/></td></tr>
-<tr class="separator:a99b359e7a83de8dc72dcad01798acab8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7b4e663007df5428bdb376a887a6c580"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b4e663007df5428bdb376a887a6c580"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:a7b4e663007df5428bdb376a887a6c580"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad2cfd954eb06732f7bae8f2c8fe28735"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad2cfd954eb06732f7bae8f2c8fe28735"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html#ad2cfd954eb06732f7bae8f2c8fe28735">register_successor</a> (<a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> > &r)</td></tr>
-<tr class="memdesc:ad2cfd954eb06732f7bae8f2c8fe28735"><td class="mdescLeft"> </td><td class="mdescRight">Replace the current successor with this new successor. <br/></td></tr>
-<tr class="separator:ad2cfd954eb06732f7bae8f2c8fe28735"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac7b092dcc2808abf02816d4ac9c86e66"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html#ac7b092dcc2808abf02816d4ac9c86e66">remove_successor</a> (<a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> > &r)</td></tr>
-<tr class="memdesc:ac7b092dcc2808abf02816d4ac9c86e66"><td class="mdescLeft"> </td><td class="mdescRight">Removes a successor from this node.  <a href="#ac7b092dcc2808abf02816d4ac9c86e66">More...</a><br/></td></tr>
-<tr class="separator:ac7b092dcc2808abf02816d4ac9c86e66"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab3338bc8de0be33a246bdb99f46420c9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab3338bc8de0be33a246bdb99f46420c9"></a>
-<a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a> & </td><td class="memItemRight" valign="bottom"><b>built_successors</b> ()</td></tr>
-<tr class="separator:ab3338bc8de0be33a246bdb99f46420c9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7e92788de5f7c4c3d479a35438e9e176"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7e92788de5f7c4c3d479a35438e9e176"></a>
-<a class="el" href="a00059.html">built_predecessors_type</a> & </td><td class="memItemRight" valign="bottom"><b>built_predecessors</b> ()</td></tr>
-<tr class="separator:a7e92788de5f7c4c3d479a35438e9e176"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af8a9bcbd7b9c79519a4f3f3215e0b9a8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af8a9bcbd7b9c79519a4f3f3215e0b9a8"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_successor</b> (<a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> > &src)</td></tr>
-<tr class="separator:af8a9bcbd7b9c79519a4f3f3215e0b9a8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a767b00f567fe53f95fdbc2874dbdde46"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a767b00f567fe53f95fdbc2874dbdde46"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_delete_built_successor</b> (<a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> > &src)</td></tr>
-<tr class="separator:a767b00f567fe53f95fdbc2874dbdde46"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae338d50ad2de151bfc8d468e19500e42"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae338d50ad2de151bfc8d468e19500e42"></a>
-size_t </td><td class="memItemRight" valign="bottom"><b>successor_count</b> ()</td></tr>
-<tr class="separator:ae338d50ad2de151bfc8d468e19500e42"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6ab328e503b1e807317639b971104bbe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6ab328e503b1e807317639b971104bbe"></a>
-void </td><td class="memItemRight" valign="bottom"><b>copy_successors</b> (successor_list_type &v)</td></tr>
-<tr class="separator:a6ab328e503b1e807317639b971104bbe"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a090c72ee1055b0d6260f86a68acff4d7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a090c72ee1055b0d6260f86a68acff4d7"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_predecessor</b> (<a class="el" href="a00142.html">sender</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> > &src)</td></tr>
-<tr class="separator:a090c72ee1055b0d6260f86a68acff4d7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae6ffc3d3f264c27b436e3e41f671eca7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6ffc3d3f264c27b436e3e41f671eca7"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_delete_built_predecessor</b> (<a class="el" href="a00142.html">sender</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> > &src)</td></tr>
-<tr class="separator:ae6ffc3d3f264c27b436e3e41f671eca7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa3f85a6242ead5dd62ce05e30cf6f770"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa3f85a6242ead5dd62ce05e30cf6f770"></a>
-size_t </td><td class="memItemRight" valign="bottom"><b>predecessor_count</b> ()</td></tr>
-<tr class="separator:aa3f85a6242ead5dd62ce05e30cf6f770"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aab1140239fcdae89278fd3048ebd71c1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aab1140239fcdae89278fd3048ebd71c1"></a>
-void </td><td class="memItemRight" valign="bottom"><b>copy_predecessors</b> (predecessor_list_type &v)</td></tr>
-<tr class="separator:aab1140239fcdae89278fd3048ebd71c1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3fa166205c94e5bc85fa44f4d55c712d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3fa166205c94e5bc85fa44f4d55c712d"></a>
-void </td><td class="memItemRight" valign="bottom"><b>extract</b> ()</td></tr>
-<tr class="separator:a3fa166205c94e5bc85fa44f4d55c712d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aca5ef5cec3b26227d71686d99ee04f7e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aca5ef5cec3b26227d71686d99ee04f7e"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html#aca5ef5cec3b26227d71686d99ee04f7e">register_predecessor</a> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &src)</td></tr>
-<tr class="memdesc:aca5ef5cec3b26227d71686d99ee04f7e"><td class="mdescLeft"> </td><td class="mdescRight">Adds src to the list of cached predecessors. <br/></td></tr>
-<tr class="separator:aca5ef5cec3b26227d71686d99ee04f7e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8aca7b4bd4ee13faf713021eb0d86735"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8aca7b4bd4ee13faf713021eb0d86735"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html#a8aca7b4bd4ee13faf713021eb0d86735">remove_predecessor</a> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &src)</td></tr>
-<tr class="memdesc:a8aca7b4bd4ee13faf713021eb0d86735"><td class="mdescLeft"> </td><td class="mdescRight">Removes src from the list of cached predecessors. <br/></td></tr>
-<tr class="separator:a8aca7b4bd4ee13faf713021eb0d86735"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00072')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4badd313105e30f539882276353dcb8e"></a>
- </td><td class="memItemRight" valign="bottom"><b>graph_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00124"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00124')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td></tr>
-<tr class="memitem:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a733889a9053478ef2fb2528e2205bf07"></a>
-virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a733889a9053478ef2fb2528e2205bf07">~receiver</a> ()</td></tr>
-<tr class="memdesc:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br/></td></tr>
-<tr class="separator:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee5067bb4f4b71ffa786c1b33cb9aa6a"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#aee5067bb4f4b71ffa786c1b33cb9aa6a">try_put</a> (const T &t)</td></tr>
-<tr class="memdesc:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Put an item to the receiver. <br/></td></tr>
-<tr class="separator:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a63273d246d9dd8d259f9cc1eead42eb2 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63273d246d9dd8d259f9cc1eead42eb2"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>copy_predecessors</b> (predecessor_list_type &)=0</td></tr>
-<tr class="separator:a63273d246d9dd8d259f9cc1eead42eb2 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00142"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00142')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td></tr>
-<tr class="memitem:ad50b8ac93e79cbdcd2bba11d35432f2c inherit pub_methods_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad50b8ac93e79cbdcd2bba11d35432f2c"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#ad50b8ac93e79cbdcd2bba11d35432f2c">try_get</a> (T &)</td></tr>
-<tr class="memdesc:ad50b8ac93e79cbdcd2bba11d35432f2c inherit pub_methods_a00142"><td class="mdescLeft"> </td><td class="mdescRight">Request an item from the sender. <br/></td></tr>
-<tr class="separator:ad50b8ac93e79cbdcd2bba11d35432f2c inherit pub_methods_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa1b9dcf77ab558530ff93a706b4c4b5d inherit pub_methods_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa1b9dcf77ab558530ff93a706b4c4b5d"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#aa1b9dcf77ab558530ff93a706b4c4b5d">try_reserve</a> (T &)</td></tr>
-<tr class="memdesc:aa1b9dcf77ab558530ff93a706b4c4b5d inherit pub_methods_a00142"><td class="mdescLeft"> </td><td class="mdescRight">Reserves an item in the sender. <br/></td></tr>
-<tr class="separator:aa1b9dcf77ab558530ff93a706b4c4b5d inherit pub_methods_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a97ac316ddfb6bd7c7f2f56e3e819a30a inherit pub_methods_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a97ac316ddfb6bd7c7f2f56e3e819a30a"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a97ac316ddfb6bd7c7f2f56e3e819a30a">try_release</a> ()</td></tr>
-<tr class="memdesc:a97ac316ddfb6bd7c7f2f56e3e819a30a inherit pub_methods_a00142"><td class="mdescLeft"> </td><td class="mdescRight">Releases the reserved item. <br/></td></tr>
-<tr class="separator:a97ac316ddfb6bd7c7f2f56e3e819a30a inherit pub_methods_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad404d5218c7ae2556261ffa880cdf804 inherit pub_methods_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad404d5218c7ae2556261ffa880cdf804"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#ad404d5218c7ae2556261ffa880cdf804">try_consume</a> ()</td></tr>
-<tr class="memdesc:ad404d5218c7ae2556261ffa880cdf804 inherit pub_methods_a00142"><td class="mdescLeft"> </td><td class="mdescRight">Consumes the reserved item. <br/></td></tr>
-<tr class="separator:ad404d5218c7ae2556261ffa880cdf804 inherit pub_methods_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:ac313b6586bf183a33c3196037964547d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac313b6586bf183a33c3196037964547d"></a>
-internal::decrementer<br class="typebreak"/>
-< <a class="el" href="a00091.html">limiter_node</a>< T > > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html#ac313b6586bf183a33c3196037964547d">decrement</a></td></tr>
-<tr class="memdesc:ac313b6586bf183a33c3196037964547d"><td class="mdescLeft"> </td><td class="mdescRight">The internal <a class="el" href="a00124.html">receiver< continue_msg ></a> that decrements the count. <br/></td></tr>
-<tr class="separator:ac313b6586bf183a33c3196037964547d"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:a0551cf104b35669b5f5153c1d03d5d2d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0551cf104b35669b5f5153c1d03d5d2d"></a>
-task * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html#a0551cf104b35669b5f5153c1d03d5d2d">try_put_task</a> (const T &t)</td></tr>
-<tr class="memdesc:a0551cf104b35669b5f5153c1d03d5d2d"><td class="mdescLeft"> </td><td class="mdescRight">Puts an item to this receiver. <br/></td></tr>
-<tr class="separator:a0551cf104b35669b5f5153c1d03d5d2d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abad6141f2d6682b851dd4db3af2f24f6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abad6141f2d6682b851dd4db3af2f24f6"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_receiver</b> (__TBB_PFG_RESET_ARG(reset_flags))</td></tr>
-<tr class="separator:abad6141f2d6682b851dd4db3af2f24f6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ace68f4550862c2725746df84dbd02201"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ace68f4550862c2725746df84dbd02201"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f))</td></tr>
-<tr class="separator:ace68f4550862c2725746df84dbd02201"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00072')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac25a4633873c052047b1dd568824d055"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0</td></tr>
-<tr class="separator:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00124"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00124')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td></tr>
-<tr class="memitem:ac902b1e09eea9748223eb50dc38d3575 inherit pro_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac902b1e09eea9748223eb50dc38d3575"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>reset_receiver</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0</td></tr>
-<tr class="separator:ac902b1e09eea9748223eb50dc38d3575 inherit pro_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae91eab3e06d4139ac38f143c74fe9eab inherit pro_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae91eab3e06d4139ac38f143c74fe9eab"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><b>is_continue_receiver</b> ()</td></tr>
-<tr class="separator:ae91eab3e06d4139ac38f143c74fe9eab inherit pro_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ade429751f6add3517a78d3b2bfeb4557"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ade429751f6add3517a78d3b2bfeb4557"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_factory</b> (<a class="el" href="a00093.html">opencl_graph</a> &g)</td></tr>
+<tr class="separator:ade429751f6add3517a78d3b2bfeb4557"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a388b83e950cd43581da1aef8033ea914"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a388b83e950cd43581da1aef8033ea914"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>init</b> (const <a class="el" href="a00090.html">opencl_device_list</a> &device_list)</td></tr>
+<tr class="separator:a388b83e950cd43581da1aef8033ea914"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac1c47c68f91720aaf37e7faf2ef2628d"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac1c47c68f91720aaf37e7faf2ef2628d"></a>
+template<typename... Args> </td></tr>
+<tr class="memitem:ac1c47c68f91720aaf37e7faf2ef2628d"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>send_kernel</b> (<a class="el" href="a00089.html">opencl_device</a> device, const <a class="el" href="a00074.html">kernel_type</a> &<a class="el" href="a00074.html">kernel</a>, const <a class="el" href="a00100.html">range_type</a> &work_size, Args &...args)</td></tr>
+<tr class="separator:ac1c47c68f91720aaf37e7faf2ef2628d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac2f834bb6c81d620258c1784b8e2b8b4"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac2f834bb6c81d620258c1784b8e2b8b4"></a>
+template<typename T , typename... Rest> </td></tr>
+<tr class="memitem:ac2f834bb6c81d620258c1784b8e2b8b4"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>send_data</b> (<a class="el" href="a00089.html">opencl_device</a> device, T &t, Rest &...args)</td></tr>
+<tr class="separator:ac2f834bb6c81d620258c1784b8e2b8b4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5d53ca3584a153a174907b74339ec225"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5d53ca3584a153a174907b74339ec225"></a>
+void </td><td class="memItemRight" valign="bottom"><b>send_data</b> (<a class="el" href="a00089.html">opencl_device</a>)</td></tr>
+<tr class="separator:a5d53ca3584a153a174907b74339ec225"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a36da25d12bd88746012075a595a551b3"><td class="memTemplParams" colspan="2"><a class="anchor" id="a36da25d12bd88746012075a595a551b3"></a>
+template<typename FinalizeFn , typename... Args> </td></tr>
+<tr class="memitem:a36da25d12bd88746012075a595a551b3"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>finalize</b> (<a class="el" href="a00089.html">opencl_device</a> device, FinalizeFn fn, Args &...args)</td></tr>
+<tr class="separator:a36da25d12bd88746012075a595a551b3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a157927a7d6174e08a65f66d49e0dd0c6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a157927a7d6174e08a65f66d49e0dd0c6"></a>
+const <a class="el" href="a00090.html">opencl_device_list</a> & </td><td class="memItemRight" valign="bottom"><b>devices</b> ()</td></tr>
+<tr class="separator:a157927a7d6174e08a65f66d49e0dd0c6"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
 Friends</h2></td></tr>
-<tr class="memitem:affe7799181c01bdd203c2ca2117dae7d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="affe7799181c01bdd203c2ca2117dae7d"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::forward_task_bypass< limiter_node< T > ></b></td></tr>
-<tr class="separator:affe7799181c01bdd203c2ca2117dae7d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a80d4e1a1fa28ce76b1b08e12f93983f2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a80d4e1a1fa28ce76b1b08e12f93983f2"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::decrementer< limiter_node< T > ></b></td></tr>
-<tr class="separator:a80d4e1a1fa28ce76b1b08e12f93983f2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplParams" colspan="2"><a class="anchor" id="abaf9bf74ca5f2854d09f5f07337280eb"></a>
-template<typename R , typename B > </td></tr>
-<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>run_and_put_task</b></td></tr>
-<tr class="separator:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1360e38efe396058978cf3754ad620f5"></a>
-template<typename X , typename Y > </td></tr>
-<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::broadcast_cache</b></td></tr>
-<tr class="separator:a1360e38efe396058978cf3754ad620f5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplParams" colspan="2"><a class="anchor" id="acbd9ac2610587a99cd7d43344297cc49"></a>
-template<typename X , typename Y > </td></tr>
-<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::round_robin_cache</b></td></tr>
-<tr class="separator:acbd9ac2610587a99cd7d43344297cc49"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pro_attribs_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00072')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1caee1c5677047b05d18b1662ca6fdf8"></a>
-<a class="el" href="a00070.html">graph</a> & </td><td class="memItemRight" valign="bottom"><b>my_graph</b></td></tr>
-<tr class="separator:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af48cd0cd4f6e44efc3b353adb55f86a8"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>next</b></td></tr>
-<tr class="separator:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6917bffc3cb150319679bf2395e68caa"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>prev</b></td></tr>
-<tr class="separator:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a083a3933f9cd414d4b5cabb4c5c3ad7c"><td class="memTemplParams" colspan="2"><a class="anchor" id="a083a3933f9cd414d4b5cabb4c5c3ad7c"></a>
+template<typename Factory > </td></tr>
+<tr class="memitem:a083a3933f9cd414d4b5cabb4c5c3ad7c"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>opencl_program</b></td></tr>
+<tr class="separator:a083a3933f9cd414d4b5cabb4c5c3ad7c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af173b1e5b45e0a6f9f12e6db5f6d2250"><td class="memTemplParams" colspan="2"><a class="anchor" id="af173b1e5b45e0a6f9f12e6db5f6d2250"></a>
+template<typename Factory > </td></tr>
+<tr class="memitem:af173b1e5b45e0a6f9f12e6db5f6d2250"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>opencl_buffer_impl</b></td></tr>
+<tr class="separator:af173b1e5b45e0a6f9f12e6db5f6d2250"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a563313182c8258bf25535dab83a3ca27"><td class="memTemplParams" colspan="2"><a class="anchor" id="a563313182c8258bf25535dab83a3ca27"></a>
+template<typename Factory > </td></tr>
+<tr class="memitem:a563313182c8258bf25535dab83a3ca27"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>opencl_memory</b></td></tr>
+<tr class="separator:a563313182c8258bf25535dab83a3ca27"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename T><br/>
-class tbb::flow::interface7::limiter_node< T ></h3>
-
-<p>Forwards messages only if the threshold has not been reached. </p>
-<p>This node forwards items until its threshold is reached. It contains no buffering. If the downstream node rejects, the message is dropped. </p>
-</div><h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="ac7b092dcc2808abf02816d4ac9c86e66"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node</a>< T >::remove_successor </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> > & </td>
-          <td class="paramname"><em>r</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Removes a successor from this node. </p>
-<p>r.remove_predecessor(*this) is also called. </p>
-
-<p>Implements <a class="el" href="a00142.html#ac1ae19f49e31c6ca94dcf14732eb7a64">tbb::flow::interface7::sender< T ></a>.</p>
-
-</div>
-</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<li>flow_graph_opencl_node.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00091.png b/doc/html/a00091.png
deleted file mode 100644
index e821303..0000000
Binary files a/doc/html/a00091.png and /dev/null differ
diff --git a/doc/html/a00092.html b/doc/html/a00092.html
index 29d423a..02fb1c6 100644
--- a/doc/html/a00092.html
+++ b/doc/html/a00092.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface6::memory_pool< Alloc > Class Template Reference</title>
+<title>tbb::flow::interface9::opencl_foundation Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,54 +33,49 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00092.html">memory_pool</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00092.html">opencl_foundation</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#nested-classes">Classes</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00398.html">List of all members</a>  </div>
+<a href="a00344.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface6::memory_pool< Alloc > Class Template Reference</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_foundation Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Thread-safe growable pool allocator for variable-size requests.  
- <a href="a00092.html#details">More...</a></p>
-
-<p><code>#include <memory_pool.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::interface6::memory_pool< Alloc >:</div>
+Inheritance diagram for tbb::flow::interface9::opencl_foundation:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00092.png" usemap="#tbb::interface6::memory_pool< Alloc >_map" alt=""/>
-  <map id="tbb::interface6::memory_pool< Alloc >_map" name="tbb::interface6::memory_pool< Alloc >_map">
+  <img src="a00092.png" usemap="#tbb::flow::interface9::opencl_foundation_map" alt=""/>
+  <map id="tbb::flow::interface9::opencl_foundation_map" name="tbb::flow::interface9::opencl_foundation_map">
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:af4c36829a159eac04d630ac5a99b9354"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af4c36829a159eac04d630ac5a99b9354"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00092.html#af4c36829a159eac04d630ac5a99b9354">memory_pool</a> (const Alloc &src=Alloc())</td></tr>
-<tr class="memdesc:af4c36829a159eac04d630ac5a99b9354"><td class="mdescLeft"> </td><td class="mdescRight">construct pool with underlying allocator <br/></td></tr>
-<tr class="separator:af4c36829a159eac04d630ac5a99b9354"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad2c7645b39b7280b1b3cf393d05fbaf7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad2c7645b39b7280b1b3cf393d05fbaf7"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00092.html#ad2c7645b39b7280b1b3cf393d05fbaf7">~memory_pool</a> ()</td></tr>
-<tr class="memdesc:ad2c7645b39b7280b1b3cf393d05fbaf7"><td class="mdescLeft"> </td><td class="mdescRight">destroy pool <br/></td></tr>
-<tr class="separator:ad2c7645b39b7280b1b3cf393d05fbaf7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abcd5ef171613c50cc50f92bfc247fb81"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abcd5ef171613c50cc50f92bfc247fb81"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_foundation</b> (<a class="el" href="a00093.html">opencl_graph</a> &g)</td></tr>
+<tr class="separator:abcd5ef171613c50cc50f92bfc247fb81"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acdaca8576397f3022d589d411bc26523"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acdaca8576397f3022d589d411bc26523"></a>
+<a class="el" href="a00051.html">default_opencl_factory</a> & </td><td class="memItemRight" valign="bottom"><b>get_default_opencl_factory</b> ()</td></tr>
+<tr class="separator:acdaca8576397f3022d589d411bc26523"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab82b77f8553d0244099422ca35c3777d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab82b77f8553d0244099422ca35c3777d"></a>
+const <a class="el" href="a00090.html">opencl_device_list</a> & </td><td class="memItemRight" valign="bottom"><b>get_all_devices</b> ()</td></tr>
+<tr class="separator:ab82b77f8553d0244099422ca35c3777d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a173532cfb0604625df8189e9f0f478e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a173532cfb0604625df8189e9f0f478e4"></a>
+default_device_selector_type </td><td class="memItemRight" valign="bottom"><b>get_default_device_selector</b> ()</td></tr>
+<tr class="separator:a173532cfb0604625df8189e9f0f478e4"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename Alloc><br/>
-class tbb::interface6::memory_pool< Alloc ></h3>
-
-<p>Thread-safe growable pool allocator for variable-size requests. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00198.html">memory_pool.h</a></li>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>flow_graph_opencl_node.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00092.png b/doc/html/a00092.png
index 040c525..80c0e11 100644
Binary files a/doc/html/a00092.png and b/doc/html/a00092.png differ
diff --git a/doc/html/a00093.html b/doc/html/a00093.html
index 1f86159..ddc954d 100644
--- a/doc/html/a00093.html
+++ b/doc/html/a00093.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface6::memory_pool_allocator< T, P > Class Template Reference</title>
+<title>tbb::flow::interface9::opencl_graph Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,144 +33,89 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00093.html">memory_pool_allocator</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00093.html">opencl_graph</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-types">Protected Types</a> |
+<a href="#pro-methods">Protected Member Functions</a> |
 <a href="#pro-attribs">Protected Attributes</a> |
 <a href="#friends">Friends</a> |
-<a href="a00394.html">List of all members</a>  </div>
+<a href="a00330.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface6::memory_pool_allocator< T, P > Class Template Reference<div class="ingroups"><a class="el" href="a00257.html">Memory Allocation</a></div></div>  </div>
+<div class="title">tbb::flow::interface9::opencl_graph Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  
- <a href="a00093.html#details">More...</a></p>
-
-<p><code>#include <memory_pool.h></code></p>
+<div class="dynheader">
+Inheritance diagram for tbb::flow::interface9::opencl_graph:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00093.png" usemap="#tbb::flow::interface9::opencl_graph_map" alt=""/>
+  <map id="tbb::flow::interface9::opencl_graph_map" name="tbb::flow::interface9::opencl_graph_map">
+</map>
+ </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html">rebind</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a6202050e0edbded0b0534ea4be9547e0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6202050e0edbded0b0534ea4be9547e0"></a>
-typedef <br class="typebreak"/>
-tbb::internal::allocator_type<br class="typebreak"/>
-< T >::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-<tr class="separator:a6202050e0edbded0b0534ea4be9547e0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a07450f397df1af8096f31bfa8f2e1722"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a07450f397df1af8096f31bfa8f2e1722"></a>
-typedef value_type * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-<tr class="separator:a07450f397df1af8096f31bfa8f2e1722"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a972521ed466cc8140d386331a25e895a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a972521ed466cc8140d386331a25e895a"></a>
-typedef const value_type * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-<tr class="separator:a972521ed466cc8140d386331a25e895a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a83b91759effc3a452fc565ac3bb45613"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a83b91759effc3a452fc565ac3bb45613"></a>
-typedef value_type & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
-<tr class="separator:a83b91759effc3a452fc565ac3bb45613"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a15abe537e2dad4132c956c08d9d0a27e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15abe537e2dad4132c956c08d9d0a27e"></a>
-typedef const value_type & </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
-<tr class="separator:a15abe537e2dad4132c956c08d9d0a27e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac20767f3b7a8fcdc1aff0b0874245d3a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac20767f3b7a8fcdc1aff0b0874245d3a"></a>
-typedef size_t </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-<tr class="separator:ac20767f3b7a8fcdc1aff0b0874245d3a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a23267e855e2427b401b99ce4b547f83e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a23267e855e2427b401b99ce4b547f83e"></a>
-typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
-<tr class="separator:a23267e855e2427b401b99ce4b547f83e"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a384be31e682a3b86b5b11e635232c9c5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a384be31e682a3b86b5b11e635232c9c5"></a>
- </td><td class="memItemRight" valign="bottom"><b>memory_pool_allocator</b> (pool_type &pool)  throw ()</td></tr>
-<tr class="separator:a384be31e682a3b86b5b11e635232c9c5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa2b4cf16b566e40ddb196c371e5ae96e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa2b4cf16b566e40ddb196c371e5ae96e"></a>
- </td><td class="memItemRight" valign="bottom"><b>memory_pool_allocator</b> (const <a class="el" href="a00093.html">memory_pool_allocator</a> &src)  throw ()</td></tr>
-<tr class="separator:aa2b4cf16b566e40ddb196c371e5ae96e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad32ad8245399fbdb38a0a41e912d86d9"><td class="memTemplParams" colspan="2"><a class="anchor" id="ad32ad8245399fbdb38a0a41e912d86d9"></a>
-template<typename U > </td></tr>
-<tr class="memitem:ad32ad8245399fbdb38a0a41e912d86d9"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>memory_pool_allocator</b> (const <a class="el" href="a00093.html">memory_pool_allocator</a>< U, P > &src)  throw ()</td></tr>
-<tr class="separator:ad32ad8245399fbdb38a0a41e912d86d9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a55653a8c539901be6ca24a120a5d7b72"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a55653a8c539901be6ca24a120a5d7b72"></a>
-pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (reference x) const </td></tr>
-<tr class="separator:a55653a8c539901be6ca24a120a5d7b72"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8a3e4236f6e1266f126dac557906ce2c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8a3e4236f6e1266f126dac557906ce2c"></a>
-const_pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (const_reference x) const </td></tr>
-<tr class="separator:a8a3e4236f6e1266f126dac557906ce2c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a10b9888883a3dbd66e87c4a7f874ef28"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a10b9888883a3dbd66e87c4a7f874ef28"></a>
-pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00093.html#a10b9888883a3dbd66e87c4a7f874ef28">allocate</a> (size_type n, const void *=0)</td></tr>
-<tr class="memdesc:a10b9888883a3dbd66e87c4a7f874ef28"><td class="mdescLeft"> </td><td class="mdescRight">Allocate space for n objects. <br/></td></tr>
-<tr class="separator:a10b9888883a3dbd66e87c4a7f874ef28"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9fcf288f2d653972d1bdc0c65abebed4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9fcf288f2d653972d1bdc0c65abebed4"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00093.html#a9fcf288f2d653972d1bdc0c65abebed4">deallocate</a> (pointer p, size_type)</td></tr>
-<tr class="memdesc:a9fcf288f2d653972d1bdc0c65abebed4"><td class="mdescLeft"> </td><td class="mdescRight">Free previously allocated block of memory. <br/></td></tr>
-<tr class="separator:a9fcf288f2d653972d1bdc0c65abebed4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2bded8e3fb2cec32b48771e7a1bbb838"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2bded8e3fb2cec32b48771e7a1bbb838"></a>
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00093.html#a2bded8e3fb2cec32b48771e7a1bbb838">max_size</a> () const   throw ()</td></tr>
-<tr class="memdesc:a2bded8e3fb2cec32b48771e7a1bbb838"><td class="mdescLeft"> </td><td class="mdescRight">Largest value for which method allocate might succeed. <br/></td></tr>
-<tr class="separator:a2bded8e3fb2cec32b48771e7a1bbb838"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac51b34ef90ecabdd2e0483e25603a15b"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac51b34ef90ecabdd2e0483e25603a15b"></a>
-template<typename U , typename... Args> </td></tr>
-<tr class="memitem:ac51b34ef90ecabdd2e0483e25603a15b"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00093.html#ac51b34ef90ecabdd2e0483e25603a15b">construct</a> (U *p, Args &&...args)</td></tr>
-<tr class="memdesc:ac51b34ef90ecabdd2e0483e25603a15b"><td class="mdescLeft"> </td><td class="mdescRight">Copy-construct value at location pointed to by p. <br/></td></tr>
-<tr class="separator:ac51b34ef90ecabdd2e0483e25603a15b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8be8f1b38d4b1b6bea2d83f611bf66e7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8be8f1b38d4b1b6bea2d83f611bf66e7"></a>
-void </td><td class="memItemRight" valign="bottom"><b>construct</b> (pointer p, value_type &&value)</td></tr>
-<tr class="separator:a8be8f1b38d4b1b6bea2d83f611bf66e7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:affac76f7742c4d8ea6345e0aad82792a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="affac76f7742c4d8ea6345e0aad82792a"></a>
-void </td><td class="memItemRight" valign="bottom"><b>construct</b> (pointer p, const value_type &value)</td></tr>
-<tr class="separator:affac76f7742c4d8ea6345e0aad82792a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2223b6469f88aadc432a4b3f88728d0f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2223b6469f88aadc432a4b3f88728d0f"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00093.html#a2223b6469f88aadc432a4b3f88728d0f">destroy</a> (pointer p)</td></tr>
-<tr class="memdesc:a2223b6469f88aadc432a4b3f88728d0f"><td class="mdescLeft"> </td><td class="mdescRight">Destroy value at location pointed to by p. <br/></td></tr>
-<tr class="separator:a2223b6469f88aadc432a4b3f88728d0f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9ba7a7b2c5fe477941ce580da97f5444"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9ba7a7b2c5fe477941ce580da97f5444"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00093.html#a9ba7a7b2c5fe477941ce580da97f5444">opencl_graph</a> ()</td></tr>
+<tr class="memdesc:a9ba7a7b2c5fe477941ce580da97f5444"><td class="mdescLeft"> </td><td class="mdescRight">Constructs a graph with isolated <a class="el" href="a00147.html">task_group_context</a>. <br/></td></tr>
+<tr class="separator:a9ba7a7b2c5fe477941ce580da97f5444"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4d87515053b88b4e0602d1a5f8e342c6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4d87515053b88b4e0602d1a5f8e342c6"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00093.html#a4d87515053b88b4e0602d1a5f8e342c6">opencl_graph</a> (<a class="el" href="a00147.html">task_group_context</a> &context)</td></tr>
+<tr class="memdesc:a4d87515053b88b4e0602d1a5f8e342c6"><td class="mdescLeft"> </td><td class="mdescRight">Constructs a graph with an user context. <br/></td></tr>
+<tr class="separator:a4d87515053b88b4e0602d1a5f8e342c6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa2887522d89a7d1deff76002f398d905"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa2887522d89a7d1deff76002f398d905"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00093.html#aa2887522d89a7d1deff76002f398d905">~opencl_graph</a> ()</td></tr>
+<tr class="memdesc:aa2887522d89a7d1deff76002f398d905"><td class="mdescLeft"> </td><td class="mdescRight">Destroys a graph. <br/></td></tr>
+<tr class="separator:aa2887522d89a7d1deff76002f398d905"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab61ac804963875b343626891cef00c7b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab61ac804963875b343626891cef00c7b"></a>
+const <a class="el" href="a00090.html">opencl_device_list</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00093.html#ab61ac804963875b343626891cef00c7b">available_devices</a> ()</td></tr>
+<tr class="memdesc:ab61ac804963875b343626891cef00c7b"><td class="mdescLeft"> </td><td class="mdescRight">Available devices. <br/></td></tr>
+<tr class="separator:ab61ac804963875b343626891cef00c7b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad6e9ca1f2b61a165f984617687d29767"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad6e9ca1f2b61a165f984617687d29767"></a>
+<a class="el" href="a00051.html">default_opencl_factory</a> & </td><td class="memItemRight" valign="bottom"><b>opencl_factory</b> ()</td></tr>
+<tr class="separator:ad6e9ca1f2b61a165f984617687d29767"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-types"></a>
-Protected Types</h2></td></tr>
-<tr class="memitem:aecd858782faee0fb5fa707671cfc49aa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aecd858782faee0fb5fa707671cfc49aa"></a>
-typedef P </td><td class="memItemRight" valign="bottom"><b>pool_type</b></td></tr>
-<tr class="separator:aecd858782faee0fb5fa707671cfc49aa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:a8d3b6a373bbbba62391ffbcb7f131dfd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8d3b6a373bbbba62391ffbcb7f131dfd"></a>
+<a class="el" href="a00092.html">opencl_foundation</a> & </td><td class="memItemRight" valign="bottom"><b>get_opencl_foundation</b> ()</td></tr>
+<tr class="separator:a8d3b6a373bbbba62391ffbcb7f131dfd"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
 Protected Attributes</h2></td></tr>
-<tr class="memitem:a0fbd737811d556f1d2898d3722e85f32"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0fbd737811d556f1d2898d3722e85f32"></a>
-pool_type * </td><td class="memItemRight" valign="bottom"><b>my_pool</b></td></tr>
-<tr class="separator:a0fbd737811d556f1d2898d3722e85f32"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaac465dc227e7a725e835d04e51415c6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaac465dc227e7a725e835d04e51415c6"></a>
+<a class="el" href="a00092.html">opencl_foundation</a> * </td><td class="memItemRight" valign="bottom"><b>my_opencl_foundation</b></td></tr>
+<tr class="separator:aaac465dc227e7a725e835d04e51415c6"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
 Friends</h2></td></tr>
-<tr class="memitem:a6c34ee2e5a57845f050b507cc516a005"><td class="memTemplParams" colspan="2"><a class="anchor" id="a6c34ee2e5a57845f050b507cc516a005"></a>
-template<typename U , typename R > </td></tr>
-<tr class="memitem:a6c34ee2e5a57845f050b507cc516a005"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>memory_pool_allocator</b></td></tr>
-<tr class="separator:a6c34ee2e5a57845f050b507cc516a005"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac8c26a64f4e012f2a9cf6035cf029905"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac8c26a64f4e012f2a9cf6035cf029905"></a>
-template<typename V , typename U , typename R > </td></tr>
-<tr class="memitem:ac8c26a64f4e012f2a9cf6035cf029905"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00093.html">memory_pool_allocator</a>< V, R > &a, const <a class="el" href="a00093.html">memory_pool_allocator</a>< U, R > &b)</td></tr>
-<tr class="separator:ac8c26a64f4e012f2a9cf6035cf029905"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2f7230e5bc817e7512e18b5311b3371b"><td class="memTemplParams" colspan="2"><a class="anchor" id="a2f7230e5bc817e7512e18b5311b3371b"></a>
-template<typename V , typename U , typename R > </td></tr>
-<tr class="memitem:a2f7230e5bc817e7512e18b5311b3371b"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00093.html">memory_pool_allocator</a>< V, R > &a, const <a class="el" href="a00093.html">memory_pool_allocator</a>< U, R > &b)</td></tr>
-<tr class="separator:a2f7230e5bc817e7512e18b5311b3371b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6560a38156dede308dcb1703a057c1b9"><td class="memTemplParams" colspan="2"><a class="anchor" id="a6560a38156dede308dcb1703a057c1b9"></a>
+template<typename T , typename Factory > </td></tr>
+<tr class="memitem:a6560a38156dede308dcb1703a057c1b9"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>opencl_buffer</b></td></tr>
+<tr class="separator:a6560a38156dede308dcb1703a057c1b9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a40e527dea160f135aa325dd122af597d"><td class="memTemplParams" colspan="2"><a class="anchor" id="a40e527dea160f135aa325dd122af597d"></a>
+template<cl_channel_order channel_order, cl_channel_type channel_type, typename Factory > </td></tr>
+<tr class="memitem:a40e527dea160f135aa325dd122af597d"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>opencl_image2d</b></td></tr>
+<tr class="separator:a40e527dea160f135aa325dd122af597d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae5f8a402fe0ce29e0c34d32a9206578e"><td class="memTemplParams" colspan="2"><a class="anchor" id="ae5f8a402fe0ce29e0c34d32a9206578e"></a>
+template<typename... Args> </td></tr>
+<tr class="memitem:ae5f8a402fe0ce29e0c34d32a9206578e"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>opencl_node</b></td></tr>
+<tr class="separator:ae5f8a402fe0ce29e0c34d32a9206578e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7477ae3063753d056adacfb95dff6364"><td class="memTemplParams" colspan="2"><a class="anchor" id="a7477ae3063753d056adacfb95dff6364"></a>
+template<typename DeviceFilter > </td></tr>
+<tr class="memitem:a7477ae3063753d056adacfb95dff6364"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>opencl_factory</b></td></tr>
+<tr class="separator:a7477ae3063753d056adacfb95dff6364"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename T, typename P = internal::pool_base><br/>
-class tbb::interface6::memory_pool_allocator< T, P ></h3>
-
-<p>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00198.html">memory_pool.h</a></li>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>flow_graph_opencl_node.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00093.png b/doc/html/a00093.png
new file mode 100644
index 0000000..ca166df
Binary files /dev/null and b/doc/html/a00093.png differ
diff --git a/doc/html/a00094.html b/doc/html/a00094.html
index c1b6091..d04462e 100644
--- a/doc/html/a00094.html
+++ b/doc/html/a00094.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface6::memory_pool_allocator< void, P > Class Template Reference</title>
+<title>tbb::flow::interface9::opencl_memory< Factory > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,93 +33,84 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00094.html">memory_pool_allocator< void, P ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00094.html">opencl_memory</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
 <a href="#pro-attribs">Protected Attributes</a> |
-<a href="#friends">Friends</a> |
-<a href="a00396.html">List of all members</a>  </div>
+<a href="a00338.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface6::memory_pool_allocator< void, P > Class Template Reference<div class="ingroups"><a class="el" href="a00257.html">Memory Allocation</a></div></div>  </div>
+<div class="title">tbb::flow::interface9::opencl_memory< Factory > Class Template Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  
- <a href="a00094.html#details">More...</a></p>
-
-<p><code>#include <memory_pool.h></code></p>
+<div class="dynheader">
+Inheritance diagram for tbb::flow::interface9::opencl_memory< Factory >:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00094.png" usemap="#tbb::flow::interface9::opencl_memory< Factory >_map" alt=""/>
+  <map id="tbb::flow::interface9::opencl_memory< Factory >_map" name="tbb::flow::interface9::opencl_memory< Factory >_map">
+<area href="a00088.html" alt="tbb::flow::interface9::opencl_buffer_impl< Factory >" shape="rect" coords="0,56,303,80"/>
+</map>
+ </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00123.html">rebind</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:aa4a3be261ace6f19c3c40ef2503c4984"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4a3be261ace6f19c3c40ef2503c4984"></a>
-typedef P </td><td class="memItemRight" valign="bottom"><b>pool_type</b></td></tr>
-<tr class="separator:aa4a3be261ace6f19c3c40ef2503c4984"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afb58c3e8f2e0a8f9152eae641ee420fa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afb58c3e8f2e0a8f9152eae641ee420fa"></a>
-typedef void * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-<tr class="separator:afb58c3e8f2e0a8f9152eae641ee420fa"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5e53158493ed0d617460e8dd6534a525"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e53158493ed0d617460e8dd6534a525"></a>
-typedef const void * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-<tr class="separator:a5e53158493ed0d617460e8dd6534a525"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a676a2c2649d6ffc45466d94555d71df2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a676a2c2649d6ffc45466d94555d71df2"></a>
-typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-<tr class="separator:a676a2c2649d6ffc45466d94555d71df2"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a8e697e2d03e8f69de1728409bec4f7b5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8e697e2d03e8f69de1728409bec4f7b5"></a>
- </td><td class="memItemRight" valign="bottom"><b>memory_pool_allocator</b> (pool_type &pool)  throw ()</td></tr>
-<tr class="separator:a8e697e2d03e8f69de1728409bec4f7b5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a001103c81ba25e645305f19a82db2e4a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a001103c81ba25e645305f19a82db2e4a"></a>
- </td><td class="memItemRight" valign="bottom"><b>memory_pool_allocator</b> (const <a class="el" href="a00093.html">memory_pool_allocator</a> &src)  throw ()</td></tr>
-<tr class="separator:a001103c81ba25e645305f19a82db2e4a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8d3db3082c1fa40ccb3997626f61e61e"><td class="memTemplParams" colspan="2"><a class="anchor" id="a8d3db3082c1fa40ccb3997626f61e61e"></a>
-template<typename U > </td></tr>
-<tr class="memitem:a8d3db3082c1fa40ccb3997626f61e61e"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>memory_pool_allocator</b> (const <a class="el" href="a00093.html">memory_pool_allocator</a>< U, P > &src)  throw ()</td></tr>
-<tr class="separator:a8d3db3082c1fa40ccb3997626f61e61e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aef54be65fa3b36a1b573ba8a211a8605"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aef54be65fa3b36a1b573ba8a211a8605"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_memory</b> (Factory &f)</td></tr>
+<tr class="separator:aef54be65fa3b36a1b573ba8a211a8605"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab65f207af86a4b7e2d61b99a9eab16f5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab65f207af86a4b7e2d61b99a9eab16f5"></a>
+cl_mem </td><td class="memItemRight" valign="bottom"><b>get_cl_mem</b> () const </td></tr>
+<tr class="separator:ab65f207af86a4b7e2d61b99a9eab16f5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a98b572e433ef1684499d1e43457cbfb2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a98b572e433ef1684499d1e43457cbfb2"></a>
+void * </td><td class="memItemRight" valign="bottom"><b>get_host_ptr</b> ()</td></tr>
+<tr class="separator:a98b572e433ef1684499d1e43457cbfb2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a42af307f715c23f729aa5c47986e3844"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a42af307f715c23f729aa5c47986e3844"></a>
+Factory * </td><td class="memItemRight" valign="bottom"><b>factory</b> () const </td></tr>
+<tr class="separator:a42af307f715c23f729aa5c47986e3844"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a498a227b66f298eb2008229aa905eda1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a498a227b66f298eb2008229aa905eda1"></a>
+<a class="el" href="a00053.html">dependency_msg</a>< void *, Factory > </td><td class="memItemRight" valign="bottom"><b>send</b> (<a class="el" href="a00089.html">opencl_device</a> d, const cl_event *e)</td></tr>
+<tr class="separator:a498a227b66f298eb2008229aa905eda1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9d70b4417493104ee1a9f6792abf58bb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9d70b4417493104ee1a9f6792abf58bb"></a>
+<a class="el" href="a00053.html">dependency_msg</a>< void *, Factory > </td><td class="memItemRight" valign="bottom"><b>receive</b> (const cl_event *e)</td></tr>
+<tr class="separator:a9d70b4417493104ee1a9f6792abf58bb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2c9eedfad8b9013145745acd7f4da4b7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c9eedfad8b9013145745acd7f4da4b7"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><b>map_memory</b> (<a class="el" href="a00089.html">opencl_device</a>, <a class="el" href="a00053.html">dependency_msg</a>< void *, Factory > &)=0</td></tr>
+<tr class="separator:a2c9eedfad8b9013145745acd7f4da4b7"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
 Protected Attributes</h2></td></tr>
-<tr class="memitem:a1e497d3d88dcb063ab6594eb4ad3dc35"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e497d3d88dcb063ab6594eb4ad3dc35"></a>
-pool_type * </td><td class="memItemRight" valign="bottom"><b>my_pool</b></td></tr>
-<tr class="separator:a1e497d3d88dcb063ab6594eb4ad3dc35"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:a6c34ee2e5a57845f050b507cc516a005"><td class="memTemplParams" colspan="2"><a class="anchor" id="a6c34ee2e5a57845f050b507cc516a005"></a>
-template<typename U , typename R > </td></tr>
-<tr class="memitem:a6c34ee2e5a57845f050b507cc516a005"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>memory_pool_allocator</b></td></tr>
-<tr class="separator:a6c34ee2e5a57845f050b507cc516a005"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac8c26a64f4e012f2a9cf6035cf029905"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac8c26a64f4e012f2a9cf6035cf029905"></a>
-template<typename V , typename U , typename R > </td></tr>
-<tr class="memitem:ac8c26a64f4e012f2a9cf6035cf029905"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00093.html">memory_pool_allocator</a>< V, R > &a, const <a class="el" href="a00093.html">memory_pool_allocator</a>< U, R > &b)</td></tr>
-<tr class="separator:ac8c26a64f4e012f2a9cf6035cf029905"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2f7230e5bc817e7512e18b5311b3371b"><td class="memTemplParams" colspan="2"><a class="anchor" id="a2f7230e5bc817e7512e18b5311b3371b"></a>
-template<typename V , typename U , typename R > </td></tr>
-<tr class="memitem:a2f7230e5bc817e7512e18b5311b3371b"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00093.html">memory_pool_allocator</a>< V, R > &a, const <a class="el" href="a00093.html">memory_pool_allocator</a>< U, R > &b)</td></tr>
-<tr class="separator:a2f7230e5bc817e7512e18b5311b3371b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a34fda309cb3f04269a60f44564d3a33a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a34fda309cb3f04269a60f44564d3a33a"></a>
+cl_mem </td><td class="memItemRight" valign="bottom"><b>my_cl_mem</b></td></tr>
+<tr class="separator:a34fda309cb3f04269a60f44564d3a33a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa150727dcda8900798a09a56093d6ce8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa150727dcda8900798a09a56093d6ce8"></a>
+<a class="el" href="a00015.html">tbb::atomic</a><br class="typebreak"/>
+< opencl_device::device_id_type > </td><td class="memItemRight" valign="bottom"><b>my_curr_device_id</b></td></tr>
+<tr class="separator:aa150727dcda8900798a09a56093d6ce8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa16cbcaead8b32986b96d32d6663e6e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa16cbcaead8b32986b96d32d6663e6e8"></a>
+void * </td><td class="memItemRight" valign="bottom"><b>my_host_ptr</b></td></tr>
+<tr class="separator:aa16cbcaead8b32986b96d32d6663e6e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8cc55112c9ac8aa9234c1a0ab273ac62"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8cc55112c9ac8aa9234c1a0ab273ac62"></a>
+Factory * </td><td class="memItemRight" valign="bottom"><b>my_factory</b></td></tr>
+<tr class="separator:a8cc55112c9ac8aa9234c1a0ab273ac62"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab41a863a285df0fb4548c73018ce8738"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab41a863a285df0fb4548c73018ce8738"></a>
+<a class="el" href="a00140.html">tbb::spin_mutex</a> </td><td class="memItemRight" valign="bottom"><b>my_sending_lock</b></td></tr>
+<tr class="separator:ab41a863a285df0fb4548c73018ce8738"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af9b6edf72c6b3ecb51a14ada3c4c003c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af9b6edf72c6b3ecb51a14ada3c4c003c"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>my_sending_event_present</b></td></tr>
+<tr class="separator:af9b6edf72c6b3ecb51a14ada3c4c003c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:accc04a1cef88256991ba0982877d45aa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="accc04a1cef88256991ba0982877d45aa"></a>
+cl_event </td><td class="memItemRight" valign="bottom"><b>my_sending_event</b></td></tr>
+<tr class="separator:accc04a1cef88256991ba0982877d45aa"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename P><br/>
-class tbb::interface6::memory_pool_allocator< void, P ></h3>
-
-<p>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00198.html">memory_pool.h</a></li>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>flow_graph_opencl_node.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00094.png b/doc/html/a00094.png
new file mode 100644
index 0000000..9d0606f
Binary files /dev/null and b/doc/html/a00094.png differ
diff --git a/doc/html/a00095.html b/doc/html/a00095.html
index 2fdb0e0..6197cbd 100644
--- a/doc/html/a00095.html
+++ b/doc/html/a00095.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>rml::MemPoolPolicy Struct Reference</title>
+<title>tbb::flow::interface9::opencl_node< Args > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,63 +33,21 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00237.html">rml</a></li><li class="navelem"><a class="el" href="a00095.html">MemPoolPolicy</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00095.html">opencl_node</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="summary">
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-attribs">Public Attributes</a> |
-<a href="a00263.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">rml::MemPoolPolicy Struct Reference</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_node< Args > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a2a8905fe8598b18ff8195e3484178d2c"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom">{ <b>TBBMALLOC_POOL_VERSION</b> = 1
- }</td></tr>
-<tr class="separator:a2a8905fe8598b18ff8195e3484178d2c"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a73e485e36709acc04a9448eaa95bb666"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a73e485e36709acc04a9448eaa95bb666"></a>
- </td><td class="memItemRight" valign="bottom"><b>MemPoolPolicy</b> (rawAllocType pAlloc_, rawFreeType pFree_, size_t granularity_=0, bool fixedPool_=false, bool keepAllMemory_=false)</td></tr>
-<tr class="separator:a73e485e36709acc04a9448eaa95bb666"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:a0935ae38d632881a6d6cccb675cb6f27"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0935ae38d632881a6d6cccb675cb6f27"></a>
-rawAllocType </td><td class="memItemRight" valign="bottom"><b>pAlloc</b></td></tr>
-<tr class="separator:a0935ae38d632881a6d6cccb675cb6f27"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a221c0a53496a391c60d2f452fc9d76ae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a221c0a53496a391c60d2f452fc9d76ae"></a>
-rawFreeType </td><td class="memItemRight" valign="bottom"><b>pFree</b></td></tr>
-<tr class="separator:a221c0a53496a391c60d2f452fc9d76ae"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac91fffeccd1f4255bbb5719f25785bce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac91fffeccd1f4255bbb5719f25785bce"></a>
-size_t </td><td class="memItemRight" valign="bottom"><b>granularity</b></td></tr>
-<tr class="separator:ac91fffeccd1f4255bbb5719f25785bce"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aaea7ca6973332913c839073822352046"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaea7ca6973332913c839073822352046"></a>
-int </td><td class="memItemRight" valign="bottom"><b>version</b></td></tr>
-<tr class="separator:aaea7ca6973332913c839073822352046"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab00be5199577e8dd87f25c867a488aaf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab00be5199577e8dd87f25c867a488aaf"></a>
-unsigned </td><td class="memItemRight" valign="bottom"><b>fixedPool</b>: 1</td></tr>
-<tr class="separator:ab00be5199577e8dd87f25c867a488aaf"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afc2ea43e020580853224fa430736d38a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc2ea43e020580853224fa430736d38a"></a>
-unsigned </td><td class="memItemRight" valign="bottom"><b>keepAllMemory</b>: 1</td></tr>
-<tr class="separator:afc2ea43e020580853224fa430736d38a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2fe8bde7ec5c0f347f5c8e648c92c612"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2fe8bde7ec5c0f347f5c8e648c92c612"></a>
-unsigned </td><td class="memItemRight" valign="bottom"><b>reserved</b>: 30</td></tr>
-<tr class="separator:a2fe8bde7ec5c0f347f5c8e648c92c612"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<hr/>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00217.html">scalable_allocator.h</a></li>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>flow_graph_opencl_node.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00096.html b/doc/html/a00096.html
index c8375a5..3062ef6 100644
--- a/doc/html/a00096.html
+++ b/doc/html/a00096.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::missing_wait Class Reference</title>
+<title>tbb::flow::interface9::opencl_node< tuple< Ports...> > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,46 +33,51 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00096.html">missing_wait</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00096.html">opencl_node< tuple< Ports...> ></a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00321.html">List of all members</a>  </div>
+<a href="a00347.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::missing_wait Class Reference</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_node< tuple< Ports...> > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Exception for missing wait on <a class="el" href="a00148.html">structured_task_group</a>.  
- <a href="a00096.html#details">More...</a></p>
-
-<p><code>#include <tbb_exception.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::missing_wait:</div>
+Inheritance diagram for tbb::flow::interface9::opencl_node< tuple< Ports...> >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00096.png" usemap="#tbb::missing_wait_map" alt=""/>
-  <map id="tbb::missing_wait_map" name="tbb::missing_wait_map">
+  <img src="a00096.png" usemap="#tbb::flow::interface9::opencl_node< tuple< Ports...> >_map" alt=""/>
+  <map id="tbb::flow::interface9::opencl_node< tuple< Ports...> >_map" name="tbb::flow::interface9::opencl_node< tuple< Ports...> >_map">
+<area href="a00095.html" alt="tbb::flow::interface9::opencl_node< tuple< Ports...>, queueing, default_opencl_factory >" shape="rect" coords="0,0,510,24"/>
 </map>
  </div></div>
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a794fd79a1e331f67bac827255c307606"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a794fd79a1e331f67bac827255c307606"></a>
+typedef base_type::kernel_type </td><td class="memItemRight" valign="bottom"><b>kernel_type</b></td></tr>
+<tr class="separator:a794fd79a1e331f67bac827255c307606"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:abfa0b14450e89cab85092b188ac86fd6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abfa0b14450e89cab85092b188ac86fd6"></a>
-const char * </td><td class="memItemRight" valign="bottom"><b>what</b> () const   throw ()</td></tr>
-<tr class="separator:abfa0b14450e89cab85092b188ac86fd6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa266e98b4900a1e9fbd0dcb5a1dd8129"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa266e98b4900a1e9fbd0dcb5a1dd8129"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_node</b> (<a class="el" href="a00093.html">opencl_graph</a> &g, const kernel_type &kernel)</td></tr>
+<tr class="separator:aa266e98b4900a1e9fbd0dcb5a1dd8129"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2ce974ddf61f8bac8adc559cae854d08"><td class="memTemplParams" colspan="2"><a class="anchor" id="a2ce974ddf61f8bac8adc559cae854d08"></a>
+template<typename DeviceSelector > </td></tr>
+<tr class="memitem:a2ce974ddf61f8bac8adc559cae854d08"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>opencl_node</b> (<a class="el" href="a00093.html">opencl_graph</a> &g, const kernel_type &kernel, DeviceSelector d)</td></tr>
+<tr class="separator:a2ce974ddf61f8bac8adc559cae854d08"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Exception for missing wait on <a class="el" href="a00148.html">structured_task_group</a>. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>tbb_exception.h</li>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>flow_graph_opencl_node.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00096.png b/doc/html/a00096.png
index 7f9c4b3..1c7d08c 100644
Binary files a/doc/html/a00096.png and b/doc/html/a00096.png differ
diff --git a/doc/html/a00097.html b/doc/html/a00097.html
index e0b06de..9dbbbda 100644
--- a/doc/html/a00097.html
+++ b/doc/html/a00097.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::movable_exception< ExceptionData > Class Template Reference</title>
+<title>tbb::flow::interface9::opencl_node< tuple< Ports...>, JP > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,195 +33,51 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00097.html">movable_exception</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00097.html">opencl_node< tuple< Ports...>, JP ></a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-attribs">Protected Attributes</a> |
-<a href="a00325.html">List of all members</a>  </div>
+<a href="a00346.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::movable_exception< ExceptionData > Class Template Reference</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_node< tuple< Ports...>, JP > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread.  
- <a href="a00097.html#details">More...</a></p>
-
-<p><code>#include <tbb_exception.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::movable_exception< ExceptionData >:</div>
+Inheritance diagram for tbb::flow::interface9::opencl_node< tuple< Ports...>, JP >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00097.png" usemap="#tbb::movable_exception< ExceptionData >_map" alt=""/>
-  <map id="tbb::movable_exception< ExceptionData >_map" name="tbb::movable_exception< ExceptionData >_map">
-<area href="a00161.html" title="Interface to be implemented by all exceptions TBB recognizes and propagates across the threads..." alt="tbb::tbb_exception" shape="rect" coords="0,56,248,80"/>
+  <img src="a00097.png" usemap="#tbb::flow::interface9::opencl_node< tuple< Ports...>, JP >_map" alt=""/>
+  <map id="tbb::flow::interface9::opencl_node< tuple< Ports...>, JP >_map" name="tbb::flow::interface9::opencl_node< tuple< Ports...>, JP >_map">
+<area href="a00095.html" alt="tbb::flow::interface9::opencl_node< tuple< Ports...>, JP, default_opencl_factory >" shape="rect" coords="0,0,474,24"/>
 </map>
  </div></div>
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a880c3bdc698274dd21f1b3a7c3cd6014"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a880c3bdc698274dd21f1b3a7c3cd6014"></a>
+typedef base_type::kernel_type </td><td class="memItemRight" valign="bottom"><b>kernel_type</b></td></tr>
+<tr class="separator:a880c3bdc698274dd21f1b3a7c3cd6014"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a785b749022a1e6a7486d315b84bd37e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a785b749022a1e6a7486d315b84bd37e5"></a>
- </td><td class="memItemRight" valign="bottom"><b>movable_exception</b> (const ExceptionData &data_)</td></tr>
-<tr class="separator:a785b749022a1e6a7486d315b84bd37e5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7be7103edd861653baebbca5aeed5205"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7be7103edd861653baebbca5aeed5205"></a>
- </td><td class="memItemRight" valign="bottom"><b>movable_exception</b> (const <a class="el" href="a00097.html">movable_exception</a> &src)  throw ()</td></tr>
-<tr class="separator:a7be7103edd861653baebbca5aeed5205"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a35a4bf997b56ea221ae1bd9bb17cd33b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a35a4bf997b56ea221ae1bd9bb17cd33b"></a>
-const <a class="el" href="a00097.html">movable_exception</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00097.html">movable_exception</a> &src)</td></tr>
-<tr class="separator:a35a4bf997b56ea221ae1bd9bb17cd33b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4eac52bc2a10d4bfcd74ad85c2853740"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4eac52bc2a10d4bfcd74ad85c2853740"></a>
-ExceptionData & </td><td class="memItemRight" valign="bottom"><b>data</b> ()  throw ()</td></tr>
-<tr class="separator:a4eac52bc2a10d4bfcd74ad85c2853740"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a394c11a07cfcd4977327f58362aa1439"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a394c11a07cfcd4977327f58362aa1439"></a>
-const ExceptionData & </td><td class="memItemRight" valign="bottom"><b>data</b> () const   throw ()</td></tr>
-<tr class="separator:a394c11a07cfcd4977327f58362aa1439"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a65dd805ed2424f1d2d0998f5567a9690"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a65dd805ed2424f1d2d0998f5567a9690"></a>
-const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00097.html#a65dd805ed2424f1d2d0998f5567a9690">name</a> () const   throw ()</td></tr>
-<tr class="memdesc:a65dd805ed2424f1d2d0998f5567a9690"><td class="mdescLeft"> </td><td class="mdescRight">Returns RTTI name of the originally intercepted exception. <br/></td></tr>
-<tr class="separator:a65dd805ed2424f1d2d0998f5567a9690"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a41a2a7b61537ecd684bae760366f611c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a41a2a7b61537ecd684bae760366f611c"></a>
-const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00097.html#a41a2a7b61537ecd684bae760366f611c">what</a> () const   throw ()</td></tr>
-<tr class="memdesc:a41a2a7b61537ecd684bae760366f611c"><td class="mdescLeft"> </td><td class="mdescRight">Returns the result of originally intercepted exception's <a class="el" href="a00097.html#a41a2a7b61537ecd684bae760366f611c" title="Returns the result of originally intercepted exception's what() method. ">what()</a> method. <br/></td></tr>
-<tr class="separator:a41a2a7b61537ecd684bae760366f611c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aeb47d3ac90a1f01fe642b572f6ac519d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00097.html">movable_exception</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00097.html#aeb47d3ac90a1f01fe642b572f6ac519d">move</a> ()  throw ()</td></tr>
-<tr class="memdesc:aeb47d3ac90a1f01fe642b572f6ac519d"><td class="mdescLeft"> </td><td class="mdescRight">Creates and returns pointer to the deep copy of this exception object.  <a href="#aeb47d3ac90a1f01fe642b572f6ac519d">More...</a><br/></td></tr>
-<tr class="separator:aeb47d3ac90a1f01fe642b572f6ac519d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a02f0401b465690de797face2432d9421"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00097.html#a02f0401b465690de797face2432d9421">destroy</a> ()  throw ()</td></tr>
-<tr class="memdesc:a02f0401b465690de797face2432d9421"><td class="mdescLeft"> </td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00097.html#aeb47d3ac90a1f01fe642b572f6ac519d" title="Creates and returns pointer to the deep copy of this exception object. ">move()</a> method.  <a href="#a02f0401b465690de797face2432d9421">More...</a><br/></td></tr>
-<tr class="separator:a02f0401b465690de797face2432d9421"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3d1570b53220fbcb45eb81552b57827a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00097.html#a3d1570b53220fbcb45eb81552b57827a">throw_self</a> ()</td></tr>
-<tr class="memdesc:a3d1570b53220fbcb45eb81552b57827a"><td class="mdescLeft"> </td><td class="mdescRight">Throws this exception object.  <a href="#a3d1570b53220fbcb45eb81552b57827a">More...</a><br/></td></tr>
-<tr class="separator:a3d1570b53220fbcb45eb81552b57827a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00161"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00161')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00161.html">tbb::tbb_exception</a></td></tr>
-<tr class="memitem:a6a973c37078afedf7d457ff4704bf8cd inherit pub_methods_a00161"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#a6a973c37078afedf7d457ff4704bf8cd">operator delete</a> (void *p)</td></tr>
-<tr class="separator:a6a973c37078afedf7d457ff4704bf8cd inherit pub_methods_a00161"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
-Protected Attributes</h2></td></tr>
-<tr class="memitem:adba063da80054afe64d5268711084d9b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adba063da80054afe64d5268711084d9b"></a>
-ExceptionData </td><td class="memItemRight" valign="bottom"><a class="el" href="a00097.html#adba063da80054afe64d5268711084d9b">my_exception_data</a></td></tr>
-<tr class="memdesc:adba063da80054afe64d5268711084d9b"><td class="mdescLeft"> </td><td class="mdescRight">User data. <br/></td></tr>
-<tr class="separator:adba063da80054afe64d5268711084d9b"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename ExceptionData><br/>
-class tbb::movable_exception< ExceptionData ></h3>
-
-<p>Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread. </p>
-<p>Code using TBB can instantiate this template with an arbitrary ExceptionData type and throw this exception object. Such exceptions are intercepted by the TBB scheduler and delivered to the root thread (). </p>
-<dl class="section see"><dt>See Also</dt><dd><a class="el" href="a00161.html" title="Interface to be implemented by all exceptions TBB recognizes and propagates across the threads...">tbb::tbb_exception</a> </dd></dl>
-</div><h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="a02f0401b465690de797face2432d9421"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename ExceptionData > </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00097.html">tbb::movable_exception</a>< ExceptionData >::destroy </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-        <tr>
-          <td align="right">throw </td><td>(</td><td colspan="2"></td>
-        </tr>
-        <tr>
-          <td align="right"></td><td>)</td><td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Destroys objects created by the <a class="el" href="a00097.html#aeb47d3ac90a1f01fe642b572f6ac519d" title="Creates and returns pointer to the deep copy of this exception object. ">move()</a> method. </p>
-<p>Frees memory and calls destructor for this exception object. Can and must be used only on objects created by the move method. </p>
-
-<p>Implements <a class="el" href="a00161.html#ad3bc09bf78c33f19a0bcdf882fdf9d41">tbb::tbb_exception</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aeb47d3ac90a1f01fe642b572f6ac519d"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename ExceptionData > </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00097.html">movable_exception</a>* <a class="el" href="a00097.html">tbb::movable_exception</a>< ExceptionData >::move </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-        <tr>
-          <td align="right">throw </td><td>(</td><td colspan="2"></td>
-        </tr>
-        <tr>
-          <td align="right"></td><td>)</td><td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
+<tr class="memitem:aec8b66d92ee269a207c64f90c4e2814e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aec8b66d92ee269a207c64f90c4e2814e"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_node</b> (<a class="el" href="a00093.html">opencl_graph</a> &g, const kernel_type &kernel)</td></tr>
+<tr class="separator:aec8b66d92ee269a207c64f90c4e2814e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9fea4417cb992b9a94aa5aa76662cc21"><td class="memTemplParams" colspan="2"><a class="anchor" id="a9fea4417cb992b9a94aa5aa76662cc21"></a>
+template<typename DeviceSelector > </td></tr>
+<tr class="memitem:a9fea4417cb992b9a94aa5aa76662cc21"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>opencl_node</b> (<a class="el" href="a00093.html">opencl_graph</a> &g, const kernel_type &kernel, DeviceSelector d)</td></tr>
+<tr class="separator:a9fea4417cb992b9a94aa5aa76662cc21"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-</div><div class="memdoc">
-
-<p>Creates and returns pointer to the deep copy of this exception object. </p>
-<p>Move semantics is allowed. </p>
-
-<p>Implements <a class="el" href="a00161.html#a4bd4ba0d501021013d1473d21b020b69">tbb::tbb_exception</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3d1570b53220fbcb45eb81552b57827a"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename ExceptionData > </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00097.html">tbb::movable_exception</a>< ExceptionData >::throw_self </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Throws this exception object. </p>
-<p>Make sure that if you have several levels of derivation from this interface you implement or override this method on the most derived level. The implementation is as simple as "throw *this;". Failure to do this will result in exception of a base class type being thrown. </p>
-
-<p>Implements <a class="el" href="a00161.html#ae45c08d36c7ec7ae91785da3515a8828">tbb::tbb_exception</a>.</p>
-
-</div>
-</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>tbb_exception.h</li>
+<li>flow_graph_opencl_node.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00097.png b/doc/html/a00097.png
index 2c2e3fe..2868a13 100644
Binary files a/doc/html/a00097.png and b/doc/html/a00097.png differ
diff --git a/doc/html/a00098.html b/doc/html/a00098.html
index 01caf62..c19d2ac 100644
--- a/doc/html/a00098.html
+++ b/doc/html/a00098.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator > Class Template Reference</title>
+<title>tbb::flow::interface9::opencl_node< tuple< Ports...>, JP, Factory > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,123 +33,53 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00098.html">multifunction_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00098.html">opencl_node< tuple< Ports...>, JP, Factory ></a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-methods">Protected Member Functions</a> |
-<a href="#pro-static-attribs">Static Protected Attributes</a> |
-<a href="a00337.html">List of all members</a>  </div>
+<a href="a00345.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator > Class Template Reference</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_node< tuple< Ports...>, JP, Factory > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>implements a function node that supports Input -> (set of outputs)  
- <a href="a00098.html#details">More...</a></p>
-
-<p><code>#include <flow_graph.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator >:</div>
+Inheritance diagram for tbb::flow::interface9::opencl_node< tuple< Ports...>, JP, Factory >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00098.png" usemap="#tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator >_map" alt=""/>
-  <map id="tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator >_map" name="tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator >_map">
-<area href="a00072.html" title="The base of all graph nodes. " alt="tbb::flow::interface7::graph_node" shape="rect" coords="0,56,914,80"/>
+  <img src="a00098.png" usemap="#tbb::flow::interface9::opencl_node< tuple< Ports...>, JP, Factory >_map" alt=""/>
+  <map id="tbb::flow::interface9::opencl_node< tuple< Ports...>, JP, Factory >_map" name="tbb::flow::interface9::opencl_node< tuple< Ports...>, JP, Factory >_map">
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:a75218ea29a85874581e480fb52914bbd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a75218ea29a85874581e480fb52914bbd"></a>
-typedef Input </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
-<tr class="separator:a75218ea29a85874581e480fb52914bbd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae51475eb8c4ab433d7db635395cc49a0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae51475eb8c4ab433d7db635395cc49a0"></a>
-typedef <a class="el" href="a00103.html">null_type</a> </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:ae51475eb8c4ab433d7db635395cc49a0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a636872cf56c8cad039f608d84350f59d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a636872cf56c8cad039f608d84350f59d"></a>
-typedef <br class="typebreak"/>
-internal::wrap_tuple_elements<br class="typebreak"/>
-< N, <br class="typebreak"/>
-internal::multifunction_output, <br class="typebreak"/>
-Output >::type </td><td class="memItemRight" valign="bottom"><b>output_ports_type</b></td></tr>
-<tr class="separator:a636872cf56c8cad039f608d84350f59d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa6ec40f6a47dc70508b18c94fa9e459d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa6ec40f6a47dc70508b18c94fa9e459d"></a>
-typedef <br class="typebreak"/>
-internal::multifunction_input<br class="typebreak"/>
-< input_type, <br class="typebreak"/>
-output_ports_type, Allocator > </td><td class="memItemRight" valign="bottom"><b>fInput_type</b></td></tr>
-<tr class="separator:aa6ec40f6a47dc70508b18c94fa9e459d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5fa37afc331d0c9738dab1f642265f95"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5fa37afc331d0c9738dab1f642265f95"></a>
-typedef <br class="typebreak"/>
-internal::function_input_queue<br class="typebreak"/>
-< input_type, Allocator > </td><td class="memItemRight" valign="bottom"><b>input_queue_type</b></td></tr>
-<tr class="separator:a5fa37afc331d0c9738dab1f642265f95"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7af25ee0b849ed041a576db7a28467b7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7af25ee0b849ed041a576db7a28467b7"></a>
+typedef base_type::kernel_type </td><td class="memItemRight" valign="bottom"><b>kernel_type</b></td></tr>
+<tr class="separator:a7af25ee0b849ed041a576db7a28467b7"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a809925417689059399b7f2fcbdb21754"><td class="memTemplParams" colspan="2"><a class="anchor" id="a809925417689059399b7f2fcbdb21754"></a>
-template<typename Body > </td></tr>
-<tr class="memitem:a809925417689059399b7f2fcbdb21754"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>multifunction_node</b> (<a class="el" href="a00070.html">graph</a> &g, size_t concurrency, Body body)</td></tr>
-<tr class="separator:a809925417689059399b7f2fcbdb21754"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac4a12b4da8e8a0e9cd5b3cad770e5b38"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac4a12b4da8e8a0e9cd5b3cad770e5b38"></a>
- </td><td class="memItemRight" valign="bottom"><b>multifunction_node</b> (const <a class="el" href="a00098.html">multifunction_node</a> &other)</td></tr>
-<tr class="separator:ac4a12b4da8e8a0e9cd5b3cad770e5b38"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aab27cfc228b04974c670e0ba2e000b32"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aab27cfc228b04974c670e0ba2e000b32"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:aab27cfc228b04974c670e0ba2e000b32"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8fe68df8a4081035b0d48743b1329374"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8fe68df8a4081035b0d48743b1329374"></a>
-void </td><td class="memItemRight" valign="bottom"><b>extract</b> ()</td></tr>
-<tr class="separator:a8fe68df8a4081035b0d48743b1329374"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00072')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4badd313105e30f539882276353dcb8e"></a>
- </td><td class="memItemRight" valign="bottom"><b>graph_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:a18b55415057cd0a0a13ce50a10ae114a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18b55415057cd0a0a13ce50a10ae114a"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f))</td></tr>
-<tr class="separator:a18b55415057cd0a0a13ce50a10ae114a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00072')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac25a4633873c052047b1dd568824d055"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0</td></tr>
-<tr class="separator:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-static-attribs"></a>
-Static Protected Attributes</h2></td></tr>
-<tr class="memitem:a3fa1db1d966237e6e61e7f36c788bc56"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3fa1db1d966237e6e61e7f36c788bc56"></a>
-static const int </td><td class="memItemRight" valign="bottom"><b>N</b> = tbb::flow::tuple_size<Output>::value</td></tr>
-<tr class="separator:a3fa1db1d966237e6e61e7f36c788bc56"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pro_attribs_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00072')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1caee1c5677047b05d18b1662ca6fdf8"></a>
-<a class="el" href="a00070.html">graph</a> & </td><td class="memItemRight" valign="bottom"><b>my_graph</b></td></tr>
-<tr class="separator:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af48cd0cd4f6e44efc3b353adb55f86a8"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>next</b></td></tr>
-<tr class="separator:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6917bffc3cb150319679bf2395e68caa"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>prev</b></td></tr>
-<tr class="separator:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac2f2a41f2055ff98f194ad34ebd6e2f2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac2f2a41f2055ff98f194ad34ebd6e2f2"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_node</b> (<a class="el" href="a00093.html">opencl_graph</a> &g, const kernel_type &kernel)</td></tr>
+<tr class="separator:ac2f2a41f2055ff98f194ad34ebd6e2f2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7a713a3147095f82014f191a13c1fc70"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7a713a3147095f82014f191a13c1fc70"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_node</b> (<a class="el" href="a00093.html">opencl_graph</a> &g, const kernel_type &kernel, Factory &f)</td></tr>
+<tr class="separator:a7a713a3147095f82014f191a13c1fc70"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3ad880159adea16b96bdc1addff263d1"><td class="memTemplParams" colspan="2"><a class="anchor" id="a3ad880159adea16b96bdc1addff263d1"></a>
+template<typename DeviceSelector > </td></tr>
+<tr class="memitem:a3ad880159adea16b96bdc1addff263d1"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>opencl_node</b> (<a class="el" href="a00093.html">opencl_graph</a> &g, const kernel_type &kernel, DeviceSelector d, Factory &f)</td></tr>
+<tr class="separator:a3ad880159adea16b96bdc1addff263d1"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename Input, typename Output, graph_buffer_policy G = queueing, typename Allocator = cache_aligned_allocator<Input>><br/>
-class tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></h3>
-
-<p>implements a function node that supports Input -> (set of outputs) </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>flow_graph_opencl_node.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00098.png b/doc/html/a00098.png
index 92eb692..1d20e8a 100644
Binary files a/doc/html/a00098.png and b/doc/html/a00098.png differ
diff --git a/doc/html/a00099.html b/doc/html/a00099.html
index b2d6dcd..319a533 100644
--- a/doc/html/a00099.html
+++ b/doc/html/a00099.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::mutex Class Reference</title>
+<title>tbb::flow::interface9::opencl_program< Factory > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,7 +33,7 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00099.html">mutex</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00099.html">opencl_program</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
@@ -41,132 +41,75 @@
 <a href="#nested-classes">Classes</a> |
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-static-attribs">Static Public Attributes</a> |
 <a href="#friends">Friends</a> |
-<a href="a00279.html">List of all members</a>  </div>
+<a href="a00329.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::mutex Class Reference<div class="ingroups"><a class="el" href="a00258.html">Synchronization</a></div></div>  </div>
+<div class="title">tbb::flow::interface9::opencl_program< Factory > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Wrapper around the platform's native reader-writer lock.  
- <a href="a00099.html#details">More...</a></p>
-
-<p><code>#include <mutex.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::mutex:</div>
+Inheritance diagram for tbb::flow::interface9::opencl_program< Factory >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00099.png" usemap="#tbb::mutex_map" alt=""/>
-  <map id="tbb::mutex_map" name="tbb::mutex_map">
+  <img src="a00099.png" usemap="#tbb::flow::interface9::opencl_program< Factory >_map" alt=""/>
+  <map id="tbb::flow::interface9::opencl_program< Factory >_map" name="tbb::flow::interface9::opencl_program< Factory >_map">
 </map>
  </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00140.html">scoped_lock</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00140.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:ad35737cbe356d6814f59abba680ab067"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>state_t</b> { <b>INITIALIZED</b> =0x1234, 
-<b>DESTROYED</b> =0x789A, 
-<b>HELD</b> =0x56CD
- }</td></tr>
-<tr class="separator:ad35737cbe356d6814f59abba680ab067"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abbe0cd12246121753ace00a5a12a90b0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abbe0cd12246121753ace00a5a12a90b0"></a>
-typedef LPCRITICAL_SECTION </td><td class="memItemRight" valign="bottom"><a class="el" href="a00099.html#abbe0cd12246121753ace00a5a12a90b0">native_handle_type</a></td></tr>
-<tr class="memdesc:abbe0cd12246121753ace00a5a12a90b0"><td class="mdescLeft"> </td><td class="mdescRight">Return native_handle. <br/></td></tr>
-<tr class="separator:abbe0cd12246121753ace00a5a12a90b0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0d992511dfc6f47295b10eb7fc0813d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0d992511dfc6f47295b10eb7fc0813d4"></a>
-typedef pthread_mutex_t * </td><td class="memItemRight" valign="bottom"><b>native_handle_type</b></td></tr>
-<tr class="separator:a0d992511dfc6f47295b10eb7fc0813d4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeb67a6684a80e925e5be0832bde202c1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeb67a6684a80e925e5be0832bde202c1"></a>
+typedef Factory::kernel_type </td><td class="memItemRight" valign="bottom"><b>kernel_type</b></td></tr>
+<tr class="separator:aeb67a6684a80e925e5be0832bde202c1"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:ad1b280c954ffc8b8b3e63e4ee4144035"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad1b280c954ffc8b8b3e63e4ee4144035"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00099.html#ad1b280c954ffc8b8b3e63e4ee4144035">mutex</a> ()</td></tr>
-<tr class="memdesc:ad1b280c954ffc8b8b3e63e4ee4144035"><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired mutex. <br/></td></tr>
-<tr class="separator:ad1b280c954ffc8b8b3e63e4ee4144035"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a95ff02ee699b34696001db4003c11a3a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a95ff02ee699b34696001db4003c11a3a"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00099.html#a95ff02ee699b34696001db4003c11a3a">lock</a> ()</td></tr>
-<tr class="memdesc:a95ff02ee699b34696001db4003c11a3a"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock. <br/></td></tr>
-<tr class="separator:a95ff02ee699b34696001db4003c11a3a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a480283933106941125717499f9c5ad42"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00099.html#a480283933106941125717499f9c5ad42">try_lock</a> ()</td></tr>
-<tr class="memdesc:a480283933106941125717499f9c5ad42"><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring lock (non-blocking)  <a href="#a480283933106941125717499f9c5ad42">More...</a><br/></td></tr>
-<tr class="separator:a480283933106941125717499f9c5ad42"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a721eeae7ba16f8b92535f4534b583874"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a721eeae7ba16f8b92535f4534b583874"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00099.html#a721eeae7ba16f8b92535f4534b583874">unlock</a> ()</td></tr>
-<tr class="memdesc:a721eeae7ba16f8b92535f4534b583874"><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br/></td></tr>
-<tr class="separator:a721eeae7ba16f8b92535f4534b583874"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af69874d93822c905bdea0ab9e5ca5b89"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af69874d93822c905bdea0ab9e5ca5b89"></a>
-<a class="el" href="a00099.html#abbe0cd12246121753ace00a5a12a90b0">native_handle_type</a> </td><td class="memItemRight" valign="bottom"><b>native_handle</b> ()</td></tr>
-<tr class="separator:af69874d93822c905bdea0ab9e5ca5b89"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0857c4596d7d5de09fe402ccd41d3e42"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0857c4596d7d5de09fe402ccd41d3e42"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00099.html#a0857c4596d7d5de09fe402ccd41d3e42">set_state</a> (state_t to)</td></tr>
-<tr class="memdesc:a0857c4596d7d5de09fe402ccd41d3e42"><td class="mdescLeft"> </td><td class="mdescRight">Set the internal state. <br/></td></tr>
-<tr class="separator:a0857c4596d7d5de09fe402ccd41d3e42"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr class="memitem:a2677d672446faa842de9de38b3aff80a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2677d672446faa842de9de38b3aff80a"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
-<tr class="separator:a2677d672446faa842de9de38b3aff80a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:adf7e9e11c47cc869d219298232d6c0a1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adf7e9e11c47cc869d219298232d6c0a1"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
-<tr class="separator:adf7e9e11c47cc869d219298232d6c0a1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab729ebd784af412184653c4fa90468d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab729ebd784af412184653c4fa90468d0"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = false</td></tr>
-<tr class="separator:ab729ebd784af412184653c4fa90468d0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab9ec4cef66aab8bc7a6669c354c6505c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab9ec4cef66aab8bc7a6669c354c6505c"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_program</b> (Factory &factory, opencl_program_type type, const std::string &program_name)</td></tr>
+<tr class="separator:ab9ec4cef66aab8bc7a6669c354c6505c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac58f5b9a1d755a73eeb0bd503ea82576"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac58f5b9a1d755a73eeb0bd503ea82576"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_program</b> (Factory &factory, const char *program_name)</td></tr>
+<tr class="separator:ac58f5b9a1d755a73eeb0bd503ea82576"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5ef0d80377e9682f7ee2d16ff9b93b39"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5ef0d80377e9682f7ee2d16ff9b93b39"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_program</b> (Factory &factory, const std::string &program_name)</td></tr>
+<tr class="separator:a5ef0d80377e9682f7ee2d16ff9b93b39"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a54a6a03c09eeecddd1f1dbca45f3045c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a54a6a03c09eeecddd1f1dbca45f3045c"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_program</b> (<a class="el" href="a00093.html">opencl_graph</a> &graph, opencl_program_type type, const std::string &program_name)</td></tr>
+<tr class="separator:a54a6a03c09eeecddd1f1dbca45f3045c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af079e7fdab7c1e220393ede15b825255"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af079e7fdab7c1e220393ede15b825255"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_program</b> (<a class="el" href="a00093.html">opencl_graph</a> &graph, const char *program_name)</td></tr>
+<tr class="separator:af079e7fdab7c1e220393ede15b825255"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab48356959c1d8951d47c7310b8546d53"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab48356959c1d8951d47c7310b8546d53"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_program</b> (<a class="el" href="a00093.html">opencl_graph</a> &graph, const std::string &program_name)</td></tr>
+<tr class="separator:ab48356959c1d8951d47c7310b8546d53"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac03acfe96a65cd311b9f14bb7631b47b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac03acfe96a65cd311b9f14bb7631b47b"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_program</b> (<a class="el" href="a00093.html">opencl_graph</a> &graph, opencl_program_type type)</td></tr>
+<tr class="separator:ac03acfe96a65cd311b9f14bb7631b47b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6b5f05721fff76afaabae67891b37510"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6b5f05721fff76afaabae67891b37510"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_program</b> (const <a class="el" href="a00099.html">opencl_program</a> &src)</td></tr>
+<tr class="separator:a6b5f05721fff76afaabae67891b37510"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a938f1c2322c0234a96cacc4a167daa4d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a938f1c2322c0234a96cacc4a167daa4d"></a>
+kernel_type </td><td class="memItemRight" valign="bottom"><b>get_kernel</b> (const std::string &k) const </td></tr>
+<tr class="separator:a938f1c2322c0234a96cacc4a167daa4d"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
 Friends</h2></td></tr>
-<tr class="memitem:afcf922650b2fd9d76b7b939d8511bbd8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afcf922650b2fd9d76b7b939d8511bbd8"></a>
-class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
-<tr class="separator:afcf922650b2fd9d76b7b939d8511bbd8"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Wrapper around the platform's native reader-writer lock. </p>
-<p>For testing purposes only. </p>
-</div><h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="a480283933106941125717499f9c5ad42"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool tbb::mutex::try_lock </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
+<tr class="memitem:a357c187838aa075f23be7b8c86ddcbd3"><td class="memTemplParams" colspan="2"><a class="anchor" id="a357c187838aa075f23be7b8c86ddcbd3"></a>
+template<typename DeviceFilter > </td></tr>
+<tr class="memitem:a357c187838aa075f23be7b8c86ddcbd3"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>opencl_factory</b></td></tr>
+<tr class="separator:a357c187838aa075f23be7b8c86ddcbd3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae5c7df2a18ff72b1c110470e8e28d8b7"><td class="memTemplParams" colspan="2"><a class="anchor" id="ae5c7df2a18ff72b1c110470e8e28d8b7"></a>
+template<typename DeviceFilter > </td></tr>
+<tr class="memitem:ae5c7df2a18ff72b1c110470e8e28d8b7"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>opencl_factory< DeviceFilter >::kernel</b></td></tr>
+<tr class="separator:ae5c7df2a18ff72b1c110470e8e28d8b7"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-</div><div class="memdoc">
-
-<p>Try acquiring lock (non-blocking) </p>
-<p>Return true if lock acquired; false otherwise. </p>
-
-<p>References <a class="el" href="a00015.html#a3525dbbac0d4eaedfe18bc57b7760857">tbb::aligned_space< T, N >::begin()</a>.</p>
-
-<p>Referenced by <a class="el" href="a00140.html#a46f983371aa852d2427ce69f9a571f78">tbb::mutex::scoped_lock::try_acquire()</a>.</p>
-
-</div>
-</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>mutex.h</li>
+<li>flow_graph_opencl_node.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00099.png b/doc/html/a00099.png
index 5fdf55b..142af25 100644
Binary files a/doc/html/a00099.png and b/doc/html/a00099.png differ
diff --git a/doc/html/a00100.html b/doc/html/a00100.html
index f1db948..ed06f0f 100644
--- a/doc/html/a00100.html
+++ b/doc/html/a00100.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node Struct Reference</title>
+<title>tbb::flow::interface9::opencl_range Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,71 +33,49 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00043.html">concurrent_hash_map</a></li><li class="navelem"><a class="el" href="a00100.html">node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00100.html">opencl_range</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-attribs">Public Attributes</a> |
-<a href="a00374.html">List of all members</a>  </div>
+<a href="a00341.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node Struct Reference</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_range Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="dynheader">
-Inheritance diagram for tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00100.png" usemap="#tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node_map" alt=""/>
-  <map id="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node_map" name="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node_map">
-</map>
- </div></div>
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a9b4ef3112be7fd32e5f4ae209c70d48d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9b4ef3112be7fd32e5f4ae209c70d48d"></a>
+typedef size_t </td><td class="memItemRight" valign="bottom"><b>range_index_type</b></td></tr>
+<tr class="separator:a9b4ef3112be7fd32e5f4ae209c70d48d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab51d567ea5ba593070a60429370b1453"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab51d567ea5ba593070a60429370b1453"></a>
+typedef std::array<br class="typebreak"/>
+< range_index_type, 3 > </td><td class="memItemRight" valign="bottom"><b>nd_range_type</b></td></tr>
+<tr class="separator:ab51d567ea5ba593070a60429370b1453"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:ace61f7bd9d097375f6e33fea4758fbf9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ace61f7bd9d097375f6e33fea4758fbf9"></a>
- </td><td class="memItemRight" valign="bottom"><b>node</b> (const Key &key)</td></tr>
-<tr class="separator:ace61f7bd9d097375f6e33fea4758fbf9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6755d387982f27a06d859811699e40b7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6755d387982f27a06d859811699e40b7"></a>
- </td><td class="memItemRight" valign="bottom"><b>node</b> (const Key &key, const T &t)</td></tr>
-<tr class="separator:a6755d387982f27a06d859811699e40b7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a61f7e6e835b09c4387fd0c8498fbf603"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a61f7e6e835b09c4387fd0c8498fbf603"></a>
- </td><td class="memItemRight" valign="bottom"><b>node</b> (const Key &key, T &&t)</td></tr>
-<tr class="separator:a61f7e6e835b09c4387fd0c8498fbf603"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac28d72d857eccf6e7cc06a9ee146d416"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac28d72d857eccf6e7cc06a9ee146d416"></a>
- </td><td class="memItemRight" valign="bottom"><b>node</b> (value_type &&i)</td></tr>
-<tr class="separator:ac28d72d857eccf6e7cc06a9ee146d416"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae7c083b7efff342469789f487e3561ec"><td class="memTemplParams" colspan="2"><a class="anchor" id="ae7c083b7efff342469789f487e3561ec"></a>
-template<typename... Args> </td></tr>
-<tr class="memitem:ae7c083b7efff342469789f487e3561ec"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>node</b> (Args &&...args)</td></tr>
-<tr class="separator:ae7c083b7efff342469789f487e3561ec"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad7a5d977900af48a359f428658e2876b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad7a5d977900af48a359f428658e2876b"></a>
- </td><td class="memItemRight" valign="bottom"><b>node</b> (value_type &i)</td></tr>
-<tr class="separator:ad7a5d977900af48a359f428658e2876b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acbdc995156da4cf9b11561d006cf6821"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acbdc995156da4cf9b11561d006cf6821"></a>
- </td><td class="memItemRight" valign="bottom"><b>node</b> (const value_type &i)</td></tr>
-<tr class="separator:acbdc995156da4cf9b11561d006cf6821"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a15b3c8955eb1b104db439e9caf3737c3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15b3c8955eb1b104db439e9caf3737c3"></a>
-void * </td><td class="memItemRight" valign="bottom"><b>operator new</b> (size_t, node_allocator_type &a)</td></tr>
-<tr class="separator:a15b3c8955eb1b104db439e9caf3737c3"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa3115742612b79db574914741f2fff45"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa3115742612b79db574914741f2fff45"></a>
-void </td><td class="memItemRight" valign="bottom"><b>operator delete</b> (void *ptr, node_allocator_type &a)</td></tr>
-<tr class="separator:aa3115742612b79db574914741f2fff45"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:a6977520eaa2f1dee220f726c8a884b46"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6977520eaa2f1dee220f726c8a884b46"></a>
-value_type </td><td class="memItemRight" valign="bottom"><b>item</b></td></tr>
-<tr class="separator:a6977520eaa2f1dee220f726c8a884b46"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8417788bb8a202488a37cf72f18247d9"><td class="memTemplParams" colspan="2"><a class="anchor" id="a8417788bb8a202488a37cf72f18247d9"></a>
+template<typename G  = std::initializer_list<int>, typename L  = std::initializer_list<int>, typename  = typename std::enable_if<!std::is_same<typename std::decay<G>::type, opencl_range>::value>::type> </td></tr>
+<tr class="memitem:a8417788bb8a202488a37cf72f18247d9"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>opencl_range</b> (G &&global_work=std::initializer_list< int >({0}), L &&local_work=std::initializer_list< int >({0, 0, 0}))</td></tr>
+<tr class="separator:a8417788bb8a202488a37cf72f18247d9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5f8614ff83745ba7b9448d6242a4b082"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f8614ff83745ba7b9448d6242a4b082"></a>
+const nd_range_type & </td><td class="memItemRight" valign="bottom"><b>global_range</b> () const </td></tr>
+<tr class="separator:a5f8614ff83745ba7b9448d6242a4b082"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4dca9170631f970849a898466f13a491"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4dca9170631f970849a898466f13a491"></a>
+const nd_range_type & </td><td class="memItemRight" valign="bottom"><b>local_range</b> () const </td></tr>
+<tr class="separator:a4dca9170631f970849a898466f13a491"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<hr/>The documentation for this struct was generated from the following file:<ul>
-<li>concurrent_hash_map.h</li>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>flow_graph_opencl_node.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00100.png b/doc/html/a00100.png
deleted file mode 100644
index b914379..0000000
Binary files a/doc/html/a00100.png and /dev/null differ
diff --git a/doc/html/a00101.html b/doc/html/a00101.html
index 9a02d1d..92c0ab8 100644
--- a/doc/html/a00101.html
+++ b/doc/html/a00101.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::null_mutex Class Reference</title>
+<title>tbb::flow::interface9::opencl_subbuffer< T, Factory > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,60 +33,100 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00101.html">null_mutex</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00101.html">opencl_subbuffer</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#pub-static-attribs">Static Public Attributes</a> |
-<a href="a00281.html">List of all members</a>  </div>
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="a00339.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::null_mutex Class Reference<div class="ingroups"><a class="el" href="a00258.html">Synchronization</a></div></div>  </div>
+<div class="title">tbb::flow::interface9::opencl_subbuffer< T, Factory > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>A mutex which does nothing.  
- <a href="a00101.html#details">More...</a></p>
-
-<p><code>#include <null_mutex.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::null_mutex:</div>
+Inheritance diagram for tbb::flow::interface9::opencl_subbuffer< T, Factory >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00101.png" usemap="#tbb::null_mutex_map" alt=""/>
-  <map id="tbb::null_mutex_map" name="tbb::null_mutex_map">
+  <img src="a00101.png" usemap="#tbb::flow::interface9::opencl_subbuffer< T, Factory >_map" alt=""/>
+  <map id="tbb::flow::interface9::opencl_subbuffer< T, Factory >_map" name="tbb::flow::interface9::opencl_subbuffer< T, Factory >_map">
+<area href="a00087.html" alt="tbb::flow::interface9::opencl_buffer< T, Factory >" shape="rect" coords="0,0,310,24"/>
 </map>
  </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00137.html">scoped_lock</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00137.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a11f6b0a4f1fd2f8d6dc25f25b280b558"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a11f6b0a4f1fd2f8d6dc25f25b280b558"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_subbuffer</b> (const <a class="el" href="a00087.html">opencl_buffer</a>< T, Factory > &owner, size_t index, size_t size)</td></tr>
+<tr class="separator:a11f6b0a4f1fd2f8d6dc25f25b280b558"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_methods_a00087"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00087')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td></tr>
+<tr class="memitem:a209b471453aca40e5ffbf062a6f3dfee inherit pub_methods_a00087"><td class="memTemplParams" colspan="2"><a class="anchor" id="a209b471453aca40e5ffbf062a6f3dfee"></a>
+template<access_type a> </td></tr>
+<tr class="memitem:a209b471453aca40e5ffbf062a6f3dfee inherit pub_methods_a00087"><td class="memTemplItemLeft" align="right" valign="top">iterator< a > </td><td class="memTemplItemRight" valign="bottom"><b>access</b> () const </td></tr>
+<tr class="separator:a209b471453aca40e5ffbf062a6f3dfee inherit pub_methods_a00087"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af09de2dced1e886b62af2edaa301395b inherit pub_methods_a00087"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af09de2dced1e886b62af2edaa301395b"></a>
+T * </td><td class="memItemRight" valign="bottom"><b>data</b> () const </td></tr>
+<tr class="separator:af09de2dced1e886b62af2edaa301395b inherit pub_methods_a00087"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad6ea4442b535df396143ae64072f928b inherit pub_methods_a00087"><td class="memTemplParams" colspan="2"><a class="anchor" id="ad6ea4442b535df396143ae64072f928b"></a>
+template<access_type a = read_write> </td></tr>
+<tr class="memitem:ad6ea4442b535df396143ae64072f928b inherit pub_methods_a00087"><td class="memTemplItemLeft" align="right" valign="top">iterator< a > </td><td class="memTemplItemRight" valign="bottom"><b>begin</b> () const </td></tr>
+<tr class="separator:ad6ea4442b535df396143ae64072f928b inherit pub_methods_a00087"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aee44f9e698559edd86118bd8f1358c82 inherit pub_methods_a00087"><td class="memTemplParams" colspan="2"><a class="anchor" id="aee44f9e698559edd86118bd8f1358c82"></a>
+template<access_type a = read_write> </td></tr>
+<tr class="memitem:aee44f9e698559edd86118bd8f1358c82 inherit pub_methods_a00087"><td class="memTemplItemLeft" align="right" valign="top">iterator< a > </td><td class="memTemplItemRight" valign="bottom"><b>end</b> () const </td></tr>
+<tr class="separator:aee44f9e698559edd86118bd8f1358c82 inherit pub_methods_a00087"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab17dc630609091d82ac1bd0ac028098b inherit pub_methods_a00087"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab17dc630609091d82ac1bd0ac028098b"></a>
+size_t </td><td class="memItemRight" valign="bottom"><b>size</b> () const </td></tr>
+<tr class="separator:ab17dc630609091d82ac1bd0ac028098b inherit pub_methods_a00087"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac60e4a4d13d7545c78b3dfbcc4e03837 inherit pub_methods_a00087"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac60e4a4d13d7545c78b3dfbcc4e03837"></a>
+T & </td><td class="memItemRight" valign="bottom"><b>operator[]</b> (ptrdiff_t k)</td></tr>
+<tr class="separator:ac60e4a4d13d7545c78b3dfbcc4e03837 inherit pub_methods_a00087"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a13106604ac7fed4eb395499a250c4f26 inherit pub_methods_a00087"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a13106604ac7fed4eb395499a250c4f26"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_buffer</b> (<a class="el" href="a00093.html">opencl_graph</a> &g, size_t size)</td></tr>
+<tr class="separator:a13106604ac7fed4eb395499a250c4f26 inherit pub_methods_a00087"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adb232dffc9a5708ba6e46e59278cb2b9 inherit pub_methods_a00087"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adb232dffc9a5708ba6e46e59278cb2b9"></a>
+ </td><td class="memItemRight" valign="bottom"><b>opencl_buffer</b> (Factory &f, size_t size)</td></tr>
+<tr class="separator:adb232dffc9a5708ba6e46e59278cb2b9 inherit pub_methods_a00087"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9a443f7d24e2130eb8d4a654b8a45d9c inherit pub_methods_a00087"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a443f7d24e2130eb8d4a654b8a45d9c"></a>
+cl_mem </td><td class="memItemRight" valign="bottom"><b>native_object</b> () const </td></tr>
+<tr class="separator:a9a443f7d24e2130eb8d4a654b8a45d9c inherit pub_methods_a00087"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad71cf551ab19e9ed23460f7616c85290 inherit pub_methods_a00087"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad71cf551ab19e9ed23460f7616c85290"></a>
+const <a class="el" href="a00087.html">opencl_buffer</a> & </td><td class="memItemRight" valign="bottom"><b>memory_object</b> () const </td></tr>
+<tr class="separator:ad71cf551ab19e9ed23460f7616c85290 inherit pub_methods_a00087"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5546d9c6648342b56dc77ad4aa6c02af inherit pub_methods_a00087"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5546d9c6648342b56dc77ad4aa6c02af"></a>
+void </td><td class="memItemRight" valign="bottom"><b>send</b> (<a class="el" href="a00089.html">opencl_device</a> device, <a class="el" href="a00053.html">dependency_msg</a>< <a class="el" href="a00087.html">opencl_buffer</a>, Factory > &dependency) const </td></tr>
+<tr class="separator:a5546d9c6648342b56dc77ad4aa6c02af inherit pub_methods_a00087"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a41ee26bde7f0cadd98203403450aa978 inherit pub_methods_a00087"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a41ee26bde7f0cadd98203403450aa978"></a>
+void </td><td class="memItemRight" valign="bottom"><b>receive</b> (const <a class="el" href="a00053.html">dependency_msg</a>< <a class="el" href="a00087.html">opencl_buffer</a>, Factory > &dependency) const </td></tr>
+<tr class="separator:a41ee26bde7f0cadd98203403450aa978 inherit pub_methods_a00087"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a804d5eb9c6912c1e36c078ce4032de7c inherit pub_methods_a00087"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a804d5eb9c6912c1e36c078ce4032de7c"></a>
+<a class="el" href="a00101.html">opencl_subbuffer</a>< T, Factory > </td><td class="memItemRight" valign="bottom"><b>subbuffer</b> (size_t index, size_t size) const </td></tr>
+<tr class="separator:a804d5eb9c6912c1e36c078ce4032de7c inherit pub_methods_a00087"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr class="memitem:a20ed8301299d9ec166588401269d1788"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a20ed8301299d9ec166588401269d1788"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
-<tr class="separator:a20ed8301299d9ec166588401269d1788"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a49bd7f5da83382e39f898d06cbf0e23e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a49bd7f5da83382e39f898d06cbf0e23e"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = true</td></tr>
-<tr class="separator:a49bd7f5da83382e39f898d06cbf0e23e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae4684b268ff379a69cd1fe93718ee7fc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae4684b268ff379a69cd1fe93718ee7fc"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = true</td></tr>
-<tr class="separator:ae4684b268ff379a69cd1fe93718ee7fc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_types_a00087"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00087')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td></tr>
+<tr class="memitem:a54db0ee83c4e3de8ccd479c34a4d35b9 inherit pub_types_a00087"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a54db0ee83c4e3de8ccd479c34a4d35b9"></a>
+typedef cl_mem </td><td class="memItemRight" valign="bottom"><b>native_object_type</b></td></tr>
+<tr class="separator:a54db0ee83c4e3de8ccd479c34a4d35b9 inherit pub_types_a00087"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a91c4c176a0d017854dc0d3a687af1031 inherit pub_types_a00087"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a91c4c176a0d017854dc0d3a687af1031"></a>
+typedef <a class="el" href="a00087.html">opencl_buffer</a> </td><td class="memItemRight" valign="bottom"><b>memory_object_type</b></td></tr>
+<tr class="separator:a91c4c176a0d017854dc0d3a687af1031 inherit pub_types_a00087"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aad92f18cff1f39e34bc6c8bb0c56e7a9 inherit pub_types_a00087"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad92f18cff1f39e34bc6c8bb0c56e7a9"></a>
+typedef Factory </td><td class="memItemRight" valign="bottom"><b>opencl_factory_type</b></td></tr>
+<tr class="separator:aad92f18cff1f39e34bc6c8bb0c56e7a9 inherit pub_types_a00087"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab381b037311c4d248ee8fc15a29559d2 inherit pub_types_a00087"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab381b037311c4d248ee8fc15a29559d2"></a>
+template<access_type a> </td></tr>
+<tr class="memitem:ab381b037311c4d248ee8fc15a29559d2 inherit pub_types_a00087"><td class="memTemplItemLeft" align="right" valign="top">using </td><td class="memTemplItemRight" valign="bottom"><b>iterator</b> = T *</td></tr>
+<tr class="separator:ab381b037311c4d248ee8fc15a29559d2 inherit pub_types_a00087"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>A mutex which does nothing. </p>
-<p>A <a class="el" href="a00101.html" title="A mutex which does nothing. ">null_mutex</a> does no operation and simulates success. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>null_mutex.h</li>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>flow_graph_opencl_node.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00101.png b/doc/html/a00101.png
index b72b310..2d2a322 100644
Binary files a/doc/html/a00101.png and b/doc/html/a00101.png differ
diff --git a/doc/html/a00102.html b/doc/html/a00102.html
index c20d5bf..598d6ed 100644
--- a/doc/html/a00102.html
+++ b/doc/html/a00102.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::null_rw_mutex Class Reference</title>
+<title>tbb::parallel_while< Body > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,60 +33,130 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00102.html">null_rw_mutex</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00102.html">parallel_while</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="#pub-types">Public Types</a> |
+<a href="#pub-methods">Public Member Functions</a> |
 <a href="a00283.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::null_rw_mutex Class Reference<div class="ingroups"><a class="el" href="a00258.html">Synchronization</a></div></div>  </div>
+<div class="title">tbb::parallel_while< Body > Class Template Reference<div class="ingroups"><a class="el" href="a00252.html">Algorithms</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>A rw mutex which does nothing.  
+<p>Parallel iteration over a stream, with optional addition of more work.  
  <a href="a00102.html#details">More...</a></p>
 
-<p><code>#include <null_rw_mutex.h></code></p>
+<p><code>#include <parallel_while.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::null_rw_mutex:</div>
+Inheritance diagram for tbb::parallel_while< Body >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00102.png" usemap="#tbb::null_rw_mutex_map" alt=""/>
-  <map id="tbb::null_rw_mutex_map" name="tbb::null_rw_mutex_map">
+  <img src="a00102.png" usemap="#tbb::parallel_while< Body >_map" alt=""/>
+  <map id="tbb::parallel_while< Body >_map" name="tbb::parallel_while< Body >_map">
 </map>
  </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html">scoped_lock</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00138.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a2442f019427e608d46801376267e44a8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2442f019427e608d46801376267e44a8"></a>
+typedef Body::argument_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html#a2442f019427e608d46801376267e44a8">value_type</a></td></tr>
+<tr class="memdesc:a2442f019427e608d46801376267e44a8"><td class="mdescLeft"> </td><td class="mdescRight">Type of items. <br/></td></tr>
+<tr class="separator:a2442f019427e608d46801376267e44a8"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr class="memitem:a2a676977ac67532f5f35f849ec7eac8c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2a676977ac67532f5f35f849ec7eac8c"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = true</td></tr>
-<tr class="separator:a2a676977ac67532f5f35f849ec7eac8c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab153992db6e44aee96ce8c1b2d495c94"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab153992db6e44aee96ce8c1b2d495c94"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = true</td></tr>
-<tr class="separator:ab153992db6e44aee96ce8c1b2d495c94"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab8500b8a645b1c03221fd1fb4156fa78"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab8500b8a645b1c03221fd1fb4156fa78"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = true</td></tr>
-<tr class="separator:ab8500b8a645b1c03221fd1fb4156fa78"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a220a7307358aa36802c8754ea45ca385"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a220a7307358aa36802c8754ea45ca385"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html#a220a7307358aa36802c8754ea45ca385">parallel_while</a> ()</td></tr>
+<tr class="memdesc:a220a7307358aa36802c8754ea45ca385"><td class="mdescLeft"> </td><td class="mdescRight">Construct empty non-running parallel while. <br/></td></tr>
+<tr class="separator:a220a7307358aa36802c8754ea45ca385"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac2fd559c8a38639fa1ba97a0d5639ca8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac2fd559c8a38639fa1ba97a0d5639ca8"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html#ac2fd559c8a38639fa1ba97a0d5639ca8">~parallel_while</a> ()</td></tr>
+<tr class="memdesc:ac2fd559c8a38639fa1ba97a0d5639ca8"><td class="mdescLeft"> </td><td class="mdescRight">Destructor cleans up data members before returning. <br/></td></tr>
+<tr class="separator:ac2fd559c8a38639fa1ba97a0d5639ca8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a20607ba5faa958144787d980aa850c16"><td class="memTemplParams" colspan="2">template<typename Stream > </td></tr>
+<tr class="memitem:a20607ba5faa958144787d980aa850c16"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00102.html#a20607ba5faa958144787d980aa850c16">run</a> (Stream &stream, const Body &body)</td></tr>
+<tr class="memdesc:a20607ba5faa958144787d980aa850c16"><td class="mdescLeft"> </td><td class="mdescRight">Apply body.apply to each item in the stream.  <a href="#a20607ba5faa958144787d980aa850c16">More...</a><br/></td></tr>
+<tr class="separator:a20607ba5faa958144787d980aa850c16"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4861989d7f5e3111d264d4d6013e8fe1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html#a4861989d7f5e3111d264d4d6013e8fe1">add</a> (const <a class="el" href="a00102.html#a2442f019427e608d46801376267e44a8">value_type</a> &item)</td></tr>
+<tr class="memdesc:a4861989d7f5e3111d264d4d6013e8fe1"><td class="mdescLeft"> </td><td class="mdescRight">Add a work item while running.  <a href="#a4861989d7f5e3111d264d4d6013e8fe1">More...</a><br/></td></tr>
+<tr class="separator:a4861989d7f5e3111d264d4d6013e8fe1"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>A rw mutex which does nothing. </p>
-<p>A <a class="el" href="a00102.html" title="A rw mutex which does nothing. ">null_rw_mutex</a> is a rw mutex that does nothing and simulates successful operation. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>null_rw_mutex.h</li>
+<div class="textblock"><h3>template<typename Body><br/>
+class tbb::parallel_while< Body ></h3>
+
+<p>Parallel iteration over a stream, with optional addition of more work. </p>
+<p>The Body b has the requirement: <br/>
+ "b(v)" <br/>
+ "b.argument_type" <br/>
+ where v is an argument_type </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="a4861989d7f5e3111d264d4d6013e8fe1"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Body > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00102.html">tbb::parallel_while</a>< Body >::add </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="a00102.html#a2442f019427e608d46801376267e44a8">value_type</a> & </td>
+          <td class="paramname"><em>item</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Add a work item while running. </p>
+<p>Should be executed only by body.apply or a thread spawned therefrom. </p>
+
+</div>
+</div>
+<a class="anchor" id="a20607ba5faa958144787d980aa850c16"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Body > </div>
+<div class="memtemplate">
+template<typename Stream > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00102.html">tbb::parallel_while</a>< Body >::run </td>
+          <td>(</td>
+          <td class="paramtype">Stream & </td>
+          <td class="paramname"><em>stream</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Body & </td>
+          <td class="paramname"><em>body</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Apply body.apply to each item in the stream. </p>
+<p>A Stream s has the requirements <br/>
+ "S::value_type" <br/>
+ "s.pop_if_present(value) is convertible to bool </p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>parallel_while.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00102.png b/doc/html/a00102.png
index 1ddf071..fc86480 100644
Binary files a/doc/html/a00102.png and b/doc/html/a00102.png differ
diff --git a/doc/html/a00103.html b/doc/html/a00103.html
index 3a6e5dd..6ab785e 100644
--- a/doc/html/a00103.html
+++ b/doc/html/a00103.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::null_type Struct Reference</title>
+<title>tbb::pipeline Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,21 +33,104 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00103.html">null_type</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00103.html">pipeline</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#friends">Friends</a> |
+<a href="a00286.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::null_type Struct Reference</div>  </div>
+<div class="title">tbb::pipeline Class Reference<div class="ingroups"><a class="el" href="a00252.html">Algorithms</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
-<hr/>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+
+<p>A processing pipeline that applies filters to items.  
+ <a href="a00103.html#details">More...</a></p>
+
+<p><code>#include <pipeline.h></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:afe7b7bd9b2617c2b69170675a478b2bd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afe7b7bd9b2617c2b69170675a478b2bd"></a>
+__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00103.html#afe7b7bd9b2617c2b69170675a478b2bd">pipeline</a> ()</td></tr>
+<tr class="memdesc:afe7b7bd9b2617c2b69170675a478b2bd"><td class="mdescLeft"> </td><td class="mdescRight">Construct empty pipeline. <br/></td></tr>
+<tr class="separator:afe7b7bd9b2617c2b69170675a478b2bd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac3a7b33217b3f3bb0682ec3a40fd2c39"><td class="memItemLeft" align="right" valign="top">virtual __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00103.html#ac3a7b33217b3f3bb0682ec3a40fd2c39">~pipeline</a> ()</td></tr>
+<tr class="separator:ac3a7b33217b3f3bb0682ec3a40fd2c39"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8eb83014bd53b184e0ed50f120ca310b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8eb83014bd53b184e0ed50f120ca310b"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00103.html#a8eb83014bd53b184e0ed50f120ca310b">add_filter</a> (<a class="el" href="a00059.html">filter</a> &filter_)</td></tr>
+<tr class="memdesc:a8eb83014bd53b184e0ed50f120ca310b"><td class="mdescLeft"> </td><td class="mdescRight">Add filter to end of pipeline. <br/></td></tr>
+<tr class="separator:a8eb83014bd53b184e0ed50f120ca310b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac9ee9080cfc080c40a7ee7cb03a62637"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac9ee9080cfc080c40a7ee7cb03a62637"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00103.html#ac9ee9080cfc080c40a7ee7cb03a62637">run</a> (size_t max_number_of_live_tokens)</td></tr>
+<tr class="memdesc:ac9ee9080cfc080c40a7ee7cb03a62637"><td class="mdescLeft"> </td><td class="mdescRight">Run the pipeline to completion. <br/></td></tr>
+<tr class="separator:ac9ee9080cfc080c40a7ee7cb03a62637"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a270dba81f7dd9935be7f3d69db907ff4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a270dba81f7dd9935be7f3d69db907ff4"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00103.html#a270dba81f7dd9935be7f3d69db907ff4">run</a> (size_t max_number_of_live_tokens, <a class="el" href="a00147.html">tbb::task_group_context</a> &context)</td></tr>
+<tr class="memdesc:a270dba81f7dd9935be7f3d69db907ff4"><td class="mdescLeft"> </td><td class="mdescRight">Run the pipeline to completion with user-supplied context. <br/></td></tr>
+<tr class="separator:a270dba81f7dd9935be7f3d69db907ff4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae53edbda1771eeaa254d78ae6100a762"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae53edbda1771eeaa254d78ae6100a762"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00103.html#ae53edbda1771eeaa254d78ae6100a762">clear</a> ()</td></tr>
+<tr class="memdesc:ae53edbda1771eeaa254d78ae6100a762"><td class="mdescLeft"> </td><td class="mdescRight">Remove all filters from the pipeline. <br/></td></tr>
+<tr class="separator:ae53edbda1771eeaa254d78ae6100a762"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a88bd11ed4d74f6de43a7d3b0bc05f2c3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a88bd11ed4d74f6de43a7d3b0bc05f2c3"></a>
+class </td><td class="memItemRight" valign="bottom"><b>internal::stage_task</b></td></tr>
+<tr class="separator:a88bd11ed4d74f6de43a7d3b0bc05f2c3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa6f9dcf41617866d7bf0e72d8efc11e7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa6f9dcf41617866d7bf0e72d8efc11e7"></a>
+class </td><td class="memItemRight" valign="bottom"><b>internal::pipeline_root_task</b></td></tr>
+<tr class="separator:aa6f9dcf41617866d7bf0e72d8efc11e7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adcddbbe2df37193795a145ef8aac7954"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adcddbbe2df37193795a145ef8aac7954"></a>
+class </td><td class="memItemRight" valign="bottom"><b>filter</b></td></tr>
+<tr class="separator:adcddbbe2df37193795a145ef8aac7954"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab4463cf8612c362ee109224e45fad104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab4463cf8612c362ee109224e45fad104"></a>
+class </td><td class="memItemRight" valign="bottom"><b>thread_bound_filter</b></td></tr>
+<tr class="separator:ab4463cf8612c362ee109224e45fad104"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a39b28579343dc2cdb67fe3fbffe731a8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a39b28579343dc2cdb67fe3fbffe731a8"></a>
+class </td><td class="memItemRight" valign="bottom"><b>internal::pipeline_cleaner</b></td></tr>
+<tr class="separator:a39b28579343dc2cdb67fe3fbffe731a8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0307e203ca37529138734040c3881a35"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0307e203ca37529138734040c3881a35"></a>
+class </td><td class="memItemRight" valign="bottom"><b>tbb::interface6::internal::pipeline_proxy</b></td></tr>
+<tr class="separator:a0307e203ca37529138734040c3881a35"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>A processing pipeline that applies filters to items. </p>
+</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
+<a class="anchor" id="ac3a7b33217b3f3bb0682ec3a40fd2c39"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual __TBB_EXPORTED_METHOD tbb::pipeline::~pipeline </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Though the current implementation declares the destructor virtual, do not rely on this detail. The virtualness is deprecated and may disappear in future versions of TBB. </p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>pipeline.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00104.html b/doc/html/a00104.html
index ecb75f9..2cffdec 100644
--- a/doc/html/a00104.html
+++ b/doc/html/a00104.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::overwrite_node< T > Class Template Reference</title>
+<title>tbb::pre_scan_tag Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,277 +33,38 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00104.html">overwrite_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00104.html">pre_scan_tag</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-methods">Protected Member Functions</a> |
-<a href="#pro-attribs">Protected Attributes</a> |
-<a href="#friends">Friends</a> |
-<a href="a00340.html">List of all members</a>  </div>
+<a href="#pub-static-methods">Static Public Member Functions</a> |
+<a href="a00281.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::overwrite_node< T > Class Template Reference</div>  </div>
+<div class="title">tbb::pre_scan_tag Struct Reference<div class="ingroups"><a class="el" href="a00252.html">Algorithms</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::overwrite_node< T >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00104.png" usemap="#tbb::flow::interface7::overwrite_node< T >_map" alt=""/>
-  <map id="tbb::flow::interface7::overwrite_node< T >_map" name="tbb::flow::interface7::overwrite_node< T >_map">
-<area href="a00072.html" title="The base of all graph nodes. " alt="tbb::flow::interface7::graph_node" shape="rect" coords="0,56,255,80"/>
-<area href="a00124.html" title="Pure virtual template class that defines a receiver of messages of type T. " alt="tbb::flow::interface7::receiver< T >" shape="rect" coords="265,56,520,80"/>
-<area href="a00142.html" title="Pure virtual template class that defines a sender of messages of type T. " alt="tbb::flow::interface7::sender< T >" shape="rect" coords="530,56,785,80"/>
-<area href="a00176.html" alt="tbb::flow::interface7::write_once_node< T >" shape="rect" coords="265,168,520,192"/>
-</map>
- </div></div>
+
+<p>Used to indicate that the initial scan is being performed.  
+ <a href="a00104.html#details">More...</a></p>
+
+<p><code>#include <parallel_scan.h></code></p>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a0a8edb9abd1842cb9a1f00574a85c5c3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0a8edb9abd1842cb9a1f00574a85c5c3"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
-<tr class="separator:a0a8edb9abd1842cb9a1f00574a85c5c3"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acaa2a72c0275a503c72c59b7b1b107a7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acaa2a72c0275a503c72c59b7b1b107a7"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:acaa2a72c0275a503c72c59b7b1b107a7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae3c9152237c0355406644f8bdd423db9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae3c9152237c0355406644f8bdd423db9"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> > </td><td class="memItemRight" valign="bottom"><b>predecessor_type</b></td></tr>
-<tr class="separator:ae3c9152237c0355406644f8bdd423db9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3840465efc064f51b88f55bf12cd8526"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3840465efc064f51b88f55bf12cd8526"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> > </td><td class="memItemRight" valign="bottom"><b>successor_type</b></td></tr>
-<tr class="separator:a3840465efc064f51b88f55bf12cd8526"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af2038834cf5718d675a5e89c798ba9b6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af2038834cf5718d675a5e89c798ba9b6"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> ><br class="typebreak"/>
-::<a class="el" href="a00059.html">built_predecessors_type</a> </td><td class="memItemRight" valign="bottom"><b>built_predecessors_type</b></td></tr>
-<tr class="separator:af2038834cf5718d675a5e89c798ba9b6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a39c66daf12b89510476a440941ec338b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a39c66daf12b89510476a440941ec338b"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> ><br class="typebreak"/>
-::<a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a> </td><td class="memItemRight" valign="bottom"><b>built_successors_type</b></td></tr>
-<tr class="separator:a39c66daf12b89510476a440941ec338b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0418696834321ec04abcee449d860ed7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0418696834321ec04abcee449d860ed7"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> ><br class="typebreak"/>
-::predecessor_list_type </td><td class="memItemRight" valign="bottom"><b>predecessor_list_type</b></td></tr>
-<tr class="separator:a0418696834321ec04abcee449d860ed7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2c89dfa3dc30f0ac869926f714c80d42"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c89dfa3dc30f0ac869926f714c80d42"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> ><br class="typebreak"/>
-::successor_list_type </td><td class="memItemRight" valign="bottom"><b>successor_list_type</b></td></tr>
-<tr class="separator:a2c89dfa3dc30f0ac869926f714c80d42"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00124"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00124')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td></tr>
-<tr class="memitem:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16eccc851b858604344bb8f1bb9eedc8"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a></td></tr>
-<tr class="memdesc:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br/></td></tr>
-<tr class="separator:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbadf5511bd568d283040cd88bd4e81e"></a>
-typedef <a class="el" href="a00142.html">sender</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a></td></tr>
-<tr class="memdesc:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br/></td></tr>
-<tr class="separator:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00d44512fd61d416e6f615e88063d038 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00d44512fd61d416e6f615e88063d038"></a>
-typedef <br class="typebreak"/>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> > </td><td class="memItemRight" valign="bottom"><b>built_predecessors_type</b></td></tr>
-<tr class="separator:a00d44512fd61d416e6f615e88063d038 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2cc119d6dff16073fc5f0d4855a9e4b7 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2cc119d6dff16073fc5f0d4855a9e4b7"></a>
-typedef <br class="typebreak"/>
-built_predecessors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>predecessor_list_type</b></td></tr>
-<tr class="separator:a2cc119d6dff16073fc5f0d4855a9e4b7 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00142"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00142')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td></tr>
-<tr class="memitem:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add86fddf72758d8e5b05b07650c6eeed"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a></td></tr>
-<tr class="memdesc:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">The output type of this sender. <br/></td></tr>
-<tr class="separator:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7779627063a29d4d2a1fc905a5cae8db"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a></td></tr>
-<tr class="memdesc:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <br/></td></tr>
-<tr class="separator:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8aba8b2c5950f113a88f43a97c2207f5"></a>
-typedef <br class="typebreak"/>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a></td></tr>
-<tr class="memdesc:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">interface to record edges for traversal & deletion <br/></td></tr>
-<tr class="separator:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae6c01f7a39a61f6a25f1129e53047b2b inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6c01f7a39a61f6a25f1129e53047b2b"></a>
-typedef <br class="typebreak"/>
-built_successors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>successor_list_type</b></td></tr>
-<tr class="separator:ae6c01f7a39a61f6a25f1129e53047b2b inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a8e0fdb38848772d2e8f93f55e062d148"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8e0fdb38848772d2e8f93f55e062d148"></a>
- </td><td class="memItemRight" valign="bottom"><b>overwrite_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a8e0fdb38848772d2e8f93f55e062d148"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2605cf9efc94c3cba2c59cb5c59e8f19"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2605cf9efc94c3cba2c59cb5c59e8f19"></a>
- </td><td class="memItemRight" valign="bottom"><b>overwrite_node</b> (const <a class="el" href="a00104.html">overwrite_node</a> &src)</td></tr>
-<tr class="separator:a2605cf9efc94c3cba2c59cb5c59e8f19"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a584b012e5f6a786799b23df4cbd5dba5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a584b012e5f6a786799b23df4cbd5dba5"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:a584b012e5f6a786799b23df4cbd5dba5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aed811ce5f59a555396c7bcd56316b4da"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed811ce5f59a555396c7bcd56316b4da"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00104.html#aed811ce5f59a555396c7bcd56316b4da">register_successor</a> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &s)</td></tr>
-<tr class="memdesc:aed811ce5f59a555396c7bcd56316b4da"><td class="mdescLeft"> </td><td class="mdescRight">Add a new successor to this node. <br/></td></tr>
-<tr class="separator:aed811ce5f59a555396c7bcd56316b4da"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab5ff89d56e2e3c3848d84a09c88b1d52"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5ff89d56e2e3c3848d84a09c88b1d52"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00104.html#ab5ff89d56e2e3c3848d84a09c88b1d52">remove_successor</a> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &s)</td></tr>
-<tr class="memdesc:ab5ff89d56e2e3c3848d84a09c88b1d52"><td class="mdescLeft"> </td><td class="mdescRight">Removes a successor from this node. <br/></td></tr>
-<tr class="separator:ab5ff89d56e2e3c3848d84a09c88b1d52"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:addc54b82dc4d29e97d08cdefb9450925"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="addc54b82dc4d29e97d08cdefb9450925"></a>
-<a class="el" href="a00059.html">built_predecessors_type</a> & </td><td class="memItemRight" valign="bottom"><b>built_predecessors</b> ()</td></tr>
-<tr class="separator:addc54b82dc4d29e97d08cdefb9450925"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8dbd8828713f56fa055b9e29e3039b3f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8dbd8828713f56fa055b9e29e3039b3f"></a>
-<a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a> & </td><td class="memItemRight" valign="bottom"><b>built_successors</b> ()</td></tr>
-<tr class="separator:a8dbd8828713f56fa055b9e29e3039b3f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad5a38fedbe469b39d142b045afe85e91"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad5a38fedbe469b39d142b045afe85e91"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_successor</b> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &s)</td></tr>
-<tr class="separator:ad5a38fedbe469b39d142b045afe85e91"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af44826566f279170bba1d9d9bbcfc8f3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af44826566f279170bba1d9d9bbcfc8f3"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_delete_built_successor</b> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &s)</td></tr>
-<tr class="separator:af44826566f279170bba1d9d9bbcfc8f3"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:adbf5f11e221cc7cd547cf01a0806514a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbf5f11e221cc7cd547cf01a0806514a"></a>
-size_t </td><td class="memItemRight" valign="bottom"><b>successor_count</b> ()</td></tr>
-<tr class="separator:adbf5f11e221cc7cd547cf01a0806514a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afcac4e4c70d42a3a1709dc068c448540"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afcac4e4c70d42a3a1709dc068c448540"></a>
-void </td><td class="memItemRight" valign="bottom"><b>copy_successors</b> (successor_list_type &v)</td></tr>
-<tr class="separator:afcac4e4c70d42a3a1709dc068c448540"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a631ef156f3443dfcf811c2fb0efec1eb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a631ef156f3443dfcf811c2fb0efec1eb"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_predecessor</b> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &p)</td></tr>
-<tr class="separator:a631ef156f3443dfcf811c2fb0efec1eb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7923c0aebb36198316da10587b367d77"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7923c0aebb36198316da10587b367d77"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_delete_built_predecessor</b> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &p)</td></tr>
-<tr class="separator:a7923c0aebb36198316da10587b367d77"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1459dabd54dc411e4f39a10f9a590a0b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1459dabd54dc411e4f39a10f9a590a0b"></a>
-size_t </td><td class="memItemRight" valign="bottom"><b>predecessor_count</b> ()</td></tr>
-<tr class="separator:a1459dabd54dc411e4f39a10f9a590a0b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a69f8b5478bf681d575c825fdeeb05f53"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69f8b5478bf681d575c825fdeeb05f53"></a>
-void </td><td class="memItemRight" valign="bottom"><b>copy_predecessors</b> (predecessor_list_type &v)</td></tr>
-<tr class="separator:a69f8b5478bf681d575c825fdeeb05f53"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9e835759164978cd1d3b15c11248da67"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9e835759164978cd1d3b15c11248da67"></a>
-void </td><td class="memItemRight" valign="bottom"><b>extract</b> ()</td></tr>
-<tr class="separator:a9e835759164978cd1d3b15c11248da67"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa655eef6671b35f99dfbddd0f3cf2309"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa655eef6671b35f99dfbddd0f3cf2309"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00104.html#aa655eef6671b35f99dfbddd0f3cf2309">try_get</a> (<a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> &v)</td></tr>
-<tr class="memdesc:aa655eef6671b35f99dfbddd0f3cf2309"><td class="mdescLeft"> </td><td class="mdescRight">Request an item from the sender. <br/></td></tr>
-<tr class="separator:aa655eef6671b35f99dfbddd0f3cf2309"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3bf01d9c754667474fdb47e47df470a9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3bf01d9c754667474fdb47e47df470a9"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>is_valid</b> ()</td></tr>
-<tr class="separator:a3bf01d9c754667474fdb47e47df470a9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4d950320406a8c819882ea50d918678a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4d950320406a8c819882ea50d918678a"></a>
-void </td><td class="memItemRight" valign="bottom"><b>clear</b> ()</td></tr>
-<tr class="separator:a4d950320406a8c819882ea50d918678a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00072')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4badd313105e30f539882276353dcb8e"></a>
- </td><td class="memItemRight" valign="bottom"><b>graph_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00124"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00124')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td></tr>
-<tr class="memitem:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a733889a9053478ef2fb2528e2205bf07"></a>
-virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a733889a9053478ef2fb2528e2205bf07">~receiver</a> ()</td></tr>
-<tr class="memdesc:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br/></td></tr>
-<tr class="separator:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee5067bb4f4b71ffa786c1b33cb9aa6a"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#aee5067bb4f4b71ffa786c1b33cb9aa6a">try_put</a> (const T &t)</td></tr>
-<tr class="memdesc:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Put an item to the receiver. <br/></td></tr>
-<tr class="separator:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a16427aa709505de93ffe0d79136e4251 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16427aa709505de93ffe0d79136e4251"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a16427aa709505de93ffe0d79136e4251">register_predecessor</a> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &)</td></tr>
-<tr class="memdesc:a16427aa709505de93ffe0d79136e4251 inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Add a predecessor to the node. <br/></td></tr>
-<tr class="separator:a16427aa709505de93ffe0d79136e4251 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a55adae6228bbdc1539695e1ec20e9762 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a55adae6228bbdc1539695e1ec20e9762"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a55adae6228bbdc1539695e1ec20e9762">remove_predecessor</a> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &)</td></tr>
-<tr class="memdesc:a55adae6228bbdc1539695e1ec20e9762 inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Remove a predecessor from the node. <br/></td></tr>
-<tr class="separator:a55adae6228bbdc1539695e1ec20e9762 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a63273d246d9dd8d259f9cc1eead42eb2 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63273d246d9dd8d259f9cc1eead42eb2"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>copy_predecessors</b> (predecessor_list_type &)=0</td></tr>
-<tr class="separator:a63273d246d9dd8d259f9cc1eead42eb2 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00142"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00142')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td></tr>
-<tr class="memitem:aa1b9dcf77ab558530ff93a706b4c4b5d inherit pub_methods_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa1b9dcf77ab558530ff93a706b4c4b5d"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#aa1b9dcf77ab558530ff93a706b4c4b5d">try_reserve</a> (T &)</td></tr>
-<tr class="memdesc:aa1b9dcf77ab558530ff93a706b4c4b5d inherit pub_methods_a00142"><td class="mdescLeft"> </td><td class="mdescRight">Reserves an item in the sender. <br/></td></tr>
-<tr class="separator:aa1b9dcf77ab558530ff93a706b4c4b5d inherit pub_methods_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a97ac316ddfb6bd7c7f2f56e3e819a30a inherit pub_methods_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a97ac316ddfb6bd7c7f2f56e3e819a30a"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a97ac316ddfb6bd7c7f2f56e3e819a30a">try_release</a> ()</td></tr>
-<tr class="memdesc:a97ac316ddfb6bd7c7f2f56e3e819a30a inherit pub_methods_a00142"><td class="mdescLeft"> </td><td class="mdescRight">Releases the reserved item. <br/></td></tr>
-<tr class="separator:a97ac316ddfb6bd7c7f2f56e3e819a30a inherit pub_methods_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad404d5218c7ae2556261ffa880cdf804 inherit pub_methods_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad404d5218c7ae2556261ffa880cdf804"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#ad404d5218c7ae2556261ffa880cdf804">try_consume</a> ()</td></tr>
-<tr class="memdesc:ad404d5218c7ae2556261ffa880cdf804 inherit pub_methods_a00142"><td class="mdescLeft"> </td><td class="mdescRight">Consumes the reserved item. <br/></td></tr>
-<tr class="separator:ad404d5218c7ae2556261ffa880cdf804 inherit pub_methods_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:a902bc07ba73e8e3056efb3a1001275db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a902bc07ba73e8e3056efb3a1001275db"></a>
-task * </td><td class="memItemRight" valign="bottom"><b>try_put_task</b> (const <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> &v)</td></tr>
-<tr class="separator:a902bc07ba73e8e3056efb3a1001275db"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a48f960dd752b18dc2f0767619461ecb8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a48f960dd752b18dc2f0767619461ecb8"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_receiver</b> (__TBB_PFG_RESET_ARG(reset_flags))</td></tr>
-<tr class="separator:a48f960dd752b18dc2f0767619461ecb8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a13b0e23bd0b9f4a1769d2760ead04719"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a13b0e23bd0b9f4a1769d2760ead04719"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f))</td></tr>
-<tr class="separator:a13b0e23bd0b9f4a1769d2760ead04719"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00072')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac25a4633873c052047b1dd568824d055"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0</td></tr>
-<tr class="separator:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00124"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00124')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td></tr>
-<tr class="memitem:ac902b1e09eea9748223eb50dc38d3575 inherit pro_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac902b1e09eea9748223eb50dc38d3575"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>reset_receiver</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0</td></tr>
-<tr class="separator:ac902b1e09eea9748223eb50dc38d3575 inherit pro_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae91eab3e06d4139ac38f143c74fe9eab inherit pro_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae91eab3e06d4139ac38f143c74fe9eab"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><b>is_continue_receiver</b> ()</td></tr>
-<tr class="separator:ae91eab3e06d4139ac38f143c74fe9eab inherit pro_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
-Protected Attributes</h2></td></tr>
-<tr class="memitem:ad8d534d5d059f91b82c4aef9235aa9f6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8d534d5d059f91b82c4aef9235aa9f6"></a>
-<a class="el" href="a00145.html">spin_mutex</a> </td><td class="memItemRight" valign="bottom"><b>my_mutex</b></td></tr>
-<tr class="separator:ad8d534d5d059f91b82c4aef9235aa9f6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6fdd59fdffd500a1508fd7e42e6cabf8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6fdd59fdffd500a1508fd7e42e6cabf8"></a>
-<a class="el" href="a00027.html">internal::broadcast_cache</a><br class="typebreak"/>
-< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a>, <a class="el" href="a00102.html">null_rw_mutex</a> > </td><td class="memItemRight" valign="bottom"><b>my_successors</b></td></tr>
-<tr class="separator:a6fdd59fdffd500a1508fd7e42e6cabf8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af82a3ea91b6770c1ccd4d04dc417d088"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af82a3ea91b6770c1ccd4d04dc417d088"></a>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> > </td><td class="memItemRight" valign="bottom"><b>my_built_predecessors</b></td></tr>
-<tr class="separator:af82a3ea91b6770c1ccd4d04dc417d088"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1d6538f03750446febcdc570fa41bc23"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1d6538f03750446febcdc570fa41bc23"></a>
-<a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> </td><td class="memItemRight" valign="bottom"><b>my_buffer</b></td></tr>
-<tr class="separator:a1d6538f03750446febcdc570fa41bc23"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afbf79aaedd9459ed382823d8d85d0bfc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbf79aaedd9459ed382823d8d85d0bfc"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>my_buffer_is_valid</b></td></tr>
-<tr class="separator:afbf79aaedd9459ed382823d8d85d0bfc"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_attribs_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00072')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1caee1c5677047b05d18b1662ca6fdf8"></a>
-<a class="el" href="a00070.html">graph</a> & </td><td class="memItemRight" valign="bottom"><b>my_graph</b></td></tr>
-<tr class="separator:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af48cd0cd4f6e44efc3b353adb55f86a8"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>next</b></td></tr>
-<tr class="separator:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6917bffc3cb150319679bf2395e68caa"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>prev</b></td></tr>
-<tr class="separator:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplParams" colspan="2"><a class="anchor" id="abaf9bf74ca5f2854d09f5f07337280eb"></a>
-template<typename R , typename B > </td></tr>
-<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>run_and_put_task</b></td></tr>
-<tr class="separator:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1360e38efe396058978cf3754ad620f5"></a>
-template<typename X , typename Y > </td></tr>
-<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::broadcast_cache</b></td></tr>
-<tr class="separator:a1360e38efe396058978cf3754ad620f5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplParams" colspan="2"><a class="anchor" id="acbd9ac2610587a99cd7d43344297cc49"></a>
-template<typename X , typename Y > </td></tr>
-<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::round_robin_cache</b></td></tr>
-<tr class="separator:acbd9ac2610587a99cd7d43344297cc49"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:a1d71947e8273d28e01620f92a292be59"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1d71947e8273d28e01620f92a292be59"></a>
+static bool </td><td class="memItemRight" valign="bottom"><b>is_final_scan</b> ()</td></tr>
+<tr class="separator:a1d71947e8273d28e01620f92a292be59"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Used to indicate that the initial scan is being performed. </p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>parallel_scan.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00104.png b/doc/html/a00104.png
deleted file mode 100644
index f2d7752..0000000
Binary files a/doc/html/a00104.png and /dev/null differ
diff --git a/doc/html/a00105.html b/doc/html/a00105.html
index 2675b20..82a6083 100644
--- a/doc/html/a00105.html
+++ b/doc/html/a00105.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::parallel_do_feeder< Item > Class Template Reference</title>
+<title>tbb::flow::interface9::internal::predecessor_cache< T, M > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,64 +33,21 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00105.html">parallel_do_feeder</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00105.html">predecessor_cache</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#friends">Friends</a> |
-<a href="a00285.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::parallel_do_feeder< Item > Class Template Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
+<div class="title">tbb::flow::interface9::internal::predecessor_cache< T, M > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Class the user supplied algorithm body uses to add new tasks.  
- <a href="a00105.html#details">More...</a></p>
-
-<p><code>#include <parallel_do.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::parallel_do_feeder< Item >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00105.png" usemap="#tbb::parallel_do_feeder< Item >_map" alt=""/>
-  <map id="tbb::parallel_do_feeder< Item >_map" name="tbb::parallel_do_feeder< Item >_map">
-</map>
- </div></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:ac095c6b1a32e9c0be010aa32875d7a63"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac095c6b1a32e9c0be010aa32875d7a63"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00105.html#ac095c6b1a32e9c0be010aa32875d7a63">add</a> (const Item &item)</td></tr>
-<tr class="memdesc:ac095c6b1a32e9c0be010aa32875d7a63"><td class="mdescLeft"> </td><td class="mdescRight">Add a work item to a running parallel_do. <br/></td></tr>
-<tr class="separator:ac095c6b1a32e9c0be010aa32875d7a63"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:ae5c8cc31bc27b79377687e3de76f480e"><td class="memTemplParams" colspan="2"><a class="anchor" id="ae5c8cc31bc27b79377687e3de76f480e"></a>
-template<typename Body_ , typename Item_ > </td></tr>
-<tr class="memitem:ae5c8cc31bc27b79377687e3de76f480e"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::parallel_do_feeder_impl</b></td></tr>
-<tr class="separator:ae5c8cc31bc27b79377687e3de76f480e"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename Item><br/>
-class tbb::parallel_do_feeder< Item ></h3>
-
-<p>Class the user supplied algorithm body uses to add new tasks. </p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">Item</td><td>Work item type </td></tr>
-  </table>
-  </dd>
-</dl>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>parallel_do.h</li>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00188.html">flow_graph.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00105.png b/doc/html/a00105.png
deleted file mode 100644
index 742cad9..0000000
Binary files a/doc/html/a00105.png and /dev/null differ
diff --git a/doc/html/a00106.html b/doc/html/a00106.html
index 9960b59..92645d5 100644
--- a/doc/html/a00106.html
+++ b/doc/html/a00106.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::parallel_while< Body > Class Template Reference</title>
+<title>tbb::queuing_mutex Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,130 +33,70 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00106.html">parallel_while</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00106.html">queuing_mutex</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-types">Public Types</a> |
+<a href="#nested-classes">Classes</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00288.html">List of all members</a>  </div>
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="a00287.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::parallel_while< Body > Class Template Reference<div class="ingroups"><a class="el" href="a00255.html">Algorithms</a></div></div>  </div>
+<div class="title">tbb::queuing_mutex Class Reference<div class="ingroups"><a class="el" href="a00255.html">Synchronization</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>Parallel iteration over a stream, with optional addition of more work.  
+<p>Queuing mutex with local-only spinning.  
  <a href="a00106.html#details">More...</a></p>
 
-<p><code>#include <parallel_while.h></code></p>
+<p><code>#include <queuing_mutex.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::parallel_while< Body >:</div>
+Inheritance diagram for tbb::queuing_mutex:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00106.png" usemap="#tbb::parallel_while< Body >_map" alt=""/>
-  <map id="tbb::parallel_while< Body >_map" name="tbb::parallel_while< Body >_map">
+  <img src="a00106.png" usemap="#tbb::queuing_mutex_map" alt=""/>
+  <map id="tbb::queuing_mutex_map" name="tbb::queuing_mutex_map">
 </map>
  </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a2442f019427e608d46801376267e44a8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2442f019427e608d46801376267e44a8"></a>
-typedef Body::argument_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00106.html#a2442f019427e608d46801376267e44a8">value_type</a></td></tr>
-<tr class="memdesc:a2442f019427e608d46801376267e44a8"><td class="mdescLeft"> </td><td class="mdescRight">Type of items. <br/></td></tr>
-<tr class="separator:a2442f019427e608d46801376267e44a8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html">scoped_lock</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00128.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a220a7307358aa36802c8754ea45ca385"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a220a7307358aa36802c8754ea45ca385"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00106.html#a220a7307358aa36802c8754ea45ca385">parallel_while</a> ()</td></tr>
-<tr class="memdesc:a220a7307358aa36802c8754ea45ca385"><td class="mdescLeft"> </td><td class="mdescRight">Construct empty non-running parallel while. <br/></td></tr>
-<tr class="separator:a220a7307358aa36802c8754ea45ca385"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac2fd559c8a38639fa1ba97a0d5639ca8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac2fd559c8a38639fa1ba97a0d5639ca8"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00106.html#ac2fd559c8a38639fa1ba97a0d5639ca8">~parallel_while</a> ()</td></tr>
-<tr class="memdesc:ac2fd559c8a38639fa1ba97a0d5639ca8"><td class="mdescLeft"> </td><td class="mdescRight">Destructor cleans up data members before returning. <br/></td></tr>
-<tr class="separator:ac2fd559c8a38639fa1ba97a0d5639ca8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a20607ba5faa958144787d980aa850c16"><td class="memTemplParams" colspan="2">template<typename Stream > </td></tr>
-<tr class="memitem:a20607ba5faa958144787d980aa850c16"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00106.html#a20607ba5faa958144787d980aa850c16">run</a> (Stream &stream, const Body &body)</td></tr>
-<tr class="memdesc:a20607ba5faa958144787d980aa850c16"><td class="mdescLeft"> </td><td class="mdescRight">Apply body.apply to each item in the stream.  <a href="#a20607ba5faa958144787d980aa850c16">More...</a><br/></td></tr>
-<tr class="separator:a20607ba5faa958144787d980aa850c16"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4861989d7f5e3111d264d4d6013e8fe1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00106.html#a4861989d7f5e3111d264d4d6013e8fe1">add</a> (const <a class="el" href="a00106.html#a2442f019427e608d46801376267e44a8">value_type</a> &item)</td></tr>
-<tr class="memdesc:a4861989d7f5e3111d264d4d6013e8fe1"><td class="mdescLeft"> </td><td class="mdescRight">Add a work item while running.  <a href="#a4861989d7f5e3111d264d4d6013e8fe1">More...</a><br/></td></tr>
-<tr class="separator:a4861989d7f5e3111d264d4d6013e8fe1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0e58fce2062ae349a30b320b7fdc9155"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0e58fce2062ae349a30b320b7fdc9155"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00106.html#a0e58fce2062ae349a30b320b7fdc9155">queuing_mutex</a> ()</td></tr>
+<tr class="memdesc:a0e58fce2062ae349a30b320b7fdc9155"><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired mutex. <br/></td></tr>
+<tr class="separator:a0e58fce2062ae349a30b320b7fdc9155"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae475e98e804c75239748b293e7e0feff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae475e98e804c75239748b293e7e0feff"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>internal_construct</b> ()</td></tr>
+<tr class="separator:ae475e98e804c75239748b293e7e0feff"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a504f3af8a939468f1514604c0941bc62"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a504f3af8a939468f1514604c0941bc62"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
+<tr class="separator:a504f3af8a939468f1514604c0941bc62"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a47ad4cdac79581c01a66241e2e5c2c07"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a47ad4cdac79581c01a66241e2e5c2c07"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
+<tr class="separator:a47ad4cdac79581c01a66241e2e5c2c07"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5b4833b97208bd699cba061dfc3057cc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b4833b97208bd699cba061dfc3057cc"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = true</td></tr>
+<tr class="separator:a5b4833b97208bd699cba061dfc3057cc"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename Body><br/>
-class tbb::parallel_while< Body ></h3>
-
-<p>Parallel iteration over a stream, with optional addition of more work. </p>
-<p>The Body b has the requirement: <br/>
- "b(v)" <br/>
- "b.argument_type" <br/>
- where v is an argument_type </p>
-</div><h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="a4861989d7f5e3111d264d4d6013e8fe1"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Body > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00106.html">tbb::parallel_while</a>< Body >::add </td>
-          <td>(</td>
-          <td class="paramtype">const <a class="el" href="a00106.html#a2442f019427e608d46801376267e44a8">value_type</a> & </td>
-          <td class="paramname"><em>item</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Add a work item while running. </p>
-<p>Should be executed only by body.apply or a thread spawned therefrom. </p>
-
-</div>
-</div>
-<a class="anchor" id="a20607ba5faa958144787d980aa850c16"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Body > </div>
-<div class="memtemplate">
-template<typename Stream > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00106.html">tbb::parallel_while</a>< Body >::run </td>
-          <td>(</td>
-          <td class="paramtype">Stream & </td>
-          <td class="paramname"><em>stream</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Body & </td>
-          <td class="paramname"><em>body</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Apply body.apply to each item in the stream. </p>
-<p>A Stream s has the requirements <br/>
- "S::value_type" <br/>
- "s.pop_if_present(value) is convertible to bool </p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>parallel_while.h</li>
+<div class="textblock"><p>Queuing mutex with local-only spinning. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>queuing_mutex.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00106.png b/doc/html/a00106.png
index fc86480..97f8b53 100644
Binary files a/doc/html/a00106.png and b/doc/html/a00106.png differ
diff --git a/doc/html/a00107.html b/doc/html/a00107.html
index 4403551..157ad48 100644
--- a/doc/html/a00107.html
+++ b/doc/html/a00107.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::pipeline Class Reference</title>
+<title>tbb::queuing_rw_mutex Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,104 +33,75 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00107.html">pipeline</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00107.html">queuing_rw_mutex</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#nested-classes">Classes</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#friends">Friends</a> |
-<a href="a00291.html">List of all members</a>  </div>
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="a00289.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::pipeline Class Reference<div class="ingroups"><a class="el" href="a00255.html">Algorithms</a></div></div>  </div>
+<div class="title">tbb::queuing_rw_mutex Class Reference<div class="ingroups"><a class="el" href="a00255.html">Synchronization</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>A processing pipeline that applies filters to items.  
+<p>Queuing reader-writer mutex with local-only spinning.  
  <a href="a00107.html#details">More...</a></p>
 
-<p><code>#include <pipeline.h></code></p>
+<p><code>#include <queuing_rw_mutex.h></code></p>
+<div class="dynheader">
+Inheritance diagram for tbb::queuing_rw_mutex:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00107.png" usemap="#tbb::queuing_rw_mutex_map" alt=""/>
+  <map id="tbb::queuing_rw_mutex_map" name="tbb::queuing_rw_mutex_map">
+</map>
+ </div></div>
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.html">scoped_lock</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00131.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:afe7b7bd9b2617c2b69170675a478b2bd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afe7b7bd9b2617c2b69170675a478b2bd"></a>
-__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00107.html#afe7b7bd9b2617c2b69170675a478b2bd">pipeline</a> ()</td></tr>
-<tr class="memdesc:afe7b7bd9b2617c2b69170675a478b2bd"><td class="mdescLeft"> </td><td class="mdescRight">Construct empty pipeline. <br/></td></tr>
-<tr class="separator:afe7b7bd9b2617c2b69170675a478b2bd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac3a7b33217b3f3bb0682ec3a40fd2c39"><td class="memItemLeft" align="right" valign="top">virtual __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00107.html#ac3a7b33217b3f3bb0682ec3a40fd2c39">~pipeline</a> ()</td></tr>
-<tr class="separator:ac3a7b33217b3f3bb0682ec3a40fd2c39"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8eb83014bd53b184e0ed50f120ca310b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8eb83014bd53b184e0ed50f120ca310b"></a>
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00107.html#a8eb83014bd53b184e0ed50f120ca310b">add_filter</a> (<a class="el" href="a00062.html">filter</a> &filter_)</td></tr>
-<tr class="memdesc:a8eb83014bd53b184e0ed50f120ca310b"><td class="mdescLeft"> </td><td class="mdescRight">Add filter to end of pipeline. <br/></td></tr>
-<tr class="separator:a8eb83014bd53b184e0ed50f120ca310b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac9ee9080cfc080c40a7ee7cb03a62637"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac9ee9080cfc080c40a7ee7cb03a62637"></a>
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00107.html#ac9ee9080cfc080c40a7ee7cb03a62637">run</a> (size_t max_number_of_live_tokens)</td></tr>
-<tr class="memdesc:ac9ee9080cfc080c40a7ee7cb03a62637"><td class="mdescLeft"> </td><td class="mdescRight">Run the pipeline to completion. <br/></td></tr>
-<tr class="separator:ac9ee9080cfc080c40a7ee7cb03a62637"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a270dba81f7dd9935be7f3d69db907ff4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a270dba81f7dd9935be7f3d69db907ff4"></a>
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00107.html#a270dba81f7dd9935be7f3d69db907ff4">run</a> (size_t max_number_of_live_tokens, <a class="el" href="a00153.html">tbb::task_group_context</a> &context)</td></tr>
-<tr class="memdesc:a270dba81f7dd9935be7f3d69db907ff4"><td class="mdescLeft"> </td><td class="mdescRight">Run the pipeline to completion with user-supplied context. <br/></td></tr>
-<tr class="separator:a270dba81f7dd9935be7f3d69db907ff4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae53edbda1771eeaa254d78ae6100a762"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae53edbda1771eeaa254d78ae6100a762"></a>
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00107.html#ae53edbda1771eeaa254d78ae6100a762">clear</a> ()</td></tr>
-<tr class="memdesc:ae53edbda1771eeaa254d78ae6100a762"><td class="mdescLeft"> </td><td class="mdescRight">Remove all filters from the pipeline. <br/></td></tr>
-<tr class="separator:ae53edbda1771eeaa254d78ae6100a762"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a23de1ac415b6f54b778c8fd6ec6073e0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a23de1ac415b6f54b778c8fd6ec6073e0"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00107.html#a23de1ac415b6f54b778c8fd6ec6073e0">queuing_rw_mutex</a> ()</td></tr>
+<tr class="memdesc:a23de1ac415b6f54b778c8fd6ec6073e0"><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired mutex. <br/></td></tr>
+<tr class="separator:a23de1ac415b6f54b778c8fd6ec6073e0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae67fe828d7e07222e7876ef9fd780fcc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae67fe828d7e07222e7876ef9fd780fcc"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00107.html#ae67fe828d7e07222e7876ef9fd780fcc">~queuing_rw_mutex</a> ()</td></tr>
+<tr class="memdesc:ae67fe828d7e07222e7876ef9fd780fcc"><td class="mdescLeft"> </td><td class="mdescRight">Destructor asserts if the mutex is acquired, i.e. q_tail is non-NULL. <br/></td></tr>
+<tr class="separator:ae67fe828d7e07222e7876ef9fd780fcc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afd032e7e13804cd4d1cd8fce60d773f8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afd032e7e13804cd4d1cd8fce60d773f8"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>internal_construct</b> ()</td></tr>
+<tr class="separator:afd032e7e13804cd4d1cd8fce60d773f8"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:a88bd11ed4d74f6de43a7d3b0bc05f2c3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a88bd11ed4d74f6de43a7d3b0bc05f2c3"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::stage_task</b></td></tr>
-<tr class="separator:a88bd11ed4d74f6de43a7d3b0bc05f2c3"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa6f9dcf41617866d7bf0e72d8efc11e7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa6f9dcf41617866d7bf0e72d8efc11e7"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::pipeline_root_task</b></td></tr>
-<tr class="separator:aa6f9dcf41617866d7bf0e72d8efc11e7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:adcddbbe2df37193795a145ef8aac7954"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adcddbbe2df37193795a145ef8aac7954"></a>
-class </td><td class="memItemRight" valign="bottom"><b>filter</b></td></tr>
-<tr class="separator:adcddbbe2df37193795a145ef8aac7954"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab4463cf8612c362ee109224e45fad104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab4463cf8612c362ee109224e45fad104"></a>
-class </td><td class="memItemRight" valign="bottom"><b>thread_bound_filter</b></td></tr>
-<tr class="separator:ab4463cf8612c362ee109224e45fad104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a39b28579343dc2cdb67fe3fbffe731a8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a39b28579343dc2cdb67fe3fbffe731a8"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::pipeline_cleaner</b></td></tr>
-<tr class="separator:a39b28579343dc2cdb67fe3fbffe731a8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0307e203ca37529138734040c3881a35"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0307e203ca37529138734040c3881a35"></a>
-class </td><td class="memItemRight" valign="bottom"><b>tbb::interface6::internal::pipeline_proxy</b></td></tr>
-<tr class="separator:a0307e203ca37529138734040c3881a35"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:ae3dbfbf71bfa9c662a59688cd86bfbd7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae3dbfbf71bfa9c662a59688cd86bfbd7"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = true</td></tr>
+<tr class="separator:ae3dbfbf71bfa9c662a59688cd86bfbd7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae8c3ee1f5ab3af3954abeec1d165ea8e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae8c3ee1f5ab3af3954abeec1d165ea8e"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
+<tr class="separator:ae8c3ee1f5ab3af3954abeec1d165ea8e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4704d512922b4b5d21c97901f9f7abd0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4704d512922b4b5d21c97901f9f7abd0"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = true</td></tr>
+<tr class="separator:a4704d512922b4b5d21c97901f9f7abd0"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>A processing pipeline that applies filters to items. </p>
-</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
-<a class="anchor" id="ac3a7b33217b3f3bb0682ec3a40fd2c39"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual __TBB_EXPORTED_METHOD tbb::pipeline::~pipeline </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Though the current implementation declares the destructor virtual, do not rely on this detail. The virtualness is deprecated and may disappear in future versions of TBB. </p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>pipeline.h</li>
+<div class="textblock"><p>Queuing reader-writer mutex with local-only spinning. </p>
+<p>Adapted from Krieger, Stumm, et al. pseudocode at <a href="http://www.eecg.toronto.edu/parallel/pubs_abs.html#Krieger_etal_ICPP93">http://www.eecg.toronto.edu/parallel/pubs_abs.html#Krieger_etal_ICPP93</a> </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>queuing_rw_mutex.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00112.png b/doc/html/a00107.png
similarity index 100%
rename from doc/html/a00112.png
rename to doc/html/a00107.png
diff --git a/doc/html/a00108.html b/doc/html/a00108.html
index c7cd708..6fa1b34 100644
--- a/doc/html/a00108.html
+++ b/doc/html/a00108.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::pre_scan_tag Struct Reference</title>
+<title>tbb::interface5::reader_writer_lock Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,38 +33,196 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00108.html">pre_scan_tag</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00108.html">reader_writer_lock</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-static-methods">Static Public Member Functions</a> |
-<a href="a00286.html">List of all members</a>  </div>
+<a href="#nested-classes">Classes</a> |
+<a href="#pub-types">Public Types</a> |
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#friends">Friends</a> |
+<a href="a00369.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::pre_scan_tag Struct Reference<div class="ingroups"><a class="el" href="a00255.html">Algorithms</a></div></div>  </div>
+<div class="title">tbb::interface5::reader_writer_lock Class Reference<div class="ingroups"><a class="el" href="a00255.html">Synchronization</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>Used to indicate that the initial scan is being performed.  
+<p>Writer-preference reader-writer lock with local-only spinning on readers.  
  <a href="a00108.html#details">More...</a></p>
 
-<p><code>#include <parallel_scan.h></code></p>
+<p><code>#include <reader_writer_lock.h></code></p>
+<div class="dynheader">
+Inheritance diagram for tbb::interface5::reader_writer_lock:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00108.png" usemap="#tbb::interface5::reader_writer_lock_map" alt=""/>
+  <map id="tbb::interface5::reader_writer_lock_map" name="tbb::interface5::reader_writer_lock_map">
+</map>
+ </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
-Static Public Member Functions</h2></td></tr>
-<tr class="memitem:a1d71947e8273d28e01620f92a292be59"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1d71947e8273d28e01620f92a292be59"></a>
-static bool </td><td class="memItemRight" valign="bottom"><b>is_final_scan</b> ()</td></tr>
-<tr class="separator:a1d71947e8273d28e01620f92a292be59"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html">scoped_lock</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The scoped lock pattern for write locks.  <a href="a00132.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html">scoped_lock_read</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The scoped lock pattern for read locks.  <a href="a00138.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a29bbf9ca21c12b313d9fa5326feaf3ed"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00108.html#a29bbf9ca21c12b313d9fa5326feaf3ed">status_t</a> { <b>waiting_nonblocking</b>, 
+<b>waiting</b>, 
+<b>active</b>, 
+<b>invalid</b>
+ }</td></tr>
+<tr class="memdesc:a29bbf9ca21c12b313d9fa5326feaf3ed"><td class="mdescLeft"> </td><td class="mdescRight">Status type for nodes associated with lock instances.  <a href="a00108.html#a29bbf9ca21c12b313d9fa5326feaf3ed">More...</a><br/></td></tr>
+<tr class="separator:a29bbf9ca21c12b313d9fa5326feaf3ed"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:abceda6c50b0c36eacbef51f4682742f3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abceda6c50b0c36eacbef51f4682742f3"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00108.html#abceda6c50b0c36eacbef51f4682742f3">reader_writer_lock</a> ()</td></tr>
+<tr class="memdesc:abceda6c50b0c36eacbef51f4682742f3"><td class="mdescLeft"> </td><td class="mdescRight">Constructs a new <a class="el" href="a00108.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a>. <br/></td></tr>
+<tr class="separator:abceda6c50b0c36eacbef51f4682742f3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeee96b648c7b5ff6126c8a2e13ec7241"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeee96b648c7b5ff6126c8a2e13ec7241"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00108.html#aeee96b648c7b5ff6126c8a2e13ec7241">~reader_writer_lock</a> ()</td></tr>
+<tr class="memdesc:aeee96b648c7b5ff6126c8a2e13ec7241"><td class="mdescLeft"> </td><td class="mdescRight">Destructs a <a class="el" href="a00108.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> object. <br/></td></tr>
+<tr class="separator:aeee96b648c7b5ff6126c8a2e13ec7241"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af92eb949fc491af8f7e350869ea0a0d1"><td class="memItemLeft" align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00108.html#af92eb949fc491af8f7e350869ea0a0d1">lock</a> ()</td></tr>
+<tr class="memdesc:af92eb949fc491af8f7e350869ea0a0d1"><td class="mdescLeft"> </td><td class="mdescRight">Acquires the <a class="el" href="a00108.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> for write.  <a href="#af92eb949fc491af8f7e350869ea0a0d1">More...</a><br/></td></tr>
+<tr class="separator:af92eb949fc491af8f7e350869ea0a0d1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1739e842af52925a2d4a7e821b9b3b8d"><td class="memItemLeft" align="right" valign="top">bool __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00108.html#a1739e842af52925a2d4a7e821b9b3b8d">try_lock</a> ()</td></tr>
+<tr class="memdesc:a1739e842af52925a2d4a7e821b9b3b8d"><td class="mdescLeft"> </td><td class="mdescRight">Tries to acquire the <a class="el" href="a00108.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> for write.  <a href="#a1739e842af52925a2d4a7e821b9b3b8d">More...</a><br/></td></tr>
+<tr class="separator:a1739e842af52925a2d4a7e821b9b3b8d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6fd4fcdf0e5c0425d1cc736d644f234f"><td class="memItemLeft" align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00108.html#a6fd4fcdf0e5c0425d1cc736d644f234f">lock_read</a> ()</td></tr>
+<tr class="memdesc:a6fd4fcdf0e5c0425d1cc736d644f234f"><td class="mdescLeft"> </td><td class="mdescRight">Acquires the <a class="el" href="a00108.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> for read.  <a href="#a6fd4fcdf0e5c0425d1cc736d644f234f">More...</a><br/></td></tr>
+<tr class="separator:a6fd4fcdf0e5c0425d1cc736d644f234f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9c7aa04e00202c9a1197cb6d870cabb4"><td class="memItemLeft" align="right" valign="top">bool __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00108.html#a9c7aa04e00202c9a1197cb6d870cabb4">try_lock_read</a> ()</td></tr>
+<tr class="memdesc:a9c7aa04e00202c9a1197cb6d870cabb4"><td class="mdescLeft"> </td><td class="mdescRight">Tries to acquire the <a class="el" href="a00108.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> for read.  <a href="#a9c7aa04e00202c9a1197cb6d870cabb4">More...</a><br/></td></tr>
+<tr class="separator:a9c7aa04e00202c9a1197cb6d870cabb4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4c55c4dbde63e950fdc843c9b01a174f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c55c4dbde63e950fdc843c9b01a174f"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00108.html#a4c55c4dbde63e950fdc843c9b01a174f">unlock</a> ()</td></tr>
+<tr class="memdesc:a4c55c4dbde63e950fdc843c9b01a174f"><td class="mdescLeft"> </td><td class="mdescRight">Releases the <a class="el" href="a00108.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a>. <br/></td></tr>
+<tr class="separator:a4c55c4dbde63e950fdc843c9b01a174f"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:afcf922650b2fd9d76b7b939d8511bbd8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afcf922650b2fd9d76b7b939d8511bbd8"></a>
+class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
+<tr class="separator:afcf922650b2fd9d76b7b939d8511bbd8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a578ccbc6ecbc6d32cb45ccfdc0ed4ee6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a578ccbc6ecbc6d32cb45ccfdc0ed4ee6"></a>
+class </td><td class="memItemRight" valign="bottom"><b>scoped_lock_read</b></td></tr>
+<tr class="separator:a578ccbc6ecbc6d32cb45ccfdc0ed4ee6"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Used to indicate that the initial scan is being performed. </p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>parallel_scan.h</li>
+<div class="textblock"><p>Writer-preference reader-writer lock with local-only spinning on readers. </p>
+<p>Loosely adapted from Mellor-Crummey and Scott pseudocode at <a href="http://www.cs.rochester.edu/research/synchronization/pseudocode/rw.html#s_wp">http://www.cs.rochester.edu/research/synchronization/pseudocode/rw.html#s_wp</a> </p>
+</div><h2 class="groupheader">Member Enumeration Documentation</h2>
+<a class="anchor" id="a29bbf9ca21c12b313d9fa5326feaf3ed"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00108.html#a29bbf9ca21c12b313d9fa5326feaf3ed">tbb::interface5::reader_writer_lock::status_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Status type for nodes associated with lock instances. </p>
+<p>waiting_nonblocking: the wait state for nonblocking lock instances; for writes, these transition straight to active states; for reads, these are unused.</p>
+<p>waiting: the start and spin state for all lock instances; these will transition to active state when appropriate. Non-blocking write locks transition from this state to waiting_nonblocking immediately.</p>
+<p>active: the active state means that the lock instance holds the lock; it will transition to invalid state during node deletion</p>
+<p>invalid: the end state for all nodes; this is set in the destructor so if we encounter this state, we are looking at memory that has already been freed</p>
+<p>The state diagrams below describe the status transitions. Single arrows indicate that the thread that owns the node is responsible for the transition; double arrows indicate that any thread could make the transition.</p>
+<p>State diagram for <a class="el" href="a00132.html" title="The scoped lock pattern for write locks. ">scoped_lock</a> status:</p>
+<p>waiting -------—> waiting_nonblocking | _____________/ | V V V active --------------—> invalid</p>
+<p>State diagram for <a class="el" href="a00138.html" title="The scoped lock pattern for read locks. ">scoped_lock_read</a> status:</p>
+<p>waiting | V active --------------—>invalid </p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="af92eb949fc491af8f7e350869ea0a0d1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::lock </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Acquires the <a class="el" href="a00108.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> for write. </p>
+<p>If the lock is currently held in write mode by another context, the writer will block by spinning on a local variable. Exceptions thrown: <a class="el" href="a00071.html" title="Exception for PPL locks. ">improper_lock</a> The context tries to acquire a <a class="el" href="a00108.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> that it already has write ownership of. </p>
+
+</div>
+</div>
+<a class="anchor" id="a6fd4fcdf0e5c0425d1cc736d644f234f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::lock_read </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Acquires the <a class="el" href="a00108.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> for read. </p>
+<p>If the lock is currently held by a writer, this reader will block and wait until the writers are done. Exceptions thrown: <a class="el" href="a00071.html" title="Exception for PPL locks. ">improper_lock</a> The context tries to acquire a <a class="el" href="a00108.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> that it already has write ownership of. </p>
+
+</div>
+</div>
+<a class="anchor" id="a1739e842af52925a2d4a7e821b9b3b8d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::try_lock </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Tries to acquire the <a class="el" href="a00108.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> for write. </p>
+<p>This function does not block. Return Value: True or false, depending on whether the lock is acquired or not. If the lock is already held by this acquiring context, <a class="el" href="a00108.html#a1739e842af52925a2d4a7e821b9b3b8d" title="Tries to acquire the reader_writer_lock for write. ">try_lock()</a> returns false. </p>
+
+</div>
+</div>
+<a class="anchor" id="a9c7aa04e00202c9a1197cb6d870cabb4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::try_lock_read </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Tries to acquire the <a class="el" href="a00108.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> for read. </p>
+<p>This function does not block. Return Value: True or false, depending on whether the lock is acquired or not. </p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>reader_writer_lock.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00113.png b/doc/html/a00108.png
similarity index 100%
rename from doc/html/a00113.png
rename to doc/html/a00108.png
diff --git a/doc/html/a00109.html b/doc/html/a00109.html
index fc56934..72417ae 100644
--- a/doc/html/a00109.html
+++ b/doc/html/a00109.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::priority_queue_node< T, Compare, A > Class Template Reference</title>
+<title>tbb::cache_aligned_allocator< void >::rebind< U > Struct Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,403 +33,32 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00109.html">priority_queue_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00028.html">cache_aligned_allocator< void ></a></li><li class="navelem"><a class="el" href="a00109.html">rebind</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-types">Public Types</a> |
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-types">Protected Types</a> |
-<a href="#pro-methods">Protected Member Functions</a> |
-<a href="a00348.html">List of all members</a>  </div>
+<a href="a00270.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::priority_queue_node< T, Compare, A > Class Template Reference</div>  </div>
+<div class="title">tbb::cache_aligned_allocator< void >::rebind< U > Struct Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Forwards messages in priority order.  
- <a href="a00109.html#details">More...</a></p>
-
-<p><code>#include <flow_graph.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::priority_queue_node< T, Compare, A >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00109.png" usemap="#tbb::flow::interface7::priority_queue_node< T, Compare, A >_map" alt=""/>
-  <map id="tbb::flow::interface7::priority_queue_node< T, Compare, A >_map" name="tbb::flow::interface7::priority_queue_node< T, Compare, A >_map">
-<area href="a00030.html" title="Forwards messages in arbitrary order. " alt="tbb::flow::interface7::buffer_node< T, A >" shape="rect" coords="543,112,895,136"/>
-<area href="a00072.html" title="The base of all graph nodes. " alt="tbb::flow::interface7::graph_node" shape="rect" coords="0,56,352,80"/>
-<area href="a00124.html" title="Pure virtual template class that defines a receiver of messages of type T. " alt="tbb::flow::interface7::receiver< T >" shape="rect" coords="724,56,1076,80"/>
-<area href="a00142.html" title="Pure virtual template class that defines a sender of messages of type T. " alt="tbb::flow::interface7::sender< T >" shape="rect" coords="1086,56,1438,80"/>
-</map>
- </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:af9a1f2ec01b3c87fbff0f1fbc9d1f70b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af9a1f2ec01b3c87fbff0f1fbc9d1f70b"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
-<tr class="separator:af9a1f2ec01b3c87fbff0f1fbc9d1f70b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a34d7a390e9b9b589d3f9c4ef9132facf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a34d7a390e9b9b589d3f9c4ef9132facf"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:a34d7a390e9b9b589d3f9c4ef9132facf"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a96b0fc02e4d635727a507ac22488709b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a96b0fc02e4d635727a507ac22488709b"></a>
-typedef <a class="el" href="a00030.html">buffer_node</a>< T, A > </td><td class="memItemRight" valign="bottom"><b>base_type</b></td></tr>
-<tr class="separator:a96b0fc02e4d635727a507ac22488709b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a83261533efac3dd24a7d6e731d27fb0a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a83261533efac3dd24a7d6e731d27fb0a"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> > </td><td class="memItemRight" valign="bottom"><b>predecessor_type</b></td></tr>
-<tr class="separator:a83261533efac3dd24a7d6e731d27fb0a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0bd8fea3f3d067e053972f3718bc922f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0bd8fea3f3d067e053972f3718bc922f"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> > </td><td class="memItemRight" valign="bottom"><b>successor_type</b></td></tr>
-<tr class="separator:a0bd8fea3f3d067e053972f3718bc922f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00030"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00030')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td></tr>
-<tr class="memitem:a57a0aab7103d1d0cbf27560c9acf6c8f inherit pub_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a57a0aab7103d1d0cbf27560c9acf6c8f"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
-<tr class="separator:a57a0aab7103d1d0cbf27560c9acf6c8f inherit pub_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abedb8c98e62146c3473344b7148173b8 inherit pub_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abedb8c98e62146c3473344b7148173b8"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:abedb8c98e62146c3473344b7148173b8 inherit pub_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3c34a2182dcbbded45da979b0f405817 inherit pub_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c34a2182dcbbded45da979b0f405817"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> > </td><td class="memItemRight" valign="bottom"><b>predecessor_type</b></td></tr>
-<tr class="separator:a3c34a2182dcbbded45da979b0f405817 inherit pub_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5e505e0c4a904e2c1ded8c7c8f657c3b inherit pub_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e505e0c4a904e2c1ded8c7c8f657c3b"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> > </td><td class="memItemRight" valign="bottom"><b>successor_type</b></td></tr>
-<tr class="separator:a5e505e0c4a904e2c1ded8c7c8f657c3b inherit pub_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a60032183e0f0266dc17b140e47dd8fc1 inherit pub_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a60032183e0f0266dc17b140e47dd8fc1"></a>
-typedef <a class="el" href="a00030.html">buffer_node</a>< T, A > </td><td class="memItemRight" valign="bottom"><b>my_class</b></td></tr>
-<tr class="separator:a60032183e0f0266dc17b140e47dd8fc1 inherit pub_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a66143b157bc766e35601b0c28362f99e inherit pub_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a66143b157bc766e35601b0c28362f99e"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> ><br class="typebreak"/>
-::predecessor_list_type </td><td class="memItemRight" valign="bottom"><b>predecessor_list_type</b></td></tr>
-<tr class="separator:a66143b157bc766e35601b0c28362f99e inherit pub_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a39ebd2459b9cb2497e323141685c926f inherit pub_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a39ebd2459b9cb2497e323141685c926f"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> ><br class="typebreak"/>
-::successor_list_type </td><td class="memItemRight" valign="bottom"><b>successor_list_type</b></td></tr>
-<tr class="separator:a39ebd2459b9cb2497e323141685c926f inherit pub_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00124"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00124')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td></tr>
-<tr class="memitem:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16eccc851b858604344bb8f1bb9eedc8"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a></td></tr>
-<tr class="memdesc:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br/></td></tr>
-<tr class="separator:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbadf5511bd568d283040cd88bd4e81e"></a>
-typedef <a class="el" href="a00142.html">sender</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a></td></tr>
-<tr class="memdesc:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br/></td></tr>
-<tr class="separator:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00d44512fd61d416e6f615e88063d038 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00d44512fd61d416e6f615e88063d038"></a>
+<tr class="memitem:a9a8756c2c1d9425bdf7490943ae0b189"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a8756c2c1d9425bdf7490943ae0b189"></a>
 typedef <br class="typebreak"/>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> > </td><td class="memItemRight" valign="bottom"><b>built_predecessors_type</b></td></tr>
-<tr class="separator:a00d44512fd61d416e6f615e88063d038 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2cc119d6dff16073fc5f0d4855a9e4b7 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2cc119d6dff16073fc5f0d4855a9e4b7"></a>
-typedef <br class="typebreak"/>
-built_predecessors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>predecessor_list_type</b></td></tr>
-<tr class="separator:a2cc119d6dff16073fc5f0d4855a9e4b7 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00142"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00142')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td></tr>
-<tr class="memitem:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add86fddf72758d8e5b05b07650c6eeed"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a></td></tr>
-<tr class="memdesc:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">The output type of this sender. <br/></td></tr>
-<tr class="separator:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7779627063a29d4d2a1fc905a5cae8db"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a></td></tr>
-<tr class="memdesc:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <br/></td></tr>
-<tr class="separator:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8aba8b2c5950f113a88f43a97c2207f5"></a>
-typedef <br class="typebreak"/>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a></td></tr>
-<tr class="memdesc:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">interface to record edges for traversal & deletion <br/></td></tr>
-<tr class="separator:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae6c01f7a39a61f6a25f1129e53047b2b inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6c01f7a39a61f6a25f1129e53047b2b"></a>
-typedef <br class="typebreak"/>
-built_successors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>successor_list_type</b></td></tr>
-<tr class="separator:ae6c01f7a39a61f6a25f1129e53047b2b inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:ab295c7b50ff804f7276609a25016e7ca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab295c7b50ff804f7276609a25016e7ca"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00109.html#ab295c7b50ff804f7276609a25016e7ca">priority_queue_node</a> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="memdesc:ab295c7b50ff804f7276609a25016e7ca"><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br/></td></tr>
-<tr class="separator:ab295c7b50ff804f7276609a25016e7ca"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa163d8a81b4a795cb37f207b02191a39"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa163d8a81b4a795cb37f207b02191a39"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00109.html#aa163d8a81b4a795cb37f207b02191a39">priority_queue_node</a> (const <a class="el" href="a00109.html">priority_queue_node</a> &src)</td></tr>
-<tr class="memdesc:aa163d8a81b4a795cb37f207b02191a39"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br/></td></tr>
-<tr class="separator:aa163d8a81b4a795cb37f207b02191a39"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a59b60104b514ae3b108016adcc653dc3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59b60104b514ae3b108016adcc653dc3"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:a59b60104b514ae3b108016adcc653dc3"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00030"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00030')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td></tr>
-<tr class="memitem:a152f7bb9ab1f033ec56caa451327634c inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a152f7bb9ab1f033ec56caa451327634c"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a152f7bb9ab1f033ec56caa451327634c">buffer_node</a> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="memdesc:a152f7bb9ab1f033ec56caa451327634c inherit pub_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br/></td></tr>
-<tr class="separator:a152f7bb9ab1f033ec56caa451327634c inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a739635c43d1150f2c8dd3f455d698d36 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a739635c43d1150f2c8dd3f455d698d36"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a739635c43d1150f2c8dd3f455d698d36">buffer_node</a> (const <a class="el" href="a00030.html">buffer_node</a> &src)</td></tr>
-<tr class="memdesc:a739635c43d1150f2c8dd3f455d698d36 inherit pub_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br/></td></tr>
-<tr class="separator:a739635c43d1150f2c8dd3f455d698d36 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5e87f7e8fd8698f62f2cad8b52b6e565 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a5e87f7e8fd8698f62f2cad8b52b6e565">register_successor</a> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &r)</td></tr>
-<tr class="memdesc:a5e87f7e8fd8698f62f2cad8b52b6e565 inherit pub_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Adds a new successor.  <a href="#a5e87f7e8fd8698f62f2cad8b52b6e565">More...</a><br/></td></tr>
-<tr class="separator:a5e87f7e8fd8698f62f2cad8b52b6e565 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1db0288f46391e3a0a003c181ae87c38 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1db0288f46391e3a0a003c181ae87c38"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_successor</b> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &r)</td></tr>
-<tr class="separator:a1db0288f46391e3a0a003c181ae87c38 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acce1c8dbcf21cfb56d1583cb716398f4 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acce1c8dbcf21cfb56d1583cb716398f4"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_delete_built_successor</b> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &r)</td></tr>
-<tr class="separator:acce1c8dbcf21cfb56d1583cb716398f4 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4c20eb93a5601b442a589a20bca403a4 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c20eb93a5601b442a589a20bca403a4"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_predecessor</b> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &p)</td></tr>
-<tr class="separator:a4c20eb93a5601b442a589a20bca403a4 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae19e0420a628d31cbd685c4c9e513f04 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae19e0420a628d31cbd685c4c9e513f04"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_delete_built_predecessor</b> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &p)</td></tr>
-<tr class="separator:ae19e0420a628d31cbd685c4c9e513f04 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a784b06e7c4091a3ef4f9a6b0ffe35bdb inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a784b06e7c4091a3ef4f9a6b0ffe35bdb"></a>
-size_t </td><td class="memItemRight" valign="bottom"><b>predecessor_count</b> ()</td></tr>
-<tr class="separator:a784b06e7c4091a3ef4f9a6b0ffe35bdb inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a95a3b3ce6658e5c3298e2e361cde9a78 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a95a3b3ce6658e5c3298e2e361cde9a78"></a>
-size_t </td><td class="memItemRight" valign="bottom"><b>successor_count</b> ()</td></tr>
-<tr class="separator:a95a3b3ce6658e5c3298e2e361cde9a78 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af20f7dba5c291f03bfabcabe250cbd23 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af20f7dba5c291f03bfabcabe250cbd23"></a>
-void </td><td class="memItemRight" valign="bottom"><b>copy_predecessors</b> (predecessor_list_type &v)</td></tr>
-<tr class="separator:af20f7dba5c291f03bfabcabe250cbd23 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7ec31111eb839e28e2cfeb08192bbfa5 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7ec31111eb839e28e2cfeb08192bbfa5"></a>
-void </td><td class="memItemRight" valign="bottom"><b>copy_successors</b> (successor_list_type &v)</td></tr>
-<tr class="separator:a7ec31111eb839e28e2cfeb08192bbfa5 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3c31300c060bffbbad7798219e702aba inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a3c31300c060bffbbad7798219e702aba">remove_successor</a> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &r)</td></tr>
-<tr class="memdesc:a3c31300c060bffbbad7798219e702aba inherit pub_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Removes a successor.  <a href="#a3c31300c060bffbbad7798219e702aba">More...</a><br/></td></tr>
-<tr class="separator:a3c31300c060bffbbad7798219e702aba inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a175cb77dfbdd0e322097a833a2271c1e inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a175cb77dfbdd0e322097a833a2271c1e">try_get</a> (T &v)</td></tr>
-<tr class="memdesc:a175cb77dfbdd0e322097a833a2271c1e inherit pub_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Request an item from the <a class="el" href="a00030.html" title="Forwards messages in arbitrary order. ">buffer_node</a>.  <a href="#a175cb77dfbdd0e322097a833a2271c1e">More...</a><br/></td></tr>
-<tr class="separator:a175cb77dfbdd0e322097a833a2271c1e inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3b12cdebf8cef15b90e3c9cd9e51019f inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a3b12cdebf8cef15b90e3c9cd9e51019f">try_reserve</a> (T &v)</td></tr>
-<tr class="memdesc:a3b12cdebf8cef15b90e3c9cd9e51019f inherit pub_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Reserves an item.  <a href="#a3b12cdebf8cef15b90e3c9cd9e51019f">More...</a><br/></td></tr>
-<tr class="separator:a3b12cdebf8cef15b90e3c9cd9e51019f inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aaa3745fd4705345df16fb33954d93e30 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#aaa3745fd4705345df16fb33954d93e30">try_release</a> ()</td></tr>
-<tr class="memdesc:aaa3745fd4705345df16fb33954d93e30 inherit pub_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Release a reserved item.  <a href="#aaa3745fd4705345df16fb33954d93e30">More...</a><br/></td></tr>
-<tr class="separator:aaa3745fd4705345df16fb33954d93e30 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a335072bc547c5e9b40f58dfeab525953 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a335072bc547c5e9b40f58dfeab525953">try_consume</a> ()</td></tr>
-<tr class="memdesc:a335072bc547c5e9b40f58dfeab525953 inherit pub_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Consumes a reserved item.  <a href="#a335072bc547c5e9b40f58dfeab525953">More...</a><br/></td></tr>
-<tr class="separator:a335072bc547c5e9b40f58dfeab525953 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6fcdf027115b519b3b868a7430c39639 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6fcdf027115b519b3b868a7430c39639"></a>
-void </td><td class="memItemRight" valign="bottom"><b>extract</b> ()</td></tr>
-<tr class="separator:a6fcdf027115b519b3b868a7430c39639 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00072')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4badd313105e30f539882276353dcb8e"></a>
- </td><td class="memItemRight" valign="bottom"><b>graph_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00124"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00124')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td></tr>
-<tr class="memitem:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a733889a9053478ef2fb2528e2205bf07"></a>
-virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a733889a9053478ef2fb2528e2205bf07">~receiver</a> ()</td></tr>
-<tr class="memdesc:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br/></td></tr>
-<tr class="separator:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee5067bb4f4b71ffa786c1b33cb9aa6a"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#aee5067bb4f4b71ffa786c1b33cb9aa6a">try_put</a> (const T &t)</td></tr>
-<tr class="memdesc:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Put an item to the receiver. <br/></td></tr>
-<tr class="separator:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a16427aa709505de93ffe0d79136e4251 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16427aa709505de93ffe0d79136e4251"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a16427aa709505de93ffe0d79136e4251">register_predecessor</a> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &)</td></tr>
-<tr class="memdesc:a16427aa709505de93ffe0d79136e4251 inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Add a predecessor to the node. <br/></td></tr>
-<tr class="separator:a16427aa709505de93ffe0d79136e4251 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a55adae6228bbdc1539695e1ec20e9762 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a55adae6228bbdc1539695e1ec20e9762"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a55adae6228bbdc1539695e1ec20e9762">remove_predecessor</a> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &)</td></tr>
-<tr class="memdesc:a55adae6228bbdc1539695e1ec20e9762 inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Remove a predecessor from the node. <br/></td></tr>
-<tr class="separator:a55adae6228bbdc1539695e1ec20e9762 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a63273d246d9dd8d259f9cc1eead42eb2 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63273d246d9dd8d259f9cc1eead42eb2"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>copy_predecessors</b> (predecessor_list_type &)=0</td></tr>
-<tr class="separator:a63273d246d9dd8d259f9cc1eead42eb2 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-types"></a>
-Protected Types</h2></td></tr>
-<tr class="memitem:acae546705b61ae7591752a1f601ccb0f"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>op_stat</b> { <b>WAIT</b> =0, 
-<b>SUCCEEDED</b>, 
-<b>FAILED</b>
- }</td></tr>
-<tr class="separator:acae546705b61ae7591752a1f601ccb0f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a17327722546bfb4aa51fb4a637a63039"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a17327722546bfb4aa51fb4a637a63039"></a>
-typedef <a class="el" href="a00030.html">buffer_node</a>< T, A ><br class="typebreak"/>
-::size_type </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-<tr class="separator:a17327722546bfb4aa51fb4a637a63039"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a83e13afae1142541b28bfe21ac71419c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a83e13afae1142541b28bfe21ac71419c"></a>
-typedef <a class="el" href="a00030.html">buffer_node</a>< T, A ><br class="typebreak"/>
-::item_type </td><td class="memItemRight" valign="bottom"><b>item_type</b></td></tr>
-<tr class="separator:a83e13afae1142541b28bfe21ac71419c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acd29f816dcbfa0f02541aef1d10dae1d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acd29f816dcbfa0f02541aef1d10dae1d"></a>
-typedef <a class="el" href="a00030.html">buffer_node</a>< T, A ><br class="typebreak"/>
-::<a class="el" href="a00031.html">buffer_operation</a> </td><td class="memItemRight" valign="bottom"><b>prio_operation</b></td></tr>
-<tr class="separator:acd29f816dcbfa0f02541aef1d10dae1d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_types_a00030"><td colspan="2" onclick="javascript:toggleInherit('pro_types_a00030')"><img src="closed.png" alt="-"/> Protected Types inherited from <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td></tr>
-<tr class="memitem:a0e9c45eefd5231c6a7f8e78ab4b3e3c1 inherit pro_types_a00030"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>op_type</b> { <br/>
-  <b>reg_succ</b>, 
-<b>rem_succ</b>, 
-<b>req_item</b>, 
-<b>res_item</b>, 
-<br/>
-  <b>rel_res</b>, 
-<b>con_res</b>, 
-<b>put_item</b>, 
-<b>try_fwd_task</b>, 
-<br/>
-  <b>add_blt_succ</b>, 
-<b>del_blt_succ</b>, 
-<b>add_blt_pred</b>, 
-<b>del_blt_pred</b>, 
-<br/>
-  <b>blt_succ_cnt</b>, 
-<b>blt_pred_cnt</b>, 
-<b>blt_succ_cpy</b>, 
-<b>blt_pred_cpy</b>
-<br/>
- }</td></tr>
-<tr class="separator:a0e9c45eefd5231c6a7f8e78ab4b3e3c1 inherit pro_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a97578c4c0b47aa1e7281d0343f45c6e2 inherit pro_types_a00030"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>op_stat</b> { <b>WAIT</b> =0, 
-<b>SUCCEEDED</b>, 
-<b>FAILED</b>
- }</td></tr>
-<tr class="separator:a97578c4c0b47aa1e7281d0343f45c6e2 inherit pro_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac2ba7ceb6c4c435c5abc9846a91853e2 inherit pro_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac2ba7ceb6c4c435c5abc9846a91853e2"></a>
-typedef size_t </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-<tr class="separator:ac2ba7ceb6c4c435c5abc9846a91853e2 inherit pro_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7f1a187e32fb9a630a142ef37aeda958 inherit pro_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f1a187e32fb9a630a142ef37aeda958"></a>
-typedef <br class="typebreak"/>
-internal::aggregating_functor<br class="typebreak"/>
-< <a class="el" href="a00030.html">my_class</a>, <a class="el" href="a00031.html">buffer_operation</a> > </td><td class="memItemRight" valign="bottom"><b>my_handler</b></td></tr>
-<tr class="separator:a7f1a187e32fb9a630a142ef37aeda958 inherit pro_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5f09abf6db812abcbeb262b7f1b844a5 inherit pro_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f09abf6db812abcbeb262b7f1b844a5"></a>
-typedef <a class="el" href="a00142.html">sender</a>< T ><br class="typebreak"/>
-::<a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a> </td><td class="memItemRight" valign="bottom"><b>built_successors_type</b></td></tr>
-<tr class="separator:a5f09abf6db812abcbeb262b7f1b844a5 inherit pro_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a81e553b64ccf191ddf3768cb1c184c1d inherit pro_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a81e553b64ccf191ddf3768cb1c184c1d"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< T ><br class="typebreak"/>
-::<a class="el" href="a00059.html">built_predecessors_type</a> </td><td class="memItemRight" valign="bottom"><b>built_predecessors_type</b></td></tr>
-<tr class="separator:a81e553b64ccf191ddf3768cb1c184c1d inherit pro_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:a895caba96649f2fa22f10fd0c97b2edf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a895caba96649f2fa22f10fd0c97b2edf"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f))</td></tr>
-<tr class="separator:a895caba96649f2fa22f10fd0c97b2edf"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab478330c41fa262d1b896432f1ac37cc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab478330c41fa262d1b896432f1ac37cc"></a>
-void </td><td class="memItemRight" valign="bottom"><b>handle_operations</b> (<a class="el" href="a00031.html">prio_operation</a> *op_list)</td></tr>
-<tr class="separator:ab478330c41fa262d1b896432f1ac37cc"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4e6d43ca8748046098fd27ca97e58f3d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4e6d43ca8748046098fd27ca97e58f3d"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00109.html#a4e6d43ca8748046098fd27ca97e58f3d">internal_forward_task</a> (<a class="el" href="a00031.html">prio_operation</a> *op)</td></tr>
-<tr class="memdesc:a4e6d43ca8748046098fd27ca97e58f3d"><td class="mdescLeft"> </td><td class="mdescRight">Tries to forward valid items to successors. <br/></td></tr>
-<tr class="separator:a4e6d43ca8748046098fd27ca97e58f3d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1fb636ae3d8e7a6fa6c6a30b6ae1d0b7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1fb636ae3d8e7a6fa6c6a30b6ae1d0b7"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_push</b> (<a class="el" href="a00031.html">prio_operation</a> *op)</td></tr>
-<tr class="separator:a1fb636ae3d8e7a6fa6c6a30b6ae1d0b7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac67d6e65c708a40b3849d6d9e96916fa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac67d6e65c708a40b3849d6d9e96916fa"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_pop</b> (<a class="el" href="a00031.html">prio_operation</a> *op)</td></tr>
-<tr class="separator:ac67d6e65c708a40b3849d6d9e96916fa"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac820e6e5f2a0eed1f9ef72262f78f45d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac820e6e5f2a0eed1f9ef72262f78f45d"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_reserve</b> (<a class="el" href="a00031.html">prio_operation</a> *op)</td></tr>
-<tr class="separator:ac820e6e5f2a0eed1f9ef72262f78f45d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a21cc506b6bc5bbe59dfab4f9e59955fe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a21cc506b6bc5bbe59dfab4f9e59955fe"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_consume</b> (<a class="el" href="a00031.html">prio_operation</a> *op)</td></tr>
-<tr class="separator:a21cc506b6bc5bbe59dfab4f9e59955fe"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:adbcefdb4ae0369abb1d047bb49622176"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbcefdb4ae0369abb1d047bb49622176"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_release</b> (<a class="el" href="a00031.html">prio_operation</a> *op)</td></tr>
-<tr class="separator:adbcefdb4ae0369abb1d047bb49622176"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00030"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00030')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td></tr>
-<tr class="memitem:a5fde962bed26ee41c370e48bce678320 inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5fde962bed26ee41c370e48bce678320"></a>
-task * </td><td class="memItemRight" valign="bottom"><b>grab_forwarding_task</b> (<a class="el" href="a00031.html">buffer_operation</a> &op_data)</td></tr>
-<tr class="separator:a5fde962bed26ee41c370e48bce678320 inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a19dbfc4065f57efd7375fcc1b259dd9c inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a19dbfc4065f57efd7375fcc1b259dd9c"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>enqueue_forwarding_task</b> (<a class="el" href="a00031.html">buffer_operation</a> &op_data)</td></tr>
-<tr class="separator:a19dbfc4065f57efd7375fcc1b259dd9c inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8910a497040a4c6f1a6a1fb7a33a8888 inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8910a497040a4c6f1a6a1fb7a33a8888"></a>
-virtual task * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a8910a497040a4c6f1a6a1fb7a33a8888">forward_task</a> ()</td></tr>
-<tr class="memdesc:a8910a497040a4c6f1a6a1fb7a33a8888 inherit pro_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">This is executed by an enqueued task, the "forwarder". <br/></td></tr>
-<tr class="separator:a8910a497040a4c6f1a6a1fb7a33a8888 inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afa2dd93a1b42e77ccf7e1de0fddf3158 inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa2dd93a1b42e77ccf7e1de0fddf3158"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#afa2dd93a1b42e77ccf7e1de0fddf3158">internal_reg_succ</a> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="memdesc:afa2dd93a1b42e77ccf7e1de0fddf3158 inherit pro_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Register successor. <br/></td></tr>
-<tr class="separator:afa2dd93a1b42e77ccf7e1de0fddf3158 inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a46c7f9cd9130036244d4ea8efd74bf22 inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a46c7f9cd9130036244d4ea8efd74bf22"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a46c7f9cd9130036244d4ea8efd74bf22">internal_rem_succ</a> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="memdesc:a46c7f9cd9130036244d4ea8efd74bf22 inherit pro_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Remove successor. <br/></td></tr>
-<tr class="separator:a46c7f9cd9130036244d4ea8efd74bf22 inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3fd4023955e4ab600dbc0e31740e6321 inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3fd4023955e4ab600dbc0e31740e6321"></a>
-<a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a> & </td><td class="memItemRight" valign="bottom"><b>built_successors</b> ()</td></tr>
-<tr class="separator:a3fd4023955e4ab600dbc0e31740e6321 inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aeb7b729bec462169cb67326bd17b11e4 inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeb7b729bec462169cb67326bd17b11e4"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_succ</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:aeb7b729bec462169cb67326bd17b11e4 inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac382cedb8002e429ce2ccda29ed0d137 inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac382cedb8002e429ce2ccda29ed0d137"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_del_built_succ</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:ac382cedb8002e429ce2ccda29ed0d137 inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1a951a36f8f2ed91f9b7c918486dc915 inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1a951a36f8f2ed91f9b7c918486dc915"></a>
-<a class="el" href="a00059.html">built_predecessors_type</a> & </td><td class="memItemRight" valign="bottom"><b>built_predecessors</b> ()</td></tr>
-<tr class="separator:a1a951a36f8f2ed91f9b7c918486dc915 inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac851d86cc55d14f57b4cc7ef889610be inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac851d86cc55d14f57b4cc7ef889610be"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_pred</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:ac851d86cc55d14f57b4cc7ef889610be inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a32ff0f0106531343a46b53b882763317 inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a32ff0f0106531343a46b53b882763317"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_del_built_pred</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:a32ff0f0106531343a46b53b882763317 inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a632cbb0a8529d8fb559aa33cbd99b613 inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a632cbb0a8529d8fb559aa33cbd99b613"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_succ_cnt</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:a632cbb0a8529d8fb559aa33cbd99b613 inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa162bcd7cf8f7021ad8571d4db505bff inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa162bcd7cf8f7021ad8571d4db505bff"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_pred_cnt</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:aa162bcd7cf8f7021ad8571d4db505bff inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae2fad967e9fff72d5e7669f94744bc2d inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae2fad967e9fff72d5e7669f94744bc2d"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_copy_succs</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:ae2fad967e9fff72d5e7669f94744bc2d inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5c60751dba6a99adef58871ee520ae6e inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5c60751dba6a99adef58871ee520ae6e"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_copy_preds</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:a5c60751dba6a99adef58871ee520ae6e inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa4517c0a58649ea5eb140ab4b786e1ec inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4517c0a58649ea5eb140ab4b786e1ec"></a>
-task * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#aa4517c0a58649ea5eb140ab4b786e1ec">try_put_task</a> (const T &t)</td></tr>
-<tr class="memdesc:aa4517c0a58649ea5eb140ab4b786e1ec inherit pro_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">receive an item, return a task *if possible <br/></td></tr>
-<tr class="separator:aa4517c0a58649ea5eb140ab4b786e1ec inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ace801f92ca3f0525835d67afba0eef6c inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ace801f92ca3f0525835d67afba0eef6c"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_receiver</b> (__TBB_PFG_RESET_ARG(reset_flags))</td></tr>
-<tr class="separator:ace801f92ca3f0525835d67afba0eef6c inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acc1b4323f79b01468a106ca313cfede7 inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acc1b4323f79b01468a106ca313cfede7"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f))</td></tr>
-<tr class="separator:acc1b4323f79b01468a106ca313cfede7 inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00072')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac25a4633873c052047b1dd568824d055"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0</td></tr>
-<tr class="separator:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00124"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00124')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td></tr>
-<tr class="memitem:ac902b1e09eea9748223eb50dc38d3575 inherit pro_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac902b1e09eea9748223eb50dc38d3575"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>reset_receiver</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0</td></tr>
-<tr class="separator:ac902b1e09eea9748223eb50dc38d3575 inherit pro_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae91eab3e06d4139ac38f143c74fe9eab inherit pro_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae91eab3e06d4139ac38f143c74fe9eab"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><b>is_continue_receiver</b> ()</td></tr>
-<tr class="separator:ae91eab3e06d4139ac38f143c74fe9eab inherit pro_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pro_attribs_a00030"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00030')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td></tr>
-<tr class="memitem:ade2fe89be00e023aafb1d3c380762048 inherit pro_attribs_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ade2fe89be00e023aafb1d3c380762048"></a>
-<a class="el" href="a00126.html">internal::round_robin_cache</a>< T, <br class="typebreak"/>
-<a class="el" href="a00102.html">null_rw_mutex</a> > </td><td class="memItemRight" valign="bottom"><b>my_successors</b></td></tr>
-<tr class="separator:ade2fe89be00e023aafb1d3c380762048 inherit pro_attribs_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4eda90c0f6300644705f142c6ada1a4d inherit pro_attribs_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4eda90c0f6300644705f142c6ada1a4d"></a>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> > </td><td class="memItemRight" valign="bottom"><b>my_built_predecessors</b></td></tr>
-<tr class="separator:a4eda90c0f6300644705f142c6ada1a4d inherit pro_attribs_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a441fb73f0e15aed49945fb7ec9925e9f inherit pro_attribs_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a441fb73f0e15aed49945fb7ec9925e9f"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>forwarder_busy</b></td></tr>
-<tr class="separator:a441fb73f0e15aed49945fb7ec9925e9f inherit pro_attribs_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:adc948866a1eb4c7a95b0edc08872d487 inherit pro_attribs_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adc948866a1eb4c7a95b0edc08872d487"></a>
-internal::aggregator<br class="typebreak"/>
-< my_handler, <a class="el" href="a00031.html">buffer_operation</a> > </td><td class="memItemRight" valign="bottom"><b>my_aggregator</b></td></tr>
-<tr class="separator:adc948866a1eb4c7a95b0edc08872d487 inherit pro_attribs_a00030"><td class="memSeparator" colspan="2"> </td></tr>
+<a class="el" href="a00027.html">cache_aligned_allocator</a>< U > </td><td class="memItemRight" valign="bottom"><b>other</b></td></tr>
+<tr class="separator:a9a8756c2c1d9425bdf7490943ae0b189"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>><br/>
-class tbb::flow::interface7::priority_queue_node< T, Compare, A ></h3>
-
-<p>Forwards messages in priority order. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>cache_aligned_allocator.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00109.png b/doc/html/a00109.png
deleted file mode 100644
index 6a491b9..0000000
Binary files a/doc/html/a00109.png and /dev/null differ
diff --git a/doc/html/a00110.html b/doc/html/a00110.html
index f8d45a2..aa5195d 100644
--- a/doc/html/a00110.html
+++ b/doc/html/a00110.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::queue_node< T, A > Class Template Reference</title>
+<title>tbb::zero_allocator< T, Allocator >::rebind< U > Struct Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,398 +33,32 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00110.html">queue_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00169.html">zero_allocator</a></li><li class="navelem"><a class="el" href="a00110.html">rebind</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-types">Public Types</a> |
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-types">Protected Types</a> |
-<a href="#pro-methods">Protected Member Functions</a> |
-<a href="a00346.html">List of all members</a>  </div>
+<a href="a00310.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::queue_node< T, A > Class Template Reference</div>  </div>
+<div class="title">tbb::zero_allocator< T, Allocator >::rebind< U > Struct Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Forwards messages in FIFO order.  
- <a href="a00110.html#details">More...</a></p>
-
-<p><code>#include <flow_graph.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::queue_node< T, A >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00110.png" usemap="#tbb::flow::interface7::queue_node< T, A >_map" alt=""/>
-  <map id="tbb::flow::interface7::queue_node< T, A >_map" name="tbb::flow::interface7::queue_node< T, A >_map">
-<area href="a00030.html" title="Forwards messages in arbitrary order. " alt="tbb::flow::interface7::buffer_node< T, A >" shape="rect" coords="420,112,690,136"/>
-<area href="a00072.html" title="The base of all graph nodes. " alt="tbb::flow::interface7::graph_node" shape="rect" coords="0,56,270,80"/>
-<area href="a00124.html" title="Pure virtual template class that defines a receiver of messages of type T. " alt="tbb::flow::interface7::receiver< T >" shape="rect" coords="560,56,830,80"/>
-<area href="a00142.html" title="Pure virtual template class that defines a sender of messages of type T. " alt="tbb::flow::interface7::sender< T >" shape="rect" coords="840,56,1110,80"/>
-<area href="a00143.html" title="Forwards messages in sequence order. " alt="tbb::flow::interface7::sequencer_node< T, A >" shape="rect" coords="420,224,690,248"/>
-</map>
- </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:a6c97cb00f09b2920b470f7f05bd164d1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6c97cb00f09b2920b470f7f05bd164d1"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
-<tr class="separator:a6c97cb00f09b2920b470f7f05bd164d1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a17ed7b6084d51f1d50164ed9b2eff680"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a17ed7b6084d51f1d50164ed9b2eff680"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:a17ed7b6084d51f1d50164ed9b2eff680"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a768cdbf6ab5f38ec87e402ff2897ca38"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a768cdbf6ab5f38ec87e402ff2897ca38"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> > </td><td class="memItemRight" valign="bottom"><b>predecessor_type</b></td></tr>
-<tr class="separator:a768cdbf6ab5f38ec87e402ff2897ca38"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad5fc2cf414bebdf02246e356b21cf39a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad5fc2cf414bebdf02246e356b21cf39a"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> > </td><td class="memItemRight" valign="bottom"><b>successor_type</b></td></tr>
-<tr class="separator:ad5fc2cf414bebdf02246e356b21cf39a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00030"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00030')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td></tr>
-<tr class="memitem:a57a0aab7103d1d0cbf27560c9acf6c8f inherit pub_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a57a0aab7103d1d0cbf27560c9acf6c8f"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
-<tr class="separator:a57a0aab7103d1d0cbf27560c9acf6c8f inherit pub_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abedb8c98e62146c3473344b7148173b8 inherit pub_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abedb8c98e62146c3473344b7148173b8"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:abedb8c98e62146c3473344b7148173b8 inherit pub_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3c34a2182dcbbded45da979b0f405817 inherit pub_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c34a2182dcbbded45da979b0f405817"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> > </td><td class="memItemRight" valign="bottom"><b>predecessor_type</b></td></tr>
-<tr class="separator:a3c34a2182dcbbded45da979b0f405817 inherit pub_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5e505e0c4a904e2c1ded8c7c8f657c3b inherit pub_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e505e0c4a904e2c1ded8c7c8f657c3b"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> > </td><td class="memItemRight" valign="bottom"><b>successor_type</b></td></tr>
-<tr class="separator:a5e505e0c4a904e2c1ded8c7c8f657c3b inherit pub_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a60032183e0f0266dc17b140e47dd8fc1 inherit pub_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a60032183e0f0266dc17b140e47dd8fc1"></a>
-typedef <a class="el" href="a00030.html">buffer_node</a>< T, A > </td><td class="memItemRight" valign="bottom"><b>my_class</b></td></tr>
-<tr class="separator:a60032183e0f0266dc17b140e47dd8fc1 inherit pub_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a66143b157bc766e35601b0c28362f99e inherit pub_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a66143b157bc766e35601b0c28362f99e"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> ><br class="typebreak"/>
-::predecessor_list_type </td><td class="memItemRight" valign="bottom"><b>predecessor_list_type</b></td></tr>
-<tr class="separator:a66143b157bc766e35601b0c28362f99e inherit pub_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a39ebd2459b9cb2497e323141685c926f inherit pub_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a39ebd2459b9cb2497e323141685c926f"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> ><br class="typebreak"/>
-::successor_list_type </td><td class="memItemRight" valign="bottom"><b>successor_list_type</b></td></tr>
-<tr class="separator:a39ebd2459b9cb2497e323141685c926f inherit pub_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00124"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00124')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td></tr>
-<tr class="memitem:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16eccc851b858604344bb8f1bb9eedc8"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a></td></tr>
-<tr class="memdesc:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br/></td></tr>
-<tr class="separator:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbadf5511bd568d283040cd88bd4e81e"></a>
-typedef <a class="el" href="a00142.html">sender</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a></td></tr>
-<tr class="memdesc:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br/></td></tr>
-<tr class="separator:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00d44512fd61d416e6f615e88063d038 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00d44512fd61d416e6f615e88063d038"></a>
-typedef <br class="typebreak"/>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> > </td><td class="memItemRight" valign="bottom"><b>built_predecessors_type</b></td></tr>
-<tr class="separator:a00d44512fd61d416e6f615e88063d038 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2cc119d6dff16073fc5f0d4855a9e4b7 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2cc119d6dff16073fc5f0d4855a9e4b7"></a>
-typedef <br class="typebreak"/>
-built_predecessors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>predecessor_list_type</b></td></tr>
-<tr class="separator:a2cc119d6dff16073fc5f0d4855a9e4b7 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00142"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00142')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td></tr>
-<tr class="memitem:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add86fddf72758d8e5b05b07650c6eeed"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a></td></tr>
-<tr class="memdesc:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">The output type of this sender. <br/></td></tr>
-<tr class="separator:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7779627063a29d4d2a1fc905a5cae8db"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a></td></tr>
-<tr class="memdesc:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <br/></td></tr>
-<tr class="separator:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8aba8b2c5950f113a88f43a97c2207f5"></a>
-typedef <br class="typebreak"/>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a></td></tr>
-<tr class="memdesc:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">interface to record edges for traversal & deletion <br/></td></tr>
-<tr class="separator:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae6c01f7a39a61f6a25f1129e53047b2b inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6c01f7a39a61f6a25f1129e53047b2b"></a>
-typedef <br class="typebreak"/>
-built_successors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>successor_list_type</b></td></tr>
-<tr class="separator:ae6c01f7a39a61f6a25f1129e53047b2b inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a503d3fe4f98302549e36f74633de5716"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a503d3fe4f98302549e36f74633de5716"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00110.html#a503d3fe4f98302549e36f74633de5716">queue_node</a> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="memdesc:a503d3fe4f98302549e36f74633de5716"><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br/></td></tr>
-<tr class="separator:a503d3fe4f98302549e36f74633de5716"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa790bb6d3c8bef58d59235dfba1a1092"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa790bb6d3c8bef58d59235dfba1a1092"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00110.html#aa790bb6d3c8bef58d59235dfba1a1092">queue_node</a> (const <a class="el" href="a00110.html">queue_node</a> &src)</td></tr>
-<tr class="memdesc:aa790bb6d3c8bef58d59235dfba1a1092"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br/></td></tr>
-<tr class="separator:aa790bb6d3c8bef58d59235dfba1a1092"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af27bdd716ffead0a648bb9e7e81790ae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af27bdd716ffead0a648bb9e7e81790ae"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:af27bdd716ffead0a648bb9e7e81790ae"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00030"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00030')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td></tr>
-<tr class="memitem:a152f7bb9ab1f033ec56caa451327634c inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a152f7bb9ab1f033ec56caa451327634c"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a152f7bb9ab1f033ec56caa451327634c">buffer_node</a> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="memdesc:a152f7bb9ab1f033ec56caa451327634c inherit pub_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br/></td></tr>
-<tr class="separator:a152f7bb9ab1f033ec56caa451327634c inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a739635c43d1150f2c8dd3f455d698d36 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a739635c43d1150f2c8dd3f455d698d36"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a739635c43d1150f2c8dd3f455d698d36">buffer_node</a> (const <a class="el" href="a00030.html">buffer_node</a> &src)</td></tr>
-<tr class="memdesc:a739635c43d1150f2c8dd3f455d698d36 inherit pub_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br/></td></tr>
-<tr class="separator:a739635c43d1150f2c8dd3f455d698d36 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5e87f7e8fd8698f62f2cad8b52b6e565 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a5e87f7e8fd8698f62f2cad8b52b6e565">register_successor</a> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &r)</td></tr>
-<tr class="memdesc:a5e87f7e8fd8698f62f2cad8b52b6e565 inherit pub_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Adds a new successor.  <a href="#a5e87f7e8fd8698f62f2cad8b52b6e565">More...</a><br/></td></tr>
-<tr class="separator:a5e87f7e8fd8698f62f2cad8b52b6e565 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1db0288f46391e3a0a003c181ae87c38 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1db0288f46391e3a0a003c181ae87c38"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_successor</b> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &r)</td></tr>
-<tr class="separator:a1db0288f46391e3a0a003c181ae87c38 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acce1c8dbcf21cfb56d1583cb716398f4 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acce1c8dbcf21cfb56d1583cb716398f4"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_delete_built_successor</b> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &r)</td></tr>
-<tr class="separator:acce1c8dbcf21cfb56d1583cb716398f4 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4c20eb93a5601b442a589a20bca403a4 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c20eb93a5601b442a589a20bca403a4"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_predecessor</b> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &p)</td></tr>
-<tr class="separator:a4c20eb93a5601b442a589a20bca403a4 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae19e0420a628d31cbd685c4c9e513f04 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae19e0420a628d31cbd685c4c9e513f04"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_delete_built_predecessor</b> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &p)</td></tr>
-<tr class="separator:ae19e0420a628d31cbd685c4c9e513f04 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a784b06e7c4091a3ef4f9a6b0ffe35bdb inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a784b06e7c4091a3ef4f9a6b0ffe35bdb"></a>
-size_t </td><td class="memItemRight" valign="bottom"><b>predecessor_count</b> ()</td></tr>
-<tr class="separator:a784b06e7c4091a3ef4f9a6b0ffe35bdb inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a95a3b3ce6658e5c3298e2e361cde9a78 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a95a3b3ce6658e5c3298e2e361cde9a78"></a>
-size_t </td><td class="memItemRight" valign="bottom"><b>successor_count</b> ()</td></tr>
-<tr class="separator:a95a3b3ce6658e5c3298e2e361cde9a78 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af20f7dba5c291f03bfabcabe250cbd23 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af20f7dba5c291f03bfabcabe250cbd23"></a>
-void </td><td class="memItemRight" valign="bottom"><b>copy_predecessors</b> (predecessor_list_type &v)</td></tr>
-<tr class="separator:af20f7dba5c291f03bfabcabe250cbd23 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7ec31111eb839e28e2cfeb08192bbfa5 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7ec31111eb839e28e2cfeb08192bbfa5"></a>
-void </td><td class="memItemRight" valign="bottom"><b>copy_successors</b> (successor_list_type &v)</td></tr>
-<tr class="separator:a7ec31111eb839e28e2cfeb08192bbfa5 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3c31300c060bffbbad7798219e702aba inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a3c31300c060bffbbad7798219e702aba">remove_successor</a> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &r)</td></tr>
-<tr class="memdesc:a3c31300c060bffbbad7798219e702aba inherit pub_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Removes a successor.  <a href="#a3c31300c060bffbbad7798219e702aba">More...</a><br/></td></tr>
-<tr class="separator:a3c31300c060bffbbad7798219e702aba inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a175cb77dfbdd0e322097a833a2271c1e inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a175cb77dfbdd0e322097a833a2271c1e">try_get</a> (T &v)</td></tr>
-<tr class="memdesc:a175cb77dfbdd0e322097a833a2271c1e inherit pub_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Request an item from the <a class="el" href="a00030.html" title="Forwards messages in arbitrary order. ">buffer_node</a>.  <a href="#a175cb77dfbdd0e322097a833a2271c1e">More...</a><br/></td></tr>
-<tr class="separator:a175cb77dfbdd0e322097a833a2271c1e inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3b12cdebf8cef15b90e3c9cd9e51019f inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a3b12cdebf8cef15b90e3c9cd9e51019f">try_reserve</a> (T &v)</td></tr>
-<tr class="memdesc:a3b12cdebf8cef15b90e3c9cd9e51019f inherit pub_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Reserves an item.  <a href="#a3b12cdebf8cef15b90e3c9cd9e51019f">More...</a><br/></td></tr>
-<tr class="separator:a3b12cdebf8cef15b90e3c9cd9e51019f inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aaa3745fd4705345df16fb33954d93e30 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#aaa3745fd4705345df16fb33954d93e30">try_release</a> ()</td></tr>
-<tr class="memdesc:aaa3745fd4705345df16fb33954d93e30 inherit pub_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Release a reserved item.  <a href="#aaa3745fd4705345df16fb33954d93e30">More...</a><br/></td></tr>
-<tr class="separator:aaa3745fd4705345df16fb33954d93e30 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a335072bc547c5e9b40f58dfeab525953 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a335072bc547c5e9b40f58dfeab525953">try_consume</a> ()</td></tr>
-<tr class="memdesc:a335072bc547c5e9b40f58dfeab525953 inherit pub_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Consumes a reserved item.  <a href="#a335072bc547c5e9b40f58dfeab525953">More...</a><br/></td></tr>
-<tr class="separator:a335072bc547c5e9b40f58dfeab525953 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6fcdf027115b519b3b868a7430c39639 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6fcdf027115b519b3b868a7430c39639"></a>
-void </td><td class="memItemRight" valign="bottom"><b>extract</b> ()</td></tr>
-<tr class="separator:a6fcdf027115b519b3b868a7430c39639 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00072')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4badd313105e30f539882276353dcb8e"></a>
- </td><td class="memItemRight" valign="bottom"><b>graph_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00124"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00124')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td></tr>
-<tr class="memitem:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a733889a9053478ef2fb2528e2205bf07"></a>
-virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a733889a9053478ef2fb2528e2205bf07">~receiver</a> ()</td></tr>
-<tr class="memdesc:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br/></td></tr>
-<tr class="separator:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee5067bb4f4b71ffa786c1b33cb9aa6a"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#aee5067bb4f4b71ffa786c1b33cb9aa6a">try_put</a> (const T &t)</td></tr>
-<tr class="memdesc:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Put an item to the receiver. <br/></td></tr>
-<tr class="separator:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a16427aa709505de93ffe0d79136e4251 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16427aa709505de93ffe0d79136e4251"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a16427aa709505de93ffe0d79136e4251">register_predecessor</a> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &)</td></tr>
-<tr class="memdesc:a16427aa709505de93ffe0d79136e4251 inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Add a predecessor to the node. <br/></td></tr>
-<tr class="separator:a16427aa709505de93ffe0d79136e4251 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a55adae6228bbdc1539695e1ec20e9762 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a55adae6228bbdc1539695e1ec20e9762"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a55adae6228bbdc1539695e1ec20e9762">remove_predecessor</a> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &)</td></tr>
-<tr class="memdesc:a55adae6228bbdc1539695e1ec20e9762 inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Remove a predecessor from the node. <br/></td></tr>
-<tr class="separator:a55adae6228bbdc1539695e1ec20e9762 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a63273d246d9dd8d259f9cc1eead42eb2 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63273d246d9dd8d259f9cc1eead42eb2"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>copy_predecessors</b> (predecessor_list_type &)=0</td></tr>
-<tr class="separator:a63273d246d9dd8d259f9cc1eead42eb2 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-types"></a>
-Protected Types</h2></td></tr>
-<tr class="memitem:a7e8acd469a6e7d7f843158104c3a829d"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>op_stat</b> { <b>WAIT</b> =0, 
-<b>SUCCEEDED</b>, 
-<b>FAILED</b>
- }</td></tr>
-<tr class="separator:a7e8acd469a6e7d7f843158104c3a829d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a37343fca6678a3ea7008f3946362567d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a37343fca6678a3ea7008f3946362567d"></a>
-typedef <a class="el" href="a00030.html">buffer_node</a>< T, A > </td><td class="memItemRight" valign="bottom"><b>base_type</b></td></tr>
-<tr class="separator:a37343fca6678a3ea7008f3946362567d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a35cc3a32918f9c5286199a251a082df6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a35cc3a32918f9c5286199a251a082df6"></a>
-typedef base_type::size_type </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-<tr class="separator:a35cc3a32918f9c5286199a251a082df6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7c9f9bba89dc190c85aef3ed0fc6856b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7c9f9bba89dc190c85aef3ed0fc6856b"></a>
-typedef <a class="el" href="a00031.html">base_type::buffer_operation</a> </td><td class="memItemRight" valign="bottom"><b>queue_operation</b></td></tr>
-<tr class="separator:a7c9f9bba89dc190c85aef3ed0fc6856b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_types_a00030"><td colspan="2" onclick="javascript:toggleInherit('pro_types_a00030')"><img src="closed.png" alt="-"/> Protected Types inherited from <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td></tr>
-<tr class="memitem:a0e9c45eefd5231c6a7f8e78ab4b3e3c1 inherit pro_types_a00030"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>op_type</b> { <br/>
-  <b>reg_succ</b>, 
-<b>rem_succ</b>, 
-<b>req_item</b>, 
-<b>res_item</b>, 
-<br/>
-  <b>rel_res</b>, 
-<b>con_res</b>, 
-<b>put_item</b>, 
-<b>try_fwd_task</b>, 
-<br/>
-  <b>add_blt_succ</b>, 
-<b>del_blt_succ</b>, 
-<b>add_blt_pred</b>, 
-<b>del_blt_pred</b>, 
-<br/>
-  <b>blt_succ_cnt</b>, 
-<b>blt_pred_cnt</b>, 
-<b>blt_succ_cpy</b>, 
-<b>blt_pred_cpy</b>
-<br/>
- }</td></tr>
-<tr class="separator:a0e9c45eefd5231c6a7f8e78ab4b3e3c1 inherit pro_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a97578c4c0b47aa1e7281d0343f45c6e2 inherit pro_types_a00030"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>op_stat</b> { <b>WAIT</b> =0, 
-<b>SUCCEEDED</b>, 
-<b>FAILED</b>
- }</td></tr>
-<tr class="separator:a97578c4c0b47aa1e7281d0343f45c6e2 inherit pro_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac2ba7ceb6c4c435c5abc9846a91853e2 inherit pro_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac2ba7ceb6c4c435c5abc9846a91853e2"></a>
-typedef size_t </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-<tr class="separator:ac2ba7ceb6c4c435c5abc9846a91853e2 inherit pro_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7f1a187e32fb9a630a142ef37aeda958 inherit pro_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f1a187e32fb9a630a142ef37aeda958"></a>
-typedef <br class="typebreak"/>
-internal::aggregating_functor<br class="typebreak"/>
-< <a class="el" href="a00030.html">my_class</a>, <a class="el" href="a00031.html">buffer_operation</a> > </td><td class="memItemRight" valign="bottom"><b>my_handler</b></td></tr>
-<tr class="separator:a7f1a187e32fb9a630a142ef37aeda958 inherit pro_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5f09abf6db812abcbeb262b7f1b844a5 inherit pro_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f09abf6db812abcbeb262b7f1b844a5"></a>
-typedef <a class="el" href="a00142.html">sender</a>< T ><br class="typebreak"/>
-::<a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a> </td><td class="memItemRight" valign="bottom"><b>built_successors_type</b></td></tr>
-<tr class="separator:a5f09abf6db812abcbeb262b7f1b844a5 inherit pro_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a81e553b64ccf191ddf3768cb1c184c1d inherit pro_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a81e553b64ccf191ddf3768cb1c184c1d"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< T ><br class="typebreak"/>
-::<a class="el" href="a00059.html">built_predecessors_type</a> </td><td class="memItemRight" valign="bottom"><b>built_predecessors_type</b></td></tr>
-<tr class="separator:a81e553b64ccf191ddf3768cb1c184c1d inherit pro_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:a1ab7e37f537acb75175844bd34132b99"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1ab7e37f537acb75175844bd34132b99"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00110.html#a1ab7e37f537acb75175844bd34132b99">internal_forward_task</a> (<a class="el" href="a00031.html">queue_operation</a> *op)</td></tr>
-<tr class="memdesc:a1ab7e37f537acb75175844bd34132b99"><td class="mdescLeft"> </td><td class="mdescRight">Tries to forward valid items to successors. <br/></td></tr>
-<tr class="separator:a1ab7e37f537acb75175844bd34132b99"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad5d225b5305d2d8e1778d2ac65e473a8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad5d225b5305d2d8e1778d2ac65e473a8"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_pop</b> (<a class="el" href="a00031.html">queue_operation</a> *op)</td></tr>
-<tr class="separator:ad5d225b5305d2d8e1778d2ac65e473a8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae85f9ee123b22bb273116402372d2619"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae85f9ee123b22bb273116402372d2619"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_reserve</b> (<a class="el" href="a00031.html">queue_operation</a> *op)</td></tr>
-<tr class="separator:ae85f9ee123b22bb273116402372d2619"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acc6c42585d3deef75dd3922b6fe9cc21"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acc6c42585d3deef75dd3922b6fe9cc21"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_consume</b> (<a class="el" href="a00031.html">queue_operation</a> *op)</td></tr>
-<tr class="separator:acc6c42585d3deef75dd3922b6fe9cc21"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af3890cabe95773554ff067f287345faa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af3890cabe95773554ff067f287345faa"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f))</td></tr>
-<tr class="separator:af3890cabe95773554ff067f287345faa"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00030"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00030')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td></tr>
-<tr class="memitem:a2d09326016a31e17acd57f8e6ce58054 inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2d09326016a31e17acd57f8e6ce58054"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>handle_operations</b> (<a class="el" href="a00031.html">buffer_operation</a> *op_list)</td></tr>
-<tr class="separator:a2d09326016a31e17acd57f8e6ce58054 inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5fde962bed26ee41c370e48bce678320 inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5fde962bed26ee41c370e48bce678320"></a>
-task * </td><td class="memItemRight" valign="bottom"><b>grab_forwarding_task</b> (<a class="el" href="a00031.html">buffer_operation</a> &op_data)</td></tr>
-<tr class="separator:a5fde962bed26ee41c370e48bce678320 inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a19dbfc4065f57efd7375fcc1b259dd9c inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a19dbfc4065f57efd7375fcc1b259dd9c"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>enqueue_forwarding_task</b> (<a class="el" href="a00031.html">buffer_operation</a> &op_data)</td></tr>
-<tr class="separator:a19dbfc4065f57efd7375fcc1b259dd9c inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8910a497040a4c6f1a6a1fb7a33a8888 inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8910a497040a4c6f1a6a1fb7a33a8888"></a>
-virtual task * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a8910a497040a4c6f1a6a1fb7a33a8888">forward_task</a> ()</td></tr>
-<tr class="memdesc:a8910a497040a4c6f1a6a1fb7a33a8888 inherit pro_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">This is executed by an enqueued task, the "forwarder". <br/></td></tr>
-<tr class="separator:a8910a497040a4c6f1a6a1fb7a33a8888 inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afa2dd93a1b42e77ccf7e1de0fddf3158 inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa2dd93a1b42e77ccf7e1de0fddf3158"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#afa2dd93a1b42e77ccf7e1de0fddf3158">internal_reg_succ</a> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="memdesc:afa2dd93a1b42e77ccf7e1de0fddf3158 inherit pro_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Register successor. <br/></td></tr>
-<tr class="separator:afa2dd93a1b42e77ccf7e1de0fddf3158 inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a46c7f9cd9130036244d4ea8efd74bf22 inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a46c7f9cd9130036244d4ea8efd74bf22"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a46c7f9cd9130036244d4ea8efd74bf22">internal_rem_succ</a> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="memdesc:a46c7f9cd9130036244d4ea8efd74bf22 inherit pro_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Remove successor. <br/></td></tr>
-<tr class="separator:a46c7f9cd9130036244d4ea8efd74bf22 inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3fd4023955e4ab600dbc0e31740e6321 inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3fd4023955e4ab600dbc0e31740e6321"></a>
-<a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a> & </td><td class="memItemRight" valign="bottom"><b>built_successors</b> ()</td></tr>
-<tr class="separator:a3fd4023955e4ab600dbc0e31740e6321 inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aeb7b729bec462169cb67326bd17b11e4 inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeb7b729bec462169cb67326bd17b11e4"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_succ</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:aeb7b729bec462169cb67326bd17b11e4 inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac382cedb8002e429ce2ccda29ed0d137 inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac382cedb8002e429ce2ccda29ed0d137"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_del_built_succ</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:ac382cedb8002e429ce2ccda29ed0d137 inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1a951a36f8f2ed91f9b7c918486dc915 inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1a951a36f8f2ed91f9b7c918486dc915"></a>
-<a class="el" href="a00059.html">built_predecessors_type</a> & </td><td class="memItemRight" valign="bottom"><b>built_predecessors</b> ()</td></tr>
-<tr class="separator:a1a951a36f8f2ed91f9b7c918486dc915 inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac851d86cc55d14f57b4cc7ef889610be inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac851d86cc55d14f57b4cc7ef889610be"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_pred</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:ac851d86cc55d14f57b4cc7ef889610be inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a32ff0f0106531343a46b53b882763317 inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a32ff0f0106531343a46b53b882763317"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_del_built_pred</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:a32ff0f0106531343a46b53b882763317 inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a632cbb0a8529d8fb559aa33cbd99b613 inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a632cbb0a8529d8fb559aa33cbd99b613"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_succ_cnt</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:a632cbb0a8529d8fb559aa33cbd99b613 inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa162bcd7cf8f7021ad8571d4db505bff inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa162bcd7cf8f7021ad8571d4db505bff"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_pred_cnt</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:aa162bcd7cf8f7021ad8571d4db505bff inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae2fad967e9fff72d5e7669f94744bc2d inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae2fad967e9fff72d5e7669f94744bc2d"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_copy_succs</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:ae2fad967e9fff72d5e7669f94744bc2d inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5c60751dba6a99adef58871ee520ae6e inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5c60751dba6a99adef58871ee520ae6e"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_copy_preds</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:a5c60751dba6a99adef58871ee520ae6e inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2fe75e82e8dffa7d13fa9e82d9951dba inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2fe75e82e8dffa7d13fa9e82d9951dba"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_push</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:a2fe75e82e8dffa7d13fa9e82d9951dba inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae7b3eee1ec878f6f0055f6133b233c09 inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae7b3eee1ec878f6f0055f6133b233c09"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_release</b> (<a class="el" href="a00031.html">buffer_operation</a> *op)</td></tr>
-<tr class="separator:ae7b3eee1ec878f6f0055f6133b233c09 inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa4517c0a58649ea5eb140ab4b786e1ec inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4517c0a58649ea5eb140ab4b786e1ec"></a>
-task * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#aa4517c0a58649ea5eb140ab4b786e1ec">try_put_task</a> (const T &t)</td></tr>
-<tr class="memdesc:aa4517c0a58649ea5eb140ab4b786e1ec inherit pro_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">receive an item, return a task *if possible <br/></td></tr>
-<tr class="separator:aa4517c0a58649ea5eb140ab4b786e1ec inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ace801f92ca3f0525835d67afba0eef6c inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ace801f92ca3f0525835d67afba0eef6c"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_receiver</b> (__TBB_PFG_RESET_ARG(reset_flags))</td></tr>
-<tr class="separator:ace801f92ca3f0525835d67afba0eef6c inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acc1b4323f79b01468a106ca313cfede7 inherit pro_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acc1b4323f79b01468a106ca313cfede7"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f))</td></tr>
-<tr class="separator:acc1b4323f79b01468a106ca313cfede7 inherit pro_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00072')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac25a4633873c052047b1dd568824d055"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0</td></tr>
-<tr class="separator:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00124"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00124')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td></tr>
-<tr class="memitem:ac902b1e09eea9748223eb50dc38d3575 inherit pro_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac902b1e09eea9748223eb50dc38d3575"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>reset_receiver</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0</td></tr>
-<tr class="separator:ac902b1e09eea9748223eb50dc38d3575 inherit pro_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae91eab3e06d4139ac38f143c74fe9eab inherit pro_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae91eab3e06d4139ac38f143c74fe9eab"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><b>is_continue_receiver</b> ()</td></tr>
-<tr class="separator:ae91eab3e06d4139ac38f143c74fe9eab inherit pro_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pro_attribs_a00030"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00030')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td></tr>
-<tr class="memitem:ade2fe89be00e023aafb1d3c380762048 inherit pro_attribs_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ade2fe89be00e023aafb1d3c380762048"></a>
-<a class="el" href="a00126.html">internal::round_robin_cache</a>< T, <br class="typebreak"/>
-<a class="el" href="a00102.html">null_rw_mutex</a> > </td><td class="memItemRight" valign="bottom"><b>my_successors</b></td></tr>
-<tr class="separator:ade2fe89be00e023aafb1d3c380762048 inherit pro_attribs_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4eda90c0f6300644705f142c6ada1a4d inherit pro_attribs_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4eda90c0f6300644705f142c6ada1a4d"></a>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> > </td><td class="memItemRight" valign="bottom"><b>my_built_predecessors</b></td></tr>
-<tr class="separator:a4eda90c0f6300644705f142c6ada1a4d inherit pro_attribs_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a441fb73f0e15aed49945fb7ec9925e9f inherit pro_attribs_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a441fb73f0e15aed49945fb7ec9925e9f"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>forwarder_busy</b></td></tr>
-<tr class="separator:a441fb73f0e15aed49945fb7ec9925e9f inherit pro_attribs_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:adc948866a1eb4c7a95b0edc08872d487 inherit pro_attribs_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adc948866a1eb4c7a95b0edc08872d487"></a>
-internal::aggregator<br class="typebreak"/>
-< my_handler, <a class="el" href="a00031.html">buffer_operation</a> > </td><td class="memItemRight" valign="bottom"><b>my_aggregator</b></td></tr>
-<tr class="separator:adc948866a1eb4c7a95b0edc08872d487 inherit pro_attribs_a00030"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aab450b73dbeb738f88700ac54ce04ce9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aab450b73dbeb738f88700ac54ce04ce9"></a>
+typedef <a class="el" href="a00169.html">zero_allocator</a>< U, <br class="typebreak"/>
+Allocator > </td><td class="memItemRight" valign="bottom"><b>other</b></td></tr>
+<tr class="separator:aab450b73dbeb738f88700ac54ce04ce9"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename T, typename A = cache_aligned_allocator<T>><br/>
-class tbb::flow::interface7::queue_node< T, A ></h3>
-
-<p>Forwards messages in FIFO order. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>tbb_allocator.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00110.png b/doc/html/a00110.png
deleted file mode 100644
index 20d1c2d..0000000
Binary files a/doc/html/a00110.png and /dev/null differ
diff --git a/doc/html/a00111.html b/doc/html/a00111.html
index 6cfbad5..f2bcde8 100644
--- a/doc/html/a00111.html
+++ b/doc/html/a00111.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::queuing_mutex Class Reference</title>
+<title>tbb::scalable_allocator< T >::rebind< U > Struct Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,70 +33,31 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00111.html">queuing_mutex</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00126.html">scalable_allocator</a></li><li class="navelem"><a class="el" href="a00111.html">rebind</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-static-attribs">Static Public Attributes</a> |
-<a href="a00292.html">List of all members</a>  </div>
+<a href="#pub-types">Public Types</a> |
+<a href="a00294.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::queuing_mutex Class Reference<div class="ingroups"><a class="el" href="a00258.html">Synchronization</a></div></div>  </div>
+<div class="title">tbb::scalable_allocator< T >::rebind< U > Struct Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Queuing mutex with local-only spinning.  
- <a href="a00111.html#details">More...</a></p>
-
-<p><code>#include <queuing_mutex.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::queuing_mutex:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00111.png" usemap="#tbb::queuing_mutex_map" alt=""/>
-  <map id="tbb::queuing_mutex_map" name="tbb::queuing_mutex_map">
-</map>
- </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html">scoped_lock</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00132.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a0e58fce2062ae349a30b320b7fdc9155"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0e58fce2062ae349a30b320b7fdc9155"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00111.html#a0e58fce2062ae349a30b320b7fdc9155">queuing_mutex</a> ()</td></tr>
-<tr class="memdesc:a0e58fce2062ae349a30b320b7fdc9155"><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired mutex. <br/></td></tr>
-<tr class="separator:a0e58fce2062ae349a30b320b7fdc9155"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae475e98e804c75239748b293e7e0feff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae475e98e804c75239748b293e7e0feff"></a>
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>internal_construct</b> ()</td></tr>
-<tr class="separator:ae475e98e804c75239748b293e7e0feff"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr class="memitem:a504f3af8a939468f1514604c0941bc62"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a504f3af8a939468f1514604c0941bc62"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
-<tr class="separator:a504f3af8a939468f1514604c0941bc62"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a47ad4cdac79581c01a66241e2e5c2c07"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a47ad4cdac79581c01a66241e2e5c2c07"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
-<tr class="separator:a47ad4cdac79581c01a66241e2e5c2c07"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5b4833b97208bd699cba061dfc3057cc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b4833b97208bd699cba061dfc3057cc"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = true</td></tr>
-<tr class="separator:a5b4833b97208bd699cba061dfc3057cc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a4f44c77105a911769353936a23b780a6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4f44c77105a911769353936a23b780a6"></a>
+typedef <a class="el" href="a00126.html">scalable_allocator</a>< U > </td><td class="memItemRight" valign="bottom"><b>other</b></td></tr>
+<tr class="separator:a4f44c77105a911769353936a23b780a6"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Queuing mutex with local-only spinning. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>queuing_mutex.h</li>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00212.html">scalable_allocator.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00111.png b/doc/html/a00111.png
deleted file mode 100644
index 97f8b53..0000000
Binary files a/doc/html/a00111.png and /dev/null differ
diff --git a/doc/html/a00112.html b/doc/html/a00112.html
index 8997dc3..dbc878a 100644
--- a/doc/html/a00112.html
+++ b/doc/html/a00112.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::queuing_rw_mutex Class Reference</title>
+<title>tbb::cache_aligned_allocator< T >::rebind< U > Struct Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,75 +33,32 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00112.html">queuing_rw_mutex</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00027.html">cache_aligned_allocator</a></li><li class="navelem"><a class="el" href="a00112.html">rebind</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-static-attribs">Static Public Attributes</a> |
-<a href="a00294.html">List of all members</a>  </div>
+<a href="#pub-types">Public Types</a> |
+<a href="a00268.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::queuing_rw_mutex Class Reference<div class="ingroups"><a class="el" href="a00258.html">Synchronization</a></div></div>  </div>
+<div class="title">tbb::cache_aligned_allocator< T >::rebind< U > Struct Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Queuing reader-writer mutex with local-only spinning.  
- <a href="a00112.html#details">More...</a></p>
-
-<p><code>#include <queuing_rw_mutex.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::queuing_rw_mutex:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00112.png" usemap="#tbb::queuing_rw_mutex_map" alt=""/>
-  <map id="tbb::queuing_rw_mutex_map" name="tbb::queuing_rw_mutex_map">
-</map>
- </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.html">scoped_lock</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00131.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a23de1ac415b6f54b778c8fd6ec6073e0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a23de1ac415b6f54b778c8fd6ec6073e0"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00112.html#a23de1ac415b6f54b778c8fd6ec6073e0">queuing_rw_mutex</a> ()</td></tr>
-<tr class="memdesc:a23de1ac415b6f54b778c8fd6ec6073e0"><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired mutex. <br/></td></tr>
-<tr class="separator:a23de1ac415b6f54b778c8fd6ec6073e0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae67fe828d7e07222e7876ef9fd780fcc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae67fe828d7e07222e7876ef9fd780fcc"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00112.html#ae67fe828d7e07222e7876ef9fd780fcc">~queuing_rw_mutex</a> ()</td></tr>
-<tr class="memdesc:ae67fe828d7e07222e7876ef9fd780fcc"><td class="mdescLeft"> </td><td class="mdescRight">Destructor asserts if the mutex is acquired, i.e. q_tail is non-NULL. <br/></td></tr>
-<tr class="separator:ae67fe828d7e07222e7876ef9fd780fcc"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afd032e7e13804cd4d1cd8fce60d773f8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afd032e7e13804cd4d1cd8fce60d773f8"></a>
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>internal_construct</b> ()</td></tr>
-<tr class="separator:afd032e7e13804cd4d1cd8fce60d773f8"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr class="memitem:ae3dbfbf71bfa9c662a59688cd86bfbd7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae3dbfbf71bfa9c662a59688cd86bfbd7"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = true</td></tr>
-<tr class="separator:ae3dbfbf71bfa9c662a59688cd86bfbd7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae8c3ee1f5ab3af3954abeec1d165ea8e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae8c3ee1f5ab3af3954abeec1d165ea8e"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
-<tr class="separator:ae8c3ee1f5ab3af3954abeec1d165ea8e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4704d512922b4b5d21c97901f9f7abd0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4704d512922b4b5d21c97901f9f7abd0"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = true</td></tr>
-<tr class="separator:a4704d512922b4b5d21c97901f9f7abd0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a1bb89d2224e26a9dfee7ef1adbac8b3d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1bb89d2224e26a9dfee7ef1adbac8b3d"></a>
+typedef <br class="typebreak"/>
+<a class="el" href="a00027.html">cache_aligned_allocator</a>< U > </td><td class="memItemRight" valign="bottom"><b>other</b></td></tr>
+<tr class="separator:a1bb89d2224e26a9dfee7ef1adbac8b3d"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Queuing reader-writer mutex with local-only spinning. </p>
-<p>Adapted from Krieger, Stumm, et al. pseudocode at <a href="http://www.eecg.toronto.edu/parallel/pubs_abs.html#Krieger_etal_ICPP93">http://www.eecg.toronto.edu/parallel/pubs_abs.html#Krieger_etal_ICPP93</a> </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>queuing_rw_mutex.h</li>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>cache_aligned_allocator.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00113.html b/doc/html/a00113.html
index 2f044b9..861790c 100644
--- a/doc/html/a00113.html
+++ b/doc/html/a00113.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface5::reader_writer_lock Class Reference</title>
+<title>tbb::tbb_allocator< T >::rebind< U > Struct Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,196 +33,31 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00113.html">reader_writer_lock</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00153.html">tbb_allocator</a></li><li class="navelem"><a class="el" href="a00113.html">rebind</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
 <a href="#pub-types">Public Types</a> |
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#friends">Friends</a> |
-<a href="a00383.html">List of all members</a>  </div>
+<a href="a00306.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface5::reader_writer_lock Class Reference<div class="ingroups"><a class="el" href="a00258.html">Synchronization</a></div></div>  </div>
+<div class="title">tbb::tbb_allocator< T >::rebind< U > Struct Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Writer-preference reader-writer lock with local-only spinning on readers.  
- <a href="a00113.html#details">More...</a></p>
-
-<p><code>#include <reader_writer_lock.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::interface5::reader_writer_lock:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00113.png" usemap="#tbb::interface5::reader_writer_lock_map" alt=""/>
-  <map id="tbb::interface5::reader_writer_lock_map" name="tbb::interface5::reader_writer_lock_map">
-</map>
- </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html">scoped_lock</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The scoped lock pattern for write locks.  <a href="a00133.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html">scoped_lock_read</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The scoped lock pattern for read locks.  <a href="a00141.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:a29bbf9ca21c12b313d9fa5326feaf3ed"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00113.html#a29bbf9ca21c12b313d9fa5326feaf3ed">status_t</a> { <b>waiting_nonblocking</b>, 
-<b>waiting</b>, 
-<b>active</b>, 
-<b>invalid</b>
- }</td></tr>
-<tr class="memdesc:a29bbf9ca21c12b313d9fa5326feaf3ed"><td class="mdescLeft"> </td><td class="mdescRight">Status type for nodes associated with lock instances.  <a href="a00113.html#a29bbf9ca21c12b313d9fa5326feaf3ed">More...</a><br/></td></tr>
-<tr class="separator:a29bbf9ca21c12b313d9fa5326feaf3ed"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:abceda6c50b0c36eacbef51f4682742f3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abceda6c50b0c36eacbef51f4682742f3"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00113.html#abceda6c50b0c36eacbef51f4682742f3">reader_writer_lock</a> ()</td></tr>
-<tr class="memdesc:abceda6c50b0c36eacbef51f4682742f3"><td class="mdescLeft"> </td><td class="mdescRight">Constructs a new <a class="el" href="a00113.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a>. <br/></td></tr>
-<tr class="separator:abceda6c50b0c36eacbef51f4682742f3"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aeee96b648c7b5ff6126c8a2e13ec7241"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeee96b648c7b5ff6126c8a2e13ec7241"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00113.html#aeee96b648c7b5ff6126c8a2e13ec7241">~reader_writer_lock</a> ()</td></tr>
-<tr class="memdesc:aeee96b648c7b5ff6126c8a2e13ec7241"><td class="mdescLeft"> </td><td class="mdescRight">Destructs a <a class="el" href="a00113.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> object. <br/></td></tr>
-<tr class="separator:aeee96b648c7b5ff6126c8a2e13ec7241"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af92eb949fc491af8f7e350869ea0a0d1"><td class="memItemLeft" align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00113.html#af92eb949fc491af8f7e350869ea0a0d1">lock</a> ()</td></tr>
-<tr class="memdesc:af92eb949fc491af8f7e350869ea0a0d1"><td class="mdescLeft"> </td><td class="mdescRight">Acquires the <a class="el" href="a00113.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> for write.  <a href="#af92eb949fc491af8f7e350869ea0a0d1">More...</a><br/></td></tr>
-<tr class="separator:af92eb949fc491af8f7e350869ea0a0d1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1739e842af52925a2d4a7e821b9b3b8d"><td class="memItemLeft" align="right" valign="top">bool __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00113.html#a1739e842af52925a2d4a7e821b9b3b8d">try_lock</a> ()</td></tr>
-<tr class="memdesc:a1739e842af52925a2d4a7e821b9b3b8d"><td class="mdescLeft"> </td><td class="mdescRight">Tries to acquire the <a class="el" href="a00113.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> for write.  <a href="#a1739e842af52925a2d4a7e821b9b3b8d">More...</a><br/></td></tr>
-<tr class="separator:a1739e842af52925a2d4a7e821b9b3b8d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6fd4fcdf0e5c0425d1cc736d644f234f"><td class="memItemLeft" align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00113.html#a6fd4fcdf0e5c0425d1cc736d644f234f">lock_read</a> ()</td></tr>
-<tr class="memdesc:a6fd4fcdf0e5c0425d1cc736d644f234f"><td class="mdescLeft"> </td><td class="mdescRight">Acquires the <a class="el" href="a00113.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> for read.  <a href="#a6fd4fcdf0e5c0425d1cc736d644f234f">More...</a><br/></td></tr>
-<tr class="separator:a6fd4fcdf0e5c0425d1cc736d644f234f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9c7aa04e00202c9a1197cb6d870cabb4"><td class="memItemLeft" align="right" valign="top">bool __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00113.html#a9c7aa04e00202c9a1197cb6d870cabb4">try_lock_read</a> ()</td></tr>
-<tr class="memdesc:a9c7aa04e00202c9a1197cb6d870cabb4"><td class="mdescLeft"> </td><td class="mdescRight">Tries to acquire the <a class="el" href="a00113.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> for read.  <a href="#a9c7aa04e00202c9a1197cb6d870cabb4">More...</a><br/></td></tr>
-<tr class="separator:a9c7aa04e00202c9a1197cb6d870cabb4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4c55c4dbde63e950fdc843c9b01a174f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c55c4dbde63e950fdc843c9b01a174f"></a>
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00113.html#a4c55c4dbde63e950fdc843c9b01a174f">unlock</a> ()</td></tr>
-<tr class="memdesc:a4c55c4dbde63e950fdc843c9b01a174f"><td class="mdescLeft"> </td><td class="mdescRight">Releases the <a class="el" href="a00113.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a>. <br/></td></tr>
-<tr class="separator:a4c55c4dbde63e950fdc843c9b01a174f"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:afcf922650b2fd9d76b7b939d8511bbd8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afcf922650b2fd9d76b7b939d8511bbd8"></a>
-class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
-<tr class="separator:afcf922650b2fd9d76b7b939d8511bbd8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a578ccbc6ecbc6d32cb45ccfdc0ed4ee6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a578ccbc6ecbc6d32cb45ccfdc0ed4ee6"></a>
-class </td><td class="memItemRight" valign="bottom"><b>scoped_lock_read</b></td></tr>
-<tr class="separator:a578ccbc6ecbc6d32cb45ccfdc0ed4ee6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adbeadd225df01e2cde9ffe5d92293671"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbeadd225df01e2cde9ffe5d92293671"></a>
+typedef <a class="el" href="a00153.html">tbb_allocator</a>< U > </td><td class="memItemRight" valign="bottom"><b>other</b></td></tr>
+<tr class="separator:adbeadd225df01e2cde9ffe5d92293671"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Writer-preference reader-writer lock with local-only spinning on readers. </p>
-<p>Loosely adapted from Mellor-Crummey and Scott pseudocode at <a href="http://www.cs.rochester.edu/research/synchronization/pseudocode/rw.html#s_wp">http://www.cs.rochester.edu/research/synchronization/pseudocode/rw.html#s_wp</a> </p>
-</div><h2 class="groupheader">Member Enumeration Documentation</h2>
-<a class="anchor" id="a29bbf9ca21c12b313d9fa5326feaf3ed"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="a00113.html#a29bbf9ca21c12b313d9fa5326feaf3ed">tbb::interface5::reader_writer_lock::status_t</a></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Status type for nodes associated with lock instances. </p>
-<p>waiting_nonblocking: the wait state for nonblocking lock instances; for writes, these transition straight to active states; for reads, these are unused.</p>
-<p>waiting: the start and spin state for all lock instances; these will transition to active state when appropriate. Non-blocking write locks transition from this state to waiting_nonblocking immediately.</p>
-<p>active: the active state means that the lock instance holds the lock; it will transition to invalid state during node deletion</p>
-<p>invalid: the end state for all nodes; this is set in the destructor so if we encounter this state, we are looking at memory that has already been freed</p>
-<p>The state diagrams below describe the status transitions. Single arrows indicate that the thread that owns the node is responsible for the transition; double arrows indicate that any thread could make the transition.</p>
-<p>State diagram for <a class="el" href="a00133.html" title="The scoped lock pattern for write locks. ">scoped_lock</a> status:</p>
-<p>waiting -------—> waiting_nonblocking | _____________/ | V V V active --------------—> invalid</p>
-<p>State diagram for <a class="el" href="a00141.html" title="The scoped lock pattern for read locks. ">scoped_lock_read</a> status:</p>
-<p>waiting | V active --------------—>invalid </p>
-
-</div>
-</div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="af92eb949fc491af8f7e350869ea0a0d1"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::lock </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Acquires the <a class="el" href="a00113.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> for write. </p>
-<p>If the lock is currently held in write mode by another context, the writer will block by spinning on a local variable. Exceptions thrown: <a class="el" href="a00074.html" title="Exception for PPL locks. ">improper_lock</a> The context tries to acquire a <a class="el" href="a00113.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> that it already has write ownership of. </p>
-
-</div>
-</div>
-<a class="anchor" id="a6fd4fcdf0e5c0425d1cc736d644f234f"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::lock_read </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Acquires the <a class="el" href="a00113.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> for read. </p>
-<p>If the lock is currently held by a writer, this reader will block and wait until the writers are done. Exceptions thrown: <a class="el" href="a00074.html" title="Exception for PPL locks. ">improper_lock</a> The context tries to acquire a <a class="el" href="a00113.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> that it already has write ownership of. </p>
-
-</div>
-</div>
-<a class="anchor" id="a1739e842af52925a2d4a7e821b9b3b8d"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::try_lock </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Tries to acquire the <a class="el" href="a00113.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> for write. </p>
-<p>This function does not block. Return Value: True or false, depending on whether the lock is acquired or not. If the lock is already held by this acquiring context, <a class="el" href="a00113.html#a1739e842af52925a2d4a7e821b9b3b8d" title="Tries to acquire the reader_writer_lock for write. ">try_lock()</a> returns false. </p>
-
-</div>
-</div>
-<a class="anchor" id="a9c7aa04e00202c9a1197cb6d870cabb4"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::try_lock_read </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Tries to acquire the <a class="el" href="a00113.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> for read. </p>
-<p>This function does not block. Return Value: True or false, depending on whether the lock is acquired or not. </p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>reader_writer_lock.h</li>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>tbb_allocator.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00114.html b/doc/html/a00114.html
index b0342eb..4d6e337 100644
--- a/doc/html/a00114.html
+++ b/doc/html/a00114.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::cache_aligned_allocator< void >::rebind< U > Struct Template Reference</title>
+<title>tbb::tbb_allocator< void >::rebind< U > Struct Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,32 +33,31 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00033.html">cache_aligned_allocator< void ></a></li><li class="navelem"><a class="el" href="a00114.html">rebind</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00154.html">tbb_allocator< void ></a></li><li class="navelem"><a class="el" href="a00114.html">rebind</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-types">Public Types</a> |
-<a href="a00273.html">List of all members</a>  </div>
+<a href="a00308.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::cache_aligned_allocator< void >::rebind< U > Struct Template Reference</div>  </div>
+<div class="title">tbb::tbb_allocator< void >::rebind< U > Struct Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:a9a8756c2c1d9425bdf7490943ae0b189"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a8756c2c1d9425bdf7490943ae0b189"></a>
-typedef <br class="typebreak"/>
-<a class="el" href="a00032.html">cache_aligned_allocator</a>< U > </td><td class="memItemRight" valign="bottom"><b>other</b></td></tr>
-<tr class="separator:a9a8756c2c1d9425bdf7490943ae0b189"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8f3c27dc0f43be2eafdfe8c6f222c44c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8f3c27dc0f43be2eafdfe8c6f222c44c"></a>
+typedef <a class="el" href="a00153.html">tbb_allocator</a>< U > </td><td class="memItemRight" valign="bottom"><b>other</b></td></tr>
+<tr class="separator:a8f3c27dc0f43be2eafdfe8c6f222c44c"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <hr/>The documentation for this struct was generated from the following file:<ul>
-<li>cache_aligned_allocator.h</li>
+<li>tbb_allocator.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00115.html b/doc/html/a00115.html
index e3f1731..d158449 100644
--- a/doc/html/a00115.html
+++ b/doc/html/a00115.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::scalable_allocator< T >::rebind< U > Struct Template Reference</title>
+<title>tbb::scalable_allocator< void >::rebind< U > Struct Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,31 +33,31 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00129.html">scalable_allocator</a></li><li class="navelem"><a class="el" href="a00115.html">rebind</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00127.html">scalable_allocator< void ></a></li><li class="navelem"><a class="el" href="a00115.html">rebind</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-types">Public Types</a> |
-<a href="a00299.html">List of all members</a>  </div>
+<a href="a00296.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::scalable_allocator< T >::rebind< U > Struct Template Reference</div>  </div>
+<div class="title">tbb::scalable_allocator< void >::rebind< U > Struct Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:a4f44c77105a911769353936a23b780a6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4f44c77105a911769353936a23b780a6"></a>
-typedef <a class="el" href="a00129.html">scalable_allocator</a>< U > </td><td class="memItemRight" valign="bottom"><b>other</b></td></tr>
-<tr class="separator:a4f44c77105a911769353936a23b780a6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a37986044aa989f9c1f9edef6ab79435d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a37986044aa989f9c1f9edef6ab79435d"></a>
+typedef <a class="el" href="a00126.html">scalable_allocator</a>< U > </td><td class="memItemRight" valign="bottom"><b>other</b></td></tr>
+<tr class="separator:a37986044aa989f9c1f9edef6ab79435d"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <hr/>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00217.html">scalable_allocator.h</a></li>
+<li><a class="el" href="a00212.html">scalable_allocator.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00116.html b/doc/html/a00116.html
index 2043694..7feea49 100644
--- a/doc/html/a00116.html
+++ b/doc/html/a00116.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::scalable_allocator< void >::rebind< U > Struct Template Reference</title>
+<title>tbb::interface6::memory_pool_allocator< T, P >::rebind< U > Struct Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,31 +33,32 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00130.html">scalable_allocator< void ></a></li><li class="navelem"><a class="el" href="a00116.html">rebind</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00077.html">memory_pool_allocator</a></li><li class="navelem"><a class="el" href="a00116.html">rebind</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-types">Public Types</a> |
-<a href="a00301.html">List of all members</a>  </div>
+<a href="a00381.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::scalable_allocator< void >::rebind< U > Struct Template Reference</div>  </div>
+<div class="title">tbb::interface6::memory_pool_allocator< T, P >::rebind< U > Struct Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:a37986044aa989f9c1f9edef6ab79435d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a37986044aa989f9c1f9edef6ab79435d"></a>
-typedef <a class="el" href="a00129.html">scalable_allocator</a>< U > </td><td class="memItemRight" valign="bottom"><b>other</b></td></tr>
-<tr class="separator:a37986044aa989f9c1f9edef6ab79435d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1e9f9c6f0163df16980598fcafca665b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e9f9c6f0163df16980598fcafca665b"></a>
+typedef <a class="el" href="a00077.html">memory_pool_allocator</a><br class="typebreak"/>
+< U, P > </td><td class="memItemRight" valign="bottom"><b>other</b></td></tr>
+<tr class="separator:a1e9f9c6f0163df16980598fcafca665b"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <hr/>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00217.html">scalable_allocator.h</a></li>
+<li><a class="el" href="a00193.html">memory_pool.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00117.html b/doc/html/a00117.html
index 6321881..6f7a0b7 100644
--- a/doc/html/a00117.html
+++ b/doc/html/a00117.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::tbb_allocator< T >::rebind< U > Struct Template Reference</title>
+<title>tbb::zero_allocator< void, Allocator >::rebind< U > Struct Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,23 +33,24 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00159.html">tbb_allocator</a></li><li class="navelem"><a class="el" href="a00117.html">rebind</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00170.html">zero_allocator< void, Allocator ></a></li><li class="navelem"><a class="el" href="a00117.html">rebind</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-types">Public Types</a> |
-<a href="a00311.html">List of all members</a>  </div>
+<a href="a00312.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::tbb_allocator< T >::rebind< U > Struct Template Reference</div>  </div>
+<div class="title">tbb::zero_allocator< void, Allocator >::rebind< U > Struct Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:adbeadd225df01e2cde9ffe5d92293671"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbeadd225df01e2cde9ffe5d92293671"></a>
-typedef <a class="el" href="a00159.html">tbb_allocator</a>< U > </td><td class="memItemRight" valign="bottom"><b>other</b></td></tr>
-<tr class="separator:adbeadd225df01e2cde9ffe5d92293671"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6a001a156c058ee1194ba55ce534a43e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6a001a156c058ee1194ba55ce534a43e"></a>
+typedef <a class="el" href="a00169.html">zero_allocator</a>< U, <br class="typebreak"/>
+Allocator > </td><td class="memItemRight" valign="bottom"><b>other</b></td></tr>
+<tr class="separator:a6a001a156c058ee1194ba55ce534a43e"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <hr/>The documentation for this struct was generated from the following file:<ul>
 <li>tbb_allocator.h</li>
@@ -57,7 +58,7 @@ typedef <a class="el" href="a00159.html">tbb_allocator</a>< U > </td>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00118.html b/doc/html/a00118.html
index 8be3a82..2e9730f 100644
--- a/doc/html/a00118.html
+++ b/doc/html/a00118.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::tbb_allocator< void >::rebind< U > Struct Template Reference</title>
+<title>tbb::interface6::memory_pool_allocator< void, P >::rebind< U > Struct Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,31 +33,32 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00160.html">tbb_allocator< void ></a></li><li class="navelem"><a class="el" href="a00118.html">rebind</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00078.html">memory_pool_allocator< void, P ></a></li><li class="navelem"><a class="el" href="a00118.html">rebind</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-types">Public Types</a> |
-<a href="a00313.html">List of all members</a>  </div>
+<a href="a00383.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::tbb_allocator< void >::rebind< U > Struct Template Reference</div>  </div>
+<div class="title">tbb::interface6::memory_pool_allocator< void, P >::rebind< U > Struct Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:a8f3c27dc0f43be2eafdfe8c6f222c44c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8f3c27dc0f43be2eafdfe8c6f222c44c"></a>
-typedef <a class="el" href="a00159.html">tbb_allocator</a>< U > </td><td class="memItemRight" valign="bottom"><b>other</b></td></tr>
-<tr class="separator:a8f3c27dc0f43be2eafdfe8c6f222c44c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4a2190850873b9f2bc63c28dfd336dd9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a2190850873b9f2bc63c28dfd336dd9"></a>
+typedef <a class="el" href="a00077.html">memory_pool_allocator</a><br class="typebreak"/>
+< U, P > </td><td class="memItemRight" valign="bottom"><b>other</b></td></tr>
+<tr class="separator:a4a2190850873b9f2bc63c28dfd336dd9"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <hr/>The documentation for this struct was generated from the following file:<ul>
-<li>tbb_allocator.h</li>
+<li><a class="el" href="a00193.html">memory_pool.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00119.html b/doc/html/a00119.html
index 6b40b77..f4d49e3 100644
--- a/doc/html/a00119.html
+++ b/doc/html/a00119.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::zero_allocator< T, Allocator >::rebind< U > Struct Template Reference</title>
+<title>tbb::flow::interface9::receiver< T > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,32 +33,203 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00177.html">zero_allocator</a></li><li class="navelem"><a class="el" href="a00119.html">rebind</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00119.html">receiver</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-types">Public Types</a> |
-<a href="a00315.html">List of all members</a>  </div>
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pro-methods">Protected Member Functions</a> |
+<a href="#friends">Friends</a> |
+<a href="a00324.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::zero_allocator< T, Allocator >::rebind< U > Struct Template Reference</div>  </div>
+<div class="title">tbb::flow::interface9::receiver< T > Class Template Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
 </div><!--header-->
 <div class="contents">
+
+<p>Pure virtual template class that defines a receiver of messages of type T.  
+ <a href="a00119.html#details">More...</a></p>
+
+<p><code>#include <flow_graph.h></code></p>
+<div class="dynheader">
+Inheritance diagram for tbb::flow::interface9::receiver< T >:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00119.png" usemap="#tbb::flow::interface9::receiver< T >_map" alt=""/>
+  <map id="tbb::flow::interface9::receiver< T >_map" name="tbb::flow::interface9::receiver< T >_map">
+<area href="a00164.html" alt="tbb::flow::interface9::internal::untyped_receiver" shape="rect" coords="0,0,275,24"/>
+</map>
+ </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:aab450b73dbeb738f88700ac54ce04ce9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aab450b73dbeb738f88700ac54ce04ce9"></a>
-typedef <a class="el" href="a00177.html">zero_allocator</a>< U, <br class="typebreak"/>
-Allocator > </td><td class="memItemRight" valign="bottom"><b>other</b></td></tr>
-<tr class="separator:aab450b73dbeb738f88700ac54ce04ce9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac7e1e823c3a7d6e491e336ff832a2495"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac7e1e823c3a7d6e491e336ff832a2495"></a>
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html#ac7e1e823c3a7d6e491e336ff832a2495">input_type</a></td></tr>
+<tr class="memdesc:ac7e1e823c3a7d6e491e336ff832a2495"><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br/></td></tr>
+<tr class="separator:ac7e1e823c3a7d6e491e336ff832a2495"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a388f8aec160b0a7b799a1e34b3386305"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a388f8aec160b0a7b799a1e34b3386305"></a>
+typedef <br class="typebreak"/>
+internal::async_helpers< T ><br class="typebreak"/>
+::filtered_type </td><td class="memItemRight" valign="bottom"><b>filtered_type</b></td></tr>
+<tr class="separator:a388f8aec160b0a7b799a1e34b3386305"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac7e1e823c3a7d6e491e336ff832a2495"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac7e1e823c3a7d6e491e336ff832a2495"></a>
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html#ac7e1e823c3a7d6e491e336ff832a2495">input_type</a></td></tr>
+<tr class="memdesc:ac7e1e823c3a7d6e491e336ff832a2495"><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br/></td></tr>
+<tr class="separator:ac7e1e823c3a7d6e491e336ff832a2495"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a97b14fcd2a562cf47a9548764c4e5abc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a97b14fcd2a562cf47a9548764c4e5abc"></a>
+typedef <a class="el" href="a00139.html">sender</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html#a97b14fcd2a562cf47a9548764c4e5abc">predecessor_type</a></td></tr>
+<tr class="memdesc:a97b14fcd2a562cf47a9548764c4e5abc"><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br/></td></tr>
+<tr class="separator:a97b14fcd2a562cf47a9548764c4e5abc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac413d1c889007c9a6d8484d3ba6ec080"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac413d1c889007c9a6d8484d3ba6ec080"></a>
+typedef <br class="typebreak"/>
+<a class="el" href="a00056.html">internal::edge_container</a><br class="typebreak"/>
+< <a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">predecessor_type</a> > </td><td class="memItemRight" valign="bottom"><b>built_predecessors_type</b></td></tr>
+<tr class="separator:ac413d1c889007c9a6d8484d3ba6ec080"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad1a0f07bfa994f8c15441252e364fc46"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad1a0f07bfa994f8c15441252e364fc46"></a>
+typedef <br class="typebreak"/>
+built_predecessors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>predecessor_list_type</b></td></tr>
+<tr class="separator:ad1a0f07bfa994f8c15441252e364fc46"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_types_a00164"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00164')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td></tr>
+<tr class="memitem:a18472c96f8466de089aa2287460b606e inherit pub_types_a00164"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18472c96f8466de089aa2287460b606e"></a>
+typedef <a class="el" href="a00165.html">untyped_sender</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">predecessor_type</a></td></tr>
+<tr class="memdesc:a18472c96f8466de089aa2287460b606e inherit pub_types_a00164"><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br/></td></tr>
+<tr class="separator:a18472c96f8466de089aa2287460b606e inherit pub_types_a00164"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a369b0e292b94a74ffd26e95ca69a9a22 inherit pub_types_a00164"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a369b0e292b94a74ffd26e95ca69a9a22"></a>
+typedef <br class="typebreak"/>
+<a class="el" href="a00056.html">internal::edge_container</a><br class="typebreak"/>
+< <a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">predecessor_type</a> > </td><td class="memItemRight" valign="bottom"><b>built_predecessors_type</b></td></tr>
+<tr class="separator:a369b0e292b94a74ffd26e95ca69a9a22 inherit pub_types_a00164"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac83b145c22d5d95930bf40154a1ce11b inherit pub_types_a00164"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac83b145c22d5d95930bf40154a1ce11b"></a>
+typedef <br class="typebreak"/>
+built_predecessors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>predecessor_list_type</b></td></tr>
+<tr class="separator:ac83b145c22d5d95930bf40154a1ce11b inherit pub_types_a00164"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a6ac09b1571cea3efd1fdbdaf4e6ce71a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6ac09b1571cea3efd1fdbdaf4e6ce71a"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html#a6ac09b1571cea3efd1fdbdaf4e6ce71a">try_put</a> (const typename internal::async_helpers< T >::filtered_type &t)</td></tr>
+<tr class="memdesc:a6ac09b1571cea3efd1fdbdaf4e6ce71a"><td class="mdescLeft"> </td><td class="mdescRight">Put an item to the receiver. <br/></td></tr>
+<tr class="separator:a6ac09b1571cea3efd1fdbdaf4e6ce71a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af4b8b1ae090b4b5f2c2ba39b2d85401b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af4b8b1ae090b4b5f2c2ba39b2d85401b"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>try_put</b> (const typename internal::async_helpers< T >::async_type &t)</td></tr>
+<tr class="separator:af4b8b1ae090b4b5f2c2ba39b2d85401b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a33c66d3eb36a9e95db44fce5efeb65b4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a33c66d3eb36a9e95db44fce5efeb65b4"></a>
+virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html#a33c66d3eb36a9e95db44fce5efeb65b4">~receiver</a> ()</td></tr>
+<tr class="memdesc:a33c66d3eb36a9e95db44fce5efeb65b4"><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br/></td></tr>
+<tr class="separator:a33c66d3eb36a9e95db44fce5efeb65b4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7f58c8ec0f790193be2e477b2546ead2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f58c8ec0f790193be2e477b2546ead2"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html#a7f58c8ec0f790193be2e477b2546ead2">try_put</a> (const T &t)</td></tr>
+<tr class="memdesc:a7f58c8ec0f790193be2e477b2546ead2"><td class="mdescLeft"> </td><td class="mdescRight">Put an item to the receiver. <br/></td></tr>
+<tr class="separator:a7f58c8ec0f790193be2e477b2546ead2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a272b4aa85424e7e96371868403fe3c54"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a272b4aa85424e7e96371868403fe3c54"></a>
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html#a272b4aa85424e7e96371868403fe3c54">register_predecessor</a> (<a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">predecessor_type</a> &)</td></tr>
+<tr class="memdesc:a272b4aa85424e7e96371868403fe3c54"><td class="mdescLeft"> </td><td class="mdescRight">Add a predecessor to the node. <br/></td></tr>
+<tr class="separator:a272b4aa85424e7e96371868403fe3c54"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae8f45b84f3179964dd77f32835ece6c0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae8f45b84f3179964dd77f32835ece6c0"></a>
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html#ae8f45b84f3179964dd77f32835ece6c0">remove_predecessor</a> (<a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">predecessor_type</a> &)</td></tr>
+<tr class="memdesc:ae8f45b84f3179964dd77f32835ece6c0"><td class="mdescLeft"> </td><td class="mdescRight">Remove a predecessor from the node. <br/></td></tr>
+<tr class="separator:ae8f45b84f3179964dd77f32835ece6c0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adeca450b1eb238dba6d7df68ff870a0c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adeca450b1eb238dba6d7df68ff870a0c"></a>
+virtual <a class="el" href="a00056.html">built_predecessors_type</a> & </td><td class="memItemRight" valign="bottom"><b>built_predecessors</b> ()=0</td></tr>
+<tr class="separator:adeca450b1eb238dba6d7df68ff870a0c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a64cdc7b5c5105007a1d5240ed67aedbf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a64cdc7b5c5105007a1d5240ed67aedbf"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_predecessor</b> (<a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">predecessor_type</a> &)=0</td></tr>
+<tr class="separator:a64cdc7b5c5105007a1d5240ed67aedbf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9f64ec2ce6dddd06b3259a5b472e43df"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9f64ec2ce6dddd06b3259a5b472e43df"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><b>internal_delete_built_predecessor</b> (<a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">predecessor_type</a> &)=0</td></tr>
+<tr class="separator:a9f64ec2ce6dddd06b3259a5b472e43df"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a408148fe7d7088ca847c3ded7b0b6c0f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a408148fe7d7088ca847c3ded7b0b6c0f"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><b>copy_predecessors</b> (predecessor_list_type &)=0</td></tr>
+<tr class="separator:a408148fe7d7088ca847c3ded7b0b6c0f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2367636e0226a26c7bd096e6398d539c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2367636e0226a26c7bd096e6398d539c"></a>
+virtual size_t </td><td class="memItemRight" valign="bottom"><b>predecessor_count</b> ()=0</td></tr>
+<tr class="separator:a2367636e0226a26c7bd096e6398d539c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_methods_a00164"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00164')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td></tr>
+<tr class="memitem:a632631c8a370c1dd1fa8815cbc5e18ec inherit pub_methods_a00164"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a632631c8a370c1dd1fa8815cbc5e18ec"></a>
+virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#a632631c8a370c1dd1fa8815cbc5e18ec">~untyped_receiver</a> ()</td></tr>
+<tr class="memdesc:a632631c8a370c1dd1fa8815cbc5e18ec inherit pub_methods_a00164"><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br/></td></tr>
+<tr class="separator:a632631c8a370c1dd1fa8815cbc5e18ec inherit pub_methods_a00164"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a84f8406cd5e3252965d9e238575eaede inherit pub_methods_a00164"><td class="memTemplParams" colspan="2"><a class="anchor" id="a84f8406cd5e3252965d9e238575eaede"></a>
+template<typename X > </td></tr>
+<tr class="memitem:a84f8406cd5e3252965d9e238575eaede inherit pub_methods_a00164"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00164.html#a84f8406cd5e3252965d9e238575eaede">try_put</a> (const X &t)</td></tr>
+<tr class="memdesc:a84f8406cd5e3252965d9e238575eaede inherit pub_methods_a00164"><td class="mdescLeft"> </td><td class="mdescRight">Put an item to the receiver. <br/></td></tr>
+<tr class="separator:a84f8406cd5e3252965d9e238575eaede inherit pub_methods_a00164"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:a1e7c654dfee72d5ceb414cf2048e2587"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e7c654dfee72d5ceb414cf2048e2587"></a>
+virtual task * </td><td class="memItemRight" valign="bottom"><b>try_put_task_wrapper</b> (const void *p, bool is_async) __TBB_override</td></tr>
+<tr class="separator:a1e7c654dfee72d5ceb414cf2048e2587"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaff8d049a1209b14e6e871768c82a629"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaff8d049a1209b14e6e871768c82a629"></a>
+virtual task * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html#aaff8d049a1209b14e6e871768c82a629">try_put_task</a> (const T &t)=0</td></tr>
+<tr class="memdesc:aaff8d049a1209b14e6e871768c82a629"><td class="mdescLeft"> </td><td class="mdescRight">Put item to successor; return task to run the successor if possible. <br/></td></tr>
+<tr class="separator:aaff8d049a1209b14e6e871768c82a629"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaff8d049a1209b14e6e871768c82a629"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaff8d049a1209b14e6e871768c82a629"></a>
+virtual task * </td><td class="memItemRight" valign="bottom"><b>try_put_task</b> (const T &t)=0</td></tr>
+<tr class="separator:aaff8d049a1209b14e6e871768c82a629"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4b0f31d3bc03ce4cb1b00819aeb1d37e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4b0f31d3bc03ce4cb1b00819aeb1d37e"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html#a4b0f31d3bc03ce4cb1b00819aeb1d37e">reset_receiver</a> (reset_flags f=rf_reset_protocol)=0</td></tr>
+<tr class="memdesc:a4b0f31d3bc03ce4cb1b00819aeb1d37e"><td class="mdescLeft"> </td><td class="mdescRight">put receiver back in initial state <br/></td></tr>
+<tr class="separator:a4b0f31d3bc03ce4cb1b00819aeb1d37e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae158fdcb314458d09e03cc2192d3184b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae158fdcb314458d09e03cc2192d3184b"></a>
+virtual bool </td><td class="memItemRight" valign="bottom"><b>is_continue_receiver</b> ()</td></tr>
+<tr class="separator:ae158fdcb314458d09e03cc2192d3184b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pro_methods_a00164"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00164')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td></tr>
+<tr class="memitem:a999d560da68ba411a66954b40bd93b54 inherit pro_methods_a00164"><td class="memTemplParams" colspan="2"><a class="anchor" id="a999d560da68ba411a66954b40bd93b54"></a>
+template<typename X > </td></tr>
+<tr class="memitem:a999d560da68ba411a66954b40bd93b54 inherit pro_methods_a00164"><td class="memTemplItemLeft" align="right" valign="top">task * </td><td class="memTemplItemRight" valign="bottom"><b>try_put_task</b> (const X &t)</td></tr>
+<tr class="separator:a999d560da68ba411a66954b40bd93b54 inherit pro_methods_a00164"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:ae4f7ceb1e5cf2e99e594ca4fe604ceb2"><td class="memTemplParams" colspan="2"><a class="anchor" id="ae4f7ceb1e5cf2e99e594ca4fe604ceb2"></a>
+template<typename > </td></tr>
+<tr class="memitem:ae4f7ceb1e5cf2e99e594ca4fe604ceb2"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::async_storage</b></td></tr>
+<tr class="separator:ae4f7ceb1e5cf2e99e594ca4fe604ceb2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac37955c25251d60e0279db6d239268a9"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac37955c25251d60e0279db6d239268a9"></a>
+template<typename , typename > </td></tr>
+<tr class="memitem:ac37955c25251d60e0279db6d239268a9"><td class="memTemplItemLeft" align="right" valign="top">struct </td><td class="memTemplItemRight" valign="bottom"><b>internal::async_helpers</b></td></tr>
+<tr class="separator:ac37955c25251d60e0279db6d239268a9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplParams" colspan="2"><a class="anchor" id="abaf9bf74ca5f2854d09f5f07337280eb"></a>
+template<typename R , typename B > </td></tr>
+<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#abaf9bf74ca5f2854d09f5f07337280eb">run_and_put_task</a></td></tr>
+<tr class="memdesc:abaf9bf74ca5f2854d09f5f07337280eb"><td class="mdescLeft"> </td><td class="mdescRight">put item to successor; return task to run the successor if possible. <br/></td></tr>
+<tr class="separator:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1360e38efe396058978cf3754ad620f5"></a>
+template<typename X , typename Y > </td></tr>
+<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::broadcast_cache</b></td></tr>
+<tr class="separator:a1360e38efe396058978cf3754ad620f5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplParams" colspan="2"><a class="anchor" id="acbd9ac2610587a99cd7d43344297cc49"></a>
+template<typename X , typename Y > </td></tr>
+<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::round_robin_cache</b></td></tr>
+<tr class="separator:acbd9ac2610587a99cd7d43344297cc49"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a05ec930a348f7eed564236d00edbda24"><td class="memTemplParams" colspan="2"><a class="anchor" id="a05ec930a348f7eed564236d00edbda24"></a>
+template<typename U > </td></tr>
+<tr class="memitem:a05ec930a348f7eed564236d00edbda24"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#a05ec930a348f7eed564236d00edbda24">limiter_node</a></td></tr>
+<tr class="memdesc:a05ec930a348f7eed564236d00edbda24"><td class="mdescLeft"> </td><td class="mdescRight">put receiver back in initial state <br/></td></tr>
+<tr class="separator:a05ec930a348f7eed564236d00edbda24"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a73cd25db4e6e9497940262f70f3ffc54"><td class="memTemplParams" colspan="2"><a class="anchor" id="a73cd25db4e6e9497940262f70f3ffc54"></a>
+template<typename TT , typename M > </td></tr>
+<tr class="memitem:a73cd25db4e6e9497940262f70f3ffc54"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::successor_cache</b></td></tr>
+<tr class="separator:a73cd25db4e6e9497940262f70f3ffc54"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af80b784f4606fcda66eb0059fdf6af07"><td class="memTemplParams" colspan="2"><a class="anchor" id="af80b784f4606fcda66eb0059fdf6af07"></a>
+template<typename , typename > </td></tr>
+<tr class="memitem:af80b784f4606fcda66eb0059fdf6af07"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>proxy_dependency_receiver</b></td></tr>
+<tr class="separator:af80b784f4606fcda66eb0059fdf6af07"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<hr/>The documentation for this struct was generated from the following file:<ul>
-<li>tbb_allocator.h</li>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><h3>template<typename T><br/>
+class tbb::flow::interface9::receiver< T ></h3>
+
+<p>Pure virtual template class that defines a receiver of messages of type T. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00188.html">flow_graph.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00119.png b/doc/html/a00119.png
new file mode 100644
index 0000000..bbbfa24
Binary files /dev/null and b/doc/html/a00119.png differ
diff --git a/doc/html/a00120.html b/doc/html/a00120.html
index ac7e65e..babde2c 100644
--- a/doc/html/a00120.html
+++ b/doc/html/a00120.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::zero_allocator< void, Allocator >::rebind< U > Struct Template Reference</title>
+<title>tbb::flow::interface9::receiver_gateway< Input > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,32 +33,58 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00178.html">zero_allocator< void, Allocator ></a></li><li class="navelem"><a class="el" href="a00120.html">rebind</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00120.html">receiver_gateway</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-types">Public Types</a> |
-<a href="a00317.html">List of all members</a>  </div>
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="a00327.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::zero_allocator< void, Allocator >::rebind< U > Struct Template Reference</div>  </div>
+<div class="title">tbb::flow::interface9::receiver_gateway< Input > Class Template Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
 </div><!--header-->
 <div class="contents">
+<div class="dynheader">
+Inheritance diagram for tbb::flow::interface9::receiver_gateway< Input >:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00120.png" usemap="#tbb::flow::interface9::receiver_gateway< Input >_map" alt=""/>
+  <map id="tbb::flow::interface9::receiver_gateway< Input >_map" name="tbb::flow::interface9::receiver_gateway< Input >_map">
+<area href="a00069.html" title="Pure virtual template classes that define interfaces for async communication. " alt="tbb::flow::interface9::graph_proxy" shape="rect" coords="0,0,280,24"/>
+</map>
+ </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:a6a001a156c058ee1194ba55ce534a43e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6a001a156c058ee1194ba55ce534a43e"></a>
-typedef <a class="el" href="a00177.html">zero_allocator</a>< U, <br class="typebreak"/>
-Allocator > </td><td class="memItemRight" valign="bottom"><b>other</b></td></tr>
-<tr class="separator:a6a001a156c058ee1194ba55ce534a43e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a67a0833e5e6520286423a5f04969dcd4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a67a0833e5e6520286423a5f04969dcd4"></a>
+typedef Input </td><td class="memItemRight" valign="bottom"><a class="el" href="a00120.html#a67a0833e5e6520286423a5f04969dcd4">input_type</a></td></tr>
+<tr class="memdesc:a67a0833e5e6520286423a5f04969dcd4"><td class="mdescLeft"> </td><td class="mdescRight">Type of inputing data into FG. <br/></td></tr>
+<tr class="separator:a67a0833e5e6520286423a5f04969dcd4"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a382797f42de522b37205415703cb32bd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a382797f42de522b37205415703cb32bd"></a>
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00120.html#a382797f42de522b37205415703cb32bd">try_put</a> (const <a class="el" href="a00120.html#a67a0833e5e6520286423a5f04969dcd4">input_type</a> &)=0</td></tr>
+<tr class="memdesc:a382797f42de522b37205415703cb32bd"><td class="mdescLeft"> </td><td class="mdescRight">Submit signal from an asynchronous activity to FG. <br/></td></tr>
+<tr class="separator:a382797f42de522b37205415703cb32bd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_methods_a00069"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00069')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00069.html">tbb::flow::interface9::graph_proxy</a></td></tr>
+<tr class="memitem:a89db56a08929f4d3e45d27838cec3272 inherit pub_methods_a00069"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a89db56a08929f4d3e45d27838cec3272"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00069.html#a89db56a08929f4d3e45d27838cec3272">reserve_wait</a> ()=0</td></tr>
+<tr class="memdesc:a89db56a08929f4d3e45d27838cec3272 inherit pub_methods_a00069"><td class="mdescLeft"> </td><td class="mdescRight">Inform a graph that messages may come from outside, to prevent premature graph completion. <br/></td></tr>
+<tr class="separator:a89db56a08929f4d3e45d27838cec3272 inherit pub_methods_a00069"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5f751c4f3a0b5be4f97b2b857aaecea0 inherit pub_methods_a00069"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f751c4f3a0b5be4f97b2b857aaecea0"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00069.html#a5f751c4f3a0b5be4f97b2b857aaecea0">release_wait</a> ()=0</td></tr>
+<tr class="memdesc:a5f751c4f3a0b5be4f97b2b857aaecea0 inherit pub_methods_a00069"><td class="mdescLeft"> </td><td class="mdescRight">Inform a graph that a previous call to reserve_wait is no longer in effect. <br/></td></tr>
+<tr class="separator:a5f751c4f3a0b5be4f97b2b857aaecea0 inherit pub_methods_a00069"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<hr/>The documentation for this struct was generated from the following file:<ul>
-<li>tbb_allocator.h</li>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>flow_graph_abstractions.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00120.png b/doc/html/a00120.png
new file mode 100644
index 0000000..b345576
Binary files /dev/null and b/doc/html/a00120.png differ
diff --git a/doc/html/a00121.html b/doc/html/a00121.html
index 357d029..beb09f2 100644
--- a/doc/html/a00121.html
+++ b/doc/html/a00121.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::cache_aligned_allocator< T >::rebind< U > Struct Template Reference</title>
+<title>tbb::recursive_mutex Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,32 +33,127 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00032.html">cache_aligned_allocator</a></li><li class="navelem"><a class="el" href="a00121.html">rebind</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00121.html">recursive_mutex</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#nested-classes">Classes</a> |
 <a href="#pub-types">Public Types</a> |
-<a href="a00271.html">List of all members</a>  </div>
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="#friends">Friends</a> |
+<a href="a00291.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::cache_aligned_allocator< T >::rebind< U > Struct Template Reference</div>  </div>
+<div class="title">tbb::recursive_mutex Class Reference<div class="ingroups"><a class="el" href="a00255.html">Synchronization</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
+
+<p><code>#include <recursive_mutex.h></code></p>
+<div class="dynheader">
+Inheritance diagram for tbb::recursive_mutex:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00121.png" usemap="#tbb::recursive_mutex_map" alt=""/>
+  <map id="tbb::recursive_mutex_map" name="tbb::recursive_mutex_map">
+</map>
+ </div></div>
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html">scoped_lock</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00133.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:a1bb89d2224e26a9dfee7ef1adbac8b3d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1bb89d2224e26a9dfee7ef1adbac8b3d"></a>
-typedef <br class="typebreak"/>
-<a class="el" href="a00032.html">cache_aligned_allocator</a>< U > </td><td class="memItemRight" valign="bottom"><b>other</b></td></tr>
-<tr class="separator:a1bb89d2224e26a9dfee7ef1adbac8b3d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3d40334b0e26d5addfde5596e7f9aaec"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d40334b0e26d5addfde5596e7f9aaec"></a>
+typedef LPCRITICAL_SECTION </td><td class="memItemRight" valign="bottom"><a class="el" href="a00121.html#a3d40334b0e26d5addfde5596e7f9aaec">native_handle_type</a></td></tr>
+<tr class="memdesc:a3d40334b0e26d5addfde5596e7f9aaec"><td class="mdescLeft"> </td><td class="mdescRight">Return native_handle. <br/></td></tr>
+<tr class="separator:a3d40334b0e26d5addfde5596e7f9aaec"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a59f90e65656fec5a07e375c6e7cd39f3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59f90e65656fec5a07e375c6e7cd39f3"></a>
+typedef pthread_mutex_t * </td><td class="memItemRight" valign="bottom"><b>native_handle_type</b></td></tr>
+<tr class="separator:a59f90e65656fec5a07e375c6e7cd39f3"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a47eb6e7e7ffa5d35341125792b17236b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a47eb6e7e7ffa5d35341125792b17236b"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00121.html#a47eb6e7e7ffa5d35341125792b17236b">recursive_mutex</a> ()</td></tr>
+<tr class="memdesc:a47eb6e7e7ffa5d35341125792b17236b"><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired <a class="el" href="a00121.html">recursive_mutex</a>. <br/></td></tr>
+<tr class="separator:a47eb6e7e7ffa5d35341125792b17236b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adea997b45dc4a360f38d14bde9c991f2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adea997b45dc4a360f38d14bde9c991f2"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00121.html#adea997b45dc4a360f38d14bde9c991f2">lock</a> ()</td></tr>
+<tr class="memdesc:adea997b45dc4a360f38d14bde9c991f2"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock. <br/></td></tr>
+<tr class="separator:adea997b45dc4a360f38d14bde9c991f2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8b181d9aaa95444145222cfe206e8094"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00121.html#a8b181d9aaa95444145222cfe206e8094">try_lock</a> ()</td></tr>
+<tr class="memdesc:a8b181d9aaa95444145222cfe206e8094"><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring lock (non-blocking)  <a href="#a8b181d9aaa95444145222cfe206e8094">More...</a><br/></td></tr>
+<tr class="separator:a8b181d9aaa95444145222cfe206e8094"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af57e8d25e0e7614e98bcfa50bc9416c8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af57e8d25e0e7614e98bcfa50bc9416c8"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00121.html#af57e8d25e0e7614e98bcfa50bc9416c8">unlock</a> ()</td></tr>
+<tr class="memdesc:af57e8d25e0e7614e98bcfa50bc9416c8"><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br/></td></tr>
+<tr class="separator:af57e8d25e0e7614e98bcfa50bc9416c8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a050ca2a8d3b5c98f9d6c1252856436db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a050ca2a8d3b5c98f9d6c1252856436db"></a>
+<a class="el" href="a00121.html#a3d40334b0e26d5addfde5596e7f9aaec">native_handle_type</a> </td><td class="memItemRight" valign="bottom"><b>native_handle</b> ()</td></tr>
+<tr class="separator:a050ca2a8d3b5c98f9d6c1252856436db"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a668511b8520c41a342c038ba26ce70ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a668511b8520c41a342c038ba26ce70ff"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
+<tr class="separator:a668511b8520c41a342c038ba26ce70ff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2817cf2c1a7875590548f49a834ca668"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2817cf2c1a7875590548f49a834ca668"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = true</td></tr>
+<tr class="separator:a2817cf2c1a7875590548f49a834ca668"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abcc4a830c307cb4d25311550a527fe4d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abcc4a830c307cb4d25311550a527fe4d"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = false</td></tr>
+<tr class="separator:abcc4a830c307cb4d25311550a527fe4d"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:afcf922650b2fd9d76b7b939d8511bbd8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afcf922650b2fd9d76b7b939d8511bbd8"></a>
+class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
+<tr class="separator:afcf922650b2fd9d76b7b939d8511bbd8"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<hr/>The documentation for this struct was generated from the following file:<ul>
-<li>cache_aligned_allocator.h</li>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Mutex that allows recursive mutex acquisition. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="a8b181d9aaa95444145222cfe206e8094"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::recursive_mutex::try_lock </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Try acquiring lock (non-blocking) </p>
+<p>Return true if lock acquired; false otherwise. </p>
+
+<p>References <a class="el" href="a00014.html#a3525dbbac0d4eaedfe18bc57b7760857">tbb::aligned_space< T, N >::begin()</a>.</p>
+
+<p>Referenced by <a class="el" href="a00133.html#a160bba506f4033980ddb69ab7a02c4fb">tbb::recursive_mutex::scoped_lock::try_acquire()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>recursive_mutex.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00125.png b/doc/html/a00121.png
similarity index 100%
copy from doc/html/a00125.png
copy to doc/html/a00121.png
diff --git a/doc/html/a00122.html b/doc/html/a00122.html
index b45ce71..4c895b6 100644
--- a/doc/html/a00122.html
+++ b/doc/html/a00122.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface6::memory_pool_allocator< T, P >::rebind< U > Struct Template Reference</title>
+<title>tbb::flow::interface9::internal::reservable_predecessor_cache< T, M > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,32 +33,21 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00093.html">memory_pool_allocator</a></li><li class="navelem"><a class="el" href="a00122.html">rebind</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00122.html">reservable_predecessor_cache</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="summary">
-<a href="#pub-types">Public Types</a> |
-<a href="a00395.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface6::memory_pool_allocator< T, P >::rebind< U > Struct Template Reference</div>  </div>
+<div class="title">tbb::flow::interface9::internal::reservable_predecessor_cache< T, M > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a1e9f9c6f0163df16980598fcafca665b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e9f9c6f0163df16980598fcafca665b"></a>
-typedef <a class="el" href="a00093.html">memory_pool_allocator</a><br class="typebreak"/>
-< U, P > </td><td class="memItemRight" valign="bottom"><b>other</b></td></tr>
-<tr class="separator:a1e9f9c6f0163df16980598fcafca665b"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<hr/>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00198.html">memory_pool.h</a></li>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00188.html">flow_graph.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00123.html b/doc/html/a00123.html
index fe2bdc2..abc43ea 100644
--- a/doc/html/a00123.html
+++ b/doc/html/a00123.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface6::memory_pool_allocator< void, P >::rebind< U > Struct Template Reference</title>
+<title>tbb::flow::interface9::internal::round_robin_cache< T, M > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,32 +33,21 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00094.html">memory_pool_allocator< void, P ></a></li><li class="navelem"><a class="el" href="a00123.html">rebind</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00123.html">round_robin_cache</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="summary">
-<a href="#pub-types">Public Types</a> |
-<a href="a00397.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface6::memory_pool_allocator< void, P >::rebind< U > Struct Template Reference</div>  </div>
+<div class="title">tbb::flow::interface9::internal::round_robin_cache< T, M > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a4a2190850873b9f2bc63c28dfd336dd9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a2190850873b9f2bc63c28dfd336dd9"></a>
-typedef <a class="el" href="a00093.html">memory_pool_allocator</a><br class="typebreak"/>
-< U, P > </td><td class="memItemRight" valign="bottom"><b>other</b></td></tr>
-<tr class="separator:a4a2190850873b9f2bc63c28dfd336dd9"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<hr/>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00198.html">memory_pool.h</a></li>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00188.html">flow_graph.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00124.html b/doc/html/a00124.html
index dbd50e3..8cee035 100644
--- a/doc/html/a00124.html
+++ b/doc/html/a00124.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::receiver< T > Class Template Reference</title>
+<title>tbb::flow::interface9::run_and_put_task< R, B > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,145 +33,21 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00124.html">receiver</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00124.html">run_and_put_task</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="summary">
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-methods">Protected Member Functions</a> |
-<a href="#friends">Friends</a> |
-<a href="a00329.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::receiver< T > Class Template Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
+<div class="title">tbb::flow::interface9::run_and_put_task< R, B > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Pure virtual template class that defines a receiver of messages of type T.  
- <a href="a00124.html#details">More...</a></p>
-
-<p><code>#include <flow_graph.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::receiver< T >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00124.png" usemap="#tbb::flow::interface7::receiver< T >_map" alt=""/>
-  <map id="tbb::flow::interface7::receiver< T >_map" name="tbb::flow::interface7::receiver< T >_map">
-<area href="a00028.html" title="Forwards messages of type T to all successors. " alt="tbb::flow::interface7::broadcast_node< T >" shape="rect" coords="0,56,352,80"/>
-<area href="a00030.html" title="Forwards messages in arbitrary order. " alt="tbb::flow::interface7::buffer_node< T, A >" shape="rect" coords="362,56,714,80"/>
-<area href="a00091.html" title="Forwards messages only if the threshold has not been reached. " alt="tbb::flow::interface7::limiter_node< T >" shape="rect" coords="724,56,1076,80"/>
-<area href="a00104.html" alt="tbb::flow::interface7::overwrite_node< T >" shape="rect" coords="1086,56,1438,80"/>
-<area href="a00109.html" title="Forwards messages in priority order. " alt="tbb::flow::interface7::priority_queue_node< T, Compare, A >" shape="rect" coords="181,112,533,136"/>
-<area href="a00110.html" title="Forwards messages in FIFO order. " alt="tbb::flow::interface7::queue_node< T, A >" shape="rect" coords="543,112,895,136"/>
-<area href="a00176.html" alt="tbb::flow::interface7::write_once_node< T >" shape="rect" coords="1086,112,1438,136"/>
-<area href="a00143.html" title="Forwards messages in sequence order. " alt="tbb::flow::interface7::sequencer_node< T, A >" shape="rect" coords="543,168,895,192"/>
-</map>
- </div></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a16eccc851b858604344bb8f1bb9eedc8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16eccc851b858604344bb8f1bb9eedc8"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a></td></tr>
-<tr class="memdesc:a16eccc851b858604344bb8f1bb9eedc8"><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br/></td></tr>
-<tr class="separator:a16eccc851b858604344bb8f1bb9eedc8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afbadf5511bd568d283040cd88bd4e81e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbadf5511bd568d283040cd88bd4e81e"></a>
-typedef <a class="el" href="a00142.html">sender</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a></td></tr>
-<tr class="memdesc:afbadf5511bd568d283040cd88bd4e81e"><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br/></td></tr>
-<tr class="separator:afbadf5511bd568d283040cd88bd4e81e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00d44512fd61d416e6f615e88063d038"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00d44512fd61d416e6f615e88063d038"></a>
-typedef <br class="typebreak"/>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> > </td><td class="memItemRight" valign="bottom"><b>built_predecessors_type</b></td></tr>
-<tr class="separator:a00d44512fd61d416e6f615e88063d038"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2cc119d6dff16073fc5f0d4855a9e4b7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2cc119d6dff16073fc5f0d4855a9e4b7"></a>
-typedef <br class="typebreak"/>
-built_predecessors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>predecessor_list_type</b></td></tr>
-<tr class="separator:a2cc119d6dff16073fc5f0d4855a9e4b7"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a733889a9053478ef2fb2528e2205bf07"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a733889a9053478ef2fb2528e2205bf07"></a>
-virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a733889a9053478ef2fb2528e2205bf07">~receiver</a> ()</td></tr>
-<tr class="memdesc:a733889a9053478ef2fb2528e2205bf07"><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br/></td></tr>
-<tr class="separator:a733889a9053478ef2fb2528e2205bf07"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aee5067bb4f4b71ffa786c1b33cb9aa6a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee5067bb4f4b71ffa786c1b33cb9aa6a"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#aee5067bb4f4b71ffa786c1b33cb9aa6a">try_put</a> (const T &t)</td></tr>
-<tr class="memdesc:aee5067bb4f4b71ffa786c1b33cb9aa6a"><td class="mdescLeft"> </td><td class="mdescRight">Put an item to the receiver. <br/></td></tr>
-<tr class="separator:aee5067bb4f4b71ffa786c1b33cb9aa6a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a16427aa709505de93ffe0d79136e4251"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16427aa709505de93ffe0d79136e4251"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a16427aa709505de93ffe0d79136e4251">register_predecessor</a> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &)</td></tr>
-<tr class="memdesc:a16427aa709505de93ffe0d79136e4251"><td class="mdescLeft"> </td><td class="mdescRight">Add a predecessor to the node. <br/></td></tr>
-<tr class="separator:a16427aa709505de93ffe0d79136e4251"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a55adae6228bbdc1539695e1ec20e9762"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a55adae6228bbdc1539695e1ec20e9762"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a55adae6228bbdc1539695e1ec20e9762">remove_predecessor</a> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &)</td></tr>
-<tr class="memdesc:a55adae6228bbdc1539695e1ec20e9762"><td class="mdescLeft"> </td><td class="mdescRight">Remove a predecessor from the node. <br/></td></tr>
-<tr class="separator:a55adae6228bbdc1539695e1ec20e9762"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4c4f4848dd812c3c6607f3d73c07023c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c4f4848dd812c3c6607f3d73c07023c"></a>
-virtual <a class="el" href="a00059.html">built_predecessors_type</a> & </td><td class="memItemRight" valign="bottom"><b>built_predecessors</b> ()=0</td></tr>
-<tr class="separator:a4c4f4848dd812c3c6607f3d73c07023c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6eb0f353746d17af003c9a87fb47a5a6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6eb0f353746d17af003c9a87fb47a5a6"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_predecessor</b> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &)=0</td></tr>
-<tr class="separator:a6eb0f353746d17af003c9a87fb47a5a6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a27b36a8e03fa43f74ebd796f73ecfbfc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a27b36a8e03fa43f74ebd796f73ecfbfc"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_delete_built_predecessor</b> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &)=0</td></tr>
-<tr class="separator:a27b36a8e03fa43f74ebd796f73ecfbfc"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a63273d246d9dd8d259f9cc1eead42eb2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63273d246d9dd8d259f9cc1eead42eb2"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>copy_predecessors</b> (predecessor_list_type &)=0</td></tr>
-<tr class="separator:a63273d246d9dd8d259f9cc1eead42eb2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a708474643ea80fe4a05bde83865e8f6f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a708474643ea80fe4a05bde83865e8f6f"></a>
-virtual size_t </td><td class="memItemRight" valign="bottom"><b>predecessor_count</b> ()=0</td></tr>
-<tr class="separator:a708474643ea80fe4a05bde83865e8f6f"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:a3581a59d59476fffdc7caeea06c26371"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3581a59d59476fffdc7caeea06c26371"></a>
-virtual task * </td><td class="memItemRight" valign="bottom"><b>try_put_task</b> (const T &t)=0</td></tr>
-<tr class="separator:a3581a59d59476fffdc7caeea06c26371"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac902b1e09eea9748223eb50dc38d3575"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac902b1e09eea9748223eb50dc38d3575"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>reset_receiver</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0</td></tr>
-<tr class="separator:ac902b1e09eea9748223eb50dc38d3575"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae91eab3e06d4139ac38f143c74fe9eab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae91eab3e06d4139ac38f143c74fe9eab"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><b>is_continue_receiver</b> ()</td></tr>
-<tr class="separator:ae91eab3e06d4139ac38f143c74fe9eab"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplParams" colspan="2"><a class="anchor" id="abaf9bf74ca5f2854d09f5f07337280eb"></a>
-template<typename R , typename B > </td></tr>
-<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00124.html#abaf9bf74ca5f2854d09f5f07337280eb">run_and_put_task</a></td></tr>
-<tr class="memdesc:abaf9bf74ca5f2854d09f5f07337280eb"><td class="mdescLeft"> </td><td class="mdescRight">put item to successor; return task to run the successor if possible. <br/></td></tr>
-<tr class="separator:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1360e38efe396058978cf3754ad620f5"></a>
-template<typename X , typename Y > </td></tr>
-<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::broadcast_cache</b></td></tr>
-<tr class="separator:a1360e38efe396058978cf3754ad620f5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplParams" colspan="2"><a class="anchor" id="acbd9ac2610587a99cd7d43344297cc49"></a>
-template<typename X , typename Y > </td></tr>
-<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::round_robin_cache</b></td></tr>
-<tr class="separator:acbd9ac2610587a99cd7d43344297cc49"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a05ec930a348f7eed564236d00edbda24"><td class="memTemplParams" colspan="2"><a class="anchor" id="a05ec930a348f7eed564236d00edbda24"></a>
-template<typename U > </td></tr>
-<tr class="memitem:a05ec930a348f7eed564236d00edbda24"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00124.html#a05ec930a348f7eed564236d00edbda24">limiter_node</a></td></tr>
-<tr class="memdesc:a05ec930a348f7eed564236d00edbda24"><td class="mdescLeft"> </td><td class="mdescRight">put receiver back in initial state <br/></td></tr>
-<tr class="separator:a05ec930a348f7eed564236d00edbda24"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a73cd25db4e6e9497940262f70f3ffc54"><td class="memTemplParams" colspan="2"><a class="anchor" id="a73cd25db4e6e9497940262f70f3ffc54"></a>
-template<typename TT , typename M > </td></tr>
-<tr class="memitem:a73cd25db4e6e9497940262f70f3ffc54"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::successor_cache</b></td></tr>
-<tr class="separator:a73cd25db4e6e9497940262f70f3ffc54"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename T><br/>
-class tbb::flow::interface7::receiver< T ></h3>
-
-<p>Pure virtual template class that defines a receiver of messages of type T. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00188.html">flow_graph.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00124.png b/doc/html/a00124.png
deleted file mode 100644
index 80adf90..0000000
Binary files a/doc/html/a00124.png and /dev/null differ
diff --git a/doc/html/a00125.html b/doc/html/a00125.html
index 8ac2caa..72d2ad2 100644
--- a/doc/html/a00125.html
+++ b/doc/html/a00125.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::recursive_mutex Class Reference</title>
+<title>tbb::interface6::runtime_loader Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,127 +33,286 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00125.html">recursive_mutex</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00125.html">runtime_loader</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-static-attribs">Static Public Attributes</a> |
-<a href="#friends">Friends</a> |
-<a href="a00296.html">List of all members</a>  </div>
+<a href="a00388.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::recursive_mutex Class Reference<div class="ingroups"><a class="el" href="a00258.html">Synchronization</a></div></div>  </div>
+<div class="title">tbb::interface6::runtime_loader Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p><code>#include <recursive_mutex.h></code></p>
+<p>Load TBB at runtime.  
+ <a href="a00125.html#details">More...</a></p>
+
+<p><code>#include <runtime_loader.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::recursive_mutex:</div>
+Inheritance diagram for tbb::interface6::runtime_loader:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00125.png" usemap="#tbb::recursive_mutex_map" alt=""/>
-  <map id="tbb::recursive_mutex_map" name="tbb::recursive_mutex_map">
+  <img src="a00125.png" usemap="#tbb::interface6::runtime_loader_map" alt=""/>
+  <map id="tbb::interface6::runtime_loader_map" name="tbb::interface6::runtime_loader_map">
 </map>
  </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html">scoped_lock</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00139.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:a3d40334b0e26d5addfde5596e7f9aaec"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d40334b0e26d5addfde5596e7f9aaec"></a>
-typedef LPCRITICAL_SECTION </td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html#a3d40334b0e26d5addfde5596e7f9aaec">native_handle_type</a></td></tr>
-<tr class="memdesc:a3d40334b0e26d5addfde5596e7f9aaec"><td class="mdescLeft"> </td><td class="mdescRight">Return native_handle. <br/></td></tr>
-<tr class="separator:a3d40334b0e26d5addfde5596e7f9aaec"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a59f90e65656fec5a07e375c6e7cd39f3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59f90e65656fec5a07e375c6e7cd39f3"></a>
-typedef pthread_mutex_t * </td><td class="memItemRight" valign="bottom"><b>native_handle_type</b></td></tr>
-<tr class="separator:a59f90e65656fec5a07e375c6e7cd39f3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab85c82f9c0ccd91905f2795a79ac1295"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html#ab85c82f9c0ccd91905f2795a79ac1295">error_mode</a> { <a class="el" href="a00125.html#ab85c82f9c0ccd91905f2795a79ac1295af9c9137d6acdb0fd37f1a92b5cdaeb36">em_status</a>, 
+<a class="el" href="a00125.html#ab85c82f9c0ccd91905f2795a79ac1295a17ec1019cffa635146eaefb042e28a2c">em_throw</a>, 
+<a class="el" href="a00125.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35">em_abort</a>
+ }</td></tr>
+<tr class="memdesc:ab85c82f9c0ccd91905f2795a79ac1295"><td class="mdescLeft"> </td><td class="mdescRight">Error mode constants.  <a href="a00125.html#ab85c82f9c0ccd91905f2795a79ac1295">More...</a><br/></td></tr>
+<tr class="separator:ab85c82f9c0ccd91905f2795a79ac1295"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a264674772d9f4240d89aa9d939c1eef7"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7">error_code</a> { <br/>
+  <a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7afc7eba28f2fc936312f041cf85276434">ec_ok</a>, 
+<a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7a670e4d0a5a3c1bbcdff9e5ee16dc9c01">ec_bad_call</a>, 
+<a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7afd928f63eb3da0980e746d58374b07c3">ec_bad_arg</a>, 
+<a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7a71f874957c0322f499ba764dd0bb8732">ec_bad_lib</a>, 
+<br/>
+  <a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7aae7497a49ceae69d06d6ab9fef636064">ec_bad_ver</a>, 
+<a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7a5e694560f3ada80d2cc25881b5ae43dd">ec_no_lib</a>
+<br/>
+ }</td></tr>
+<tr class="memdesc:a264674772d9f4240d89aa9d939c1eef7"><td class="mdescLeft"> </td><td class="mdescRight">Error codes.  <a href="a00125.html#a264674772d9f4240d89aa9d939c1eef7">More...</a><br/></td></tr>
+<tr class="separator:a264674772d9f4240d89aa9d939c1eef7"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a47eb6e7e7ffa5d35341125792b17236b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a47eb6e7e7ffa5d35341125792b17236b"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html#a47eb6e7e7ffa5d35341125792b17236b">recursive_mutex</a> ()</td></tr>
-<tr class="memdesc:a47eb6e7e7ffa5d35341125792b17236b"><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired <a class="el" href="a00125.html">recursive_mutex</a>. <br/></td></tr>
-<tr class="separator:a47eb6e7e7ffa5d35341125792b17236b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:adea997b45dc4a360f38d14bde9c991f2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adea997b45dc4a360f38d14bde9c991f2"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html#adea997b45dc4a360f38d14bde9c991f2">lock</a> ()</td></tr>
-<tr class="memdesc:adea997b45dc4a360f38d14bde9c991f2"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock. <br/></td></tr>
-<tr class="separator:adea997b45dc4a360f38d14bde9c991f2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8b181d9aaa95444145222cfe206e8094"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html#a8b181d9aaa95444145222cfe206e8094">try_lock</a> ()</td></tr>
-<tr class="memdesc:a8b181d9aaa95444145222cfe206e8094"><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring lock (non-blocking)  <a href="#a8b181d9aaa95444145222cfe206e8094">More...</a><br/></td></tr>
-<tr class="separator:a8b181d9aaa95444145222cfe206e8094"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af57e8d25e0e7614e98bcfa50bc9416c8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af57e8d25e0e7614e98bcfa50bc9416c8"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html#af57e8d25e0e7614e98bcfa50bc9416c8">unlock</a> ()</td></tr>
-<tr class="memdesc:af57e8d25e0e7614e98bcfa50bc9416c8"><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br/></td></tr>
-<tr class="separator:af57e8d25e0e7614e98bcfa50bc9416c8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a050ca2a8d3b5c98f9d6c1252856436db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a050ca2a8d3b5c98f9d6c1252856436db"></a>
-<a class="el" href="a00125.html#a3d40334b0e26d5addfde5596e7f9aaec">native_handle_type</a> </td><td class="memItemRight" valign="bottom"><b>native_handle</b> ()</td></tr>
-<tr class="separator:a050ca2a8d3b5c98f9d6c1252856436db"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr class="memitem:a668511b8520c41a342c038ba26ce70ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a668511b8520c41a342c038ba26ce70ff"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
-<tr class="separator:a668511b8520c41a342c038ba26ce70ff"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2817cf2c1a7875590548f49a834ca668"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2817cf2c1a7875590548f49a834ca668"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = true</td></tr>
-<tr class="separator:a2817cf2c1a7875590548f49a834ca668"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abcc4a830c307cb4d25311550a527fe4d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abcc4a830c307cb4d25311550a527fe4d"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = false</td></tr>
-<tr class="separator:abcc4a830c307cb4d25311550a527fe4d"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:afcf922650b2fd9d76b7b939d8511bbd8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afcf922650b2fd9d76b7b939d8511bbd8"></a>
-class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
-<tr class="separator:afcf922650b2fd9d76b7b939d8511bbd8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2f87eaf99564c705aa140f2eb8848eaa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2f87eaf99564c705aa140f2eb8848eaa"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html#a2f87eaf99564c705aa140f2eb8848eaa">runtime_loader</a> (<a class="el" href="a00125.html#ab85c82f9c0ccd91905f2795a79ac1295">error_mode</a> mode=<a class="el" href="a00125.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35">em_abort</a>)</td></tr>
+<tr class="memdesc:a2f87eaf99564c705aa140f2eb8848eaa"><td class="mdescLeft"> </td><td class="mdescRight">Initialize object but do not load TBB. <br/></td></tr>
+<tr class="separator:a2f87eaf99564c705aa140f2eb8848eaa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3e0932074d2f3ad04605e7e5da88c561"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html#a3e0932074d2f3ad04605e7e5da88c561">runtime_loader</a> (char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX, <a class="el" href="a00125.html#ab85c82f9c0ccd91905f2795a79ac1295">error_mode</a> mode=<a class="el" href="a00125.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a42 [...]
+<tr class="memdesc:a3e0932074d2f3ad04605e7e5da88c561"><td class="mdescLeft"> </td><td class="mdescRight">Initialize object and load TBB.  <a href="#a3e0932074d2f3ad04605e7e5da88c561">More...</a><br/></td></tr>
+<tr class="separator:a3e0932074d2f3ad04605e7e5da88c561"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa3b96f53e165e3d692c3c36292ba0737"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa3b96f53e165e3d692c3c36292ba0737"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html#aa3b96f53e165e3d692c3c36292ba0737">~runtime_loader</a> ()</td></tr>
+<tr class="memdesc:aa3b96f53e165e3d692c3c36292ba0737"><td class="mdescLeft"> </td><td class="mdescRight">Destroy object. <br/></td></tr>
+<tr class="separator:aa3b96f53e165e3d692c3c36292ba0737"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae2949e9adcac56a2cb9864437be8e22e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7">error_code</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html#ae2949e9adcac56a2cb9864437be8e22e">load</a> (char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX)</td></tr>
+<tr class="memdesc:ae2949e9adcac56a2cb9864437be8e22e"><td class="mdescLeft"> </td><td class="mdescRight">Load TBB.  <a href="#ae2949e9adcac56a2cb9864437be8e22e">More...</a><br/></td></tr>
+<tr class="separator:ae2949e9adcac56a2cb9864437be8e22e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a85bf9ee021a2076a3ac7cfd70aae7345"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7">error_code</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html#a85bf9ee021a2076a3ac7cfd70aae7345">status</a> ()</td></tr>
+<tr class="memdesc:a85bf9ee021a2076a3ac7cfd70aae7345"><td class="mdescLeft"> </td><td class="mdescRight">Report status.  <a href="#a85bf9ee021a2076a3ac7cfd70aae7345">More...</a><br/></td></tr>
+<tr class="separator:a85bf9ee021a2076a3ac7cfd70aae7345"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Mutex that allows recursive mutex acquisition. </p>
-</div><h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="a8b181d9aaa95444145222cfe206e8094"></a>
+<div class="textblock"><p>Load TBB at runtime. </p>
+<p><b>Usage:</b> </p>
+<p>In source code:</p>
+<div class="fragment"><div class="line"><span class="preprocessor">#include "tbb/runtime_loader.h"</span></div>
+<div class="line"></div>
+<div class="line"><span class="keywordtype">char</span> <span class="keyword">const</span> * path[] = { <span class="stringliteral">"<install dir>/lib/ia32"</span>, NULL };</div>
+<div class="line">tbb::runtime_loader loader( path );</div>
+<div class="line"></div>
+<div class="line"><span class="comment">// Now use TBB.</span></div>
+</div><!-- fragment --><p>Link with <code>tbbproxy.lib</code> (or <code>libtbbproxy.a</code>) instead of <code>tbb.lib</code> (<code>libtbb.dylib</code>, <code>libtbb.so</code>).</p>
+<p>TBB library will be loaded at runtime from <code></code> <install dir>="">/lib/ia32 directory.</p>
+<p><b>Attention:</b> </p>
+<p>All <code><a class="el" href="a00125.html" title="Load TBB at runtime. ">runtime_loader</a></code> objects (in the same module, i.e. exe or dll) share some global state. The most noticeable piece of global state is loaded TBB library. There are some implications: </p>
+<pre class="fragment">-   Only one TBB library can be loaded per module.
+
+-   If one object has already loaded TBB library, another object will not load TBB.
+    If the loaded TBB library is suitable for the second object, both will use TBB
+    cooperatively, otherwise the second object will report an error.
+
+-   \c runtime_loader objects will not work (correctly) in parallel due to absence of
+    synchronization.</pre> </div><h2 class="groupheader">Member Enumeration Documentation</h2>
+<a class="anchor" id="a264674772d9f4240d89aa9d939c1eef7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7">tbb::interface6::runtime_loader::error_code</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Error codes. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="a264674772d9f4240d89aa9d939c1eef7afc7eba28f2fc936312f041cf85276434"></a>ec_ok</em> </td><td class="fielddoc">
+<p>No errors. </p>
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a264674772d9f4240d89aa9d939c1eef7a670e4d0a5a3c1bbcdff9e5ee16dc9c01"></a>ec_bad_call</em> </td><td class="fielddoc">
+<p>Invalid function call (e. g. <a class="el" href="a00125.html#ae2949e9adcac56a2cb9864437be8e22e" title="Load TBB. ">load()</a> called when TBB is already loaded). </p>
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a264674772d9f4240d89aa9d939c1eef7afd928f63eb3da0980e746d58374b07c3"></a>ec_bad_arg</em> </td><td class="fielddoc">
+<p>Invalid argument passed. </p>
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a264674772d9f4240d89aa9d939c1eef7a71f874957c0322f499ba764dd0bb8732"></a>ec_bad_lib</em> </td><td class="fielddoc">
+<p>Invalid library found (e. g. <code>TBB_runtime_version</code> symbol not found). </p>
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a264674772d9f4240d89aa9d939c1eef7aae7497a49ceae69d06d6ab9fef636064"></a>ec_bad_ver</em> </td><td class="fielddoc">
+<p>TBB found but version is not suitable. </p>
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a264674772d9f4240d89aa9d939c1eef7a5e694560f3ada80d2cc25881b5ae43dd"></a>ec_no_lib</em> </td><td class="fielddoc">
+<p>No suitable TBB library found. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="ab85c82f9c0ccd91905f2795a79ac1295"></a>
 <div class="memitem">
 <div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">bool tbb::recursive_mutex::try_lock </td>
+          <td class="memname">enum <a class="el" href="a00125.html#ab85c82f9c0ccd91905f2795a79ac1295">tbb::interface6::runtime_loader::error_mode</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Error mode constants. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="ab85c82f9c0ccd91905f2795a79ac1295af9c9137d6acdb0fd37f1a92b5cdaeb36"></a>em_status</em> </td><td class="fielddoc">
+<p>Save status of operation and continue. </p>
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="ab85c82f9c0ccd91905f2795a79ac1295a17ec1019cffa635146eaefb042e28a2c"></a>em_throw</em> </td><td class="fielddoc">
+<p>Throw an exception of tbb::runtime_loader::error_code type. </p>
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35"></a>em_abort</em> </td><td class="fielddoc">
+<p>Print message to <code>stderr</code> and call <code>abort()</code>. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Constructor & Destructor Documentation</h2>
+<a class="anchor" id="a3e0932074d2f3ad04605e7e5da88c561"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">tbb::interface6::runtime_loader::runtime_loader </td>
           <td>(</td>
-          <td class="paramname">)</td><td></td>
+          <td class="paramtype">char const * </td>
+          <td class="paramname"><em>path</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>min_ver</em> = <code>TBB_INTERFACE_VERSION</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>max_ver</em> = <code>INT_MAX</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
           <td></td>
+          <td class="paramtype"><a class="el" href="a00125.html#ab85c82f9c0ccd91905f2795a79ac1295">error_mode</a> </td>
+          <td class="paramname"><em>mode</em> = <code><a class="el" href="a00125.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35">em_abort</a></code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Initialize object and load TBB. </p>
+<p>See <a class="el" href="a00125.html#ae2949e9adcac56a2cb9864437be8e22e" title="Load TBB. ">load()</a> for details.</p>
+<p>If error mode is <code>em_status</code>, call <a class="el" href="a00125.html#a85bf9ee021a2076a3ac7cfd70aae7345" title="Report status. ">status()</a> to check whether TBB was loaded or not. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">path</td><td>List of directories to search TBB in. </td></tr>
+    <tr><td class="paramname">min_ver</td><td>Minimal suitable version of TBB. </td></tr>
+    <tr><td class="paramname">max_ver</td><td>Maximal suitable version of TBB. </td></tr>
+    <tr><td class="paramname">mode</td><td>Error mode for this object. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="ae2949e9adcac56a2cb9864437be8e22e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7">error_code</a> tbb::interface6::runtime_loader::load </td>
+          <td>(</td>
+          <td class="paramtype">char const * </td>
+          <td class="paramname"><em>path</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>min_ver</em> = <code>TBB_INTERFACE_VERSION</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>max_ver</em> = <code>INT_MAX</code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
         </tr>
       </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
 </div><div class="memdoc">
 
-<p>Try acquiring lock (non-blocking) </p>
-<p>Return true if lock acquired; false otherwise. </p>
+<p>Load TBB. </p>
+<p>The method searches the directories specified in <code>path</code>[] array for the TBB library. When the library is found, it is loaded and its version is checked. If the version is not suitable, the library is unloaded, and the search continues.</p>
+<p><b>Note:</b> </p>
+<p>For security reasons, avoid using relative directory names. For example, never load TBB from current (<code>"."</code>), parent (<code>".."</code>) or any other relative directory (like <code>"lib"</code> ). Use only absolute directory names (e. g. "/usr/local/lib").</p>
+<p>For the same security reasons, avoid using system default directories (<code>""</code>) on Windows. (See <a href="http://www.microsoft.com/technet/security/advisory/2269637.mspx">http://www.microsoft.com/technet/security/advisory/2269637.mspx</a> for details.)</p>
+<p>Neglecting these rules may cause your program to execute 3-rd party malicious code.</p>
+<p><b>Errors:</b> </p>
+<ul>
+<li><code>ec_bad_call</code> - TBB already loaded by this object.</li>
+<li><code>ec_bad_arg</code> - <code>min_ver</code> and/or <code>max_ver</code> negative or zero, or <code>min_ver</code> > <code>max_ver</code>.</li>
+<li><code>ec_bad_ver</code> - TBB of unsuitable version already loaded by another object.</li>
+<li><code>ec_no_lib</code> - No suitable library found. </li>
+</ul>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">path</td><td>List of directories to search TBB in. </td></tr>
+    <tr><td class="paramname">min_ver</td><td>Minimal suitable version of TBB. </td></tr>
+    <tr><td class="paramname">max_ver</td><td>Maximal suitable version of TBB. </td></tr>
+  </table>
+  </dd>
+</dl>
 
-<p>References <a class="el" href="a00015.html#a3525dbbac0d4eaedfe18bc57b7760857">tbb::aligned_space< T, N >::begin()</a>.</p>
+</div>
+</div>
+<a class="anchor" id="a85bf9ee021a2076a3ac7cfd70aae7345"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7">error_code</a> tbb::interface6::runtime_loader::status </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
 
-<p>Referenced by <a class="el" href="a00139.html#a160bba506f4033980ddb69ab7a02c4fb">tbb::recursive_mutex::scoped_lock::try_acquire()</a>.</p>
+<p>Report status. </p>
+<p>If error mode is <code>em_status</code>, the function returns status of the last operation. </p>
 
 </div>
 </div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>recursive_mutex.h</li>
+<li>runtime_loader.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00125.png b/doc/html/a00125.png
index 3157a91..56b89a6 100644
Binary files a/doc/html/a00125.png and b/doc/html/a00125.png differ
diff --git a/doc/html/a00126.html b/doc/html/a00126.html
index 3d7d907..46e6efa 100644
--- a/doc/html/a00126.html
+++ b/doc/html/a00126.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::internal::round_robin_cache< T, M > Class Template Reference</title>
+<title>tbb::scalable_allocator< T > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,21 +33,110 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00126.html">round_robin_cache</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00126.html">scalable_allocator</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#pub-types">Public Types</a> |
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="a00293.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::internal::round_robin_cache< T, M > Class Template Reference</div>  </div>
+<div class="title">tbb::scalable_allocator< T > Class Template Reference<div class="ingroups"><a class="el" href="a00254.html">Memory Allocation</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+
+<p>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  
+ <a href="a00126.html#details">More...</a></p>
+
+<p><code>#include <scalable_allocator.h></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00111.html">rebind</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:aa9171ca5fc6dc349ae95a28cd16b504c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa9171ca5fc6dc349ae95a28cd16b504c"></a>
+typedef <br class="typebreak"/>
+internal::allocator_type< T ><br class="typebreak"/>
+::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+<tr class="separator:aa9171ca5fc6dc349ae95a28cd16b504c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af5352e44d6bcde3d0bdf8368acd3c84c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af5352e44d6bcde3d0bdf8368acd3c84c"></a>
+typedef value_type * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+<tr class="separator:af5352e44d6bcde3d0bdf8368acd3c84c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9722dbf8015bed6319bc16996d45546f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9722dbf8015bed6319bc16996d45546f"></a>
+typedef const value_type * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+<tr class="separator:a9722dbf8015bed6319bc16996d45546f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af3c8f5f07f47672c0c97fab799807728"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af3c8f5f07f47672c0c97fab799807728"></a>
+typedef value_type & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+<tr class="separator:af3c8f5f07f47672c0c97fab799807728"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4de1dd8be241f945d464cbef0dd6c5b8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4de1dd8be241f945d464cbef0dd6c5b8"></a>
+typedef const value_type & </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
+<tr class="separator:a4de1dd8be241f945d464cbef0dd6c5b8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac2376f6bacc6dcb3aa37f27a78681e89"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac2376f6bacc6dcb3aa37f27a78681e89"></a>
+typedef size_t </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
+<tr class="separator:ac2376f6bacc6dcb3aa37f27a78681e89"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a751a0d5a410244226f62914cbde260ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a751a0d5a410244226f62914cbde260ff"></a>
+typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
+<tr class="separator:a751a0d5a410244226f62914cbde260ff"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a276a735dca4ba6abbe3b251d4c003ea7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a276a735dca4ba6abbe3b251d4c003ea7"></a>
+ </td><td class="memItemRight" valign="bottom"><b>scalable_allocator</b> (const <a class="el" href="a00126.html">scalable_allocator</a> &)  throw ()</td></tr>
+<tr class="separator:a276a735dca4ba6abbe3b251d4c003ea7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae680426a4dfbd51a7447d12354679c6e"><td class="memTemplParams" colspan="2"><a class="anchor" id="ae680426a4dfbd51a7447d12354679c6e"></a>
+template<typename U > </td></tr>
+<tr class="memitem:ae680426a4dfbd51a7447d12354679c6e"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>scalable_allocator</b> (const <a class="el" href="a00126.html">scalable_allocator</a>< U > &)  throw ()</td></tr>
+<tr class="separator:ae680426a4dfbd51a7447d12354679c6e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a647d824ce9396c3c4cb4450b0c2b7b3c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a647d824ce9396c3c4cb4450b0c2b7b3c"></a>
+pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (reference x) const </td></tr>
+<tr class="separator:a647d824ce9396c3c4cb4450b0c2b7b3c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab30cf9e0d0bef7ba8567edc6efb045e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab30cf9e0d0bef7ba8567edc6efb045e4"></a>
+const_pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (const_reference x) const </td></tr>
+<tr class="separator:ab30cf9e0d0bef7ba8567edc6efb045e4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf24945c12dc0586dfb1f8638daf7838"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf24945c12dc0586dfb1f8638daf7838"></a>
+pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00126.html#acf24945c12dc0586dfb1f8638daf7838">allocate</a> (size_type n, const void *=0)</td></tr>
+<tr class="memdesc:acf24945c12dc0586dfb1f8638daf7838"><td class="mdescLeft"> </td><td class="mdescRight">Allocate space for n objects. <br/></td></tr>
+<tr class="separator:acf24945c12dc0586dfb1f8638daf7838"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0632b19f25e5d5f86f18b3101925f488"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0632b19f25e5d5f86f18b3101925f488"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00126.html#a0632b19f25e5d5f86f18b3101925f488">deallocate</a> (pointer p, size_type)</td></tr>
+<tr class="memdesc:a0632b19f25e5d5f86f18b3101925f488"><td class="mdescLeft"> </td><td class="mdescRight">Free previously allocated block of memory. <br/></td></tr>
+<tr class="separator:a0632b19f25e5d5f86f18b3101925f488"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afaa85d739b466699cf669116fd10d175"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afaa85d739b466699cf669116fd10d175"></a>
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00126.html#afaa85d739b466699cf669116fd10d175">max_size</a> () const   throw ()</td></tr>
+<tr class="memdesc:afaa85d739b466699cf669116fd10d175"><td class="mdescLeft"> </td><td class="mdescRight">Largest value for which method allocate might succeed. <br/></td></tr>
+<tr class="separator:afaa85d739b466699cf669116fd10d175"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0502de23b9ed7c1611703fe725cb4cd3"><td class="memTemplParams" colspan="2"><a class="anchor" id="a0502de23b9ed7c1611703fe725cb4cd3"></a>
+template<typename U , typename... Args> </td></tr>
+<tr class="memitem:a0502de23b9ed7c1611703fe725cb4cd3"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>construct</b> (U *p, Args &&...args)</td></tr>
+<tr class="separator:a0502de23b9ed7c1611703fe725cb4cd3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aecd5a33086abab6860105ef9856e2786"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aecd5a33086abab6860105ef9856e2786"></a>
+void </td><td class="memItemRight" valign="bottom"><b>construct</b> (pointer p, value_type &&value)</td></tr>
+<tr class="separator:aecd5a33086abab6860105ef9856e2786"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a13115cd358c7be350dbeb5271181ae26"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a13115cd358c7be350dbeb5271181ae26"></a>
+void </td><td class="memItemRight" valign="bottom"><b>construct</b> (pointer p, const value_type &value)</td></tr>
+<tr class="separator:a13115cd358c7be350dbeb5271181ae26"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac79ddb098880d8bde6097ac11f641188"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac79ddb098880d8bde6097ac11f641188"></a>
+void </td><td class="memItemRight" valign="bottom"><b>destroy</b> (pointer p)</td></tr>
+<tr class="separator:ac79ddb098880d8bde6097ac11f641188"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><h3>template<typename T><br/>
+class tbb::scalable_allocator< T ></h3>
+
+<p>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. </p>
+<p>The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00212.html">scalable_allocator.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00127.html b/doc/html/a00127.html
index 8ec62a0..7b08ace 100644
--- a/doc/html/a00127.html
+++ b/doc/html/a00127.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::run_and_put_task< R, B > Class Template Reference</title>
+<title>tbb::scalable_allocator< void > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,21 +33,53 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00127.html">run_and_put_task</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00127.html">scalable_allocator< void ></a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#pub-types">Public Types</a> |
+<a href="a00295.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::run_and_put_task< R, B > Class Template Reference</div>  </div>
+<div class="title">tbb::scalable_allocator< void > Class Template Reference<div class="ingroups"><a class="el" href="a00254.html">Memory Allocation</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+
+<p>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  
+ <a href="a00127.html#details">More...</a></p>
+
+<p><code>#include <scalable_allocator.h></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00115.html">rebind</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a4220fdea504929811e9c083da3ec24cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4220fdea504929811e9c083da3ec24cd"></a>
+typedef void * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+<tr class="separator:a4220fdea504929811e9c083da3ec24cd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2ae27d63cd7df1dc8d2a47c89aad8bba"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ae27d63cd7df1dc8d2a47c89aad8bba"></a>
+typedef const void * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+<tr class="separator:a2ae27d63cd7df1dc8d2a47c89aad8bba"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a968aea700a5f30ad613a84a474b00ba4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a968aea700a5f30ad613a84a474b00ba4"></a>
+typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+<tr class="separator:a968aea700a5f30ad613a84a474b00ba4"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><h3>template<><br/>
+class tbb::scalable_allocator< void ></h3>
+
+<p>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00212.html">scalable_allocator.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00128.html b/doc/html/a00128.html
index 5317365..d8675aa 100644
--- a/doc/html/a00128.html
+++ b/doc/html/a00128.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface6::runtime_loader Class Reference</title>
+<title>tbb::queuing_mutex::scoped_lock Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,286 +33,94 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00128.html">runtime_loader</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00106.html">queuing_mutex</a></li><li class="navelem"><a class="el" href="a00128.html">scoped_lock</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00402.html">List of all members</a>  </div>
+<a href="a00288.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface6::runtime_loader Class Reference</div>  </div>
+<div class="title">tbb::queuing_mutex::scoped_lock Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>Load TBB at runtime.  
+<p>The scoped locking pattern.  
  <a href="a00128.html#details">More...</a></p>
 
-<p><code>#include <runtime_loader.h></code></p>
+<p><code>#include <queuing_mutex.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::interface6::runtime_loader:</div>
+Inheritance diagram for tbb::queuing_mutex::scoped_lock:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00128.png" usemap="#tbb::interface6::runtime_loader_map" alt=""/>
-  <map id="tbb::interface6::runtime_loader_map" name="tbb::interface6::runtime_loader_map">
+  <img src="a00128.png" usemap="#tbb::queuing_mutex::scoped_lock_map" alt=""/>
+  <map id="tbb::queuing_mutex::scoped_lock_map" name="tbb::queuing_mutex::scoped_lock_map">
 </map>
  </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:ab85c82f9c0ccd91905f2795a79ac1295"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html#ab85c82f9c0ccd91905f2795a79ac1295">error_mode</a> { <a class="el" href="a00128.html#ab85c82f9c0ccd91905f2795a79ac1295af9c9137d6acdb0fd37f1a92b5cdaeb36">em_status</a>, 
-<a class="el" href="a00128.html#ab85c82f9c0ccd91905f2795a79ac1295a17ec1019cffa635146eaefb042e28a2c">em_throw</a>, 
-<a class="el" href="a00128.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35">em_abort</a>
- }</td></tr>
-<tr class="memdesc:ab85c82f9c0ccd91905f2795a79ac1295"><td class="mdescLeft"> </td><td class="mdescRight">Error mode constants.  <a href="a00128.html#ab85c82f9c0ccd91905f2795a79ac1295">More...</a><br/></td></tr>
-<tr class="separator:ab85c82f9c0ccd91905f2795a79ac1295"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a264674772d9f4240d89aa9d939c1eef7"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7">error_code</a> { <br/>
-  <a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7afc7eba28f2fc936312f041cf85276434">ec_ok</a>, 
-<a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7a670e4d0a5a3c1bbcdff9e5ee16dc9c01">ec_bad_call</a>, 
-<a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7afd928f63eb3da0980e746d58374b07c3">ec_bad_arg</a>, 
-<a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7a71f874957c0322f499ba764dd0bb8732">ec_bad_lib</a>, 
-<br/>
-  <a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7aae7497a49ceae69d06d6ab9fef636064">ec_bad_ver</a>, 
-<a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7a5e694560f3ada80d2cc25881b5ae43dd">ec_no_lib</a>
-<br/>
- }</td></tr>
-<tr class="memdesc:a264674772d9f4240d89aa9d939c1eef7"><td class="mdescLeft"> </td><td class="mdescRight">Error codes.  <a href="a00128.html#a264674772d9f4240d89aa9d939c1eef7">More...</a><br/></td></tr>
-<tr class="separator:a264674772d9f4240d89aa9d939c1eef7"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a2f87eaf99564c705aa140f2eb8848eaa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2f87eaf99564c705aa140f2eb8848eaa"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html#a2f87eaf99564c705aa140f2eb8848eaa">runtime_loader</a> (<a class="el" href="a00128.html#ab85c82f9c0ccd91905f2795a79ac1295">error_mode</a> mode=<a class="el" href="a00128.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35">em_abort</a>)</td></tr>
-<tr class="memdesc:a2f87eaf99564c705aa140f2eb8848eaa"><td class="mdescLeft"> </td><td class="mdescRight">Initialize object but do not load TBB. <br/></td></tr>
-<tr class="separator:a2f87eaf99564c705aa140f2eb8848eaa"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3e0932074d2f3ad04605e7e5da88c561"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html#a3e0932074d2f3ad04605e7e5da88c561">runtime_loader</a> (char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX, <a class="el" href="a00128.html#ab85c82f9c0ccd91905f2795a79ac1295">error_mode</a> mode=<a class="el" href="a00128.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a42 [...]
-<tr class="memdesc:a3e0932074d2f3ad04605e7e5da88c561"><td class="mdescLeft"> </td><td class="mdescRight">Initialize object and load TBB.  <a href="#a3e0932074d2f3ad04605e7e5da88c561">More...</a><br/></td></tr>
-<tr class="separator:a3e0932074d2f3ad04605e7e5da88c561"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa3b96f53e165e3d692c3c36292ba0737"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa3b96f53e165e3d692c3c36292ba0737"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html#aa3b96f53e165e3d692c3c36292ba0737">~runtime_loader</a> ()</td></tr>
-<tr class="memdesc:aa3b96f53e165e3d692c3c36292ba0737"><td class="mdescLeft"> </td><td class="mdescRight">Destroy object. <br/></td></tr>
-<tr class="separator:aa3b96f53e165e3d692c3c36292ba0737"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae2949e9adcac56a2cb9864437be8e22e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7">error_code</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html#ae2949e9adcac56a2cb9864437be8e22e">load</a> (char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX)</td></tr>
-<tr class="memdesc:ae2949e9adcac56a2cb9864437be8e22e"><td class="mdescLeft"> </td><td class="mdescRight">Load TBB.  <a href="#ae2949e9adcac56a2cb9864437be8e22e">More...</a><br/></td></tr>
-<tr class="separator:ae2949e9adcac56a2cb9864437be8e22e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a85bf9ee021a2076a3ac7cfd70aae7345"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7">error_code</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html#a85bf9ee021a2076a3ac7cfd70aae7345">status</a> ()</td></tr>
-<tr class="memdesc:a85bf9ee021a2076a3ac7cfd70aae7345"><td class="mdescLeft"> </td><td class="mdescRight">Report status.  <a href="#a85bf9ee021a2076a3ac7cfd70aae7345">More...</a><br/></td></tr>
-<tr class="separator:a85bf9ee021a2076a3ac7cfd70aae7345"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0afe0107eb0aae613e726f67624d2fca"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html#a0afe0107eb0aae613e726f67624d2fca">scoped_lock</a> ()</td></tr>
+<tr class="memdesc:a0afe0107eb0aae613e726f67624d2fca"><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex.  <a href="#a0afe0107eb0aae613e726f67624d2fca">More...</a><br/></td></tr>
+<tr class="separator:a0afe0107eb0aae613e726f67624d2fca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa82d9da0dcfe5b21f1c08473f8223105"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa82d9da0dcfe5b21f1c08473f8223105"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html#aa82d9da0dcfe5b21f1c08473f8223105">scoped_lock</a> (<a class="el" href="a00106.html">queuing_mutex</a> &m)</td></tr>
+<tr class="memdesc:aa82d9da0dcfe5b21f1c08473f8223105"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br/></td></tr>
+<tr class="separator:aa82d9da0dcfe5b21f1c08473f8223105"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a469ec43836a8dd250ce0a22b02945630"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a469ec43836a8dd250ce0a22b02945630"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html#a469ec43836a8dd250ce0a22b02945630">~scoped_lock</a> ()</td></tr>
+<tr class="memdesc:a469ec43836a8dd250ce0a22b02945630"><td class="mdescLeft"> </td><td class="mdescRight">Release lock (if lock is held). <br/></td></tr>
+<tr class="separator:a469ec43836a8dd250ce0a22b02945630"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abf8aa7ccd48d54dcb53665700a17d02a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abf8aa7ccd48d54dcb53665700a17d02a"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html#abf8aa7ccd48d54dcb53665700a17d02a">acquire</a> (<a class="el" href="a00106.html">queuing_mutex</a> &m)</td></tr>
+<tr class="memdesc:abf8aa7ccd48d54dcb53665700a17d02a"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br/></td></tr>
+<tr class="separator:abf8aa7ccd48d54dcb53665700a17d02a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab4800ba9e743cd91f152036a6689b0e9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab4800ba9e743cd91f152036a6689b0e9"></a>
+bool __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html#ab4800ba9e743cd91f152036a6689b0e9">try_acquire</a> (<a class="el" href="a00106.html">queuing_mutex</a> &m)</td></tr>
+<tr class="memdesc:ab4800ba9e743cd91f152036a6689b0e9"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex if free (i.e. non-blocking) <br/></td></tr>
+<tr class="separator:ab4800ba9e743cd91f152036a6689b0e9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaa065e48b428b8d43e9bb931ba9e6f6c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaa065e48b428b8d43e9bb931ba9e6f6c"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html#aaa065e48b428b8d43e9bb931ba9e6f6c">release</a> ()</td></tr>
+<tr class="memdesc:aaa065e48b428b8d43e9bb931ba9e6f6c"><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br/></td></tr>
+<tr class="separator:aaa065e48b428b8d43e9bb931ba9e6f6c"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Load TBB at runtime. </p>
-<p><b>Usage:</b> </p>
-<p>In source code:</p>
-<div class="fragment"><div class="line"><span class="preprocessor">#include "tbb/runtime_loader.h"</span></div>
-<div class="line"></div>
-<div class="line"><span class="keywordtype">char</span> <span class="keyword">const</span> * path[] = { <span class="stringliteral">"<install dir>/lib/ia32"</span>, NULL };</div>
-<div class="line">tbb::runtime_loader loader( path );</div>
-<div class="line"></div>
-<div class="line"><span class="comment">// Now use TBB.</span></div>
-</div><!-- fragment --><p>Link with <code>tbbproxy.lib</code> (or <code>libtbbproxy.a</code>) instead of <code>tbb.lib</code> (<code>libtbb.dylib</code>, <code>libtbb.so</code>).</p>
-<p>TBB library will be loaded at runtime from <code></code> <install dir>="">/lib/ia32 directory.</p>
-<p><b>Attention:</b> </p>
-<p>All <code><a class="el" href="a00128.html" title="Load TBB at runtime. ">runtime_loader</a></code> objects (in the same module, i.e. exe or dll) share some global state. The most noticeable piece of global state is loaded TBB library. There are some implications: </p>
-<pre class="fragment">-   Only one TBB library can be loaded per module.
-
--   If one object has already loaded TBB library, another object will not load TBB.
-    If the loaded TBB library is suitable for the second object, both will use TBB
-    cooperatively, otherwise the second object will report an error.
-
--   \c runtime_loader objects will not work (correctly) in parallel due to absence of
-    synchronization.</pre> </div><h2 class="groupheader">Member Enumeration Documentation</h2>
-<a class="anchor" id="a264674772d9f4240d89aa9d939c1eef7"></a>
+<div class="textblock"><p>The scoped locking pattern. </p>
+<p>It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks. </p>
+</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
+<a class="anchor" id="a0afe0107eb0aae613e726f67624d2fca"></a>
 <div class="memitem">
 <div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">enum <a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7">tbb::interface6::runtime_loader::error_code</a></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Error codes. </p>
-<table class="fieldtable">
-<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="a264674772d9f4240d89aa9d939c1eef7afc7eba28f2fc936312f041cf85276434"></a>ec_ok</em> </td><td class="fielddoc">
-<p>No errors. </p>
-</td></tr>
-<tr><td class="fieldname"><em><a class="anchor" id="a264674772d9f4240d89aa9d939c1eef7a670e4d0a5a3c1bbcdff9e5ee16dc9c01"></a>ec_bad_call</em> </td><td class="fielddoc">
-<p>Invalid function call (e. g. <a class="el" href="a00128.html#ae2949e9adcac56a2cb9864437be8e22e" title="Load TBB. ">load()</a> called when TBB is already loaded). </p>
-</td></tr>
-<tr><td class="fieldname"><em><a class="anchor" id="a264674772d9f4240d89aa9d939c1eef7afd928f63eb3da0980e746d58374b07c3"></a>ec_bad_arg</em> </td><td class="fielddoc">
-<p>Invalid argument passed. </p>
-</td></tr>
-<tr><td class="fieldname"><em><a class="anchor" id="a264674772d9f4240d89aa9d939c1eef7a71f874957c0322f499ba764dd0bb8732"></a>ec_bad_lib</em> </td><td class="fielddoc">
-<p>Invalid library found (e. g. <code>TBB_runtime_version</code> symbol not found). </p>
-</td></tr>
-<tr><td class="fieldname"><em><a class="anchor" id="a264674772d9f4240d89aa9d939c1eef7aae7497a49ceae69d06d6ab9fef636064"></a>ec_bad_ver</em> </td><td class="fielddoc">
-<p>TBB found but version is not suitable. </p>
-</td></tr>
-<tr><td class="fieldname"><em><a class="anchor" id="a264674772d9f4240d89aa9d939c1eef7a5e694560f3ada80d2cc25881b5ae43dd"></a>ec_no_lib</em> </td><td class="fielddoc">
-<p>No suitable TBB library found. </p>
-</td></tr>
-</table>
-
-</div>
-</div>
-<a class="anchor" id="ab85c82f9c0ccd91905f2795a79ac1295"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="a00128.html#ab85c82f9c0ccd91905f2795a79ac1295">tbb::interface6::runtime_loader::error_mode</a></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Error mode constants. </p>
-<table class="fieldtable">
-<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="ab85c82f9c0ccd91905f2795a79ac1295af9c9137d6acdb0fd37f1a92b5cdaeb36"></a>em_status</em> </td><td class="fielddoc">
-<p>Save status of operation and continue. </p>
-</td></tr>
-<tr><td class="fieldname"><em><a class="anchor" id="ab85c82f9c0ccd91905f2795a79ac1295a17ec1019cffa635146eaefb042e28a2c"></a>em_throw</em> </td><td class="fielddoc">
-<p>Throw an exception of tbb::runtime_loader::error_code type. </p>
-</td></tr>
-<tr><td class="fieldname"><em><a class="anchor" id="ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35"></a>em_abort</em> </td><td class="fielddoc">
-<p>Print message to <code>stderr</code> and call <code>abort()</code>. </p>
-</td></tr>
-</table>
-
-</div>
-</div>
-<h2 class="groupheader">Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a3e0932074d2f3ad04605e7e5da88c561"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">tbb::interface6::runtime_loader::runtime_loader </td>
-          <td>(</td>
-          <td class="paramtype">char const * </td>
-          <td class="paramname"><em>path</em>[], </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>min_ver</em> = <code>TBB_INTERFACE_VERSION</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>max_ver</em> = <code>INT_MAX</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="a00128.html#ab85c82f9c0ccd91905f2795a79ac1295">error_mode</a> </td>
-          <td class="paramname"><em>mode</em> = <code><a class="el" href="a00128.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35">em_abort</a></code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Initialize object and load TBB. </p>
-<p>See <a class="el" href="a00128.html#ae2949e9adcac56a2cb9864437be8e22e" title="Load TBB. ">load()</a> for details.</p>
-<p>If error mode is <code>em_status</code>, call <a class="el" href="a00128.html#a85bf9ee021a2076a3ac7cfd70aae7345" title="Report status. ">status()</a> to check whether TBB was loaded or not. </p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">path</td><td>List of directories to search TBB in. </td></tr>
-    <tr><td class="paramname">min_ver</td><td>Minimal suitable version of TBB. </td></tr>
-    <tr><td class="paramname">max_ver</td><td>Maximal suitable version of TBB. </td></tr>
-    <tr><td class="paramname">mode</td><td>Error mode for this object. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="ae2949e9adcac56a2cb9864437be8e22e"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7">error_code</a> tbb::interface6::runtime_loader::load </td>
-          <td>(</td>
-          <td class="paramtype">char const * </td>
-          <td class="paramname"><em>path</em>[], </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>min_ver</em> = <code>TBB_INTERFACE_VERSION</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>max_ver</em> = <code>INT_MAX</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Load TBB. </p>
-<p>The method searches the directories specified in <code>path</code>[] array for the TBB library. When the library is found, it is loaded and its version is checked. If the version is not suitable, the library is unloaded, and the search continues.</p>
-<p><b>Note:</b> </p>
-<p>For security reasons, avoid using relative directory names. For example, never load TBB from current (<code>"."</code>), parent (<code>".."</code>) or any other relative directory (like <code>"lib"</code> ). Use only absolute directory names (e. g. "/usr/local/lib").</p>
-<p>For the same security reasons, avoid using system default directories (<code>""</code>) on Windows. (See <a href="http://www.microsoft.com/technet/security/advisory/2269637.mspx">http://www.microsoft.com/technet/security/advisory/2269637.mspx</a> for details.)</p>
-<p>Neglecting these rules may cause your program to execute 3-rd party malicious code.</p>
-<p><b>Errors:</b> </p>
-<ul>
-<li><code>ec_bad_call</code> - TBB already loaded by this object.</li>
-<li><code>ec_bad_arg</code> - <code>min_ver</code> and/or <code>max_ver</code> negative or zero, or <code>min_ver</code> > <code>max_ver</code>.</li>
-<li><code>ec_bad_ver</code> - TBB of unsuitable version already loaded by another object.</li>
-<li><code>ec_no_lib</code> - No suitable library found. </li>
-</ul>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">path</td><td>List of directories to search TBB in. </td></tr>
-    <tr><td class="paramname">min_ver</td><td>Minimal suitable version of TBB. </td></tr>
-    <tr><td class="paramname">max_ver</td><td>Maximal suitable version of TBB. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a85bf9ee021a2076a3ac7cfd70aae7345"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7">error_code</a> tbb::interface6::runtime_loader::status </td>
+          <td class="memname">tbb::queuing_mutex::scoped_lock::scoped_lock </td>
           <td>(</td>
           <td class="paramname">)</td><td></td>
           <td></td>
         </tr>
       </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
 </div><div class="memdoc">
 
-<p>Report status. </p>
-<p>If error mode is <code>em_status</code>, the function returns status of the last operation. </p>
+<p>Construct lock that has not acquired a mutex. </p>
+<p>Equivalent to zero-initialization of *this. </p>
 
 </div>
 </div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>runtime_loader.h</li>
+<li>queuing_mutex.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00128.png b/doc/html/a00128.png
index 56b89a6..611457f 100644
Binary files a/doc/html/a00128.png and b/doc/html/a00128.png differ
diff --git a/doc/html/a00129.html b/doc/html/a00129.html
index da60ff5..77ea4d9 100644
--- a/doc/html/a00129.html
+++ b/doc/html/a00129.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::scalable_allocator< T > Class Template Reference</title>
+<title>tbb::null_rw_mutex::scoped_lock Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,110 +33,61 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00129.html">scalable_allocator</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00085.html">null_rw_mutex</a></li><li class="navelem"><a class="el" href="a00129.html">scoped_lock</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00298.html">List of all members</a>  </div>
+<a href="a00280.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::scalable_allocator< T > Class Template Reference<div class="ingroups"><a class="el" href="a00257.html">Memory Allocation</a></div></div>  </div>
+<div class="title">tbb::null_rw_mutex::scoped_lock Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  
+<p>Represents acquisition of a mutex.  
  <a href="a00129.html#details">More...</a></p>
 
-<p><code>#include <scalable_allocator.h></code></p>
+<p><code>#include <null_rw_mutex.h></code></p>
+<div class="dynheader">
+Inheritance diagram for tbb::null_rw_mutex::scoped_lock:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00129.png" usemap="#tbb::null_rw_mutex::scoped_lock_map" alt=""/>
+  <map id="tbb::null_rw_mutex::scoped_lock_map" name="tbb::null_rw_mutex::scoped_lock_map">
+</map>
+ </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00115.html">rebind</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:aa9171ca5fc6dc349ae95a28cd16b504c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa9171ca5fc6dc349ae95a28cd16b504c"></a>
-typedef <br class="typebreak"/>
-internal::allocator_type< T ><br class="typebreak"/>
-::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-<tr class="separator:aa9171ca5fc6dc349ae95a28cd16b504c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af5352e44d6bcde3d0bdf8368acd3c84c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af5352e44d6bcde3d0bdf8368acd3c84c"></a>
-typedef value_type * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-<tr class="separator:af5352e44d6bcde3d0bdf8368acd3c84c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9722dbf8015bed6319bc16996d45546f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9722dbf8015bed6319bc16996d45546f"></a>
-typedef const value_type * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-<tr class="separator:a9722dbf8015bed6319bc16996d45546f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af3c8f5f07f47672c0c97fab799807728"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af3c8f5f07f47672c0c97fab799807728"></a>
-typedef value_type & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
-<tr class="separator:af3c8f5f07f47672c0c97fab799807728"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4de1dd8be241f945d464cbef0dd6c5b8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4de1dd8be241f945d464cbef0dd6c5b8"></a>
-typedef const value_type & </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
-<tr class="separator:a4de1dd8be241f945d464cbef0dd6c5b8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac2376f6bacc6dcb3aa37f27a78681e89"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac2376f6bacc6dcb3aa37f27a78681e89"></a>
-typedef size_t </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-<tr class="separator:ac2376f6bacc6dcb3aa37f27a78681e89"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a751a0d5a410244226f62914cbde260ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a751a0d5a410244226f62914cbde260ff"></a>
-typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
-<tr class="separator:a751a0d5a410244226f62914cbde260ff"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a276a735dca4ba6abbe3b251d4c003ea7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a276a735dca4ba6abbe3b251d4c003ea7"></a>
- </td><td class="memItemRight" valign="bottom"><b>scalable_allocator</b> (const <a class="el" href="a00129.html">scalable_allocator</a> &)  throw ()</td></tr>
-<tr class="separator:a276a735dca4ba6abbe3b251d4c003ea7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae680426a4dfbd51a7447d12354679c6e"><td class="memTemplParams" colspan="2"><a class="anchor" id="ae680426a4dfbd51a7447d12354679c6e"></a>
-template<typename U > </td></tr>
-<tr class="memitem:ae680426a4dfbd51a7447d12354679c6e"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>scalable_allocator</b> (const <a class="el" href="a00129.html">scalable_allocator</a>< U > &)  throw ()</td></tr>
-<tr class="separator:ae680426a4dfbd51a7447d12354679c6e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a647d824ce9396c3c4cb4450b0c2b7b3c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a647d824ce9396c3c4cb4450b0c2b7b3c"></a>
-pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (reference x) const </td></tr>
-<tr class="separator:a647d824ce9396c3c4cb4450b0c2b7b3c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab30cf9e0d0bef7ba8567edc6efb045e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab30cf9e0d0bef7ba8567edc6efb045e4"></a>
-const_pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (const_reference x) const </td></tr>
-<tr class="separator:ab30cf9e0d0bef7ba8567edc6efb045e4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acf24945c12dc0586dfb1f8638daf7838"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf24945c12dc0586dfb1f8638daf7838"></a>
-pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#acf24945c12dc0586dfb1f8638daf7838">allocate</a> (size_type n, const void *=0)</td></tr>
-<tr class="memdesc:acf24945c12dc0586dfb1f8638daf7838"><td class="mdescLeft"> </td><td class="mdescRight">Allocate space for n objects. <br/></td></tr>
-<tr class="separator:acf24945c12dc0586dfb1f8638daf7838"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0632b19f25e5d5f86f18b3101925f488"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0632b19f25e5d5f86f18b3101925f488"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#a0632b19f25e5d5f86f18b3101925f488">deallocate</a> (pointer p, size_type)</td></tr>
-<tr class="memdesc:a0632b19f25e5d5f86f18b3101925f488"><td class="mdescLeft"> </td><td class="mdescRight">Free previously allocated block of memory. <br/></td></tr>
-<tr class="separator:a0632b19f25e5d5f86f18b3101925f488"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afaa85d739b466699cf669116fd10d175"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afaa85d739b466699cf669116fd10d175"></a>
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#afaa85d739b466699cf669116fd10d175">max_size</a> () const   throw ()</td></tr>
-<tr class="memdesc:afaa85d739b466699cf669116fd10d175"><td class="mdescLeft"> </td><td class="mdescRight">Largest value for which method allocate might succeed. <br/></td></tr>
-<tr class="separator:afaa85d739b466699cf669116fd10d175"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0502de23b9ed7c1611703fe725cb4cd3"><td class="memTemplParams" colspan="2"><a class="anchor" id="a0502de23b9ed7c1611703fe725cb4cd3"></a>
-template<typename U , typename... Args> </td></tr>
-<tr class="memitem:a0502de23b9ed7c1611703fe725cb4cd3"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>construct</b> (U *p, Args &&...args)</td></tr>
-<tr class="separator:a0502de23b9ed7c1611703fe725cb4cd3"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aecd5a33086abab6860105ef9856e2786"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aecd5a33086abab6860105ef9856e2786"></a>
-void </td><td class="memItemRight" valign="bottom"><b>construct</b> (pointer p, value_type &&value)</td></tr>
-<tr class="separator:aecd5a33086abab6860105ef9856e2786"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a13115cd358c7be350dbeb5271181ae26"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a13115cd358c7be350dbeb5271181ae26"></a>
-void </td><td class="memItemRight" valign="bottom"><b>construct</b> (pointer p, const value_type &value)</td></tr>
-<tr class="separator:a13115cd358c7be350dbeb5271181ae26"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac79ddb098880d8bde6097ac11f641188"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac79ddb098880d8bde6097ac11f641188"></a>
-void </td><td class="memItemRight" valign="bottom"><b>destroy</b> (pointer p)</td></tr>
-<tr class="separator:ac79ddb098880d8bde6097ac11f641188"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4b7f9a3976c7744a96e435e027c6262c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4b7f9a3976c7744a96e435e027c6262c"></a>
+ </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b> (<a class="el" href="a00085.html">null_rw_mutex</a> &, bool=true)</td></tr>
+<tr class="separator:a4b7f9a3976c7744a96e435e027c6262c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a251d45c5c42ac6c6006d0463c2173bc8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a251d45c5c42ac6c6006d0463c2173bc8"></a>
+void </td><td class="memItemRight" valign="bottom"><b>acquire</b> (<a class="el" href="a00085.html">null_rw_mutex</a> &, bool=true)</td></tr>
+<tr class="separator:a251d45c5c42ac6c6006d0463c2173bc8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a07ed8c0c225fec43b96dcec5b4d4380d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a07ed8c0c225fec43b96dcec5b4d4380d"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>upgrade_to_writer</b> ()</td></tr>
+<tr class="separator:a07ed8c0c225fec43b96dcec5b4d4380d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a899c14f8d077edd2fe7925bb82a94686"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a899c14f8d077edd2fe7925bb82a94686"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>downgrade_to_reader</b> ()</td></tr>
+<tr class="separator:a899c14f8d077edd2fe7925bb82a94686"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afdb10af455fa8730b1a9bc8d5ca16c41"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afdb10af455fa8730b1a9bc8d5ca16c41"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>try_acquire</b> (<a class="el" href="a00085.html">null_rw_mutex</a> &, bool=true)</td></tr>
+<tr class="separator:afdb10af455fa8730b1a9bc8d5ca16c41"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a57d0613ea1614fe9c7daa0706e56efab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a57d0613ea1614fe9c7daa0706e56efab"></a>
+void </td><td class="memItemRight" valign="bottom"><b>release</b> ()</td></tr>
+<tr class="separator:a57d0613ea1614fe9c7daa0706e56efab"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename T><br/>
-class tbb::scalable_allocator< T ></h3>
-
-<p>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. </p>
-<p>The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. </p>
+<div class="textblock"><p>Represents acquisition of a mutex. </p>
 </div><hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00217.html">scalable_allocator.h</a></li>
+<li>null_rw_mutex.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00138.png b/doc/html/a00129.png
similarity index 100%
copy from doc/html/a00138.png
copy to doc/html/a00129.png
diff --git a/doc/html/a00130.html b/doc/html/a00130.html
index eed82df..a6fcab3 100644
--- a/doc/html/a00130.html
+++ b/doc/html/a00130.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::scalable_allocator< void > Class Template Reference</title>
+<title>tbb::spin_mutex::scoped_lock Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,53 +33,101 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00130.html">scalable_allocator< void ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00140.html">spin_mutex</a></li><li class="navelem"><a class="el" href="a00130.html">scoped_lock</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#pub-types">Public Types</a> |
-<a href="a00300.html">List of all members</a>  </div>
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#friends">Friends</a> |
+<a href="a00298.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::scalable_allocator< void > Class Template Reference<div class="ingroups"><a class="el" href="a00257.html">Memory Allocation</a></div></div>  </div>
+<div class="title">tbb::spin_mutex::scoped_lock Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  
+<p>Represents acquisition of a mutex.  
  <a href="a00130.html#details">More...</a></p>
 
-<p><code>#include <scalable_allocator.h></code></p>
+<p><code>#include <spin_mutex.h></code></p>
+<div class="dynheader">
+Inheritance diagram for tbb::spin_mutex::scoped_lock:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00130.png" usemap="#tbb::spin_mutex::scoped_lock_map" alt=""/>
+  <map id="tbb::spin_mutex::scoped_lock_map" name="tbb::spin_mutex::scoped_lock_map">
+</map>
+ </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00116.html">rebind</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a4287be975cf2448c95f068b065c45107"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4287be975cf2448c95f068b065c45107"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#a4287be975cf2448c95f068b065c45107">scoped_lock</a> ()</td></tr>
+<tr class="memdesc:a4287be975cf2448c95f068b065c45107"><td class="mdescLeft"> </td><td class="mdescRight">Construct without acquiring a mutex. <br/></td></tr>
+<tr class="separator:a4287be975cf2448c95f068b065c45107"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a73f7381a9a112b9f5a856b1face525fb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a73f7381a9a112b9f5a856b1face525fb"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#a73f7381a9a112b9f5a856b1face525fb">scoped_lock</a> (<a class="el" href="a00140.html">spin_mutex</a> &m)</td></tr>
+<tr class="memdesc:a73f7381a9a112b9f5a856b1face525fb"><td class="mdescLeft"> </td><td class="mdescRight">Construct and acquire lock on a mutex. <br/></td></tr>
+<tr class="separator:a73f7381a9a112b9f5a856b1face525fb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7c702117f08ae82d034a98b3d5510ffc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7c702117f08ae82d034a98b3d5510ffc"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#a7c702117f08ae82d034a98b3d5510ffc">acquire</a> (<a class="el" href="a00140.html">spin_mutex</a> &m)</td></tr>
+<tr class="memdesc:a7c702117f08ae82d034a98b3d5510ffc"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock. <br/></td></tr>
+<tr class="separator:a7c702117f08ae82d034a98b3d5510ffc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a76acbd67c74906f6ea33a1de6fd443ce"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#a76acbd67c74906f6ea33a1de6fd443ce">try_acquire</a> (<a class="el" href="a00140.html">spin_mutex</a> &m)</td></tr>
+<tr class="memdesc:a76acbd67c74906f6ea33a1de6fd443ce"><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring lock (non-blocking)  <a href="#a76acbd67c74906f6ea33a1de6fd443ce">More...</a><br/></td></tr>
+<tr class="separator:a76acbd67c74906f6ea33a1de6fd443ce"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7e801b0c28fd8395fec400b96acc5c34"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7e801b0c28fd8395fec400b96acc5c34"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#a7e801b0c28fd8395fec400b96acc5c34">release</a> ()</td></tr>
+<tr class="memdesc:a7e801b0c28fd8395fec400b96acc5c34"><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br/></td></tr>
+<tr class="separator:a7e801b0c28fd8395fec400b96acc5c34"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9940d6e494466d9c53846ed347d79d83"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9940d6e494466d9c53846ed347d79d83"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#a9940d6e494466d9c53846ed347d79d83">~scoped_lock</a> ()</td></tr>
+<tr class="memdesc:a9940d6e494466d9c53846ed347d79d83"><td class="mdescLeft"> </td><td class="mdescRight">Destroy lock. If holding a lock, releases the lock first. <br/></td></tr>
+<tr class="separator:a9940d6e494466d9c53846ed347d79d83"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a4220fdea504929811e9c083da3ec24cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4220fdea504929811e9c083da3ec24cd"></a>
-typedef void * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-<tr class="separator:a4220fdea504929811e9c083da3ec24cd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2ae27d63cd7df1dc8d2a47c89aad8bba"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ae27d63cd7df1dc8d2a47c89aad8bba"></a>
-typedef const void * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-<tr class="separator:a2ae27d63cd7df1dc8d2a47c89aad8bba"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a968aea700a5f30ad613a84a474b00ba4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a968aea700a5f30ad613a84a474b00ba4"></a>
-typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-<tr class="separator:a968aea700a5f30ad613a84a474b00ba4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:adf989c33fa5ee03e75925c2d0f86b89e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adf989c33fa5ee03e75925c2d0f86b89e"></a>
+class </td><td class="memItemRight" valign="bottom"><b>spin_mutex</b></td></tr>
+<tr class="separator:adf989c33fa5ee03e75925c2d0f86b89e"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<><br/>
-class tbb::scalable_allocator< void ></h3>
+<div class="textblock"><p>Represents acquisition of a mutex. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="a76acbd67c74906f6ea33a1de6fd443ce"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::spin_mutex::scoped_lock::try_acquire </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00140.html">spin_mutex</a> & </td>
+          <td class="paramname"><em>m</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Try acquiring lock (non-blocking) </p>
+<p>Return true if lock acquired; false otherwise. </p>
 
-<p>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00217.html">scalable_allocator.h</a></li>
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>spin_mutex.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00134.png b/doc/html/a00130.png
similarity index 100%
copy from doc/html/a00134.png
copy to doc/html/a00130.png
diff --git a/doc/html/a00131.html b/doc/html/a00131.html
index 67d4787..eb962b3 100644
--- a/doc/html/a00131.html
+++ b/doc/html/a00131.html
@@ -33,13 +33,13 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00112.html">queuing_rw_mutex</a></li><li class="navelem"><a class="el" href="a00131.html">scoped_lock</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00107.html">queuing_rw_mutex</a></li><li class="navelem"><a class="el" href="a00131.html">scoped_lock</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00295.html">List of all members</a>  </div>
+<a href="a00290.html">List of all members</a>  </div>
   <div class="headertitle">
 <div class="title">tbb::queuing_rw_mutex::scoped_lock Class Reference</div>  </div>
 </div><!--header-->
@@ -64,7 +64,7 @@ Public Member Functions</h2></td></tr>
 <tr class="memdesc:a1ae3792726dcff8da1f2c5366fb2b754"><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex.  <a href="#a1ae3792726dcff8da1f2c5366fb2b754">More...</a><br/></td></tr>
 <tr class="separator:a1ae3792726dcff8da1f2c5366fb2b754"><td class="memSeparator" colspan="2"> </td></tr>
 <tr class="memitem:af1b55ca1839c9c7c2cd779cd2dd9c474"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af1b55ca1839c9c7c2cd779cd2dd9c474"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.html#af1b55ca1839c9c7c2cd779cd2dd9c474">scoped_lock</a> (<a class="el" href="a00112.html">queuing_rw_mutex</a> &m, bool write=true)</td></tr>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.html#af1b55ca1839c9c7c2cd779cd2dd9c474">scoped_lock</a> (<a class="el" href="a00107.html">queuing_rw_mutex</a> &m, bool write=true)</td></tr>
 <tr class="memdesc:af1b55ca1839c9c7c2cd779cd2dd9c474"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br/></td></tr>
 <tr class="separator:af1b55ca1839c9c7c2cd779cd2dd9c474"><td class="memSeparator" colspan="2"> </td></tr>
 <tr class="memitem:a6cb16cc55f884bbbd5a69430c47b288f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6cb16cc55f884bbbd5a69430c47b288f"></a>
@@ -72,11 +72,11 @@ Public Member Functions</h2></td></tr>
 <tr class="memdesc:a6cb16cc55f884bbbd5a69430c47b288f"><td class="mdescLeft"> </td><td class="mdescRight">Release lock (if lock is held). <br/></td></tr>
 <tr class="separator:a6cb16cc55f884bbbd5a69430c47b288f"><td class="memSeparator" colspan="2"> </td></tr>
 <tr class="memitem:ab4bf2fb86d6a418f9ea36474eb8893f9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab4bf2fb86d6a418f9ea36474eb8893f9"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.html#ab4bf2fb86d6a418f9ea36474eb8893f9">acquire</a> (<a class="el" href="a00112.html">queuing_rw_mutex</a> &m, bool write=true)</td></tr>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.html#ab4bf2fb86d6a418f9ea36474eb8893f9">acquire</a> (<a class="el" href="a00107.html">queuing_rw_mutex</a> &m, bool write=true)</td></tr>
 <tr class="memdesc:ab4bf2fb86d6a418f9ea36474eb8893f9"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br/></td></tr>
 <tr class="separator:ab4bf2fb86d6a418f9ea36474eb8893f9"><td class="memSeparator" colspan="2"> </td></tr>
 <tr class="memitem:a4843d40dddc37c1aa3444e27d35d2433"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4843d40dddc37c1aa3444e27d35d2433"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.html#a4843d40dddc37c1aa3444e27d35d2433">try_acquire</a> (<a class="el" href="a00112.html">queuing_rw_mutex</a> &m, bool write=true)</td></tr>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.html#a4843d40dddc37c1aa3444e27d35d2433">try_acquire</a> (<a class="el" href="a00107.html">queuing_rw_mutex</a> &m, bool write=true)</td></tr>
 <tr class="memdesc:a4843d40dddc37c1aa3444e27d35d2433"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex if free (i.e. non-blocking) <br/></td></tr>
 <tr class="separator:a4843d40dddc37c1aa3444e27d35d2433"><td class="memSeparator" colspan="2"> </td></tr>
 <tr class="memitem:a50fb02b77f02a01c74754d163157ec77"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a50fb02b77f02a01c74754d163157ec77"></a>
@@ -146,7 +146,7 @@ bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a001
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00132.html b/doc/html/a00132.html
index 34eb430..882197c 100644
--- a/doc/html/a00132.html
+++ b/doc/html/a00132.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::queuing_mutex::scoped_lock Class Reference</title>
+<title>tbb::interface5::reader_writer_lock::scoped_lock Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,94 +33,65 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00111.html">queuing_mutex</a></li><li class="navelem"><a class="el" href="a00132.html">scoped_lock</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00108.html">reader_writer_lock</a></li><li class="navelem"><a class="el" href="a00132.html">scoped_lock</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00293.html">List of all members</a>  </div>
+<a href="#friends">Friends</a> |
+<a href="a00370.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::queuing_mutex::scoped_lock Class Reference</div>  </div>
+<div class="title">tbb::interface5::reader_writer_lock::scoped_lock Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>The scoped locking pattern.  
+<p>The scoped lock pattern for write locks.  
  <a href="a00132.html#details">More...</a></p>
 
-<p><code>#include <queuing_mutex.h></code></p>
+<p><code>#include <reader_writer_lock.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::queuing_mutex::scoped_lock:</div>
+Inheritance diagram for tbb::interface5::reader_writer_lock::scoped_lock:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00132.png" usemap="#tbb::queuing_mutex::scoped_lock_map" alt=""/>
-  <map id="tbb::queuing_mutex::scoped_lock_map" name="tbb::queuing_mutex::scoped_lock_map">
+  <img src="a00132.png" usemap="#tbb::interface5::reader_writer_lock::scoped_lock_map" alt=""/>
+  <map id="tbb::interface5::reader_writer_lock::scoped_lock_map" name="tbb::interface5::reader_writer_lock::scoped_lock_map">
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a0afe0107eb0aae613e726f67624d2fca"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html#a0afe0107eb0aae613e726f67624d2fca">scoped_lock</a> ()</td></tr>
-<tr class="memdesc:a0afe0107eb0aae613e726f67624d2fca"><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex.  <a href="#a0afe0107eb0aae613e726f67624d2fca">More...</a><br/></td></tr>
-<tr class="separator:a0afe0107eb0aae613e726f67624d2fca"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa82d9da0dcfe5b21f1c08473f8223105"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa82d9da0dcfe5b21f1c08473f8223105"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html#aa82d9da0dcfe5b21f1c08473f8223105">scoped_lock</a> (<a class="el" href="a00111.html">queuing_mutex</a> &m)</td></tr>
-<tr class="memdesc:aa82d9da0dcfe5b21f1c08473f8223105"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br/></td></tr>
-<tr class="separator:aa82d9da0dcfe5b21f1c08473f8223105"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a469ec43836a8dd250ce0a22b02945630"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a469ec43836a8dd250ce0a22b02945630"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html#a469ec43836a8dd250ce0a22b02945630">~scoped_lock</a> ()</td></tr>
-<tr class="memdesc:a469ec43836a8dd250ce0a22b02945630"><td class="mdescLeft"> </td><td class="mdescRight">Release lock (if lock is held). <br/></td></tr>
-<tr class="separator:a469ec43836a8dd250ce0a22b02945630"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abf8aa7ccd48d54dcb53665700a17d02a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abf8aa7ccd48d54dcb53665700a17d02a"></a>
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html#abf8aa7ccd48d54dcb53665700a17d02a">acquire</a> (<a class="el" href="a00111.html">queuing_mutex</a> &m)</td></tr>
-<tr class="memdesc:abf8aa7ccd48d54dcb53665700a17d02a"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br/></td></tr>
-<tr class="separator:abf8aa7ccd48d54dcb53665700a17d02a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab4800ba9e743cd91f152036a6689b0e9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab4800ba9e743cd91f152036a6689b0e9"></a>
-bool __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html#ab4800ba9e743cd91f152036a6689b0e9">try_acquire</a> (<a class="el" href="a00111.html">queuing_mutex</a> &m)</td></tr>
-<tr class="memdesc:ab4800ba9e743cd91f152036a6689b0e9"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex if free (i.e. non-blocking) <br/></td></tr>
-<tr class="separator:ab4800ba9e743cd91f152036a6689b0e9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aaa065e48b428b8d43e9bb931ba9e6f6c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaa065e48b428b8d43e9bb931ba9e6f6c"></a>
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html#aaa065e48b428b8d43e9bb931ba9e6f6c">release</a> ()</td></tr>
-<tr class="memdesc:aaa065e48b428b8d43e9bb931ba9e6f6c"><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br/></td></tr>
-<tr class="separator:aaa065e48b428b8d43e9bb931ba9e6f6c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaed982d8c3f1e84298f9842063694f3c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaed982d8c3f1e84298f9842063694f3c"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html#aaed982d8c3f1e84298f9842063694f3c">scoped_lock</a> (<a class="el" href="a00108.html">reader_writer_lock</a> &<a class="el" href="a00108.html#af92eb949fc491af8f7e350869ea0a0d1">lock</a>)</td></tr>
+<tr class="memdesc:aaed982d8c3f1e84298f9842063694f3c"><td class="mdescLeft"> </td><td class="mdescRight">Construct with blocking attempt to acquire write lock on the passed-in lock. <br/></td></tr>
+<tr class="separator:aaed982d8c3f1e84298f9842063694f3c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a41e77cf094ed30b0a9a39ee217c3653b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a41e77cf094ed30b0a9a39ee217c3653b"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html#a41e77cf094ed30b0a9a39ee217c3653b">~scoped_lock</a> ()</td></tr>
+<tr class="memdesc:a41e77cf094ed30b0a9a39ee217c3653b"><td class="mdescLeft"> </td><td class="mdescRight">Destructor, releases the write lock. <br/></td></tr>
+<tr class="separator:a41e77cf094ed30b0a9a39ee217c3653b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5bca00f4788ed8f635a8383a25a10ec8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5bca00f4788ed8f635a8383a25a10ec8"></a>
+void * </td><td class="memItemRight" valign="bottom"><b>operator new</b> (size_t s)</td></tr>
+<tr class="separator:a5bca00f4788ed8f635a8383a25a10ec8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3ef0de25ee6d7897198fcf09471bf24f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3ef0de25ee6d7897198fcf09471bf24f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>operator delete</b> (void *p)</td></tr>
+<tr class="separator:a3ef0de25ee6d7897198fcf09471bf24f"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:afb01bc2e211c782503ef5088003f120f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afb01bc2e211c782503ef5088003f120f"></a>
+class </td><td class="memItemRight" valign="bottom"><b>reader_writer_lock</b></td></tr>
+<tr class="separator:afb01bc2e211c782503ef5088003f120f"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>The scoped locking pattern. </p>
-<p>It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks. </p>
-</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a0afe0107eb0aae613e726f67624d2fca"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">tbb::queuing_mutex::scoped_lock::scoped_lock </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Construct lock that has not acquired a mutex. </p>
-<p>Equivalent to zero-initialization of *this. </p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>queuing_mutex.h</li>
+<div class="textblock"><p>The scoped lock pattern for write locks. </p>
+<p>Scoped locks help avoid the common problem of forgetting to release the lock. This type also serves as the node for queuing locks. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>reader_writer_lock.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00132.png b/doc/html/a00132.png
index 611457f..a999a7d 100644
Binary files a/doc/html/a00132.png and b/doc/html/a00132.png differ
diff --git a/doc/html/a00133.html b/doc/html/a00133.html
index b881819..bfdad33 100644
--- a/doc/html/a00133.html
+++ b/doc/html/a00133.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface5::reader_writer_lock::scoped_lock Class Reference</title>
+<title>tbb::recursive_mutex::scoped_lock Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,65 +33,75 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00113.html">reader_writer_lock</a></li><li class="navelem"><a class="el" href="a00133.html">scoped_lock</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00121.html">recursive_mutex</a></li><li class="navelem"><a class="el" href="a00133.html">scoped_lock</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
 <a href="#friends">Friends</a> |
-<a href="a00384.html">List of all members</a>  </div>
+<a href="a00292.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface5::reader_writer_lock::scoped_lock Class Reference</div>  </div>
+<div class="title">tbb::recursive_mutex::scoped_lock Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>The scoped lock pattern for write locks.  
+<p>The scoped locking pattern.  
  <a href="a00133.html#details">More...</a></p>
 
-<p><code>#include <reader_writer_lock.h></code></p>
+<p><code>#include <recursive_mutex.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::interface5::reader_writer_lock::scoped_lock:</div>
+Inheritance diagram for tbb::recursive_mutex::scoped_lock:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00133.png" usemap="#tbb::interface5::reader_writer_lock::scoped_lock_map" alt=""/>
-  <map id="tbb::interface5::reader_writer_lock::scoped_lock_map" name="tbb::interface5::reader_writer_lock::scoped_lock_map">
+  <img src="a00133.png" usemap="#tbb::recursive_mutex::scoped_lock_map" alt=""/>
+  <map id="tbb::recursive_mutex::scoped_lock_map" name="tbb::recursive_mutex::scoped_lock_map">
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:aaed982d8c3f1e84298f9842063694f3c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaed982d8c3f1e84298f9842063694f3c"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html#aaed982d8c3f1e84298f9842063694f3c">scoped_lock</a> (<a class="el" href="a00113.html">reader_writer_lock</a> &<a class="el" href="a00113.html#af92eb949fc491af8f7e350869ea0a0d1">lock</a>)</td></tr>
-<tr class="memdesc:aaed982d8c3f1e84298f9842063694f3c"><td class="mdescLeft"> </td><td class="mdescRight">Construct with blocking attempt to acquire write lock on the passed-in lock. <br/></td></tr>
-<tr class="separator:aaed982d8c3f1e84298f9842063694f3c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a41e77cf094ed30b0a9a39ee217c3653b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a41e77cf094ed30b0a9a39ee217c3653b"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html#a41e77cf094ed30b0a9a39ee217c3653b">~scoped_lock</a> ()</td></tr>
-<tr class="memdesc:a41e77cf094ed30b0a9a39ee217c3653b"><td class="mdescLeft"> </td><td class="mdescRight">Destructor, releases the write lock. <br/></td></tr>
-<tr class="separator:a41e77cf094ed30b0a9a39ee217c3653b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5bca00f4788ed8f635a8383a25a10ec8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5bca00f4788ed8f635a8383a25a10ec8"></a>
-void * </td><td class="memItemRight" valign="bottom"><b>operator new</b> (size_t s)</td></tr>
-<tr class="separator:a5bca00f4788ed8f635a8383a25a10ec8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3ef0de25ee6d7897198fcf09471bf24f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3ef0de25ee6d7897198fcf09471bf24f"></a>
-void </td><td class="memItemRight" valign="bottom"><b>operator delete</b> (void *p)</td></tr>
-<tr class="separator:a3ef0de25ee6d7897198fcf09471bf24f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0a9962a3932cfbd0d12cb197494f951b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0a9962a3932cfbd0d12cb197494f951b"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html#a0a9962a3932cfbd0d12cb197494f951b">scoped_lock</a> ()</td></tr>
+<tr class="memdesc:a0a9962a3932cfbd0d12cb197494f951b"><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a <a class="el" href="a00121.html">recursive_mutex</a>. <br/></td></tr>
+<tr class="separator:a0a9962a3932cfbd0d12cb197494f951b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab42cb541abb9647cac23b1db9a4db93d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab42cb541abb9647cac23b1db9a4db93d"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html#ab42cb541abb9647cac23b1db9a4db93d">scoped_lock</a> (<a class="el" href="a00121.html">recursive_mutex</a> &<a class="el" href="a00082.html">mutex</a>)</td></tr>
+<tr class="memdesc:ab42cb541abb9647cac23b1db9a4db93d"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br/></td></tr>
+<tr class="separator:ab42cb541abb9647cac23b1db9a4db93d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a90a966e19120aac99b36a3d6d04af1a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a90a966e19120aac99b36a3d6d04af1a2"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html#a90a966e19120aac99b36a3d6d04af1a2">~scoped_lock</a> ()</td></tr>
+<tr class="memdesc:a90a966e19120aac99b36a3d6d04af1a2"><td class="mdescLeft"> </td><td class="mdescRight">Release lock (if lock is held). <br/></td></tr>
+<tr class="separator:a90a966e19120aac99b36a3d6d04af1a2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac5450ce6a5813f395afaa434384c6539"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac5450ce6a5813f395afaa434384c6539"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html#ac5450ce6a5813f395afaa434384c6539">acquire</a> (<a class="el" href="a00121.html">recursive_mutex</a> &<a class="el" href="a00082.html">mutex</a>)</td></tr>
+<tr class="memdesc:ac5450ce6a5813f395afaa434384c6539"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br/></td></tr>
+<tr class="separator:ac5450ce6a5813f395afaa434384c6539"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a160bba506f4033980ddb69ab7a02c4fb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a160bba506f4033980ddb69ab7a02c4fb"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html#a160bba506f4033980ddb69ab7a02c4fb">try_acquire</a> (<a class="el" href="a00121.html">recursive_mutex</a> &<a class="el" href="a00082.html">mutex</a>)</td></tr>
+<tr class="memdesc:a160bba506f4033980ddb69ab7a02c4fb"><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given <a class="el" href="a00121.html">recursive_mutex</a>. <br/></td></tr>
+<tr class="separator:a160bba506f4033980ddb69ab7a02c4fb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2fe3246ffc26bdb5a58f33ca513b6c0f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2fe3246ffc26bdb5a58f33ca513b6c0f"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html#a2fe3246ffc26bdb5a58f33ca513b6c0f">release</a> ()</td></tr>
+<tr class="memdesc:a2fe3246ffc26bdb5a58f33ca513b6c0f"><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br/></td></tr>
+<tr class="separator:a2fe3246ffc26bdb5a58f33ca513b6c0f"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
 Friends</h2></td></tr>
-<tr class="memitem:afb01bc2e211c782503ef5088003f120f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afb01bc2e211c782503ef5088003f120f"></a>
-class </td><td class="memItemRight" valign="bottom"><b>reader_writer_lock</b></td></tr>
-<tr class="separator:afb01bc2e211c782503ef5088003f120f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1bdb637fe5c9412323bf92846b40682e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1bdb637fe5c9412323bf92846b40682e"></a>
+class </td><td class="memItemRight" valign="bottom"><b>recursive_mutex</b></td></tr>
+<tr class="separator:a1bdb637fe5c9412323bf92846b40682e"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>The scoped lock pattern for write locks. </p>
-<p>Scoped locks help avoid the common problem of forgetting to release the lock. This type also serves as the node for queuing locks. </p>
+<div class="textblock"><p>The scoped locking pattern. </p>
+<p>It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks. </p>
 </div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>reader_writer_lock.h</li>
+<li>recursive_mutex.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00133.png b/doc/html/a00133.png
index a999a7d..9d4ec98 100644
Binary files a/doc/html/a00133.png and b/doc/html/a00133.png differ
diff --git a/doc/html/a00134.html b/doc/html/a00134.html
index c91d71a..ffa6bdd 100644
--- a/doc/html/a00134.html
+++ b/doc/html/a00134.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::spin_mutex::scoped_lock Class Reference</title>
+<title>tbb::spin_rw_mutex_v3::scoped_lock Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,68 +33,114 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00145.html">spin_mutex</a></li><li class="navelem"><a class="el" href="a00134.html">scoped_lock</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00141.html">spin_rw_mutex_v3</a></li><li class="navelem"><a class="el" href="a00134.html">scoped_lock</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
+<a href="#pro-attribs">Protected Attributes</a> |
 <a href="#friends">Friends</a> |
-<a href="a00303.html">List of all members</a>  </div>
+<a href="a00300.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::spin_mutex::scoped_lock Class Reference</div>  </div>
+<div class="title">tbb::spin_rw_mutex_v3::scoped_lock Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>Represents acquisition of a mutex.  
+<p>The scoped locking pattern.  
  <a href="a00134.html#details">More...</a></p>
 
-<p><code>#include <spin_mutex.h></code></p>
+<p><code>#include <spin_rw_mutex.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::spin_mutex::scoped_lock:</div>
+Inheritance diagram for tbb::spin_rw_mutex_v3::scoped_lock:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00134.png" usemap="#tbb::spin_mutex::scoped_lock_map" alt=""/>
-  <map id="tbb::spin_mutex::scoped_lock_map" name="tbb::spin_mutex::scoped_lock_map">
+  <img src="a00134.png" usemap="#tbb::spin_rw_mutex_v3::scoped_lock_map" alt=""/>
+  <map id="tbb::spin_rw_mutex_v3::scoped_lock_map" name="tbb::spin_rw_mutex_v3::scoped_lock_map">
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a4287be975cf2448c95f068b065c45107"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4287be975cf2448c95f068b065c45107"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#a4287be975cf2448c95f068b065c45107">scoped_lock</a> ()</td></tr>
-<tr class="memdesc:a4287be975cf2448c95f068b065c45107"><td class="mdescLeft"> </td><td class="mdescRight">Construct without acquiring a mutex. <br/></td></tr>
-<tr class="separator:a4287be975cf2448c95f068b065c45107"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a73f7381a9a112b9f5a856b1face525fb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a73f7381a9a112b9f5a856b1face525fb"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#a73f7381a9a112b9f5a856b1face525fb">scoped_lock</a> (<a class="el" href="a00145.html">spin_mutex</a> &m)</td></tr>
-<tr class="memdesc:a73f7381a9a112b9f5a856b1face525fb"><td class="mdescLeft"> </td><td class="mdescRight">Construct and acquire lock on a mutex. <br/></td></tr>
-<tr class="separator:a73f7381a9a112b9f5a856b1face525fb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7c702117f08ae82d034a98b3d5510ffc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7c702117f08ae82d034a98b3d5510ffc"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#a7c702117f08ae82d034a98b3d5510ffc">acquire</a> (<a class="el" href="a00145.html">spin_mutex</a> &m)</td></tr>
-<tr class="memdesc:a7c702117f08ae82d034a98b3d5510ffc"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock. <br/></td></tr>
-<tr class="separator:a7c702117f08ae82d034a98b3d5510ffc"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a76acbd67c74906f6ea33a1de6fd443ce"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#a76acbd67c74906f6ea33a1de6fd443ce">try_acquire</a> (<a class="el" href="a00145.html">spin_mutex</a> &m)</td></tr>
-<tr class="memdesc:a76acbd67c74906f6ea33a1de6fd443ce"><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring lock (non-blocking)  <a href="#a76acbd67c74906f6ea33a1de6fd443ce">More...</a><br/></td></tr>
-<tr class="separator:a76acbd67c74906f6ea33a1de6fd443ce"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7e801b0c28fd8395fec400b96acc5c34"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7e801b0c28fd8395fec400b96acc5c34"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#a7e801b0c28fd8395fec400b96acc5c34">release</a> ()</td></tr>
-<tr class="memdesc:a7e801b0c28fd8395fec400b96acc5c34"><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br/></td></tr>
-<tr class="separator:a7e801b0c28fd8395fec400b96acc5c34"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9940d6e494466d9c53846ed347d79d83"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9940d6e494466d9c53846ed347d79d83"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#a9940d6e494466d9c53846ed347d79d83">~scoped_lock</a> ()</td></tr>
-<tr class="memdesc:a9940d6e494466d9c53846ed347d79d83"><td class="mdescLeft"> </td><td class="mdescRight">Destroy lock. If holding a lock, releases the lock first. <br/></td></tr>
-<tr class="separator:a9940d6e494466d9c53846ed347d79d83"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a285b355121772c874a7ecaaf4d347224"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#a285b355121772c874a7ecaaf4d347224">scoped_lock</a> ()</td></tr>
+<tr class="memdesc:a285b355121772c874a7ecaaf4d347224"><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex.  <a href="#a285b355121772c874a7ecaaf4d347224">More...</a><br/></td></tr>
+<tr class="separator:a285b355121772c874a7ecaaf4d347224"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0a2e15358575f7651446bca13a5a2674"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0a2e15358575f7651446bca13a5a2674"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#a0a2e15358575f7651446bca13a5a2674">scoped_lock</a> (<a class="el" href="a00141.html">spin_rw_mutex</a> &m, bool write=true)</td></tr>
+<tr class="memdesc:a0a2e15358575f7651446bca13a5a2674"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br/></td></tr>
+<tr class="separator:a0a2e15358575f7651446bca13a5a2674"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5c27ca2e0c9db960a9a7430082ff7edd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5c27ca2e0c9db960a9a7430082ff7edd"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#a5c27ca2e0c9db960a9a7430082ff7edd">~scoped_lock</a> ()</td></tr>
+<tr class="memdesc:a5c27ca2e0c9db960a9a7430082ff7edd"><td class="mdescLeft"> </td><td class="mdescRight">Release lock (if lock is held). <br/></td></tr>
+<tr class="separator:a5c27ca2e0c9db960a9a7430082ff7edd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6d49df365396ab314e78ba07c6b96433"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6d49df365396ab314e78ba07c6b96433"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#a6d49df365396ab314e78ba07c6b96433">acquire</a> (<a class="el" href="a00141.html">spin_rw_mutex</a> &m, bool write=true)</td></tr>
+<tr class="memdesc:a6d49df365396ab314e78ba07c6b96433"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br/></td></tr>
+<tr class="separator:a6d49df365396ab314e78ba07c6b96433"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afbe5de57eadc457518df7a1bb0d30c00"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#afbe5de57eadc457518df7a1bb0d30c00">upgrade_to_writer</a> ()</td></tr>
+<tr class="memdesc:afbe5de57eadc457518df7a1bb0d30c00"><td class="mdescLeft"> </td><td class="mdescRight">Upgrade reader to become a writer.  <a href="#afbe5de57eadc457518df7a1bb0d30c00">More...</a><br/></td></tr>
+<tr class="separator:afbe5de57eadc457518df7a1bb0d30c00"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a99e279a995a51abfb87b865e886949f8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a99e279a995a51abfb87b865e886949f8"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#a99e279a995a51abfb87b865e886949f8">release</a> ()</td></tr>
+<tr class="memdesc:a99e279a995a51abfb87b865e886949f8"><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br/></td></tr>
+<tr class="separator:a99e279a995a51abfb87b865e886949f8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa693c05221d977856a98270a255fe5df"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa693c05221d977856a98270a255fe5df"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#aa693c05221d977856a98270a255fe5df">downgrade_to_reader</a> ()</td></tr>
+<tr class="memdesc:aa693c05221d977856a98270a255fe5df"><td class="mdescLeft"> </td><td class="mdescRight">Downgrade writer to become a reader. <br/></td></tr>
+<tr class="separator:aa693c05221d977856a98270a255fe5df"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abf17ada91882fd70f139c503c0220f16"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abf17ada91882fd70f139c503c0220f16"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#abf17ada91882fd70f139c503c0220f16">try_acquire</a> (<a class="el" href="a00141.html">spin_rw_mutex</a> &m, bool write=true)</td></tr>
+<tr class="memdesc:abf17ada91882fd70f139c503c0220f16"><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given mutex. <br/></td></tr>
+<tr class="separator:abf17ada91882fd70f139c503c0220f16"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:a8d70c5a2348e30a6979bfbf677328dc4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8d70c5a2348e30a6979bfbf677328dc4"></a>
+<a class="el" href="a00141.html">spin_rw_mutex</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#a8d70c5a2348e30a6979bfbf677328dc4">mutex</a></td></tr>
+<tr class="memdesc:a8d70c5a2348e30a6979bfbf677328dc4"><td class="mdescLeft"> </td><td class="mdescRight">The pointer to the current mutex that is held, or NULL if no mutex is held. <br/></td></tr>
+<tr class="separator:a8d70c5a2348e30a6979bfbf677328dc4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acfd129dc5106ad1129ba803e67311050"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#acfd129dc5106ad1129ba803e67311050">is_writer</a></td></tr>
+<tr class="memdesc:acfd129dc5106ad1129ba803e67311050"><td class="mdescLeft"> </td><td class="mdescRight">If mutex!=NULL, then is_writer is true if holding a writer lock, false if holding a reader lock.  <a href="#acfd129dc5106ad1129ba803e67311050">More...</a><br/></td></tr>
+<tr class="separator:acfd129dc5106ad1129ba803e67311050"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
 Friends</h2></td></tr>
-<tr class="memitem:adf989c33fa5ee03e75925c2d0f86b89e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adf989c33fa5ee03e75925c2d0f86b89e"></a>
-class </td><td class="memItemRight" valign="bottom"><b>spin_mutex</b></td></tr>
-<tr class="separator:adf989c33fa5ee03e75925c2d0f86b89e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad3297bb1f91f2e12c4f3fb3e68f135bb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3297bb1f91f2e12c4f3fb3e68f135bb"></a>
+class </td><td class="memItemRight" valign="bottom"><b>tbb::interface8::internal::x86_rtm_rw_mutex</b></td></tr>
+<tr class="separator:ad3297bb1f91f2e12c4f3fb3e68f135bb"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Represents acquisition of a mutex. </p>
-</div><h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="a76acbd67c74906f6ea33a1de6fd443ce"></a>
+<div class="textblock"><p>The scoped locking pattern. </p>
+<p>It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks. </p>
+</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
+<a class="anchor" id="a285b355121772c874a7ecaaf4d347224"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">tbb::spin_rw_mutex_v3::scoped_lock::scoped_lock </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Construct lock that has not acquired a mutex. </p>
+<p>Equivalent to zero-initialization of *this. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="afbe5de57eadc457518df7a1bb0d30c00"></a>
 <div class="memitem">
 <div class="memproto">
 <table class="mlabels">
@@ -102,10 +148,9 @@ class </td><td class="memItemRight" valign="bottom"><b>spin_mutex</b></td><
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">bool tbb::spin_mutex::scoped_lock::try_acquire </td>
+          <td class="memname">bool tbb::spin_rw_mutex_v3::scoped_lock::upgrade_to_writer </td>
           <td>(</td>
-          <td class="paramtype"><a class="el" href="a00145.html">spin_mutex</a> & </td>
-          <td class="paramname"><em>m</em>)</td><td></td>
+          <td class="paramname">)</td><td></td>
           <td></td>
         </tr>
       </table>
@@ -116,18 +161,46 @@ class </td><td class="memItemRight" valign="bottom"><b>spin_mutex</b></td><
 </table>
 </div><div class="memdoc">
 
-<p>Try acquiring lock (non-blocking) </p>
-<p>Return true if lock acquired; false otherwise. </p>
+<p>Upgrade reader to become a writer. </p>
+<p>Returns whether the upgrade happened without releasing and re-acquiring the lock </p>
+
+<p>References <a class="el" href="a00134.html#acfd129dc5106ad1129ba803e67311050">is_writer</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Data Documentation</h2>
+<a class="anchor" id="acfd129dc5106ad1129ba803e67311050"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::spin_rw_mutex_v3::scoped_lock::is_writer</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>If mutex!=NULL, then is_writer is true if holding a writer lock, false if holding a reader lock. </p>
+<p>Not defined if not holding a lock. </p>
+
+<p>Referenced by <a class="el" href="a00134.html#a6d49df365396ab314e78ba07c6b96433">acquire()</a>, <a class="el" href="a00134.html#aa693c05221d977856a98270a255fe5df">downgrade_to_reader()</a>, <a class="el" href="a00134.html#a99e279a995a51abfb87b865e886949f8">release()</a>, <a class="el" href="a00134.html#abf17ada91882fd70f139c503c0220f16">try_acquire()</a>, and <a class="el" href="a00134.html#afbe5de57eadc457518df7a1bb0d30c00">upgrade_to_writer()</a>.</p>
 
 </div>
 </div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>spin_mutex.h</li>
+<li>spin_rw_mutex.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00134.png b/doc/html/a00134.png
index 25da9c6..13249c6 100644
Binary files a/doc/html/a00134.png and b/doc/html/a00134.png differ
diff --git a/doc/html/a00135.html b/doc/html/a00135.html
index 6f725fb..cf309a3 100644
--- a/doc/html/a00135.html
+++ b/doc/html/a00135.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::spin_rw_mutex_v3::scoped_lock Class Reference</title>
+<title>tbb::mutex::scoped_lock Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,174 +33,75 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00146.html">spin_rw_mutex_v3</a></li><li class="navelem"><a class="el" href="a00135.html">scoped_lock</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00082.html">mutex</a></li><li class="navelem"><a class="el" href="a00135.html">scoped_lock</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-attribs">Protected Attributes</a> |
 <a href="#friends">Friends</a> |
-<a href="a00305.html">List of all members</a>  </div>
+<a href="a00276.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::spin_rw_mutex_v3::scoped_lock Class Reference</div>  </div>
+<div class="title">tbb::mutex::scoped_lock Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
 <p>The scoped locking pattern.  
  <a href="a00135.html#details">More...</a></p>
 
-<p><code>#include <spin_rw_mutex.h></code></p>
+<p><code>#include <mutex.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::spin_rw_mutex_v3::scoped_lock:</div>
+Inheritance diagram for tbb::mutex::scoped_lock:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00135.png" usemap="#tbb::spin_rw_mutex_v3::scoped_lock_map" alt=""/>
-  <map id="tbb::spin_rw_mutex_v3::scoped_lock_map" name="tbb::spin_rw_mutex_v3::scoped_lock_map">
+  <img src="a00135.png" usemap="#tbb::mutex::scoped_lock_map" alt=""/>
+  <map id="tbb::mutex::scoped_lock_map" name="tbb::mutex::scoped_lock_map">
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a285b355121772c874a7ecaaf4d347224"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#a285b355121772c874a7ecaaf4d347224">scoped_lock</a> ()</td></tr>
-<tr class="memdesc:a285b355121772c874a7ecaaf4d347224"><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex.  <a href="#a285b355121772c874a7ecaaf4d347224">More...</a><br/></td></tr>
-<tr class="separator:a285b355121772c874a7ecaaf4d347224"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0a2e15358575f7651446bca13a5a2674"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0a2e15358575f7651446bca13a5a2674"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#a0a2e15358575f7651446bca13a5a2674">scoped_lock</a> (<a class="el" href="a00146.html">spin_rw_mutex</a> &m, bool write=true)</td></tr>
-<tr class="memdesc:a0a2e15358575f7651446bca13a5a2674"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br/></td></tr>
-<tr class="separator:a0a2e15358575f7651446bca13a5a2674"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5c27ca2e0c9db960a9a7430082ff7edd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5c27ca2e0c9db960a9a7430082ff7edd"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#a5c27ca2e0c9db960a9a7430082ff7edd">~scoped_lock</a> ()</td></tr>
-<tr class="memdesc:a5c27ca2e0c9db960a9a7430082ff7edd"><td class="mdescLeft"> </td><td class="mdescRight">Release lock (if lock is held). <br/></td></tr>
-<tr class="separator:a5c27ca2e0c9db960a9a7430082ff7edd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6d49df365396ab314e78ba07c6b96433"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6d49df365396ab314e78ba07c6b96433"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#a6d49df365396ab314e78ba07c6b96433">acquire</a> (<a class="el" href="a00146.html">spin_rw_mutex</a> &m, bool write=true)</td></tr>
-<tr class="memdesc:a6d49df365396ab314e78ba07c6b96433"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br/></td></tr>
-<tr class="separator:a6d49df365396ab314e78ba07c6b96433"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afbe5de57eadc457518df7a1bb0d30c00"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#afbe5de57eadc457518df7a1bb0d30c00">upgrade_to_writer</a> ()</td></tr>
-<tr class="memdesc:afbe5de57eadc457518df7a1bb0d30c00"><td class="mdescLeft"> </td><td class="mdescRight">Upgrade reader to become a writer.  <a href="#afbe5de57eadc457518df7a1bb0d30c00">More...</a><br/></td></tr>
-<tr class="separator:afbe5de57eadc457518df7a1bb0d30c00"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a99e279a995a51abfb87b865e886949f8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a99e279a995a51abfb87b865e886949f8"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#a99e279a995a51abfb87b865e886949f8">release</a> ()</td></tr>
-<tr class="memdesc:a99e279a995a51abfb87b865e886949f8"><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br/></td></tr>
-<tr class="separator:a99e279a995a51abfb87b865e886949f8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa693c05221d977856a98270a255fe5df"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa693c05221d977856a98270a255fe5df"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#aa693c05221d977856a98270a255fe5df">downgrade_to_reader</a> ()</td></tr>
-<tr class="memdesc:aa693c05221d977856a98270a255fe5df"><td class="mdescLeft"> </td><td class="mdescRight">Downgrade writer to become a reader. <br/></td></tr>
-<tr class="separator:aa693c05221d977856a98270a255fe5df"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abf17ada91882fd70f139c503c0220f16"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abf17ada91882fd70f139c503c0220f16"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#abf17ada91882fd70f139c503c0220f16">try_acquire</a> (<a class="el" href="a00146.html">spin_rw_mutex</a> &m, bool write=true)</td></tr>
-<tr class="memdesc:abf17ada91882fd70f139c503c0220f16"><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given mutex. <br/></td></tr>
-<tr class="separator:abf17ada91882fd70f139c503c0220f16"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
-Protected Attributes</h2></td></tr>
-<tr class="memitem:a8d70c5a2348e30a6979bfbf677328dc4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8d70c5a2348e30a6979bfbf677328dc4"></a>
-<a class="el" href="a00146.html">spin_rw_mutex</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#a8d70c5a2348e30a6979bfbf677328dc4">mutex</a></td></tr>
-<tr class="memdesc:a8d70c5a2348e30a6979bfbf677328dc4"><td class="mdescLeft"> </td><td class="mdescRight">The pointer to the current mutex that is held, or NULL if no mutex is held. <br/></td></tr>
-<tr class="separator:a8d70c5a2348e30a6979bfbf677328dc4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acfd129dc5106ad1129ba803e67311050"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#acfd129dc5106ad1129ba803e67311050">is_writer</a></td></tr>
-<tr class="memdesc:acfd129dc5106ad1129ba803e67311050"><td class="mdescLeft"> </td><td class="mdescRight">If mutex!=NULL, then is_writer is true if holding a writer lock, false if holding a reader lock.  <a href="#acfd129dc5106ad1129ba803e67311050">More...</a><br/></td></tr>
-<tr class="separator:acfd129dc5106ad1129ba803e67311050"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a23122745ccd5fc2498fcbbd5ced09e06"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a23122745ccd5fc2498fcbbd5ced09e06"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#a23122745ccd5fc2498fcbbd5ced09e06">scoped_lock</a> ()</td></tr>
+<tr class="memdesc:a23122745ccd5fc2498fcbbd5ced09e06"><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex. <br/></td></tr>
+<tr class="separator:a23122745ccd5fc2498fcbbd5ced09e06"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab7c2074543443824790433d3d6c3fece"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab7c2074543443824790433d3d6c3fece"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#ab7c2074543443824790433d3d6c3fece">scoped_lock</a> (<a class="el" href="a00082.html">mutex</a> &<a class="el" href="a00082.html">mutex</a>)</td></tr>
+<tr class="memdesc:ab7c2074543443824790433d3d6c3fece"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br/></td></tr>
+<tr class="separator:ab7c2074543443824790433d3d6c3fece"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a08c399ee0bb9762039b29e570ec46fe9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a08c399ee0bb9762039b29e570ec46fe9"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#a08c399ee0bb9762039b29e570ec46fe9">~scoped_lock</a> ()</td></tr>
+<tr class="memdesc:a08c399ee0bb9762039b29e570ec46fe9"><td class="mdescLeft"> </td><td class="mdescRight">Release lock (if lock is held). <br/></td></tr>
+<tr class="separator:a08c399ee0bb9762039b29e570ec46fe9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9fce3e2e9f592315dc9c1ada72ae5e3c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9fce3e2e9f592315dc9c1ada72ae5e3c"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#a9fce3e2e9f592315dc9c1ada72ae5e3c">acquire</a> (<a class="el" href="a00082.html">mutex</a> &<a class="el" href="a00082.html">mutex</a>)</td></tr>
+<tr class="memdesc:a9fce3e2e9f592315dc9c1ada72ae5e3c"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br/></td></tr>
+<tr class="separator:a9fce3e2e9f592315dc9c1ada72ae5e3c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a46f983371aa852d2427ce69f9a571f78"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a46f983371aa852d2427ce69f9a571f78"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#a46f983371aa852d2427ce69f9a571f78">try_acquire</a> (<a class="el" href="a00082.html">mutex</a> &<a class="el" href="a00082.html">mutex</a>)</td></tr>
+<tr class="memdesc:a46f983371aa852d2427ce69f9a571f78"><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given mutex. <br/></td></tr>
+<tr class="separator:a46f983371aa852d2427ce69f9a571f78"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1a1590281ccca912229a689d920fd78a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1a1590281ccca912229a689d920fd78a"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#a1a1590281ccca912229a689d920fd78a">release</a> ()</td></tr>
+<tr class="memdesc:a1a1590281ccca912229a689d920fd78a"><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br/></td></tr>
+<tr class="separator:a1a1590281ccca912229a689d920fd78a"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
 Friends</h2></td></tr>
-<tr class="memitem:ad3297bb1f91f2e12c4f3fb3e68f135bb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3297bb1f91f2e12c4f3fb3e68f135bb"></a>
-class </td><td class="memItemRight" valign="bottom"><b>tbb::interface8::internal::x86_rtm_rw_mutex</b></td></tr>
-<tr class="separator:ad3297bb1f91f2e12c4f3fb3e68f135bb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6f4535025b9df015e1a7d35f4e2bbee7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6f4535025b9df015e1a7d35f4e2bbee7"></a>
+class </td><td class="memItemRight" valign="bottom"><b>mutex</b></td></tr>
+<tr class="separator:a6f4535025b9df015e1a7d35f4e2bbee7"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>The scoped locking pattern. </p>
 <p>It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks. </p>
-</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a285b355121772c874a7ecaaf4d347224"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">tbb::spin_rw_mutex_v3::scoped_lock::scoped_lock </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Construct lock that has not acquired a mutex. </p>
-<p>Equivalent to zero-initialization of *this. </p>
-
-</div>
-</div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="afbe5de57eadc457518df7a1bb0d30c00"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool tbb::spin_rw_mutex_v3::scoped_lock::upgrade_to_writer </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Upgrade reader to become a writer. </p>
-<p>Returns whether the upgrade happened without releasing and re-acquiring the lock </p>
-
-<p>References <a class="el" href="a00135.html#acfd129dc5106ad1129ba803e67311050">is_writer</a>.</p>
-
-</div>
-</div>
-<h2 class="groupheader">Member Data Documentation</h2>
-<a class="anchor" id="acfd129dc5106ad1129ba803e67311050"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool tbb::spin_rw_mutex_v3::scoped_lock::is_writer</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>If mutex!=NULL, then is_writer is true if holding a writer lock, false if holding a reader lock. </p>
-<p>Not defined if not holding a lock. </p>
-
-<p>Referenced by <a class="el" href="a00135.html#a6d49df365396ab314e78ba07c6b96433">acquire()</a>, <a class="el" href="a00135.html#aa693c05221d977856a98270a255fe5df">downgrade_to_reader()</a>, <a class="el" href="a00135.html#a99e279a995a51abfb87b865e886949f8">release()</a>, <a class="el" href="a00135.html#abf17ada91882fd70f139c503c0220f16">try_acquire()</a>, and <a class="el" href="a00135.html#afbe5de57eadc457518df7a1bb0d30c00">upgrade_to_writer()</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>spin_rw_mutex.h</li>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>mutex.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00135.png b/doc/html/a00135.png
index 13249c6..5450176 100644
Binary files a/doc/html/a00135.png and b/doc/html/a00135.png differ
diff --git a/doc/html/a00136.html b/doc/html/a00136.html
index eb9f204..bf144d5 100644
--- a/doc/html/a00136.html
+++ b/doc/html/a00136.html
@@ -33,13 +33,13 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00058.html">critical_section_v4</a></li><li class="navelem"><a class="el" href="a00136.html">scoped_lock</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00050.html">critical_section_v4</a></li><li class="navelem"><a class="el" href="a00136.html">scoped_lock</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00410.html">List of all members</a>  </div>
+<a href="a00396.html">List of all members</a>  </div>
   <div class="headertitle">
 <div class="title">tbb::internal::critical_section_v4::scoped_lock Class Reference</div>  </div>
 </div><!--header-->
@@ -56,7 +56,7 @@ Inheritance diagram for tbb::internal::critical_section_v4::scoped_lock:</div>
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
 <tr class="memitem:a3d2a294e9d790bdeba9ca3ff60e75d53"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d2a294e9d790bdeba9ca3ff60e75d53"></a>
- </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b> (<a class="el" href="a00058.html">critical_section_v4</a> &lock_me)</td></tr>
+ </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b> (<a class="el" href="a00050.html">critical_section_v4</a> &lock_me)</td></tr>
 <tr class="separator:a3d2a294e9d790bdeba9ca3ff60e75d53"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <hr/>The documentation for this class was generated from the following file:<ul>
@@ -65,7 +65,7 @@ Public Member Functions</h2></td></tr>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00137.html b/doc/html/a00137.html
index efe3bae..a5368ec 100644
--- a/doc/html/a00137.html
+++ b/doc/html/a00137.html
@@ -33,13 +33,13 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00101.html">null_mutex</a></li><li class="navelem"><a class="el" href="a00137.html">scoped_lock</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00084.html">null_mutex</a></li><li class="navelem"><a class="el" href="a00137.html">scoped_lock</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00282.html">List of all members</a>  </div>
+<a href="a00278.html">List of all members</a>  </div>
   <div class="headertitle">
 <div class="title">tbb::null_mutex::scoped_lock Class Reference</div>  </div>
 </div><!--header-->
@@ -61,13 +61,13 @@ Inheritance diagram for tbb::null_mutex::scoped_lock:</div>
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
 <tr class="memitem:af71834d1fc4c7406595e9df5b43ab7bb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af71834d1fc4c7406595e9df5b43ab7bb"></a>
- </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b> (<a class="el" href="a00101.html">null_mutex</a> &)</td></tr>
+ </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b> (<a class="el" href="a00084.html">null_mutex</a> &)</td></tr>
 <tr class="separator:af71834d1fc4c7406595e9df5b43ab7bb"><td class="memSeparator" colspan="2"> </td></tr>
 <tr class="memitem:a7d541c92b1678a7dde6a45783a02160f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7d541c92b1678a7dde6a45783a02160f"></a>
-void </td><td class="memItemRight" valign="bottom"><b>acquire</b> (<a class="el" href="a00101.html">null_mutex</a> &)</td></tr>
+void </td><td class="memItemRight" valign="bottom"><b>acquire</b> (<a class="el" href="a00084.html">null_mutex</a> &)</td></tr>
 <tr class="separator:a7d541c92b1678a7dde6a45783a02160f"><td class="memSeparator" colspan="2"> </td></tr>
 <tr class="memitem:ac5d4d5a4182091ea13fb5d38667f6449"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac5d4d5a4182091ea13fb5d38667f6449"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>try_acquire</b> (<a class="el" href="a00101.html">null_mutex</a> &)</td></tr>
+bool </td><td class="memItemRight" valign="bottom"><b>try_acquire</b> (<a class="el" href="a00084.html">null_mutex</a> &)</td></tr>
 <tr class="separator:ac5d4d5a4182091ea13fb5d38667f6449"><td class="memSeparator" colspan="2"> </td></tr>
 <tr class="memitem:a21f848f83dfa6504381e3da4de7a9e00"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a21f848f83dfa6504381e3da4de7a9e00"></a>
 void </td><td class="memItemRight" valign="bottom"><b>release</b> ()</td></tr>
@@ -81,7 +81,7 @@ void </td><td class="memItemRight" valign="bottom"><b>release</b> ()</td></
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00138.html b/doc/html/a00138.html
index 1f8d058..7704e41 100644
--- a/doc/html/a00138.html
+++ b/doc/html/a00138.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::null_rw_mutex::scoped_lock Class Reference</title>
+<title>tbb::interface5::reader_writer_lock::scoped_lock_read Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,61 +33,64 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00102.html">null_rw_mutex</a></li><li class="navelem"><a class="el" href="a00138.html">scoped_lock</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00108.html">reader_writer_lock</a></li><li class="navelem"><a class="el" href="a00138.html">scoped_lock_read</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00284.html">List of all members</a>  </div>
+<a href="#friends">Friends</a> |
+<a href="a00371.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::null_rw_mutex::scoped_lock Class Reference</div>  </div>
+<div class="title">tbb::interface5::reader_writer_lock::scoped_lock_read Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>Represents acquisition of a mutex.  
+<p>The scoped lock pattern for read locks.  
  <a href="a00138.html#details">More...</a></p>
 
-<p><code>#include <null_rw_mutex.h></code></p>
+<p><code>#include <reader_writer_lock.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::null_rw_mutex::scoped_lock:</div>
+Inheritance diagram for tbb::interface5::reader_writer_lock::scoped_lock_read:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00138.png" usemap="#tbb::null_rw_mutex::scoped_lock_map" alt=""/>
-  <map id="tbb::null_rw_mutex::scoped_lock_map" name="tbb::null_rw_mutex::scoped_lock_map">
+  <img src="a00138.png" usemap="#tbb::interface5::reader_writer_lock::scoped_lock_read_map" alt=""/>
+  <map id="tbb::interface5::reader_writer_lock::scoped_lock_read_map" name="tbb::interface5::reader_writer_lock::scoped_lock_read_map">
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a4b7f9a3976c7744a96e435e027c6262c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4b7f9a3976c7744a96e435e027c6262c"></a>
- </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b> (<a class="el" href="a00102.html">null_rw_mutex</a> &, bool=true)</td></tr>
-<tr class="separator:a4b7f9a3976c7744a96e435e027c6262c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a251d45c5c42ac6c6006d0463c2173bc8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a251d45c5c42ac6c6006d0463c2173bc8"></a>
-void </td><td class="memItemRight" valign="bottom"><b>acquire</b> (<a class="el" href="a00102.html">null_rw_mutex</a> &, bool=true)</td></tr>
-<tr class="separator:a251d45c5c42ac6c6006d0463c2173bc8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a07ed8c0c225fec43b96dcec5b4d4380d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a07ed8c0c225fec43b96dcec5b4d4380d"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>upgrade_to_writer</b> ()</td></tr>
-<tr class="separator:a07ed8c0c225fec43b96dcec5b4d4380d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a899c14f8d077edd2fe7925bb82a94686"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a899c14f8d077edd2fe7925bb82a94686"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>downgrade_to_reader</b> ()</td></tr>
-<tr class="separator:a899c14f8d077edd2fe7925bb82a94686"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afdb10af455fa8730b1a9bc8d5ca16c41"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afdb10af455fa8730b1a9bc8d5ca16c41"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>try_acquire</b> (<a class="el" href="a00102.html">null_rw_mutex</a> &, bool=true)</td></tr>
-<tr class="separator:afdb10af455fa8730b1a9bc8d5ca16c41"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a57d0613ea1614fe9c7daa0706e56efab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a57d0613ea1614fe9c7daa0706e56efab"></a>
-void </td><td class="memItemRight" valign="bottom"><b>release</b> ()</td></tr>
-<tr class="separator:a57d0613ea1614fe9c7daa0706e56efab"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9d3120a23016dabd4cc2683fa561ee5a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9d3120a23016dabd4cc2683fa561ee5a"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#a9d3120a23016dabd4cc2683fa561ee5a">scoped_lock_read</a> (<a class="el" href="a00108.html">reader_writer_lock</a> &<a class="el" href="a00108.html#af92eb949fc491af8f7e350869ea0a0d1">lock</a>)</td></tr>
+<tr class="memdesc:a9d3120a23016dabd4cc2683fa561ee5a"><td class="mdescLeft"> </td><td class="mdescRight">Construct with blocking attempt to acquire read lock on the passed-in lock. <br/></td></tr>
+<tr class="separator:a9d3120a23016dabd4cc2683fa561ee5a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf0e23fb4d3aeb6bde18d5d1236bd9d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf0e23fb4d3aeb6bde18d5d1236bd9d5"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#acf0e23fb4d3aeb6bde18d5d1236bd9d5">~scoped_lock_read</a> ()</td></tr>
+<tr class="memdesc:acf0e23fb4d3aeb6bde18d5d1236bd9d5"><td class="mdescLeft"> </td><td class="mdescRight">Destructor, releases the read lock. <br/></td></tr>
+<tr class="separator:acf0e23fb4d3aeb6bde18d5d1236bd9d5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9eb8c7a64912a1c74ea76a01a20a1621"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9eb8c7a64912a1c74ea76a01a20a1621"></a>
+void * </td><td class="memItemRight" valign="bottom"><b>operator new</b> (size_t s)</td></tr>
+<tr class="separator:a9eb8c7a64912a1c74ea76a01a20a1621"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1a6c15dfdbe1bc7a6648ed836ebd8de6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1a6c15dfdbe1bc7a6648ed836ebd8de6"></a>
+void </td><td class="memItemRight" valign="bottom"><b>operator delete</b> (void *p)</td></tr>
+<tr class="separator:a1a6c15dfdbe1bc7a6648ed836ebd8de6"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:afb01bc2e211c782503ef5088003f120f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afb01bc2e211c782503ef5088003f120f"></a>
+class </td><td class="memItemRight" valign="bottom"><b>reader_writer_lock</b></td></tr>
+<tr class="separator:afb01bc2e211c782503ef5088003f120f"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Represents acquisition of a mutex. </p>
+<div class="textblock"><p>The scoped lock pattern for read locks. </p>
 </div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>null_rw_mutex.h</li>
+<li>reader_writer_lock.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00138.png b/doc/html/a00138.png
index 081a54d..10066bd 100644
Binary files a/doc/html/a00138.png and b/doc/html/a00138.png differ
diff --git a/doc/html/a00139.html b/doc/html/a00139.html
index c322c80..e732974 100644
--- a/doc/html/a00139.html
+++ b/doc/html/a00139.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::recursive_mutex::scoped_lock Class Reference</title>
+<title>tbb::flow::interface9::sender< T > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,75 +33,161 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00125.html">recursive_mutex</a></li><li class="navelem"><a class="el" href="a00139.html">scoped_lock</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00139.html">sender</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#friends">Friends</a> |
-<a href="a00297.html">List of all members</a>  </div>
+<a href="#pro-methods">Protected Member Functions</a> |
+<a href="a00323.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::recursive_mutex::scoped_lock Class Reference</div>  </div>
+<div class="title">tbb::flow::interface9::sender< T > Class Template Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>The scoped locking pattern.  
+<p>Pure virtual template class that defines a sender of messages of type T.  
  <a href="a00139.html#details">More...</a></p>
 
-<p><code>#include <recursive_mutex.h></code></p>
+<p><code>#include <flow_graph.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::recursive_mutex::scoped_lock:</div>
+Inheritance diagram for tbb::flow::interface9::sender< T >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00139.png" usemap="#tbb::recursive_mutex::scoped_lock_map" alt=""/>
-  <map id="tbb::recursive_mutex::scoped_lock_map" name="tbb::recursive_mutex::scoped_lock_map">
+  <img src="a00139.png" usemap="#tbb::flow::interface9::sender< T >_map" alt=""/>
+  <map id="tbb::flow::interface9::sender< T >_map" name="tbb::flow::interface9::sender< T >_map">
+<area href="a00165.html" alt="tbb::flow::interface9::internal::untyped_sender" shape="rect" coords="0,0,266,24"/>
 </map>
  </div></div>
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a7824890d85a80842e2c9b2258cd7c484"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7824890d85a80842e2c9b2258cd7c484"></a>
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#a7824890d85a80842e2c9b2258cd7c484">output_type</a></td></tr>
+<tr class="memdesc:a7824890d85a80842e2c9b2258cd7c484"><td class="mdescLeft"> </td><td class="mdescRight">The output type of this sender. <br/></td></tr>
+<tr class="separator:a7824890d85a80842e2c9b2258cd7c484"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a824f5872ae437643af0bf262b02ac95a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a824f5872ae437643af0bf262b02ac95a"></a>
+typedef <br class="typebreak"/>
+internal::async_helpers< T ><br class="typebreak"/>
+::filtered_type </td><td class="memItemRight" valign="bottom"><b>filtered_type</b></td></tr>
+<tr class="separator:a824f5872ae437643af0bf262b02ac95a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7824890d85a80842e2c9b2258cd7c484"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7824890d85a80842e2c9b2258cd7c484"></a>
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#a7824890d85a80842e2c9b2258cd7c484">output_type</a></td></tr>
+<tr class="memdesc:a7824890d85a80842e2c9b2258cd7c484"><td class="mdescLeft"> </td><td class="mdescRight">The output type of this sender. <br/></td></tr>
+<tr class="separator:a7824890d85a80842e2c9b2258cd7c484"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2e54e49c21aed85603dd1f0ed5ca8e2e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2e54e49c21aed85603dd1f0ed5ca8e2e"></a>
+typedef <a class="el" href="a00119.html">receiver</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#a2e54e49c21aed85603dd1f0ed5ca8e2e">successor_type</a></td></tr>
+<tr class="memdesc:a2e54e49c21aed85603dd1f0ed5ca8e2e"><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <br/></td></tr>
+<tr class="separator:a2e54e49c21aed85603dd1f0ed5ca8e2e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a437ea39be02895899af68a1a91f6c1e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a437ea39be02895899af68a1a91f6c1e5"></a>
+typedef <br class="typebreak"/>
+<a class="el" href="a00056.html">internal::edge_container</a><br class="typebreak"/>
+< <a class="el" href="a00165.html#a7b4e68e6917207283f5c621e7053c7ea">successor_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#a437ea39be02895899af68a1a91f6c1e5">built_successors_type</a></td></tr>
+<tr class="memdesc:a437ea39be02895899af68a1a91f6c1e5"><td class="mdescLeft"> </td><td class="mdescRight">interface to record edges for traversal & deletion <br/></td></tr>
+<tr class="separator:a437ea39be02895899af68a1a91f6c1e5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a112b7f9772393a4f8c3709e10af21b88"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a112b7f9772393a4f8c3709e10af21b88"></a>
+typedef <br class="typebreak"/>
+built_successors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>successor_list_type</b></td></tr>
+<tr class="separator:a112b7f9772393a4f8c3709e10af21b88"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_types_a00165"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00165')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a></td></tr>
+<tr class="memitem:a7b4e68e6917207283f5c621e7053c7ea inherit pub_types_a00165"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b4e68e6917207283f5c621e7053c7ea"></a>
+typedef <a class="el" href="a00164.html">untyped_receiver</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html#a7b4e68e6917207283f5c621e7053c7ea">successor_type</a></td></tr>
+<tr class="memdesc:a7b4e68e6917207283f5c621e7053c7ea inherit pub_types_a00165"><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <br/></td></tr>
+<tr class="separator:a7b4e68e6917207283f5c621e7053c7ea inherit pub_types_a00165"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0d674709d3783ec5b42eb243069fed73 inherit pub_types_a00165"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0d674709d3783ec5b42eb243069fed73"></a>
+typedef <br class="typebreak"/>
+<a class="el" href="a00056.html">internal::edge_container</a><br class="typebreak"/>
+< <a class="el" href="a00165.html#a7b4e68e6917207283f5c621e7053c7ea">successor_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html#a0d674709d3783ec5b42eb243069fed73">built_successors_type</a></td></tr>
+<tr class="memdesc:a0d674709d3783ec5b42eb243069fed73 inherit pub_types_a00165"><td class="mdescLeft"> </td><td class="mdescRight">interface to record edges for traversal & deletion <br/></td></tr>
+<tr class="separator:a0d674709d3783ec5b42eb243069fed73 inherit pub_types_a00165"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab2b4041678d97545a6785d8d3fad01d0 inherit pub_types_a00165"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab2b4041678d97545a6785d8d3fad01d0"></a>
+typedef <br class="typebreak"/>
+built_successors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>successor_list_type</b></td></tr>
+<tr class="separator:ab2b4041678d97545a6785d8d3fad01d0 inherit pub_types_a00165"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a0a9962a3932cfbd0d12cb197494f951b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0a9962a3932cfbd0d12cb197494f951b"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#a0a9962a3932cfbd0d12cb197494f951b">scoped_lock</a> ()</td></tr>
-<tr class="memdesc:a0a9962a3932cfbd0d12cb197494f951b"><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a <a class="el" href="a00125.html">recursive_mutex</a>. <br/></td></tr>
-<tr class="separator:a0a9962a3932cfbd0d12cb197494f951b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab42cb541abb9647cac23b1db9a4db93d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab42cb541abb9647cac23b1db9a4db93d"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#ab42cb541abb9647cac23b1db9a4db93d">scoped_lock</a> (<a class="el" href="a00125.html">recursive_mutex</a> &<a class="el" href="a00099.html">mutex</a>)</td></tr>
-<tr class="memdesc:ab42cb541abb9647cac23b1db9a4db93d"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br/></td></tr>
-<tr class="separator:ab42cb541abb9647cac23b1db9a4db93d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a90a966e19120aac99b36a3d6d04af1a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a90a966e19120aac99b36a3d6d04af1a2"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#a90a966e19120aac99b36a3d6d04af1a2">~scoped_lock</a> ()</td></tr>
-<tr class="memdesc:a90a966e19120aac99b36a3d6d04af1a2"><td class="mdescLeft"> </td><td class="mdescRight">Release lock (if lock is held). <br/></td></tr>
-<tr class="separator:a90a966e19120aac99b36a3d6d04af1a2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac5450ce6a5813f395afaa434384c6539"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac5450ce6a5813f395afaa434384c6539"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#ac5450ce6a5813f395afaa434384c6539">acquire</a> (<a class="el" href="a00125.html">recursive_mutex</a> &<a class="el" href="a00099.html">mutex</a>)</td></tr>
-<tr class="memdesc:ac5450ce6a5813f395afaa434384c6539"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br/></td></tr>
-<tr class="separator:ac5450ce6a5813f395afaa434384c6539"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a160bba506f4033980ddb69ab7a02c4fb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a160bba506f4033980ddb69ab7a02c4fb"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#a160bba506f4033980ddb69ab7a02c4fb">try_acquire</a> (<a class="el" href="a00125.html">recursive_mutex</a> &<a class="el" href="a00099.html">mutex</a>)</td></tr>
-<tr class="memdesc:a160bba506f4033980ddb69ab7a02c4fb"><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given <a class="el" href="a00125.html">recursive_mutex</a>. <br/></td></tr>
-<tr class="separator:a160bba506f4033980ddb69ab7a02c4fb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2fe3246ffc26bdb5a58f33ca513b6c0f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2fe3246ffc26bdb5a58f33ca513b6c0f"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#a2fe3246ffc26bdb5a58f33ca513b6c0f">release</a> ()</td></tr>
-<tr class="memdesc:a2fe3246ffc26bdb5a58f33ca513b6c0f"><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br/></td></tr>
-<tr class="separator:a2fe3246ffc26bdb5a58f33ca513b6c0f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1cd7d47cd6ac5db05c0868ca43231633"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1cd7d47cd6ac5db05c0868ca43231633"></a>
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#a1cd7d47cd6ac5db05c0868ca43231633">try_get</a> (T &)</td></tr>
+<tr class="memdesc:a1cd7d47cd6ac5db05c0868ca43231633"><td class="mdescLeft"> </td><td class="mdescRight">Request an item from the sender. <br/></td></tr>
+<tr class="separator:a1cd7d47cd6ac5db05c0868ca43231633"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a82caccf2fcbbad3f255380260c39d02c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a82caccf2fcbbad3f255380260c39d02c"></a>
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#a82caccf2fcbbad3f255380260c39d02c">try_reserve</a> (T &)</td></tr>
+<tr class="memdesc:a82caccf2fcbbad3f255380260c39d02c"><td class="mdescLeft"> </td><td class="mdescRight">Reserves an item in the sender. <br/></td></tr>
+<tr class="separator:a82caccf2fcbbad3f255380260c39d02c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af481e8df87d085c3054bd7c76d7f50ef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af481e8df87d085c3054bd7c76d7f50ef"></a>
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#af481e8df87d085c3054bd7c76d7f50ef">register_successor</a> (<a class="el" href="a00165.html#a7b4e68e6917207283f5c621e7053c7ea">successor_type</a> &r)=0</td></tr>
+<tr class="memdesc:af481e8df87d085c3054bd7c76d7f50ef"><td class="mdescLeft"> </td><td class="mdescRight">Add a new successor to this node. <br/></td></tr>
+<tr class="separator:af481e8df87d085c3054bd7c76d7f50ef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7b94781eff02591069fd8afdfd7f01d7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b94781eff02591069fd8afdfd7f01d7"></a>
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#a7b94781eff02591069fd8afdfd7f01d7">remove_successor</a> (<a class="el" href="a00165.html#a7b4e68e6917207283f5c621e7053c7ea">successor_type</a> &r)=0</td></tr>
+<tr class="memdesc:a7b94781eff02591069fd8afdfd7f01d7"><td class="mdescLeft"> </td><td class="mdescRight">Removes a successor from this node. <br/></td></tr>
+<tr class="separator:a7b94781eff02591069fd8afdfd7f01d7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1cd7d47cd6ac5db05c0868ca43231633"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1cd7d47cd6ac5db05c0868ca43231633"></a>
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#a1cd7d47cd6ac5db05c0868ca43231633">try_get</a> (T &)</td></tr>
+<tr class="memdesc:a1cd7d47cd6ac5db05c0868ca43231633"><td class="mdescLeft"> </td><td class="mdescRight">Request an item from the sender. <br/></td></tr>
+<tr class="separator:a1cd7d47cd6ac5db05c0868ca43231633"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a82caccf2fcbbad3f255380260c39d02c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a82caccf2fcbbad3f255380260c39d02c"></a>
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#a82caccf2fcbbad3f255380260c39d02c">try_reserve</a> (T &)</td></tr>
+<tr class="memdesc:a82caccf2fcbbad3f255380260c39d02c"><td class="mdescLeft"> </td><td class="mdescRight">Reserves an item in the sender. <br/></td></tr>
+<tr class="separator:a82caccf2fcbbad3f255380260c39d02c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a554f795789a3902760847a1e83a2f0ad"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a554f795789a3902760847a1e83a2f0ad"></a>
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#a554f795789a3902760847a1e83a2f0ad">try_release</a> ()</td></tr>
+<tr class="memdesc:a554f795789a3902760847a1e83a2f0ad"><td class="mdescLeft"> </td><td class="mdescRight">Releases the reserved item. <br/></td></tr>
+<tr class="separator:a554f795789a3902760847a1e83a2f0ad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0d0fa0cabcbbc4b1ba219ab806b85aa1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0d0fa0cabcbbc4b1ba219ab806b85aa1"></a>
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#a0d0fa0cabcbbc4b1ba219ab806b85aa1">try_consume</a> ()</td></tr>
+<tr class="memdesc:a0d0fa0cabcbbc4b1ba219ab806b85aa1"><td class="mdescLeft"> </td><td class="mdescRight">Consumes the reserved item. <br/></td></tr>
+<tr class="separator:a0d0fa0cabcbbc4b1ba219ab806b85aa1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a56a746f2bbae2615ecfa45dfbedd7513"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a56a746f2bbae2615ecfa45dfbedd7513"></a>
+virtual <a class="el" href="a00165.html#a0d674709d3783ec5b42eb243069fed73">built_successors_type</a> & </td><td class="memItemRight" valign="bottom"><b>built_successors</b> ()=0</td></tr>
+<tr class="separator:a56a746f2bbae2615ecfa45dfbedd7513"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a07b7fc959c337875f1a6ba4b8c5b81a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a07b7fc959c337875f1a6ba4b8c5b81a5"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_successor</b> (<a class="el" href="a00165.html#a7b4e68e6917207283f5c621e7053c7ea">successor_type</a> &)=0</td></tr>
+<tr class="separator:a07b7fc959c337875f1a6ba4b8c5b81a5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa82c72e67688c61e0900f8dd36b6c9cf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa82c72e67688c61e0900f8dd36b6c9cf"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><b>internal_delete_built_successor</b> (<a class="el" href="a00165.html#a7b4e68e6917207283f5c621e7053c7ea">successor_type</a> &)=0</td></tr>
+<tr class="separator:aa82c72e67688c61e0900f8dd36b6c9cf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad2647f5451bf4257b32a485cbcbc3330"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad2647f5451bf4257b32a485cbcbc3330"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><b>copy_successors</b> (successor_list_type &)=0</td></tr>
+<tr class="separator:ad2647f5451bf4257b32a485cbcbc3330"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a84eb1c14a60dd855e4ae502ffd32719f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a84eb1c14a60dd855e4ae502ffd32719f"></a>
+virtual size_t </td><td class="memItemRight" valign="bottom"><b>successor_count</b> ()=0</td></tr>
+<tr class="separator:a84eb1c14a60dd855e4ae502ffd32719f"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:a1bdb637fe5c9412323bf92846b40682e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1bdb637fe5c9412323bf92846b40682e"></a>
-class </td><td class="memItemRight" valign="bottom"><b>recursive_mutex</b></td></tr>
-<tr class="separator:a1bdb637fe5c9412323bf92846b40682e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:ae544464588509efc485e6a1622820a60"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae544464588509efc485e6a1622820a60"></a>
+virtual bool </td><td class="memItemRight" valign="bottom"><b>try_get_wrapper</b> (void *p, bool is_async) __TBB_override</td></tr>
+<tr class="separator:ae544464588509efc485e6a1622820a60"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4706cbeda5b06bc041763878d835497b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4706cbeda5b06bc041763878d835497b"></a>
+virtual bool </td><td class="memItemRight" valign="bottom"><b>try_reserve_wrapper</b> (void *p, bool is_async) __TBB_override</td></tr>
+<tr class="separator:a4706cbeda5b06bc041763878d835497b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pro_methods_a00165"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00165')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a></td></tr>
+<tr class="memitem:a3c422ea58b7f11b6cc536539000a556e inherit pro_methods_a00165"><td class="memTemplParams" colspan="2"><a class="anchor" id="a3c422ea58b7f11b6cc536539000a556e"></a>
+template<typename X > </td></tr>
+<tr class="memitem:a3c422ea58b7f11b6cc536539000a556e inherit pro_methods_a00165"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00165.html#a3c422ea58b7f11b6cc536539000a556e">try_get</a> (X &t)</td></tr>
+<tr class="memdesc:a3c422ea58b7f11b6cc536539000a556e inherit pro_methods_a00165"><td class="mdescLeft"> </td><td class="mdescRight">Request an item from the sender. <br/></td></tr>
+<tr class="separator:a3c422ea58b7f11b6cc536539000a556e inherit pro_methods_a00165"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad48b26c7dec4845e1cb374e9f1c59fea inherit pro_methods_a00165"><td class="memTemplParams" colspan="2"><a class="anchor" id="ad48b26c7dec4845e1cb374e9f1c59fea"></a>
+template<typename X > </td></tr>
+<tr class="memitem:ad48b26c7dec4845e1cb374e9f1c59fea inherit pro_methods_a00165"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00165.html#ad48b26c7dec4845e1cb374e9f1c59fea">try_reserve</a> (X &t)</td></tr>
+<tr class="memdesc:ad48b26c7dec4845e1cb374e9f1c59fea inherit pro_methods_a00165"><td class="mdescLeft"> </td><td class="mdescRight">Reserves an item in the sender. <br/></td></tr>
+<tr class="separator:ad48b26c7dec4845e1cb374e9f1c59fea inherit pro_methods_a00165"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>The scoped locking pattern. </p>
-<p>It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks. </p>
+<div class="textblock"><h3>template<typename T><br/>
+class tbb::flow::interface9::sender< T ></h3>
+
+<p>Pure virtual template class that defines a sender of messages of type T. </p>
 </div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>recursive_mutex.h</li>
+<li><a class="el" href="a00188.html">flow_graph.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00139.png b/doc/html/a00139.png
index 9d4ec98..da13d62 100644
Binary files a/doc/html/a00139.png and b/doc/html/a00139.png differ
diff --git a/doc/html/a00140.html b/doc/html/a00140.html
index 69f90a7..9a2d611 100644
--- a/doc/html/a00140.html
+++ b/doc/html/a00140.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::mutex::scoped_lock Class Reference</title>
+<title>tbb::spin_mutex Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,75 +33,147 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00099.html">mutex</a></li><li class="navelem"><a class="el" href="a00140.html">scoped_lock</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00140.html">spin_mutex</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#nested-classes">Classes</a> |
 <a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-static-attribs">Static Public Attributes</a> |
 <a href="#friends">Friends</a> |
-<a href="a00280.html">List of all members</a>  </div>
+<a href="a00297.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::mutex::scoped_lock Class Reference</div>  </div>
+<div class="title">tbb::spin_mutex Class Reference<div class="ingroups"><a class="el" href="a00255.html">Synchronization</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>The scoped locking pattern.  
+<p>A lock that occupies a single byte.  
  <a href="a00140.html#details">More...</a></p>
 
-<p><code>#include <mutex.h></code></p>
+<p><code>#include <spin_mutex.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::mutex::scoped_lock:</div>
+Inheritance diagram for tbb::spin_mutex:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00140.png" usemap="#tbb::mutex::scoped_lock_map" alt=""/>
-  <map id="tbb::mutex::scoped_lock_map" name="tbb::mutex::scoped_lock_map">
+  <img src="a00140.png" usemap="#tbb::spin_mutex_map" alt=""/>
+  <map id="tbb::spin_mutex_map" name="tbb::spin_mutex_map">
 </map>
  </div></div>
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html">scoped_lock</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00130.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a23122745ccd5fc2498fcbbd5ced09e06"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a23122745ccd5fc2498fcbbd5ced09e06"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00140.html#a23122745ccd5fc2498fcbbd5ced09e06">scoped_lock</a> ()</td></tr>
-<tr class="memdesc:a23122745ccd5fc2498fcbbd5ced09e06"><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex. <br/></td></tr>
-<tr class="separator:a23122745ccd5fc2498fcbbd5ced09e06"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab7c2074543443824790433d3d6c3fece"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab7c2074543443824790433d3d6c3fece"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00140.html#ab7c2074543443824790433d3d6c3fece">scoped_lock</a> (<a class="el" href="a00099.html">mutex</a> &<a class="el" href="a00099.html">mutex</a>)</td></tr>
-<tr class="memdesc:ab7c2074543443824790433d3d6c3fece"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br/></td></tr>
-<tr class="separator:ab7c2074543443824790433d3d6c3fece"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a08c399ee0bb9762039b29e570ec46fe9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a08c399ee0bb9762039b29e570ec46fe9"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00140.html#a08c399ee0bb9762039b29e570ec46fe9">~scoped_lock</a> ()</td></tr>
-<tr class="memdesc:a08c399ee0bb9762039b29e570ec46fe9"><td class="mdescLeft"> </td><td class="mdescRight">Release lock (if lock is held). <br/></td></tr>
-<tr class="separator:a08c399ee0bb9762039b29e570ec46fe9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9fce3e2e9f592315dc9c1ada72ae5e3c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9fce3e2e9f592315dc9c1ada72ae5e3c"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00140.html#a9fce3e2e9f592315dc9c1ada72ae5e3c">acquire</a> (<a class="el" href="a00099.html">mutex</a> &<a class="el" href="a00099.html">mutex</a>)</td></tr>
-<tr class="memdesc:a9fce3e2e9f592315dc9c1ada72ae5e3c"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br/></td></tr>
-<tr class="separator:a9fce3e2e9f592315dc9c1ada72ae5e3c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a46f983371aa852d2427ce69f9a571f78"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a46f983371aa852d2427ce69f9a571f78"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00140.html#a46f983371aa852d2427ce69f9a571f78">try_acquire</a> (<a class="el" href="a00099.html">mutex</a> &<a class="el" href="a00099.html">mutex</a>)</td></tr>
-<tr class="memdesc:a46f983371aa852d2427ce69f9a571f78"><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given mutex. <br/></td></tr>
-<tr class="separator:a46f983371aa852d2427ce69f9a571f78"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1a1590281ccca912229a689d920fd78a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1a1590281ccca912229a689d920fd78a"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00140.html#a1a1590281ccca912229a689d920fd78a">release</a> ()</td></tr>
-<tr class="memdesc:a1a1590281ccca912229a689d920fd78a"><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br/></td></tr>
-<tr class="separator:a1a1590281ccca912229a689d920fd78a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6c96196965bf7df426311d282ad3c378"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00140.html#a6c96196965bf7df426311d282ad3c378">spin_mutex</a> ()</td></tr>
+<tr class="memdesc:a6c96196965bf7df426311d282ad3c378"><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired lock.  <a href="#a6c96196965bf7df426311d282ad3c378">More...</a><br/></td></tr>
+<tr class="separator:a6c96196965bf7df426311d282ad3c378"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4ec484f4df6ec5595ec821ef20bd6cd7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ec484f4df6ec5595ec821ef20bd6cd7"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00140.html#a4ec484f4df6ec5595ec821ef20bd6cd7">internal_construct</a> ()</td></tr>
+<tr class="memdesc:a4ec484f4df6ec5595ec821ef20bd6cd7"><td class="mdescLeft"> </td><td class="mdescRight">Internal constructor with ITT instrumentation. <br/></td></tr>
+<tr class="separator:a4ec484f4df6ec5595ec821ef20bd6cd7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8957e40b0781192419d01d28e5205ec4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8957e40b0781192419d01d28e5205ec4"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00140.html#a8957e40b0781192419d01d28e5205ec4">lock</a> ()</td></tr>
+<tr class="memdesc:a8957e40b0781192419d01d28e5205ec4"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock. <br/></td></tr>
+<tr class="separator:a8957e40b0781192419d01d28e5205ec4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a003ffb196d22bf22ca22142338b7eeab"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00140.html#a003ffb196d22bf22ca22142338b7eeab">try_lock</a> ()</td></tr>
+<tr class="memdesc:a003ffb196d22bf22ca22142338b7eeab"><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring lock (non-blocking)  <a href="#a003ffb196d22bf22ca22142338b7eeab">More...</a><br/></td></tr>
+<tr class="separator:a003ffb196d22bf22ca22142338b7eeab"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adfcf8fe840aa73c08c2cadd570fd48fd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adfcf8fe840aa73c08c2cadd570fd48fd"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00140.html#adfcf8fe840aa73c08c2cadd570fd48fd">unlock</a> ()</td></tr>
+<tr class="memdesc:adfcf8fe840aa73c08c2cadd570fd48fd"><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br/></td></tr>
+<tr class="separator:adfcf8fe840aa73c08c2cadd570fd48fd"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a7c3354db4bd5cc81bccee9f249abb9e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7c3354db4bd5cc81bccee9f249abb9e8"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
+<tr class="separator:a7c3354db4bd5cc81bccee9f249abb9e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0cae048c5dc5deffe75464e4a3a2b752"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0cae048c5dc5deffe75464e4a3a2b752"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
+<tr class="separator:a0cae048c5dc5deffe75464e4a3a2b752"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad00ec9a97f34c9160300950b36deac3e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad00ec9a97f34c9160300950b36deac3e"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = false</td></tr>
+<tr class="separator:ad00ec9a97f34c9160300950b36deac3e"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
 Friends</h2></td></tr>
-<tr class="memitem:a6f4535025b9df015e1a7d35f4e2bbee7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6f4535025b9df015e1a7d35f4e2bbee7"></a>
-class </td><td class="memItemRight" valign="bottom"><b>mutex</b></td></tr>
-<tr class="separator:a6f4535025b9df015e1a7d35f4e2bbee7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afcf922650b2fd9d76b7b939d8511bbd8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afcf922650b2fd9d76b7b939d8511bbd8"></a>
+class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
+<tr class="separator:afcf922650b2fd9d76b7b939d8511bbd8"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>The scoped locking pattern. </p>
-<p>It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>mutex.h</li>
+<div class="textblock"><p>A lock that occupies a single byte. </p>
+<p>A <a class="el" href="a00140.html" title="A lock that occupies a single byte. ">spin_mutex</a> is a spin mutex that fits in a single byte. It should be used only for locking short critical sections (typically less than 20 instructions) when fairness is not an issue. If zero-initialized, the mutex is considered unheld. </p>
+</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
+<a class="anchor" id="a6c96196965bf7df426311d282ad3c378"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">tbb::spin_mutex::spin_mutex </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Construct unacquired lock. </p>
+<p>Equivalent to zero-initialization of *this. </p>
+
+<p>References <a class="el" href="a00140.html#a4ec484f4df6ec5595ec821ef20bd6cd7">internal_construct()</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="a003ffb196d22bf22ca22142338b7eeab"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::spin_mutex::try_lock </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Try acquiring lock (non-blocking) </p>
+<p>Return true if lock acquired; false otherwise. </p>
+
+<p>References <a class="el" href="a00014.html#a3525dbbac0d4eaedfe18bc57b7760857">tbb::aligned_space< T, N >::begin()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>spin_mutex.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00140.png b/doc/html/a00140.png
index 5450176..5dfc589 100644
Binary files a/doc/html/a00140.png and b/doc/html/a00140.png differ
diff --git a/doc/html/a00141.html b/doc/html/a00141.html
index 12b3f94..f1a28e8 100644
--- a/doc/html/a00141.html
+++ b/doc/html/a00141.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface5::reader_writer_lock::scoped_lock_read Class Reference</title>
+<title>tbb::spin_rw_mutex_v3 Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,64 +33,201 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00113.html">reader_writer_lock</a></li><li class="navelem"><a class="el" href="a00141.html">scoped_lock_read</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00141.html">spin_rw_mutex_v3</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#nested-classes">Classes</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#friends">Friends</a> |
-<a href="a00385.html">List of all members</a>  </div>
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="#pro-types">Protected Types</a> |
+<a href="#pro-attribs">Protected Attributes</a> |
+<a href="#pro-static-attribs">Static Protected Attributes</a> |
+<a href="a00299.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface5::reader_writer_lock::scoped_lock_read Class Reference</div>  </div>
+<div class="title">tbb::spin_rw_mutex_v3 Class Reference<div class="ingroups"><a class="el" href="a00255.html">Synchronization</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>The scoped lock pattern for read locks.  
+<p>Fast, unfair, spinning reader-writer lock with backoff and writer-preference.  
  <a href="a00141.html#details">More...</a></p>
 
-<p><code>#include <reader_writer_lock.h></code></p>
+<p><code>#include <spin_rw_mutex.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::interface5::reader_writer_lock::scoped_lock_read:</div>
+Inheritance diagram for tbb::spin_rw_mutex_v3:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00141.png" usemap="#tbb::interface5::reader_writer_lock::scoped_lock_read_map" alt=""/>
-  <map id="tbb::interface5::reader_writer_lock::scoped_lock_read_map" name="tbb::interface5::reader_writer_lock::scoped_lock_read_map">
+  <img src="a00141.png" usemap="#tbb::spin_rw_mutex_v3_map" alt=""/>
+  <map id="tbb::spin_rw_mutex_v3_map" name="tbb::spin_rw_mutex_v3_map">
 </map>
  </div></div>
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html">scoped_lock</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00134.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a9d3120a23016dabd4cc2683fa561ee5a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9d3120a23016dabd4cc2683fa561ee5a"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#a9d3120a23016dabd4cc2683fa561ee5a">scoped_lock_read</a> (<a class="el" href="a00113.html">reader_writer_lock</a> &<a class="el" href="a00113.html#af92eb949fc491af8f7e350869ea0a0d1">lock</a>)</td></tr>
-<tr class="memdesc:a9d3120a23016dabd4cc2683fa561ee5a"><td class="mdescLeft"> </td><td class="mdescRight">Construct with blocking attempt to acquire read lock on the passed-in lock. <br/></td></tr>
-<tr class="separator:a9d3120a23016dabd4cc2683fa561ee5a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acf0e23fb4d3aeb6bde18d5d1236bd9d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf0e23fb4d3aeb6bde18d5d1236bd9d5"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#acf0e23fb4d3aeb6bde18d5d1236bd9d5">~scoped_lock_read</a> ()</td></tr>
-<tr class="memdesc:acf0e23fb4d3aeb6bde18d5d1236bd9d5"><td class="mdescLeft"> </td><td class="mdescRight">Destructor, releases the read lock. <br/></td></tr>
-<tr class="separator:acf0e23fb4d3aeb6bde18d5d1236bd9d5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9eb8c7a64912a1c74ea76a01a20a1621"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9eb8c7a64912a1c74ea76a01a20a1621"></a>
-void * </td><td class="memItemRight" valign="bottom"><b>operator new</b> (size_t s)</td></tr>
-<tr class="separator:a9eb8c7a64912a1c74ea76a01a20a1621"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1a6c15dfdbe1bc7a6648ed836ebd8de6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1a6c15dfdbe1bc7a6648ed836ebd8de6"></a>
-void </td><td class="memItemRight" valign="bottom"><b>operator delete</b> (void *p)</td></tr>
-<tr class="separator:a1a6c15dfdbe1bc7a6648ed836ebd8de6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad30fc1ffa0a2b8134e177e02c5821d7f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad30fc1ffa0a2b8134e177e02c5821d7f"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#ad30fc1ffa0a2b8134e177e02c5821d7f">spin_rw_mutex_v3</a> ()</td></tr>
+<tr class="memdesc:ad30fc1ffa0a2b8134e177e02c5821d7f"><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired mutex. <br/></td></tr>
+<tr class="separator:ad30fc1ffa0a2b8134e177e02c5821d7f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acc7cf2e4b14d3a2a591a3552d74ba99d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acc7cf2e4b14d3a2a591a3552d74ba99d"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#acc7cf2e4b14d3a2a591a3552d74ba99d">~spin_rw_mutex_v3</a> ()</td></tr>
+<tr class="memdesc:acc7cf2e4b14d3a2a591a3552d74ba99d"><td class="mdescLeft"> </td><td class="mdescRight">Destructor asserts if the mutex is acquired, i.e. state is zero. <br/></td></tr>
+<tr class="separator:acc7cf2e4b14d3a2a591a3552d74ba99d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a51e207646300a4c242bb4aaa4e04e9b8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a51e207646300a4c242bb4aaa4e04e9b8"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#a51e207646300a4c242bb4aaa4e04e9b8">lock</a> ()</td></tr>
+<tr class="memdesc:a51e207646300a4c242bb4aaa4e04e9b8"><td class="mdescLeft"> </td><td class="mdescRight">Acquire writer lock. <br/></td></tr>
+<tr class="separator:a51e207646300a4c242bb4aaa4e04e9b8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab6ec20b1ec43a49c8c2908984e35b5e8"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#ab6ec20b1ec43a49c8c2908984e35b5e8">try_lock</a> ()</td></tr>
+<tr class="memdesc:ab6ec20b1ec43a49c8c2908984e35b5e8"><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring writer lock (non-blocking)  <a href="#ab6ec20b1ec43a49c8c2908984e35b5e8">More...</a><br/></td></tr>
+<tr class="separator:ab6ec20b1ec43a49c8c2908984e35b5e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab04321ed2cdf12ac5825c54591028fc0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab04321ed2cdf12ac5825c54591028fc0"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#ab04321ed2cdf12ac5825c54591028fc0">unlock</a> ()</td></tr>
+<tr class="memdesc:ab04321ed2cdf12ac5825c54591028fc0"><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br/></td></tr>
+<tr class="separator:ab04321ed2cdf12ac5825c54591028fc0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa0e3bb644e9021d0f80ee36b03f228e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0e3bb644e9021d0f80ee36b03f228e4"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#aa0e3bb644e9021d0f80ee36b03f228e4">lock_read</a> ()</td></tr>
+<tr class="memdesc:aa0e3bb644e9021d0f80ee36b03f228e4"><td class="mdescLeft"> </td><td class="mdescRight">Acquire reader lock. <br/></td></tr>
+<tr class="separator:aa0e3bb644e9021d0f80ee36b03f228e4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac932f65b0b66320688e7957ce9c3e2c1"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#ac932f65b0b66320688e7957ce9c3e2c1">try_lock_read</a> ()</td></tr>
+<tr class="memdesc:ac932f65b0b66320688e7957ce9c3e2c1"><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring reader lock (non-blocking)  <a href="#ac932f65b0b66320688e7957ce9c3e2c1">More...</a><br/></td></tr>
+<tr class="separator:ac932f65b0b66320688e7957ce9c3e2c1"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:addc8223faacc1bb2cc8626b609ab2c49"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="addc8223faacc1bb2cc8626b609ab2c49"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = true</td></tr>
+<tr class="separator:addc8223faacc1bb2cc8626b609ab2c49"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7f6aa8fe3e9c7c4ee4cdec6d221ffe45"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f6aa8fe3e9c7c4ee4cdec6d221ffe45"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
+<tr class="separator:a7f6aa8fe3e9c7c4ee4cdec6d221ffe45"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:affd403f6e3822589e985a2c23505fbd1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="affd403f6e3822589e985a2c23505fbd1"></a>
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = false</td></tr>
+<tr class="separator:affd403f6e3822589e985a2c23505fbd1"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-types"></a>
+Protected Types</h2></td></tr>
+<tr class="memitem:a27adc7d791dfaa4a60638313b9d1c1f4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a27adc7d791dfaa4a60638313b9d1c1f4"></a>
+typedef intptr_t </td><td class="memItemRight" valign="bottom"><b>state_t</b></td></tr>
+<tr class="separator:a27adc7d791dfaa4a60638313b9d1c1f4"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:afb01bc2e211c782503ef5088003f120f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afb01bc2e211c782503ef5088003f120f"></a>
-class </td><td class="memItemRight" valign="bottom"><b>reader_writer_lock</b></td></tr>
-<tr class="separator:afb01bc2e211c782503ef5088003f120f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:aa28625051072472ccd8a2b19405d6fb3"><td class="memItemLeft" align="right" valign="top">state_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#aa28625051072472ccd8a2b19405d6fb3">state</a></td></tr>
+<tr class="memdesc:aa28625051072472ccd8a2b19405d6fb3"><td class="mdescLeft"> </td><td class="mdescRight">State of lock.  <a href="#aa28625051072472ccd8a2b19405d6fb3">More...</a><br/></td></tr>
+<tr class="separator:aa28625051072472ccd8a2b19405d6fb3"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-static-attribs"></a>
+Static Protected Attributes</h2></td></tr>
+<tr class="memitem:aaeec59dde09fe92be196ecddb480777b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaeec59dde09fe92be196ecddb480777b"></a>
+static const state_t </td><td class="memItemRight" valign="bottom"><b>WRITER</b> = 1</td></tr>
+<tr class="separator:aaeec59dde09fe92be196ecddb480777b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5b321914828e5e21baf24d58f32c66d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b321914828e5e21baf24d58f32c66d5"></a>
+static const state_t </td><td class="memItemRight" valign="bottom"><b>WRITER_PENDING</b> = 2</td></tr>
+<tr class="separator:a5b321914828e5e21baf24d58f32c66d5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6cc93cdcf4ad43f6bf8b0f76cde66f9e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6cc93cdcf4ad43f6bf8b0f76cde66f9e"></a>
+static const state_t </td><td class="memItemRight" valign="bottom"><b>READERS</b> = ~(WRITER | WRITER_PENDING)</td></tr>
+<tr class="separator:a6cc93cdcf4ad43f6bf8b0f76cde66f9e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af1386a2fa5979432e4a58b94e68db23f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af1386a2fa5979432e4a58b94e68db23f"></a>
+static const state_t </td><td class="memItemRight" valign="bottom"><b>ONE_READER</b> = 4</td></tr>
+<tr class="separator:af1386a2fa5979432e4a58b94e68db23f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6a811c72bd7e5ad6a3a9161ee05e298c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6a811c72bd7e5ad6a3a9161ee05e298c"></a>
+static const state_t </td><td class="memItemRight" valign="bottom"><b>BUSY</b> = WRITER | READERS</td></tr>
+<tr class="separator:a6a811c72bd7e5ad6a3a9161ee05e298c"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>The scoped lock pattern for read locks. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>reader_writer_lock.h</li>
+<div class="textblock"><p>Fast, unfair, spinning reader-writer lock with backoff and writer-preference. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="ab6ec20b1ec43a49c8c2908984e35b5e8"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::spin_rw_mutex_v3::try_lock </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Try acquiring writer lock (non-blocking) </p>
+<p>Return true if lock acquired; false otherwise. </p>
+
+</div>
+</div>
+<a class="anchor" id="ac932f65b0b66320688e7957ce9c3e2c1"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::spin_rw_mutex_v3::try_lock_read </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Try acquiring reader lock (non-blocking) </p>
+<p>Return true if reader lock acquired; false otherwise. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Data Documentation</h2>
+<a class="anchor" id="aa28625051072472ccd8a2b19405d6fb3"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">state_t tbb::spin_rw_mutex_v3::state</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>State of lock. </p>
+<p>Bit 0 = writer is holding lock Bit 1 = request by a writer to acquire lock (hint to readers to wait) Bit 2..N = number of readers holding lock </p>
+
+<p>Referenced by <a class="el" href="a00134.html#a99e279a995a51abfb87b865e886949f8">tbb::spin_rw_mutex_v3::scoped_lock::release()</a>, and <a class="el" href="a00141.html#ab04321ed2cdf12ac5825c54591028fc0">unlock()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>spin_rw_mutex.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00141.png b/doc/html/a00141.png
index 10066bd..ff1efc9 100644
Binary files a/doc/html/a00141.png and b/doc/html/a00141.png differ
diff --git a/doc/html/a00142.html b/doc/html/a00142.html
index 5d1d5ae..11c6d84 100644
--- a/doc/html/a00142.html
+++ b/doc/html/a00142.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::sender< T > Class Template Reference</title>
+<title>tbb::structured_task_group Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,115 +33,83 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00142.html">sender</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00142.html">structured_task_group</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00328.html">List of all members</a>  </div>
+<a href="a00303.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::sender< T > Class Template Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
+<div class="title">tbb::structured_task_group Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Pure virtual template class that defines a sender of messages of type T.  
- <a href="a00142.html#details">More...</a></p>
-
-<p><code>#include <flow_graph.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::sender< T >:</div>
+Inheritance diagram for tbb::structured_task_group:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00142.png" usemap="#tbb::flow::interface7::sender< T >_map" alt=""/>
-  <map id="tbb::flow::interface7::sender< T >_map" name="tbb::flow::interface7::sender< T >_map">
-<area href="a00028.html" title="Forwards messages of type T to all successors. " alt="tbb::flow::interface7::broadcast_node< T >" shape="rect" coords="0,56,352,80"/>
-<area href="a00030.html" title="Forwards messages in arbitrary order. " alt="tbb::flow::interface7::buffer_node< T, A >" shape="rect" coords="362,56,714,80"/>
-<area href="a00091.html" title="Forwards messages only if the threshold has not been reached. " alt="tbb::flow::interface7::limiter_node< T >" shape="rect" coords="724,56,1076,80"/>
-<area href="a00104.html" alt="tbb::flow::interface7::overwrite_node< T >" shape="rect" coords="1086,56,1438,80"/>
-<area href="a00109.html" title="Forwards messages in priority order. " alt="tbb::flow::interface7::priority_queue_node< T, Compare, A >" shape="rect" coords="181,112,533,136"/>
-<area href="a00110.html" title="Forwards messages in FIFO order. " alt="tbb::flow::interface7::queue_node< T, A >" shape="rect" coords="543,112,895,136"/>
-<area href="a00176.html" alt="tbb::flow::interface7::write_once_node< T >" shape="rect" coords="1086,112,1438,136"/>
-<area href="a00143.html" title="Forwards messages in sequence order. " alt="tbb::flow::interface7::sequencer_node< T, A >" shape="rect" coords="543,168,895,192"/>
+  <img src="a00142.png" usemap="#tbb::structured_task_group_map" alt=""/>
+  <map id="tbb::structured_task_group_map" name="tbb::structured_task_group_map">
+<area href="a00146.html" alt="tbb::internal::task_group_base" shape="rect" coords="0,56,179,80"/>
 </map>
  </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:add86fddf72758d8e5b05b07650c6eeed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add86fddf72758d8e5b05b07650c6eeed"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a></td></tr>
-<tr class="memdesc:add86fddf72758d8e5b05b07650c6eeed"><td class="mdescLeft"> </td><td class="mdescRight">The output type of this sender. <br/></td></tr>
-<tr class="separator:add86fddf72758d8e5b05b07650c6eeed"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7779627063a29d4d2a1fc905a5cae8db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7779627063a29d4d2a1fc905a5cae8db"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a></td></tr>
-<tr class="memdesc:a7779627063a29d4d2a1fc905a5cae8db"><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <br/></td></tr>
-<tr class="separator:a7779627063a29d4d2a1fc905a5cae8db"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8aba8b2c5950f113a88f43a97c2207f5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8aba8b2c5950f113a88f43a97c2207f5"></a>
-typedef <br class="typebreak"/>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a></td></tr>
-<tr class="memdesc:a8aba8b2c5950f113a88f43a97c2207f5"><td class="mdescLeft"> </td><td class="mdescRight">interface to record edges for traversal & deletion <br/></td></tr>
-<tr class="separator:a8aba8b2c5950f113a88f43a97c2207f5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae6c01f7a39a61f6a25f1129e53047b2b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6c01f7a39a61f6a25f1129e53047b2b"></a>
-typedef <br class="typebreak"/>
-built_successors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>successor_list_type</b></td></tr>
-<tr class="separator:ae6c01f7a39a61f6a25f1129e53047b2b"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a4dac8f53a1f8373c1f3a874b9617e4ec"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4dac8f53a1f8373c1f3a874b9617e4ec"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a4dac8f53a1f8373c1f3a874b9617e4ec">register_successor</a> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &r)=0</td></tr>
-<tr class="memdesc:a4dac8f53a1f8373c1f3a874b9617e4ec"><td class="mdescLeft"> </td><td class="mdescRight">Add a new successor to this node. <br/></td></tr>
-<tr class="separator:a4dac8f53a1f8373c1f3a874b9617e4ec"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac1ae19f49e31c6ca94dcf14732eb7a64"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac1ae19f49e31c6ca94dcf14732eb7a64"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#ac1ae19f49e31c6ca94dcf14732eb7a64">remove_successor</a> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &r)=0</td></tr>
-<tr class="memdesc:ac1ae19f49e31c6ca94dcf14732eb7a64"><td class="mdescLeft"> </td><td class="mdescRight">Removes a successor from this node. <br/></td></tr>
-<tr class="separator:ac1ae19f49e31c6ca94dcf14732eb7a64"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad50b8ac93e79cbdcd2bba11d35432f2c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad50b8ac93e79cbdcd2bba11d35432f2c"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#ad50b8ac93e79cbdcd2bba11d35432f2c">try_get</a> (T &)</td></tr>
-<tr class="memdesc:ad50b8ac93e79cbdcd2bba11d35432f2c"><td class="mdescLeft"> </td><td class="mdescRight">Request an item from the sender. <br/></td></tr>
-<tr class="separator:ad50b8ac93e79cbdcd2bba11d35432f2c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa1b9dcf77ab558530ff93a706b4c4b5d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa1b9dcf77ab558530ff93a706b4c4b5d"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#aa1b9dcf77ab558530ff93a706b4c4b5d">try_reserve</a> (T &)</td></tr>
-<tr class="memdesc:aa1b9dcf77ab558530ff93a706b4c4b5d"><td class="mdescLeft"> </td><td class="mdescRight">Reserves an item in the sender. <br/></td></tr>
-<tr class="separator:aa1b9dcf77ab558530ff93a706b4c4b5d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a97ac316ddfb6bd7c7f2f56e3e819a30a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a97ac316ddfb6bd7c7f2f56e3e819a30a"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a97ac316ddfb6bd7c7f2f56e3e819a30a">try_release</a> ()</td></tr>
-<tr class="memdesc:a97ac316ddfb6bd7c7f2f56e3e819a30a"><td class="mdescLeft"> </td><td class="mdescRight">Releases the reserved item. <br/></td></tr>
-<tr class="separator:a97ac316ddfb6bd7c7f2f56e3e819a30a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad404d5218c7ae2556261ffa880cdf804"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad404d5218c7ae2556261ffa880cdf804"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#ad404d5218c7ae2556261ffa880cdf804">try_consume</a> ()</td></tr>
-<tr class="memdesc:ad404d5218c7ae2556261ffa880cdf804"><td class="mdescLeft"> </td><td class="mdescRight">Consumes the reserved item. <br/></td></tr>
-<tr class="separator:ad404d5218c7ae2556261ffa880cdf804"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afd9bfe671041a8d80140ba16cfd9f0f2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afd9bfe671041a8d80140ba16cfd9f0f2"></a>
-virtual <a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a> & </td><td class="memItemRight" valign="bottom"><b>built_successors</b> ()=0</td></tr>
-<tr class="separator:afd9bfe671041a8d80140ba16cfd9f0f2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2bc6dc1a9b0ca3b58f6e227ad6600e90"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2bc6dc1a9b0ca3b58f6e227ad6600e90"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_successor</b> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &)=0</td></tr>
-<tr class="separator:a2bc6dc1a9b0ca3b58f6e227ad6600e90"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1bdbd58013d224d202de7b3597ed099a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1bdbd58013d224d202de7b3597ed099a"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_delete_built_successor</b> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &)=0</td></tr>
-<tr class="separator:a1bdbd58013d224d202de7b3597ed099a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abdac075720483765b6397be3f5ef8cdf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abdac075720483765b6397be3f5ef8cdf"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>copy_successors</b> (successor_list_type &)=0</td></tr>
-<tr class="separator:abdac075720483765b6397be3f5ef8cdf"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a34b78f0438b9ff43fe72be1f9e23adb5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a34b78f0438b9ff43fe72be1f9e23adb5"></a>
-virtual size_t </td><td class="memItemRight" valign="bottom"><b>successor_count</b> ()=0</td></tr>
-<tr class="separator:a34b78f0438b9ff43fe72be1f9e23adb5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab6812c9b682cec4b1a93da169b6fffc7"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab6812c9b682cec4b1a93da169b6fffc7"></a>
+template<typename F > </td></tr>
+<tr class="memitem:ab6812c9b682cec4b1a93da169b6fffc7"><td class="memTemplItemLeft" align="right" valign="top">task_group_status </td><td class="memTemplItemRight" valign="bottom"><b>run_and_wait</b> (<a class="el" href="a00148.html">task_handle</a>< F > &h)</td></tr>
+<tr class="separator:ab6812c9b682cec4b1a93da169b6fffc7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0578ff577290a108d395ab29a0a04e04"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0578ff577290a108d395ab29a0a04e04"></a>
+task_group_status </td><td class="memItemRight" valign="bottom"><b>wait</b> ()</td></tr>
+<tr class="separator:a0578ff577290a108d395ab29a0a04e04"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_methods_a00146"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00146')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00146.html">tbb::internal::task_group_base</a></td></tr>
+<tr class="memitem:ac846a7be5035e1f5c929bda05e1b4401 inherit pub_methods_a00146"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac846a7be5035e1f5c929bda05e1b4401"></a>
+ </td><td class="memItemRight" valign="bottom"><b>task_group_base</b> (uintptr_t traits=0)</td></tr>
+<tr class="separator:ac846a7be5035e1f5c929bda05e1b4401 inherit pub_methods_a00146"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8d8398153ad19d83a629aeb46991620b inherit pub_methods_a00146"><td class="memTemplParams" colspan="2"><a class="anchor" id="a8d8398153ad19d83a629aeb46991620b"></a>
+template<typename F > </td></tr>
+<tr class="memitem:a8d8398153ad19d83a629aeb46991620b inherit pub_methods_a00146"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>run</b> (<a class="el" href="a00148.html">task_handle</a>< F > &h)</td></tr>
+<tr class="separator:a8d8398153ad19d83a629aeb46991620b inherit pub_methods_a00146"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9a05d8b3350796df951c701978cec816 inherit pub_methods_a00146"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a05d8b3350796df951c701978cec816"></a>
+task_group_status </td><td class="memItemRight" valign="bottom"><b>wait</b> ()</td></tr>
+<tr class="separator:a9a05d8b3350796df951c701978cec816 inherit pub_methods_a00146"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a91b0943033a9e802cea00ac4af9e4ae2 inherit pub_methods_a00146"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a91b0943033a9e802cea00ac4af9e4ae2"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>is_canceling</b> ()</td></tr>
+<tr class="separator:a91b0943033a9e802cea00ac4af9e4ae2 inherit pub_methods_a00146"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2c2b1b967f4d1924cf15c19e3854ff2f inherit pub_methods_a00146"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c2b1b967f4d1924cf15c19e3854ff2f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>cancel</b> ()</td></tr>
+<tr class="separator:a2c2b1b967f4d1924cf15c19e3854ff2f inherit pub_methods_a00146"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_methods_a00146"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00146')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00146.html">tbb::internal::task_group_base</a></td></tr>
+<tr class="memitem:a4efe5bdeaa3c874a36e7d95d76ad1367 inherit pro_methods_a00146"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4efe5bdeaa3c874a36e7d95d76ad1367"></a>
+task & </td><td class="memItemRight" valign="bottom"><b>owner</b> ()</td></tr>
+<tr class="separator:a4efe5bdeaa3c874a36e7d95d76ad1367 inherit pro_methods_a00146"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aef3561e83c11cde7299a34db1064f420 inherit pro_methods_a00146"><td class="memTemplParams" colspan="2"><a class="anchor" id="aef3561e83c11cde7299a34db1064f420"></a>
+template<typename F > </td></tr>
+<tr class="memitem:aef3561e83c11cde7299a34db1064f420 inherit pro_methods_a00146"><td class="memTemplItemLeft" align="right" valign="top">task_group_status </td><td class="memTemplItemRight" valign="bottom"><b>internal_run_and_wait</b> (F &f)</td></tr>
+<tr class="separator:aef3561e83c11cde7299a34db1064f420 inherit pro_methods_a00146"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab57636e45b436a15c7adefb25f9df090 inherit pro_methods_a00146"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab57636e45b436a15c7adefb25f9df090"></a>
+template<typename F , typename Task > </td></tr>
+<tr class="memitem:ab57636e45b436a15c7adefb25f9df090 inherit pro_methods_a00146"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>internal_run</b> (F &f)</td></tr>
+<tr class="separator:ab57636e45b436a15c7adefb25f9df090 inherit pro_methods_a00146"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pro_attribs_a00146"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00146')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="a00146.html">tbb::internal::task_group_base</a></td></tr>
+<tr class="memitem:a60fb257f34f63428032f93e9b3b50a89 inherit pro_attribs_a00146"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a60fb257f34f63428032f93e9b3b50a89"></a>
+empty_task * </td><td class="memItemRight" valign="bottom"><b>my_root</b></td></tr>
+<tr class="separator:a60fb257f34f63428032f93e9b3b50a89 inherit pro_attribs_a00146"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afa2bb3845517c6b2f9e29a4e3b08a62d inherit pro_attribs_a00146"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa2bb3845517c6b2f9e29a4e3b08a62d"></a>
+<a class="el" href="a00147.html">task_group_context</a> </td><td class="memItemRight" valign="bottom"><b>my_context</b></td></tr>
+<tr class="separator:afa2bb3845517c6b2f9e29a4e3b08a62d inherit pro_attribs_a00146"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename T><br/>
-class tbb::flow::interface7::sender< T ></h3>
-
-<p>Pure virtual template class that defines a sender of messages of type T. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>task_group.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00142.png b/doc/html/a00142.png
index 4f10ba4..f9335ed 100644
Binary files a/doc/html/a00142.png and b/doc/html/a00142.png differ
diff --git a/doc/html/a00143.html b/doc/html/a00143.html
index e2dfd3d..418cad3 100644
--- a/doc/html/a00143.html
+++ b/doc/html/a00143.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::sequencer_node< T, A > Class Template Reference</title>
+<title>tbb::flow::interface9::internal::successor_cache< T, M > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,357 +33,21 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00143.html">sequencer_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00143.html">successor_cache</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="summary">
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-types">Protected Types</a> |
-<a href="a00347.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::sequencer_node< T, A > Class Template Reference</div>  </div>
+<div class="title">tbb::flow::interface9::internal::successor_cache< T, M > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Forwards messages in sequence order.  
- <a href="a00143.html#details">More...</a></p>
-
-<p><code>#include <flow_graph.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::sequencer_node< T, A >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00143.png" usemap="#tbb::flow::interface7::sequencer_node< T, A >_map" alt=""/>
-  <map id="tbb::flow::interface7::sequencer_node< T, A >_map" name="tbb::flow::interface7::sequencer_node< T, A >_map">
-<area href="a00110.html" title="Forwards messages in FIFO order. " alt="tbb::flow::interface7::queue_node< T, A >" shape="rect" coords="420,168,690,192"/>
-<area href="a00030.html" title="Forwards messages in arbitrary order. " alt="tbb::flow::interface7::buffer_node< T, A >" shape="rect" coords="420,112,690,136"/>
-<area href="a00072.html" title="The base of all graph nodes. " alt="tbb::flow::interface7::graph_node" shape="rect" coords="0,56,270,80"/>
-<area href="a00124.html" title="Pure virtual template class that defines a receiver of messages of type T. " alt="tbb::flow::interface7::receiver< T >" shape="rect" coords="560,56,830,80"/>
-<area href="a00142.html" title="Pure virtual template class that defines a sender of messages of type T. " alt="tbb::flow::interface7::sender< T >" shape="rect" coords="840,56,1110,80"/>
-</map>
- </div></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a5aa01d803952d6d83f58a57c6f5b86e9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5aa01d803952d6d83f58a57c6f5b86e9"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
-<tr class="separator:a5aa01d803952d6d83f58a57c6f5b86e9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:adcdbbd1ffdbe39bfc68310062c869e1e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adcdbbd1ffdbe39bfc68310062c869e1e"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:adcdbbd1ffdbe39bfc68310062c869e1e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af91d621025c821dd6d23b4aa587d8642"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af91d621025c821dd6d23b4aa587d8642"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> > </td><td class="memItemRight" valign="bottom"><b>predecessor_type</b></td></tr>
-<tr class="separator:af91d621025c821dd6d23b4aa587d8642"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aeda5e9bf9d2c3101007a14332b7d578f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeda5e9bf9d2c3101007a14332b7d578f"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> > </td><td class="memItemRight" valign="bottom"><b>successor_type</b></td></tr>
-<tr class="separator:aeda5e9bf9d2c3101007a14332b7d578f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00110"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00110')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td></tr>
-<tr class="memitem:a6c97cb00f09b2920b470f7f05bd164d1 inherit pub_types_a00110"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6c97cb00f09b2920b470f7f05bd164d1"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
-<tr class="separator:a6c97cb00f09b2920b470f7f05bd164d1 inherit pub_types_a00110"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a17ed7b6084d51f1d50164ed9b2eff680 inherit pub_types_a00110"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a17ed7b6084d51f1d50164ed9b2eff680"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:a17ed7b6084d51f1d50164ed9b2eff680 inherit pub_types_a00110"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a768cdbf6ab5f38ec87e402ff2897ca38 inherit pub_types_a00110"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a768cdbf6ab5f38ec87e402ff2897ca38"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> > </td><td class="memItemRight" valign="bottom"><b>predecessor_type</b></td></tr>
-<tr class="separator:a768cdbf6ab5f38ec87e402ff2897ca38 inherit pub_types_a00110"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad5fc2cf414bebdf02246e356b21cf39a inherit pub_types_a00110"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad5fc2cf414bebdf02246e356b21cf39a"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> > </td><td class="memItemRight" valign="bottom"><b>successor_type</b></td></tr>
-<tr class="separator:ad5fc2cf414bebdf02246e356b21cf39a inherit pub_types_a00110"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00030"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00030')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td></tr>
-<tr class="memitem:a57a0aab7103d1d0cbf27560c9acf6c8f inherit pub_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a57a0aab7103d1d0cbf27560c9acf6c8f"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
-<tr class="separator:a57a0aab7103d1d0cbf27560c9acf6c8f inherit pub_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abedb8c98e62146c3473344b7148173b8 inherit pub_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abedb8c98e62146c3473344b7148173b8"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:abedb8c98e62146c3473344b7148173b8 inherit pub_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3c34a2182dcbbded45da979b0f405817 inherit pub_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c34a2182dcbbded45da979b0f405817"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> > </td><td class="memItemRight" valign="bottom"><b>predecessor_type</b></td></tr>
-<tr class="separator:a3c34a2182dcbbded45da979b0f405817 inherit pub_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5e505e0c4a904e2c1ded8c7c8f657c3b inherit pub_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e505e0c4a904e2c1ded8c7c8f657c3b"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> > </td><td class="memItemRight" valign="bottom"><b>successor_type</b></td></tr>
-<tr class="separator:a5e505e0c4a904e2c1ded8c7c8f657c3b inherit pub_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a60032183e0f0266dc17b140e47dd8fc1 inherit pub_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a60032183e0f0266dc17b140e47dd8fc1"></a>
-typedef <a class="el" href="a00030.html">buffer_node</a>< T, A > </td><td class="memItemRight" valign="bottom"><b>my_class</b></td></tr>
-<tr class="separator:a60032183e0f0266dc17b140e47dd8fc1 inherit pub_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a66143b157bc766e35601b0c28362f99e inherit pub_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a66143b157bc766e35601b0c28362f99e"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> ><br class="typebreak"/>
-::predecessor_list_type </td><td class="memItemRight" valign="bottom"><b>predecessor_list_type</b></td></tr>
-<tr class="separator:a66143b157bc766e35601b0c28362f99e inherit pub_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a39ebd2459b9cb2497e323141685c926f inherit pub_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a39ebd2459b9cb2497e323141685c926f"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> ><br class="typebreak"/>
-::successor_list_type </td><td class="memItemRight" valign="bottom"><b>successor_list_type</b></td></tr>
-<tr class="separator:a39ebd2459b9cb2497e323141685c926f inherit pub_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00124"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00124')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td></tr>
-<tr class="memitem:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16eccc851b858604344bb8f1bb9eedc8"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a></td></tr>
-<tr class="memdesc:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br/></td></tr>
-<tr class="separator:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbadf5511bd568d283040cd88bd4e81e"></a>
-typedef <a class="el" href="a00142.html">sender</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a></td></tr>
-<tr class="memdesc:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br/></td></tr>
-<tr class="separator:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00d44512fd61d416e6f615e88063d038 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00d44512fd61d416e6f615e88063d038"></a>
-typedef <br class="typebreak"/>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> > </td><td class="memItemRight" valign="bottom"><b>built_predecessors_type</b></td></tr>
-<tr class="separator:a00d44512fd61d416e6f615e88063d038 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2cc119d6dff16073fc5f0d4855a9e4b7 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2cc119d6dff16073fc5f0d4855a9e4b7"></a>
-typedef <br class="typebreak"/>
-built_predecessors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>predecessor_list_type</b></td></tr>
-<tr class="separator:a2cc119d6dff16073fc5f0d4855a9e4b7 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00142"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00142')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td></tr>
-<tr class="memitem:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add86fddf72758d8e5b05b07650c6eeed"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a></td></tr>
-<tr class="memdesc:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">The output type of this sender. <br/></td></tr>
-<tr class="separator:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7779627063a29d4d2a1fc905a5cae8db"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a></td></tr>
-<tr class="memdesc:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <br/></td></tr>
-<tr class="separator:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8aba8b2c5950f113a88f43a97c2207f5"></a>
-typedef <br class="typebreak"/>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a></td></tr>
-<tr class="memdesc:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">interface to record edges for traversal & deletion <br/></td></tr>
-<tr class="separator:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae6c01f7a39a61f6a25f1129e53047b2b inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6c01f7a39a61f6a25f1129e53047b2b"></a>
-typedef <br class="typebreak"/>
-built_successors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>successor_list_type</b></td></tr>
-<tr class="separator:ae6c01f7a39a61f6a25f1129e53047b2b inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a0e8d3d486edc7f70c81b36ce9421c11a"><td class="memTemplParams" colspan="2"><a class="anchor" id="a0e8d3d486edc7f70c81b36ce9421c11a"></a>
-template<typename Sequencer > </td></tr>
-<tr class="memitem:a0e8d3d486edc7f70c81b36ce9421c11a"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00143.html#a0e8d3d486edc7f70c81b36ce9421c11a">sequencer_node</a> (<a class="el" href="a00070.html">graph</a> &g, const Sequencer &s)</td></tr>
-<tr class="memdesc:a0e8d3d486edc7f70c81b36ce9421c11a"><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br/></td></tr>
-<tr class="separator:a0e8d3d486edc7f70c81b36ce9421c11a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a19cfdaf85098d0fcf0b1956dc913a7a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a19cfdaf85098d0fcf0b1956dc913a7a2"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#a19cfdaf85098d0fcf0b1956dc913a7a2">sequencer_node</a> (const <a class="el" href="a00143.html">sequencer_node</a> &src)</td></tr>
-<tr class="memdesc:a19cfdaf85098d0fcf0b1956dc913a7a2"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br/></td></tr>
-<tr class="separator:a19cfdaf85098d0fcf0b1956dc913a7a2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a01fd0321c7bd0f2112458cec2a636d7d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a01fd0321c7bd0f2112458cec2a636d7d"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#a01fd0321c7bd0f2112458cec2a636d7d">~sequencer_node</a> ()</td></tr>
-<tr class="memdesc:a01fd0321c7bd0f2112458cec2a636d7d"><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br/></td></tr>
-<tr class="separator:a01fd0321c7bd0f2112458cec2a636d7d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a76626e1f059d1ef1c5ddd3c798ef3ad6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a76626e1f059d1ef1c5ddd3c798ef3ad6"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:a76626e1f059d1ef1c5ddd3c798ef3ad6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00110"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00110')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td></tr>
-<tr class="memitem:a503d3fe4f98302549e36f74633de5716 inherit pub_methods_a00110"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a503d3fe4f98302549e36f74633de5716"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00110.html#a503d3fe4f98302549e36f74633de5716">queue_node</a> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="memdesc:a503d3fe4f98302549e36f74633de5716 inherit pub_methods_a00110"><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br/></td></tr>
-<tr class="separator:a503d3fe4f98302549e36f74633de5716 inherit pub_methods_a00110"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa790bb6d3c8bef58d59235dfba1a1092 inherit pub_methods_a00110"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa790bb6d3c8bef58d59235dfba1a1092"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00110.html#aa790bb6d3c8bef58d59235dfba1a1092">queue_node</a> (const <a class="el" href="a00110.html">queue_node</a> &src)</td></tr>
-<tr class="memdesc:aa790bb6d3c8bef58d59235dfba1a1092 inherit pub_methods_a00110"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br/></td></tr>
-<tr class="separator:aa790bb6d3c8bef58d59235dfba1a1092 inherit pub_methods_a00110"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00030"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00030')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td></tr>
-<tr class="memitem:a152f7bb9ab1f033ec56caa451327634c inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a152f7bb9ab1f033ec56caa451327634c"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a152f7bb9ab1f033ec56caa451327634c">buffer_node</a> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="memdesc:a152f7bb9ab1f033ec56caa451327634c inherit pub_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br/></td></tr>
-<tr class="separator:a152f7bb9ab1f033ec56caa451327634c inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a739635c43d1150f2c8dd3f455d698d36 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a739635c43d1150f2c8dd3f455d698d36"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a739635c43d1150f2c8dd3f455d698d36">buffer_node</a> (const <a class="el" href="a00030.html">buffer_node</a> &src)</td></tr>
-<tr class="memdesc:a739635c43d1150f2c8dd3f455d698d36 inherit pub_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br/></td></tr>
-<tr class="separator:a739635c43d1150f2c8dd3f455d698d36 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5e87f7e8fd8698f62f2cad8b52b6e565 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a5e87f7e8fd8698f62f2cad8b52b6e565">register_successor</a> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &r)</td></tr>
-<tr class="memdesc:a5e87f7e8fd8698f62f2cad8b52b6e565 inherit pub_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Adds a new successor.  <a href="#a5e87f7e8fd8698f62f2cad8b52b6e565">More...</a><br/></td></tr>
-<tr class="separator:a5e87f7e8fd8698f62f2cad8b52b6e565 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1db0288f46391e3a0a003c181ae87c38 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1db0288f46391e3a0a003c181ae87c38"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_successor</b> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &r)</td></tr>
-<tr class="separator:a1db0288f46391e3a0a003c181ae87c38 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acce1c8dbcf21cfb56d1583cb716398f4 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acce1c8dbcf21cfb56d1583cb716398f4"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_delete_built_successor</b> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &r)</td></tr>
-<tr class="separator:acce1c8dbcf21cfb56d1583cb716398f4 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4c20eb93a5601b442a589a20bca403a4 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c20eb93a5601b442a589a20bca403a4"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_predecessor</b> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &p)</td></tr>
-<tr class="separator:a4c20eb93a5601b442a589a20bca403a4 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae19e0420a628d31cbd685c4c9e513f04 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae19e0420a628d31cbd685c4c9e513f04"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_delete_built_predecessor</b> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &p)</td></tr>
-<tr class="separator:ae19e0420a628d31cbd685c4c9e513f04 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a784b06e7c4091a3ef4f9a6b0ffe35bdb inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a784b06e7c4091a3ef4f9a6b0ffe35bdb"></a>
-size_t </td><td class="memItemRight" valign="bottom"><b>predecessor_count</b> ()</td></tr>
-<tr class="separator:a784b06e7c4091a3ef4f9a6b0ffe35bdb inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a95a3b3ce6658e5c3298e2e361cde9a78 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a95a3b3ce6658e5c3298e2e361cde9a78"></a>
-size_t </td><td class="memItemRight" valign="bottom"><b>successor_count</b> ()</td></tr>
-<tr class="separator:a95a3b3ce6658e5c3298e2e361cde9a78 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af20f7dba5c291f03bfabcabe250cbd23 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af20f7dba5c291f03bfabcabe250cbd23"></a>
-void </td><td class="memItemRight" valign="bottom"><b>copy_predecessors</b> (predecessor_list_type &v)</td></tr>
-<tr class="separator:af20f7dba5c291f03bfabcabe250cbd23 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7ec31111eb839e28e2cfeb08192bbfa5 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7ec31111eb839e28e2cfeb08192bbfa5"></a>
-void </td><td class="memItemRight" valign="bottom"><b>copy_successors</b> (successor_list_type &v)</td></tr>
-<tr class="separator:a7ec31111eb839e28e2cfeb08192bbfa5 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3c31300c060bffbbad7798219e702aba inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a3c31300c060bffbbad7798219e702aba">remove_successor</a> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &r)</td></tr>
-<tr class="memdesc:a3c31300c060bffbbad7798219e702aba inherit pub_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Removes a successor.  <a href="#a3c31300c060bffbbad7798219e702aba">More...</a><br/></td></tr>
-<tr class="separator:a3c31300c060bffbbad7798219e702aba inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a175cb77dfbdd0e322097a833a2271c1e inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a175cb77dfbdd0e322097a833a2271c1e">try_get</a> (T &v)</td></tr>
-<tr class="memdesc:a175cb77dfbdd0e322097a833a2271c1e inherit pub_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Request an item from the <a class="el" href="a00030.html" title="Forwards messages in arbitrary order. ">buffer_node</a>.  <a href="#a175cb77dfbdd0e322097a833a2271c1e">More...</a><br/></td></tr>
-<tr class="separator:a175cb77dfbdd0e322097a833a2271c1e inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3b12cdebf8cef15b90e3c9cd9e51019f inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a3b12cdebf8cef15b90e3c9cd9e51019f">try_reserve</a> (T &v)</td></tr>
-<tr class="memdesc:a3b12cdebf8cef15b90e3c9cd9e51019f inherit pub_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Reserves an item.  <a href="#a3b12cdebf8cef15b90e3c9cd9e51019f">More...</a><br/></td></tr>
-<tr class="separator:a3b12cdebf8cef15b90e3c9cd9e51019f inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aaa3745fd4705345df16fb33954d93e30 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#aaa3745fd4705345df16fb33954d93e30">try_release</a> ()</td></tr>
-<tr class="memdesc:aaa3745fd4705345df16fb33954d93e30 inherit pub_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Release a reserved item.  <a href="#aaa3745fd4705345df16fb33954d93e30">More...</a><br/></td></tr>
-<tr class="separator:aaa3745fd4705345df16fb33954d93e30 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a335072bc547c5e9b40f58dfeab525953 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html#a335072bc547c5e9b40f58dfeab525953">try_consume</a> ()</td></tr>
-<tr class="memdesc:a335072bc547c5e9b40f58dfeab525953 inherit pub_methods_a00030"><td class="mdescLeft"> </td><td class="mdescRight">Consumes a reserved item.  <a href="#a335072bc547c5e9b40f58dfeab525953">More...</a><br/></td></tr>
-<tr class="separator:a335072bc547c5e9b40f58dfeab525953 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6fcdf027115b519b3b868a7430c39639 inherit pub_methods_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6fcdf027115b519b3b868a7430c39639"></a>
-void </td><td class="memItemRight" valign="bottom"><b>extract</b> ()</td></tr>
-<tr class="separator:a6fcdf027115b519b3b868a7430c39639 inherit pub_methods_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00072')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4badd313105e30f539882276353dcb8e"></a>
- </td><td class="memItemRight" valign="bottom"><b>graph_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00124"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00124')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td></tr>
-<tr class="memitem:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a733889a9053478ef2fb2528e2205bf07"></a>
-virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a733889a9053478ef2fb2528e2205bf07">~receiver</a> ()</td></tr>
-<tr class="memdesc:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br/></td></tr>
-<tr class="separator:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee5067bb4f4b71ffa786c1b33cb9aa6a"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#aee5067bb4f4b71ffa786c1b33cb9aa6a">try_put</a> (const T &t)</td></tr>
-<tr class="memdesc:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Put an item to the receiver. <br/></td></tr>
-<tr class="separator:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a16427aa709505de93ffe0d79136e4251 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16427aa709505de93ffe0d79136e4251"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a16427aa709505de93ffe0d79136e4251">register_predecessor</a> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &)</td></tr>
-<tr class="memdesc:a16427aa709505de93ffe0d79136e4251 inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Add a predecessor to the node. <br/></td></tr>
-<tr class="separator:a16427aa709505de93ffe0d79136e4251 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a55adae6228bbdc1539695e1ec20e9762 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a55adae6228bbdc1539695e1ec20e9762"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a55adae6228bbdc1539695e1ec20e9762">remove_predecessor</a> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &)</td></tr>
-<tr class="memdesc:a55adae6228bbdc1539695e1ec20e9762 inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Remove a predecessor from the node. <br/></td></tr>
-<tr class="separator:a55adae6228bbdc1539695e1ec20e9762 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a63273d246d9dd8d259f9cc1eead42eb2 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63273d246d9dd8d259f9cc1eead42eb2"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>copy_predecessors</b> (predecessor_list_type &)=0</td></tr>
-<tr class="separator:a63273d246d9dd8d259f9cc1eead42eb2 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-types"></a>
-Protected Types</h2></td></tr>
-<tr class="memitem:a689a740c2b648ae4a1670af171a28543"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>op_stat</b> { <b>WAIT</b> =0, 
-<b>SUCCEEDED</b>, 
-<b>FAILED</b>
- }</td></tr>
-<tr class="separator:a689a740c2b648ae4a1670af171a28543"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae454d9879aff78200898fd37a9eb9d3e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae454d9879aff78200898fd37a9eb9d3e"></a>
-typedef <a class="el" href="a00030.html">buffer_node</a>< T, A ><br class="typebreak"/>
-::size_type </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-<tr class="separator:ae454d9879aff78200898fd37a9eb9d3e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9bf4296222afd3309732039a96002c00"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9bf4296222afd3309732039a96002c00"></a>
-typedef <a class="el" href="a00030.html">buffer_node</a>< T, A ><br class="typebreak"/>
-::<a class="el" href="a00031.html">buffer_operation</a> </td><td class="memItemRight" valign="bottom"><b>sequencer_operation</b></td></tr>
-<tr class="separator:a9bf4296222afd3309732039a96002c00"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_types_a00110"><td colspan="2" onclick="javascript:toggleInherit('pro_types_a00110')"><img src="closed.png" alt="-"/> Protected Types inherited from <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td></tr>
-<tr class="memitem:a7e8acd469a6e7d7f843158104c3a829d inherit pro_types_a00110"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>op_stat</b> { <b>WAIT</b> =0, 
-<b>SUCCEEDED</b>, 
-<b>FAILED</b>
- }</td></tr>
-<tr class="separator:a7e8acd469a6e7d7f843158104c3a829d inherit pro_types_a00110"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a37343fca6678a3ea7008f3946362567d inherit pro_types_a00110"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a37343fca6678a3ea7008f3946362567d"></a>
-typedef <a class="el" href="a00030.html">buffer_node</a>< T, A > </td><td class="memItemRight" valign="bottom"><b>base_type</b></td></tr>
-<tr class="separator:a37343fca6678a3ea7008f3946362567d inherit pro_types_a00110"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a35cc3a32918f9c5286199a251a082df6 inherit pro_types_a00110"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a35cc3a32918f9c5286199a251a082df6"></a>
-typedef base_type::size_type </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-<tr class="separator:a35cc3a32918f9c5286199a251a082df6 inherit pro_types_a00110"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7c9f9bba89dc190c85aef3ed0fc6856b inherit pro_types_a00110"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7c9f9bba89dc190c85aef3ed0fc6856b"></a>
-typedef <a class="el" href="a00031.html">base_type::buffer_operation</a> </td><td class="memItemRight" valign="bottom"><b>queue_operation</b></td></tr>
-<tr class="separator:a7c9f9bba89dc190c85aef3ed0fc6856b inherit pro_types_a00110"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_types_a00030"><td colspan="2" onclick="javascript:toggleInherit('pro_types_a00030')"><img src="closed.png" alt="-"/> Protected Types inherited from <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td></tr>
-<tr class="memitem:a0e9c45eefd5231c6a7f8e78ab4b3e3c1 inherit pro_types_a00030"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>op_type</b> { <br/>
-  <b>reg_succ</b>, 
-<b>rem_succ</b>, 
-<b>req_item</b>, 
-<b>res_item</b>, 
-<br/>
-  <b>rel_res</b>, 
-<b>con_res</b>, 
-<b>put_item</b>, 
-<b>try_fwd_task</b>, 
-<br/>
-  <b>add_blt_succ</b>, 
-<b>del_blt_succ</b>, 
-<b>add_blt_pred</b>, 
-<b>del_blt_pred</b>, 
-<br/>
-  <b>blt_succ_cnt</b>, 
-<b>blt_pred_cnt</b>, 
-<b>blt_succ_cpy</b>, 
-<b>blt_pred_cpy</b>
-<br/>
- }</td></tr>
-<tr class="separator:a0e9c45eefd5231c6a7f8e78ab4b3e3c1 inherit pro_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a97578c4c0b47aa1e7281d0343f45c6e2 inherit pro_types_a00030"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>op_stat</b> { <b>WAIT</b> =0, 
-<b>SUCCEEDED</b>, 
-<b>FAILED</b>
- }</td></tr>
-<tr class="separator:a97578c4c0b47aa1e7281d0343f45c6e2 inherit pro_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac2ba7ceb6c4c435c5abc9846a91853e2 inherit pro_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac2ba7ceb6c4c435c5abc9846a91853e2"></a>
-typedef size_t </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-<tr class="separator:ac2ba7ceb6c4c435c5abc9846a91853e2 inherit pro_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7f1a187e32fb9a630a142ef37aeda958 inherit pro_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f1a187e32fb9a630a142ef37aeda958"></a>
-typedef <br class="typebreak"/>
-internal::aggregating_functor<br class="typebreak"/>
-< <a class="el" href="a00030.html">my_class</a>, <a class="el" href="a00031.html">buffer_operation</a> > </td><td class="memItemRight" valign="bottom"><b>my_handler</b></td></tr>
-<tr class="separator:a7f1a187e32fb9a630a142ef37aeda958 inherit pro_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5f09abf6db812abcbeb262b7f1b844a5 inherit pro_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f09abf6db812abcbeb262b7f1b844a5"></a>
-typedef <a class="el" href="a00142.html">sender</a>< T ><br class="typebreak"/>
-::<a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a> </td><td class="memItemRight" valign="bottom"><b>built_successors_type</b></td></tr>
-<tr class="separator:a5f09abf6db812abcbeb262b7f1b844a5 inherit pro_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a81e553b64ccf191ddf3768cb1c184c1d inherit pro_types_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a81e553b64ccf191ddf3768cb1c184c1d"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< T ><br class="typebreak"/>
-::<a class="el" href="a00059.html">built_predecessors_type</a> </td><td class="memItemRight" valign="bottom"><b>built_predecessors_type</b></td></tr>
-<tr class="separator:a81e553b64ccf191ddf3768cb1c184c1d inherit pro_types_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pro_methods_a00110"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00110')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td></tr>
-<tr class="memitem:a1ab7e37f537acb75175844bd34132b99 inherit pro_methods_a00110"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1ab7e37f537acb75175844bd34132b99"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00110.html#a1ab7e37f537acb75175844bd34132b99">internal_forward_task</a> (<a class="el" href="a00031.html">queue_operation</a> *op)</td></tr>
-<tr class="memdesc:a1ab7e37f537acb75175844bd34132b99 inherit pro_methods_a00110"><td class="mdescLeft"> </td><td class="mdescRight">Tries to forward valid items to successors. <br/></td></tr>
-<tr class="separator:a1ab7e37f537acb75175844bd34132b99 inherit pro_methods_a00110"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad5d225b5305d2d8e1778d2ac65e473a8 inherit pro_methods_a00110"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad5d225b5305d2d8e1778d2ac65e473a8"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_pop</b> (<a class="el" href="a00031.html">queue_operation</a> *op)</td></tr>
-<tr class="separator:ad5d225b5305d2d8e1778d2ac65e473a8 inherit pro_methods_a00110"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae85f9ee123b22bb273116402372d2619 inherit pro_methods_a00110"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae85f9ee123b22bb273116402372d2619"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_reserve</b> (<a class="el" href="a00031.html">queue_operation</a> *op)</td></tr>
-<tr class="separator:ae85f9ee123b22bb273116402372d2619 inherit pro_methods_a00110"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acc6c42585d3deef75dd3922b6fe9cc21 inherit pro_methods_a00110"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acc6c42585d3deef75dd3922b6fe9cc21"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_consume</b> (<a class="el" href="a00031.html">queue_operation</a> *op)</td></tr>
-<tr class="separator:acc6c42585d3deef75dd3922b6fe9cc21 inherit pro_methods_a00110"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af3890cabe95773554ff067f287345faa inherit pro_methods_a00110"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af3890cabe95773554ff067f287345faa"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f))</td></tr>
-<tr class="separator:af3890cabe95773554ff067f287345faa inherit pro_methods_a00110"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_attribs_a00030"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00030')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td></tr>
-<tr class="memitem:ade2fe89be00e023aafb1d3c380762048 inherit pro_attribs_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ade2fe89be00e023aafb1d3c380762048"></a>
-<a class="el" href="a00126.html">internal::round_robin_cache</a>< T, <br class="typebreak"/>
-<a class="el" href="a00102.html">null_rw_mutex</a> > </td><td class="memItemRight" valign="bottom"><b>my_successors</b></td></tr>
-<tr class="separator:ade2fe89be00e023aafb1d3c380762048 inherit pro_attribs_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4eda90c0f6300644705f142c6ada1a4d inherit pro_attribs_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4eda90c0f6300644705f142c6ada1a4d"></a>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> > </td><td class="memItemRight" valign="bottom"><b>my_built_predecessors</b></td></tr>
-<tr class="separator:a4eda90c0f6300644705f142c6ada1a4d inherit pro_attribs_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a441fb73f0e15aed49945fb7ec9925e9f inherit pro_attribs_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a441fb73f0e15aed49945fb7ec9925e9f"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>forwarder_busy</b></td></tr>
-<tr class="separator:a441fb73f0e15aed49945fb7ec9925e9f inherit pro_attribs_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:adc948866a1eb4c7a95b0edc08872d487 inherit pro_attribs_a00030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adc948866a1eb4c7a95b0edc08872d487"></a>
-internal::aggregator<br class="typebreak"/>
-< my_handler, <a class="el" href="a00031.html">buffer_operation</a> > </td><td class="memItemRight" valign="bottom"><b>my_aggregator</b></td></tr>
-<tr class="separator:adc948866a1eb4c7a95b0edc08872d487 inherit pro_attribs_a00030"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename T, typename A = cache_aligned_allocator<T>><br/>
-class tbb::flow::interface7::sequencer_node< T, A ></h3>
-
-<p>Forwards messages in sequence order. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00188.html">flow_graph.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00143.png b/doc/html/a00143.png
deleted file mode 100644
index 187632e..0000000
Binary files a/doc/html/a00143.png and /dev/null differ
diff --git a/doc/html/a00144.html b/doc/html/a00144.html
index 7f17ddf..943b22a 100644
--- a/doc/html/a00144.html
+++ b/doc/html/a00144.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::source_node< Output > Class Template Reference</title>
+<title>tbb::interface7::task_arena Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,196 +33,179 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00144.html">source_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00144.html">task_arena</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-types">Public Types</a> |
+<a href="#nested-classes">Classes</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-methods">Protected Member Functions</a> |
+<a href="#pub-static-methods">Static Public Member Functions</a> |
 <a href="#friends">Friends</a> |
-<a href="a00335.html">List of all members</a>  </div>
+<a href="a00393.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::source_node< Output > Class Template Reference</div>  </div>
+<div class="title">tbb::interface7::task_arena Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>An executable node that acts as a source, i.e. it has no predecessors.  
- <a href="a00144.html#details">More...</a></p>
-
-<p><code>#include <flow_graph.h></code></p>
+<p><code>#include <task_arena.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::source_node< Output >:</div>
+Inheritance diagram for tbb::interface7::task_arena:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00144.png" usemap="#tbb::flow::interface7::source_node< Output >_map" alt=""/>
-  <map id="tbb::flow::interface7::source_node< Output >_map" name="tbb::flow::interface7::source_node< Output >_map">
-<area href="a00072.html" title="The base of all graph nodes. " alt="tbb::flow::interface7::graph_node" shape="rect" coords="0,56,262,80"/>
-<area href="a00142.html" alt="tbb::flow::interface7::sender< Output >" shape="rect" coords="272,56,534,80"/>
+  <img src="a00144.png" usemap="#tbb::interface7::task_arena_map" alt=""/>
+  <map id="tbb::interface7::task_arena_map" name="tbb::interface7::task_arena_map">
 </map>
  </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a0308ffc2e5c24739cd85e769ec8a8f5f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0308ffc2e5c24739cd85e769ec8a8f5f"></a>
-typedef Output </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#a0308ffc2e5c24739cd85e769ec8a8f5f">output_type</a></td></tr>
-<tr class="memdesc:a0308ffc2e5c24739cd85e769ec8a8f5f"><td class="mdescLeft"> </td><td class="mdescRight">The type of the output message, which is complete. <br/></td></tr>
-<tr class="separator:a0308ffc2e5c24739cd85e769ec8a8f5f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae354d135ba9aceb6ca41464fff027666"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae354d135ba9aceb6ca41464fff027666"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< Output > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#ae354d135ba9aceb6ca41464fff027666">successor_type</a></td></tr>
-<tr class="memdesc:ae354d135ba9aceb6ca41464fff027666"><td class="mdescLeft"> </td><td class="mdescRight">The type of successors of this node. <br/></td></tr>
-<tr class="separator:ae354d135ba9aceb6ca41464fff027666"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae30b73ef5eef1053aac315bef3bee4a1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae30b73ef5eef1053aac315bef3bee4a1"></a>
-typedef <a class="el" href="a00103.html">null_type</a> </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
-<tr class="separator:ae30b73ef5eef1053aac315bef3bee4a1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9588c0b250b6a1edfda94fe3a2efe96e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9588c0b250b6a1edfda94fe3a2efe96e"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00144.html#a0308ffc2e5c24739cd85e769ec8a8f5f">output_type</a> ><br class="typebreak"/>
-::<a class="el" href="a00059.html">built_successors_type</a> </td><td class="memItemRight" valign="bottom"><b>built_successors_type</b></td></tr>
-<tr class="separator:a9588c0b250b6a1edfda94fe3a2efe96e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9317f0a4820e8f149ee855fb8b835a40"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9317f0a4820e8f149ee855fb8b835a40"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00144.html#a0308ffc2e5c24739cd85e769ec8a8f5f">output_type</a> ><br class="typebreak"/>
-::successor_list_type </td><td class="memItemRight" valign="bottom"><b>successor_list_type</b></td></tr>
-<tr class="separator:a9317f0a4820e8f149ee855fb8b835a40"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00142"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00142')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00142.html">tbb::flow::interface7::sender< Output ></a></td></tr>
-<tr class="memitem:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add86fddf72758d8e5b05b07650c6eeed"></a>
-typedef Output </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a></td></tr>
-<tr class="memdesc:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">The output type of this sender. <br/></td></tr>
-<tr class="separator:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7779627063a29d4d2a1fc905a5cae8db"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< Output > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a></td></tr>
-<tr class="memdesc:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <br/></td></tr>
-<tr class="separator:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8aba8b2c5950f113a88f43a97c2207f5"></a>
-typedef <br class="typebreak"/>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a></td></tr>
-<tr class="memdesc:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">interface to record edges for traversal & deletion <br/></td></tr>
-<tr class="separator:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae6c01f7a39a61f6a25f1129e53047b2b inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6c01f7a39a61f6a25f1129e53047b2b"></a>
-typedef <br class="typebreak"/>
-built_successors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>successor_list_type</b></td></tr>
-<tr class="separator:ae6c01f7a39a61f6a25f1129e53047b2b inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00017.html">attach</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Tag class used to indicate the "attaching" constructor.  <a href="a00017.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a5730a4677f5bfdf6ff6e45e31a249d37"><td class="memTemplParams" colspan="2"><a class="anchor" id="a5730a4677f5bfdf6ff6e45e31a249d37"></a>
-template<typename Body > </td></tr>
-<tr class="memitem:a5730a4677f5bfdf6ff6e45e31a249d37"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00144.html#a5730a4677f5bfdf6ff6e45e31a249d37">source_node</a> (<a class="el" href="a00070.html">graph</a> &g, Body body, bool is_active=true)</td></tr>
-<tr class="memdesc:a5730a4677f5bfdf6ff6e45e31a249d37"><td class="mdescLeft"> </td><td class="mdescRight">Constructor for a node with a successor. <br/></td></tr>
-<tr class="separator:a5730a4677f5bfdf6ff6e45e31a249d37"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa365130109912d4cdd4534a0cb1d92bd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa365130109912d4cdd4534a0cb1d92bd"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#aa365130109912d4cdd4534a0cb1d92bd">source_node</a> (const <a class="el" href="a00144.html">source_node</a> &src)</td></tr>
-<tr class="memdesc:aa365130109912d4cdd4534a0cb1d92bd"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br/></td></tr>
-<tr class="separator:aa365130109912d4cdd4534a0cb1d92bd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5ce12e348e121b9f4dffda9d1035c490"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5ce12e348e121b9f4dffda9d1035c490"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#a5ce12e348e121b9f4dffda9d1035c490">~source_node</a> ()</td></tr>
-<tr class="memdesc:a5ce12e348e121b9f4dffda9d1035c490"><td class="mdescLeft"> </td><td class="mdescRight">The destructor. <br/></td></tr>
-<tr class="separator:a5ce12e348e121b9f4dffda9d1035c490"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aee939f57a984576e945a71f476af3b81"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee939f57a984576e945a71f476af3b81"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:aee939f57a984576e945a71f476af3b81"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a27aa895c54d59f570f267c26f14f0cf1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a27aa895c54d59f570f267c26f14f0cf1"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#a27aa895c54d59f570f267c26f14f0cf1">register_successor</a> (<a class="el" href="a00144.html#ae354d135ba9aceb6ca41464fff027666">successor_type</a> &r)</td></tr>
-<tr class="memdesc:a27aa895c54d59f570f267c26f14f0cf1"><td class="mdescLeft"> </td><td class="mdescRight">Add a new successor to this node. <br/></td></tr>
-<tr class="separator:a27aa895c54d59f570f267c26f14f0cf1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a313af00af7584f4b9aee1e1bacff4041"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a313af00af7584f4b9aee1e1bacff4041"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#a313af00af7584f4b9aee1e1bacff4041">remove_successor</a> (<a class="el" href="a00144.html#ae354d135ba9aceb6ca41464fff027666">successor_type</a> &r)</td></tr>
-<tr class="memdesc:a313af00af7584f4b9aee1e1bacff4041"><td class="mdescLeft"> </td><td class="mdescRight">Removes a successor from this node. <br/></td></tr>
-<tr class="separator:a313af00af7584f4b9aee1e1bacff4041"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a813191618016b329d9e959f6b4d201a8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a813191618016b329d9e959f6b4d201a8"></a>
-<a class="el" href="a00059.html">built_successors_type</a> & </td><td class="memItemRight" valign="bottom"><b>built_successors</b> ()</td></tr>
-<tr class="separator:a813191618016b329d9e959f6b4d201a8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afc3a170b55f0c5516530de19fde3670c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc3a170b55f0c5516530de19fde3670c"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_successor</b> (<a class="el" href="a00144.html#ae354d135ba9aceb6ca41464fff027666">successor_type</a> &r)</td></tr>
-<tr class="separator:afc3a170b55f0c5516530de19fde3670c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5329794c90e838694258f6c82170f2fb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5329794c90e838694258f6c82170f2fb"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_delete_built_successor</b> (<a class="el" href="a00144.html#ae354d135ba9aceb6ca41464fff027666">successor_type</a> &r)</td></tr>
-<tr class="separator:a5329794c90e838694258f6c82170f2fb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a34c65072403172763c3a0de761bed759"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a34c65072403172763c3a0de761bed759"></a>
-size_t </td><td class="memItemRight" valign="bottom"><b>successor_count</b> ()</td></tr>
-<tr class="separator:a34c65072403172763c3a0de761bed759"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab6b2ef15fe100caf27fb4cbca34c0eeb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab6b2ef15fe100caf27fb4cbca34c0eeb"></a>
-void </td><td class="memItemRight" valign="bottom"><b>copy_successors</b> (successor_list_type &v)</td></tr>
-<tr class="separator:ab6b2ef15fe100caf27fb4cbca34c0eeb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a038c6b2b406d496244617a2d6dc01581"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a038c6b2b406d496244617a2d6dc01581"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#a038c6b2b406d496244617a2d6dc01581">try_get</a> (<a class="el" href="a00144.html#a0308ffc2e5c24739cd85e769ec8a8f5f">output_type</a> &v)</td></tr>
-<tr class="memdesc:a038c6b2b406d496244617a2d6dc01581"><td class="mdescLeft"> </td><td class="mdescRight">Request an item from the node. <br/></td></tr>
-<tr class="separator:a038c6b2b406d496244617a2d6dc01581"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aabb0d505d684d173b1a2c976bf0781a6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aabb0d505d684d173b1a2c976bf0781a6"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#aabb0d505d684d173b1a2c976bf0781a6">try_reserve</a> (<a class="el" href="a00144.html#a0308ffc2e5c24739cd85e769ec8a8f5f">output_type</a> &v)</td></tr>
-<tr class="memdesc:aabb0d505d684d173b1a2c976bf0781a6"><td class="mdescLeft"> </td><td class="mdescRight">Reserves an item. <br/></td></tr>
-<tr class="separator:aabb0d505d684d173b1a2c976bf0781a6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a309c65a2d0208a1072f7e852198d461d"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#a309c65a2d0208a1072f7e852198d461d">try_release</a> ()</td></tr>
-<tr class="memdesc:a309c65a2d0208a1072f7e852198d461d"><td class="mdescLeft"> </td><td class="mdescRight">Release a reserved item.  <a href="#a309c65a2d0208a1072f7e852198d461d">More...</a><br/></td></tr>
-<tr class="separator:a309c65a2d0208a1072f7e852198d461d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad38a58c2f8f74f4c5cf72a2625ac26bf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad38a58c2f8f74f4c5cf72a2625ac26bf"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#ad38a58c2f8f74f4c5cf72a2625ac26bf">try_consume</a> ()</td></tr>
-<tr class="memdesc:ad38a58c2f8f74f4c5cf72a2625ac26bf"><td class="mdescLeft"> </td><td class="mdescRight">Consumes a reserved item. <br/></td></tr>
-<tr class="separator:ad38a58c2f8f74f4c5cf72a2625ac26bf"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a67264c4564abefbf14c0d587c6fe2857"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a67264c4564abefbf14c0d587c6fe2857"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#a67264c4564abefbf14c0d587c6fe2857">activate</a> ()</td></tr>
-<tr class="memdesc:a67264c4564abefbf14c0d587c6fe2857"><td class="mdescLeft"> </td><td class="mdescRight">Activates a node that was created in the inactive state. <br/></td></tr>
-<tr class="separator:a67264c4564abefbf14c0d587c6fe2857"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a44b05598b8e9636ed328b07dcfe40e09"><td class="memTemplParams" colspan="2"><a class="anchor" id="a44b05598b8e9636ed328b07dcfe40e09"></a>
-template<typename Body > </td></tr>
-<tr class="memitem:a44b05598b8e9636ed328b07dcfe40e09"><td class="memTemplItemLeft" align="right" valign="top">Body </td><td class="memTemplItemRight" valign="bottom"><b>copy_function_object</b> ()</td></tr>
-<tr class="separator:a44b05598b8e9636ed328b07dcfe40e09"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2b588ddacaec7948f8661a10afa1e057"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2b588ddacaec7948f8661a10afa1e057"></a>
-void </td><td class="memItemRight" valign="bottom"><b>extract</b> ()</td></tr>
-<tr class="separator:a2b588ddacaec7948f8661a10afa1e057"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00072')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4badd313105e30f539882276353dcb8e"></a>
- </td><td class="memItemRight" valign="bottom"><b>graph_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abe92eac81ca849b110de69e6efd0e5aa"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#abe92eac81ca849b110de69e6efd0e5aa">task_arena</a> (int max_concurrency_=automatic, unsigned reserved_for_masters=1)</td></tr>
+<tr class="memdesc:abe92eac81ca849b110de69e6efd0e5aa"><td class="mdescLeft"> </td><td class="mdescRight">Creates <a class="el" href="a00144.html">task_arena</a> with certain concurrency limits.  <a href="#abe92eac81ca849b110de69e6efd0e5aa">More...</a><br/></td></tr>
+<tr class="separator:abe92eac81ca849b110de69e6efd0e5aa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a70d122b3e6e4760c6053c5c230c715ef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a70d122b3e6e4760c6053c5c230c715ef"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#a70d122b3e6e4760c6053c5c230c715ef">task_arena</a> (const <a class="el" href="a00144.html">task_arena</a> &s)</td></tr>
+<tr class="memdesc:a70d122b3e6e4760c6053c5c230c715ef"><td class="mdescLeft"> </td><td class="mdescRight">Copies settings from another <a class="el" href="a00144.html">task_arena</a>. <br/></td></tr>
+<tr class="separator:a70d122b3e6e4760c6053c5c230c715ef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a84dfcfd70fd08d383b8d4e8b96fa4a0d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a84dfcfd70fd08d383b8d4e8b96fa4a0d"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#a84dfcfd70fd08d383b8d4e8b96fa4a0d">task_arena</a> (<a class="el" href="a00017.html">attach</a>)</td></tr>
+<tr class="memdesc:a84dfcfd70fd08d383b8d4e8b96fa4a0d"><td class="mdescLeft"> </td><td class="mdescRight">Creates an instance of <a class="el" href="a00144.html">task_arena</a> attached to the current arena of the thread. <br/></td></tr>
+<tr class="separator:a84dfcfd70fd08d383b8d4e8b96fa4a0d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a955131a79f8dc5a0a5c9ffa66a7e7140"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a955131a79f8dc5a0a5c9ffa66a7e7140"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#a955131a79f8dc5a0a5c9ffa66a7e7140">initialize</a> ()</td></tr>
+<tr class="memdesc:a955131a79f8dc5a0a5c9ffa66a7e7140"><td class="mdescLeft"> </td><td class="mdescRight">Forces allocation of the resources for the <a class="el" href="a00144.html">task_arena</a> as specified in constructor arguments. <br/></td></tr>
+<tr class="separator:a955131a79f8dc5a0a5c9ffa66a7e7140"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae7986309715cf224f5320dc06ee7d335"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae7986309715cf224f5320dc06ee7d335"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#ae7986309715cf224f5320dc06ee7d335">initialize</a> (int max_concurrency_, unsigned reserved_for_masters=1)</td></tr>
+<tr class="memdesc:ae7986309715cf224f5320dc06ee7d335"><td class="mdescLeft"> </td><td class="mdescRight">Overrides concurrency level and forces initialization of internal representation. <br/></td></tr>
+<tr class="separator:ae7986309715cf224f5320dc06ee7d335"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aace9ac1366eb3e0ec921da11699ba236"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aace9ac1366eb3e0ec921da11699ba236"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#aace9ac1366eb3e0ec921da11699ba236">initialize</a> (<a class="el" href="a00017.html">attach</a>)</td></tr>
+<tr class="memdesc:aace9ac1366eb3e0ec921da11699ba236"><td class="mdescLeft"> </td><td class="mdescRight">Attaches this instance to the current arena of the thread. <br/></td></tr>
+<tr class="separator:aace9ac1366eb3e0ec921da11699ba236"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aecb3eedeacfe8469a91c17525dae7fc9"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#aecb3eedeacfe8469a91c17525dae7fc9">terminate</a> ()</td></tr>
+<tr class="separator:aecb3eedeacfe8469a91c17525dae7fc9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9ff5a35a219953a4f3d99b833fa5f683"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#a9ff5a35a219953a4f3d99b833fa5f683">~task_arena</a> ()</td></tr>
+<tr class="separator:a9ff5a35a219953a4f3d99b833fa5f683"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad85856cefa30d42155a2b122b03efd8c"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#ad85856cefa30d42155a2b122b03efd8c">is_active</a> () const </td></tr>
+<tr class="separator:ad85856cefa30d42155a2b122b03efd8c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8034275ed2fffa68f70484043b90d406"><td class="memTemplParams" colspan="2">template<typename F > </td></tr>
+<tr class="memitem:a8034275ed2fffa68f70484043b90d406"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00144.html#a8034275ed2fffa68f70484043b90d406">enqueue</a> (const F &f)</td></tr>
+<tr class="separator:a8034275ed2fffa68f70484043b90d406"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9a04ab4afb2d74b0317618f59ab49be7"><td class="memTemplParams" colspan="2">template<typename F > </td></tr>
+<tr class="memitem:a9a04ab4afb2d74b0317618f59ab49be7"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00144.html#a9a04ab4afb2d74b0317618f59ab49be7">enqueue</a> (const F &f, priority_t p)</td></tr>
+<tr class="separator:a9a04ab4afb2d74b0317618f59ab49be7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af0c96f325b59d567b4c720f2830adde8"><td class="memTemplParams" colspan="2">template<typename F > </td></tr>
+<tr class="memitem:af0c96f325b59d567b4c720f2830adde8"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00144.html#af0c96f325b59d567b4c720f2830adde8">execute</a> (F &f)</td></tr>
+<tr class="separator:af0c96f325b59d567b4c720f2830adde8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab8442c8e9e3e678349409e08cabc7ae2"><td class="memTemplParams" colspan="2">template<typename F > </td></tr>
+<tr class="memitem:ab8442c8e9e3e678349409e08cabc7ae2"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00144.html#ab8442c8e9e3e678349409e08cabc7ae2">execute</a> (const F &f)</td></tr>
+<tr class="separator:ab8442c8e9e3e678349409e08cabc7ae2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a07d87dff8c6116ee349684e10f754aeb"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#a07d87dff8c6116ee349684e10f754aeb">debug_wait_until_empty</a> ()</td></tr>
+<tr class="separator:a07d87dff8c6116ee349684e10f754aeb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2977b0fba9253e6cab31570f4992c998"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2977b0fba9253e6cab31570f4992c998"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#a2977b0fba9253e6cab31570f4992c998">max_concurrency</a> () const </td></tr>
+<tr class="memdesc:a2977b0fba9253e6cab31570f4992c998"><td class="mdescLeft"> </td><td class="mdescRight">Returns the maximal number of threads that can work inside the arena. <br/></td></tr>
+<tr class="separator:a2977b0fba9253e6cab31570f4992c998"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:aed1fa277170d6cee6d1437f1258ac544"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed1fa277170d6cee6d1437f1258ac544"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#aed1fa277170d6cee6d1437f1258ac544">reset_node</a> (__TBB_PFG_RESET_ARG(reset_flags f))</td></tr>
-<tr class="memdesc:aed1fa277170d6cee6d1437f1258ac544"><td class="mdescLeft"> </td><td class="mdescRight">resets the <a class="el" href="a00144.html" title="An executable node that acts as a source, i.e. it has no predecessors. ">source_node</a> to its initial state <br/></td></tr>
-<tr class="separator:aed1fa277170d6cee6d1437f1258ac544"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00072')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac25a4633873c052047b1dd568824d055"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0</td></tr>
-<tr class="separator:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:af695a8aa3d2a4f498067c662e287dd8f"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#af695a8aa3d2a4f498067c662e287dd8f">current_thread_index</a> ()</td></tr>
+<tr class="separator:af695a8aa3d2a4f498067c662e287dd8f"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
 Friends</h2></td></tr>
-<tr class="memitem:a5cb5b39a66ec0c37e20f8e17e7cfda9a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5cb5b39a66ec0c37e20f8e17e7cfda9a"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::source_task_bypass< source_node< output_type > ></b></td></tr>
-<tr class="separator:a5cb5b39a66ec0c37e20f8e17e7cfda9a"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pro_attribs_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00072')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1caee1c5677047b05d18b1662ca6fdf8"></a>
-<a class="el" href="a00070.html">graph</a> & </td><td class="memItemRight" valign="bottom"><b>my_graph</b></td></tr>
-<tr class="separator:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af48cd0cd4f6e44efc3b353adb55f86a8"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>next</b></td></tr>
-<tr class="separator:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6917bffc3cb150319679bf2395e68caa"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>prev</b></td></tr>
-<tr class="separator:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6887d06dd0f104ab6c06fdddca4d2471"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6887d06dd0f104ab6c06fdddca4d2471"></a>
+class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::task_scheduler_observer_v3</b></td></tr>
+<tr class="separator:a6887d06dd0f104ab6c06fdddca4d2471"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a591c8245104c8eeade3e577df3951feb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a591c8245104c8eeade3e577df3951feb"></a>
+int </td><td class="memItemRight" valign="bottom"><b>tbb::this_task_arena::max_concurrency</b> ()</td></tr>
+<tr class="separator:a591c8245104c8eeade3e577df3951feb"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename Output><br/>
-class tbb::flow::interface7::source_node< Output ></h3>
+<div class="textblock"><p>1-to-1 proxy representation class of scheduler's arena Constructors set up settings only, real construction is deferred till the first method invocation Destructor only removes one of the references to the inner arena representation. Final destruction happens when all the references (and the work) are gone. </p>
+</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
+<a class="anchor" id="abe92eac81ca849b110de69e6efd0e5aa"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">tbb::interface7::task_arena::task_arena </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>max_concurrency_</em> = <code>automatic</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned </td>
+          <td class="paramname"><em>reserved_for_masters</em> = <code>1</code> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Creates <a class="el" href="a00144.html">task_arena</a> with certain concurrency limits. </p>
+<p>Sets up settings only, real construction is deferred till the first method invocation </p>
+<ul>
+<li>max_concurrency specifies total number of slots in arena where threads work </li>
+<li>reserved_for_masters specifies number of slots to be used by master threads only. Value of 1 is default and reflects behavior of implicit arenas. </li>
+</ul>
 
-<p>An executable node that acts as a source, i.e. it has no predecessors. </p>
-</div><h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="a309c65a2d0208a1072f7e852198d461d"></a>
+</div>
+</div>
+<a class="anchor" id="a9ff5a35a219953a4f3d99b833fa5f683"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">tbb::interface7::task_arena::~task_arena </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Removes the reference to the internal arena representation, and destroys the external object. Not thread safe wrt concurrent invocations of other methods. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="af695a8aa3d2a4f498067c662e287dd8f"></a>
 <div class="memitem">
 <div class="memproto">
-<div class="memtemplate">
-template<typename Output > </div>
 <table class="mlabels">
   <tr>
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">bool <a class="el" href="a00144.html">tbb::flow::interface7::source_node</a>< Output >::try_release </td>
+          <td class="memname">static int tbb::interface7::task_arena::current_thread_index </td>
           <td>(</td>
           <td class="paramname">)</td><td></td>
           <td></td>
@@ -230,25 +213,211 @@ template<typename Output > </div>
       </table>
   </td>
   <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Returns the index, aka slot number, of the calling thread in its current arena This method is deprecated and replaced with this_task_arena::current_thread_index() </p>
+
+</div>
+</div>
+<a class="anchor" id="a07d87dff8c6116ee349684e10f754aeb"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::interface7::task_arena::debug_wait_until_empty </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Wait for all work in the arena to be completed Even submitted by other application threads Joins arena if/when possible (in the same way as <a class="el" href="a00144.html#af0c96f325b59d567b4c720f2830adde8">execute()</a>) </p>
+
+</div>
+</div>
+<a class="anchor" id="a8034275ed2fffa68f70484043b90d406"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename F > </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::interface7::task_arena::enqueue </td>
+          <td>(</td>
+          <td class="paramtype">const F & </td>
+          <td class="paramname"><em>f</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Enqueues a task into the arena to process a functor, and immediately returns. Does not require the calling thread to join the arena </p>
+
+</div>
+</div>
+<a class="anchor" id="a9a04ab4afb2d74b0317618f59ab49be7"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename F > </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::interface7::task_arena::enqueue </td>
+          <td>(</td>
+          <td class="paramtype">const F & </td>
+          <td class="paramname"><em>f</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">priority_t </td>
+          <td class="paramname"><em>p</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
   </tr>
 </table>
 </div><div class="memdoc">
+<p>Enqueues a task with priority p into the arena to process a functor f, and immediately returns. Does not require the calling thread to join the arena </p>
 
-<p>Release a reserved item. </p>
-<p>true = item has been released and so remains in sender, dest must request or reserve future items </p>
+</div>
+</div>
+<a class="anchor" id="af0c96f325b59d567b4c720f2830adde8"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename F > </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::interface7::task_arena::execute </td>
+          <td>(</td>
+          <td class="paramtype">F & </td>
+          <td class="paramname"><em>f</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Joins the arena and executes a functor, then returns If not possible to join, wraps the functor into a task, enqueues it and waits for task completion Can decrement the arena demand for workers, causing a worker to leave and free a slot to the calling thread </p>
 
-<p>Reimplemented from <a class="el" href="a00142.html#a97ac316ddfb6bd7c7f2f56e3e819a30a">tbb::flow::interface7::sender< Output ></a>.</p>
+</div>
+</div>
+<a class="anchor" id="ab8442c8e9e3e678349409e08cabc7ae2"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename F > </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::interface7::task_arena::execute </td>
+          <td>(</td>
+          <td class="paramtype">const F & </td>
+          <td class="paramname"><em>f</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Joins the arena and executes a functor, then returns If not possible to join, wraps the functor into a task, enqueues it and waits for task completion Can decrement the arena demand for workers, causing a worker to leave and free a slot to the calling thread </p>
+
+</div>
+</div>
+<a class="anchor" id="ad85856cefa30d42155a2b122b03efd8c"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::interface7::task_arena::is_active </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Returns true if the arena is active (initialized); false otherwise. The name was chosen to match a <a class="el" href="a00150.html" title="Class delimiting the scope of task scheduler activity. ">task_scheduler_init</a> method with the same semantics. </p>
+
+</div>
+</div>
+<a class="anchor" id="aecb3eedeacfe8469a91c17525dae7fc9"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::interface7::task_arena::terminate </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Removes the reference to the internal arena representation. Not thread safe wrt concurrent invocations of other methods. </p>
 
 </div>
 </div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<li>task_arena.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00144.png b/doc/html/a00144.png
index a81f0d4..e9685d4 100644
Binary files a/doc/html/a00144.png and b/doc/html/a00144.png differ
diff --git a/doc/html/a00145.html b/doc/html/a00145.html
index 3f35511..4b00a4e 100644
--- a/doc/html/a00145.html
+++ b/doc/html/a00145.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::spin_mutex Class Reference</title>
+<title>tbb::task_group Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,147 +33,92 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00145.html">spin_mutex</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00145.html">task_group</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-static-attribs">Static Public Attributes</a> |
-<a href="#friends">Friends</a> |
 <a href="a00302.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::spin_mutex Class Reference<div class="ingroups"><a class="el" href="a00258.html">Synchronization</a></div></div>  </div>
+<div class="title">tbb::task_group Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>A lock that occupies a single byte.  
- <a href="a00145.html#details">More...</a></p>
-
-<p><code>#include <spin_mutex.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::spin_mutex:</div>
+Inheritance diagram for tbb::task_group:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00145.png" usemap="#tbb::spin_mutex_map" alt=""/>
-  <map id="tbb::spin_mutex_map" name="tbb::spin_mutex_map">
+  <img src="a00145.png" usemap="#tbb::task_group_map" alt=""/>
+  <map id="tbb::task_group_map" name="tbb::task_group_map">
+<area href="a00146.html" alt="tbb::internal::task_group_base" shape="rect" coords="0,56,179,80"/>
 </map>
  </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html">scoped_lock</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00134.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a6c96196965bf7df426311d282ad3c378"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00145.html#a6c96196965bf7df426311d282ad3c378">spin_mutex</a> ()</td></tr>
-<tr class="memdesc:a6c96196965bf7df426311d282ad3c378"><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired lock.  <a href="#a6c96196965bf7df426311d282ad3c378">More...</a><br/></td></tr>
-<tr class="separator:a6c96196965bf7df426311d282ad3c378"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4ec484f4df6ec5595ec821ef20bd6cd7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ec484f4df6ec5595ec821ef20bd6cd7"></a>
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00145.html#a4ec484f4df6ec5595ec821ef20bd6cd7">internal_construct</a> ()</td></tr>
-<tr class="memdesc:a4ec484f4df6ec5595ec821ef20bd6cd7"><td class="mdescLeft"> </td><td class="mdescRight">Internal constructor with ITT instrumentation. <br/></td></tr>
-<tr class="separator:a4ec484f4df6ec5595ec821ef20bd6cd7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8957e40b0781192419d01d28e5205ec4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8957e40b0781192419d01d28e5205ec4"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00145.html#a8957e40b0781192419d01d28e5205ec4">lock</a> ()</td></tr>
-<tr class="memdesc:a8957e40b0781192419d01d28e5205ec4"><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock. <br/></td></tr>
-<tr class="separator:a8957e40b0781192419d01d28e5205ec4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a003ffb196d22bf22ca22142338b7eeab"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00145.html#a003ffb196d22bf22ca22142338b7eeab">try_lock</a> ()</td></tr>
-<tr class="memdesc:a003ffb196d22bf22ca22142338b7eeab"><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring lock (non-blocking)  <a href="#a003ffb196d22bf22ca22142338b7eeab">More...</a><br/></td></tr>
-<tr class="separator:a003ffb196d22bf22ca22142338b7eeab"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:adfcf8fe840aa73c08c2cadd570fd48fd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adfcf8fe840aa73c08c2cadd570fd48fd"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00145.html#adfcf8fe840aa73c08c2cadd570fd48fd">unlock</a> ()</td></tr>
-<tr class="memdesc:adfcf8fe840aa73c08c2cadd570fd48fd"><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br/></td></tr>
-<tr class="separator:adfcf8fe840aa73c08c2cadd570fd48fd"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr class="memitem:a7c3354db4bd5cc81bccee9f249abb9e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7c3354db4bd5cc81bccee9f249abb9e8"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
-<tr class="separator:a7c3354db4bd5cc81bccee9f249abb9e8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0cae048c5dc5deffe75464e4a3a2b752"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0cae048c5dc5deffe75464e4a3a2b752"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
-<tr class="separator:a0cae048c5dc5deffe75464e4a3a2b752"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad00ec9a97f34c9160300950b36deac3e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad00ec9a97f34c9160300950b36deac3e"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = false</td></tr>
-<tr class="separator:ad00ec9a97f34c9160300950b36deac3e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abe756667c1272f714ad388aa31f2d29e"><td class="memTemplParams" colspan="2"><a class="anchor" id="abe756667c1272f714ad388aa31f2d29e"></a>
+template<typename F > </td></tr>
+<tr class="memitem:abe756667c1272f714ad388aa31f2d29e"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>run</b> (<a class="el" href="a00148.html">task_handle</a>< F > &h)</td></tr>
+<tr class="separator:abe756667c1272f714ad388aa31f2d29e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6355cce7750b1367fb98924af151e8b2"><td class="memTemplParams" colspan="2"><a class="anchor" id="a6355cce7750b1367fb98924af151e8b2"></a>
+template<typename F > </td></tr>
+<tr class="memitem:a6355cce7750b1367fb98924af151e8b2"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>run</b> (const F &f)</td></tr>
+<tr class="separator:a6355cce7750b1367fb98924af151e8b2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeef1b473ff0edaf3f356722b13e877b0"><td class="memTemplParams" colspan="2"><a class="anchor" id="aeef1b473ff0edaf3f356722b13e877b0"></a>
+template<typename F > </td></tr>
+<tr class="memitem:aeef1b473ff0edaf3f356722b13e877b0"><td class="memTemplItemLeft" align="right" valign="top">task_group_status </td><td class="memTemplItemRight" valign="bottom"><b>run_and_wait</b> (const F &f)</td></tr>
+<tr class="separator:aeef1b473ff0edaf3f356722b13e877b0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a543903ef748fd10eb864c27a2e8ac18b"><td class="memTemplParams" colspan="2"><a class="anchor" id="a543903ef748fd10eb864c27a2e8ac18b"></a>
+template<typename F > </td></tr>
+<tr class="memitem:a543903ef748fd10eb864c27a2e8ac18b"><td class="memTemplItemLeft" align="right" valign="top">task_group_status </td><td class="memTemplItemRight" valign="bottom"><b>run_and_wait</b> (<a class="el" href="a00148.html">task_handle</a>< F > &h)</td></tr>
+<tr class="separator:a543903ef748fd10eb864c27a2e8ac18b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_methods_a00146"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00146')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00146.html">tbb::internal::task_group_base</a></td></tr>
+<tr class="memitem:ac846a7be5035e1f5c929bda05e1b4401 inherit pub_methods_a00146"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac846a7be5035e1f5c929bda05e1b4401"></a>
+ </td><td class="memItemRight" valign="bottom"><b>task_group_base</b> (uintptr_t traits=0)</td></tr>
+<tr class="separator:ac846a7be5035e1f5c929bda05e1b4401 inherit pub_methods_a00146"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8d8398153ad19d83a629aeb46991620b inherit pub_methods_a00146"><td class="memTemplParams" colspan="2"><a class="anchor" id="a8d8398153ad19d83a629aeb46991620b"></a>
+template<typename F > </td></tr>
+<tr class="memitem:a8d8398153ad19d83a629aeb46991620b inherit pub_methods_a00146"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>run</b> (<a class="el" href="a00148.html">task_handle</a>< F > &h)</td></tr>
+<tr class="separator:a8d8398153ad19d83a629aeb46991620b inherit pub_methods_a00146"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9a05d8b3350796df951c701978cec816 inherit pub_methods_a00146"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a05d8b3350796df951c701978cec816"></a>
+task_group_status </td><td class="memItemRight" valign="bottom"><b>wait</b> ()</td></tr>
+<tr class="separator:a9a05d8b3350796df951c701978cec816 inherit pub_methods_a00146"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a91b0943033a9e802cea00ac4af9e4ae2 inherit pub_methods_a00146"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a91b0943033a9e802cea00ac4af9e4ae2"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>is_canceling</b> ()</td></tr>
+<tr class="separator:a91b0943033a9e802cea00ac4af9e4ae2 inherit pub_methods_a00146"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2c2b1b967f4d1924cf15c19e3854ff2f inherit pub_methods_a00146"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c2b1b967f4d1924cf15c19e3854ff2f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>cancel</b> ()</td></tr>
+<tr class="separator:a2c2b1b967f4d1924cf15c19e3854ff2f inherit pub_methods_a00146"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:afcf922650b2fd9d76b7b939d8511bbd8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afcf922650b2fd9d76b7b939d8511bbd8"></a>
-class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
-<tr class="separator:afcf922650b2fd9d76b7b939d8511bbd8"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>A lock that occupies a single byte. </p>
-<p>A <a class="el" href="a00145.html" title="A lock that occupies a single byte. ">spin_mutex</a> is a spin mutex that fits in a single byte. It should be used only for locking short critical sections (typically less than 20 instructions) when fairness is not an issue. If zero-initialized, the mutex is considered unheld. </p>
-</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a6c96196965bf7df426311d282ad3c378"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">tbb::spin_mutex::spin_mutex </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Construct unacquired lock. </p>
-<p>Equivalent to zero-initialization of *this. </p>
-
-<p>References <a class="el" href="a00145.html#a4ec484f4df6ec5595ec821ef20bd6cd7">internal_construct()</a>.</p>
-
-</div>
-</div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="a003ffb196d22bf22ca22142338b7eeab"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool tbb::spin_mutex::try_lock </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_methods_a00146"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00146')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00146.html">tbb::internal::task_group_base</a></td></tr>
+<tr class="memitem:a4efe5bdeaa3c874a36e7d95d76ad1367 inherit pro_methods_a00146"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4efe5bdeaa3c874a36e7d95d76ad1367"></a>
+task & </td><td class="memItemRight" valign="bottom"><b>owner</b> ()</td></tr>
+<tr class="separator:a4efe5bdeaa3c874a36e7d95d76ad1367 inherit pro_methods_a00146"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aef3561e83c11cde7299a34db1064f420 inherit pro_methods_a00146"><td class="memTemplParams" colspan="2"><a class="anchor" id="aef3561e83c11cde7299a34db1064f420"></a>
+template<typename F > </td></tr>
+<tr class="memitem:aef3561e83c11cde7299a34db1064f420 inherit pro_methods_a00146"><td class="memTemplItemLeft" align="right" valign="top">task_group_status </td><td class="memTemplItemRight" valign="bottom"><b>internal_run_and_wait</b> (F &f)</td></tr>
+<tr class="separator:aef3561e83c11cde7299a34db1064f420 inherit pro_methods_a00146"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab57636e45b436a15c7adefb25f9df090 inherit pro_methods_a00146"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab57636e45b436a15c7adefb25f9df090"></a>
+template<typename F , typename Task > </td></tr>
+<tr class="memitem:ab57636e45b436a15c7adefb25f9df090 inherit pro_methods_a00146"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>internal_run</b> (F &f)</td></tr>
+<tr class="separator:ab57636e45b436a15c7adefb25f9df090 inherit pro_methods_a00146"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pro_attribs_a00146"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00146')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="a00146.html">tbb::internal::task_group_base</a></td></tr>
+<tr class="memitem:a60fb257f34f63428032f93e9b3b50a89 inherit pro_attribs_a00146"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a60fb257f34f63428032f93e9b3b50a89"></a>
+empty_task * </td><td class="memItemRight" valign="bottom"><b>my_root</b></td></tr>
+<tr class="separator:a60fb257f34f63428032f93e9b3b50a89 inherit pro_attribs_a00146"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afa2bb3845517c6b2f9e29a4e3b08a62d inherit pro_attribs_a00146"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa2bb3845517c6b2f9e29a4e3b08a62d"></a>
+<a class="el" href="a00147.html">task_group_context</a> </td><td class="memItemRight" valign="bottom"><b>my_context</b></td></tr>
+<tr class="separator:afa2bb3845517c6b2f9e29a4e3b08a62d inherit pro_attribs_a00146"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-</div><div class="memdoc">
-
-<p>Try acquiring lock (non-blocking) </p>
-<p>Return true if lock acquired; false otherwise. </p>
-
-<p>References <a class="el" href="a00015.html#a3525dbbac0d4eaedfe18bc57b7760857">tbb::aligned_space< T, N >::begin()</a>.</p>
-
-</div>
-</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>spin_mutex.h</li>
+<li>task_group.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00145.png b/doc/html/a00145.png
index 5dfc589..d42b601 100644
Binary files a/doc/html/a00145.png and b/doc/html/a00145.png differ
diff --git a/doc/html/a00146.html b/doc/html/a00146.html
index 3cf35c7..c43f9e8 100644
--- a/doc/html/a00146.html
+++ b/doc/html/a00146.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::spin_rw_mutex_v3 Class Reference</title>
+<title>tbb::internal::task_group_base Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,201 +33,79 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00146.html">spin_rw_mutex_v3</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00146.html">task_group_base</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-static-attribs">Static Public Attributes</a> |
-<a href="#pro-types">Protected Types</a> |
+<a href="#pro-methods">Protected Member Functions</a> |
 <a href="#pro-attribs">Protected Attributes</a> |
-<a href="#pro-static-attribs">Static Protected Attributes</a> |
-<a href="a00304.html">List of all members</a>  </div>
+<a href="a00398.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::spin_rw_mutex_v3 Class Reference<div class="ingroups"><a class="el" href="a00258.html">Synchronization</a></div></div>  </div>
+<div class="title">tbb::internal::task_group_base Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Fast, unfair, spinning reader-writer lock with backoff and writer-preference.  
- <a href="a00146.html#details">More...</a></p>
-
-<p><code>#include <spin_rw_mutex.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::spin_rw_mutex_v3:</div>
+Inheritance diagram for tbb::internal::task_group_base:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00146.png" usemap="#tbb::spin_rw_mutex_v3_map" alt=""/>
-  <map id="tbb::spin_rw_mutex_v3_map" name="tbb::spin_rw_mutex_v3_map">
+  <img src="a00146.png" usemap="#tbb::internal::task_group_base_map" alt=""/>
+  <map id="tbb::internal::task_group_base_map" name="tbb::internal::task_group_base_map">
+<area href="a00142.html" alt="tbb::structured_task_group" shape="rect" coords="0,112,179,136"/>
+<area href="a00145.html" alt="tbb::task_group" shape="rect" coords="189,112,368,136"/>
 </map>
  </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html">scoped_lock</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00135.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:ad30fc1ffa0a2b8134e177e02c5821d7f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad30fc1ffa0a2b8134e177e02c5821d7f"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#ad30fc1ffa0a2b8134e177e02c5821d7f">spin_rw_mutex_v3</a> ()</td></tr>
-<tr class="memdesc:ad30fc1ffa0a2b8134e177e02c5821d7f"><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired mutex. <br/></td></tr>
-<tr class="separator:ad30fc1ffa0a2b8134e177e02c5821d7f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acc7cf2e4b14d3a2a591a3552d74ba99d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acc7cf2e4b14d3a2a591a3552d74ba99d"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#acc7cf2e4b14d3a2a591a3552d74ba99d">~spin_rw_mutex_v3</a> ()</td></tr>
-<tr class="memdesc:acc7cf2e4b14d3a2a591a3552d74ba99d"><td class="mdescLeft"> </td><td class="mdescRight">Destructor asserts if the mutex is acquired, i.e. state is zero. <br/></td></tr>
-<tr class="separator:acc7cf2e4b14d3a2a591a3552d74ba99d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a51e207646300a4c242bb4aaa4e04e9b8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a51e207646300a4c242bb4aaa4e04e9b8"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#a51e207646300a4c242bb4aaa4e04e9b8">lock</a> ()</td></tr>
-<tr class="memdesc:a51e207646300a4c242bb4aaa4e04e9b8"><td class="mdescLeft"> </td><td class="mdescRight">Acquire writer lock. <br/></td></tr>
-<tr class="separator:a51e207646300a4c242bb4aaa4e04e9b8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab6ec20b1ec43a49c8c2908984e35b5e8"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#ab6ec20b1ec43a49c8c2908984e35b5e8">try_lock</a> ()</td></tr>
-<tr class="memdesc:ab6ec20b1ec43a49c8c2908984e35b5e8"><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring writer lock (non-blocking)  <a href="#ab6ec20b1ec43a49c8c2908984e35b5e8">More...</a><br/></td></tr>
-<tr class="separator:ab6ec20b1ec43a49c8c2908984e35b5e8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab04321ed2cdf12ac5825c54591028fc0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab04321ed2cdf12ac5825c54591028fc0"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#ab04321ed2cdf12ac5825c54591028fc0">unlock</a> ()</td></tr>
-<tr class="memdesc:ab04321ed2cdf12ac5825c54591028fc0"><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br/></td></tr>
-<tr class="separator:ab04321ed2cdf12ac5825c54591028fc0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa0e3bb644e9021d0f80ee36b03f228e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0e3bb644e9021d0f80ee36b03f228e4"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#aa0e3bb644e9021d0f80ee36b03f228e4">lock_read</a> ()</td></tr>
-<tr class="memdesc:aa0e3bb644e9021d0f80ee36b03f228e4"><td class="mdescLeft"> </td><td class="mdescRight">Acquire reader lock. <br/></td></tr>
-<tr class="separator:aa0e3bb644e9021d0f80ee36b03f228e4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac932f65b0b66320688e7957ce9c3e2c1"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#ac932f65b0b66320688e7957ce9c3e2c1">try_lock_read</a> ()</td></tr>
-<tr class="memdesc:ac932f65b0b66320688e7957ce9c3e2c1"><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring reader lock (non-blocking)  <a href="#ac932f65b0b66320688e7957ce9c3e2c1">More...</a><br/></td></tr>
-<tr class="separator:ac932f65b0b66320688e7957ce9c3e2c1"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr class="memitem:addc8223faacc1bb2cc8626b609ab2c49"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="addc8223faacc1bb2cc8626b609ab2c49"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = true</td></tr>
-<tr class="separator:addc8223faacc1bb2cc8626b609ab2c49"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7f6aa8fe3e9c7c4ee4cdec6d221ffe45"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f6aa8fe3e9c7c4ee4cdec6d221ffe45"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
-<tr class="separator:a7f6aa8fe3e9c7c4ee4cdec6d221ffe45"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:affd403f6e3822589e985a2c23505fbd1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="affd403f6e3822589e985a2c23505fbd1"></a>
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = false</td></tr>
-<tr class="separator:affd403f6e3822589e985a2c23505fbd1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac846a7be5035e1f5c929bda05e1b4401"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac846a7be5035e1f5c929bda05e1b4401"></a>
+ </td><td class="memItemRight" valign="bottom"><b>task_group_base</b> (uintptr_t traits=0)</td></tr>
+<tr class="separator:ac846a7be5035e1f5c929bda05e1b4401"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8d8398153ad19d83a629aeb46991620b"><td class="memTemplParams" colspan="2"><a class="anchor" id="a8d8398153ad19d83a629aeb46991620b"></a>
+template<typename F > </td></tr>
+<tr class="memitem:a8d8398153ad19d83a629aeb46991620b"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>run</b> (<a class="el" href="a00148.html">task_handle</a>< F > &h)</td></tr>
+<tr class="separator:a8d8398153ad19d83a629aeb46991620b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9a05d8b3350796df951c701978cec816"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a05d8b3350796df951c701978cec816"></a>
+task_group_status </td><td class="memItemRight" valign="bottom"><b>wait</b> ()</td></tr>
+<tr class="separator:a9a05d8b3350796df951c701978cec816"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a91b0943033a9e802cea00ac4af9e4ae2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a91b0943033a9e802cea00ac4af9e4ae2"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>is_canceling</b> ()</td></tr>
+<tr class="separator:a91b0943033a9e802cea00ac4af9e4ae2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2c2b1b967f4d1924cf15c19e3854ff2f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c2b1b967f4d1924cf15c19e3854ff2f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>cancel</b> ()</td></tr>
+<tr class="separator:a2c2b1b967f4d1924cf15c19e3854ff2f"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-types"></a>
-Protected Types</h2></td></tr>
-<tr class="memitem:a27adc7d791dfaa4a60638313b9d1c1f4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a27adc7d791dfaa4a60638313b9d1c1f4"></a>
-typedef intptr_t </td><td class="memItemRight" valign="bottom"><b>state_t</b></td></tr>
-<tr class="separator:a27adc7d791dfaa4a60638313b9d1c1f4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:a4efe5bdeaa3c874a36e7d95d76ad1367"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4efe5bdeaa3c874a36e7d95d76ad1367"></a>
+task & </td><td class="memItemRight" valign="bottom"><b>owner</b> ()</td></tr>
+<tr class="separator:a4efe5bdeaa3c874a36e7d95d76ad1367"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aef3561e83c11cde7299a34db1064f420"><td class="memTemplParams" colspan="2"><a class="anchor" id="aef3561e83c11cde7299a34db1064f420"></a>
+template<typename F > </td></tr>
+<tr class="memitem:aef3561e83c11cde7299a34db1064f420"><td class="memTemplItemLeft" align="right" valign="top">task_group_status </td><td class="memTemplItemRight" valign="bottom"><b>internal_run_and_wait</b> (F &f)</td></tr>
+<tr class="separator:aef3561e83c11cde7299a34db1064f420"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab57636e45b436a15c7adefb25f9df090"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab57636e45b436a15c7adefb25f9df090"></a>
+template<typename F , typename Task > </td></tr>
+<tr class="memitem:ab57636e45b436a15c7adefb25f9df090"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>internal_run</b> (F &f)</td></tr>
+<tr class="separator:ab57636e45b436a15c7adefb25f9df090"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
 Protected Attributes</h2></td></tr>
-<tr class="memitem:aa28625051072472ccd8a2b19405d6fb3"><td class="memItemLeft" align="right" valign="top">state_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#aa28625051072472ccd8a2b19405d6fb3">state</a></td></tr>
-<tr class="memdesc:aa28625051072472ccd8a2b19405d6fb3"><td class="mdescLeft"> </td><td class="mdescRight">State of lock.  <a href="#aa28625051072472ccd8a2b19405d6fb3">More...</a><br/></td></tr>
-<tr class="separator:aa28625051072472ccd8a2b19405d6fb3"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-static-attribs"></a>
-Static Protected Attributes</h2></td></tr>
-<tr class="memitem:aaeec59dde09fe92be196ecddb480777b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaeec59dde09fe92be196ecddb480777b"></a>
-static const state_t </td><td class="memItemRight" valign="bottom"><b>WRITER</b> = 1</td></tr>
-<tr class="separator:aaeec59dde09fe92be196ecddb480777b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5b321914828e5e21baf24d58f32c66d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b321914828e5e21baf24d58f32c66d5"></a>
-static const state_t </td><td class="memItemRight" valign="bottom"><b>WRITER_PENDING</b> = 2</td></tr>
-<tr class="separator:a5b321914828e5e21baf24d58f32c66d5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6cc93cdcf4ad43f6bf8b0f76cde66f9e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6cc93cdcf4ad43f6bf8b0f76cde66f9e"></a>
-static const state_t </td><td class="memItemRight" valign="bottom"><b>READERS</b> = ~(WRITER | WRITER_PENDING)</td></tr>
-<tr class="separator:a6cc93cdcf4ad43f6bf8b0f76cde66f9e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af1386a2fa5979432e4a58b94e68db23f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af1386a2fa5979432e4a58b94e68db23f"></a>
-static const state_t </td><td class="memItemRight" valign="bottom"><b>ONE_READER</b> = 4</td></tr>
-<tr class="separator:af1386a2fa5979432e4a58b94e68db23f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6a811c72bd7e5ad6a3a9161ee05e298c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6a811c72bd7e5ad6a3a9161ee05e298c"></a>
-static const state_t </td><td class="memItemRight" valign="bottom"><b>BUSY</b> = WRITER | READERS</td></tr>
-<tr class="separator:a6a811c72bd7e5ad6a3a9161ee05e298c"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Fast, unfair, spinning reader-writer lock with backoff and writer-preference. </p>
-</div><h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="ab6ec20b1ec43a49c8c2908984e35b5e8"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool tbb::spin_rw_mutex_v3::try_lock </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Try acquiring writer lock (non-blocking) </p>
-<p>Return true if lock acquired; false otherwise. </p>
-
-</div>
-</div>
-<a class="anchor" id="ac932f65b0b66320688e7957ce9c3e2c1"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool tbb::spin_rw_mutex_v3::try_lock_read </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Try acquiring reader lock (non-blocking) </p>
-<p>Return true if reader lock acquired; false otherwise. </p>
-
-</div>
-</div>
-<h2 class="groupheader">Member Data Documentation</h2>
-<a class="anchor" id="aa28625051072472ccd8a2b19405d6fb3"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">state_t tbb::spin_rw_mutex_v3::state</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
-  </tr>
+<tr class="memitem:a60fb257f34f63428032f93e9b3b50a89"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a60fb257f34f63428032f93e9b3b50a89"></a>
+empty_task * </td><td class="memItemRight" valign="bottom"><b>my_root</b></td></tr>
+<tr class="separator:a60fb257f34f63428032f93e9b3b50a89"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afa2bb3845517c6b2f9e29a4e3b08a62d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa2bb3845517c6b2f9e29a4e3b08a62d"></a>
+<a class="el" href="a00147.html">task_group_context</a> </td><td class="memItemRight" valign="bottom"><b>my_context</b></td></tr>
+<tr class="separator:afa2bb3845517c6b2f9e29a4e3b08a62d"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-</div><div class="memdoc">
-
-<p>State of lock. </p>
-<p>Bit 0 = writer is holding lock Bit 1 = request by a writer to acquire lock (hint to readers to wait) Bit 2..N = number of readers holding lock </p>
-
-<p>Referenced by <a class="el" href="a00135.html#a99e279a995a51abfb87b865e886949f8">tbb::spin_rw_mutex_v3::scoped_lock::release()</a>, and <a class="el" href="a00146.html#ab04321ed2cdf12ac5825c54591028fc0">unlock()</a>.</p>
-
-</div>
-</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>spin_rw_mutex.h</li>
+<li>task_group.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00146.png b/doc/html/a00146.png
index ff1efc9..e95fec5 100644
Binary files a/doc/html/a00146.png and b/doc/html/a00146.png differ
diff --git a/doc/html/a00147.html b/doc/html/a00147.html
index a46251f..7437e79 100644
--- a/doc/html/a00147.html
+++ b/doc/html/a00147.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::split_node< TupleType, Allocator > Class Template Reference</title>
+<title>tbb::task_group_context Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,138 +33,25 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00147.html">split_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00147.html">task_group_context</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="a00338.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::split_node< TupleType, Allocator > Class Template Reference</div>  </div>
+<div class="title">tbb::task_group_context Struct Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p><a class="el" href="a00147.html" title="split_node: accepts a tuple as input, forwards each element of the tuple to its ">split_node</a>: accepts a tuple as input, forwards each element of the tuple to its  
- <a href="a00147.html#details">More...</a></p>
-
-<p><code>#include <flow_graph.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::split_node< TupleType, Allocator >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00147.png" usemap="#tbb::flow::interface7::split_node< TupleType, Allocator >_map" alt=""/>
-  <map id="tbb::flow::interface7::split_node< TupleType, Allocator >_map" name="tbb::flow::interface7::split_node< TupleType, Allocator >_map">
-<area href="a00098.html" alt="tbb::flow::interface7::multifunction_node< TupleType, TupleType, rejecting, Allocator >" shape="rect" coords="500,112,1490,136"/>
-<area href="a00072.html" title="The base of all graph nodes. " alt="tbb::flow::interface7::graph_node" shape="rect" coords="0,56,990,80"/>
-</map>
- </div></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a7b30b85d93e3a6cc74eb58a9eccc77e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b30b85d93e3a6cc74eb58a9eccc77e8"></a>
-typedef <br class="typebreak"/>
-base_type::output_ports_type </td><td class="memItemRight" valign="bottom"><b>output_ports_type</b></td></tr>
-<tr class="separator:a7b30b85d93e3a6cc74eb58a9eccc77e8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afef7f0a3a41fe29685456d5a98d8039f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afef7f0a3a41fe29685456d5a98d8039f"></a>
-typedef <a class="el" href="a00103.html">base_type::output_type</a> </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:afef7f0a3a41fe29685456d5a98d8039f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab385733461335acd814fdc501dd1ab90"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab385733461335acd814fdc501dd1ab90"></a>
-typedef TupleType </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
-<tr class="separator:ab385733461335acd814fdc501dd1ab90"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abd56f31b5208a5dff21e5ecba2c2902f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abd56f31b5208a5dff21e5ecba2c2902f"></a>
-typedef Allocator </td><td class="memItemRight" valign="bottom"><b>allocator_type</b></td></tr>
-<tr class="separator:abd56f31b5208a5dff21e5ecba2c2902f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00098"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00098')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< TupleType, TupleType, rejecting, Allocator ></a></td></tr>
-<tr class="memitem:a75218ea29a85874581e480fb52914bbd inherit pub_types_a00098"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a75218ea29a85874581e480fb52914bbd"></a>
-typedef TupleType </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
-<tr class="separator:a75218ea29a85874581e480fb52914bbd inherit pub_types_a00098"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae51475eb8c4ab433d7db635395cc49a0 inherit pub_types_a00098"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae51475eb8c4ab433d7db635395cc49a0"></a>
-typedef <a class="el" href="a00103.html">null_type</a> </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:ae51475eb8c4ab433d7db635395cc49a0 inherit pub_types_a00098"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a636872cf56c8cad039f608d84350f59d inherit pub_types_a00098"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a636872cf56c8cad039f608d84350f59d"></a>
-typedef <br class="typebreak"/>
-internal::wrap_tuple_elements<br class="typebreak"/>
-< N, <br class="typebreak"/>
-internal::multifunction_output, <br class="typebreak"/>
-TupleType >::type </td><td class="memItemRight" valign="bottom"><b>output_ports_type</b></td></tr>
-<tr class="separator:a636872cf56c8cad039f608d84350f59d inherit pub_types_a00098"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa6ec40f6a47dc70508b18c94fa9e459d inherit pub_types_a00098"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa6ec40f6a47dc70508b18c94fa9e459d"></a>
-typedef <br class="typebreak"/>
-internal::multifunction_input<br class="typebreak"/>
-< input_type, <br class="typebreak"/>
-output_ports_type, Allocator > </td><td class="memItemRight" valign="bottom"><b>fInput_type</b></td></tr>
-<tr class="separator:aa6ec40f6a47dc70508b18c94fa9e459d inherit pub_types_a00098"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5fa37afc331d0c9738dab1f642265f95 inherit pub_types_a00098"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5fa37afc331d0c9738dab1f642265f95"></a>
-typedef <br class="typebreak"/>
-internal::function_input_queue<br class="typebreak"/>
-< input_type, Allocator > </td><td class="memItemRight" valign="bottom"><b>input_queue_type</b></td></tr>
-<tr class="separator:a5fa37afc331d0c9738dab1f642265f95 inherit pub_types_a00098"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a61bb1309f07046df50f2c9ab878c81d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a61bb1309f07046df50f2c9ab878c81d4"></a>
- </td><td class="memItemRight" valign="bottom"><b>split_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a61bb1309f07046df50f2c9ab878c81d4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae9fad205fec699a225969f0391ea133d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae9fad205fec699a225969f0391ea133d"></a>
- </td><td class="memItemRight" valign="bottom"><b>split_node</b> (const <a class="el" href="a00147.html">split_node</a> &other)</td></tr>
-<tr class="separator:ae9fad205fec699a225969f0391ea133d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1550198e198fc858c5619ce1dbd8411a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1550198e198fc858c5619ce1dbd8411a"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:a1550198e198fc858c5619ce1dbd8411a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00098"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00098')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< TupleType, TupleType, rejecting, Allocator ></a></td></tr>
-<tr class="memitem:a809925417689059399b7f2fcbdb21754 inherit pub_methods_a00098"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a809925417689059399b7f2fcbdb21754"></a>
- </td><td class="memItemRight" valign="bottom"><b>multifunction_node</b> (<a class="el" href="a00070.html">graph</a> &g, size_t concurrency, Body body)</td></tr>
-<tr class="separator:a809925417689059399b7f2fcbdb21754 inherit pub_methods_a00098"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac4a12b4da8e8a0e9cd5b3cad770e5b38 inherit pub_methods_a00098"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac4a12b4da8e8a0e9cd5b3cad770e5b38"></a>
- </td><td class="memItemRight" valign="bottom"><b>multifunction_node</b> (const <a class="el" href="a00098.html">multifunction_node</a> &other)</td></tr>
-<tr class="separator:ac4a12b4da8e8a0e9cd5b3cad770e5b38 inherit pub_methods_a00098"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aab27cfc228b04974c670e0ba2e000b32 inherit pub_methods_a00098"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aab27cfc228b04974c670e0ba2e000b32"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:aab27cfc228b04974c670e0ba2e000b32 inherit pub_methods_a00098"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8fe68df8a4081035b0d48743b1329374 inherit pub_methods_a00098"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8fe68df8a4081035b0d48743b1329374"></a>
-void </td><td class="memItemRight" valign="bottom"><b>extract</b> ()</td></tr>
-<tr class="separator:a8fe68df8a4081035b0d48743b1329374 inherit pub_methods_a00098"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00072')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4badd313105e30f539882276353dcb8e"></a>
- </td><td class="memItemRight" valign="bottom"><b>graph_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pro_methods_a00098"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00098')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< TupleType, TupleType, rejecting, Allocator ></a></td></tr>
-<tr class="memitem:a18b55415057cd0a0a13ce50a10ae114a inherit pro_methods_a00098"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18b55415057cd0a0a13ce50a10ae114a"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f))</td></tr>
-<tr class="separator:a18b55415057cd0a0a13ce50a10ae114a inherit pro_methods_a00098"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_attribs_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00072')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1caee1c5677047b05d18b1662ca6fdf8"></a>
-<a class="el" href="a00070.html">graph</a> & </td><td class="memItemRight" valign="bottom"><b>my_graph</b></td></tr>
-<tr class="separator:a1caee1c5677047b05d18b1662ca6fdf8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af48cd0cd4f6e44efc3b353adb55f86a8"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>next</b></td></tr>
-<tr class="separator:af48cd0cd4f6e44efc3b353adb55f86a8 inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6917bffc3cb150319679bf2395e68caa"></a>
-<a class="el" href="a00072.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>prev</b></td></tr>
-<tr class="separator:a6917bffc3cb150319679bf2395e68caa inherit pro_attribs_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_static_attribs_a00098"><td colspan="2" onclick="javascript:toggleInherit('pro_static_attribs_a00098')"><img src="closed.png" alt="-"/> Static Protected Attributes inherited from <a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< TupleType, TupleType, rejecting, Allocator ></a></td></tr>
-<tr class="memitem:a3fa1db1d966237e6e61e7f36c788bc56 inherit pro_static_attribs_a00098"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3fa1db1d966237e6e61e7f36c788bc56"></a>
-static const int </td><td class="memItemRight" valign="bottom"><b>N</b></td></tr>
-<tr class="separator:a3fa1db1d966237e6e61e7f36c788bc56 inherit pro_static_attribs_a00098"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
+<p><code>#include <parallel_invoke.h></code></p>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename TupleType, typename Allocator = cache_aligned_allocator<TupleType>><br/>
-class tbb::flow::interface7::split_node< TupleType, Allocator ></h3>
-
-<p><a class="el" href="a00147.html" title="split_node: accepts a tuple as input, forwards each element of the tuple to its ">split_node</a>: accepts a tuple as input, forwards each element of the tuple to its </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<div class="textblock"><p>Dummy to avoid cluttering the bulk of the header with enormous amount of ifdefs. </p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>parallel_invoke.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00147.png b/doc/html/a00147.png
deleted file mode 100644
index 280b875..0000000
Binary files a/doc/html/a00147.png and /dev/null differ
diff --git a/doc/html/a00148.html b/doc/html/a00148.html
index 793859c..5c3d315 100644
--- a/doc/html/a00148.html
+++ b/doc/html/a00148.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::structured_task_group Class Reference</title>
+<title>tbb::task_handle< F > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,75 +33,48 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00148.html">structured_task_group</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00148.html">task_handle</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00308.html">List of all members</a>  </div>
+<a href="#friends">Friends</a> |
+<a href="a00301.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::structured_task_group Class Reference</div>  </div>
+<div class="title">tbb::task_handle< F > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 <div class="dynheader">
-Inheritance diagram for tbb::structured_task_group:</div>
+Inheritance diagram for tbb::task_handle< F >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00148.png" usemap="#tbb::structured_task_group_map" alt=""/>
-  <map id="tbb::structured_task_group_map" name="tbb::structured_task_group_map">
-<area href="a00152.html" alt="tbb::internal::task_group_base" shape="rect" coords="0,56,179,80"/>
+  <img src="a00148.png" usemap="#tbb::task_handle< F >_map" alt=""/>
+  <map id="tbb::task_handle< F >_map" name="tbb::task_handle< F >_map">
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:ab6812c9b682cec4b1a93da169b6fffc7"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab6812c9b682cec4b1a93da169b6fffc7"></a>
-template<typename F > </td></tr>
-<tr class="memitem:ab6812c9b682cec4b1a93da169b6fffc7"><td class="memTemplItemLeft" align="right" valign="top">task_group_status </td><td class="memTemplItemRight" valign="bottom"><b>run_and_wait</b> (<a class="el" href="a00154.html">task_handle</a>< F > &h)</td></tr>
-<tr class="separator:ab6812c9b682cec4b1a93da169b6fffc7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0578ff577290a108d395ab29a0a04e04"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0578ff577290a108d395ab29a0a04e04"></a>
-task_group_status </td><td class="memItemRight" valign="bottom"><b>wait</b> ()</td></tr>
-<tr class="separator:a0578ff577290a108d395ab29a0a04e04"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00152"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00152')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00152.html">tbb::internal::task_group_base</a></td></tr>
-<tr class="memitem:ac846a7be5035e1f5c929bda05e1b4401 inherit pub_methods_a00152"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac846a7be5035e1f5c929bda05e1b4401"></a>
- </td><td class="memItemRight" valign="bottom"><b>task_group_base</b> (uintptr_t traits=0)</td></tr>
-<tr class="separator:ac846a7be5035e1f5c929bda05e1b4401 inherit pub_methods_a00152"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8d8398153ad19d83a629aeb46991620b inherit pub_methods_a00152"><td class="memTemplParams" colspan="2"><a class="anchor" id="a8d8398153ad19d83a629aeb46991620b"></a>
-template<typename F > </td></tr>
-<tr class="memitem:a8d8398153ad19d83a629aeb46991620b inherit pub_methods_a00152"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>run</b> (<a class="el" href="a00154.html">task_handle</a>< F > &h)</td></tr>
-<tr class="separator:a8d8398153ad19d83a629aeb46991620b inherit pub_methods_a00152"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9a05d8b3350796df951c701978cec816 inherit pub_methods_a00152"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a05d8b3350796df951c701978cec816"></a>
-task_group_status </td><td class="memItemRight" valign="bottom"><b>wait</b> ()</td></tr>
-<tr class="separator:a9a05d8b3350796df951c701978cec816 inherit pub_methods_a00152"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a91b0943033a9e802cea00ac4af9e4ae2 inherit pub_methods_a00152"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a91b0943033a9e802cea00ac4af9e4ae2"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>is_canceling</b> ()</td></tr>
-<tr class="separator:a91b0943033a9e802cea00ac4af9e4ae2 inherit pub_methods_a00152"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2c2b1b967f4d1924cf15c19e3854ff2f inherit pub_methods_a00152"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c2b1b967f4d1924cf15c19e3854ff2f"></a>
-void </td><td class="memItemRight" valign="bottom"><b>cancel</b> ()</td></tr>
-<tr class="separator:a2c2b1b967f4d1924cf15c19e3854ff2f inherit pub_methods_a00152"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1e213e12e1c2d789c22e56901b53b1d2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e213e12e1c2d789c22e56901b53b1d2"></a>
+ </td><td class="memItemRight" valign="bottom"><b>task_handle</b> (const F &f)</td></tr>
+<tr class="separator:a1e213e12e1c2d789c22e56901b53b1d2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab09a19aa92286d48cc42d3e9cd60b5d8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab09a19aa92286d48cc42d3e9cd60b5d8"></a>
+void </td><td class="memItemRight" valign="bottom"><b>operator()</b> () const </td></tr>
+<tr class="separator:ab09a19aa92286d48cc42d3e9cd60b5d8"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pro_methods_a00152"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00152')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00152.html">tbb::internal::task_group_base</a></td></tr>
-<tr class="memitem:a4efe5bdeaa3c874a36e7d95d76ad1367 inherit pro_methods_a00152"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4efe5bdeaa3c874a36e7d95d76ad1367"></a>
-task & </td><td class="memItemRight" valign="bottom"><b>owner</b> ()</td></tr>
-<tr class="separator:a4efe5bdeaa3c874a36e7d95d76ad1367 inherit pro_methods_a00152"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aef3561e83c11cde7299a34db1064f420 inherit pro_methods_a00152"><td class="memTemplParams" colspan="2"><a class="anchor" id="aef3561e83c11cde7299a34db1064f420"></a>
-template<typename F > </td></tr>
-<tr class="memitem:aef3561e83c11cde7299a34db1064f420 inherit pro_methods_a00152"><td class="memTemplItemLeft" align="right" valign="top">task_group_status </td><td class="memTemplItemRight" valign="bottom"><b>internal_run_and_wait</b> (F &f)</td></tr>
-<tr class="separator:aef3561e83c11cde7299a34db1064f420 inherit pro_methods_a00152"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab57636e45b436a15c7adefb25f9df090 inherit pro_methods_a00152"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab57636e45b436a15c7adefb25f9df090"></a>
-template<typename F , typename Task > </td></tr>
-<tr class="memitem:ab57636e45b436a15c7adefb25f9df090 inherit pro_methods_a00152"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>internal_run</b> (F &f)</td></tr>
-<tr class="separator:ab57636e45b436a15c7adefb25f9df090 inherit pro_methods_a00152"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_attribs_a00152"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00152')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="a00152.html">tbb::internal::task_group_base</a></td></tr>
-<tr class="memitem:a60fb257f34f63428032f93e9b3b50a89 inherit pro_attribs_a00152"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a60fb257f34f63428032f93e9b3b50a89"></a>
-empty_task * </td><td class="memItemRight" valign="bottom"><b>my_root</b></td></tr>
-<tr class="separator:a60fb257f34f63428032f93e9b3b50a89 inherit pro_attribs_a00152"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afa2bb3845517c6b2f9e29a4e3b08a62d inherit pro_attribs_a00152"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa2bb3845517c6b2f9e29a4e3b08a62d"></a>
-<a class="el" href="a00153.html">task_group_context</a> </td><td class="memItemRight" valign="bottom"><b>my_context</b></td></tr>
-<tr class="separator:afa2bb3845517c6b2f9e29a4e3b08a62d inherit pro_attribs_a00152"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a70a59090420eb9c76bd067b3ed3f1e72"><td class="memTemplParams" colspan="2"><a class="anchor" id="a70a59090420eb9c76bd067b3ed3f1e72"></a>
+template<typename _F > </td></tr>
+<tr class="memitem:a70a59090420eb9c76bd067b3ed3f1e72"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::task_handle_task</b></td></tr>
+<tr class="separator:a70a59090420eb9c76bd067b3ed3f1e72"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abe85fe1f158cb2a40cd7203854b9460a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe85fe1f158cb2a40cd7203854b9460a"></a>
+class </td><td class="memItemRight" valign="bottom"><b>task_group</b></td></tr>
+<tr class="separator:abe85fe1f158cb2a40cd7203854b9460a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2913777f78e95f9ea09d788b12db6b62"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2913777f78e95f9ea09d788b12db6b62"></a>
+class </td><td class="memItemRight" valign="bottom"><b>structured_task_group</b></td></tr>
+<tr class="separator:a2913777f78e95f9ea09d788b12db6b62"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <hr/>The documentation for this class was generated from the following file:<ul>
 <li>task_group.h</li>
@@ -109,7 +82,7 @@ empty_task * </td><td class="memItemRight" valign="bottom"><b>my_root</b></
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00148.png b/doc/html/a00148.png
index f9335ed..5f640e9 100644
Binary files a/doc/html/a00148.png and b/doc/html/a00148.png differ
diff --git a/doc/html/a00149.html b/doc/html/a00149.html
index 45c92a4..82d743d 100644
--- a/doc/html/a00149.html
+++ b/doc/html/a00149.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::internal::successor_cache< T, M > Class Template Reference</title>
+<title>tbb::internal::task_handle_task< F > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,21 +33,39 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00149.html">successor_cache</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00149.html">task_handle_task</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="a00397.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::internal::successor_cache< T, M > Class Template Reference</div>  </div>
+<div class="title">tbb::internal::task_handle_task< F > Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
+<div class="dynheader">
+Inheritance diagram for tbb::internal::task_handle_task< F >:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00149.png" usemap="#tbb::internal::task_handle_task< F >_map" alt=""/>
+  <map id="tbb::internal::task_handle_task< F >_map" name="tbb::internal::task_handle_task< F >_map">
+</map>
+ </div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:abcddb511967aa06d264ac6c06c4fb08b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abcddb511967aa06d264ac6c06c4fb08b"></a>
+ </td><td class="memItemRight" valign="bottom"><b>task_handle_task</b> (<a class="el" href="a00148.html">task_handle</a>< F > &h)</td></tr>
+<tr class="separator:abcddb511967aa06d264ac6c06c4fb08b"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
+<li>task_group.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00155.png b/doc/html/a00149.png
similarity index 100%
copy from doc/html/a00155.png
copy to doc/html/a00149.png
diff --git a/doc/html/a00150.html b/doc/html/a00150.html
index b5bf8e3..14e1022 100644
--- a/doc/html/a00150.html
+++ b/doc/html/a00150.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface7::task_arena Class Reference</title>
+<title>tbb::task_scheduler_init Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,85 +33,90 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00150.html">task_arena</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00150.html">task_scheduler_init</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
 <a href="#pub-static-methods">Static Public Member Functions</a> |
-<a href="#friends">Friends</a> |
-<a href="a00407.html">List of all members</a>  </div>
+<a href="#pub-static-attribs">Static Public Attributes</a> |
+<a href="a00304.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface7::task_arena Class Reference</div>  </div>
+<div class="title">tbb::task_scheduler_init Class Reference<div class="ingroups"><a class="el" href="a00257.html">Task Scheduling</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p><code>#include <task_arena.h></code></p>
+<p>Class delimiting the scope of task scheduler activity.  
+ <a href="a00150.html#details">More...</a></p>
+
+<p><code>#include <task_scheduler_init.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::interface7::task_arena:</div>
+Inheritance diagram for tbb::task_scheduler_init:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00150.png" usemap="#tbb::interface7::task_arena_map" alt=""/>
-  <map id="tbb::interface7::task_arena_map" name="tbb::interface7::task_arena_map">
+  <img src="a00150.png" usemap="#tbb::task_scheduler_init_map" alt=""/>
+  <map id="tbb::task_scheduler_init_map" name="tbb::task_scheduler_init_map">
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a6035737ce1a8db376d06880dae9d0c40"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#a6035737ce1a8db376d06880dae9d0c40">task_arena</a> (int max_concurrency=automatic, unsigned reserved_for_masters=1)</td></tr>
-<tr class="memdesc:a6035737ce1a8db376d06880dae9d0c40"><td class="mdescLeft"> </td><td class="mdescRight">Creates <a class="el" href="a00150.html">task_arena</a> with certain concurrency limits.  <a href="#a6035737ce1a8db376d06880dae9d0c40">More...</a><br/></td></tr>
-<tr class="separator:a6035737ce1a8db376d06880dae9d0c40"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a70d122b3e6e4760c6053c5c230c715ef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a70d122b3e6e4760c6053c5c230c715ef"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#a70d122b3e6e4760c6053c5c230c715ef">task_arena</a> (const <a class="el" href="a00150.html">task_arena</a> &s)</td></tr>
-<tr class="memdesc:a70d122b3e6e4760c6053c5c230c715ef"><td class="mdescLeft"> </td><td class="mdescRight">Copies settings from another <a class="el" href="a00150.html">task_arena</a>. <br/></td></tr>
-<tr class="separator:a70d122b3e6e4760c6053c5c230c715ef"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a955131a79f8dc5a0a5c9ffa66a7e7140"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a955131a79f8dc5a0a5c9ffa66a7e7140"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#a955131a79f8dc5a0a5c9ffa66a7e7140">initialize</a> ()</td></tr>
-<tr class="memdesc:a955131a79f8dc5a0a5c9ffa66a7e7140"><td class="mdescLeft"> </td><td class="mdescRight">Forces allocation of the resources for the <a class="el" href="a00150.html">task_arena</a> as specified in constructor arguments. <br/></td></tr>
-<tr class="separator:a955131a79f8dc5a0a5c9ffa66a7e7140"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a754d60ba6981461eb7c86afd14d3da2a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a754d60ba6981461eb7c86afd14d3da2a"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#a754d60ba6981461eb7c86afd14d3da2a">initialize</a> (int max_concurrency, unsigned reserved_for_masters=1)</td></tr>
-<tr class="memdesc:a754d60ba6981461eb7c86afd14d3da2a"><td class="mdescLeft"> </td><td class="mdescRight">Overrides concurrency level and forces initialization of internal representation. <br/></td></tr>
-<tr class="separator:a754d60ba6981461eb7c86afd14d3da2a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aecb3eedeacfe8469a91c17525dae7fc9"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#aecb3eedeacfe8469a91c17525dae7fc9">terminate</a> ()</td></tr>
-<tr class="separator:aecb3eedeacfe8469a91c17525dae7fc9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9ff5a35a219953a4f3d99b833fa5f683"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#a9ff5a35a219953a4f3d99b833fa5f683">~task_arena</a> ()</td></tr>
-<tr class="separator:a9ff5a35a219953a4f3d99b833fa5f683"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad85856cefa30d42155a2b122b03efd8c"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#ad85856cefa30d42155a2b122b03efd8c">is_active</a> () const </td></tr>
-<tr class="separator:ad85856cefa30d42155a2b122b03efd8c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8034275ed2fffa68f70484043b90d406"><td class="memTemplParams" colspan="2">template<typename F > </td></tr>
-<tr class="memitem:a8034275ed2fffa68f70484043b90d406"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00150.html#a8034275ed2fffa68f70484043b90d406">enqueue</a> (const F &f)</td></tr>
-<tr class="separator:a8034275ed2fffa68f70484043b90d406"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9a04ab4afb2d74b0317618f59ab49be7"><td class="memTemplParams" colspan="2">template<typename F > </td></tr>
-<tr class="memitem:a9a04ab4afb2d74b0317618f59ab49be7"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00150.html#a9a04ab4afb2d74b0317618f59ab49be7">enqueue</a> (const F &f, priority_t p)</td></tr>
-<tr class="separator:a9a04ab4afb2d74b0317618f59ab49be7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af0c96f325b59d567b4c720f2830adde8"><td class="memTemplParams" colspan="2">template<typename F > </td></tr>
-<tr class="memitem:af0c96f325b59d567b4c720f2830adde8"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00150.html#af0c96f325b59d567b4c720f2830adde8">execute</a> (F &f)</td></tr>
-<tr class="separator:af0c96f325b59d567b4c720f2830adde8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab8442c8e9e3e678349409e08cabc7ae2"><td class="memTemplParams" colspan="2">template<typename F > </td></tr>
-<tr class="memitem:ab8442c8e9e3e678349409e08cabc7ae2"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00150.html#ab8442c8e9e3e678349409e08cabc7ae2">execute</a> (const F &f)</td></tr>
-<tr class="separator:ab8442c8e9e3e678349409e08cabc7ae2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a07d87dff8c6116ee349684e10f754aeb"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#a07d87dff8c6116ee349684e10f754aeb">debug_wait_until_empty</a> ()</td></tr>
-<tr class="separator:a07d87dff8c6116ee349684e10f754aeb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a485028b867bffef5829209330e79e64c"><td class="memItemLeft" align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#a485028b867bffef5829209330e79e64c">initialize</a> (int number_of_threads=<a class="el" href="a00150.html#a945886f5ef48300a8ebff2d077c166b1">automatic</a>)</td></tr>
+<tr class="memdesc:a485028b867bffef5829209330e79e64c"><td class="mdescLeft"> </td><td class="mdescRight">Ensure that scheduler exists for this thread.  <a href="#a485028b867bffef5829209330e79e64c">More...</a><br/></td></tr>
+<tr class="separator:a485028b867bffef5829209330e79e64c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0f5294f74b123a646a1762c68d11e39a"><td class="memItemLeft" align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#a0f5294f74b123a646a1762c68d11e39a">initialize</a> (int number_of_threads, stack_size_type thread_stack_size)</td></tr>
+<tr class="memdesc:a0f5294f74b123a646a1762c68d11e39a"><td class="mdescLeft"> </td><td class="mdescRight">The overloaded method with stack size parameter.  <a href="#a0f5294f74b123a646a1762c68d11e39a">More...</a><br/></td></tr>
+<tr class="separator:a0f5294f74b123a646a1762c68d11e39a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a15d5dca7f79c5769bb96f674e4da0c04"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15d5dca7f79c5769bb96f674e4da0c04"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#a15d5dca7f79c5769bb96f674e4da0c04">terminate</a> ()</td></tr>
+<tr class="memdesc:a15d5dca7f79c5769bb96f674e4da0c04"><td class="mdescLeft"> </td><td class="mdescRight">Inverse of method initialize. <br/></td></tr>
+<tr class="separator:a15d5dca7f79c5769bb96f674e4da0c04"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae261cf6c54a3689ef4e2c079fe0f67d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae261cf6c54a3689ef4e2c079fe0f67d0"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#ae261cf6c54a3689ef4e2c079fe0f67d0">blocking_terminate</a> ()</td></tr>
+<tr class="memdesc:ae261cf6c54a3689ef4e2c079fe0f67d0"><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="a00150.html#a15d5dca7f79c5769bb96f674e4da0c04" title="Inverse of method initialize. ">terminate()</a> that waits for worker threads termination. Throws exception on error. <br/></td></tr>
+<tr class="separator:ae261cf6c54a3689ef4e2c079fe0f67d0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2721ff874fb21f97b470d14a5ec151f3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2721ff874fb21f97b470d14a5ec151f3"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#a2721ff874fb21f97b470d14a5ec151f3">blocking_terminate</a> (const std::nothrow_t &) __TBB_NOEXCEPT(true)</td></tr>
+<tr class="memdesc:a2721ff874fb21f97b470d14a5ec151f3"><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="a00150.html#a15d5dca7f79c5769bb96f674e4da0c04" title="Inverse of method initialize. ">terminate()</a> that waits for worker threads termination. Returns false on error. <br/></td></tr>
+<tr class="separator:a2721ff874fb21f97b470d14a5ec151f3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8b2657d9b7c39fede2d19507d0e94688"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8b2657d9b7c39fede2d19507d0e94688"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#a8b2657d9b7c39fede2d19507d0e94688">task_scheduler_init</a> (int number_of_threads=<a class="el" href="a00150.html#a945886f5ef48300a8ebff2d077c166b1">automatic</a>, stack_size_type thread_stack_size=0)</td></tr>
+<tr class="memdesc:a8b2657d9b7c39fede2d19507d0e94688"><td class="mdescLeft"> </td><td class="mdescRight">Shorthand for default constructor followed by call to initialize(number_of_threads). <br/></td></tr>
+<tr class="separator:a8b2657d9b7c39fede2d19507d0e94688"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a20b121334ec39c1d91bd4fe9a51892b0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a20b121334ec39c1d91bd4fe9a51892b0"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#a20b121334ec39c1d91bd4fe9a51892b0">~task_scheduler_init</a> ()</td></tr>
+<tr class="memdesc:a20b121334ec39c1d91bd4fe9a51892b0"><td class="mdescLeft"> </td><td class="mdescRight">Destroy scheduler for this thread if thread has no other live task_scheduler_inits. <br/></td></tr>
+<tr class="separator:a20b121334ec39c1d91bd4fe9a51892b0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aed5505d7fed9d5493676aa15c176512c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed5505d7fed9d5493676aa15c176512c"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#aed5505d7fed9d5493676aa15c176512c">is_active</a> () const </td></tr>
+<tr class="memdesc:aed5505d7fed9d5493676aa15c176512c"><td class="mdescLeft"> </td><td class="mdescRight">Returns true if scheduler is active (initialized); false otherwise. <br/></td></tr>
+<tr class="separator:aed5505d7fed9d5493676aa15c176512c"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
 Static Public Member Functions</h2></td></tr>
-<tr class="memitem:af695a8aa3d2a4f498067c662e287dd8f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af695a8aa3d2a4f498067c662e287dd8f"></a>
-static int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#af695a8aa3d2a4f498067c662e287dd8f">current_thread_index</a> ()</td></tr>
-<tr class="memdesc:af695a8aa3d2a4f498067c662e287dd8f"><td class="mdescLeft"> </td><td class="mdescRight">Returns the index, aka slot number, of the calling thread in its current arena. <br/></td></tr>
-<tr class="separator:af695a8aa3d2a4f498067c662e287dd8f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa0c0d46ec09bedc1ee876aa8aa87c3d1"><td class="memItemLeft" align="right" valign="top">static int __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#aa0c0d46ec09bedc1ee876aa8aa87c3d1">default_num_threads</a> ()</td></tr>
+<tr class="memdesc:aa0c0d46ec09bedc1ee876aa8aa87c3d1"><td class="mdescLeft"> </td><td class="mdescRight">Returns the number of threads TBB scheduler would create if initialized by default.  <a href="#aa0c0d46ec09bedc1ee876aa8aa87c3d1">More...</a><br/></td></tr>
+<tr class="separator:aa0c0d46ec09bedc1ee876aa8aa87c3d1"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:a6887d06dd0f104ab6c06fdddca4d2471"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6887d06dd0f104ab6c06fdddca4d2471"></a>
-class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::task_scheduler_observer_v3</b></td></tr>
-<tr class="separator:a6887d06dd0f104ab6c06fdddca4d2471"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a945886f5ef48300a8ebff2d077c166b1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a945886f5ef48300a8ebff2d077c166b1"></a>
+static const int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#a945886f5ef48300a8ebff2d077c166b1">automatic</a> = -1</td></tr>
+<tr class="memdesc:a945886f5ef48300a8ebff2d077c166b1"><td class="mdescLeft"> </td><td class="mdescRight">Typedef for number of threads that is automatic. <br/></td></tr>
+<tr class="separator:a945886f5ef48300a8ebff2d077c166b1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af0e49ff2f59a4e53c9c07897b57f084d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af0e49ff2f59a4e53c9c07897b57f084d"></a>
+static const int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#af0e49ff2f59a4e53c9c07897b57f084d">deferred</a> = -2</td></tr>
+<tr class="memdesc:af0e49ff2f59a4e53c9c07897b57f084d"><td class="mdescLeft"> </td><td class="mdescRight">Argument to <a class="el" href="a00150.html#a485028b867bffef5829209330e79e64c" title="Ensure that scheduler exists for this thread. ">initialize()</a> or constructor that causes initialization to be deferred. <br/></td></tr>
+<tr class="separator:af0e49ff2f59a4e53c9c07897b57f084d"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>1-to-1 proxy representation class of scheduler's arena Constructors set up settings only, real construction is deferred till the first method invocation Destructor only removes one of the references to the inner arena representation. Final destruction happens when all the references (and the work) are gone. </p>
-</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a6035737ce1a8db376d06880dae9d0c40"></a>
+<div class="textblock"><p>Class delimiting the scope of task scheduler activity. </p>
+<p>A thread can construct a <a class="el" href="a00150.html" title="Class delimiting the scope of task scheduler activity. ">task_scheduler_init</a> object and keep it alive while it uses TBB's tasking subsystem (including parallel algorithms).</p>
+<p>This class allows to customize properties of the TBB task pool to some extent. For example it can limit concurrency level of parallel work initiated by the given thread. It also can be used to specify stack size of the TBB worker threads, though this setting is not effective if the thread pool has already been created.</p>
+<p>If a parallel construct is used without <a class="el" href="a00150.html" title="Class delimiting the scope of task scheduler activity. ">task_scheduler_init</a> object previously created, the scheduler will be initialized automatically with default settings, and will persist until this thread exits. Default concurrency level is defined as described in <a class="el" href="a00150.html#a485028b867bffef5829209330e79e64c" title="Ensure that scheduler exists for this thread. ">task_schedule [...]
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="aa0c0d46ec09bedc1ee876aa8aa87c3d1"></a>
 <div class="memitem">
 <div class="memproto">
 <table class="mlabels">
@@ -119,135 +124,64 @@ class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::task_
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">tbb::interface7::task_arena::task_arena </td>
+          <td class="memname">static int __TBB_EXPORTED_FUNC tbb::task_scheduler_init::default_num_threads </td>
           <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>max_concurrency</em> = <code>automatic</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"><em>reserved_for_masters</em> = <code>1</code> </td>
-        </tr>
-        <tr>
+          <td class="paramname">)</td><td></td>
           <td></td>
-          <td>)</td>
-          <td></td><td></td>
         </tr>
       </table>
   </td>
   <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
   </tr>
 </table>
 </div><div class="memdoc">
 
-<p>Creates <a class="el" href="a00150.html">task_arena</a> with certain concurrency limits. </p>
-<p>Sets up settings only, real construction is deferred till the first method invocation </p>
-<ul>
-<li>max_concurrency specifies total number of slots in arena where threads work </li>
-<li>reserved_for_masters specifies number of slots to be used by master threads only. Value of 1 is default and reflects behavior of implicit arenas. </li>
-</ul>
+<p>Returns the number of threads TBB scheduler would create if initialized by default. </p>
+<p>Result returned by this method does not depend on whether the scheduler has already been initialized.</p>
+<p>Because tbb 2.0 does not support blocking tasks yet, you may use this method to boost the number of threads in the tbb's internal pool, if your tasks are doing I/O operations. The optimal number of additional threads depends on how much time your tasks spend in the blocked state.</p>
+<p>Before TBB 3.0 U4 this method returned the number of logical CPU in the system. Currently on Windows, Linux and FreeBSD it returns the number of logical CPUs available to the current process in accordance with its affinity mask.</p>
+<p>NOTE: The return value of this method never changes after its first invocation. This means that changes in the process affinity mask that took place after this method was first invoked will not affect the number of worker threads in the TBB worker threads pool. </p>
 
 </div>
 </div>
-<a class="anchor" id="a9ff5a35a219953a4f3d99b833fa5f683"></a>
+<a class="anchor" id="a485028b867bffef5829209330e79e64c"></a>
 <div class="memitem">
 <div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">tbb::interface7::task_arena::~task_arena </td>
+          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_scheduler_init::initialize </td>
           <td>(</td>
-          <td class="paramname">)</td><td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>number_of_threads</em> = <code><a class="el" href="a00150.html#a945886f5ef48300a8ebff2d077c166b1">automatic</a></code>)</td><td></td>
           <td></td>
         </tr>
       </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
 </div><div class="memdoc">
-<p>Removes the reference to the internal arena representation, and destroys the external object. Not thread safe wrt concurrent invocations of other methods. </p>
 
-</div>
-</div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="a07d87dff8c6116ee349684e10f754aeb"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::interface7::task_arena::debug_wait_until_empty </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Wait for all work in the arena to be completed Even submitted by other application threads Joins arena if/when possible (in the same way as <a class="el" href="a00150.html#af0c96f325b59d567b4c720f2830adde8">execute()</a>) </p>
+<p>Ensure that scheduler exists for this thread. </p>
+<p>A value of -1 lets TBB decide on the number of threads, which is usually maximal hardware concurrency for this process, that is the number of logical CPUs on the machine (possibly limited by the processor affinity mask of this process (Windows) or of this thread (Linux, FreeBSD). It is preferable option for production code because it helps to avoid nasty surprises when several TBB based components run side-by-side or in a nested fashion inside the same process.</p>
+<p>The number_of_threads is ignored if any other task_scheduler_inits currently exist. A thread may construct multiple task_scheduler_inits. Doing so does no harm because the underlying scheduler is reference counted. </p>
 
-</div>
-</div>
-<a class="anchor" id="a8034275ed2fffa68f70484043b90d406"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename F > </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::interface7::task_arena::enqueue </td>
-          <td>(</td>
-          <td class="paramtype">const F & </td>
-          <td class="paramname"><em>f</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Enqueues a task into the arena to process a functor, and immediately returns. Does not require the calling thread to join the arena </p>
+<p>Referenced by <a class="el" href="a00150.html#a8b2657d9b7c39fede2d19507d0e94688">task_scheduler_init()</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="a9a04ab4afb2d74b0317618f59ab49be7"></a>
+<a class="anchor" id="a0f5294f74b123a646a1762c68d11e39a"></a>
 <div class="memitem">
 <div class="memproto">
-<div class="memtemplate">
-template<typename F > </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">void tbb::interface7::task_arena::enqueue </td>
+          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_scheduler_init::initialize </td>
           <td>(</td>
-          <td class="paramtype">const F & </td>
-          <td class="paramname"><em>f</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>number_of_threads</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">priority_t </td>
-          <td class="paramname"><em>p</em> </td>
+          <td class="paramtype">stack_size_type </td>
+          <td class="paramname"><em>thread_stack_size</em> </td>
         </tr>
         <tr>
           <td></td>
@@ -255,125 +189,20 @@ template<typename F > </div>
           <td></td><td></td>
         </tr>
       </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Enqueues a task with priority p into the arena to process a functor f, and immediately returns. Does not require the calling thread to join the arena </p>
-
-</div>
-</div>
-<a class="anchor" id="af0c96f325b59d567b4c720f2830adde8"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename F > </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::interface7::task_arena::execute </td>
-          <td>(</td>
-          <td class="paramtype">F & </td>
-          <td class="paramname"><em>f</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Joins the arena and executes a functor, then returns If not possible to join, wraps the functor into a task, enqueues it and waits for task completion Can decrement the arena demand for workers, causing a worker to leave and free a slot to the calling thread </p>
-
-</div>
-</div>
-<a class="anchor" id="ab8442c8e9e3e678349409e08cabc7ae2"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename F > </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::interface7::task_arena::execute </td>
-          <td>(</td>
-          <td class="paramtype">const F & </td>
-          <td class="paramname"><em>f</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
 </div><div class="memdoc">
-<p>Joins the arena and executes a functor, then returns If not possible to join, wraps the functor into a task, enqueues it and waits for task completion Can decrement the arena demand for workers, causing a worker to leave and free a slot to the calling thread </p>
 
-</div>
-</div>
-<a class="anchor" id="ad85856cefa30d42155a2b122b03efd8c"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool tbb::interface7::task_arena::is_active </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td> const</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Returns true if the arena is active (initialized); false otherwise. The name was chosen to match a <a class="el" href="a00156.html" title="Class delimiting the scope of task scheduler activity. ">task_scheduler_init</a> method with the same semantics. </p>
-
-</div>
-</div>
-<a class="anchor" id="aecb3eedeacfe8469a91c17525dae7fc9"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::interface7::task_arena::terminate </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Removes the reference to the internal arena representation. Not thread safe wrt concurrent invocations of other methods. </p>
+<p>The overloaded method with stack size parameter. </p>
+<p>Overloading is necessary to preserve ABI compatibility </p>
 
 </div>
 </div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>task_arena.h</li>
+<li>task_scheduler_init.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00150.png b/doc/html/a00150.png
index e9685d4..58550fd 100644
Binary files a/doc/html/a00150.png and b/doc/html/a00150.png differ
diff --git a/doc/html/a00151.html b/doc/html/a00151.html
index f37ab7b..c2dedec 100644
--- a/doc/html/a00151.html
+++ b/doc/html/a00151.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::task_group Class Reference</title>
+<title>tbb::interface6::task_scheduler_observer Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,92 +33,234 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00151.html">task_group</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00151.html">task_scheduler_observer</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00307.html">List of all members</a>  </div>
+<a href="#friends">Friends</a> |
+<a href="a00389.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::task_group Class Reference</div>  </div>
+<div class="title">tbb::interface6::task_scheduler_observer Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 <div class="dynheader">
-Inheritance diagram for tbb::task_group:</div>
+Inheritance diagram for tbb::interface6::task_scheduler_observer:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00151.png" usemap="#tbb::task_group_map" alt=""/>
-  <map id="tbb::task_group_map" name="tbb::task_group_map">
-<area href="a00152.html" alt="tbb::internal::task_group_base" shape="rect" coords="0,56,179,80"/>
+  <img src="a00151.png" usemap="#tbb::interface6::task_scheduler_observer_map" alt=""/>
+  <map id="tbb::interface6::task_scheduler_observer_map" name="tbb::interface6::task_scheduler_observer_map">
+<area href="a00152.html" alt="tbb::internal::task_scheduler_observer_v3" shape="rect" coords="0,0,247,24"/>
 </map>
  </div></div>
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a998642ddbd1b2b4282ad28224cc9f4fa"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom">{ <b>keep_awake</b> = false, 
+<b>allow_sleep</b> = true
+ }</td></tr>
+<tr class="memdesc:a998642ddbd1b2b4282ad28224cc9f4fa"><td class="mdescLeft"> </td><td class="mdescRight">Return commands for <a class="el" href="a00151.html#a2390325945912ee7ce58cd9700664ea4" title="The callback can be invoked by a worker thread before it goes to sleep. ">may_sleep()</a> <br/></td></tr>
+<tr class="separator:a998642ddbd1b2b4282ad28224cc9f4fa"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:abe756667c1272f714ad388aa31f2d29e"><td class="memTemplParams" colspan="2"><a class="anchor" id="abe756667c1272f714ad388aa31f2d29e"></a>
-template<typename F > </td></tr>
-<tr class="memitem:abe756667c1272f714ad388aa31f2d29e"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>run</b> (<a class="el" href="a00154.html">task_handle</a>< F > &h)</td></tr>
-<tr class="separator:abe756667c1272f714ad388aa31f2d29e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6355cce7750b1367fb98924af151e8b2"><td class="memTemplParams" colspan="2"><a class="anchor" id="a6355cce7750b1367fb98924af151e8b2"></a>
-template<typename F > </td></tr>
-<tr class="memitem:a6355cce7750b1367fb98924af151e8b2"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>run</b> (const F &f)</td></tr>
-<tr class="separator:a6355cce7750b1367fb98924af151e8b2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aeef1b473ff0edaf3f356722b13e877b0"><td class="memTemplParams" colspan="2"><a class="anchor" id="aeef1b473ff0edaf3f356722b13e877b0"></a>
-template<typename F > </td></tr>
-<tr class="memitem:aeef1b473ff0edaf3f356722b13e877b0"><td class="memTemplItemLeft" align="right" valign="top">task_group_status </td><td class="memTemplItemRight" valign="bottom"><b>run_and_wait</b> (const F &f)</td></tr>
-<tr class="separator:aeef1b473ff0edaf3f356722b13e877b0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a543903ef748fd10eb864c27a2e8ac18b"><td class="memTemplParams" colspan="2"><a class="anchor" id="a543903ef748fd10eb864c27a2e8ac18b"></a>
-template<typename F > </td></tr>
-<tr class="memitem:a543903ef748fd10eb864c27a2e8ac18b"><td class="memTemplItemLeft" align="right" valign="top">task_group_status </td><td class="memTemplItemRight" valign="bottom"><b>run_and_wait</b> (<a class="el" href="a00154.html">task_handle</a>< F > &h)</td></tr>
-<tr class="separator:a543903ef748fd10eb864c27a2e8ac18b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00152"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00152')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00152.html">tbb::internal::task_group_base</a></td></tr>
-<tr class="memitem:ac846a7be5035e1f5c929bda05e1b4401 inherit pub_methods_a00152"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac846a7be5035e1f5c929bda05e1b4401"></a>
- </td><td class="memItemRight" valign="bottom"><b>task_group_base</b> (uintptr_t traits=0)</td></tr>
-<tr class="separator:ac846a7be5035e1f5c929bda05e1b4401 inherit pub_methods_a00152"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8d8398153ad19d83a629aeb46991620b inherit pub_methods_a00152"><td class="memTemplParams" colspan="2"><a class="anchor" id="a8d8398153ad19d83a629aeb46991620b"></a>
-template<typename F > </td></tr>
-<tr class="memitem:a8d8398153ad19d83a629aeb46991620b inherit pub_methods_a00152"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>run</b> (<a class="el" href="a00154.html">task_handle</a>< F > &h)</td></tr>
-<tr class="separator:a8d8398153ad19d83a629aeb46991620b inherit pub_methods_a00152"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9a05d8b3350796df951c701978cec816 inherit pub_methods_a00152"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a05d8b3350796df951c701978cec816"></a>
-task_group_status </td><td class="memItemRight" valign="bottom"><b>wait</b> ()</td></tr>
-<tr class="separator:a9a05d8b3350796df951c701978cec816 inherit pub_methods_a00152"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a91b0943033a9e802cea00ac4af9e4ae2 inherit pub_methods_a00152"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a91b0943033a9e802cea00ac4af9e4ae2"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>is_canceling</b> ()</td></tr>
-<tr class="separator:a91b0943033a9e802cea00ac4af9e4ae2 inherit pub_methods_a00152"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2c2b1b967f4d1924cf15c19e3854ff2f inherit pub_methods_a00152"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c2b1b967f4d1924cf15c19e3854ff2f"></a>
-void </td><td class="memItemRight" valign="bottom"><b>cancel</b> ()</td></tr>
-<tr class="separator:a2c2b1b967f4d1924cf15c19e3854ff2f inherit pub_methods_a00152"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a89025b1e1d42e97d6fe114c0c331f730"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#a89025b1e1d42e97d6fe114c0c331f730">task_scheduler_observer</a> (bool local=false)</td></tr>
+<tr class="memdesc:a89025b1e1d42e97d6fe114c0c331f730"><td class="mdescLeft"> </td><td class="mdescRight">Construct local or global observer in inactive state (observation disabled).  <a href="#a89025b1e1d42e97d6fe114c0c331f730">More...</a><br/></td></tr>
+<tr class="separator:a89025b1e1d42e97d6fe114c0c331f730"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a36e7e0c466320029d5a3e50a573e04c1"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#a36e7e0c466320029d5a3e50a573e04c1">task_scheduler_observer</a> (task_arena &a)</td></tr>
+<tr class="memdesc:a36e7e0c466320029d5a3e50a573e04c1"><td class="mdescLeft"> </td><td class="mdescRight">Construct local observer for a given arena in inactive state (observation disabled).  <a href="#a36e7e0c466320029d5a3e50a573e04c1">More...</a><br/></td></tr>
+<tr class="separator:a36e7e0c466320029d5a3e50a573e04c1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9ef3f1853439b46e5a9db7fd1c0f9116"><td class="memItemLeft" align="right" valign="top">virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#a9ef3f1853439b46e5a9db7fd1c0f9116">~task_scheduler_observer</a> ()</td></tr>
+<tr class="separator:a9ef3f1853439b46e5a9db7fd1c0f9116"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad5b33790cea52c61e1fb004a8ed26365"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#ad5b33790cea52c61e1fb004a8ed26365">observe</a> (bool state=true)</td></tr>
+<tr class="memdesc:ad5b33790cea52c61e1fb004a8ed26365"><td class="mdescLeft"> </td><td class="mdescRight">Enable or disable observation.  <a href="#ad5b33790cea52c61e1fb004a8ed26365">More...</a><br/></td></tr>
+<tr class="separator:ad5b33790cea52c61e1fb004a8ed26365"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2390325945912ee7ce58cd9700664ea4"><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#a2390325945912ee7ce58cd9700664ea4">may_sleep</a> ()</td></tr>
+<tr class="memdesc:a2390325945912ee7ce58cd9700664ea4"><td class="mdescLeft"> </td><td class="mdescRight">The callback can be invoked by a worker thread before it goes to sleep.  <a href="#a2390325945912ee7ce58cd9700664ea4">More...</a><br/></td></tr>
+<tr class="separator:a2390325945912ee7ce58cd9700664ea4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_methods_a00152"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00152')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00152.html">tbb::internal::task_scheduler_observer_v3</a></td></tr>
+<tr class="memitem:a40209b347e3c82bb5bfda05941304309 inherit pub_methods_a00152"><td class="memItemLeft" align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#a40209b347e3c82bb5bfda05941304309">observe</a> (bool state=true)</td></tr>
+<tr class="memdesc:a40209b347e3c82bb5bfda05941304309 inherit pub_methods_a00152"><td class="mdescLeft"> </td><td class="mdescRight">Enable or disable observation.  <a href="#a40209b347e3c82bb5bfda05941304309">More...</a><br/></td></tr>
+<tr class="separator:a40209b347e3c82bb5bfda05941304309 inherit pub_methods_a00152"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a31abaf256f7172f010cfb2259c7787bb inherit pub_methods_a00152"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a31abaf256f7172f010cfb2259c7787bb"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#a31abaf256f7172f010cfb2259c7787bb">is_observing</a> () const </td></tr>
+<tr class="memdesc:a31abaf256f7172f010cfb2259c7787bb inherit pub_methods_a00152"><td class="mdescLeft"> </td><td class="mdescRight">Returns true if observation is enabled, false otherwise. <br/></td></tr>
+<tr class="separator:a31abaf256f7172f010cfb2259c7787bb inherit pub_methods_a00152"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a25bffb05efaaab36bc58590969e29745 inherit pub_methods_a00152"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a25bffb05efaaab36bc58590969e29745"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#a25bffb05efaaab36bc58590969e29745">task_scheduler_observer_v3</a> ()</td></tr>
+<tr class="memdesc:a25bffb05efaaab36bc58590969e29745 inherit pub_methods_a00152"><td class="mdescLeft"> </td><td class="mdescRight">Construct observer with observation disabled. <br/></td></tr>
+<tr class="separator:a25bffb05efaaab36bc58590969e29745 inherit pub_methods_a00152"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af4282a27725fbe86052bb785bdd9c5d3 inherit pub_methods_a00152"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#af4282a27725fbe86052bb785bdd9c5d3">on_scheduler_entry</a> (bool)</td></tr>
+<tr class="memdesc:af4282a27725fbe86052bb785bdd9c5d3 inherit pub_methods_a00152"><td class="mdescLeft"> </td><td class="mdescRight">Entry notification.  <a href="#af4282a27725fbe86052bb785bdd9c5d3">More...</a><br/></td></tr>
+<tr class="separator:af4282a27725fbe86052bb785bdd9c5d3 inherit pub_methods_a00152"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a657e90f833568e217b807d0122fa7668 inherit pub_methods_a00152"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#a657e90f833568e217b807d0122fa7668">on_scheduler_exit</a> (bool)</td></tr>
+<tr class="memdesc:a657e90f833568e217b807d0122fa7668 inherit pub_methods_a00152"><td class="mdescLeft"> </td><td class="mdescRight">Exit notification.  <a href="#a657e90f833568e217b807d0122fa7668">More...</a><br/></td></tr>
+<tr class="separator:a657e90f833568e217b807d0122fa7668 inherit pub_methods_a00152"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a151e475ebba39172fcc13f43bed426cc inherit pub_methods_a00152"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a151e475ebba39172fcc13f43bed426cc"></a>
+virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#a151e475ebba39172fcc13f43bed426cc">~task_scheduler_observer_v3</a> ()</td></tr>
+<tr class="memdesc:a151e475ebba39172fcc13f43bed426cc inherit pub_methods_a00152"><td class="mdescLeft"> </td><td class="mdescRight">Destructor automatically switches observation off if it is enabled. <br/></td></tr>
+<tr class="separator:a151e475ebba39172fcc13f43bed426cc inherit pub_methods_a00152"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pro_methods_a00152"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00152')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00152.html">tbb::internal::task_group_base</a></td></tr>
-<tr class="memitem:a4efe5bdeaa3c874a36e7d95d76ad1367 inherit pro_methods_a00152"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4efe5bdeaa3c874a36e7d95d76ad1367"></a>
-task & </td><td class="memItemRight" valign="bottom"><b>owner</b> ()</td></tr>
-<tr class="separator:a4efe5bdeaa3c874a36e7d95d76ad1367 inherit pro_methods_a00152"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aef3561e83c11cde7299a34db1064f420 inherit pro_methods_a00152"><td class="memTemplParams" colspan="2"><a class="anchor" id="aef3561e83c11cde7299a34db1064f420"></a>
-template<typename F > </td></tr>
-<tr class="memitem:aef3561e83c11cde7299a34db1064f420 inherit pro_methods_a00152"><td class="memTemplItemLeft" align="right" valign="top">task_group_status </td><td class="memTemplItemRight" valign="bottom"><b>internal_run_and_wait</b> (F &f)</td></tr>
-<tr class="separator:aef3561e83c11cde7299a34db1064f420 inherit pro_methods_a00152"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab57636e45b436a15c7adefb25f9df090 inherit pro_methods_a00152"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab57636e45b436a15c7adefb25f9df090"></a>
-template<typename F , typename Task > </td></tr>
-<tr class="memitem:ab57636e45b436a15c7adefb25f9df090 inherit pro_methods_a00152"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>internal_run</b> (F &f)</td></tr>
-<tr class="separator:ab57636e45b436a15c7adefb25f9df090 inherit pro_methods_a00152"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_attribs_a00152"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00152')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="a00152.html">tbb::internal::task_group_base</a></td></tr>
-<tr class="memitem:a60fb257f34f63428032f93e9b3b50a89 inherit pro_attribs_a00152"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a60fb257f34f63428032f93e9b3b50a89"></a>
-empty_task * </td><td class="memItemRight" valign="bottom"><b>my_root</b></td></tr>
-<tr class="separator:a60fb257f34f63428032f93e9b3b50a89 inherit pro_attribs_a00152"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afa2bb3845517c6b2f9e29a4e3b08a62d inherit pro_attribs_a00152"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa2bb3845517c6b2f9e29a4e3b08a62d"></a>
-<a class="el" href="a00153.html">task_group_context</a> </td><td class="memItemRight" valign="bottom"><b>my_context</b></td></tr>
-<tr class="separator:afa2bb3845517c6b2f9e29a4e3b08a62d inherit pro_attribs_a00152"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a567691ababd2dee2c44d1d6d4b9b093a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a567691ababd2dee2c44d1d6d4b9b093a"></a>
+class </td><td class="memItemRight" valign="bottom"><b>internal::task_scheduler_observer_v3</b></td></tr>
+<tr class="separator:a567691ababd2dee2c44d1d6d4b9b093a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae3fb165cd890fab10c1d09823dcb0ac9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae3fb165cd890fab10c1d09823dcb0ac9"></a>
+class </td><td class="memItemRight" valign="bottom"><b>internal::observer_proxy</b></td></tr>
+<tr class="separator:ae3fb165cd890fab10c1d09823dcb0ac9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5d0d193bf27a1606466663c68e05e1b3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5d0d193bf27a1606466663c68e05e1b3"></a>
+class </td><td class="memItemRight" valign="bottom"><b>internal::observer_list</b></td></tr>
+<tr class="separator:a5d0d193bf27a1606466663c68e05e1b3"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<h2 class="groupheader">Constructor & Destructor Documentation</h2>
+<a class="anchor" id="a89025b1e1d42e97d6fe114c0c331f730"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">tbb::interface6::task_scheduler_observer::task_scheduler_observer </td>
+          <td>(</td>
+          <td class="paramtype">bool </td>
+          <td class="paramname"><em>local</em> = <code>false</code>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">explicit</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Construct local or global observer in inactive state (observation disabled). </p>
+<p>For a local observer entry/exit notifications are invoked whenever a worker thread joins/leaves the arena of the observer's owner thread. If a thread is already in the arena when the observer is activated, the entry notification is called before it executes the first stolen task. TODO: Obsolete. Global observer semantics is obsolete as it violates master thread isolation guarantees and is not composable. Thus the current default behavior of the constructor is obsolete too and will be  [...]
+
+</div>
+</div>
+<a class="anchor" id="a36e7e0c466320029d5a3e50a573e04c1"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">tbb::interface6::task_scheduler_observer::task_scheduler_observer </td>
+          <td>(</td>
+          <td class="paramtype">task_arena & </td>
+          <td class="paramname"><em>a</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">explicit</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Construct local observer for a given arena in inactive state (observation disabled). </p>
+<p>entry/exit notifications are invoked whenever a thread joins/leaves arena. If a thread is already in the arena when the observer is activated, the entry notification is called before it executes the first stolen task. </p>
+
+</div>
+</div>
+<a class="anchor" id="a9ef3f1853439b46e5a9db7fd1c0f9116"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual tbb::interface6::task_scheduler_observer::~task_scheduler_observer </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
 </table>
+</div><div class="memdoc">
+<p>Destructor protects instance of the observer from concurrent notification. It is recommended to disable observation before destructor of a derived class starts, otherwise it can lead to concurrent notification callback on partly destroyed object </p>
+
+<p>References <a class="el" href="a00151.html#ad5b33790cea52c61e1fb004a8ed26365">observe()</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="a2390325945912ee7ce58cd9700664ea4"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual bool tbb::interface6::task_scheduler_observer::may_sleep </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>The callback can be invoked by a worker thread before it goes to sleep. </p>
+<p>If it returns false ('keep_awake'), the thread will keep spinning and looking for work. It will not be called for master threads. </p>
+
+</div>
+</div>
+<a class="anchor" id="ad5b33790cea52c61e1fb004a8ed26365"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::interface6::task_scheduler_observer::observe </td>
+          <td>(</td>
+          <td class="paramtype">bool </td>
+          <td class="paramname"><em>state</em> = <code>true</code>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Enable or disable observation. </p>
+<p>Warning: concurrent invocations of this method are not safe. Repeated calls with the same state are no-ops. </p>
+
+<p>References <a class="el" href="a00152.html#a40209b347e3c82bb5bfda05941304309">tbb::internal::task_scheduler_observer_v3::observe()</a>, and <a class="el" href="a00233.html#adb86d08473679d6fe0eabcdc766ffe3aa73cb2e2bcb94442b8b2b72e93a76f2e5">tbb::relaxed</a>.</p>
+
+<p>Referenced by <a class="el" href="a00151.html#a9ef3f1853439b46e5a9db7fd1c0f9116">~task_scheduler_observer()</a>.</p>
+
+</div>
+</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>task_group.h</li>
+<li>task_scheduler_observer.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00151.png b/doc/html/a00151.png
index d42b601..37496e9 100644
Binary files a/doc/html/a00151.png and b/doc/html/a00151.png differ
diff --git a/doc/html/a00152.html b/doc/html/a00152.html
index 41ba472..8a9b092 100644
--- a/doc/html/a00152.html
+++ b/doc/html/a00152.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::internal::task_group_base Class Reference</title>
+<title>tbb::internal::task_scheduler_observer_v3 Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,79 +33,150 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00152.html">task_group_base</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00152.html">task_scheduler_observer_v3</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-methods">Protected Member Functions</a> |
-<a href="#pro-attribs">Protected Attributes</a> |
-<a href="a00412.html">List of all members</a>  </div>
+<a href="#friends">Friends</a> |
+<a href="a00399.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::internal::task_group_base Class Reference</div>  </div>
+<div class="title">tbb::internal::task_scheduler_observer_v3 Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 <div class="dynheader">
-Inheritance diagram for tbb::internal::task_group_base:</div>
+Inheritance diagram for tbb::internal::task_scheduler_observer_v3:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00152.png" usemap="#tbb::internal::task_group_base_map" alt=""/>
-  <map id="tbb::internal::task_group_base_map" name="tbb::internal::task_group_base_map">
-<area href="a00148.html" alt="tbb::structured_task_group" shape="rect" coords="0,112,179,136"/>
-<area href="a00151.html" alt="tbb::task_group" shape="rect" coords="189,112,368,136"/>
+  <img src="a00152.png" usemap="#tbb::internal::task_scheduler_observer_v3_map" alt=""/>
+  <map id="tbb::internal::task_scheduler_observer_v3_map" name="tbb::internal::task_scheduler_observer_v3_map">
+<area href="a00151.html" alt="tbb::interface6::task_scheduler_observer" shape="rect" coords="0,56,247,80"/>
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:ac846a7be5035e1f5c929bda05e1b4401"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac846a7be5035e1f5c929bda05e1b4401"></a>
- </td><td class="memItemRight" valign="bottom"><b>task_group_base</b> (uintptr_t traits=0)</td></tr>
-<tr class="separator:ac846a7be5035e1f5c929bda05e1b4401"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8d8398153ad19d83a629aeb46991620b"><td class="memTemplParams" colspan="2"><a class="anchor" id="a8d8398153ad19d83a629aeb46991620b"></a>
-template<typename F > </td></tr>
-<tr class="memitem:a8d8398153ad19d83a629aeb46991620b"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>run</b> (<a class="el" href="a00154.html">task_handle</a>< F > &h)</td></tr>
-<tr class="separator:a8d8398153ad19d83a629aeb46991620b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9a05d8b3350796df951c701978cec816"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a05d8b3350796df951c701978cec816"></a>
-task_group_status </td><td class="memItemRight" valign="bottom"><b>wait</b> ()</td></tr>
-<tr class="separator:a9a05d8b3350796df951c701978cec816"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a91b0943033a9e802cea00ac4af9e4ae2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a91b0943033a9e802cea00ac4af9e4ae2"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>is_canceling</b> ()</td></tr>
-<tr class="separator:a91b0943033a9e802cea00ac4af9e4ae2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2c2b1b967f4d1924cf15c19e3854ff2f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c2b1b967f4d1924cf15c19e3854ff2f"></a>
-void </td><td class="memItemRight" valign="bottom"><b>cancel</b> ()</td></tr>
-<tr class="separator:a2c2b1b967f4d1924cf15c19e3854ff2f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a40209b347e3c82bb5bfda05941304309"><td class="memItemLeft" align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#a40209b347e3c82bb5bfda05941304309">observe</a> (bool state=true)</td></tr>
+<tr class="memdesc:a40209b347e3c82bb5bfda05941304309"><td class="mdescLeft"> </td><td class="mdescRight">Enable or disable observation.  <a href="#a40209b347e3c82bb5bfda05941304309">More...</a><br/></td></tr>
+<tr class="separator:a40209b347e3c82bb5bfda05941304309"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a31abaf256f7172f010cfb2259c7787bb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a31abaf256f7172f010cfb2259c7787bb"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#a31abaf256f7172f010cfb2259c7787bb">is_observing</a> () const </td></tr>
+<tr class="memdesc:a31abaf256f7172f010cfb2259c7787bb"><td class="mdescLeft"> </td><td class="mdescRight">Returns true if observation is enabled, false otherwise. <br/></td></tr>
+<tr class="separator:a31abaf256f7172f010cfb2259c7787bb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a25bffb05efaaab36bc58590969e29745"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a25bffb05efaaab36bc58590969e29745"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#a25bffb05efaaab36bc58590969e29745">task_scheduler_observer_v3</a> ()</td></tr>
+<tr class="memdesc:a25bffb05efaaab36bc58590969e29745"><td class="mdescLeft"> </td><td class="mdescRight">Construct observer with observation disabled. <br/></td></tr>
+<tr class="separator:a25bffb05efaaab36bc58590969e29745"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af4282a27725fbe86052bb785bdd9c5d3"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#af4282a27725fbe86052bb785bdd9c5d3">on_scheduler_entry</a> (bool)</td></tr>
+<tr class="memdesc:af4282a27725fbe86052bb785bdd9c5d3"><td class="mdescLeft"> </td><td class="mdescRight">Entry notification.  <a href="#af4282a27725fbe86052bb785bdd9c5d3">More...</a><br/></td></tr>
+<tr class="separator:af4282a27725fbe86052bb785bdd9c5d3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a657e90f833568e217b807d0122fa7668"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#a657e90f833568e217b807d0122fa7668">on_scheduler_exit</a> (bool)</td></tr>
+<tr class="memdesc:a657e90f833568e217b807d0122fa7668"><td class="mdescLeft"> </td><td class="mdescRight">Exit notification.  <a href="#a657e90f833568e217b807d0122fa7668">More...</a><br/></td></tr>
+<tr class="separator:a657e90f833568e217b807d0122fa7668"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a151e475ebba39172fcc13f43bed426cc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a151e475ebba39172fcc13f43bed426cc"></a>
+virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#a151e475ebba39172fcc13f43bed426cc">~task_scheduler_observer_v3</a> ()</td></tr>
+<tr class="memdesc:a151e475ebba39172fcc13f43bed426cc"><td class="mdescLeft"> </td><td class="mdescRight">Destructor automatically switches observation off if it is enabled. <br/></td></tr>
+<tr class="separator:a151e475ebba39172fcc13f43bed426cc"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:a4efe5bdeaa3c874a36e7d95d76ad1367"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4efe5bdeaa3c874a36e7d95d76ad1367"></a>
-task & </td><td class="memItemRight" valign="bottom"><b>owner</b> ()</td></tr>
-<tr class="separator:a4efe5bdeaa3c874a36e7d95d76ad1367"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aef3561e83c11cde7299a34db1064f420"><td class="memTemplParams" colspan="2"><a class="anchor" id="aef3561e83c11cde7299a34db1064f420"></a>
-template<typename F > </td></tr>
-<tr class="memitem:aef3561e83c11cde7299a34db1064f420"><td class="memTemplItemLeft" align="right" valign="top">task_group_status </td><td class="memTemplItemRight" valign="bottom"><b>internal_run_and_wait</b> (F &f)</td></tr>
-<tr class="separator:aef3561e83c11cde7299a34db1064f420"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab57636e45b436a15c7adefb25f9df090"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab57636e45b436a15c7adefb25f9df090"></a>
-template<typename F , typename Task > </td></tr>
-<tr class="memitem:ab57636e45b436a15c7adefb25f9df090"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>internal_run</b> (F &f)</td></tr>
-<tr class="separator:ab57636e45b436a15c7adefb25f9df090"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
-Protected Attributes</h2></td></tr>
-<tr class="memitem:a60fb257f34f63428032f93e9b3b50a89"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a60fb257f34f63428032f93e9b3b50a89"></a>
-empty_task * </td><td class="memItemRight" valign="bottom"><b>my_root</b></td></tr>
-<tr class="separator:a60fb257f34f63428032f93e9b3b50a89"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afa2bb3845517c6b2f9e29a4e3b08a62d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa2bb3845517c6b2f9e29a4e3b08a62d"></a>
-<a class="el" href="a00153.html">task_group_context</a> </td><td class="memItemRight" valign="bottom"><b>my_context</b></td></tr>
-<tr class="separator:afa2bb3845517c6b2f9e29a4e3b08a62d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a897b52f8da750f35b9b2ef410eae7181"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a897b52f8da750f35b9b2ef410eae7181"></a>
+class </td><td class="memItemRight" valign="bottom"><b>observer_proxy</b></td></tr>
+<tr class="separator:a897b52f8da750f35b9b2ef410eae7181"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a232d1ae378b2c82f9788c5611429298b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a232d1ae378b2c82f9788c5611429298b"></a>
+class </td><td class="memItemRight" valign="bottom"><b>observer_list</b></td></tr>
+<tr class="separator:a232d1ae378b2c82f9788c5611429298b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad972d2c44eeed885d9df2b75e7231277"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad972d2c44eeed885d9df2b75e7231277"></a>
+class </td><td class="memItemRight" valign="bottom"><b>interface6::task_scheduler_observer</b></td></tr>
+<tr class="separator:ad972d2c44eeed885d9df2b75e7231277"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="a40209b347e3c82bb5bfda05941304309"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_METHOD tbb::internal::task_scheduler_observer_v3::observe </td>
+          <td>(</td>
+          <td class="paramtype">bool </td>
+          <td class="paramname"><em>state</em> = <code>true</code>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Enable or disable observation. </p>
+<p>For local observers the method can be used only when the current thread has the task scheduler initialized or is attached to an arena.</p>
+<p>Repeated calls with the same state are no-ops. </p>
+
+<p>Referenced by <a class="el" href="a00151.html#ad5b33790cea52c61e1fb004a8ed26365">tbb::interface6::task_scheduler_observer::observe()</a>, and <a class="el" href="a00152.html#a151e475ebba39172fcc13f43bed426cc">~task_scheduler_observer_v3()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af4282a27725fbe86052bb785bdd9c5d3"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual void tbb::internal::task_scheduler_observer_v3::on_scheduler_entry </td>
+          <td>(</td>
+          <td class="paramtype">bool </td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Entry notification. </p>
+<p>Invoked from inside observe(true) call and whenever a worker enters the arena this observer is associated with. If a thread is already in the arena when the observer is activated, the entry notification is called before it executes the first stolen task.</p>
+<p>Obsolete semantics. For global observers it is called by a thread before the first steal since observation became enabled. </p>
+
+</div>
+</div>
+<a class="anchor" id="a657e90f833568e217b807d0122fa7668"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual void tbb::internal::task_scheduler_observer_v3::on_scheduler_exit </td>
+          <td>(</td>
+          <td class="paramtype">bool </td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Exit notification. </p>
+<p>Invoked from inside observe(false) call and whenever a worker leaves the arena this observer is associated with.</p>
+<p>Obsolete semantics. For global observers it is called by a thread before the first steal since observation became enabled. </p>
+
+</div>
+</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>task_group.h</li>
+<li>task_scheduler_observer.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00152.png b/doc/html/a00152.png
index e95fec5..b87088c 100644
Binary files a/doc/html/a00152.png and b/doc/html/a00152.png differ
diff --git a/doc/html/a00153.html b/doc/html/a00153.html
index e8453e1..d2bb85b 100644
--- a/doc/html/a00153.html
+++ b/doc/html/a00153.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::task_group_context Struct Reference</title>
+<title>tbb::tbb_allocator< T > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,25 +33,125 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00153.html">task_group_context</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00153.html">tbb_allocator</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#pub-types">Public Types</a> |
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-static-methods">Static Public Member Functions</a> |
+<a href="a00305.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::task_group_context Struct Reference</div>  </div>
+<div class="title">tbb::tbb_allocator< T > Class Template Reference<div class="ingroups"><a class="el" href="a00254.html">Memory Allocation</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p><code>#include <parallel_invoke.h></code></p>
+<p>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  
+ <a href="a00153.html#details">More...</a></p>
+
+<p><code>#include <tbb_allocator.h></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00113.html">rebind</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a60463a571d5c20f7762112367261ad94"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#a60463a571d5c20f7762112367261ad94">malloc_type</a> { <b>scalable</b>, 
+<b>standard</b>
+ }</td></tr>
+<tr class="memdesc:a60463a571d5c20f7762112367261ad94"><td class="mdescLeft"> </td><td class="mdescRight">Specifies current allocator. <br/></td></tr>
+<tr class="separator:a60463a571d5c20f7762112367261ad94"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a26be966de4164e37002247c2c2266df9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a26be966de4164e37002247c2c2266df9"></a>
+typedef <br class="typebreak"/>
+internal::allocator_type< T ><br class="typebreak"/>
+::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+<tr class="separator:a26be966de4164e37002247c2c2266df9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a452a6c09408f425c9a005b5f2aad1761"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a452a6c09408f425c9a005b5f2aad1761"></a>
+typedef value_type * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+<tr class="separator:a452a6c09408f425c9a005b5f2aad1761"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a63122d559635096a2618aecd1ba6664b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63122d559635096a2618aecd1ba6664b"></a>
+typedef const value_type * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+<tr class="separator:a63122d559635096a2618aecd1ba6664b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5ec6bd5e8cdd5b7abb99f5d72760c7a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5ec6bd5e8cdd5b7abb99f5d72760c7a2"></a>
+typedef value_type & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+<tr class="separator:a5ec6bd5e8cdd5b7abb99f5d72760c7a2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a24d98ce3ab908bc4b10d21dad6622364"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a24d98ce3ab908bc4b10d21dad6622364"></a>
+typedef const value_type & </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
+<tr class="separator:a24d98ce3ab908bc4b10d21dad6622364"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a812817d50e8df15df54998caec9892eb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a812817d50e8df15df54998caec9892eb"></a>
+typedef size_t </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
+<tr class="separator:a812817d50e8df15df54998caec9892eb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acba390757f664df03a15e933e3e34941"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acba390757f664df03a15e933e3e34941"></a>
+typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
+<tr class="separator:acba390757f664df03a15e933e3e34941"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a8371538bc959f41f342012e363564aed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8371538bc959f41f342012e363564aed"></a>
+ </td><td class="memItemRight" valign="bottom"><b>tbb_allocator</b> (const <a class="el" href="a00153.html">tbb_allocator</a> &)  throw ()</td></tr>
+<tr class="separator:a8371538bc959f41f342012e363564aed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9faff9ae2c2cd3ed2ca064b562224974"><td class="memTemplParams" colspan="2"><a class="anchor" id="a9faff9ae2c2cd3ed2ca064b562224974"></a>
+template<typename U > </td></tr>
+<tr class="memitem:a9faff9ae2c2cd3ed2ca064b562224974"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>tbb_allocator</b> (const <a class="el" href="a00153.html">tbb_allocator</a>< U > &)  throw ()</td></tr>
+<tr class="separator:a9faff9ae2c2cd3ed2ca064b562224974"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac1370dbb1f06fed57273bddcae688255"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac1370dbb1f06fed57273bddcae688255"></a>
+pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (reference x) const </td></tr>
+<tr class="separator:ac1370dbb1f06fed57273bddcae688255"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afb9c91d548d4a5affe3ec1de1c1b9327"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afb9c91d548d4a5affe3ec1de1c1b9327"></a>
+const_pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (const_reference x) const </td></tr>
+<tr class="separator:afb9c91d548d4a5affe3ec1de1c1b9327"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afedd8a64eed9692083c708f419338e0c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afedd8a64eed9692083c708f419338e0c"></a>
+pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#afedd8a64eed9692083c708f419338e0c">allocate</a> (size_type n, const void *=0)</td></tr>
+<tr class="memdesc:afedd8a64eed9692083c708f419338e0c"><td class="mdescLeft"> </td><td class="mdescRight">Allocate space for n objects. <br/></td></tr>
+<tr class="separator:afedd8a64eed9692083c708f419338e0c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a28e333e0fff56dd53c20b82cfee430ab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28e333e0fff56dd53c20b82cfee430ab"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#a28e333e0fff56dd53c20b82cfee430ab">deallocate</a> (pointer p, size_type)</td></tr>
+<tr class="memdesc:a28e333e0fff56dd53c20b82cfee430ab"><td class="mdescLeft"> </td><td class="mdescRight">Free previously allocated block of memory. <br/></td></tr>
+<tr class="separator:a28e333e0fff56dd53c20b82cfee430ab"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0a2676fb8a2f931961d373b88848c93e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0a2676fb8a2f931961d373b88848c93e"></a>
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#a0a2676fb8a2f931961d373b88848c93e">max_size</a> () const   throw ()</td></tr>
+<tr class="memdesc:a0a2676fb8a2f931961d373b88848c93e"><td class="mdescLeft"> </td><td class="mdescRight">Largest value for which method allocate might succeed. <br/></td></tr>
+<tr class="separator:a0a2676fb8a2f931961d373b88848c93e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af54fa3029e33cebe5ba64a8538306fdf"><td class="memTemplParams" colspan="2"><a class="anchor" id="af54fa3029e33cebe5ba64a8538306fdf"></a>
+template<typename U , typename... Args> </td></tr>
+<tr class="memitem:af54fa3029e33cebe5ba64a8538306fdf"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00153.html#af54fa3029e33cebe5ba64a8538306fdf">construct</a> (U *p, Args &&...args)</td></tr>
+<tr class="memdesc:af54fa3029e33cebe5ba64a8538306fdf"><td class="mdescLeft"> </td><td class="mdescRight">Copy-construct value at location pointed to by p. <br/></td></tr>
+<tr class="separator:af54fa3029e33cebe5ba64a8538306fdf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aefbb273663853a665e51dcfa053d12a0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aefbb273663853a665e51dcfa053d12a0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>construct</b> (pointer p, value_type &&value)</td></tr>
+<tr class="separator:aefbb273663853a665e51dcfa053d12a0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a694e266db657afba34ecb60111b2e2d3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a694e266db657afba34ecb60111b2e2d3"></a>
+void </td><td class="memItemRight" valign="bottom"><b>construct</b> (pointer p, const value_type &value)</td></tr>
+<tr class="separator:a694e266db657afba34ecb60111b2e2d3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac7b1b393a8ff3399079328c0971c1996"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac7b1b393a8ff3399079328c0971c1996"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#ac7b1b393a8ff3399079328c0971c1996">destroy</a> (pointer p)</td></tr>
+<tr class="memdesc:ac7b1b393a8ff3399079328c0971c1996"><td class="mdescLeft"> </td><td class="mdescRight">Destroy value at location pointed to by p. <br/></td></tr>
+<tr class="separator:ac7b1b393a8ff3399079328c0971c1996"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:aa4606cff0156ec4237c1571204851bfb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4606cff0156ec4237c1571204851bfb"></a>
+static <a class="el" href="a00153.html#a60463a571d5c20f7762112367261ad94">malloc_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#aa4606cff0156ec4237c1571204851bfb">allocator_type</a> ()</td></tr>
+<tr class="memdesc:aa4606cff0156ec4237c1571204851bfb"><td class="mdescLeft"> </td><td class="mdescRight">Returns current allocator. <br/></td></tr>
+<tr class="separator:aa4606cff0156ec4237c1571204851bfb"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Dummy to avoid cluttering the bulk of the header with enormous amount of ifdefs. </p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>parallel_invoke.h</li>
+<div class="textblock"><h3>template<typename T><br/>
+class tbb::tbb_allocator< T ></h3>
+
+<p>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. </p>
+<p>The class selects the best memory allocation mechanism available from scalable_malloc and standard malloc. The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>tbb_allocator.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00154.html b/doc/html/a00154.html
index e7e95b6..19495b6 100644
--- a/doc/html/a00154.html
+++ b/doc/html/a00154.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::task_handle< F > Class Template Reference</title>
+<title>tbb::tbb_allocator< void > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,56 +33,53 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00154.html">task_handle</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00154.html">tbb_allocator< void ></a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#friends">Friends</a> |
-<a href="a00306.html">List of all members</a>  </div>
+<a href="#nested-classes">Classes</a> |
+<a href="#pub-types">Public Types</a> |
+<a href="a00307.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::task_handle< F > Class Template Reference</div>  </div>
+<div class="title">tbb::tbb_allocator< void > Class Template Reference<div class="ingroups"><a class="el" href="a00254.html">Memory Allocation</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="dynheader">
-Inheritance diagram for tbb::task_handle< F >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00154.png" usemap="#tbb::task_handle< F >_map" alt=""/>
-  <map id="tbb::task_handle< F >_map" name="tbb::task_handle< F >_map">
-</map>
- </div></div>
+
+<p>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  
+ <a href="a00154.html#details">More...</a></p>
+
+<p><code>#include <tbb_allocator.h></code></p>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a1e213e12e1c2d789c22e56901b53b1d2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e213e12e1c2d789c22e56901b53b1d2"></a>
- </td><td class="memItemRight" valign="bottom"><b>task_handle</b> (const F &f)</td></tr>
-<tr class="separator:a1e213e12e1c2d789c22e56901b53b1d2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab09a19aa92286d48cc42d3e9cd60b5d8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab09a19aa92286d48cc42d3e9cd60b5d8"></a>
-void </td><td class="memItemRight" valign="bottom"><b>operator()</b> () const </td></tr>
-<tr class="separator:ab09a19aa92286d48cc42d3e9cd60b5d8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00114.html">rebind</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:a70a59090420eb9c76bd067b3ed3f1e72"><td class="memTemplParams" colspan="2"><a class="anchor" id="a70a59090420eb9c76bd067b3ed3f1e72"></a>
-template<typename _F > </td></tr>
-<tr class="memitem:a70a59090420eb9c76bd067b3ed3f1e72"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::task_handle_task</b></td></tr>
-<tr class="separator:a70a59090420eb9c76bd067b3ed3f1e72"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abe85fe1f158cb2a40cd7203854b9460a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe85fe1f158cb2a40cd7203854b9460a"></a>
-class </td><td class="memItemRight" valign="bottom"><b>task_group</b></td></tr>
-<tr class="separator:abe85fe1f158cb2a40cd7203854b9460a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2913777f78e95f9ea09d788b12db6b62"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2913777f78e95f9ea09d788b12db6b62"></a>
-class </td><td class="memItemRight" valign="bottom"><b>structured_task_group</b></td></tr>
-<tr class="separator:a2913777f78e95f9ea09d788b12db6b62"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a8fda536620d85d53caa82c45ffa49dd8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8fda536620d85d53caa82c45ffa49dd8"></a>
+typedef void * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+<tr class="separator:a8fda536620d85d53caa82c45ffa49dd8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a401d3c91a38b09410a20fe69d4d9745d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a401d3c91a38b09410a20fe69d4d9745d"></a>
+typedef const void * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+<tr class="separator:a401d3c91a38b09410a20fe69d4d9745d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afef43ed21663982050fbae7b970e33f6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afef43ed21663982050fbae7b970e33f6"></a>
+typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+<tr class="separator:afef43ed21663982050fbae7b970e33f6"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>task_group.h</li>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><h3>template<><br/>
+class tbb::tbb_allocator< void ></h3>
+
+<p>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>tbb_allocator.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00154.png b/doc/html/a00154.png
deleted file mode 100644
index 5f640e9..0000000
Binary files a/doc/html/a00154.png and /dev/null differ
diff --git a/doc/html/a00155.html b/doc/html/a00155.html
index 2f5f141..6d41f51 100644
--- a/doc/html/a00155.html
+++ b/doc/html/a00155.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::internal::task_handle_task< F > Class Template Reference</title>
+<title>tbb::tbb_exception Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,39 +33,191 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00155.html">task_handle_task</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00155.html">tbb_exception</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00411.html">List of all members</a>  </div>
+<a href="a00318.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::internal::task_handle_task< F > Class Template Reference</div>  </div>
+<div class="title">tbb::tbb_exception Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
 </div><!--header-->
 <div class="contents">
+
+<p>Interface to be implemented by all exceptions TBB recognizes and propagates across the threads.  
+ <a href="a00155.html#details">More...</a></p>
+
+<p><code>#include <tbb_exception.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::internal::task_handle_task< F >:</div>
+Inheritance diagram for tbb::tbb_exception:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00155.png" usemap="#tbb::internal::task_handle_task< F >_map" alt=""/>
-  <map id="tbb::internal::task_handle_task< F >_map" name="tbb::internal::task_handle_task< F >_map">
+  <img src="a00155.png" usemap="#tbb::tbb_exception_map" alt=""/>
+  <map id="tbb::tbb_exception_map" name="tbb::tbb_exception_map">
+<area href="a00032.html" title="This class is used by TBB to propagate information about unhandled exceptions into the root thread..." alt="tbb::captured_exception" shape="rect" coords="0,112,248,136"/>
+<area href="a00081.html" title="Template that can be used to implement exception that transfers arbitrary ExceptionData to the root t..." alt="tbb::movable_exception< ExceptionData >" shape="rect" coords="258,112,506,136"/>
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:abcddb511967aa06d264ac6c06c4fb08b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abcddb511967aa06d264ac6c06c4fb08b"></a>
- </td><td class="memItemRight" valign="bottom"><b>task_handle_task</b> (<a class="el" href="a00154.html">task_handle</a>< F > &h)</td></tr>
-<tr class="separator:abcddb511967aa06d264ac6c06c4fb08b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4bd4ba0d501021013d1473d21b020b69"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="a00155.html">tbb_exception</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#a4bd4ba0d501021013d1473d21b020b69">move</a> ()=0  throw ()</td></tr>
+<tr class="memdesc:a4bd4ba0d501021013d1473d21b020b69"><td class="mdescLeft"> </td><td class="mdescRight">Creates and returns pointer to the deep copy of this exception object.  <a href="#a4bd4ba0d501021013d1473d21b020b69">More...</a><br/></td></tr>
+<tr class="separator:a4bd4ba0d501021013d1473d21b020b69"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad3bc09bf78c33f19a0bcdf882fdf9d41"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#ad3bc09bf78c33f19a0bcdf882fdf9d41">destroy</a> ()=0  throw ()</td></tr>
+<tr class="memdesc:ad3bc09bf78c33f19a0bcdf882fdf9d41"><td class="mdescLeft"> </td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00155.html#a4bd4ba0d501021013d1473d21b020b69" title="Creates and returns pointer to the deep copy of this exception object. ">move()</a> method.  <a href="#ad3bc09bf78c33f19a0bcdf882fdf9d41">More...</a><br/></td></tr>
+<tr class="separator:ad3bc09bf78c33f19a0bcdf882fdf9d41"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae45c08d36c7ec7ae91785da3515a8828"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#ae45c08d36c7ec7ae91785da3515a8828">throw_self</a> ()=0</td></tr>
+<tr class="memdesc:ae45c08d36c7ec7ae91785da3515a8828"><td class="mdescLeft"> </td><td class="mdescRight">Throws this exception object.  <a href="#ae45c08d36c7ec7ae91785da3515a8828">More...</a><br/></td></tr>
+<tr class="separator:ae45c08d36c7ec7ae91785da3515a8828"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a282bb7dce5f157d044d14d50cd6ff35c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a282bb7dce5f157d044d14d50cd6ff35c"></a>
+virtual const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#a282bb7dce5f157d044d14d50cd6ff35c">name</a> () const =0  throw ()</td></tr>
+<tr class="memdesc:a282bb7dce5f157d044d14d50cd6ff35c"><td class="mdescLeft"> </td><td class="mdescRight">Returns RTTI name of the originally intercepted exception. <br/></td></tr>
+<tr class="separator:a282bb7dce5f157d044d14d50cd6ff35c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa6739787c42d80943e18913cce47f42f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa6739787c42d80943e18913cce47f42f"></a>
+virtual const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#aa6739787c42d80943e18913cce47f42f">what</a> () const __TBB_override=0  throw ()</td></tr>
+<tr class="memdesc:aa6739787c42d80943e18913cce47f42f"><td class="mdescLeft"> </td><td class="mdescRight">Returns the result of originally intercepted exception's <a class="el" href="a00155.html#aa6739787c42d80943e18913cce47f42f" title="Returns the result of originally intercepted exception's what() method. ">what()</a> method. <br/></td></tr>
+<tr class="separator:aa6739787c42d80943e18913cce47f42f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6a973c37078afedf7d457ff4704bf8cd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#a6a973c37078afedf7d457ff4704bf8cd">operator delete</a> (void *p)</td></tr>
+<tr class="separator:a6a973c37078afedf7d457ff4704bf8cd"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Interface to be implemented by all exceptions TBB recognizes and propagates across the threads. </p>
+<p>If an unhandled exception of the type derived from <a class="el" href="a00155.html" title="Interface to be implemented by all exceptions TBB recognizes and propagates across the threads...">tbb::tbb_exception</a> is intercepted by the TBB scheduler in one of the worker threads, it is delivered to and re-thrown in the root thread. The root thread is the thread that has started the outermost algorithm or root task sharing the same <a class="el" href="a00147.html">task_group_context</a>  [...]
+<p>Note: when documentation mentions workers with respect to exception handling, masters are implied as well, because they are completely equivalent in this context. Consequently a root thread can be master or worker thread.</p>
+<p>NOTE: In case of nested algorithms or complex task hierarchies when the nested levels share (explicitly or by means of implicit inheritance) the task group context of the outermost level, the exception may be (re-)thrown multiple times (ultimately - in each worker on each nesting level) before reaching the root thread at the outermost level. IMPORTANT: if you intercept an exception derived from this class on a nested level, you must re-throw it in the catch block by means of the "thro [...]
+<p>TBB provides two implementations of this interface: <a class="el" href="a00032.html" title="This class is used by TBB to propagate information about unhandled exceptions into the root thread...">tbb::captured_exception</a> and template class <a class="el" href="a00081.html" title="Template that can be used to implement exception that transfers arbitrary ExceptionData to the root t...">tbb::movable_exception</a>. See their declarations for more info. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="ad3bc09bf78c33f19a0bcdf882fdf9d41"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual void tbb::tbb_exception::destroy </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+        <tr>
+          <td align="right">throw </td><td>(</td><td colspan="2"></td>
+        </tr>
+        <tr>
+          <td align="right"></td><td>)</td><td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Destroys objects created by the <a class="el" href="a00155.html#a4bd4ba0d501021013d1473d21b020b69" title="Creates and returns pointer to the deep copy of this exception object. ">move()</a> method. </p>
+<p>Frees memory and calls destructor for this exception object. Can and must be used only on objects created by the move method. </p>
+
+<p>Implemented in <a class="el" href="a00081.html#aa4be7e2bf375edcb218fb5d7ed8e279b">tbb::movable_exception< ExceptionData ></a>, and <a class="el" href="a00032.html#abfc1220a6f9da0361082a3f3ad80cdc9">tbb::captured_exception</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4bd4ba0d501021013d1473d21b020b69"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual <a class="el" href="a00155.html">tbb_exception</a>* tbb::tbb_exception::move </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+        <tr>
+          <td align="right">throw </td><td>(</td><td colspan="2"></td>
+        </tr>
+        <tr>
+          <td align="right"></td><td>)</td><td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Creates and returns pointer to the deep copy of this exception object. </p>
+<p>Move semantics is allowed. </p>
+
+<p>Implemented in <a class="el" href="a00081.html#a46eee42a3279007f48c9e8f11d074d16">tbb::movable_exception< ExceptionData ></a>, and <a class="el" href="a00032.html#a3b75205c631b51a00faf98c9e107f78a">tbb::captured_exception</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6a973c37078afedf7d457ff4704bf8cd"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::tbb_exception::operator delete </td>
+          <td>(</td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"><em>p</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Operator delete is provided only to allow using existing smart pointers with TBB exception objects obtained as the result of applying <a class="el" href="a00155.html#a4bd4ba0d501021013d1473d21b020b69" title="Creates and returns pointer to the deep copy of this exception object. ">move()</a> operation on an exception thrown out of TBB scheduler.</p>
+<p>When overriding method <a class="el" href="a00155.html#a4bd4ba0d501021013d1473d21b020b69" title="Creates and returns pointer to the deep copy of this exception object. ">move()</a> make sure to override operator delete as well if memory is allocated not by TBB's scalable allocator. </p>
+
+</div>
+</div>
+<a class="anchor" id="ae45c08d36c7ec7ae91785da3515a8828"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual void tbb::tbb_exception::throw_self </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Throws this exception object. </p>
+<p>Make sure that if you have several levels of derivation from this interface you implement or override this method on the most derived level. The implementation is as simple as "throw *this;". Failure to do this will result in exception of a base class type being thrown. </p>
+
+<p>Implemented in <a class="el" href="a00081.html#a0e9ac8a4468eb0ff3b2bb246b806a10e">tbb::movable_exception< ExceptionData ></a>, and <a class="el" href="a00032.html#a6df0d3a1943ca6f84a9a9aca25e9633d">tbb::captured_exception</a>.</p>
+
+</div>
+</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>task_group.h</li>
+<li>tbb_exception.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00155.png b/doc/html/a00155.png
index 229263c..a067095 100644
Binary files a/doc/html/a00155.png and b/doc/html/a00155.png differ
diff --git a/doc/html/a00156.html b/doc/html/a00156.html
index 082d0f4..aa7389c 100644
--- a/doc/html/a00156.html
+++ b/doc/html/a00156.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::task_scheduler_init Class Reference</title>
+<title>tbb::internal::tbb_exception_ptr Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,180 +33,82 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00156.html">task_scheduler_init</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00156.html">tbb_exception_ptr</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
 <a href="#pub-static-methods">Static Public Member Functions</a> |
-<a href="#pub-attribs">Public Attributes</a> |
-<a href="#pub-static-attribs">Static Public Attributes</a> |
-<a href="a00309.html">List of all members</a>  </div>
+<a href="a00400.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::task_scheduler_init Class Reference<div class="ingroups"><a class="el" href="a00260.html">Task Scheduling</a></div></div>  </div>
+<div class="title">tbb::internal::tbb_exception_ptr Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>Class delimiting the scope of task scheduler activity.  
+<p>Exception container that preserves the exact copy of the original exception.  
  <a href="a00156.html#details">More...</a></p>
 
-<p><code>#include <task_scheduler_init.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::task_scheduler_init:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00156.png" usemap="#tbb::task_scheduler_init_map" alt=""/>
-  <map id="tbb::task_scheduler_init_map" name="tbb::task_scheduler_init_map">
-</map>
- </div></div>
+<p><code>#include <tbb_exception.h></code></p>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a485028b867bffef5829209330e79e64c"><td class="memItemLeft" align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#a485028b867bffef5829209330e79e64c">initialize</a> (int number_of_threads=<a class="el" href="a00156.html#a945886f5ef48300a8ebff2d077c166b1">automatic</a>)</td></tr>
-<tr class="memdesc:a485028b867bffef5829209330e79e64c"><td class="mdescLeft"> </td><td class="mdescRight">Ensure that scheduler exists for this thread.  <a href="#a485028b867bffef5829209330e79e64c">More...</a><br/></td></tr>
-<tr class="separator:a485028b867bffef5829209330e79e64c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0f5294f74b123a646a1762c68d11e39a"><td class="memItemLeft" align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#a0f5294f74b123a646a1762c68d11e39a">initialize</a> (int number_of_threads, stack_size_type <a class="el" href="a00156.html#a8310e807e1199d0f23b3a57aeb4fde51">thread_stack_size</a>)</td></tr>
-<tr class="memdesc:a0f5294f74b123a646a1762c68d11e39a"><td class="mdescLeft"> </td><td class="mdescRight">The overloaded method with stack size parameter.  <a href="#a0f5294f74b123a646a1762c68d11e39a">More...</a><br/></td></tr>
-<tr class="separator:a0f5294f74b123a646a1762c68d11e39a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a15d5dca7f79c5769bb96f674e4da0c04"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15d5dca7f79c5769bb96f674e4da0c04"></a>
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#a15d5dca7f79c5769bb96f674e4da0c04">terminate</a> ()</td></tr>
-<tr class="memdesc:a15d5dca7f79c5769bb96f674e4da0c04"><td class="mdescLeft"> </td><td class="mdescRight">Inverse of method initialize. <br/></td></tr>
-<tr class="separator:a15d5dca7f79c5769bb96f674e4da0c04"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa772e5a1bd18b171d335f41b58acd2b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa772e5a1bd18b171d335f41b58acd2b9"></a>
- </td><td class="memItemRight" valign="bottom"><b>if</b> (wait_workers_in_terminate) my_scheduler</td></tr>
-<tr class="separator:aa772e5a1bd18b171d335f41b58acd2b9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7d748f4a1f99884f081919feb3bca275"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7d748f4a1f99884f081919feb3bca275"></a>
- </td><td class="memItemRight" valign="bottom"><b>initialize</b> (number_of_threads, <a class="el" href="a00156.html#a8310e807e1199d0f23b3a57aeb4fde51">thread_stack_size</a>)</td></tr>
-<tr class="separator:a7d748f4a1f99884f081919feb3bca275"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a20b121334ec39c1d91bd4fe9a51892b0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a20b121334ec39c1d91bd4fe9a51892b0"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#a20b121334ec39c1d91bd4fe9a51892b0">~task_scheduler_init</a> ()</td></tr>
-<tr class="memdesc:a20b121334ec39c1d91bd4fe9a51892b0"><td class="mdescLeft"> </td><td class="mdescRight">Destroy scheduler for this thread if thread has no other live task_scheduler_inits. <br/></td></tr>
-<tr class="separator:a20b121334ec39c1d91bd4fe9a51892b0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aed5505d7fed9d5493676aa15c176512c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed5505d7fed9d5493676aa15c176512c"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#aed5505d7fed9d5493676aa15c176512c">is_active</a> () const </td></tr>
-<tr class="memdesc:aed5505d7fed9d5493676aa15c176512c"><td class="mdescLeft"> </td><td class="mdescRight">Returns true if scheduler is active (initialized); false otherwise. <br/></td></tr>
-<tr class="separator:aed5505d7fed9d5493676aa15c176512c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a38d3ca480e2758a67bcd7427b156daae"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#a38d3ca480e2758a67bcd7427b156daae">destroy</a> ()  throw ()</td></tr>
+<tr class="memdesc:a38d3ca480e2758a67bcd7427b156daae"><td class="mdescLeft"> </td><td class="mdescRight">Destroys this objects.  <a href="#a38d3ca480e2758a67bcd7427b156daae">More...</a><br/></td></tr>
+<tr class="separator:a38d3ca480e2758a67bcd7427b156daae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1713aa9a6a3850049d34358397a8ed81"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1713aa9a6a3850049d34358397a8ed81"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#a1713aa9a6a3850049d34358397a8ed81">throw_self</a> ()</td></tr>
+<tr class="memdesc:a1713aa9a6a3850049d34358397a8ed81"><td class="mdescLeft"> </td><td class="mdescRight">Throws the contained exception . <br/></td></tr>
+<tr class="separator:a1713aa9a6a3850049d34358397a8ed81"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
 Static Public Member Functions</h2></td></tr>
-<tr class="memitem:aa0c0d46ec09bedc1ee876aa8aa87c3d1"><td class="memItemLeft" align="right" valign="top">static int __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#aa0c0d46ec09bedc1ee876aa8aa87c3d1">default_num_threads</a> ()</td></tr>
-<tr class="memdesc:aa0c0d46ec09bedc1ee876aa8aa87c3d1"><td class="mdescLeft"> </td><td class="mdescRight">Returns the number of threads TBB scheduler would create if initialized by default.  <a href="#aa0c0d46ec09bedc1ee876aa8aa87c3d1">More...</a><br/></td></tr>
-<tr class="separator:aa0c0d46ec09bedc1ee876aa8aa87c3d1"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:a8310e807e1199d0f23b3a57aeb4fde51"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8310e807e1199d0f23b3a57aeb4fde51"></a>
-<a class="el" href="a00156.html">task_scheduler_init</a>(int <br class="typebreak"/>
-number_of_threads=<a class="el" href="a00156.html#a945886f5ef48300a8ebff2d077c166b1">automatic</a>, <br class="typebreak"/>
-stack_size_type <br class="typebreak"/>
-thread_stack_size=0, bool <br class="typebreak"/>
-wait_workers_in_terminate=false) </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#a8310e807e1199d0f23b3a57aeb4fde51">thread_stack_size</a> = TBB_USE_CAPTURED_EXCEPTION ? propagation_mode_captured : propagation_mode_exact</td></tr>
-<tr class="memdesc:a8310e807e1199d0f23b3a57aeb4fde51"><td class="mdescLeft"> </td><td class="mdescRight">Shorthand for default constructor followed by call to initialize(number_of_threads). <br/></td></tr>
-<tr class="separator:a8310e807e1199d0f23b3a57aeb4fde51"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr class="memitem:a945886f5ef48300a8ebff2d077c166b1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a945886f5ef48300a8ebff2d077c166b1"></a>
-static const int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#a945886f5ef48300a8ebff2d077c166b1">automatic</a> = -1</td></tr>
-<tr class="memdesc:a945886f5ef48300a8ebff2d077c166b1"><td class="mdescLeft"> </td><td class="mdescRight">Typedef for number of threads that is automatic. <br/></td></tr>
-<tr class="separator:a945886f5ef48300a8ebff2d077c166b1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af0e49ff2f59a4e53c9c07897b57f084d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af0e49ff2f59a4e53c9c07897b57f084d"></a>
-static const int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#af0e49ff2f59a4e53c9c07897b57f084d">deferred</a> = -2</td></tr>
-<tr class="memdesc:af0e49ff2f59a4e53c9c07897b57f084d"><td class="mdescLeft"> </td><td class="mdescRight">Argument to <a class="el" href="a00156.html#a485028b867bffef5829209330e79e64c" title="Ensure that scheduler exists for this thread. ">initialize()</a> or constructor that causes initialization to be deferred. <br/></td></tr>
-<tr class="separator:af0e49ff2f59a4e53c9c07897b57f084d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a83d4cb04d89ed11b5e030fe4db2d5e5f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a83d4cb04d89ed11b5e030fe4db2d5e5f"></a>
+static <a class="el" href="a00156.html">tbb_exception_ptr</a> * </td><td class="memItemRight" valign="bottom"><b>allocate</b> ()</td></tr>
+<tr class="separator:a83d4cb04d89ed11b5e030fe4db2d5e5f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae54ded5f55ad39805e6cb967fc710346"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae54ded5f55ad39805e6cb967fc710346"></a>
+static <a class="el" href="a00156.html">tbb_exception_ptr</a> * </td><td class="memItemRight" valign="bottom"><b>allocate</b> (const <a class="el" href="a00155.html">tbb_exception</a> &tag)</td></tr>
+<tr class="separator:ae54ded5f55ad39805e6cb967fc710346"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abfbea91401d2594deb04ea331734171c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abfbea91401d2594deb04ea331734171c"></a>
+static <a class="el" href="a00156.html">tbb_exception_ptr</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#abfbea91401d2594deb04ea331734171c">allocate</a> (<a class="el" href="a00032.html">captured_exception</a> &src)</td></tr>
+<tr class="memdesc:abfbea91401d2594deb04ea331734171c"><td class="mdescLeft"> </td><td class="mdescRight">This overload uses move semantics (i.e. it empties src) <br/></td></tr>
+<tr class="separator:abfbea91401d2594deb04ea331734171c"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Class delimiting the scope of task scheduler activity. </p>
-<p>A thread can construct a <a class="el" href="a00156.html" title="Class delimiting the scope of task scheduler activity. ">task_scheduler_init</a> object and keep it alive while it uses TBB's tasking subsystem (including parallel algorithms).</p>
-<p>This class allows to customize properties of the TBB task pool to some extent. For example it can limit concurrency level of parallel work initiated by the given thread. It also can be used to specify stack size of the TBB worker threads, though this setting is not effective if the thread pool has already been created.</p>
-<p>If a parallel construct is used without <a class="el" href="a00156.html" title="Class delimiting the scope of task scheduler activity. ">task_scheduler_init</a> object previously created, the scheduler will be initialized automatically with default settings, and will persist until this thread exits. Default concurrency level is defined as described in <a class="el" href="a00156.html#a485028b867bffef5829209330e79e64c" title="Ensure that scheduler exists for this thread. ">task_schedule [...]
+<div class="textblock"><p>Exception container that preserves the exact copy of the original exception. </p>
+<p>This class can be used only when the appropriate runtime support (mandated by C++0x) is present </p>
 </div><h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="aa0c0d46ec09bedc1ee876aa8aa87c3d1"></a>
+<a class="anchor" id="a38d3ca480e2758a67bcd7427b156daae"></a>
 <div class="memitem">
 <div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">static int __TBB_EXPORTED_FUNC tbb::task_scheduler_init::default_num_threads </td>
+          <td class="memname">void tbb::internal::tbb_exception_ptr::destroy </td>
           <td>(</td>
           <td class="paramname">)</td><td></td>
           <td></td>
         </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Returns the number of threads TBB scheduler would create if initialized by default. </p>
-<p>Result returned by this method does not depend on whether the scheduler has already been initialized.</p>
-<p>Because tbb 2.0 does not support blocking tasks yet, you may use this method to boost the number of threads in the tbb's internal pool, if your tasks are doing I/O operations. The optimal number of additional threads depends on how much time your tasks spend in the blocked state.</p>
-<p>Before TBB 3.0 U4 this method returned the number of logical CPU in the system. Currently on Windows, Linux and FreeBSD it returns the number of logical CPUs available to the current process in accordance with its affinity mask.</p>
-<p>NOTE: The return value of this method never changes after its first invocation. This means that changes in the process affinity mask that took place after this method was first invoked will not affect the number of worker threads in the TBB worker threads pool. </p>
-
-</div>
-</div>
-<a class="anchor" id="a485028b867bffef5829209330e79e64c"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_scheduler_init::initialize </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>number_of_threads</em> = <code><a class="el" href="a00156.html#a945886f5ef48300a8ebff2d077c166b1">automatic</a></code>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Ensure that scheduler exists for this thread. </p>
-<p>A value of -1 lets TBB decide on the number of threads, which is usually maximal hardware concurrency for this process, that is the number of logical CPUs on the machine (possibly limited by the processor affinity mask of this process (Windows) or of this thread (Linux, FreeBSD). It is preferable option for production code because it helps to avoid nasty surprises when several TBB based components run side-by-side or in a nested fashion inside the same process.</p>
-<p>The number_of_threads is ignored if any other task_scheduler_inits currently exist. A thread may construct multiple task_scheduler_inits. Doing so does no harm because the underlying scheduler is reference counted. </p>
-
-</div>
-</div>
-<a class="anchor" id="a0f5294f74b123a646a1762c68d11e39a"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
         <tr>
-          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_scheduler_init::initialize </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>number_of_threads</em>, </td>
+          <td align="right">throw </td><td>(</td><td colspan="2"></td>
         </tr>
         <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">stack_size_type </td>
-          <td class="paramname"><em>thread_stack_size</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
+          <td align="right"></td><td>)</td><td></td><td></td>
         </tr>
       </table>
 </div><div class="memdoc">
 
-<p>The overloaded method with stack size parameter. </p>
-<p>Overloading is necessary to preserve ABI compatibility </p>
+<p>Destroys this objects. </p>
+<p>Note that objects of this type can be created only by the allocate() method. </p>
 
 </div>
 </div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>task_scheduler_init.h</li>
+<li>tbb_exception.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00156.png b/doc/html/a00156.png
deleted file mode 100644
index 58550fd..0000000
Binary files a/doc/html/a00156.png and /dev/null differ
diff --git a/doc/html/a00157.html b/doc/html/a00157.html
index 06e7dbe..ee04878 100644
--- a/doc/html/a00157.html
+++ b/doc/html/a00157.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface6::task_scheduler_observer Class Reference</title>
+<title>tbb::internal::tbb_thread_v3 Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,171 +33,117 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00157.html">task_scheduler_observer</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00157.html">tbb_thread_v3</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#nested-classes">Classes</a> |
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-static-methods">Static Public Member Functions</a> |
+<a href="#pub-attribs">Public Attributes</a> |
 <a href="#friends">Friends</a> |
-<a href="a00403.html">List of all members</a>  </div>
+<a href="a00405.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::interface6::task_scheduler_observer Class Reference</div>  </div>
+<div class="title">tbb::internal::tbb_thread_v3 Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="dynheader">
-Inheritance diagram for tbb::interface6::task_scheduler_observer:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00157.png" usemap="#tbb::interface6::task_scheduler_observer_map" alt=""/>
-  <map id="tbb::interface6::task_scheduler_observer_map" name="tbb::interface6::task_scheduler_observer_map">
-<area href="a00158.html" alt="tbb::internal::task_scheduler_observer_v3" shape="rect" coords="0,0,247,24"/>
-</map>
- </div></div>
+
+<p>Versioned thread class.  
+ <a href="a00157.html#details">More...</a></p>
+
+<p><code>#include <tbb_thread.h></code></p>
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00070.html">id</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:aa9b7bf186b995b784ca8ff88e384fca8"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom">{ <b>keep_awake</b> = false, 
-<b>allow_sleep</b> = true
- }</td></tr>
-<tr class="memdesc:aa9b7bf186b995b784ca8ff88e384fca8"><td class="mdescLeft"> </td><td class="mdescRight">Return commands for <a class="el" href="a00157.html#a2390325945912ee7ce58cd9700664ea4" title="The callback can be invoked by a worker thread before it goes to sleep. ">may_sleep()</a> <br/></td></tr>
-<tr class="separator:aa9b7bf186b995b784ca8ff88e384fca8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf81b6411caec392fc62fdfbf72560ac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf81b6411caec392fc62fdfbf72560ac"></a>
+typedef HANDLE </td><td class="memItemRight" valign="bottom"><b>native_handle_type</b></td></tr>
+<tr class="separator:acf81b6411caec392fc62fdfbf72560ac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a30e64e2a6bef43e2fd847e6c60a31207"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a30e64e2a6bef43e2fd847e6c60a31207"></a>
+typedef pthread_t </td><td class="memItemRight" valign="bottom"><b>native_handle_type</b></td></tr>
+<tr class="separator:a30e64e2a6bef43e2fd847e6c60a31207"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a89025b1e1d42e97d6fe114c0c331f730"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#a89025b1e1d42e97d6fe114c0c331f730">task_scheduler_observer</a> (bool local=false)</td></tr>
-<tr class="memdesc:a89025b1e1d42e97d6fe114c0c331f730"><td class="mdescLeft"> </td><td class="mdescRight">Construct local or global observer in inactive state (observation disabled).  <a href="#a89025b1e1d42e97d6fe114c0c331f730">More...</a><br/></td></tr>
-<tr class="separator:a89025b1e1d42e97d6fe114c0c331f730"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a36e7e0c466320029d5a3e50a573e04c1"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#a36e7e0c466320029d5a3e50a573e04c1">task_scheduler_observer</a> (task_arena &a)</td></tr>
-<tr class="memdesc:a36e7e0c466320029d5a3e50a573e04c1"><td class="mdescLeft"> </td><td class="mdescRight">Construct local observer for a given arena in inactive state (observation disabled).  <a href="#a36e7e0c466320029d5a3e50a573e04c1">More...</a><br/></td></tr>
-<tr class="separator:a36e7e0c466320029d5a3e50a573e04c1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9ef3f1853439b46e5a9db7fd1c0f9116"><td class="memItemLeft" align="right" valign="top">virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#a9ef3f1853439b46e5a9db7fd1c0f9116">~task_scheduler_observer</a> ()</td></tr>
-<tr class="separator:a9ef3f1853439b46e5a9db7fd1c0f9116"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad5b33790cea52c61e1fb004a8ed26365"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ad5b33790cea52c61e1fb004a8ed26365">observe</a> (bool state=true)</td></tr>
-<tr class="memdesc:ad5b33790cea52c61e1fb004a8ed26365"><td class="mdescLeft"> </td><td class="mdescRight">Enable or disable observation.  <a href="#ad5b33790cea52c61e1fb004a8ed26365">More...</a><br/></td></tr>
-<tr class="separator:ad5b33790cea52c61e1fb004a8ed26365"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2390325945912ee7ce58cd9700664ea4"><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#a2390325945912ee7ce58cd9700664ea4">may_sleep</a> ()</td></tr>
-<tr class="memdesc:a2390325945912ee7ce58cd9700664ea4"><td class="mdescLeft"> </td><td class="mdescRight">The callback can be invoked by a worker thread before it goes to sleep.  <a href="#a2390325945912ee7ce58cd9700664ea4">More...</a><br/></td></tr>
-<tr class="separator:a2390325945912ee7ce58cd9700664ea4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00158"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00158')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00158.html">tbb::internal::task_scheduler_observer_v3</a></td></tr>
-<tr class="memitem:a40209b347e3c82bb5bfda05941304309 inherit pub_methods_a00158"><td class="memItemLeft" align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#a40209b347e3c82bb5bfda05941304309">observe</a> (bool state=true)</td></tr>
-<tr class="memdesc:a40209b347e3c82bb5bfda05941304309 inherit pub_methods_a00158"><td class="mdescLeft"> </td><td class="mdescRight">Enable or disable observation.  <a href="#a40209b347e3c82bb5bfda05941304309">More...</a><br/></td></tr>
-<tr class="separator:a40209b347e3c82bb5bfda05941304309 inherit pub_methods_a00158"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a31abaf256f7172f010cfb2259c7787bb inherit pub_methods_a00158"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a31abaf256f7172f010cfb2259c7787bb"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#a31abaf256f7172f010cfb2259c7787bb">is_observing</a> () const </td></tr>
-<tr class="memdesc:a31abaf256f7172f010cfb2259c7787bb inherit pub_methods_a00158"><td class="mdescLeft"> </td><td class="mdescRight">Returns true if observation is enabled, false otherwise. <br/></td></tr>
-<tr class="separator:a31abaf256f7172f010cfb2259c7787bb inherit pub_methods_a00158"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a25bffb05efaaab36bc58590969e29745 inherit pub_methods_a00158"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a25bffb05efaaab36bc58590969e29745"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#a25bffb05efaaab36bc58590969e29745">task_scheduler_observer_v3</a> ()</td></tr>
-<tr class="memdesc:a25bffb05efaaab36bc58590969e29745 inherit pub_methods_a00158"><td class="mdescLeft"> </td><td class="mdescRight">Construct observer with observation disabled. <br/></td></tr>
-<tr class="separator:a25bffb05efaaab36bc58590969e29745 inherit pub_methods_a00158"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af4282a27725fbe86052bb785bdd9c5d3 inherit pub_methods_a00158"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#af4282a27725fbe86052bb785bdd9c5d3">on_scheduler_entry</a> (bool)</td></tr>
-<tr class="memdesc:af4282a27725fbe86052bb785bdd9c5d3 inherit pub_methods_a00158"><td class="mdescLeft"> </td><td class="mdescRight">Entry notification.  <a href="#af4282a27725fbe86052bb785bdd9c5d3">More...</a><br/></td></tr>
-<tr class="separator:af4282a27725fbe86052bb785bdd9c5d3 inherit pub_methods_a00158"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a657e90f833568e217b807d0122fa7668 inherit pub_methods_a00158"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#a657e90f833568e217b807d0122fa7668">on_scheduler_exit</a> (bool)</td></tr>
-<tr class="memdesc:a657e90f833568e217b807d0122fa7668 inherit pub_methods_a00158"><td class="mdescLeft"> </td><td class="mdescRight">Exit notification.  <a href="#a657e90f833568e217b807d0122fa7668">More...</a><br/></td></tr>
-<tr class="separator:a657e90f833568e217b807d0122fa7668 inherit pub_methods_a00158"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a151e475ebba39172fcc13f43bed426cc inherit pub_methods_a00158"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a151e475ebba39172fcc13f43bed426cc"></a>
-virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#a151e475ebba39172fcc13f43bed426cc">~task_scheduler_observer_v3</a> ()</td></tr>
-<tr class="memdesc:a151e475ebba39172fcc13f43bed426cc inherit pub_methods_a00158"><td class="mdescLeft"> </td><td class="mdescRight">Destructor automatically switches observation off if it is enabled. <br/></td></tr>
-<tr class="separator:a151e475ebba39172fcc13f43bed426cc inherit pub_methods_a00158"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad9acae61c47fad5cf88869061ead3022"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad9acae61c47fad5cf88869061ead3022"></a>
+ </td><td class="memItemRight" valign="bottom"><b>tbb_thread_v3</b> (const <a class="el" href="a00157.html">tbb_thread_v3</a> &)</td></tr>
+<tr class="separator:ad9acae61c47fad5cf88869061ead3022"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a15b84e454eb0179e010b90a88baa0933"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15b84e454eb0179e010b90a88baa0933"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#a15b84e454eb0179e010b90a88baa0933">tbb_thread_v3</a> () __TBB_NOEXCEPT(true)</td></tr>
+<tr class="memdesc:a15b84e454eb0179e010b90a88baa0933"><td class="mdescLeft"> </td><td class="mdescRight">Constructs a thread object that does not represent a thread of execution. <br/></td></tr>
+<tr class="separator:a15b84e454eb0179e010b90a88baa0933"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9c5587ab76ca1aa98bae7fe69a459466"><td class="memTemplParams" colspan="2"><a class="anchor" id="a9c5587ab76ca1aa98bae7fe69a459466"></a>
+template<class F > </td></tr>
+<tr class="memitem:a9c5587ab76ca1aa98bae7fe69a459466"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00157.html#a9c5587ab76ca1aa98bae7fe69a459466">tbb_thread_v3</a> (F f)</td></tr>
+<tr class="memdesc:a9c5587ab76ca1aa98bae7fe69a459466"><td class="mdescLeft"> </td><td class="mdescRight">Constructs an object and executes f() in a new thread. <br/></td></tr>
+<tr class="separator:a9c5587ab76ca1aa98bae7fe69a459466"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a672a5367e687635c869926bf8a986296"><td class="memTemplParams" colspan="2"><a class="anchor" id="a672a5367e687635c869926bf8a986296"></a>
+template<class F , class X > </td></tr>
+<tr class="memitem:a672a5367e687635c869926bf8a986296"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00157.html#a672a5367e687635c869926bf8a986296">tbb_thread_v3</a> (F f, X x)</td></tr>
+<tr class="memdesc:a672a5367e687635c869926bf8a986296"><td class="mdescLeft"> </td><td class="mdescRight">Constructs an object and executes f(x) in a new thread. <br/></td></tr>
+<tr class="separator:a672a5367e687635c869926bf8a986296"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac3f57678f2a289084a6d275f8f8fbc62"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac3f57678f2a289084a6d275f8f8fbc62"></a>
+template<class F , class X , class Y > </td></tr>
+<tr class="memitem:ac3f57678f2a289084a6d275f8f8fbc62"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00157.html#ac3f57678f2a289084a6d275f8f8fbc62">tbb_thread_v3</a> (F f, X x, Y y)</td></tr>
+<tr class="memdesc:ac3f57678f2a289084a6d275f8f8fbc62"><td class="mdescLeft"> </td><td class="mdescRight">Constructs an object and executes f(x,y) in a new thread. <br/></td></tr>
+<tr class="separator:ac3f57678f2a289084a6d275f8f8fbc62"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa4f68564c30ee6f59bab29c3b3216623"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4f68564c30ee6f59bab29c3b3216623"></a>
+<a class="el" href="a00157.html">tbb_thread_v3</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="a00157.html">tbb_thread_v3</a> &x)</td></tr>
+<tr class="separator:aa4f68564c30ee6f59bab29c3b3216623"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab2e10af48f3f2482e9e7236f2e05714c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab2e10af48f3f2482e9e7236f2e05714c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>swap</b> (<a class="el" href="a00157.html">tbb_thread_v3</a> &t) __TBB_NOEXCEPT(true)</td></tr>
+<tr class="separator:ab2e10af48f3f2482e9e7236f2e05714c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4ddee0e2030f8fa947fd93f403178104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ddee0e2030f8fa947fd93f403178104"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>joinable</b> () const __TBB_NOEXCEPT(true)</td></tr>
+<tr class="separator:a4ddee0e2030f8fa947fd93f403178104"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a044c8727c51e921b0cc43a6b057eb559"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a044c8727c51e921b0cc43a6b057eb559"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#a044c8727c51e921b0cc43a6b057eb559">join</a> ()</td></tr>
+<tr class="memdesc:a044c8727c51e921b0cc43a6b057eb559"><td class="mdescLeft"> </td><td class="mdescRight">The completion of the thread represented by *this happens before <a class="el" href="a00157.html#a044c8727c51e921b0cc43a6b057eb559" title="The completion of the thread represented by *this happens before join() returns. ">join()</a> returns. <br/></td></tr>
+<tr class="separator:a044c8727c51e921b0cc43a6b057eb559"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a80a31a41708872af5557b907f129b19b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a80a31a41708872af5557b907f129b19b"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#a80a31a41708872af5557b907f129b19b">detach</a> ()</td></tr>
+<tr class="memdesc:a80a31a41708872af5557b907f129b19b"><td class="mdescLeft"> </td><td class="mdescRight">When <a class="el" href="a00157.html#a80a31a41708872af5557b907f129b19b" title="When detach() returns, *this no longer represents the possibly continuing thread of execution...">detach()</a> returns, *this no longer represents the possibly continuing thread of execution. <br/></td></tr>
+<tr class="separator:a80a31a41708872af5557b907f129b19b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae98915bfeccaa90d6f13add0ee1ab33a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae98915bfeccaa90d6f13add0ee1ab33a"></a>
+<a class="el" href="a00070.html">id</a> </td><td class="memItemRight" valign="bottom"><b>get_id</b> () const __TBB_NOEXCEPT(true)</td></tr>
+<tr class="separator:ae98915bfeccaa90d6f13add0ee1ab33a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a98e89e22e11fb6cab05f0f7839c79310"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a98e89e22e11fb6cab05f0f7839c79310"></a>
+native_handle_type </td><td class="memItemRight" valign="bottom"><b>native_handle</b> ()</td></tr>
+<tr class="separator:a98e89e22e11fb6cab05f0f7839c79310"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:a23d7a420709b2e2b29b42dea897bd8bc"><td class="memItemLeft" align="right" valign="top">static unsigned __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#a23d7a420709b2e2b29b42dea897bd8bc">hardware_concurrency</a> () __TBB_NOEXCEPT(true)</td></tr>
+<tr class="memdesc:a23d7a420709b2e2b29b42dea897bd8bc"><td class="mdescLeft"> </td><td class="mdescRight">The number of hardware thread contexts.  <a href="#a23d7a420709b2e2b29b42dea897bd8bc">More...</a><br/></td></tr>
+<tr class="separator:a23d7a420709b2e2b29b42dea897bd8bc"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a7646cb0b0cc070a6dd962afbaaec3ec8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7646cb0b0cc070a6dd962afbaaec3ec8"></a>
+<a class="el" href="a00157.html">tbb_thread_v3</a>(<a class="el" href="a00157.html">tbb_thread_v3</a> <br class="typebreak"/>
+&&x) __TBB_NOEXCEPT(true) <br class="typebreak"/>
+<a class="el" href="a00157.html">tbb_thread_v3</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="a00157.html">tbb_thread_v3</a> &&x) __TBB_NOEXCEPT(true)</td></tr>
+<tr class="separator:a7646cb0b0cc070a6dd962afbaaec3ec8"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
 Friends</h2></td></tr>
-<tr class="memitem:a567691ababd2dee2c44d1d6d4b9b093a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a567691ababd2dee2c44d1d6d4b9b093a"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::task_scheduler_observer_v3</b></td></tr>
-<tr class="separator:a567691ababd2dee2c44d1d6d4b9b093a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae3fb165cd890fab10c1d09823dcb0ac9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae3fb165cd890fab10c1d09823dcb0ac9"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::observer_proxy</b></td></tr>
-<tr class="separator:ae3fb165cd890fab10c1d09823dcb0ac9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5d0d193bf27a1606466663c68e05e1b3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5d0d193bf27a1606466663c68e05e1b3"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::observer_list</b></td></tr>
-<tr class="separator:a5d0d193bf27a1606466663c68e05e1b3"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<h2 class="groupheader">Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a89025b1e1d42e97d6fe114c0c331f730"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">tbb::interface6::task_scheduler_observer::task_scheduler_observer </td>
-          <td>(</td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>local</em> = <code>false</code>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Construct local or global observer in inactive state (observation disabled). </p>
-<p>For a local observer entry/exit notifications are invoked whenever a worker thread joins/leaves the arena of the observer's owner thread. If a thread is already in the arena when the observer is activated, the entry notification is called before it executes the first stolen task. TODO: Obsolete. Global observer semantics is obsolete as it violates master thread isolation guarantees and is not composable. Thus the current default behavior of the constructor is obsolete too and will be  [...]
-
-</div>
-</div>
-<a class="anchor" id="a36e7e0c466320029d5a3e50a573e04c1"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">tbb::interface6::task_scheduler_observer::task_scheduler_observer </td>
-          <td>(</td>
-          <td class="paramtype">task_arena & </td>
-          <td class="paramname"><em>a</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Construct local observer for a given arena in inactive state (observation disabled). </p>
-<p>entry/exit notifications are invoked whenever a thread joins/leaves arena. If a thread is already in the arena when the observer is activated, the entry notification is called before it executes the first stolen task. </p>
-
-</div>
-</div>
-<a class="anchor" id="a9ef3f1853439b46e5a9db7fd1c0f9116"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual tbb::interface6::task_scheduler_observer::~task_scheduler_observer </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
+<tr class="memitem:a9b8a2643aa337c0ec7f68cc2797a10ba"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9b8a2643aa337c0ec7f68cc2797a10ba"></a>
+void __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><b>move_v3</b> (<a class="el" href="a00157.html">tbb_thread_v3</a> &t1, <a class="el" href="a00157.html">tbb_thread_v3</a> &t2)</td></tr>
+<tr class="separator:a9b8a2643aa337c0ec7f68cc2797a10ba"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a190e47ee761e8647e79cdd3cccff618c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a190e47ee761e8647e79cdd3cccff618c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>tbb::swap</b> (<a class="el" href="a00157.html">tbb_thread_v3</a> &t1, <a class="el" href="a00157.html">tbb_thread_v3</a> &t2) __TBB_NOEXCEPT(true)</td></tr>
+<tr class="separator:a190e47ee761e8647e79cdd3cccff618c"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-</div><div class="memdoc">
-<p>Destructor protects instance of the observer from concurrent notification. It is recommended to disable observation before destructor of a derived class starts, otherwise it can lead to concurrent notification callback on partly destroyed object </p>
-
-<p>References <a class="el" href="a00157.html#ad5b33790cea52c61e1fb004a8ed26365">observe()</a>.</p>
-
-</div>
-</div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="a2390325945912ee7ce58cd9700664ea4"></a>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Versioned thread class. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="a23d7a420709b2e2b29b42dea897bd8bc"></a>
 <div class="memitem">
 <div class="memproto">
 <table class="mlabels">
@@ -205,7 +151,7 @@ class </td><td class="memItemRight" valign="bottom"><b>internal::observer_l
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">virtual bool tbb::interface6::task_scheduler_observer::may_sleep </td>
+          <td class="memname">static unsigned __TBB_EXPORTED_FUNC tbb::internal::tbb_thread_v3::hardware_concurrency </td>
           <td>(</td>
           <td class="paramname">)</td><td></td>
           <td></td>
@@ -213,54 +159,24 @@ class </td><td class="memItemRight" valign="bottom"><b>internal::observer_l
       </table>
   </td>
   <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
   </tr>
 </table>
 </div><div class="memdoc">
 
-<p>The callback can be invoked by a worker thread before it goes to sleep. </p>
-<p>If it returns false ('keep_awake'), the thread will keep spinning and looking for work. It will not be called for master threads. </p>
-
-</div>
-</div>
-<a class="anchor" id="ad5b33790cea52c61e1fb004a8ed26365"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::interface6::task_scheduler_observer::observe </td>
-          <td>(</td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>state</em> = <code>true</code>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Enable or disable observation. </p>
-<p>Warning: concurrent invocations of this method are not safe. Repeated calls with the same state are no-ops. </p>
-
-<p>References <a class="el" href="a00158.html#a40209b347e3c82bb5bfda05941304309">tbb::internal::task_scheduler_observer_v3::observe()</a>, and <a class="el" href="a00240.html#adb86d08473679d6fe0eabcdc766ffe3aa73cb2e2bcb94442b8b2b72e93a76f2e5">tbb::relaxed</a>.</p>
-
-<p>Referenced by <a class="el" href="a00157.html#a9ef3f1853439b46e5a9db7fd1c0f9116">~task_scheduler_observer()</a>.</p>
+<p>The number of hardware thread contexts. </p>
+<p>Before TBB 3.0 U4 this methods returned the number of logical CPU in the system. Currently on Windows, Linux and FreeBSD it returns the number of logical CPUs available to the current process in accordance with its affinity mask.</p>
+<p>NOTE: The return value of this method never changes after its first invocation. This means that changes in the process affinity mask that took place after this method was first invoked will not affect the number of worker threads in the TBB worker threads pool. </p>
 
 </div>
 </div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>task_scheduler_observer.h</li>
+<li>tbb_thread.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00157.png b/doc/html/a00157.png
deleted file mode 100644
index 37496e9..0000000
Binary files a/doc/html/a00157.png and /dev/null differ
diff --git a/doc/html/a00158.html b/doc/html/a00158.html
index d6d0fdf..c5ce863 100644
--- a/doc/html/a00158.html
+++ b/doc/html/a00158.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::internal::task_scheduler_observer_v3 Class Reference</title>
+<title>tbb::thread_bound_filter Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,150 +33,125 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00158.html">task_scheduler_observer_v3</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00158.html">thread_bound_filter</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#friends">Friends</a> |
-<a href="a00413.html">List of all members</a>  </div>
+<a href="#pro-methods">Protected Member Functions</a> |
+<a href="a00285.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::internal::task_scheduler_observer_v3 Class Reference</div>  </div>
+<div class="title">tbb::thread_bound_filter Class Reference<div class="ingroups"><a class="el" href="a00252.html">Algorithms</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
+
+<p>A stage in a pipeline served by a user thread.  
+ <a href="a00158.html#details">More...</a></p>
+
+<p><code>#include <pipeline.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::internal::task_scheduler_observer_v3:</div>
+Inheritance diagram for tbb::thread_bound_filter:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00158.png" usemap="#tbb::internal::task_scheduler_observer_v3_map" alt=""/>
-  <map id="tbb::internal::task_scheduler_observer_v3_map" name="tbb::internal::task_scheduler_observer_v3_map">
-<area href="a00157.html" alt="tbb::interface6::task_scheduler_observer" shape="rect" coords="0,56,247,80"/>
+  <img src="a00158.png" usemap="#tbb::thread_bound_filter_map" alt=""/>
+  <map id="tbb::thread_bound_filter_map" name="tbb::thread_bound_filter_map">
+<area href="a00059.html" title="A stage in a pipeline. " alt="tbb::filter" shape="rect" coords="0,56,145,80"/>
 </map>
  </div></div>
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a2425d6944a22a57c906945df57290e9d"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>result_type</b> { <b>success</b>, 
+<b>item_not_available</b>, 
+<b>end_of_stream</b>
+ }</td></tr>
+<tr class="separator:a2425d6944a22a57c906945df57290e9d"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a40209b347e3c82bb5bfda05941304309"><td class="memItemLeft" align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#a40209b347e3c82bb5bfda05941304309">observe</a> (bool state=true)</td></tr>
-<tr class="memdesc:a40209b347e3c82bb5bfda05941304309"><td class="mdescLeft"> </td><td class="mdescRight">Enable or disable observation.  <a href="#a40209b347e3c82bb5bfda05941304309">More...</a><br/></td></tr>
-<tr class="separator:a40209b347e3c82bb5bfda05941304309"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a31abaf256f7172f010cfb2259c7787bb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a31abaf256f7172f010cfb2259c7787bb"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#a31abaf256f7172f010cfb2259c7787bb">is_observing</a> () const </td></tr>
-<tr class="memdesc:a31abaf256f7172f010cfb2259c7787bb"><td class="mdescLeft"> </td><td class="mdescRight">Returns true if observation is enabled, false otherwise. <br/></td></tr>
-<tr class="separator:a31abaf256f7172f010cfb2259c7787bb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a25bffb05efaaab36bc58590969e29745"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a25bffb05efaaab36bc58590969e29745"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#a25bffb05efaaab36bc58590969e29745">task_scheduler_observer_v3</a> ()</td></tr>
-<tr class="memdesc:a25bffb05efaaab36bc58590969e29745"><td class="mdescLeft"> </td><td class="mdescRight">Construct observer with observation disabled. <br/></td></tr>
-<tr class="separator:a25bffb05efaaab36bc58590969e29745"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af4282a27725fbe86052bb785bdd9c5d3"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#af4282a27725fbe86052bb785bdd9c5d3">on_scheduler_entry</a> (bool)</td></tr>
-<tr class="memdesc:af4282a27725fbe86052bb785bdd9c5d3"><td class="mdescLeft"> </td><td class="mdescRight">Entry notification.  <a href="#af4282a27725fbe86052bb785bdd9c5d3">More...</a><br/></td></tr>
-<tr class="separator:af4282a27725fbe86052bb785bdd9c5d3"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a657e90f833568e217b807d0122fa7668"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#a657e90f833568e217b807d0122fa7668">on_scheduler_exit</a> (bool)</td></tr>
-<tr class="memdesc:a657e90f833568e217b807d0122fa7668"><td class="mdescLeft"> </td><td class="mdescRight">Exit notification.  <a href="#a657e90f833568e217b807d0122fa7668">More...</a><br/></td></tr>
-<tr class="separator:a657e90f833568e217b807d0122fa7668"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a151e475ebba39172fcc13f43bed426cc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a151e475ebba39172fcc13f43bed426cc"></a>
-virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#a151e475ebba39172fcc13f43bed426cc">~task_scheduler_observer_v3</a> ()</td></tr>
-<tr class="memdesc:a151e475ebba39172fcc13f43bed426cc"><td class="mdescLeft"> </td><td class="mdescRight">Destructor automatically switches observation off if it is enabled. <br/></td></tr>
-<tr class="separator:a151e475ebba39172fcc13f43bed426cc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a12cfa43c620066a8783529cc8519c6f9"><td class="memItemLeft" align="right" valign="top">result_type __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#a12cfa43c620066a8783529cc8519c6f9">try_process_item</a> ()</td></tr>
+<tr class="memdesc:a12cfa43c620066a8783529cc8519c6f9"><td class="mdescLeft"> </td><td class="mdescRight">If a data item is available, invoke operator() on that item.  <a href="#a12cfa43c620066a8783529cc8519c6f9">More...</a><br/></td></tr>
+<tr class="separator:a12cfa43c620066a8783529cc8519c6f9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac99258407f382d84568a510075074fc7"><td class="memItemLeft" align="right" valign="top">result_type __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ac99258407f382d84568a510075074fc7">process_item</a> ()</td></tr>
+<tr class="memdesc:ac99258407f382d84568a510075074fc7"><td class="mdescLeft"> </td><td class="mdescRight">Wait until a data item becomes available, and invoke operator() on that item.  <a href="#ac99258407f382d84568a510075074fc7">More...</a><br/></td></tr>
+<tr class="separator:ac99258407f382d84568a510075074fc7"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:a897b52f8da750f35b9b2ef410eae7181"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a897b52f8da750f35b9b2ef410eae7181"></a>
-class </td><td class="memItemRight" valign="bottom"><b>observer_proxy</b></td></tr>
-<tr class="separator:a897b52f8da750f35b9b2ef410eae7181"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a232d1ae378b2c82f9788c5611429298b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a232d1ae378b2c82f9788c5611429298b"></a>
-class </td><td class="memItemRight" valign="bottom"><b>observer_list</b></td></tr>
-<tr class="separator:a232d1ae378b2c82f9788c5611429298b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad972d2c44eeed885d9df2b75e7231277"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad972d2c44eeed885d9df2b75e7231277"></a>
-class </td><td class="memItemRight" valign="bottom"><b>interface6::task_scheduler_observer</b></td></tr>
-<tr class="separator:ad972d2c44eeed885d9df2b75e7231277"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:a5f236956f85f28c783127c949e902610"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f236956f85f28c783127c949e902610"></a>
+ </td><td class="memItemRight" valign="bottom"><b>thread_bound_filter</b> (mode filter_mode)</td></tr>
+<tr class="separator:a5f236956f85f28c783127c949e902610"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_static_attribs_a00059"><td colspan="2" onclick="javascript:toggleInherit('pro_static_attribs_a00059')"><img src="closed.png" alt="-"/> Static Protected Attributes inherited from <a class="el" href="a00059.html">tbb::filter</a></td></tr>
+<tr class="memitem:ae9dab2e01b0963b341ab04b59eec1475 inherit pro_static_attribs_a00059"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae9dab2e01b0963b341ab04b59eec1475"></a>
+static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00059.html#ae9dab2e01b0963b341ab04b59eec1475">filter_is_serial</a> = 0x1</td></tr>
+<tr class="memdesc:ae9dab2e01b0963b341ab04b59eec1475 inherit pro_static_attribs_a00059"><td class="mdescLeft"> </td><td class="mdescRight">The lowest bit 0 is for parallel vs. serial. <br/></td></tr>
+<tr class="separator:ae9dab2e01b0963b341ab04b59eec1475 inherit pro_static_attribs_a00059"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a091fcf6abc79edfa5c8bf01f742e2392 inherit pro_static_attribs_a00059"><td class="memItemLeft" align="right" valign="top">static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00059.html#a091fcf6abc79edfa5c8bf01f742e2392">filter_is_out_of_order</a> = 0x1<<4</td></tr>
+<tr class="memdesc:a091fcf6abc79edfa5c8bf01f742e2392 inherit pro_static_attribs_a00059"><td class="mdescLeft"> </td><td class="mdescRight">4th bit distinguishes ordered vs unordered filters.  <a href="#a091fcf6abc79edfa5c8bf01f742e2392">More...</a><br/></td></tr>
+<tr class="separator:a091fcf6abc79edfa5c8bf01f742e2392 inherit pro_static_attribs_a00059"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1382f216bd094064a18eb48ecc43c86b inherit pro_static_attribs_a00059"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1382f216bd094064a18eb48ecc43c86b"></a>
+static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00059.html#a1382f216bd094064a18eb48ecc43c86b">filter_is_bound</a> = 0x1<<5</td></tr>
+<tr class="memdesc:a1382f216bd094064a18eb48ecc43c86b inherit pro_static_attribs_a00059"><td class="mdescLeft"> </td><td class="mdescRight">5th bit distinguishes thread-bound and regular filters. <br/></td></tr>
+<tr class="separator:a1382f216bd094064a18eb48ecc43c86b inherit pro_static_attribs_a00059"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6645ec56872b6ba2056dcaa467e292f7 inherit pro_static_attribs_a00059"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6645ec56872b6ba2056dcaa467e292f7"></a>
+static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00059.html#a6645ec56872b6ba2056dcaa467e292f7">filter_may_emit_null</a> = 0x1<<6</td></tr>
+<tr class="memdesc:a6645ec56872b6ba2056dcaa467e292f7 inherit pro_static_attribs_a00059"><td class="mdescLeft"> </td><td class="mdescRight">6th bit marks input filters emitting small objects <br/></td></tr>
+<tr class="separator:a6645ec56872b6ba2056dcaa467e292f7 inherit pro_static_attribs_a00059"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aab9689e23a96c6c9bf1c8caae74d92ee inherit pro_static_attribs_a00059"><td class="memItemLeft" align="right" valign="top">static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00059.html#aab9689e23a96c6c9bf1c8caae74d92ee">exact_exception_propagation</a></td></tr>
+<tr class="memdesc:aab9689e23a96c6c9bf1c8caae74d92ee inherit pro_static_attribs_a00059"><td class="mdescLeft"> </td><td class="mdescRight">7th bit defines exception propagation mode expected by the application.  <a href="#aab9689e23a96c6c9bf1c8caae74d92ee">More...</a><br/></td></tr>
+<tr class="separator:aab9689e23a96c6c9bf1c8caae74d92ee inherit pro_static_attribs_a00059"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="a40209b347e3c82bb5bfda05941304309"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void __TBB_EXPORTED_METHOD tbb::internal::task_scheduler_observer_v3::observe </td>
-          <td>(</td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>state</em> = <code>true</code>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Enable or disable observation. </p>
-<p>For local observers the method can be used only when the current thread has the task scheduler initialized or is attached to an arena.</p>
-<p>Repeated calls with the same state are no-ops. </p>
-
-<p>Referenced by <a class="el" href="a00157.html#ad5b33790cea52c61e1fb004a8ed26365">tbb::interface6::task_scheduler_observer::observe()</a>, and <a class="el" href="a00158.html#a151e475ebba39172fcc13f43bed426cc">~task_scheduler_observer_v3()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="af4282a27725fbe86052bb785bdd9c5d3"></a>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>A stage in a pipeline served by a user thread. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="ac99258407f382d84568a510075074fc7"></a>
 <div class="memitem">
 <div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">virtual void tbb::internal::task_scheduler_observer_v3::on_scheduler_entry </td>
+          <td class="memname">result_type __TBB_EXPORTED_METHOD tbb::thread_bound_filter::process_item </td>
           <td>(</td>
-          <td class="paramtype">bool </td>
           <td class="paramname">)</td><td></td>
           <td></td>
         </tr>
       </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
 </div><div class="memdoc">
 
-<p>Entry notification. </p>
-<p>Invoked from inside observe(true) call and whenever a worker enters the arena this observer is associated with. If a thread is already in the arena when the observer is activated, the entry notification is called before it executes the first stolen task.</p>
-<p>Obsolete semantics. For global observers it is called by a thread before the first steal since observation became enabled. </p>
+<p>Wait until a data item becomes available, and invoke operator() on that item. </p>
+<p>This interface is blocking. Returns 'success' if an item was processed. Returns 'end_of_stream' if there are no more items to process. Never returns 'item_not_available', as it blocks until another return condition applies. </p>
 
 </div>
 </div>
-<a class="anchor" id="a657e90f833568e217b807d0122fa7668"></a>
+<a class="anchor" id="a12cfa43c620066a8783529cc8519c6f9"></a>
 <div class="memitem">
 <div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">virtual void tbb::internal::task_scheduler_observer_v3::on_scheduler_exit </td>
+          <td class="memname">result_type __TBB_EXPORTED_METHOD tbb::thread_bound_filter::try_process_item </td>
           <td>(</td>
-          <td class="paramtype">bool </td>
           <td class="paramname">)</td><td></td>
           <td></td>
         </tr>
       </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
 </div><div class="memdoc">
 
-<p>Exit notification. </p>
-<p>Invoked from inside observe(false) call and whenever a worker leaves the arena this observer is associated with.</p>
-<p>Obsolete semantics. For global observers it is called by a thread before the first steal since observation became enabled. </p>
+<p>If a data item is available, invoke operator() on that item. </p>
+<p>This interface is non-blocking. Returns 'success' if an item was processed. Returns 'item_not_available' if no item can be processed now but more may arrive in the future, or if token limit is reached. Returns 'end_of_stream' if there are no more items to process. </p>
 
 </div>
 </div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>task_scheduler_observer.h</li>
+<li>pipeline.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00158.png b/doc/html/a00158.png
index b87088c..7eab1d5 100644
Binary files a/doc/html/a00158.png and b/doc/html/a00158.png differ
diff --git a/doc/html/a00159.html b/doc/html/a00159.html
index 34cfd56..02546f9 100644
--- a/doc/html/a00159.html
+++ b/doc/html/a00159.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::tbb_allocator< T > Class Template Reference</title>
+<title>tbb::internal::thread_closure_0< F > Struct Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,125 +33,61 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00159.html">tbb_allocator</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00159.html">thread_closure_0</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
 <a href="#pub-static-methods">Static Public Member Functions</a> |
-<a href="a00310.html">List of all members</a>  </div>
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="a00402.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::tbb_allocator< T > Class Template Reference<div class="ingroups"><a class="el" href="a00257.html">Memory Allocation</a></div></div>  </div>
+<div class="title">tbb::internal::thread_closure_0< F > Struct Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  
- <a href="a00159.html#details">More...</a></p>
-
-<p><code>#include <tbb_allocator.h></code></p>
+<div class="dynheader">
+Inheritance diagram for tbb::internal::thread_closure_0< F >:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00159.png" usemap="#tbb::internal::thread_closure_0< F >_map" alt=""/>
+  <map id="tbb::internal::thread_closure_0< F >_map" name="tbb::internal::thread_closure_0< F >_map">
+<area href="a00162.html" alt="tbb::internal::thread_closure_base" shape="rect" coords="0,0,214,24"/>
+</map>
+ </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00117.html">rebind</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a60463a571d5c20f7762112367261ad94"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html#a60463a571d5c20f7762112367261ad94">malloc_type</a> { <b>scalable</b>, 
-<b>standard</b>
- }</td></tr>
-<tr class="memdesc:a60463a571d5c20f7762112367261ad94"><td class="mdescLeft"> </td><td class="mdescRight">Specifies current allocator. <br/></td></tr>
-<tr class="separator:a60463a571d5c20f7762112367261ad94"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a26be966de4164e37002247c2c2266df9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a26be966de4164e37002247c2c2266df9"></a>
-typedef <br class="typebreak"/>
-internal::allocator_type< T ><br class="typebreak"/>
-::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-<tr class="separator:a26be966de4164e37002247c2c2266df9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a452a6c09408f425c9a005b5f2aad1761"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a452a6c09408f425c9a005b5f2aad1761"></a>
-typedef value_type * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-<tr class="separator:a452a6c09408f425c9a005b5f2aad1761"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a63122d559635096a2618aecd1ba6664b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63122d559635096a2618aecd1ba6664b"></a>
-typedef const value_type * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-<tr class="separator:a63122d559635096a2618aecd1ba6664b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5ec6bd5e8cdd5b7abb99f5d72760c7a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5ec6bd5e8cdd5b7abb99f5d72760c7a2"></a>
-typedef value_type & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
-<tr class="separator:a5ec6bd5e8cdd5b7abb99f5d72760c7a2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a24d98ce3ab908bc4b10d21dad6622364"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a24d98ce3ab908bc4b10d21dad6622364"></a>
-typedef const value_type & </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
-<tr class="separator:a24d98ce3ab908bc4b10d21dad6622364"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a812817d50e8df15df54998caec9892eb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a812817d50e8df15df54998caec9892eb"></a>
-typedef size_t </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-<tr class="separator:a812817d50e8df15df54998caec9892eb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acba390757f664df03a15e933e3e34941"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acba390757f664df03a15e933e3e34941"></a>
-typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
-<tr class="separator:acba390757f664df03a15e933e3e34941"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a8371538bc959f41f342012e363564aed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8371538bc959f41f342012e363564aed"></a>
- </td><td class="memItemRight" valign="bottom"><b>tbb_allocator</b> (const <a class="el" href="a00159.html">tbb_allocator</a> &)  throw ()</td></tr>
-<tr class="separator:a8371538bc959f41f342012e363564aed"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9faff9ae2c2cd3ed2ca064b562224974"><td class="memTemplParams" colspan="2"><a class="anchor" id="a9faff9ae2c2cd3ed2ca064b562224974"></a>
-template<typename U > </td></tr>
-<tr class="memitem:a9faff9ae2c2cd3ed2ca064b562224974"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>tbb_allocator</b> (const <a class="el" href="a00159.html">tbb_allocator</a>< U > &)  throw ()</td></tr>
-<tr class="separator:a9faff9ae2c2cd3ed2ca064b562224974"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac1370dbb1f06fed57273bddcae688255"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac1370dbb1f06fed57273bddcae688255"></a>
-pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (reference x) const </td></tr>
-<tr class="separator:ac1370dbb1f06fed57273bddcae688255"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afb9c91d548d4a5affe3ec1de1c1b9327"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afb9c91d548d4a5affe3ec1de1c1b9327"></a>
-const_pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (const_reference x) const </td></tr>
-<tr class="separator:afb9c91d548d4a5affe3ec1de1c1b9327"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afedd8a64eed9692083c708f419338e0c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afedd8a64eed9692083c708f419338e0c"></a>
-pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html#afedd8a64eed9692083c708f419338e0c">allocate</a> (size_type n, const void *=0)</td></tr>
-<tr class="memdesc:afedd8a64eed9692083c708f419338e0c"><td class="mdescLeft"> </td><td class="mdescRight">Allocate space for n objects. <br/></td></tr>
-<tr class="separator:afedd8a64eed9692083c708f419338e0c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a28e333e0fff56dd53c20b82cfee430ab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28e333e0fff56dd53c20b82cfee430ab"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html#a28e333e0fff56dd53c20b82cfee430ab">deallocate</a> (pointer p, size_type)</td></tr>
-<tr class="memdesc:a28e333e0fff56dd53c20b82cfee430ab"><td class="mdescLeft"> </td><td class="mdescRight">Free previously allocated block of memory. <br/></td></tr>
-<tr class="separator:a28e333e0fff56dd53c20b82cfee430ab"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0a2676fb8a2f931961d373b88848c93e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0a2676fb8a2f931961d373b88848c93e"></a>
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html#a0a2676fb8a2f931961d373b88848c93e">max_size</a> () const   throw ()</td></tr>
-<tr class="memdesc:a0a2676fb8a2f931961d373b88848c93e"><td class="mdescLeft"> </td><td class="mdescRight">Largest value for which method allocate might succeed. <br/></td></tr>
-<tr class="separator:a0a2676fb8a2f931961d373b88848c93e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af54fa3029e33cebe5ba64a8538306fdf"><td class="memTemplParams" colspan="2"><a class="anchor" id="af54fa3029e33cebe5ba64a8538306fdf"></a>
-template<typename U , typename... Args> </td></tr>
-<tr class="memitem:af54fa3029e33cebe5ba64a8538306fdf"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00159.html#af54fa3029e33cebe5ba64a8538306fdf">construct</a> (U *p, Args &&...args)</td></tr>
-<tr class="memdesc:af54fa3029e33cebe5ba64a8538306fdf"><td class="mdescLeft"> </td><td class="mdescRight">Copy-construct value at location pointed to by p. <br/></td></tr>
-<tr class="separator:af54fa3029e33cebe5ba64a8538306fdf"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aefbb273663853a665e51dcfa053d12a0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aefbb273663853a665e51dcfa053d12a0"></a>
-void </td><td class="memItemRight" valign="bottom"><b>construct</b> (pointer p, value_type &&value)</td></tr>
-<tr class="separator:aefbb273663853a665e51dcfa053d12a0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a694e266db657afba34ecb60111b2e2d3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a694e266db657afba34ecb60111b2e2d3"></a>
-void </td><td class="memItemRight" valign="bottom"><b>construct</b> (pointer p, const value_type &value)</td></tr>
-<tr class="separator:a694e266db657afba34ecb60111b2e2d3"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac7b1b393a8ff3399079328c0971c1996"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac7b1b393a8ff3399079328c0971c1996"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html#ac7b1b393a8ff3399079328c0971c1996">destroy</a> (pointer p)</td></tr>
-<tr class="memdesc:ac7b1b393a8ff3399079328c0971c1996"><td class="mdescLeft"> </td><td class="mdescRight">Destroy value at location pointed to by p. <br/></td></tr>
-<tr class="separator:ac7b1b393a8ff3399079328c0971c1996"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a538aa9db5b40cf64cdafc0af0649a7f2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a538aa9db5b40cf64cdafc0af0649a7f2"></a>
+ </td><td class="memItemRight" valign="bottom"><b>thread_closure_0</b> (const F &f)</td></tr>
+<tr class="separator:a538aa9db5b40cf64cdafc0af0649a7f2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_methods_a00162"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00162')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00162.html">tbb::internal::thread_closure_base</a></td></tr>
+<tr class="memitem:a624f5a5a40051faf39444ad3a9f36df5 inherit pub_methods_a00162"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a624f5a5a40051faf39444ad3a9f36df5"></a>
+void * </td><td class="memItemRight" valign="bottom"><b>operator new</b> (size_t size)</td></tr>
+<tr class="separator:a624f5a5a40051faf39444ad3a9f36df5 inherit pub_methods_a00162"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a56e1bfd2ca46abcc3c3f265eff10360d inherit pub_methods_a00162"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a56e1bfd2ca46abcc3c3f265eff10360d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>operator delete</b> (void *ptr)</td></tr>
+<tr class="separator:a56e1bfd2ca46abcc3c3f265eff10360d inherit pub_methods_a00162"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
 Static Public Member Functions</h2></td></tr>
-<tr class="memitem:aa4606cff0156ec4237c1571204851bfb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4606cff0156ec4237c1571204851bfb"></a>
-static <a class="el" href="a00159.html#a60463a571d5c20f7762112367261ad94">malloc_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html#aa4606cff0156ec4237c1571204851bfb">allocator_type</a> ()</td></tr>
-<tr class="memdesc:aa4606cff0156ec4237c1571204851bfb"><td class="mdescLeft"> </td><td class="mdescRight">Returns current allocator. <br/></td></tr>
-<tr class="separator:aa4606cff0156ec4237c1571204851bfb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4b9e7370103f473212ccb10e65d676fb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4b9e7370103f473212ccb10e65d676fb"></a>
+static __TBB_NATIVE_THREAD_ROUTINE </td><td class="memItemRight" valign="bottom"><b>start_routine</b> (void *c)</td></tr>
+<tr class="separator:a4b9e7370103f473212ccb10e65d676fb"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:aff55f3266cccfbb2d296aa9b07239ce8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aff55f3266cccfbb2d296aa9b07239ce8"></a>
+F </td><td class="memItemRight" valign="bottom"><b>function</b></td></tr>
+<tr class="separator:aff55f3266cccfbb2d296aa9b07239ce8"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename T><br/>
-class tbb::tbb_allocator< T ></h3>
-
-<p>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. </p>
-<p>The class selects the best memory allocation mechanism available from scalable_malloc and standard malloc. The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>tbb_allocator.h</li>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>tbb_thread.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00166.png b/doc/html/a00159.png
similarity index 100%
rename from doc/html/a00166.png
rename to doc/html/a00159.png
diff --git a/doc/html/a00160.html b/doc/html/a00160.html
index 7d8fac8..41c3ad4 100644
--- a/doc/html/a00160.html
+++ b/doc/html/a00160.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::tbb_allocator< void > Class Template Reference</title>
+<title>tbb::internal::thread_closure_1< F, X > Struct Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,53 +33,75 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00160.html">tbb_allocator< void ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00160.html">thread_closure_1</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#pub-types">Public Types</a> |
-<a href="a00312.html">List of all members</a>  </div>
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-static-methods">Static Public Member Functions</a> |
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="a00403.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::tbb_allocator< void > Class Template Reference<div class="ingroups"><a class="el" href="a00257.html">Memory Allocation</a></div></div>  </div>
+<div class="title">tbb::internal::thread_closure_1< F, X > Struct Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  
+<p>Structure used to pass user function with 1 argument to thread.  
  <a href="a00160.html#details">More...</a></p>
 
-<p><code>#include <tbb_allocator.h></code></p>
+<p><code>#include <tbb_thread.h></code></p>
+<div class="dynheader">
+Inheritance diagram for tbb::internal::thread_closure_1< F, X >:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00160.png" usemap="#tbb::internal::thread_closure_1< F, X >_map" alt=""/>
+  <map id="tbb::internal::thread_closure_1< F, X >_map" name="tbb::internal::thread_closure_1< F, X >_map">
+<area href="a00162.html" alt="tbb::internal::thread_closure_base" shape="rect" coords="0,0,232,24"/>
+</map>
+ </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00118.html">rebind</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:afef38584bcf65f3f71700cfec80b8b18"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afef38584bcf65f3f71700cfec80b8b18"></a>
+ </td><td class="memItemRight" valign="bottom"><b>thread_closure_1</b> (const F &f, const X &x)</td></tr>
+<tr class="separator:afef38584bcf65f3f71700cfec80b8b18"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_methods_a00162"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00162')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00162.html">tbb::internal::thread_closure_base</a></td></tr>
+<tr class="memitem:a624f5a5a40051faf39444ad3a9f36df5 inherit pub_methods_a00162"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a624f5a5a40051faf39444ad3a9f36df5"></a>
+void * </td><td class="memItemRight" valign="bottom"><b>operator new</b> (size_t size)</td></tr>
+<tr class="separator:a624f5a5a40051faf39444ad3a9f36df5 inherit pub_methods_a00162"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a56e1bfd2ca46abcc3c3f265eff10360d inherit pub_methods_a00162"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a56e1bfd2ca46abcc3c3f265eff10360d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>operator delete</b> (void *ptr)</td></tr>
+<tr class="separator:a56e1bfd2ca46abcc3c3f265eff10360d inherit pub_methods_a00162"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a8fda536620d85d53caa82c45ffa49dd8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8fda536620d85d53caa82c45ffa49dd8"></a>
-typedef void * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-<tr class="separator:a8fda536620d85d53caa82c45ffa49dd8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a401d3c91a38b09410a20fe69d4d9745d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a401d3c91a38b09410a20fe69d4d9745d"></a>
-typedef const void * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-<tr class="separator:a401d3c91a38b09410a20fe69d4d9745d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afef43ed21663982050fbae7b970e33f6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afef43ed21663982050fbae7b970e33f6"></a>
-typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-<tr class="separator:afef43ed21663982050fbae7b970e33f6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:a33d533b3301c45708c6252d040f855a6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a33d533b3301c45708c6252d040f855a6"></a>
+static __TBB_NATIVE_THREAD_ROUTINE </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#a33d533b3301c45708c6252d040f855a6">start_routine</a> (void *c)</td></tr>
+<tr class="memdesc:a33d533b3301c45708c6252d040f855a6"><td class="mdescLeft"> </td><td class="mdescRight">Routine passed to Windows's _beginthreadex by thread::internal_start() inside tbb.dll. <br/></td></tr>
+<tr class="separator:a33d533b3301c45708c6252d040f855a6"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a39a5a39b2a7513868944ffe7ffd89640"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a39a5a39b2a7513868944ffe7ffd89640"></a>
+F </td><td class="memItemRight" valign="bottom"><b>function</b></td></tr>
+<tr class="separator:a39a5a39b2a7513868944ffe7ffd89640"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a607886c68ca8bdd984b9b4f6ec744dea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a607886c68ca8bdd984b9b4f6ec744dea"></a>
+X </td><td class="memItemRight" valign="bottom"><b>arg1</b></td></tr>
+<tr class="separator:a607886c68ca8bdd984b9b4f6ec744dea"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<><br/>
-class tbb::tbb_allocator< void ></h3>
+<div class="textblock"><h3>template<class F, class X><br/>
+struct tbb::internal::thread_closure_1< F, X ></h3>
 
-<p>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>tbb_allocator.h</li>
+<p>Structure used to pass user function with 1 argument to thread. </p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>tbb_thread.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00167.png b/doc/html/a00160.png
similarity index 100%
rename from doc/html/a00167.png
rename to doc/html/a00160.png
diff --git a/doc/html/a00161.html b/doc/html/a00161.html
index 54e8f50..0cf686c 100644
--- a/doc/html/a00161.html
+++ b/doc/html/a00161.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::tbb_exception Class Reference</title>
+<title>tbb::internal::thread_closure_2< F, X, Y > Struct Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,191 +33,68 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00161.html">tbb_exception</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00161.html">thread_closure_2</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00323.html">List of all members</a>  </div>
+<a href="#pub-static-methods">Static Public Member Functions</a> |
+<a href="#pub-attribs">Public Attributes</a> |
+<a href="a00404.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::tbb_exception Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
+<div class="title">tbb::internal::thread_closure_2< F, X, Y > Struct Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Interface to be implemented by all exceptions TBB recognizes and propagates across the threads.  
- <a href="a00161.html#details">More...</a></p>
-
-<p><code>#include <tbb_exception.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::tbb_exception:</div>
+Inheritance diagram for tbb::internal::thread_closure_2< F, X, Y >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00161.png" usemap="#tbb::tbb_exception_map" alt=""/>
-  <map id="tbb::tbb_exception_map" name="tbb::tbb_exception_map">
-<area href="a00035.html" title="This class is used by TBB to propagate information about unhandled exceptions into the root thread..." alt="tbb::captured_exception" shape="rect" coords="0,112,248,136"/>
-<area href="a00097.html" title="Template that can be used to implement exception that transfers arbitrary ExceptionData to the root t..." alt="tbb::movable_exception< ExceptionData >" shape="rect" coords="258,112,506,136"/>
+  <img src="a00161.png" usemap="#tbb::internal::thread_closure_2< F, X, Y >_map" alt=""/>
+  <map id="tbb::internal::thread_closure_2< F, X, Y >_map" name="tbb::internal::thread_closure_2< F, X, Y >_map">
+<area href="a00162.html" alt="tbb::internal::thread_closure_base" shape="rect" coords="0,0,250,24"/>
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a4bd4ba0d501021013d1473d21b020b69"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="a00161.html">tbb_exception</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#a4bd4ba0d501021013d1473d21b020b69">move</a> ()=0  throw ()</td></tr>
-<tr class="memdesc:a4bd4ba0d501021013d1473d21b020b69"><td class="mdescLeft"> </td><td class="mdescRight">Creates and returns pointer to the deep copy of this exception object.  <a href="#a4bd4ba0d501021013d1473d21b020b69">More...</a><br/></td></tr>
-<tr class="separator:a4bd4ba0d501021013d1473d21b020b69"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad3bc09bf78c33f19a0bcdf882fdf9d41"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#ad3bc09bf78c33f19a0bcdf882fdf9d41">destroy</a> ()=0  throw ()</td></tr>
-<tr class="memdesc:ad3bc09bf78c33f19a0bcdf882fdf9d41"><td class="mdescLeft"> </td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00161.html#a4bd4ba0d501021013d1473d21b020b69" title="Creates and returns pointer to the deep copy of this exception object. ">move()</a> method.  <a href="#ad3bc09bf78c33f19a0bcdf882fdf9d41">More...</a><br/></td></tr>
-<tr class="separator:ad3bc09bf78c33f19a0bcdf882fdf9d41"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae45c08d36c7ec7ae91785da3515a8828"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#ae45c08d36c7ec7ae91785da3515a8828">throw_self</a> ()=0</td></tr>
-<tr class="memdesc:ae45c08d36c7ec7ae91785da3515a8828"><td class="mdescLeft"> </td><td class="mdescRight">Throws this exception object.  <a href="#ae45c08d36c7ec7ae91785da3515a8828">More...</a><br/></td></tr>
-<tr class="separator:ae45c08d36c7ec7ae91785da3515a8828"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a282bb7dce5f157d044d14d50cd6ff35c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a282bb7dce5f157d044d14d50cd6ff35c"></a>
-virtual const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#a282bb7dce5f157d044d14d50cd6ff35c">name</a> () const =0  throw ()</td></tr>
-<tr class="memdesc:a282bb7dce5f157d044d14d50cd6ff35c"><td class="mdescLeft"> </td><td class="mdescRight">Returns RTTI name of the originally intercepted exception. <br/></td></tr>
-<tr class="separator:a282bb7dce5f157d044d14d50cd6ff35c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae0ad81121d4b722ecc466b5d3cc4e919"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae0ad81121d4b722ecc466b5d3cc4e919"></a>
-virtual const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#ae0ad81121d4b722ecc466b5d3cc4e919">what</a> () const =0  throw ()</td></tr>
-<tr class="memdesc:ae0ad81121d4b722ecc466b5d3cc4e919"><td class="mdescLeft"> </td><td class="mdescRight">Returns the result of originally intercepted exception's <a class="el" href="a00161.html#ae0ad81121d4b722ecc466b5d3cc4e919" title="Returns the result of originally intercepted exception's what() method. ">what()</a> method. <br/></td></tr>
-<tr class="separator:ae0ad81121d4b722ecc466b5d3cc4e919"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6a973c37078afedf7d457ff4704bf8cd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#a6a973c37078afedf7d457ff4704bf8cd">operator delete</a> (void *p)</td></tr>
-<tr class="separator:a6a973c37078afedf7d457ff4704bf8cd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa5f65ba1d019063487f425021ca2ba59"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa5f65ba1d019063487f425021ca2ba59"></a>
+ </td><td class="memItemRight" valign="bottom"><b>thread_closure_2</b> (const F &f, const X &x, const Y &y)</td></tr>
+<tr class="separator:aa5f65ba1d019063487f425021ca2ba59"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_methods_a00162"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00162')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00162.html">tbb::internal::thread_closure_base</a></td></tr>
+<tr class="memitem:a624f5a5a40051faf39444ad3a9f36df5 inherit pub_methods_a00162"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a624f5a5a40051faf39444ad3a9f36df5"></a>
+void * </td><td class="memItemRight" valign="bottom"><b>operator new</b> (size_t size)</td></tr>
+<tr class="separator:a624f5a5a40051faf39444ad3a9f36df5 inherit pub_methods_a00162"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a56e1bfd2ca46abcc3c3f265eff10360d inherit pub_methods_a00162"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a56e1bfd2ca46abcc3c3f265eff10360d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>operator delete</b> (void *ptr)</td></tr>
+<tr class="separator:a56e1bfd2ca46abcc3c3f265eff10360d inherit pub_methods_a00162"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:a29003179f98d768622c72b9ab5cfe8f6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a29003179f98d768622c72b9ab5cfe8f6"></a>
+static __TBB_NATIVE_THREAD_ROUTINE </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#a29003179f98d768622c72b9ab5cfe8f6">start_routine</a> (void *c)</td></tr>
+<tr class="memdesc:a29003179f98d768622c72b9ab5cfe8f6"><td class="mdescLeft"> </td><td class="mdescRight">Routine passed to Windows's _beginthreadex by thread::internal_start() inside tbb.dll. <br/></td></tr>
+<tr class="separator:a29003179f98d768622c72b9ab5cfe8f6"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a247bf0a01f8a390031b71c9b85fb8b24"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a247bf0a01f8a390031b71c9b85fb8b24"></a>
+F </td><td class="memItemRight" valign="bottom"><b>function</b></td></tr>
+<tr class="separator:a247bf0a01f8a390031b71c9b85fb8b24"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a36f694b6dcc91c92b09d3deee24e4732"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a36f694b6dcc91c92b09d3deee24e4732"></a>
+X </td><td class="memItemRight" valign="bottom"><b>arg1</b></td></tr>
+<tr class="separator:a36f694b6dcc91c92b09d3deee24e4732"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a47f0e53fc6b9026d9529a3bf1cc4fa72"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a47f0e53fc6b9026d9529a3bf1cc4fa72"></a>
+Y </td><td class="memItemRight" valign="bottom"><b>arg2</b></td></tr>
+<tr class="separator:a47f0e53fc6b9026d9529a3bf1cc4fa72"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Interface to be implemented by all exceptions TBB recognizes and propagates across the threads. </p>
-<p>If an unhandled exception of the type derived from <a class="el" href="a00161.html" title="Interface to be implemented by all exceptions TBB recognizes and propagates across the threads...">tbb::tbb_exception</a> is intercepted by the TBB scheduler in one of the worker threads, it is delivered to and re-thrown in the root thread. The root thread is the thread that has started the outermost algorithm or root task sharing the same <a class="el" href="a00153.html">task_group_context</a>  [...]
-<p>Note: when documentation mentions workers with respect to exception handling, masters are implied as well, because they are completely equivalent in this context. Consequently a root thread can be master or worker thread.</p>
-<p>NOTE: In case of nested algorithms or complex task hierarchies when the nested levels share (explicitly or by means of implicit inheritance) the task group context of the outermost level, the exception may be (re-)thrown multiple times (ultimately - in each worker on each nesting level) before reaching the root thread at the outermost level. IMPORTANT: if you intercept an exception derived from this class on a nested level, you must re-throw it in the catch block by means of the "thro [...]
-<p>TBB provides two implementations of this interface: <a class="el" href="a00035.html" title="This class is used by TBB to propagate information about unhandled exceptions into the root thread...">tbb::captured_exception</a> and template class <a class="el" href="a00097.html" title="Template that can be used to implement exception that transfers arbitrary ExceptionData to the root t...">tbb::movable_exception</a>. See their declarations for more info. </p>
-</div><h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="ad3bc09bf78c33f19a0bcdf882fdf9d41"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual void tbb::tbb_exception::destroy </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-        <tr>
-          <td align="right">throw </td><td>(</td><td colspan="2"></td>
-        </tr>
-        <tr>
-          <td align="right"></td><td>)</td><td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Destroys objects created by the <a class="el" href="a00161.html#a4bd4ba0d501021013d1473d21b020b69" title="Creates and returns pointer to the deep copy of this exception object. ">move()</a> method. </p>
-<p>Frees memory and calls destructor for this exception object. Can and must be used only on objects created by the move method. </p>
-
-<p>Implemented in <a class="el" href="a00097.html#a02f0401b465690de797face2432d9421">tbb::movable_exception< ExceptionData ></a>, and <a class="el" href="a00035.html#a3006b6825dda6c746d28fb748f5675de">tbb::captured_exception</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a4bd4ba0d501021013d1473d21b020b69"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual <a class="el" href="a00161.html">tbb_exception</a>* tbb::tbb_exception::move </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-        <tr>
-          <td align="right">throw </td><td>(</td><td colspan="2"></td>
-        </tr>
-        <tr>
-          <td align="right"></td><td>)</td><td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Creates and returns pointer to the deep copy of this exception object. </p>
-<p>Move semantics is allowed. </p>
-
-<p>Implemented in <a class="el" href="a00097.html#aeb47d3ac90a1f01fe642b572f6ac519d">tbb::movable_exception< ExceptionData ></a>, and <a class="el" href="a00035.html#abb221485cd260349efdef681f633a6a4">tbb::captured_exception</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a6a973c37078afedf7d457ff4704bf8cd"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::tbb_exception::operator delete </td>
-          <td>(</td>
-          <td class="paramtype">void * </td>
-          <td class="paramname"><em>p</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Operator delete is provided only to allow using existing smart pointers with TBB exception objects obtained as the result of applying <a class="el" href="a00161.html#a4bd4ba0d501021013d1473d21b020b69" title="Creates and returns pointer to the deep copy of this exception object. ">move()</a> operation on an exception thrown out of TBB scheduler.</p>
-<p>When overriding method <a class="el" href="a00161.html#a4bd4ba0d501021013d1473d21b020b69" title="Creates and returns pointer to the deep copy of this exception object. ">move()</a> make sure to override operator delete as well if memory is allocated not by TBB's scalable allocator. </p>
-
-</div>
-</div>
-<a class="anchor" id="ae45c08d36c7ec7ae91785da3515a8828"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual void tbb::tbb_exception::throw_self </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Throws this exception object. </p>
-<p>Make sure that if you have several levels of derivation from this interface you implement or override this method on the most derived level. The implementation is as simple as "throw *this;". Failure to do this will result in exception of a base class type being thrown. </p>
-
-<p>Implemented in <a class="el" href="a00097.html#a3d1570b53220fbcb45eb81552b57827a">tbb::movable_exception< ExceptionData ></a>, and <a class="el" href="a00035.html#ac9ae925678fcc0cc02a74df7d06b8d63">tbb::captured_exception</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>tbb_exception.h</li>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>tbb_thread.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00161.png b/doc/html/a00161.png
index a067095..aa52099 100644
Binary files a/doc/html/a00161.png and b/doc/html/a00161.png differ
diff --git a/doc/html/a00162.html b/doc/html/a00162.html
index e38bee0..95e68e9 100644
--- a/doc/html/a00162.html
+++ b/doc/html/a00162.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::internal::tbb_exception_ptr Class Reference</title>
+<title>tbb::internal::thread_closure_base Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,82 +33,45 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00162.html">tbb_exception_ptr</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00162.html">thread_closure_base</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-static-methods">Static Public Member Functions</a> |
-<a href="a00414.html">List of all members</a>  </div>
+<a href="a00401.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::internal::tbb_exception_ptr Class Reference</div>  </div>
+<div class="title">tbb::internal::thread_closure_base Struct Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Exception container that preserves the exact copy of the original exception.  
- <a href="a00162.html#details">More...</a></p>
-
-<p><code>#include <tbb_exception.h></code></p>
+<div class="dynheader">
+Inheritance diagram for tbb::internal::thread_closure_base:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00162.png" usemap="#tbb::internal::thread_closure_base_map" alt=""/>
+  <map id="tbb::internal::thread_closure_base_map" name="tbb::internal::thread_closure_base_map">
+<area href="a00159.html" alt="tbb::internal::thread_closure_0< F >" shape="rect" coords="0,56,250,80"/>
+<area href="a00160.html" title="Structure used to pass user function with 1 argument to thread. " alt="tbb::internal::thread_closure_1< F, X >" shape="rect" coords="260,56,510,80"/>
+<area href="a00161.html" alt="tbb::internal::thread_closure_2< F, X, Y >" shape="rect" coords="520,56,770,80"/>
+</map>
+ </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a38d3ca480e2758a67bcd7427b156daae"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#a38d3ca480e2758a67bcd7427b156daae">destroy</a> ()  throw ()</td></tr>
-<tr class="memdesc:a38d3ca480e2758a67bcd7427b156daae"><td class="mdescLeft"> </td><td class="mdescRight">Destroys this objects.  <a href="#a38d3ca480e2758a67bcd7427b156daae">More...</a><br/></td></tr>
-<tr class="separator:a38d3ca480e2758a67bcd7427b156daae"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1713aa9a6a3850049d34358397a8ed81"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1713aa9a6a3850049d34358397a8ed81"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#a1713aa9a6a3850049d34358397a8ed81">throw_self</a> ()</td></tr>
-<tr class="memdesc:a1713aa9a6a3850049d34358397a8ed81"><td class="mdescLeft"> </td><td class="mdescRight">Throws the contained exception . <br/></td></tr>
-<tr class="separator:a1713aa9a6a3850049d34358397a8ed81"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
-Static Public Member Functions</h2></td></tr>
-<tr class="memitem:a83d4cb04d89ed11b5e030fe4db2d5e5f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a83d4cb04d89ed11b5e030fe4db2d5e5f"></a>
-static <a class="el" href="a00162.html">tbb_exception_ptr</a> * </td><td class="memItemRight" valign="bottom"><b>allocate</b> ()</td></tr>
-<tr class="separator:a83d4cb04d89ed11b5e030fe4db2d5e5f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae54ded5f55ad39805e6cb967fc710346"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae54ded5f55ad39805e6cb967fc710346"></a>
-static <a class="el" href="a00162.html">tbb_exception_ptr</a> * </td><td class="memItemRight" valign="bottom"><b>allocate</b> (const <a class="el" href="a00161.html">tbb_exception</a> &tag)</td></tr>
-<tr class="separator:ae54ded5f55ad39805e6cb967fc710346"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abfbea91401d2594deb04ea331734171c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abfbea91401d2594deb04ea331734171c"></a>
-static <a class="el" href="a00162.html">tbb_exception_ptr</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#abfbea91401d2594deb04ea331734171c">allocate</a> (<a class="el" href="a00035.html">captured_exception</a> &src)</td></tr>
-<tr class="memdesc:abfbea91401d2594deb04ea331734171c"><td class="mdescLeft"> </td><td class="mdescRight">This overload uses move semantics (i.e. it empties src) <br/></td></tr>
-<tr class="separator:abfbea91401d2594deb04ea331734171c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a624f5a5a40051faf39444ad3a9f36df5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a624f5a5a40051faf39444ad3a9f36df5"></a>
+void * </td><td class="memItemRight" valign="bottom"><b>operator new</b> (size_t size)</td></tr>
+<tr class="separator:a624f5a5a40051faf39444ad3a9f36df5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a56e1bfd2ca46abcc3c3f265eff10360d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a56e1bfd2ca46abcc3c3f265eff10360d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>operator delete</b> (void *ptr)</td></tr>
+<tr class="separator:a56e1bfd2ca46abcc3c3f265eff10360d"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Exception container that preserves the exact copy of the original exception. </p>
-<p>This class can be used only when the appropriate runtime support (mandated by C++0x) is present </p>
-</div><h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="a38d3ca480e2758a67bcd7427b156daae"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::internal::tbb_exception_ptr::destroy </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-        <tr>
-          <td align="right">throw </td><td>(</td><td colspan="2"></td>
-        </tr>
-        <tr>
-          <td align="right"></td><td>)</td><td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Destroys this objects. </p>
-<p>Note that objects of this type can be created only by the allocate() method. </p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>tbb_exception.h</li>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>tbb_thread.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00169.png b/doc/html/a00162.png
similarity index 100%
copy from doc/html/a00169.png
copy to doc/html/a00162.png
diff --git a/doc/html/a00163.html b/doc/html/a00163.html
index 6a17fa6..cbb03be 100644
--- a/doc/html/a00163.html
+++ b/doc/html/a00163.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::tbb_hash_compare< Key > Struct Template Reference</title>
+<title>tbb::tick_count Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,44 +33,66 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00163.html">tbb_hash_compare</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00163.html">tick_count</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#pub-methods">Public Member Functions</a> |
 <a href="#pub-static-methods">Static Public Member Functions</a> |
-<a href="a00275.html">List of all members</a>  </div>
+<a href="#friends">Friends</a> |
+<a href="a00321.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::tbb_hash_compare< Key > Struct Template Reference</div>  </div>
+<div class="title">tbb::tick_count Class Reference<div class="ingroups"><a class="el" href="a00256.html">Timing</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>hash_compare that is default argument for concurrent_hash_map  
+<p>Absolute timestamp.  
  <a href="a00163.html#details">More...</a></p>
 
-<p><code>#include <concurrent_hash_map.h></code></p>
+<p><code>#include <tick_count.h></code></p>
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00072.html">interval_t</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Relative time interval.  <a href="a00072.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a9f1daa0b7a4feb800f802b4be1f1e497"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9f1daa0b7a4feb800f802b4be1f1e497"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#a9f1daa0b7a4feb800f802b4be1f1e497">tick_count</a> ()</td></tr>
+<tr class="memdesc:a9f1daa0b7a4feb800f802b4be1f1e497"><td class="mdescLeft"> </td><td class="mdescRight">Construct an absolute timestamp initialized to zero. <br/></td></tr>
+<tr class="separator:a9f1daa0b7a4feb800f802b4be1f1e497"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
 Static Public Member Functions</h2></td></tr>
-<tr class="memitem:a525ef96e5015680e43b8e1fecd3a2fb5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a525ef96e5015680e43b8e1fecd3a2fb5"></a>
-static size_t </td><td class="memItemRight" valign="bottom"><b>hash</b> (const Key &a)</td></tr>
-<tr class="separator:a525ef96e5015680e43b8e1fecd3a2fb5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afdc33dc9b83fb3b0ead4f234eca81c95"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afdc33dc9b83fb3b0ead4f234eca81c95"></a>
-static bool </td><td class="memItemRight" valign="bottom"><b>equal</b> (const Key &a, const Key &b)</td></tr>
-<tr class="separator:afdc33dc9b83fb3b0ead4f234eca81c95"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a74dcecde7431ff4591d7c46fc1d50d7e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74dcecde7431ff4591d7c46fc1d50d7e"></a>
+static <a class="el" href="a00163.html">tick_count</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#a74dcecde7431ff4591d7c46fc1d50d7e">now</a> ()</td></tr>
+<tr class="memdesc:a74dcecde7431ff4591d7c46fc1d50d7e"><td class="mdescLeft"> </td><td class="mdescRight">Return current time. <br/></td></tr>
+<tr class="separator:a74dcecde7431ff4591d7c46fc1d50d7e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaf6a0d91e7d40f7d68e0ad6b79350e58"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaf6a0d91e7d40f7d68e0ad6b79350e58"></a>
+static double </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#aaf6a0d91e7d40f7d68e0ad6b79350e58">resolution</a> ()</td></tr>
+<tr class="memdesc:aaf6a0d91e7d40f7d68e0ad6b79350e58"><td class="mdescLeft"> </td><td class="mdescRight">Return the resolution of the clock in seconds per tick. <br/></td></tr>
+<tr class="separator:aaf6a0d91e7d40f7d68e0ad6b79350e58"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:ab5ceaed3ebf5a0d41088a5bc7c8dc653"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5ceaed3ebf5a0d41088a5bc7c8dc653"></a>
+<a class="el" href="a00072.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653">operator-</a> (const <a class="el" href="a00163.html">tick_count</a> &t1, const <a class="el" href="a00163.html">tick_count</a> &t0)</td></tr>
+<tr class="memdesc:ab5ceaed3ebf5a0d41088a5bc7c8dc653"><td class="mdescLeft"> </td><td class="mdescRight">Subtract two timestamps to get the time interval between. <br/></td></tr>
+<tr class="separator:ab5ceaed3ebf5a0d41088a5bc7c8dc653"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename Key><br/>
-struct tbb::tbb_hash_compare< Key ></h3>
-
-<p>hash_compare that is default argument for concurrent_hash_map </p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>concurrent_hash_map.h</li>
+<div class="textblock"><p>Absolute timestamp. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>tick_count.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00164.html b/doc/html/a00164.html
index ef3050a..59690eb 100644
--- a/doc/html/a00164.html
+++ b/doc/html/a00164.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::internal::tbb_thread_v3 Class Reference</title>
+<title>tbb::flow::interface9::internal::untyped_receiver Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,150 +33,134 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00164.html">tbb_thread_v3</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00164.html">untyped_receiver</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-static-methods">Static Public Member Functions</a> |
-<a href="#pub-attribs">Public Attributes</a> |
+<a href="#pro-methods">Protected Member Functions</a> |
 <a href="#friends">Friends</a> |
-<a href="a00419.html">List of all members</a>  </div>
+<a href="a00354.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::internal::tbb_thread_v3 Class Reference</div>  </div>
+<div class="title">tbb::flow::interface9::internal::untyped_receiver Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Versioned thread class.  
- <a href="a00164.html#details">More...</a></p>
-
-<p><code>#include <tbb_thread.h></code></p>
+<div class="dynheader">
+Inheritance diagram for tbb::flow::interface9::internal::untyped_receiver:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00164.png" usemap="#tbb::flow::interface9::internal::untyped_receiver_map" alt=""/>
+  <map id="tbb::flow::interface9::internal::untyped_receiver_map" name="tbb::flow::interface9::internal::untyped_receiver_map">
+<area href="a00119.html" alt="tbb::flow::interface9::receiver< continue_msg >" shape="rect" coords="0,56,276,80"/>
+<area href="a00119.html" title="Pure virtual template class that defines a receiver of messages of type T. " alt="tbb::flow::interface9::receiver< T >" shape="rect" coords="286,56,562,80"/>
+<area href="a00049.html" title="Base class for receivers of completion messages. " alt="tbb::flow::interface9::continue_receiver" shape="rect" coords="0,112,276,136"/>
+</map>
+ </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00073.html">id</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:acf81b6411caec392fc62fdfbf72560ac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf81b6411caec392fc62fdfbf72560ac"></a>
-typedef HANDLE </td><td class="memItemRight" valign="bottom"><b>native_handle_type</b></td></tr>
-<tr class="separator:acf81b6411caec392fc62fdfbf72560ac"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a30e64e2a6bef43e2fd847e6c60a31207"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a30e64e2a6bef43e2fd847e6c60a31207"></a>
-typedef pthread_t </td><td class="memItemRight" valign="bottom"><b>native_handle_type</b></td></tr>
-<tr class="separator:a30e64e2a6bef43e2fd847e6c60a31207"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a18472c96f8466de089aa2287460b606e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18472c96f8466de089aa2287460b606e"></a>
+typedef <a class="el" href="a00165.html">untyped_sender</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">predecessor_type</a></td></tr>
+<tr class="memdesc:a18472c96f8466de089aa2287460b606e"><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br/></td></tr>
+<tr class="separator:a18472c96f8466de089aa2287460b606e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a369b0e292b94a74ffd26e95ca69a9a22"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a369b0e292b94a74ffd26e95ca69a9a22"></a>
+typedef <br class="typebreak"/>
+<a class="el" href="a00056.html">internal::edge_container</a><br class="typebreak"/>
+< <a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">predecessor_type</a> > </td><td class="memItemRight" valign="bottom"><b>built_predecessors_type</b></td></tr>
+<tr class="separator:a369b0e292b94a74ffd26e95ca69a9a22"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac83b145c22d5d95930bf40154a1ce11b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac83b145c22d5d95930bf40154a1ce11b"></a>
+typedef <br class="typebreak"/>
+built_predecessors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>predecessor_list_type</b></td></tr>
+<tr class="separator:ac83b145c22d5d95930bf40154a1ce11b"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:ad9acae61c47fad5cf88869061ead3022"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad9acae61c47fad5cf88869061ead3022"></a>
- </td><td class="memItemRight" valign="bottom"><b>tbb_thread_v3</b> (const <a class="el" href="a00164.html">tbb_thread_v3</a> &)</td></tr>
-<tr class="separator:ad9acae61c47fad5cf88869061ead3022"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a15b84e454eb0179e010b90a88baa0933"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15b84e454eb0179e010b90a88baa0933"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#a15b84e454eb0179e010b90a88baa0933">tbb_thread_v3</a> () __TBB_NOEXCEPT(true)</td></tr>
-<tr class="memdesc:a15b84e454eb0179e010b90a88baa0933"><td class="mdescLeft"> </td><td class="mdescRight">Constructs a thread object that does not represent a thread of execution. <br/></td></tr>
-<tr class="separator:a15b84e454eb0179e010b90a88baa0933"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9c5587ab76ca1aa98bae7fe69a459466"><td class="memTemplParams" colspan="2"><a class="anchor" id="a9c5587ab76ca1aa98bae7fe69a459466"></a>
-template<class F > </td></tr>
-<tr class="memitem:a9c5587ab76ca1aa98bae7fe69a459466"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00164.html#a9c5587ab76ca1aa98bae7fe69a459466">tbb_thread_v3</a> (F f)</td></tr>
-<tr class="memdesc:a9c5587ab76ca1aa98bae7fe69a459466"><td class="mdescLeft"> </td><td class="mdescRight">Constructs an object and executes f() in a new thread. <br/></td></tr>
-<tr class="separator:a9c5587ab76ca1aa98bae7fe69a459466"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a672a5367e687635c869926bf8a986296"><td class="memTemplParams" colspan="2"><a class="anchor" id="a672a5367e687635c869926bf8a986296"></a>
-template<class F , class X > </td></tr>
-<tr class="memitem:a672a5367e687635c869926bf8a986296"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00164.html#a672a5367e687635c869926bf8a986296">tbb_thread_v3</a> (F f, X x)</td></tr>
-<tr class="memdesc:a672a5367e687635c869926bf8a986296"><td class="mdescLeft"> </td><td class="mdescRight">Constructs an object and executes f(x) in a new thread. <br/></td></tr>
-<tr class="separator:a672a5367e687635c869926bf8a986296"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac3f57678f2a289084a6d275f8f8fbc62"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac3f57678f2a289084a6d275f8f8fbc62"></a>
-template<class F , class X , class Y > </td></tr>
-<tr class="memitem:ac3f57678f2a289084a6d275f8f8fbc62"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00164.html#ac3f57678f2a289084a6d275f8f8fbc62">tbb_thread_v3</a> (F f, X x, Y y)</td></tr>
-<tr class="memdesc:ac3f57678f2a289084a6d275f8f8fbc62"><td class="mdescLeft"> </td><td class="mdescRight">Constructs an object and executes f(x,y) in a new thread. <br/></td></tr>
-<tr class="separator:ac3f57678f2a289084a6d275f8f8fbc62"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa4f68564c30ee6f59bab29c3b3216623"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4f68564c30ee6f59bab29c3b3216623"></a>
-<a class="el" href="a00164.html">tbb_thread_v3</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="a00164.html">tbb_thread_v3</a> &x)</td></tr>
-<tr class="separator:aa4f68564c30ee6f59bab29c3b3216623"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab2e10af48f3f2482e9e7236f2e05714c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab2e10af48f3f2482e9e7236f2e05714c"></a>
-void </td><td class="memItemRight" valign="bottom"><b>swap</b> (<a class="el" href="a00164.html">tbb_thread_v3</a> &t) __TBB_NOEXCEPT(true)</td></tr>
-<tr class="separator:ab2e10af48f3f2482e9e7236f2e05714c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4ddee0e2030f8fa947fd93f403178104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ddee0e2030f8fa947fd93f403178104"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>joinable</b> () const __TBB_NOEXCEPT(true)</td></tr>
-<tr class="separator:a4ddee0e2030f8fa947fd93f403178104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a044c8727c51e921b0cc43a6b057eb559"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a044c8727c51e921b0cc43a6b057eb559"></a>
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#a044c8727c51e921b0cc43a6b057eb559">join</a> ()</td></tr>
-<tr class="memdesc:a044c8727c51e921b0cc43a6b057eb559"><td class="mdescLeft"> </td><td class="mdescRight">The completion of the thread represented by *this happens before <a class="el" href="a00164.html#a044c8727c51e921b0cc43a6b057eb559" title="The completion of the thread represented by *this happens before join() returns. ">join()</a> returns. <br/></td></tr>
-<tr class="separator:a044c8727c51e921b0cc43a6b057eb559"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a80a31a41708872af5557b907f129b19b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a80a31a41708872af5557b907f129b19b"></a>
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#a80a31a41708872af5557b907f129b19b">detach</a> ()</td></tr>
-<tr class="memdesc:a80a31a41708872af5557b907f129b19b"><td class="mdescLeft"> </td><td class="mdescRight">When <a class="el" href="a00164.html#a80a31a41708872af5557b907f129b19b" title="When detach() returns, *this no longer represents the possibly continuing thread of execution...">detach()</a> returns, *this no longer represents the possibly continuing thread of execution. <br/></td></tr>
-<tr class="separator:a80a31a41708872af5557b907f129b19b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae98915bfeccaa90d6f13add0ee1ab33a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae98915bfeccaa90d6f13add0ee1ab33a"></a>
-<a class="el" href="a00073.html">id</a> </td><td class="memItemRight" valign="bottom"><b>get_id</b> () const __TBB_NOEXCEPT(true)</td></tr>
-<tr class="separator:ae98915bfeccaa90d6f13add0ee1ab33a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a98e89e22e11fb6cab05f0f7839c79310"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a98e89e22e11fb6cab05f0f7839c79310"></a>
-native_handle_type </td><td class="memItemRight" valign="bottom"><b>native_handle</b> ()</td></tr>
-<tr class="separator:a98e89e22e11fb6cab05f0f7839c79310"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
-Static Public Member Functions</h2></td></tr>
-<tr class="memitem:a23d7a420709b2e2b29b42dea897bd8bc"><td class="memItemLeft" align="right" valign="top">static unsigned __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#a23d7a420709b2e2b29b42dea897bd8bc">hardware_concurrency</a> () __TBB_NOEXCEPT(true)</td></tr>
-<tr class="memdesc:a23d7a420709b2e2b29b42dea897bd8bc"><td class="mdescLeft"> </td><td class="mdescRight">The number of hardware thread contexts.  <a href="#a23d7a420709b2e2b29b42dea897bd8bc">More...</a><br/></td></tr>
-<tr class="separator:a23d7a420709b2e2b29b42dea897bd8bc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a632631c8a370c1dd1fa8815cbc5e18ec"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a632631c8a370c1dd1fa8815cbc5e18ec"></a>
+virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#a632631c8a370c1dd1fa8815cbc5e18ec">~untyped_receiver</a> ()</td></tr>
+<tr class="memdesc:a632631c8a370c1dd1fa8815cbc5e18ec"><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br/></td></tr>
+<tr class="separator:a632631c8a370c1dd1fa8815cbc5e18ec"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a84f8406cd5e3252965d9e238575eaede"><td class="memTemplParams" colspan="2"><a class="anchor" id="a84f8406cd5e3252965d9e238575eaede"></a>
+template<typename X > </td></tr>
+<tr class="memitem:a84f8406cd5e3252965d9e238575eaede"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00164.html#a84f8406cd5e3252965d9e238575eaede">try_put</a> (const X &t)</td></tr>
+<tr class="memdesc:a84f8406cd5e3252965d9e238575eaede"><td class="mdescLeft"> </td><td class="mdescRight">Put an item to the receiver. <br/></td></tr>
+<tr class="separator:a84f8406cd5e3252965d9e238575eaede"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae1c186c47aace8ad385c6bb6fdf3a14d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae1c186c47aace8ad385c6bb6fdf3a14d"></a>
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#ae1c186c47aace8ad385c6bb6fdf3a14d">register_predecessor</a> (<a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">predecessor_type</a> &)</td></tr>
+<tr class="memdesc:ae1c186c47aace8ad385c6bb6fdf3a14d"><td class="mdescLeft"> </td><td class="mdescRight">Add a predecessor to the node. <br/></td></tr>
+<tr class="separator:ae1c186c47aace8ad385c6bb6fdf3a14d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a18c7050e86d482a8aed57611e40d3c6f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18c7050e86d482a8aed57611e40d3c6f"></a>
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#a18c7050e86d482a8aed57611e40d3c6f">remove_predecessor</a> (<a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">predecessor_type</a> &)</td></tr>
+<tr class="memdesc:a18c7050e86d482a8aed57611e40d3c6f"><td class="mdescLeft"> </td><td class="mdescRight">Remove a predecessor from the node. <br/></td></tr>
+<tr class="separator:a18c7050e86d482a8aed57611e40d3c6f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad0a6ca8a4e51d898af87f6224389a99b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad0a6ca8a4e51d898af87f6224389a99b"></a>
+virtual <a class="el" href="a00056.html">built_predecessors_type</a> & </td><td class="memItemRight" valign="bottom"><b>built_predecessors</b> ()=0</td></tr>
+<tr class="separator:ad0a6ca8a4e51d898af87f6224389a99b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a663c3fb9fde8c10ee2dfbb9f64bb4c3d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a663c3fb9fde8c10ee2dfbb9f64bb4c3d"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_predecessor</b> (<a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">predecessor_type</a> &)=0</td></tr>
+<tr class="separator:a663c3fb9fde8c10ee2dfbb9f64bb4c3d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae52dbab036390bcf9a1bb098e46f6968"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae52dbab036390bcf9a1bb098e46f6968"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><b>internal_delete_built_predecessor</b> (<a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">predecessor_type</a> &)=0</td></tr>
+<tr class="separator:ae52dbab036390bcf9a1bb098e46f6968"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf22d3666630940c960b99bcb1efa0d3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf22d3666630940c960b99bcb1efa0d3"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><b>copy_predecessors</b> (predecessor_list_type &)=0</td></tr>
+<tr class="separator:acf22d3666630940c960b99bcb1efa0d3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1cc8ff6c5872be1497b50f4402ed8849"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1cc8ff6c5872be1497b50f4402ed8849"></a>
+virtual size_t </td><td class="memItemRight" valign="bottom"><b>predecessor_count</b> ()=0</td></tr>
+<tr class="separator:a1cc8ff6c5872be1497b50f4402ed8849"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:a7646cb0b0cc070a6dd962afbaaec3ec8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7646cb0b0cc070a6dd962afbaaec3ec8"></a>
-<a class="el" href="a00164.html">tbb_thread_v3</a>(<a class="el" href="a00164.html">tbb_thread_v3</a> <br class="typebreak"/>
-&&x) __TBB_NOEXCEPT(true) <br class="typebreak"/>
-<a class="el" href="a00164.html">tbb_thread_v3</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="a00164.html">tbb_thread_v3</a> &&x) __TBB_NOEXCEPT(true)</td></tr>
-<tr class="separator:a7646cb0b0cc070a6dd962afbaaec3ec8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:a999d560da68ba411a66954b40bd93b54"><td class="memTemplParams" colspan="2"><a class="anchor" id="a999d560da68ba411a66954b40bd93b54"></a>
+template<typename X > </td></tr>
+<tr class="memitem:a999d560da68ba411a66954b40bd93b54"><td class="memTemplItemLeft" align="right" valign="top">task * </td><td class="memTemplItemRight" valign="bottom"><b>try_put_task</b> (const X &t)</td></tr>
+<tr class="separator:a999d560da68ba411a66954b40bd93b54"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa1b7dd6316be246efb6ff2019b964fa9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa1b7dd6316be246efb6ff2019b964fa9"></a>
+virtual task * </td><td class="memItemRight" valign="bottom"><b>try_put_task_wrapper</b> (const void *p, bool is_async)=0</td></tr>
+<tr class="separator:aa1b7dd6316be246efb6ff2019b964fa9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2ddcd11694b38141f369af99498971ca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ddcd11694b38141f369af99498971ca"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#a2ddcd11694b38141f369af99498971ca">reset_receiver</a> (reset_flags f=rf_reset_protocol)=0</td></tr>
+<tr class="memdesc:a2ddcd11694b38141f369af99498971ca"><td class="mdescLeft"> </td><td class="mdescRight">put receiver back in initial state <br/></td></tr>
+<tr class="separator:a2ddcd11694b38141f369af99498971ca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa8e42f5803de722060c82edfcc6c9c75"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa8e42f5803de722060c82edfcc6c9c75"></a>
+virtual bool </td><td class="memItemRight" valign="bottom"><b>is_continue_receiver</b> ()</td></tr>
+<tr class="separator:aa8e42f5803de722060c82edfcc6c9c75"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
 Friends</h2></td></tr>
-<tr class="memitem:a9b8a2643aa337c0ec7f68cc2797a10ba"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9b8a2643aa337c0ec7f68cc2797a10ba"></a>
-void __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><b>move_v3</b> (<a class="el" href="a00164.html">tbb_thread_v3</a> &t1, <a class="el" href="a00164.html">tbb_thread_v3</a> &t2)</td></tr>
-<tr class="separator:a9b8a2643aa337c0ec7f68cc2797a10ba"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a190e47ee761e8647e79cdd3cccff618c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a190e47ee761e8647e79cdd3cccff618c"></a>
-void </td><td class="memItemRight" valign="bottom"><b>tbb::swap</b> (<a class="el" href="a00164.html">tbb_thread_v3</a> &t1, <a class="el" href="a00164.html">tbb_thread_v3</a> &t2) __TBB_NOEXCEPT(true)</td></tr>
-<tr class="separator:a190e47ee761e8647e79cdd3cccff618c"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Versioned thread class. </p>
-</div><h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="a23d7a420709b2e2b29b42dea897bd8bc"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">static unsigned __TBB_EXPORTED_FUNC tbb::internal::tbb_thread_v3::hardware_concurrency </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span></span>  </td>
-  </tr>
+<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplParams" colspan="2"><a class="anchor" id="abaf9bf74ca5f2854d09f5f07337280eb"></a>
+template<typename , typename > </td></tr>
+<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>run_and_put_task</b></td></tr>
+<tr class="separator:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a05ec930a348f7eed564236d00edbda24"><td class="memTemplParams" colspan="2"><a class="anchor" id="a05ec930a348f7eed564236d00edbda24"></a>
+template<typename > </td></tr>
+<tr class="memitem:a05ec930a348f7eed564236d00edbda24"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>limiter_node</b></td></tr>
+<tr class="separator:a05ec930a348f7eed564236d00edbda24"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1360e38efe396058978cf3754ad620f5"></a>
+template<typename , typename > </td></tr>
+<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::broadcast_cache</b></td></tr>
+<tr class="separator:a1360e38efe396058978cf3754ad620f5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplParams" colspan="2"><a class="anchor" id="acbd9ac2610587a99cd7d43344297cc49"></a>
+template<typename , typename > </td></tr>
+<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::round_robin_cache</b></td></tr>
+<tr class="separator:acbd9ac2610587a99cd7d43344297cc49"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a73cd25db4e6e9497940262f70f3ffc54"><td class="memTemplParams" colspan="2"><a class="anchor" id="a73cd25db4e6e9497940262f70f3ffc54"></a>
+template<typename , typename > </td></tr>
+<tr class="memitem:a73cd25db4e6e9497940262f70f3ffc54"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::successor_cache</b></td></tr>
+<tr class="separator:a73cd25db4e6e9497940262f70f3ffc54"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af80b784f4606fcda66eb0059fdf6af07"><td class="memTemplParams" colspan="2"><a class="anchor" id="af80b784f4606fcda66eb0059fdf6af07"></a>
+template<typename , typename > </td></tr>
+<tr class="memitem:af80b784f4606fcda66eb0059fdf6af07"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>proxy_dependency_receiver</b></td></tr>
+<tr class="separator:af80b784f4606fcda66eb0059fdf6af07"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-</div><div class="memdoc">
-
-<p>The number of hardware thread contexts. </p>
-<p>Before TBB 3.0 U4 this methods returned the number of logical CPU in the system. Currently on Windows, Linux and FreeBSD it returns the number of logical CPUs available to the current process in accordance with its affinity mask.</p>
-<p>NOTE: The return value of this method never changes after its first invocation. This means that changes in the process affinity mask that took place after this method was first invoked will not affect the number of worker threads in the TBB worker threads pool. </p>
-
-</div>
-</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>tbb_thread.h</li>
+<li><a class="el" href="a00188.html">flow_graph.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00164.png b/doc/html/a00164.png
new file mode 100644
index 0000000..7e6e14b
Binary files /dev/null and b/doc/html/a00164.png differ
diff --git a/doc/html/a00165.html b/doc/html/a00165.html
index 687461d..5b36003 100644
--- a/doc/html/a00165.html
+++ b/doc/html/a00165.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::thread_bound_filter Class Reference</title>
+<title>tbb::flow::interface9::internal::untyped_sender Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,7 +33,7 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00165.html">thread_bound_filter</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00165.html">untyped_sender</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
@@ -41,117 +41,110 @@
 <a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
 <a href="#pro-methods">Protected Member Functions</a> |
-<a href="a00290.html">List of all members</a>  </div>
+<a href="#friends">Friends</a> |
+<a href="a00353.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::thread_bound_filter Class Reference<div class="ingroups"><a class="el" href="a00255.html">Algorithms</a></div></div>  </div>
+<div class="title">tbb::flow::interface9::internal::untyped_sender Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>A stage in a pipeline served by a user thread.  
- <a href="a00165.html#details">More...</a></p>
-
-<p><code>#include <pipeline.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::thread_bound_filter:</div>
+Inheritance diagram for tbb::flow::interface9::internal::untyped_sender:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00165.png" usemap="#tbb::thread_bound_filter_map" alt=""/>
-  <map id="tbb::thread_bound_filter_map" name="tbb::thread_bound_filter_map">
-<area href="a00062.html" title="A stage in a pipeline. " alt="tbb::filter" shape="rect" coords="0,56,145,80"/>
+  <img src="a00165.png" usemap="#tbb::flow::interface9::internal::untyped_sender_map" alt=""/>
+  <map id="tbb::flow::interface9::internal::untyped_sender_map" name="tbb::flow::interface9::internal::untyped_sender_map">
+<area href="a00139.html" title="Pure virtual template class that defines a sender of messages of type T. " alt="tbb::flow::interface9::sender< T >" shape="rect" coords="0,56,266,80"/>
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
 Public Types</h2></td></tr>
-<tr class="memitem:a2425d6944a22a57c906945df57290e9d"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>result_type</b> { <b>success</b>, 
-<b>item_not_available</b>, 
-<b>end_of_stream</b>
- }</td></tr>
-<tr class="separator:a2425d6944a22a57c906945df57290e9d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7b4e68e6917207283f5c621e7053c7ea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b4e68e6917207283f5c621e7053c7ea"></a>
+typedef <a class="el" href="a00164.html">untyped_receiver</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html#a7b4e68e6917207283f5c621e7053c7ea">successor_type</a></td></tr>
+<tr class="memdesc:a7b4e68e6917207283f5c621e7053c7ea"><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <br/></td></tr>
+<tr class="separator:a7b4e68e6917207283f5c621e7053c7ea"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0d674709d3783ec5b42eb243069fed73"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0d674709d3783ec5b42eb243069fed73"></a>
+typedef <br class="typebreak"/>
+<a class="el" href="a00056.html">internal::edge_container</a><br class="typebreak"/>
+< <a class="el" href="a00165.html#a7b4e68e6917207283f5c621e7053c7ea">successor_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html#a0d674709d3783ec5b42eb243069fed73">built_successors_type</a></td></tr>
+<tr class="memdesc:a0d674709d3783ec5b42eb243069fed73"><td class="mdescLeft"> </td><td class="mdescRight">interface to record edges for traversal & deletion <br/></td></tr>
+<tr class="separator:a0d674709d3783ec5b42eb243069fed73"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab2b4041678d97545a6785d8d3fad01d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab2b4041678d97545a6785d8d3fad01d0"></a>
+typedef <br class="typebreak"/>
+built_successors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>successor_list_type</b></td></tr>
+<tr class="separator:ab2b4041678d97545a6785d8d3fad01d0"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a12cfa43c620066a8783529cc8519c6f9"><td class="memItemLeft" align="right" valign="top">result_type __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html#a12cfa43c620066a8783529cc8519c6f9">try_process_item</a> ()</td></tr>
-<tr class="memdesc:a12cfa43c620066a8783529cc8519c6f9"><td class="mdescLeft"> </td><td class="mdescRight">If a data item is available, invoke operator() on that item.  <a href="#a12cfa43c620066a8783529cc8519c6f9">More...</a><br/></td></tr>
-<tr class="separator:a12cfa43c620066a8783529cc8519c6f9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac99258407f382d84568a510075074fc7"><td class="memItemLeft" align="right" valign="top">result_type __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html#ac99258407f382d84568a510075074fc7">process_item</a> ()</td></tr>
-<tr class="memdesc:ac99258407f382d84568a510075074fc7"><td class="mdescLeft"> </td><td class="mdescRight">Wait until a data item becomes available, and invoke operator() on that item.  <a href="#ac99258407f382d84568a510075074fc7">More...</a><br/></td></tr>
-<tr class="separator:ac99258407f382d84568a510075074fc7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2298076f4c5e52a6c9c8a8e6fbfbd9de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2298076f4c5e52a6c9c8a8e6fbfbd9de"></a>
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html#a2298076f4c5e52a6c9c8a8e6fbfbd9de">register_successor</a> (<a class="el" href="a00165.html#a7b4e68e6917207283f5c621e7053c7ea">successor_type</a> &r)=0</td></tr>
+<tr class="memdesc:a2298076f4c5e52a6c9c8a8e6fbfbd9de"><td class="mdescLeft"> </td><td class="mdescRight">Add a new successor to this node. <br/></td></tr>
+<tr class="separator:a2298076f4c5e52a6c9c8a8e6fbfbd9de"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a32affec91647eba02f826f18f43e02e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a32affec91647eba02f826f18f43e02e5"></a>
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html#a32affec91647eba02f826f18f43e02e5">remove_successor</a> (<a class="el" href="a00165.html#a7b4e68e6917207283f5c621e7053c7ea">successor_type</a> &r)=0</td></tr>
+<tr class="memdesc:a32affec91647eba02f826f18f43e02e5"><td class="mdescLeft"> </td><td class="mdescRight">Removes a successor from this node. <br/></td></tr>
+<tr class="separator:a32affec91647eba02f826f18f43e02e5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac81ea252a8397324c865b035f67903ee"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac81ea252a8397324c865b035f67903ee"></a>
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html#ac81ea252a8397324c865b035f67903ee">try_release</a> ()</td></tr>
+<tr class="memdesc:ac81ea252a8397324c865b035f67903ee"><td class="mdescLeft"> </td><td class="mdescRight">Releases the reserved item. <br/></td></tr>
+<tr class="separator:ac81ea252a8397324c865b035f67903ee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acfb8e3669932e5866fb6afa603ff8250"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acfb8e3669932e5866fb6afa603ff8250"></a>
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html#acfb8e3669932e5866fb6afa603ff8250">try_consume</a> ()</td></tr>
+<tr class="memdesc:acfb8e3669932e5866fb6afa603ff8250"><td class="mdescLeft"> </td><td class="mdescRight">Consumes the reserved item. <br/></td></tr>
+<tr class="separator:acfb8e3669932e5866fb6afa603ff8250"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9cc32ffab2489f9d70edab006ee2df83"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9cc32ffab2489f9d70edab006ee2df83"></a>
+virtual <a class="el" href="a00165.html#a0d674709d3783ec5b42eb243069fed73">built_successors_type</a> & </td><td class="memItemRight" valign="bottom"><b>built_successors</b> ()=0</td></tr>
+<tr class="separator:a9cc32ffab2489f9d70edab006ee2df83"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac288603db6720be86ebf6cc1e9e4c5fd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac288603db6720be86ebf6cc1e9e4c5fd"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_successor</b> (<a class="el" href="a00165.html#a7b4e68e6917207283f5c621e7053c7ea">successor_type</a> &)=0</td></tr>
+<tr class="separator:ac288603db6720be86ebf6cc1e9e4c5fd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ace0532a9e923b5e733938db6adb7767c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ace0532a9e923b5e733938db6adb7767c"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><b>internal_delete_built_successor</b> (<a class="el" href="a00165.html#a7b4e68e6917207283f5c621e7053c7ea">successor_type</a> &)=0</td></tr>
+<tr class="separator:ace0532a9e923b5e733938db6adb7767c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a99384060eefdb259344dca4070146594"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a99384060eefdb259344dca4070146594"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><b>copy_successors</b> (successor_list_type &)=0</td></tr>
+<tr class="separator:a99384060eefdb259344dca4070146594"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a37871aa7dc631508ceb0e08ad052f596"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a37871aa7dc631508ceb0e08ad052f596"></a>
+virtual size_t </td><td class="memItemRight" valign="bottom"><b>successor_count</b> ()=0</td></tr>
+<tr class="separator:a37871aa7dc631508ceb0e08ad052f596"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
 Protected Member Functions</h2></td></tr>
-<tr class="memitem:a5f236956f85f28c783127c949e902610"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f236956f85f28c783127c949e902610"></a>
- </td><td class="memItemRight" valign="bottom"><b>thread_bound_filter</b> (mode filter_mode)</td></tr>
-<tr class="separator:a5f236956f85f28c783127c949e902610"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3c422ea58b7f11b6cc536539000a556e"><td class="memTemplParams" colspan="2"><a class="anchor" id="a3c422ea58b7f11b6cc536539000a556e"></a>
+template<typename X > </td></tr>
+<tr class="memitem:a3c422ea58b7f11b6cc536539000a556e"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00165.html#a3c422ea58b7f11b6cc536539000a556e">try_get</a> (X &t)</td></tr>
+<tr class="memdesc:a3c422ea58b7f11b6cc536539000a556e"><td class="mdescLeft"> </td><td class="mdescRight">Request an item from the sender. <br/></td></tr>
+<tr class="separator:a3c422ea58b7f11b6cc536539000a556e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad48b26c7dec4845e1cb374e9f1c59fea"><td class="memTemplParams" colspan="2"><a class="anchor" id="ad48b26c7dec4845e1cb374e9f1c59fea"></a>
+template<typename X > </td></tr>
+<tr class="memitem:ad48b26c7dec4845e1cb374e9f1c59fea"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00165.html#ad48b26c7dec4845e1cb374e9f1c59fea">try_reserve</a> (X &t)</td></tr>
+<tr class="memdesc:ad48b26c7dec4845e1cb374e9f1c59fea"><td class="mdescLeft"> </td><td class="mdescRight">Reserves an item in the sender. <br/></td></tr>
+<tr class="separator:ad48b26c7dec4845e1cb374e9f1c59fea"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a17b4154442ad56d01de962120dd4329e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a17b4154442ad56d01de962120dd4329e"></a>
+virtual bool </td><td class="memItemRight" valign="bottom"><b>try_get_wrapper</b> (void *p, bool is_async)=0</td></tr>
+<tr class="separator:a17b4154442ad56d01de962120dd4329e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0d18a17d1738a6dd0aa8ffee8a5a22d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0d18a17d1738a6dd0aa8ffee8a5a22d4"></a>
+virtual bool </td><td class="memItemRight" valign="bottom"><b>try_reserve_wrapper</b> (void *p, bool is_async)=0</td></tr>
+<tr class="separator:a0d18a17d1738a6dd0aa8ffee8a5a22d4"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pro_static_attribs_a00062"><td colspan="2" onclick="javascript:toggleInherit('pro_static_attribs_a00062')"><img src="closed.png" alt="-"/> Static Protected Attributes inherited from <a class="el" href="a00062.html">tbb::filter</a></td></tr>
-<tr class="memitem:ae9dab2e01b0963b341ab04b59eec1475 inherit pro_static_attribs_a00062"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae9dab2e01b0963b341ab04b59eec1475"></a>
-static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00062.html#ae9dab2e01b0963b341ab04b59eec1475">filter_is_serial</a> = 0x1</td></tr>
-<tr class="memdesc:ae9dab2e01b0963b341ab04b59eec1475 inherit pro_static_attribs_a00062"><td class="mdescLeft"> </td><td class="mdescRight">The lowest bit 0 is for parallel vs. serial. <br/></td></tr>
-<tr class="separator:ae9dab2e01b0963b341ab04b59eec1475 inherit pro_static_attribs_a00062"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a091fcf6abc79edfa5c8bf01f742e2392 inherit pro_static_attribs_a00062"><td class="memItemLeft" align="right" valign="top">static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00062.html#a091fcf6abc79edfa5c8bf01f742e2392">filter_is_out_of_order</a> = 0x1<<4</td></tr>
-<tr class="memdesc:a091fcf6abc79edfa5c8bf01f742e2392 inherit pro_static_attribs_a00062"><td class="mdescLeft"> </td><td class="mdescRight">4th bit distinguishes ordered vs unordered filters.  <a href="#a091fcf6abc79edfa5c8bf01f742e2392">More...</a><br/></td></tr>
-<tr class="separator:a091fcf6abc79edfa5c8bf01f742e2392 inherit pro_static_attribs_a00062"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1382f216bd094064a18eb48ecc43c86b inherit pro_static_attribs_a00062"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1382f216bd094064a18eb48ecc43c86b"></a>
-static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00062.html#a1382f216bd094064a18eb48ecc43c86b">filter_is_bound</a> = 0x1<<5</td></tr>
-<tr class="memdesc:a1382f216bd094064a18eb48ecc43c86b inherit pro_static_attribs_a00062"><td class="mdescLeft"> </td><td class="mdescRight">5th bit distinguishes thread-bound and regular filters. <br/></td></tr>
-<tr class="separator:a1382f216bd094064a18eb48ecc43c86b inherit pro_static_attribs_a00062"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6645ec56872b6ba2056dcaa467e292f7 inherit pro_static_attribs_a00062"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6645ec56872b6ba2056dcaa467e292f7"></a>
-static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00062.html#a6645ec56872b6ba2056dcaa467e292f7">filter_may_emit_null</a> = 0x1<<6</td></tr>
-<tr class="memdesc:a6645ec56872b6ba2056dcaa467e292f7 inherit pro_static_attribs_a00062"><td class="mdescLeft"> </td><td class="mdescRight">6th bit marks input filters emitting small objects <br/></td></tr>
-<tr class="separator:a6645ec56872b6ba2056dcaa467e292f7 inherit pro_static_attribs_a00062"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aab9689e23a96c6c9bf1c8caae74d92ee inherit pro_static_attribs_a00062"><td class="memItemLeft" align="right" valign="top">static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00062.html#aab9689e23a96c6c9bf1c8caae74d92ee">exact_exception_propagation</a></td></tr>
-<tr class="memdesc:aab9689e23a96c6c9bf1c8caae74d92ee inherit pro_static_attribs_a00062"><td class="mdescLeft"> </td><td class="mdescRight">7th bit defines exception propagation mode expected by the application.  <a href="#aab9689e23a96c6c9bf1c8caae74d92ee">More...</a><br/></td></tr>
-<tr class="separator:aab9689e23a96c6c9bf1c8caae74d92ee inherit pro_static_attribs_a00062"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a3cdf409b9c27b036b9cb0fd9ae00a4a8"><td class="memTemplParams" colspan="2"><a class="anchor" id="a3cdf409b9c27b036b9cb0fd9ae00a4a8"></a>
+template<typename , typename > </td></tr>
+<tr class="memitem:a3cdf409b9c27b036b9cb0fd9ae00a4a8"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::predecessor_cache</b></td></tr>
+<tr class="separator:a3cdf409b9c27b036b9cb0fd9ae00a4a8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3175bd06b97cbe15f7135fa6e0960d19"><td class="memTemplParams" colspan="2"><a class="anchor" id="a3175bd06b97cbe15f7135fa6e0960d19"></a>
+template<typename , typename > </td></tr>
+<tr class="memitem:a3175bd06b97cbe15f7135fa6e0960d19"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::reservable_predecessor_cache</b></td></tr>
+<tr class="separator:a3175bd06b97cbe15f7135fa6e0960d19"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>A stage in a pipeline served by a user thread. </p>
-</div><h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="ac99258407f382d84568a510075074fc7"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">result_type __TBB_EXPORTED_METHOD tbb::thread_bound_filter::process_item </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Wait until a data item becomes available, and invoke operator() on that item. </p>
-<p>This interface is blocking. Returns 'success' if an item was processed. Returns 'end_of_stream' if there are no more items to process. Never returns 'item_not_available', as it blocks until another return condition applies. </p>
-
-</div>
-</div>
-<a class="anchor" id="a12cfa43c620066a8783529cc8519c6f9"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">result_type __TBB_EXPORTED_METHOD tbb::thread_bound_filter::try_process_item </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>If a data item is available, invoke operator() on that item. </p>
-<p>This interface is non-blocking. Returns 'success' if an item was processed. Returns 'item_not_available' if no item can be processed now but more may arrive in the future, or if token limit is reached. Returns 'end_of_stream' if there are no more items to process. </p>
-
-</div>
-</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
-<li>pipeline.h</li>
+<li><a class="el" href="a00188.html">flow_graph.h</a></li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00165.png b/doc/html/a00165.png
index 7eab1d5..edb5622 100644
Binary files a/doc/html/a00165.png and b/doc/html/a00165.png differ
diff --git a/doc/html/a00166.html b/doc/html/a00166.html
index 0678f9c..e16070a 100644
--- a/doc/html/a00166.html
+++ b/doc/html/a00166.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::internal::thread_closure_0< F > Struct Template Reference</title>
+<title>tbb::interface5::internal::use_element_copy_constructor< T, C > Struct Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,61 +33,34 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00166.html">thread_closure_0</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00166.html">use_element_copy_constructor</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-static-methods">Static Public Member Functions</a> |
-<a href="#pub-attribs">Public Attributes</a> |
-<a href="a00416.html">List of all members</a>  </div>
+<a href="#pub-types">Public Types</a> |
+<a href="a00372.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::internal::thread_closure_0< F > Struct Template Reference</div>  </div>
+<div class="title">tbb::interface5::internal::use_element_copy_constructor< T, C > Struct Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="dynheader">
-Inheritance diagram for tbb::internal::thread_closure_0< F >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00166.png" usemap="#tbb::internal::thread_closure_0< F >_map" alt=""/>
-  <map id="tbb::internal::thread_closure_0< F >_map" name="tbb::internal::thread_closure_0< F >_map">
-<area href="a00169.html" alt="tbb::internal::thread_closure_base" shape="rect" coords="0,0,214,24"/>
-</map>
- </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a538aa9db5b40cf64cdafc0af0649a7f2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a538aa9db5b40cf64cdafc0af0649a7f2"></a>
- </td><td class="memItemRight" valign="bottom"><b>thread_closure_0</b> (const F &f)</td></tr>
-<tr class="separator:a538aa9db5b40cf64cdafc0af0649a7f2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00169"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00169')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00169.html">tbb::internal::thread_closure_base</a></td></tr>
-<tr class="memitem:a624f5a5a40051faf39444ad3a9f36df5 inherit pub_methods_a00169"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a624f5a5a40051faf39444ad3a9f36df5"></a>
-void * </td><td class="memItemRight" valign="bottom"><b>operator new</b> (size_t size)</td></tr>
-<tr class="separator:a624f5a5a40051faf39444ad3a9f36df5 inherit pub_methods_a00169"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a56e1bfd2ca46abcc3c3f265eff10360d inherit pub_methods_a00169"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a56e1bfd2ca46abcc3c3f265eff10360d"></a>
-void </td><td class="memItemRight" valign="bottom"><b>operator delete</b> (void *ptr)</td></tr>
-<tr class="separator:a56e1bfd2ca46abcc3c3f265eff10360d inherit pub_methods_a00169"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
-Static Public Member Functions</h2></td></tr>
-<tr class="memitem:a4b9e7370103f473212ccb10e65d676fb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4b9e7370103f473212ccb10e65d676fb"></a>
-static __TBB_NATIVE_THREAD_ROUTINE </td><td class="memItemRight" valign="bottom"><b>start_routine</b> (void *c)</td></tr>
-<tr class="separator:a4b9e7370103f473212ccb10e65d676fb"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:aff55f3266cccfbb2d296aa9b07239ce8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aff55f3266cccfbb2d296aa9b07239ce8"></a>
-F </td><td class="memItemRight" valign="bottom"><b>function</b></td></tr>
-<tr class="separator:aff55f3266cccfbb2d296aa9b07239ce8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a25d9b19a018725ea8696ac4124a1780b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a25d9b19a018725ea8696ac4124a1780b"></a>
+typedef tbb::internal::true_type </td><td class="memItemRight" valign="bottom"><b>type</b></td></tr>
+<tr class="separator:a25d9b19a018725ea8696ac4124a1780b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a25d9b19a018725ea8696ac4124a1780b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a25d9b19a018725ea8696ac4124a1780b"></a>
+typedef tbb::internal::true_type </td><td class="memItemRight" valign="bottom"><b>type</b></td></tr>
+<tr class="separator:a25d9b19a018725ea8696ac4124a1780b"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <hr/>The documentation for this struct was generated from the following file:<ul>
-<li>tbb_thread.h</li>
+<li>concurrent_priority_queue.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00167.html b/doc/html/a00167.html
index d8272be..a703e4e 100644
--- a/doc/html/a00167.html
+++ b/doc/html/a00167.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::internal::thread_closure_1< F, X > Struct Template Reference</title>
+<title>tbb::interface5::internal::use_element_copy_constructor< T, false > Struct Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,75 +33,31 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00167.html">thread_closure_1</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00167.html">use_element_copy_constructor< T, false ></a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-static-methods">Static Public Member Functions</a> |
-<a href="#pub-attribs">Public Attributes</a> |
-<a href="a00417.html">List of all members</a>  </div>
+<a href="#pub-types">Public Types</a> |
+<a href="a00373.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::internal::thread_closure_1< F, X > Struct Template Reference</div>  </div>
+<div class="title">tbb::interface5::internal::use_element_copy_constructor< T, false > Struct Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
-
-<p>Structure used to pass user function with 1 argument to thread.  
- <a href="a00167.html#details">More...</a></p>
-
-<p><code>#include <tbb_thread.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::internal::thread_closure_1< F, X >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00167.png" usemap="#tbb::internal::thread_closure_1< F, X >_map" alt=""/>
-  <map id="tbb::internal::thread_closure_1< F, X >_map" name="tbb::internal::thread_closure_1< F, X >_map">
-<area href="a00169.html" alt="tbb::internal::thread_closure_base" shape="rect" coords="0,0,232,24"/>
-</map>
- </div></div>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:afef38584bcf65f3f71700cfec80b8b18"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afef38584bcf65f3f71700cfec80b8b18"></a>
- </td><td class="memItemRight" valign="bottom"><b>thread_closure_1</b> (const F &f, const X &x)</td></tr>
-<tr class="separator:afef38584bcf65f3f71700cfec80b8b18"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00169"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00169')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00169.html">tbb::internal::thread_closure_base</a></td></tr>
-<tr class="memitem:a624f5a5a40051faf39444ad3a9f36df5 inherit pub_methods_a00169"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a624f5a5a40051faf39444ad3a9f36df5"></a>
-void * </td><td class="memItemRight" valign="bottom"><b>operator new</b> (size_t size)</td></tr>
-<tr class="separator:a624f5a5a40051faf39444ad3a9f36df5 inherit pub_methods_a00169"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a56e1bfd2ca46abcc3c3f265eff10360d inherit pub_methods_a00169"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a56e1bfd2ca46abcc3c3f265eff10360d"></a>
-void </td><td class="memItemRight" valign="bottom"><b>operator delete</b> (void *ptr)</td></tr>
-<tr class="separator:a56e1bfd2ca46abcc3c3f265eff10360d inherit pub_methods_a00169"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
-Static Public Member Functions</h2></td></tr>
-<tr class="memitem:a33d533b3301c45708c6252d040f855a6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a33d533b3301c45708c6252d040f855a6"></a>
-static __TBB_NATIVE_THREAD_ROUTINE </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#a33d533b3301c45708c6252d040f855a6">start_routine</a> (void *c)</td></tr>
-<tr class="memdesc:a33d533b3301c45708c6252d040f855a6"><td class="mdescLeft"> </td><td class="mdescRight">Routine passed to Windows's _beginthreadex by thread::internal_start() inside tbb.dll. <br/></td></tr>
-<tr class="separator:a33d533b3301c45708c6252d040f855a6"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:a39a5a39b2a7513868944ffe7ffd89640"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a39a5a39b2a7513868944ffe7ffd89640"></a>
-F </td><td class="memItemRight" valign="bottom"><b>function</b></td></tr>
-<tr class="separator:a39a5a39b2a7513868944ffe7ffd89640"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a607886c68ca8bdd984b9b4f6ec744dea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a607886c68ca8bdd984b9b4f6ec744dea"></a>
-X </td><td class="memItemRight" valign="bottom"><b>arg1</b></td></tr>
-<tr class="separator:a607886c68ca8bdd984b9b4f6ec744dea"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a9e9ba0ae863e93a1e02e6a98d5ad4865"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9e9ba0ae863e93a1e02e6a98d5ad4865"></a>
+typedef tbb::internal::false_type </td><td class="memItemRight" valign="bottom"><b>type</b></td></tr>
+<tr class="separator:a9e9ba0ae863e93a1e02e6a98d5ad4865"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<class F, class X><br/>
-struct tbb::internal::thread_closure_1< F, X ></h3>
-
-<p>Structure used to pass user function with 1 argument to thread. </p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>tbb_thread.h</li>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>concurrent_priority_queue.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00168.html b/doc/html/a00168.html
index 51080a1..1882577 100644
--- a/doc/html/a00168.html
+++ b/doc/html/a00168.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::internal::thread_closure_2< F, X, Y > Struct Template Reference</title>
+<title>tbb::user_abort Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,68 +33,46 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00168.html">thread_closure_2</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00168.html">user_abort</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-static-methods">Static Public Member Functions</a> |
-<a href="#pub-attribs">Public Attributes</a> |
-<a href="a00418.html">List of all members</a>  </div>
+<a href="a00315.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::internal::thread_closure_2< F, X, Y > Struct Template Reference</div>  </div>
+<div class="title">tbb::user_abort Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
+
+<p>Exception for user-initiated abort.  
+ <a href="a00168.html#details">More...</a></p>
+
+<p><code>#include <tbb_exception.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::internal::thread_closure_2< F, X, Y >:</div>
+Inheritance diagram for tbb::user_abort:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00168.png" usemap="#tbb::internal::thread_closure_2< F, X, Y >_map" alt=""/>
-  <map id="tbb::internal::thread_closure_2< F, X, Y >_map" name="tbb::internal::thread_closure_2< F, X, Y >_map">
-<area href="a00169.html" alt="tbb::internal::thread_closure_base" shape="rect" coords="0,0,250,24"/>
+  <img src="a00168.png" usemap="#tbb::user_abort_map" alt=""/>
+  <map id="tbb::user_abort_map" name="tbb::user_abort_map">
 </map>
  </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:aa5f65ba1d019063487f425021ca2ba59"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa5f65ba1d019063487f425021ca2ba59"></a>
- </td><td class="memItemRight" valign="bottom"><b>thread_closure_2</b> (const F &f, const X &x, const Y &y)</td></tr>
-<tr class="separator:aa5f65ba1d019063487f425021ca2ba59"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00169"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00169')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00169.html">tbb::internal::thread_closure_base</a></td></tr>
-<tr class="memitem:a624f5a5a40051faf39444ad3a9f36df5 inherit pub_methods_a00169"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a624f5a5a40051faf39444ad3a9f36df5"></a>
-void * </td><td class="memItemRight" valign="bottom"><b>operator new</b> (size_t size)</td></tr>
-<tr class="separator:a624f5a5a40051faf39444ad3a9f36df5 inherit pub_methods_a00169"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a56e1bfd2ca46abcc3c3f265eff10360d inherit pub_methods_a00169"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a56e1bfd2ca46abcc3c3f265eff10360d"></a>
-void </td><td class="memItemRight" valign="bottom"><b>operator delete</b> (void *ptr)</td></tr>
-<tr class="separator:a56e1bfd2ca46abcc3c3f265eff10360d inherit pub_methods_a00169"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
-Static Public Member Functions</h2></td></tr>
-<tr class="memitem:a29003179f98d768622c72b9ab5cfe8f6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a29003179f98d768622c72b9ab5cfe8f6"></a>
-static __TBB_NATIVE_THREAD_ROUTINE </td><td class="memItemRight" valign="bottom"><a class="el" href="a00168.html#a29003179f98d768622c72b9ab5cfe8f6">start_routine</a> (void *c)</td></tr>
-<tr class="memdesc:a29003179f98d768622c72b9ab5cfe8f6"><td class="mdescLeft"> </td><td class="mdescRight">Routine passed to Windows's _beginthreadex by thread::internal_start() inside tbb.dll. <br/></td></tr>
-<tr class="separator:a29003179f98d768622c72b9ab5cfe8f6"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:a247bf0a01f8a390031b71c9b85fb8b24"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a247bf0a01f8a390031b71c9b85fb8b24"></a>
-F </td><td class="memItemRight" valign="bottom"><b>function</b></td></tr>
-<tr class="separator:a247bf0a01f8a390031b71c9b85fb8b24"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a36f694b6dcc91c92b09d3deee24e4732"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a36f694b6dcc91c92b09d3deee24e4732"></a>
-X </td><td class="memItemRight" valign="bottom"><b>arg1</b></td></tr>
-<tr class="separator:a36f694b6dcc91c92b09d3deee24e4732"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a47f0e53fc6b9026d9529a3bf1cc4fa72"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a47f0e53fc6b9026d9529a3bf1cc4fa72"></a>
-Y </td><td class="memItemRight" valign="bottom"><b>arg2</b></td></tr>
-<tr class="separator:a47f0e53fc6b9026d9529a3bf1cc4fa72"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1c748ebe62fc8bff1e194adcb21c5a8a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1c748ebe62fc8bff1e194adcb21c5a8a"></a>
+const char * </td><td class="memItemRight" valign="bottom"><b>what</b> () const __TBB_override  throw ()</td></tr>
+<tr class="separator:a1c748ebe62fc8bff1e194adcb21c5a8a"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<hr/>The documentation for this struct was generated from the following file:<ul>
-<li>tbb_thread.h</li>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Exception for user-initiated abort. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>tbb_exception.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00168.png b/doc/html/a00168.png
index aa52099..a1f2334 100644
Binary files a/doc/html/a00168.png and b/doc/html/a00168.png differ
diff --git a/doc/html/a00169.html b/doc/html/a00169.html
index 3c15612..e9ebc47 100644
--- a/doc/html/a00169.html
+++ b/doc/html/a00169.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::internal::thread_closure_base Struct Reference</title>
+<title>tbb::zero_allocator< T, Allocator > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,45 +33,98 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00169.html">thread_closure_base</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00169.html">zero_allocator</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#pub-types">Public Types</a> |
 <a href="#pub-methods">Public Member Functions</a> |
-<a href="a00415.html">List of all members</a>  </div>
+<a href="a00309.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::internal::thread_closure_base Struct Reference</div>  </div>
+<div class="title">tbb::zero_allocator< T, Allocator > Class Template Reference<div class="ingroups"><a class="el" href="a00254.html">Memory Allocation</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
+
+<p>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  
+ <a href="a00169.html#details">More...</a></p>
+
+<p><code>#include <tbb_allocator.h></code></p>
 <div class="dynheader">
-Inheritance diagram for tbb::internal::thread_closure_base:</div>
+Inheritance diagram for tbb::zero_allocator< T, Allocator >:</div>
 <div class="dyncontent">
  <div class="center">
-  <img src="a00169.png" usemap="#tbb::internal::thread_closure_base_map" alt=""/>
-  <map id="tbb::internal::thread_closure_base_map" name="tbb::internal::thread_closure_base_map">
-<area href="a00166.html" alt="tbb::internal::thread_closure_0< F >" shape="rect" coords="0,56,250,80"/>
-<area href="a00167.html" title="Structure used to pass user function with 1 argument to thread. " alt="tbb::internal::thread_closure_1< F, X >" shape="rect" coords="260,56,510,80"/>
-<area href="a00168.html" alt="tbb::internal::thread_closure_2< F, X, Y >" shape="rect" coords="520,56,770,80"/>
+  <img src="a00169.png" usemap="#tbb::zero_allocator< T, Allocator >_map" alt=""/>
+  <map id="tbb::zero_allocator< T, Allocator >_map" name="tbb::zero_allocator< T, Allocator >_map">
 </map>
  </div></div>
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00110.html">rebind</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a62f27899a40c4bfaa6ba4313ffc833ef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a62f27899a40c4bfaa6ba4313ffc833ef"></a>
+typedef Allocator< T > </td><td class="memItemRight" valign="bottom"><b>base_allocator_type</b></td></tr>
+<tr class="separator:a62f27899a40c4bfaa6ba4313ffc833ef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a906f5c2d47fff1bf4fd868a2441752d1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a906f5c2d47fff1bf4fd868a2441752d1"></a>
+typedef <br class="typebreak"/>
+base_allocator_type::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+<tr class="separator:a906f5c2d47fff1bf4fd868a2441752d1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afb9458462ffca5d8734968862c9c4e6b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afb9458462ffca5d8734968862c9c4e6b"></a>
+typedef <br class="typebreak"/>
+base_allocator_type::pointer </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+<tr class="separator:afb9458462ffca5d8734968862c9c4e6b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2a08548bf83e153b40029de72738b60f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2a08548bf83e153b40029de72738b60f"></a>
+typedef <br class="typebreak"/>
+base_allocator_type::const_pointer </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+<tr class="separator:a2a08548bf83e153b40029de72738b60f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0afb88e128fc595c62f24e34f445d834"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0afb88e128fc595c62f24e34f445d834"></a>
+typedef <br class="typebreak"/>
+base_allocator_type::reference </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+<tr class="separator:a0afb88e128fc595c62f24e34f445d834"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a28180fc12dc69c275983f6400526ba01"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28180fc12dc69c275983f6400526ba01"></a>
+typedef <br class="typebreak"/>
+base_allocator_type::const_reference </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
+<tr class="separator:a28180fc12dc69c275983f6400526ba01"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8e741b3db82dfdce3f68cfd6d66901ce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8e741b3db82dfdce3f68cfd6d66901ce"></a>
+typedef <br class="typebreak"/>
+base_allocator_type::size_type </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
+<tr class="separator:a8e741b3db82dfdce3f68cfd6d66901ce"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aba68dc670e813a0c5c7f06e262b66187"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba68dc670e813a0c5c7f06e262b66187"></a>
+typedef <br class="typebreak"/>
+base_allocator_type::difference_type </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
+<tr class="separator:aba68dc670e813a0c5c7f06e262b66187"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a624f5a5a40051faf39444ad3a9f36df5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a624f5a5a40051faf39444ad3a9f36df5"></a>
-void * </td><td class="memItemRight" valign="bottom"><b>operator new</b> (size_t size)</td></tr>
-<tr class="separator:a624f5a5a40051faf39444ad3a9f36df5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a56e1bfd2ca46abcc3c3f265eff10360d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a56e1bfd2ca46abcc3c3f265eff10360d"></a>
-void </td><td class="memItemRight" valign="bottom"><b>operator delete</b> (void *ptr)</td></tr>
-<tr class="separator:a56e1bfd2ca46abcc3c3f265eff10360d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9080a874dd20d0ca8e404683113990f2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9080a874dd20d0ca8e404683113990f2"></a>
+ </td><td class="memItemRight" valign="bottom"><b>zero_allocator</b> (const <a class="el" href="a00169.html">zero_allocator</a> &a)  throw ()</td></tr>
+<tr class="separator:a9080a874dd20d0ca8e404683113990f2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab417c217e597c6f412c5a630ba18bc32"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab417c217e597c6f412c5a630ba18bc32"></a>
+template<typename U > </td></tr>
+<tr class="memitem:ab417c217e597c6f412c5a630ba18bc32"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>zero_allocator</b> (const <a class="el" href="a00169.html">zero_allocator</a>< U > &a)  throw ()</td></tr>
+<tr class="separator:ab417c217e597c6f412c5a630ba18bc32"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1b9fe1273c2332e3c0b571d7bf1ba615"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1b9fe1273c2332e3c0b571d7bf1ba615"></a>
+pointer </td><td class="memItemRight" valign="bottom"><b>allocate</b> (const size_type n, const void *hint=0)</td></tr>
+<tr class="separator:a1b9fe1273c2332e3c0b571d7bf1ba615"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
-<hr/>The documentation for this struct was generated from the following file:<ul>
-<li>tbb_thread.h</li>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><h3>template<typename T, template< typename X > class Allocator = tbb_allocator><br/>
+class tbb::zero_allocator< T, Allocator ></h3>
+
+<p>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. </p>
+<p>The class is an adapter over an actual allocator that fills the allocation using memset function with template argument C as the value. The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li>tbb_allocator.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00169.png b/doc/html/a00169.png
index 0324577..f03aec2 100644
Binary files a/doc/html/a00169.png and b/doc/html/a00169.png differ
diff --git a/doc/html/a00170.html b/doc/html/a00170.html
index b41d500..67aee34 100644
--- a/doc/html/a00170.html
+++ b/doc/html/a00170.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::tick_count Class Reference</title>
+<title>tbb::zero_allocator< void, Allocator > Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -33,66 +33,67 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00170.html">tick_count</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00170.html">zero_allocator< void, Allocator ></a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#nested-classes">Classes</a> |
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-static-methods">Static Public Member Functions</a> |
-<a href="#friends">Friends</a> |
-<a href="a00326.html">List of all members</a>  </div>
+<a href="#pub-types">Public Types</a> |
+<a href="a00311.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tbb::tick_count Class Reference<div class="ingroups"><a class="el" href="a00259.html">Timing</a></div></div>  </div>
+<div class="title">tbb::zero_allocator< void, Allocator > Class Template Reference<div class="ingroups"><a class="el" href="a00254.html">Memory Allocation</a></div></div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>Absolute timestamp.  
+<p>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  
  <a href="a00170.html#details">More...</a></p>
 
-<p><code>#include <tick_count.h></code></p>
+<p><code>#include <tbb_allocator.h></code></p>
+<div class="dynheader">
+Inheritance diagram for tbb::zero_allocator< void, Allocator >:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="a00170.png" usemap="#tbb::zero_allocator< void, Allocator >_map" alt=""/>
+  <map id="tbb::zero_allocator< void, Allocator >_map" name="tbb::zero_allocator< void, Allocator >_map">
+</map>
+ </div></div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
 Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00085.html">interval_t</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Relative time interval.  <a href="a00085.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00117.html">rebind</a></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a9f1daa0b7a4feb800f802b4be1f1e497"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9f1daa0b7a4feb800f802b4be1f1e497"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#a9f1daa0b7a4feb800f802b4be1f1e497">tick_count</a> ()</td></tr>
-<tr class="memdesc:a9f1daa0b7a4feb800f802b4be1f1e497"><td class="mdescLeft"> </td><td class="mdescRight">Construct an absolute timestamp initialized to zero. <br/></td></tr>
-<tr class="separator:a9f1daa0b7a4feb800f802b4be1f1e497"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
-Static Public Member Functions</h2></td></tr>
-<tr class="memitem:a74dcecde7431ff4591d7c46fc1d50d7e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74dcecde7431ff4591d7c46fc1d50d7e"></a>
-static <a class="el" href="a00170.html">tick_count</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#a74dcecde7431ff4591d7c46fc1d50d7e">now</a> ()</td></tr>
-<tr class="memdesc:a74dcecde7431ff4591d7c46fc1d50d7e"><td class="mdescLeft"> </td><td class="mdescRight">Return current time. <br/></td></tr>
-<tr class="separator:a74dcecde7431ff4591d7c46fc1d50d7e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aaf6a0d91e7d40f7d68e0ad6b79350e58"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaf6a0d91e7d40f7d68e0ad6b79350e58"></a>
-static double </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#aaf6a0d91e7d40f7d68e0ad6b79350e58">resolution</a> ()</td></tr>
-<tr class="memdesc:aaf6a0d91e7d40f7d68e0ad6b79350e58"><td class="mdescLeft"> </td><td class="mdescRight">Return the resolution of the clock in seconds per tick. <br/></td></tr>
-<tr class="separator:aaf6a0d91e7d40f7d68e0ad6b79350e58"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:ab5ceaed3ebf5a0d41088a5bc7c8dc653"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5ceaed3ebf5a0d41088a5bc7c8dc653"></a>
-<a class="el" href="a00085.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653">operator-</a> (const <a class="el" href="a00170.html">tick_count</a> &t1, const <a class="el" href="a00170.html">tick_count</a> &t0)</td></tr>
-<tr class="memdesc:ab5ceaed3ebf5a0d41088a5bc7c8dc653"><td class="mdescLeft"> </td><td class="mdescRight">Subtract two timestamps to get the time interval between. <br/></td></tr>
-<tr class="separator:ab5ceaed3ebf5a0d41088a5bc7c8dc653"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:ad760fbbdefc95c096c94521316e9e091"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad760fbbdefc95c096c94521316e9e091"></a>
+typedef Allocator< void > </td><td class="memItemRight" valign="bottom"><b>base_allocator_type</b></td></tr>
+<tr class="separator:ad760fbbdefc95c096c94521316e9e091"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a392c9d2f51594e7372e5e73e4bf805ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a392c9d2f51594e7372e5e73e4bf805ff"></a>
+typedef <br class="typebreak"/>
+base_allocator_type::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+<tr class="separator:a392c9d2f51594e7372e5e73e4bf805ff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa6c02215a540d3f5dd4cb4739bd05bcf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa6c02215a540d3f5dd4cb4739bd05bcf"></a>
+typedef <br class="typebreak"/>
+base_allocator_type::pointer </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+<tr class="separator:aa6c02215a540d3f5dd4cb4739bd05bcf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0f2fa4e1a995d60f763595ef4b91dd9a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0f2fa4e1a995d60f763595ef4b91dd9a"></a>
+typedef <br class="typebreak"/>
+base_allocator_type::const_pointer </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+<tr class="separator:a0f2fa4e1a995d60f763595ef4b91dd9a"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Absolute timestamp. </p>
+<div class="textblock"><h3>template<template< typename T > class Allocator><br/>
+class tbb::zero_allocator< void, Allocator ></h3>
+
+<p>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. </p>
 </div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>tick_count.h</li>
+<li>tbb_allocator.h</li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00178.png b/doc/html/a00170.png
similarity index 100%
rename from doc/html/a00178.png
rename to doc/html/a00170.png
diff --git a/doc/html/a00171.html b/doc/html/a00171.html
deleted file mode 100644
index f659998..0000000
--- a/doc/html/a00171.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface5::internal::use_element_copy_constructor< T, C > Struct Template Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00171.html">use_element_copy_constructor</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-types">Public Types</a> |
-<a href="a00386.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">tbb::interface5::internal::use_element_copy_constructor< T, C > Struct Template Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a25d9b19a018725ea8696ac4124a1780b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a25d9b19a018725ea8696ac4124a1780b"></a>
-typedef tbb::internal::true_type </td><td class="memItemRight" valign="bottom"><b>type</b></td></tr>
-<tr class="separator:a25d9b19a018725ea8696ac4124a1780b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a25d9b19a018725ea8696ac4124a1780b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a25d9b19a018725ea8696ac4124a1780b"></a>
-typedef tbb::internal::true_type </td><td class="memItemRight" valign="bottom"><b>type</b></td></tr>
-<tr class="separator:a25d9b19a018725ea8696ac4124a1780b"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<hr/>The documentation for this struct was generated from the following file:<ul>
-<li>concurrent_priority_queue.h</li>
-</ul>
-</div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00172.html b/doc/html/a00172.html
deleted file mode 100644
index 2dc6f10..0000000
--- a/doc/html/a00172.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface5::internal::use_element_copy_constructor< T, false > Struct Template Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00172.html">use_element_copy_constructor< T, false ></a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-types">Public Types</a> |
-<a href="a00387.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">tbb::interface5::internal::use_element_copy_constructor< T, false > Struct Template Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a9e9ba0ae863e93a1e02e6a98d5ad4865"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9e9ba0ae863e93a1e02e6a98d5ad4865"></a>
-typedef tbb::internal::false_type </td><td class="memItemRight" valign="bottom"><b>type</b></td></tr>
-<tr class="separator:a9e9ba0ae863e93a1e02e6a98d5ad4865"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<hr/>The documentation for this struct was generated from the following file:<ul>
-<li>concurrent_priority_queue.h</li>
-</ul>
-</div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00173.html b/doc/html/a00173.html
deleted file mode 100644
index 8b487c6..0000000
--- a/doc/html/a00173.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::user_abort Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00173.html">user_abort</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="a00320.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">tbb::user_abort Class Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Exception for user-initiated abort.  
- <a href="a00173.html#details">More...</a></p>
-
-<p><code>#include <tbb_exception.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::user_abort:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00173.png" usemap="#tbb::user_abort_map" alt=""/>
-  <map id="tbb::user_abort_map" name="tbb::user_abort_map">
-</map>
- </div></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a8e27e7ca7fd8f821c4e5c40266ed16f9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8e27e7ca7fd8f821c4e5c40266ed16f9"></a>
-const char * </td><td class="memItemRight" valign="bottom"><b>what</b> () const   throw ()</td></tr>
-<tr class="separator:a8e27e7ca7fd8f821c4e5c40266ed16f9"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Exception for user-initiated abort. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>tbb_exception.h</li>
-</ul>
-</div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00173.png b/doc/html/a00173.png
deleted file mode 100644
index a1f2334..0000000
Binary files a/doc/html/a00173.png and /dev/null differ
diff --git a/doc/html/a00174.html b/doc/html/a00174.html
deleted file mode 100644
index 512a3f0..0000000
--- a/doc/html/a00174.html
+++ /dev/null
@@ -1,91 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >::value_compare Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00048.html">concurrent_unordered_map_traits</a></li><li class="navelem"><a class="el" href="a00174.html">value_compare</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-attribs">Protected Attributes</a> |
-<a href="#friends">Friends</a> |
-<a href="a00377.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >::value_compare Class Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="dynheader">
-Inheritance diagram for tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >::value_compare:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00174.png" usemap="#tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >::value_compare_map" alt=""/>
-  <map id="tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >::value_compare_map" name="tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >::value_compare_map">
-</map>
- </div></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:ab45af27d6a7ce27dfdd5cd86b9e242a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab45af27d6a7ce27dfdd5cd86b9e242a4"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>operator()</b> (const value_type &left, const value_type &right) const </td></tr>
-<tr class="separator:ab45af27d6a7ce27dfdd5cd86b9e242a4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a950d35402dcfda797180cfa504e62696"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a950d35402dcfda797180cfa504e62696"></a>
- </td><td class="memItemRight" valign="bottom"><b>value_compare</b> (const hash_compare &comparator)</td></tr>
-<tr class="separator:a950d35402dcfda797180cfa504e62696"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
-Protected Attributes</h2></td></tr>
-<tr class="memitem:a9f3947368607fd396df7f112f79abc1f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9f3947368607fd396df7f112f79abc1f"></a>
-hash_compare </td><td class="memItemRight" valign="bottom"><b>my_hash_compare</b></td></tr>
-<tr class="separator:a9f3947368607fd396df7f112f79abc1f"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:af8b0853dc699e83103d36df2c881aa67"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af8b0853dc699e83103d36df2c881aa67"></a>
-class </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></b></td></tr>
-<tr class="separator:af8b0853dc699e83103d36df2c881aa67"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>concurrent_unordered_map.h</li>
-</ul>
-</div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00174.png b/doc/html/a00174.png
deleted file mode 100644
index d675463..0000000
Binary files a/doc/html/a00174.png and /dev/null differ
diff --git a/doc/html/a00175.html b/doc/html/a00175.html
deleted file mode 100644
index 01cef5d..0000000
--- a/doc/html/a00175.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::vector_iterator< Container, Value > Class Template Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00175.html">vector_iterator</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">tbb::vector_iterator< Container, Value > Class Template Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>concurrent_vector.h</li>
-</ul>
-</div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00176.html b/doc/html/a00176.html
deleted file mode 100644
index fc1ab01..0000000
--- a/doc/html/a00176.html
+++ /dev/null
@@ -1,325 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::flow::interface7::write_once_node< T > Class Template Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00176.html">write_once_node</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#pro-methods">Protected Member Functions</a> |
-<a href="#friends">Friends</a> |
-<a href="a00341.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">tbb::flow::interface7::write_once_node< T > Class Template Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="dynheader">
-Inheritance diagram for tbb::flow::interface7::write_once_node< T >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00176.png" usemap="#tbb::flow::interface7::write_once_node< T >_map" alt=""/>
-  <map id="tbb::flow::interface7::write_once_node< T >_map" name="tbb::flow::interface7::write_once_node< T >_map">
-<area href="a00104.html" alt="tbb::flow::interface7::overwrite_node< T >" shape="rect" coords="265,112,520,136"/>
-<area href="a00072.html" title="The base of all graph nodes. " alt="tbb::flow::interface7::graph_node" shape="rect" coords="0,56,255,80"/>
-<area href="a00124.html" title="Pure virtual template class that defines a receiver of messages of type T. " alt="tbb::flow::interface7::receiver< T >" shape="rect" coords="265,56,520,80"/>
-<area href="a00142.html" title="Pure virtual template class that defines a sender of messages of type T. " alt="tbb::flow::interface7::sender< T >" shape="rect" coords="530,56,785,80"/>
-</map>
- </div></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:ab3b6999f46ff4e7c73613eca7139a308"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab3b6999f46ff4e7c73613eca7139a308"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
-<tr class="separator:ab3b6999f46ff4e7c73613eca7139a308"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac1228d1cd407e65842465e44ff1a5744"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac1228d1cd407e65842465e44ff1a5744"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:ac1228d1cd407e65842465e44ff1a5744"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab22f169f2471c7ed2fdf55b82f48f9de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab22f169f2471c7ed2fdf55b82f48f9de"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> > </td><td class="memItemRight" valign="bottom"><b>predecessor_type</b></td></tr>
-<tr class="separator:ab22f169f2471c7ed2fdf55b82f48f9de"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4b2f464c97cfdacbfc0ed7caeb426537"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4b2f464c97cfdacbfc0ed7caeb426537"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> > </td><td class="memItemRight" valign="bottom"><b>successor_type</b></td></tr>
-<tr class="separator:a4b2f464c97cfdacbfc0ed7caeb426537"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00104"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00104')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td></tr>
-<tr class="memitem:a0a8edb9abd1842cb9a1f00574a85c5c3 inherit pub_types_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0a8edb9abd1842cb9a1f00574a85c5c3"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
-<tr class="separator:a0a8edb9abd1842cb9a1f00574a85c5c3 inherit pub_types_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acaa2a72c0275a503c72c59b7b1b107a7 inherit pub_types_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acaa2a72c0275a503c72c59b7b1b107a7"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-<tr class="separator:acaa2a72c0275a503c72c59b7b1b107a7 inherit pub_types_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae3c9152237c0355406644f8bdd423db9 inherit pub_types_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae3c9152237c0355406644f8bdd423db9"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> > </td><td class="memItemRight" valign="bottom"><b>predecessor_type</b></td></tr>
-<tr class="separator:ae3c9152237c0355406644f8bdd423db9 inherit pub_types_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3840465efc064f51b88f55bf12cd8526 inherit pub_types_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3840465efc064f51b88f55bf12cd8526"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> > </td><td class="memItemRight" valign="bottom"><b>successor_type</b></td></tr>
-<tr class="separator:a3840465efc064f51b88f55bf12cd8526 inherit pub_types_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af2038834cf5718d675a5e89c798ba9b6 inherit pub_types_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af2038834cf5718d675a5e89c798ba9b6"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> ><br class="typebreak"/>
-::<a class="el" href="a00059.html">built_predecessors_type</a> </td><td class="memItemRight" valign="bottom"><b>built_predecessors_type</b></td></tr>
-<tr class="separator:af2038834cf5718d675a5e89c798ba9b6 inherit pub_types_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a39c66daf12b89510476a440941ec338b inherit pub_types_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a39c66daf12b89510476a440941ec338b"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> ><br class="typebreak"/>
-::<a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a> </td><td class="memItemRight" valign="bottom"><b>built_successors_type</b></td></tr>
-<tr class="separator:a39c66daf12b89510476a440941ec338b inherit pub_types_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0418696834321ec04abcee449d860ed7 inherit pub_types_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0418696834321ec04abcee449d860ed7"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> ><br class="typebreak"/>
-::predecessor_list_type </td><td class="memItemRight" valign="bottom"><b>predecessor_list_type</b></td></tr>
-<tr class="separator:a0418696834321ec04abcee449d860ed7 inherit pub_types_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2c89dfa3dc30f0ac869926f714c80d42 inherit pub_types_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c89dfa3dc30f0ac869926f714c80d42"></a>
-typedef <a class="el" href="a00142.html">sender</a>< <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> ><br class="typebreak"/>
-::successor_list_type </td><td class="memItemRight" valign="bottom"><b>successor_list_type</b></td></tr>
-<tr class="separator:a2c89dfa3dc30f0ac869926f714c80d42 inherit pub_types_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00124"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00124')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td></tr>
-<tr class="memitem:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16eccc851b858604344bb8f1bb9eedc8"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a></td></tr>
-<tr class="memdesc:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br/></td></tr>
-<tr class="separator:a16eccc851b858604344bb8f1bb9eedc8 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbadf5511bd568d283040cd88bd4e81e"></a>
-typedef <a class="el" href="a00142.html">sender</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a></td></tr>
-<tr class="memdesc:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br/></td></tr>
-<tr class="separator:afbadf5511bd568d283040cd88bd4e81e inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00d44512fd61d416e6f615e88063d038 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00d44512fd61d416e6f615e88063d038"></a>
-typedef <br class="typebreak"/>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> > </td><td class="memItemRight" valign="bottom"><b>built_predecessors_type</b></td></tr>
-<tr class="separator:a00d44512fd61d416e6f615e88063d038 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2cc119d6dff16073fc5f0d4855a9e4b7 inherit pub_types_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2cc119d6dff16073fc5f0d4855a9e4b7"></a>
-typedef <br class="typebreak"/>
-built_predecessors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>predecessor_list_type</b></td></tr>
-<tr class="separator:a2cc119d6dff16073fc5f0d4855a9e4b7 inherit pub_types_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_types_a00142"><td colspan="2" onclick="javascript:toggleInherit('pub_types_a00142')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td></tr>
-<tr class="memitem:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add86fddf72758d8e5b05b07650c6eeed"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a></td></tr>
-<tr class="memdesc:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">The output type of this sender. <br/></td></tr>
-<tr class="separator:add86fddf72758d8e5b05b07650c6eeed inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7779627063a29d4d2a1fc905a5cae8db"></a>
-typedef <a class="el" href="a00124.html">receiver</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a></td></tr>
-<tr class="memdesc:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <br/></td></tr>
-<tr class="separator:a7779627063a29d4d2a1fc905a5cae8db inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8aba8b2c5950f113a88f43a97c2207f5"></a>
-typedef <br class="typebreak"/>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a></td></tr>
-<tr class="memdesc:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="mdescLeft"> </td><td class="mdescRight">interface to record edges for traversal & deletion <br/></td></tr>
-<tr class="separator:a8aba8b2c5950f113a88f43a97c2207f5 inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae6c01f7a39a61f6a25f1129e53047b2b inherit pub_types_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6c01f7a39a61f6a25f1129e53047b2b"></a>
-typedef <br class="typebreak"/>
-built_successors_type::edge_list_type </td><td class="memItemRight" valign="bottom"><b>successor_list_type</b></td></tr>
-<tr class="separator:ae6c01f7a39a61f6a25f1129e53047b2b inherit pub_types_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a8225d7ca0ff9762552413cfb1382d78f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8225d7ca0ff9762552413cfb1382d78f"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#a8225d7ca0ff9762552413cfb1382d78f">write_once_node</a> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="memdesc:a8225d7ca0ff9762552413cfb1382d78f"><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br/></td></tr>
-<tr class="separator:a8225d7ca0ff9762552413cfb1382d78f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a68b94bb09b608522462080fe99125e07"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a68b94bb09b608522462080fe99125e07"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#a68b94bb09b608522462080fe99125e07">write_once_node</a> (const <a class="el" href="a00176.html">write_once_node</a> &src)</td></tr>
-<tr class="memdesc:a68b94bb09b608522462080fe99125e07"><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor: call base class copy constructor. <br/></td></tr>
-<tr class="separator:a68b94bb09b608522462080fe99125e07"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afad8a544e45d1cb510c1e532e6bf3578"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afad8a544e45d1cb510c1e532e6bf3578"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_name</b> (const char *name)</td></tr>
-<tr class="separator:afad8a544e45d1cb510c1e532e6bf3578"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00104"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00104')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td></tr>
-<tr class="memitem:a8e0fdb38848772d2e8f93f55e062d148 inherit pub_methods_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8e0fdb38848772d2e8f93f55e062d148"></a>
- </td><td class="memItemRight" valign="bottom"><b>overwrite_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a8e0fdb38848772d2e8f93f55e062d148 inherit pub_methods_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2605cf9efc94c3cba2c59cb5c59e8f19 inherit pub_methods_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2605cf9efc94c3cba2c59cb5c59e8f19"></a>
- </td><td class="memItemRight" valign="bottom"><b>overwrite_node</b> (const <a class="el" href="a00104.html">overwrite_node</a> &src)</td></tr>
-<tr class="separator:a2605cf9efc94c3cba2c59cb5c59e8f19 inherit pub_methods_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aed811ce5f59a555396c7bcd56316b4da inherit pub_methods_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed811ce5f59a555396c7bcd56316b4da"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00104.html#aed811ce5f59a555396c7bcd56316b4da">register_successor</a> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &s)</td></tr>
-<tr class="memdesc:aed811ce5f59a555396c7bcd56316b4da inherit pub_methods_a00104"><td class="mdescLeft"> </td><td class="mdescRight">Add a new successor to this node. <br/></td></tr>
-<tr class="separator:aed811ce5f59a555396c7bcd56316b4da inherit pub_methods_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab5ff89d56e2e3c3848d84a09c88b1d52 inherit pub_methods_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5ff89d56e2e3c3848d84a09c88b1d52"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00104.html#ab5ff89d56e2e3c3848d84a09c88b1d52">remove_successor</a> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &s)</td></tr>
-<tr class="memdesc:ab5ff89d56e2e3c3848d84a09c88b1d52 inherit pub_methods_a00104"><td class="mdescLeft"> </td><td class="mdescRight">Removes a successor from this node. <br/></td></tr>
-<tr class="separator:ab5ff89d56e2e3c3848d84a09c88b1d52 inherit pub_methods_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:addc54b82dc4d29e97d08cdefb9450925 inherit pub_methods_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="addc54b82dc4d29e97d08cdefb9450925"></a>
-<a class="el" href="a00059.html">built_predecessors_type</a> & </td><td class="memItemRight" valign="bottom"><b>built_predecessors</b> ()</td></tr>
-<tr class="separator:addc54b82dc4d29e97d08cdefb9450925 inherit pub_methods_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8dbd8828713f56fa055b9e29e3039b3f inherit pub_methods_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8dbd8828713f56fa055b9e29e3039b3f"></a>
-<a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a> & </td><td class="memItemRight" valign="bottom"><b>built_successors</b> ()</td></tr>
-<tr class="separator:a8dbd8828713f56fa055b9e29e3039b3f inherit pub_methods_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad5a38fedbe469b39d142b045afe85e91 inherit pub_methods_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad5a38fedbe469b39d142b045afe85e91"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_successor</b> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &s)</td></tr>
-<tr class="separator:ad5a38fedbe469b39d142b045afe85e91 inherit pub_methods_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af44826566f279170bba1d9d9bbcfc8f3 inherit pub_methods_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af44826566f279170bba1d9d9bbcfc8f3"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_delete_built_successor</b> (<a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> &s)</td></tr>
-<tr class="separator:af44826566f279170bba1d9d9bbcfc8f3 inherit pub_methods_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:adbf5f11e221cc7cd547cf01a0806514a inherit pub_methods_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbf5f11e221cc7cd547cf01a0806514a"></a>
-size_t </td><td class="memItemRight" valign="bottom"><b>successor_count</b> ()</td></tr>
-<tr class="separator:adbf5f11e221cc7cd547cf01a0806514a inherit pub_methods_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afcac4e4c70d42a3a1709dc068c448540 inherit pub_methods_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afcac4e4c70d42a3a1709dc068c448540"></a>
-void </td><td class="memItemRight" valign="bottom"><b>copy_successors</b> (successor_list_type &v)</td></tr>
-<tr class="separator:afcac4e4c70d42a3a1709dc068c448540 inherit pub_methods_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a631ef156f3443dfcf811c2fb0efec1eb inherit pub_methods_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a631ef156f3443dfcf811c2fb0efec1eb"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_add_built_predecessor</b> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &p)</td></tr>
-<tr class="separator:a631ef156f3443dfcf811c2fb0efec1eb inherit pub_methods_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7923c0aebb36198316da10587b367d77 inherit pub_methods_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7923c0aebb36198316da10587b367d77"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_delete_built_predecessor</b> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &p)</td></tr>
-<tr class="separator:a7923c0aebb36198316da10587b367d77 inherit pub_methods_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1459dabd54dc411e4f39a10f9a590a0b inherit pub_methods_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1459dabd54dc411e4f39a10f9a590a0b"></a>
-size_t </td><td class="memItemRight" valign="bottom"><b>predecessor_count</b> ()</td></tr>
-<tr class="separator:a1459dabd54dc411e4f39a10f9a590a0b inherit pub_methods_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a69f8b5478bf681d575c825fdeeb05f53 inherit pub_methods_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69f8b5478bf681d575c825fdeeb05f53"></a>
-void </td><td class="memItemRight" valign="bottom"><b>copy_predecessors</b> (predecessor_list_type &v)</td></tr>
-<tr class="separator:a69f8b5478bf681d575c825fdeeb05f53 inherit pub_methods_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9e835759164978cd1d3b15c11248da67 inherit pub_methods_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9e835759164978cd1d3b15c11248da67"></a>
-void </td><td class="memItemRight" valign="bottom"><b>extract</b> ()</td></tr>
-<tr class="separator:a9e835759164978cd1d3b15c11248da67 inherit pub_methods_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa655eef6671b35f99dfbddd0f3cf2309 inherit pub_methods_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa655eef6671b35f99dfbddd0f3cf2309"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00104.html#aa655eef6671b35f99dfbddd0f3cf2309">try_get</a> (<a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> &v)</td></tr>
-<tr class="memdesc:aa655eef6671b35f99dfbddd0f3cf2309 inherit pub_methods_a00104"><td class="mdescLeft"> </td><td class="mdescRight">Request an item from the sender. <br/></td></tr>
-<tr class="separator:aa655eef6671b35f99dfbddd0f3cf2309 inherit pub_methods_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3bf01d9c754667474fdb47e47df470a9 inherit pub_methods_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3bf01d9c754667474fdb47e47df470a9"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>is_valid</b> ()</td></tr>
-<tr class="separator:a3bf01d9c754667474fdb47e47df470a9 inherit pub_methods_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4d950320406a8c819882ea50d918678a inherit pub_methods_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4d950320406a8c819882ea50d918678a"></a>
-void </td><td class="memItemRight" valign="bottom"><b>clear</b> ()</td></tr>
-<tr class="separator:a4d950320406a8c819882ea50d918678a inherit pub_methods_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00072')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4badd313105e30f539882276353dcb8e"></a>
- </td><td class="memItemRight" valign="bottom"><b>graph_node</b> (<a class="el" href="a00070.html">graph</a> &g)</td></tr>
-<tr class="separator:a4badd313105e30f539882276353dcb8e inherit pub_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00124"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00124')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td></tr>
-<tr class="memitem:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a733889a9053478ef2fb2528e2205bf07"></a>
-virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a733889a9053478ef2fb2528e2205bf07">~receiver</a> ()</td></tr>
-<tr class="memdesc:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br/></td></tr>
-<tr class="separator:a733889a9053478ef2fb2528e2205bf07 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee5067bb4f4b71ffa786c1b33cb9aa6a"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#aee5067bb4f4b71ffa786c1b33cb9aa6a">try_put</a> (const T &t)</td></tr>
-<tr class="memdesc:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Put an item to the receiver. <br/></td></tr>
-<tr class="separator:aee5067bb4f4b71ffa786c1b33cb9aa6a inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a16427aa709505de93ffe0d79136e4251 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16427aa709505de93ffe0d79136e4251"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a16427aa709505de93ffe0d79136e4251">register_predecessor</a> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &)</td></tr>
-<tr class="memdesc:a16427aa709505de93ffe0d79136e4251 inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Add a predecessor to the node. <br/></td></tr>
-<tr class="separator:a16427aa709505de93ffe0d79136e4251 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a55adae6228bbdc1539695e1ec20e9762 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a55adae6228bbdc1539695e1ec20e9762"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a55adae6228bbdc1539695e1ec20e9762">remove_predecessor</a> (<a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> &)</td></tr>
-<tr class="memdesc:a55adae6228bbdc1539695e1ec20e9762 inherit pub_methods_a00124"><td class="mdescLeft"> </td><td class="mdescRight">Remove a predecessor from the node. <br/></td></tr>
-<tr class="separator:a55adae6228bbdc1539695e1ec20e9762 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a63273d246d9dd8d259f9cc1eead42eb2 inherit pub_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63273d246d9dd8d259f9cc1eead42eb2"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>copy_predecessors</b> (predecessor_list_type &)=0</td></tr>
-<tr class="separator:a63273d246d9dd8d259f9cc1eead42eb2 inherit pub_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pub_methods_a00142"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_a00142')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td></tr>
-<tr class="memitem:aa1b9dcf77ab558530ff93a706b4c4b5d inherit pub_methods_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa1b9dcf77ab558530ff93a706b4c4b5d"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#aa1b9dcf77ab558530ff93a706b4c4b5d">try_reserve</a> (T &)</td></tr>
-<tr class="memdesc:aa1b9dcf77ab558530ff93a706b4c4b5d inherit pub_methods_a00142"><td class="mdescLeft"> </td><td class="mdescRight">Reserves an item in the sender. <br/></td></tr>
-<tr class="separator:aa1b9dcf77ab558530ff93a706b4c4b5d inherit pub_methods_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a97ac316ddfb6bd7c7f2f56e3e819a30a inherit pub_methods_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a97ac316ddfb6bd7c7f2f56e3e819a30a"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#a97ac316ddfb6bd7c7f2f56e3e819a30a">try_release</a> ()</td></tr>
-<tr class="memdesc:a97ac316ddfb6bd7c7f2f56e3e819a30a inherit pub_methods_a00142"><td class="mdescLeft"> </td><td class="mdescRight">Releases the reserved item. <br/></td></tr>
-<tr class="separator:a97ac316ddfb6bd7c7f2f56e3e819a30a inherit pub_methods_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad404d5218c7ae2556261ffa880cdf804 inherit pub_methods_a00142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad404d5218c7ae2556261ffa880cdf804"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#ad404d5218c7ae2556261ffa880cdf804">try_consume</a> ()</td></tr>
-<tr class="memdesc:ad404d5218c7ae2556261ffa880cdf804 inherit pub_methods_a00142"><td class="mdescLeft"> </td><td class="mdescRight">Consumes the reserved item. <br/></td></tr>
-<tr class="separator:ad404d5218c7ae2556261ffa880cdf804 inherit pub_methods_a00142"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:a6f03bc8ba1bc382978ce230c489c93be"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6f03bc8ba1bc382978ce230c489c93be"></a>
-task * </td><td class="memItemRight" valign="bottom"><b>try_put_task</b> (const T &v)</td></tr>
-<tr class="separator:a6f03bc8ba1bc382978ce230c489c93be"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00104"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00104')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td></tr>
-<tr class="memitem:a48f960dd752b18dc2f0767619461ecb8 inherit pro_methods_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a48f960dd752b18dc2f0767619461ecb8"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_receiver</b> (__TBB_PFG_RESET_ARG(reset_flags))</td></tr>
-<tr class="separator:a48f960dd752b18dc2f0767619461ecb8 inherit pro_methods_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a13b0e23bd0b9f4a1769d2760ead04719 inherit pro_methods_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a13b0e23bd0b9f4a1769d2760ead04719"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f))</td></tr>
-<tr class="separator:a13b0e23bd0b9f4a1769d2760ead04719 inherit pro_methods_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00072"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00072')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memitem:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac25a4633873c052047b1dd568824d055"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>reset_node</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0</td></tr>
-<tr class="separator:ac25a4633873c052047b1dd568824d055 inherit pro_methods_a00072"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="inherit_header pro_methods_a00124"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_a00124')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td></tr>
-<tr class="memitem:ac902b1e09eea9748223eb50dc38d3575 inherit pro_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac902b1e09eea9748223eb50dc38d3575"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><b>reset_receiver</b> (__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0</td></tr>
-<tr class="separator:ac902b1e09eea9748223eb50dc38d3575 inherit pro_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae91eab3e06d4139ac38f143c74fe9eab inherit pro_methods_a00124"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae91eab3e06d4139ac38f143c74fe9eab"></a>
-virtual bool </td><td class="memItemRight" valign="bottom"><b>is_continue_receiver</b> ()</td></tr>
-<tr class="separator:ae91eab3e06d4139ac38f143c74fe9eab inherit pro_methods_a00124"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplParams" colspan="2"><a class="anchor" id="abaf9bf74ca5f2854d09f5f07337280eb"></a>
-template<typename R , typename B > </td></tr>
-<tr class="memitem:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>run_and_put_task</b></td></tr>
-<tr class="separator:abaf9bf74ca5f2854d09f5f07337280eb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1360e38efe396058978cf3754ad620f5"></a>
-template<typename X , typename Y > </td></tr>
-<tr class="memitem:a1360e38efe396058978cf3754ad620f5"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::broadcast_cache</b></td></tr>
-<tr class="separator:a1360e38efe396058978cf3754ad620f5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplParams" colspan="2"><a class="anchor" id="acbd9ac2610587a99cd7d43344297cc49"></a>
-template<typename X , typename Y > </td></tr>
-<tr class="memitem:acbd9ac2610587a99cd7d43344297cc49"><td class="memTemplItemLeft" align="right" valign="top">class </td><td class="memTemplItemRight" valign="bottom"><b>internal::round_robin_cache</b></td></tr>
-<tr class="separator:acbd9ac2610587a99cd7d43344297cc49"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pro_attribs_a00104"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_a00104')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td></tr>
-<tr class="memitem:ad8d534d5d059f91b82c4aef9235aa9f6 inherit pro_attribs_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8d534d5d059f91b82c4aef9235aa9f6"></a>
-<a class="el" href="a00145.html">spin_mutex</a> </td><td class="memItemRight" valign="bottom"><b>my_mutex</b></td></tr>
-<tr class="separator:ad8d534d5d059f91b82c4aef9235aa9f6 inherit pro_attribs_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6fdd59fdffd500a1508fd7e42e6cabf8 inherit pro_attribs_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6fdd59fdffd500a1508fd7e42e6cabf8"></a>
-<a class="el" href="a00027.html">internal::broadcast_cache</a><br class="typebreak"/>
-< <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a>, <a class="el" href="a00102.html">null_rw_mutex</a> > </td><td class="memItemRight" valign="bottom"><b>my_successors</b></td></tr>
-<tr class="separator:a6fdd59fdffd500a1508fd7e42e6cabf8 inherit pro_attribs_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af82a3ea91b6770c1ccd4d04dc417d088 inherit pro_attribs_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af82a3ea91b6770c1ccd4d04dc417d088"></a>
-<a class="el" href="a00059.html">internal::edge_container</a><br class="typebreak"/>
-< <a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> > </td><td class="memItemRight" valign="bottom"><b>my_built_predecessors</b></td></tr>
-<tr class="separator:af82a3ea91b6770c1ccd4d04dc417d088 inherit pro_attribs_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1d6538f03750446febcdc570fa41bc23 inherit pro_attribs_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1d6538f03750446febcdc570fa41bc23"></a>
-<a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> </td><td class="memItemRight" valign="bottom"><b>my_buffer</b></td></tr>
-<tr class="separator:a1d6538f03750446febcdc570fa41bc23 inherit pro_attribs_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afbf79aaedd9459ed382823d8d85d0bfc inherit pro_attribs_a00104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbf79aaedd9459ed382823d8d85d0bfc"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>my_buffer_is_valid</b></td></tr>
-<tr class="separator:afbf79aaedd9459ed382823d8d85d0bfc inherit pro_attribs_a00104"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00196.html">flow_graph.h</a></li>
-</ul>
-</div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00176.png b/doc/html/a00176.png
deleted file mode 100644
index 696962a..0000000
Binary files a/doc/html/a00176.png and /dev/null differ
diff --git a/doc/html/a00177.html b/doc/html/a00177.html
deleted file mode 100644
index bc349d6..0000000
--- a/doc/html/a00177.html
+++ /dev/null
@@ -1,133 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::zero_allocator< T, Allocator > Class Template Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00177.html">zero_allocator</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="a00314.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">tbb::zero_allocator< T, Allocator > Class Template Reference<div class="ingroups"><a class="el" href="a00257.html">Memory Allocation</a></div></div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  
- <a href="a00177.html#details">More...</a></p>
-
-<p><code>#include <tbb_allocator.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::zero_allocator< T, Allocator >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00177.png" usemap="#tbb::zero_allocator< T, Allocator >_map" alt=""/>
-  <map id="tbb::zero_allocator< T, Allocator >_map" name="tbb::zero_allocator< T, Allocator >_map">
-</map>
- </div></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html">rebind</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:a62f27899a40c4bfaa6ba4313ffc833ef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a62f27899a40c4bfaa6ba4313ffc833ef"></a>
-typedef Allocator< T > </td><td class="memItemRight" valign="bottom"><b>base_allocator_type</b></td></tr>
-<tr class="separator:a62f27899a40c4bfaa6ba4313ffc833ef"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a906f5c2d47fff1bf4fd868a2441752d1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a906f5c2d47fff1bf4fd868a2441752d1"></a>
-typedef <br class="typebreak"/>
-base_allocator_type::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-<tr class="separator:a906f5c2d47fff1bf4fd868a2441752d1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afb9458462ffca5d8734968862c9c4e6b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afb9458462ffca5d8734968862c9c4e6b"></a>
-typedef <br class="typebreak"/>
-base_allocator_type::pointer </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-<tr class="separator:afb9458462ffca5d8734968862c9c4e6b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2a08548bf83e153b40029de72738b60f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2a08548bf83e153b40029de72738b60f"></a>
-typedef <br class="typebreak"/>
-base_allocator_type::const_pointer </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-<tr class="separator:a2a08548bf83e153b40029de72738b60f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0afb88e128fc595c62f24e34f445d834"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0afb88e128fc595c62f24e34f445d834"></a>
-typedef <br class="typebreak"/>
-base_allocator_type::reference </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
-<tr class="separator:a0afb88e128fc595c62f24e34f445d834"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a28180fc12dc69c275983f6400526ba01"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28180fc12dc69c275983f6400526ba01"></a>
-typedef <br class="typebreak"/>
-base_allocator_type::const_reference </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
-<tr class="separator:a28180fc12dc69c275983f6400526ba01"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8e741b3db82dfdce3f68cfd6d66901ce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8e741b3db82dfdce3f68cfd6d66901ce"></a>
-typedef <br class="typebreak"/>
-base_allocator_type::size_type </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-<tr class="separator:a8e741b3db82dfdce3f68cfd6d66901ce"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aba68dc670e813a0c5c7f06e262b66187"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba68dc670e813a0c5c7f06e262b66187"></a>
-typedef <br class="typebreak"/>
-base_allocator_type::difference_type </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
-<tr class="separator:aba68dc670e813a0c5c7f06e262b66187"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a9080a874dd20d0ca8e404683113990f2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9080a874dd20d0ca8e404683113990f2"></a>
- </td><td class="memItemRight" valign="bottom"><b>zero_allocator</b> (const <a class="el" href="a00177.html">zero_allocator</a> &a)  throw ()</td></tr>
-<tr class="separator:a9080a874dd20d0ca8e404683113990f2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab417c217e597c6f412c5a630ba18bc32"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab417c217e597c6f412c5a630ba18bc32"></a>
-template<typename U > </td></tr>
-<tr class="memitem:ab417c217e597c6f412c5a630ba18bc32"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>zero_allocator</b> (const <a class="el" href="a00177.html">zero_allocator</a>< U > &a)  throw ()</td></tr>
-<tr class="separator:ab417c217e597c6f412c5a630ba18bc32"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1b9fe1273c2332e3c0b571d7bf1ba615"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1b9fe1273c2332e3c0b571d7bf1ba615"></a>
-pointer </td><td class="memItemRight" valign="bottom"><b>allocate</b> (const size_type n, const void *hint=0)</td></tr>
-<tr class="separator:a1b9fe1273c2332e3c0b571d7bf1ba615"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<typename T, template< typename X > class Allocator = tbb_allocator><br/>
-class tbb::zero_allocator< T, Allocator ></h3>
-
-<p>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. </p>
-<p>The class is an adapter over an actual allocator that fills the allocation using memset function with template argument C as the value. The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>tbb_allocator.h</li>
-</ul>
-</div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00177.png b/doc/html/a00177.png
deleted file mode 100644
index f03aec2..0000000
Binary files a/doc/html/a00177.png and /dev/null differ
diff --git a/doc/html/a00178.html b/doc/html/a00178.html
deleted file mode 100644
index 991bae9..0000000
--- a/doc/html/a00178.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb::zero_allocator< void, Allocator > Class Template Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00178.html">zero_allocator< void, Allocator ></a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#pub-types">Public Types</a> |
-<a href="a00316.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">tbb::zero_allocator< void, Allocator > Class Template Reference<div class="ingroups"><a class="el" href="a00257.html">Memory Allocation</a></div></div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  
- <a href="a00178.html#details">More...</a></p>
-
-<p><code>#include <tbb_allocator.h></code></p>
-<div class="dynheader">
-Inheritance diagram for tbb::zero_allocator< void, Allocator >:</div>
-<div class="dyncontent">
- <div class="center">
-  <img src="a00178.png" usemap="#tbb::zero_allocator< void, Allocator >_map" alt=""/>
-  <map id="tbb::zero_allocator< void, Allocator >_map" name="tbb::zero_allocator< void, Allocator >_map">
-</map>
- </div></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00120.html">rebind</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr class="memitem:ad760fbbdefc95c096c94521316e9e091"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad760fbbdefc95c096c94521316e9e091"></a>
-typedef Allocator< void > </td><td class="memItemRight" valign="bottom"><b>base_allocator_type</b></td></tr>
-<tr class="separator:ad760fbbdefc95c096c94521316e9e091"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a392c9d2f51594e7372e5e73e4bf805ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a392c9d2f51594e7372e5e73e4bf805ff"></a>
-typedef <br class="typebreak"/>
-base_allocator_type::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-<tr class="separator:a392c9d2f51594e7372e5e73e4bf805ff"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa6c02215a540d3f5dd4cb4739bd05bcf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa6c02215a540d3f5dd4cb4739bd05bcf"></a>
-typedef <br class="typebreak"/>
-base_allocator_type::pointer </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-<tr class="separator:aa6c02215a540d3f5dd4cb4739bd05bcf"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0f2fa4e1a995d60f763595ef4b91dd9a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0f2fa4e1a995d60f763595ef4b91dd9a"></a>
-typedef <br class="typebreak"/>
-base_allocator_type::const_pointer </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-<tr class="separator:a0f2fa4e1a995d60f763595ef4b91dd9a"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><h3>template<template< typename T > class Allocator><br/>
-class tbb::zero_allocator< void, Allocator ></h3>
-
-<p>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. </p>
-</div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>tbb_allocator.h</li>
-</ul>
-</div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00188.html b/doc/html/a00188.html
new file mode 100644
index 0000000..7bc0c57
--- /dev/null
+++ b/doc/html/a00188.html
@@ -0,0 +1,156 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.4"/>
+<title>flow_graph.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.4 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_525f2cc589630bacbdc3bb450847427e.html">tbb</a></li><li class="navelem"><a class="el" href="dir_b9976680b2be72d2d0b8fca1c31202a2.html">1.0</a></li><li class="navelem"><a class="el" href="dir_63fb2cc293d133785b96e521fa051167.html">include</a></li><li class="navelem"><a class="el" href="dir_87119f26c7695cbc270003e99bc7f49f.html">tbb</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#namespaces">Namespaces</a> |
+<a href="#namespaces">Constant Groups</a> |
+<a href="#enum-members">Enumerations</a> |
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">flow_graph.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>The graph related classes and functions.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html">tbb::flow::interface9::internal::successor_cache< T, M ></a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00025.html">tbb::flow::interface9::internal::broadcast_cache< T, M ></a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00123.html">tbb::flow::interface9::internal::round_robin_cache< T, M ></a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00105.html">tbb::flow::interface9::internal::predecessor_cache< T, M ></a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html">tbb::flow::interface9::internal::reservable_predecessor_cache< T, M ></a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00086.html">tbb::flow::interface9::null_type</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00048.html">tbb::flow::interface9::continue_msg</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">An empty class used for messages that mean "I'm done".  <a href="a00048.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Pure virtual template class that defines a sender of messages of type T.  <a href="a00139.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Pure virtual template class that defines a receiver of messages of type T.  <a href="a00119.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00075.html">tbb::flow::interface9::limiter_node< T ></a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html">tbb::flow::interface9::run_and_put_task< R, B ></a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00056.html">tbb::flow::interface9::internal::edge_container< C ></a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Pure virtual template class that defines a sender of messages of type T.  <a href="a00139.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Pure virtual template class that defines a receiver of messages of type T.  <a href="a00119.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Pure virtual template class that defines a sender of messages of type T.  <a href="a00139.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Pure virtual template class that defines a receiver of messages of type T.  <a href="a00119.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Base class for receivers of completion messages.  <a href="a00049.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:a00233"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.html">tbb</a></td></tr>
+<tr class="memdesc:a00233"><td class="mdescLeft"> </td><td class="mdescRight">The namespace tbb contains all components of the library. <br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
+Constant Groups</h2></td></tr>
+<tr class="memitem:a00233"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.html">tbb</a></td></tr>
+<tr class="memdesc:a00233"><td class="mdescLeft"> </td><td class="mdescRight">The namespace tbb contains all components of the library. <br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:a7bec4a3445fea3cd5974119730dea98f"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>concurrency</b> { <b>unlimited</b> = 0, 
+<b>serial</b> = 1
+ }</td></tr>
+<tr class="memdesc:a7bec4a3445fea3cd5974119730dea98f"><td class="mdescLeft"> </td><td class="mdescRight">An enumeration the provides the two most common concurrency levels: unlimited and serial. <br/></td></tr>
+<tr class="separator:a7bec4a3445fea3cd5974119730dea98f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a10c76fa95884970da855fe23ef5b4ea4"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>reset_flags</b> { <b>rf_reset_protocol</b> = 0, 
+<b>rf_reset_bodies</b> = 1<<0, 
+<b>rf_clear_edges</b> = 1<<1
+ }</td></tr>
+<tr class="separator:a10c76fa95884970da855fe23ef5b4ea4"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a34d97540b54b1af04d8d4e063e79c688"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a34d97540b54b1af04d8d4e063e79c688"></a>
+static tbb::task * </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface9::combine_tasks</b> (tbb::task *left, tbb::task *right)</td></tr>
+<tr class="separator:a34d97540b54b1af04d8d4e063e79c688"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a44f9db9a75974b985b424a8e3a06c1cc"><td class="memTemplParams" colspan="2"><a class="anchor" id="a44f9db9a75974b985b424a8e3a06c1cc"></a>
+template<typename K , typename T > </td></tr>
+<tr class="memitem:a44f9db9a75974b985b424a8e3a06c1cc"><td class="memTemplItemLeft" align="right" valign="top">K </td><td class="memTemplItemRight" valign="bottom"><b>tbb::flow::key_from_message</b> (const T &t)</td></tr>
+<tr class="separator:a44f9db9a75974b985b424a8e3a06c1cc"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a7f0430b0f8c67715b53b4e1bfedadc00"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f0430b0f8c67715b53b4e1bfedadc00"></a>
+static tbb::task *const </td><td class="memItemRight" valign="bottom"><b>tbb::flow::internal::SUCCESSFULLY_ENQUEUED</b> = (task *)-1</td></tr>
+<tr class="separator:a7f0430b0f8c67715b53b4e1bfedadc00"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>The graph related classes and functions. </p>
+<p>There are some applications that best express dependencies as messages passed between nodes in a graph. These messages may contain data or simply act as signals that a predecessors has completed. The graph class and its associated node classes can be used to express such applications. </p>
+</div></div><!-- contents -->
+<hr>
+<p></p>
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00193.html b/doc/html/a00193.html
new file mode 100644
index 0000000..6539170
--- /dev/null
+++ b/doc/html/a00193.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.4"/>
+<title>memory_pool.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.4 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_525f2cc589630bacbdc3bb450847427e.html">tbb</a></li><li class="navelem"><a class="el" href="dir_b9976680b2be72d2d0b8fca1c31202a2.html">1.0</a></li><li class="navelem"><a class="el" href="dir_63fb2cc293d133785b96e521fa051167.html">include</a></li><li class="navelem"><a class="el" href="dir_87119f26c7695cbc270003e99bc7f49f.html">tbb</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#namespaces">Namespaces</a> |
+<a href="#namespaces">Constant Groups</a> |
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">memory_pool.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00077.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00116.html">tbb::interface6::memory_pool_allocator< T, P >::rebind< U ></a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00078.html">tbb::interface6::memory_pool_allocator< void, P ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00078.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00118.html">tbb::interface6::memory_pool_allocator< void, P >::rebind< U ></a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00076.html">tbb::interface6::memory_pool< Alloc ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Thread-safe growable pool allocator for variable-size requests.  <a href="a00076.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00062.html">tbb::interface6::fixed_pool</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:a00233"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.html">tbb</a></td></tr>
+<tr class="memdesc:a00233"><td class="mdescLeft"> </td><td class="mdescRight">The namespace tbb contains all components of the library. <br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
+Constant Groups</h2></td></tr>
+<tr class="memitem:a00233"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.html">tbb</a></td></tr>
+<tr class="memdesc:a00233"><td class="mdescLeft"> </td><td class="mdescRight">The namespace tbb contains all components of the library. <br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a21dc513d4407872bb3b257870c6d77b2"><td class="memTemplParams" colspan="2"><a class="anchor" id="a21dc513d4407872bb3b257870c6d77b2"></a>
+template<typename T , typename U , typename P > </td></tr>
+<tr class="memitem:a21dc513d4407872bb3b257870c6d77b2"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>tbb::interface6::operator==</b> (const memory_pool_allocator< T, P > &a, const memory_pool_allocator< U, P > &b)</td></tr>
+<tr class="separator:a21dc513d4407872bb3b257870c6d77b2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aed6a6d87d04444c2619b6f0136ab0702"><td class="memTemplParams" colspan="2"><a class="anchor" id="aed6a6d87d04444c2619b6f0136ab0702"></a>
+template<typename T , typename U , typename P > </td></tr>
+<tr class="memitem:aed6a6d87d04444c2619b6f0136ab0702"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>tbb::interface6::operator!=</b> (const memory_pool_allocator< T, P > &a, const memory_pool_allocator< U, P > &b)</td></tr>
+<tr class="separator:aed6a6d87d04444c2619b6f0136ab0702"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<hr>
+<p></p>
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00196.html b/doc/html/a00196.html
deleted file mode 100644
index 76b5f46..0000000
--- a/doc/html/a00196.html
+++ /dev/null
@@ -1,271 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>flow_graph.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="dir_525f2cc589630bacbdc3bb450847427e.html">tbb</a></li><li class="navelem"><a class="el" href="dir_b9976680b2be72d2d0b8fca1c31202a2.html">1.0</a></li><li class="navelem"><a class="el" href="dir_63fb2cc293d133785b96e521fa051167.html">include</a></li><li class="navelem"><a class="el" href="dir_87119f26c7695cbc270003e99bc7f49f.html">tbb</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#namespaces">Constant Groups</a> |
-<a href="#enum-members">Enumerations</a> |
-<a href="#func-members">Functions</a> |
-<a href="#var-members">Variables</a>  </div>
-  <div class="headertitle">
-<div class="title">flow_graph.h File Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>The graph related classes and functions.  
-<a href="#details">More...</a></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html">tbb::flow::interface7::internal::successor_cache< T, M ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00027.html">tbb::flow::interface7::internal::broadcast_cache< T, M ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00126.html">tbb::flow::interface7::internal::round_robin_cache< T, M ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00059.html">tbb::flow::interface7::internal::edge_container< C ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00103.html">tbb::flow::interface7::null_type</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00055.html">tbb::flow::interface7::continue_msg</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">An empty class used for messages that mean "I'm done".  <a href="a00055.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Pure virtual template class that defines a sender of messages of type T.  <a href="a00142.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Pure virtual template class that defines a receiver of messages of type T.  <a href="a00124.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Pure virtual template class that defines a sender of messages of type T.  <a href="a00142.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages only if the threshold has not been reached.  <a href="a00091.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html">tbb::flow::interface7::run_and_put_task< R, B ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Pure virtual template class that defines a receiver of messages of type T.  <a href="a00124.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00059.html">tbb::flow::interface7::internal::edge_container< C ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Base class for receivers of completion messages.  <a href="a00057.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The graph class.  <a href="a00070.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The base of all graph nodes.  <a href="a00072.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">An executable node that acts as a source, i.e. it has no predecessors.  <a href="a00144.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Implements a function node that supports Input -> Output.  <a href="a00068.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">implements a function node that supports Input -> (set of outputs)  <a href="a00098.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html">tbb::flow::interface7::split_node< TupleType, Allocator ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="a00147.html" title="split_node: accepts a tuple as input, forwards each element of the tuple to its ">split_node</a>: accepts a tuple as input, forwards each element of the tuple to its  <a href="a00147.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Implements an executable node that supports <a class="el" href="a00055.html" title="An empty class used for messages that mean "I'm done". ">continue_msg</a> -> Output.  <a href="a00056.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html">tbb::flow::interface7::write_once_node< T ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages of type T to all successors.  <a href="a00028.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages in arbitrary order.  <a href="a00030.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00031.html">tbb::flow::interface7::buffer_node< T, A >::buffer_operation</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages in FIFO order.  <a href="a00110.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages in sequence order.  <a href="a00143.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages in priority order.  <a href="a00109.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages only if the threshold has not been reached.  <a href="a00091.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00087.html">tbb::flow::interface7::join_node< OutputTuple, JP ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00089.html">tbb::flow::interface7::join_node< OutputTuple, reserving ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00088.html">tbb::flow::interface7::join_node< OutputTuple, queueing ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00075.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00076.html">tbb::flow::interface7::indexer_node< T0 ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00077.html">tbb::flow::interface7::indexer_node< T0, T1 ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00078.html">tbb::flow::interface7::indexer_node< T0, T1, T2 ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00079.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3 ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00080.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4 ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00081.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5 ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6 ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00083.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00084.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00075.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00037.html">tbb::flow::interface7::composite_node< InputTuple, OutputTuple ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00016.html">tbb::flow::interface7::internal::async_gateway< Output ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Pure virtual template class that defines interface for async communication.  <a href="a00016.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Implements a async node.  <a href="a00017.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr class="memitem:a00240"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html">tbb</a></td></tr>
-<tr class="memdesc:a00240"><td class="mdescLeft"> </td><td class="mdescRight">The namespace tbb contains all components of the library. <br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
-Constant Groups</h2></td></tr>
-<tr class="memitem:a00240"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html">tbb</a></td></tr>
-<tr class="memdesc:a00240"><td class="mdescLeft"> </td><td class="mdescRight">The namespace tbb contains all components of the library. <br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
-Enumerations</h2></td></tr>
-<tr class="memitem:a7bec4a3445fea3cd5974119730dea98f"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>concurrency</b> { <b>unlimited</b> = 0, 
-<b>serial</b> = 1
- }</td></tr>
-<tr class="memdesc:a7bec4a3445fea3cd5974119730dea98f"><td class="mdescLeft"> </td><td class="mdescRight">An enumeration the provides the two most common concurrency levels: unlimited and serial. <br/></td></tr>
-<tr class="separator:a7bec4a3445fea3cd5974119730dea98f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abe1d7719e70a4b130e6ca01246ac58a4"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>reset_flags</b> { <b>rf_reset_protocol</b> = 0, 
-<b>rf_reset_bodies</b> = 1<<0, 
-<b>rf_clear_edges</b> = 1<<1
- }</td></tr>
-<tr class="separator:abe1d7719e70a4b130e6ca01246ac58a4"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:aba7c4b74c28d9c7afcfa7b3b7f92c4a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba7c4b74c28d9c7afcfa7b3b7f92c4a2"></a>
-static tbb::task * </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface7::combine_tasks</b> (tbb::task *left, tbb::task *right)</td></tr>
-<tr class="separator:aba7c4b74c28d9c7afcfa7b3b7f92c4a2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab8165a6d22fd39f043aaf5ebe60a1ee7"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab8165a6d22fd39f043aaf5ebe60a1ee7"></a>
-template<typename T > </td></tr>
-<tr class="memitem:ab8165a6d22fd39f043aaf5ebe60a1ee7"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::flow::interface7::make_edge</b> (sender< T > &p, receiver< T > &s)</td></tr>
-<tr class="memdesc:ab8165a6d22fd39f043aaf5ebe60a1ee7"><td class="mdescLeft"> </td><td class="mdescRight">Makes an edge between a single predecessor and a single successor. <br/></td></tr>
-<tr class="separator:ab8165a6d22fd39f043aaf5ebe60a1ee7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3c39412566d3bac0c3bcdb4f490d1372"><td class="memTemplParams" colspan="2"><a class="anchor" id="a3c39412566d3bac0c3bcdb4f490d1372"></a>
-template<typename T , typename V , bool  = tbb::internal::is_same_type< typename tuple_element<0,typename T::output_ports_type>::type,                                              typename tuple_element<0,typename V::input_ports_type>::type                                            >::value> </td></tr>
-<tr class="memitem:a3c39412566d3bac0c3bcdb4f490d1372"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::flow::interface7::make_edge</b> (T &output, V &input)</td></tr>
-<tr class="separator:a3c39412566d3bac0c3bcdb4f490d1372"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aae9ce84d0165c025f0ff761226c4560d"><td class="memTemplParams" colspan="2"><a class="anchor" id="aae9ce84d0165c025f0ff761226c4560d"></a>
-template<typename T , typename R , bool  = tbb::internal::is_same_type<typename tuple_element<0,typename T::output_ports_type>::type, receiver<R> >::value> </td></tr>
-<tr class="memitem:aae9ce84d0165c025f0ff761226c4560d"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::flow::interface7::make_edge</b> (T &output, receiver< R > &input)</td></tr>
-<tr class="separator:aae9ce84d0165c025f0ff761226c4560d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abb554add65af239e2e9f3958d408176c"><td class="memTemplParams" colspan="2"><a class="anchor" id="abb554add65af239e2e9f3958d408176c"></a>
-template<typename S , typename V , bool  = tbb::internal::is_same_type<sender<S>, typename tuple_element<0,typename V::input_ports_type>::type >::value> </td></tr>
-<tr class="memitem:abb554add65af239e2e9f3958d408176c"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::flow::interface7::make_edge</b> (sender< S > &output, V &input)</td></tr>
-<tr class="separator:abb554add65af239e2e9f3958d408176c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a604efbfc6e5a5889bd73b7a0924b3675"><td class="memTemplParams" colspan="2"><a class="anchor" id="a604efbfc6e5a5889bd73b7a0924b3675"></a>
-template<typename T > </td></tr>
-<tr class="memitem:a604efbfc6e5a5889bd73b7a0924b3675"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::flow::interface7::remove_edge</b> (sender< T > &p, receiver< T > &s)</td></tr>
-<tr class="memdesc:a604efbfc6e5a5889bd73b7a0924b3675"><td class="mdescLeft"> </td><td class="mdescRight">Removes an edge between a single predecessor and a single successor. <br/></td></tr>
-<tr class="separator:a604efbfc6e5a5889bd73b7a0924b3675"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af6e5d45f958a098c8a0b683d003c511b"><td class="memTemplParams" colspan="2"><a class="anchor" id="af6e5d45f958a098c8a0b683d003c511b"></a>
-template<typename T , typename V , bool  = tbb::internal::is_same_type< typename tuple_element<0,typename T::output_ports_type>::type,                                              typename tuple_element<0,typename V::input_ports_type>::type                                            >::value> </td></tr>
-<tr class="memitem:af6e5d45f958a098c8a0b683d003c511b"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::flow::interface7::remove_edge</b> (T &output, V &input)</td></tr>
-<tr class="separator:af6e5d45f958a098c8a0b683d003c511b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a24a01b1298679b5572316b157edc54da"><td class="memTemplParams" colspan="2"><a class="anchor" id="a24a01b1298679b5572316b157edc54da"></a>
-template<typename T , typename R , bool  = tbb::internal::is_same_type<typename tuple_element<0,typename T::output_ports_type>::type, receiver<R> >::value> </td></tr>
-<tr class="memitem:a24a01b1298679b5572316b157edc54da"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::flow::interface7::remove_edge</b> (T &output, receiver< R > &input)</td></tr>
-<tr class="separator:a24a01b1298679b5572316b157edc54da"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab56d97ab72ac99c0136ad463e9c2286e"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab56d97ab72ac99c0136ad463e9c2286e"></a>
-template<typename S , typename V , bool  = tbb::internal::is_same_type<sender<S>, typename tuple_element<0,typename V::input_ports_type>::type >::value> </td></tr>
-<tr class="memitem:ab56d97ab72ac99c0136ad463e9c2286e"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::flow::interface7::remove_edge</b> (sender< S > &output, V &input)</td></tr>
-<tr class="separator:ab56d97ab72ac99c0136ad463e9c2286e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afcbf2abcb561437eba15eda6df743420"><td class="memTemplParams" colspan="2"><a class="anchor" id="afcbf2abcb561437eba15eda6df743420"></a>
-template<typename Body , typename Node > </td></tr>
-<tr class="memitem:afcbf2abcb561437eba15eda6df743420"><td class="memTemplItemLeft" align="right" valign="top">Body </td><td class="memTemplItemRight" valign="bottom"><b>tbb::flow::interface7::copy_body</b> (Node &n)</td></tr>
-<tr class="memdesc:afcbf2abcb561437eba15eda6df743420"><td class="mdescLeft"> </td><td class="mdescRight">Returns a copy of the body from a function or continue node. <br/></td></tr>
-<tr class="separator:afcbf2abcb561437eba15eda6df743420"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
-Variables</h2></td></tr>
-<tr class="memitem:ad438065c0420375007de860eb0bcd037"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad438065c0420375007de860eb0bcd037"></a>
-static tbb::task *const </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface7::SUCCESSFULLY_ENQUEUED</b> = (task *)-1</td></tr>
-<tr class="separator:ad438065c0420375007de860eb0bcd037"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>The graph related classes and functions. </p>
-<p>There are some applications that best express dependencies as messages passed between nodes in a graph. These messages may contain data or simply act as signals that a predecessors has completed. The graph class and its associated node classes can be used to express such applications. </p>
-</div></div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00198.html b/doc/html/a00198.html
deleted file mode 100644
index a374a98..0000000
--- a/doc/html/a00198.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>memory_pool.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="dir_525f2cc589630bacbdc3bb450847427e.html">tbb</a></li><li class="navelem"><a class="el" href="dir_b9976680b2be72d2d0b8fca1c31202a2.html">1.0</a></li><li class="navelem"><a class="el" href="dir_63fb2cc293d133785b96e521fa051167.html">include</a></li><li class="navelem"><a class="el" href="dir_87119f26c7695cbc270003e99bc7f49f.html">tbb</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#namespaces">Constant Groups</a> |
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">memory_pool.h File Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00093.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html">tbb::interface6::memory_pool_allocator< T, P >::rebind< U ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00094.html">tbb::interface6::memory_pool_allocator< void, P ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00094.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00123.html">tbb::interface6::memory_pool_allocator< void, P >::rebind< U ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00092.html">tbb::interface6::memory_pool< Alloc ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Thread-safe growable pool allocator for variable-size requests.  <a href="a00092.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00065.html">tbb::interface6::fixed_pool</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr class="memitem:a00240"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html">tbb</a></td></tr>
-<tr class="memdesc:a00240"><td class="mdescLeft"> </td><td class="mdescRight">The namespace tbb contains all components of the library. <br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
-Constant Groups</h2></td></tr>
-<tr class="memitem:a00240"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html">tbb</a></td></tr>
-<tr class="memdesc:a00240"><td class="mdescLeft"> </td><td class="mdescRight">The namespace tbb contains all components of the library. <br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a21dc513d4407872bb3b257870c6d77b2"><td class="memTemplParams" colspan="2"><a class="anchor" id="a21dc513d4407872bb3b257870c6d77b2"></a>
-template<typename T , typename U , typename P > </td></tr>
-<tr class="memitem:a21dc513d4407872bb3b257870c6d77b2"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>tbb::interface6::operator==</b> (const memory_pool_allocator< T, P > &a, const memory_pool_allocator< U, P > &b)</td></tr>
-<tr class="separator:a21dc513d4407872bb3b257870c6d77b2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aed6a6d87d04444c2619b6f0136ab0702"><td class="memTemplParams" colspan="2"><a class="anchor" id="aed6a6d87d04444c2619b6f0136ab0702"></a>
-template<typename T , typename U , typename P > </td></tr>
-<tr class="memitem:aed6a6d87d04444c2619b6f0136ab0702"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>tbb::interface6::operator!=</b> (const memory_pool_allocator< T, P > &a, const memory_pool_allocator< U, P > &b)</td></tr>
-<tr class="separator:aed6a6d87d04444c2619b6f0136ab0702"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-</div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00212.html b/doc/html/a00212.html
new file mode 100644
index 0000000..eee7ddc
--- /dev/null
+++ b/doc/html/a00212.html
@@ -0,0 +1,194 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.4"/>
+<title>scalable_allocator.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.4 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_525f2cc589630bacbdc3bb450847427e.html">tbb</a></li><li class="navelem"><a class="el" href="dir_b9976680b2be72d2d0b8fca1c31202a2.html">1.0</a></li><li class="navelem"><a class="el" href="dir_63fb2cc293d133785b96e521fa051167.html">include</a></li><li class="navelem"><a class="el" href="dir_87119f26c7695cbc270003e99bc7f49f.html">tbb</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#namespaces">Namespaces</a> |
+<a href="#namespaces">Constant Groups</a> |
+<a href="#typedef-members">Typedefs</a> |
+<a href="#enum-members">Enumerations</a> |
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">scalable_allocator.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00079.html">rml::MemPoolPolicy</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00126.html">tbb::scalable_allocator< T ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00126.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00111.html">tbb::scalable_allocator< T >::rebind< U ></a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html">tbb::scalable_allocator< void ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00127.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00115.html">tbb::scalable_allocator< void >::rebind< U ></a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:a00230"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html">rml</a></td></tr>
+<tr class="memdesc:a00230"><td class="mdescLeft"> </td><td class="mdescRight">The namespace rml contains components of low-level memory pool interface. <br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00233"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.html">tbb</a></td></tr>
+<tr class="memdesc:a00233"><td class="mdescLeft"> </td><td class="mdescRight">The namespace tbb contains all components of the library. <br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
+Constant Groups</h2></td></tr>
+<tr class="memitem:a00230"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html">rml</a></td></tr>
+<tr class="memdesc:a00230"><td class="mdescLeft"> </td><td class="mdescRight">The namespace rml contains components of low-level memory pool interface. <br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00233"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.html">tbb</a></td></tr>
+<tr class="memdesc:a00233"><td class="mdescLeft"> </td><td class="mdescRight">The namespace tbb contains all components of the library. <br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ae13d09a0a00d9cae537655207c8560a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae13d09a0a00d9cae537655207c8560a2"></a>
+typedef void *(* </td><td class="memItemRight" valign="bottom"><b>rml::rawAllocType</b> )(intptr_t pool_id, size_t &bytes)</td></tr>
+<tr class="separator:ae13d09a0a00d9cae537655207c8560a2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a44f982f3478d462e81a1300dd516cb8e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a44f982f3478d462e81a1300dd516cb8e"></a>
+typedef int(* </td><td class="memItemRight" valign="bottom"><b>rml::rawFreeType</b> )(intptr_t pool_id, void *raw_ptr, size_t raw_bytes)</td></tr>
+<tr class="separator:a44f982f3478d462e81a1300dd516cb8e"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:abd5aafe33a307bbbe334f0049e625cd1"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>ScalableAllocationResult</b> { <br/>
+  <b>TBBMALLOC_OK</b>, 
+<b>TBBMALLOC_INVALID_PARAM</b>, 
+<b>TBBMALLOC_UNSUPPORTED</b>, 
+<b>TBBMALLOC_NO_MEMORY</b>, 
+<br/>
+  <b>TBBMALLOC_NO_EFFECT</b>
+<br/>
+ }</td></tr>
+<tr class="separator:abd5aafe33a307bbbe334f0049e625cd1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a75085058c147f85d8897858363b6e99c"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>AllocationModeParam</b> { <b>TBBMALLOC_USE_HUGE_PAGES</b>, 
+<b>USE_HUGE_PAGES</b> = TBBMALLOC_USE_HUGE_PAGES, 
+<b>TBBMALLOC_SET_SOFT_HEAP_LIMIT</b>
+ }</td></tr>
+<tr class="separator:a75085058c147f85d8897858363b6e99c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a57dd71201713941030ef626baa8fa0eb"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>ScalableAllocationCmd</b> { <b>TBBMALLOC_CLEAN_ALL_BUFFERS</b>, 
+<b>TBBMALLOC_CLEAN_THREAD_BUFFERS</b>
+ }</td></tr>
+<tr class="separator:a57dd71201713941030ef626baa8fa0eb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a09eea006328e62aac7cbbbd9a3fb7958"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>MemPoolError</b> { <br/>
+  <b>POOL_OK</b> = TBBMALLOC_OK, 
+<b>INVALID_POLICY</b> = TBBMALLOC_INVALID_PARAM, 
+<b>UNSUPPORTED_POLICY</b> = TBBMALLOC_UNSUPPORTED, 
+<b>NO_MEMORY</b> = TBBMALLOC_NO_MEMORY, 
+<br/>
+  <b>NO_EFFECT</b> = TBBMALLOC_NO_EFFECT
+<br/>
+ }</td></tr>
+<tr class="separator:a09eea006328e62aac7cbbbd9a3fb7958"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga2a5bdc71439a70b20f2eadf6e1a489e1"><td class="memItemLeft" align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#ga2a5bdc71439a70b20f2eadf6e1a489e1">scalable_malloc</a> (size_t size)</td></tr>
+<tr class="separator:ga2a5bdc71439a70b20f2eadf6e1a489e1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2ad3952b8c4dd7d293e02ae18fc37b84"><td class="memItemLeft" align="right" valign="top">void __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#ga2ad3952b8c4dd7d293e02ae18fc37b84">scalable_free</a> (void *ptr)</td></tr>
+<tr class="separator:ga2ad3952b8c4dd7d293e02ae18fc37b84"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga40d6e0bc19cdfa3005b2b935c62077a1"><td class="memItemLeft" align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#ga40d6e0bc19cdfa3005b2b935c62077a1">scalable_realloc</a> (void *ptr, size_t size)</td></tr>
+<tr class="separator:ga40d6e0bc19cdfa3005b2b935c62077a1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3b4ff39555cd9e929fce2958325cd8ea"><td class="memItemLeft" align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#ga3b4ff39555cd9e929fce2958325cd8ea">scalable_calloc</a> (size_t nobj, size_t size)</td></tr>
+<tr class="separator:ga3b4ff39555cd9e929fce2958325cd8ea"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf117b4994f719d539804da8dd115e28c"><td class="memItemLeft" align="right" valign="top">int __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#gaf117b4994f719d539804da8dd115e28c">scalable_posix_memalign</a> (void **memptr, size_t alignment, size_t size)</td></tr>
+<tr class="separator:gaf117b4994f719d539804da8dd115e28c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga903307de17bc1611515f8e6ae782a3d6"><td class="memItemLeft" align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#ga903307de17bc1611515f8e6ae782a3d6">scalable_aligned_malloc</a> (size_t size, size_t alignment)</td></tr>
+<tr class="separator:ga903307de17bc1611515f8e6ae782a3d6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa07391c54330b2e4dd1743ae9c9c4f2d"><td class="memItemLeft" align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#gaa07391c54330b2e4dd1743ae9c9c4f2d">scalable_aligned_realloc</a> (void *ptr, size_t size, size_t alignment)</td></tr>
+<tr class="separator:gaa07391c54330b2e4dd1743ae9c9c4f2d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad9aa7595581a7bc5be193d7e034c8f61"><td class="memItemLeft" align="right" valign="top">void __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#gad9aa7595581a7bc5be193d7e034c8f61">scalable_aligned_free</a> (void *ptr)</td></tr>
+<tr class="separator:gad9aa7595581a7bc5be193d7e034c8f61"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2b718206e50acb6392b86e4877d98213"><td class="memItemLeft" align="right" valign="top">size_t __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#ga2b718206e50acb6392b86e4877d98213">scalable_msize</a> (void *ptr)</td></tr>
+<tr class="separator:ga2b718206e50acb6392b86e4877d98213"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7f5029970f72ebbffee896c46a23958e"><td class="memItemLeft" align="right" valign="top">int __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#ga7f5029970f72ebbffee896c46a23958e">scalable_allocation_mode</a> (int param, intptr_t value)</td></tr>
+<tr class="separator:ga7f5029970f72ebbffee896c46a23958e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabe5acd876b4d89bf89787c4e779c2518"><td class="memItemLeft" align="right" valign="top">int __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#gabe5acd876b4d89bf89787c4e779c2518">scalable_allocation_command</a> (int cmd, void *param)</td></tr>
+<tr class="separator:gabe5acd876b4d89bf89787c4e779c2518"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a152cad3c009030ad9364bc1f3ff0c648"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a152cad3c009030ad9364bc1f3ff0c648"></a>
+MemPoolError </td><td class="memItemRight" valign="bottom"><b>rml::pool_create_v1</b> (intptr_t pool_id, const MemPoolPolicy *policy, rml::MemoryPool **pool)</td></tr>
+<tr class="separator:a152cad3c009030ad9364bc1f3ff0c648"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a19a32c0a2ff3a0d8c3eeba0ac894f887"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a19a32c0a2ff3a0d8c3eeba0ac894f887"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>rml::pool_destroy</b> (MemoryPool *memPool)</td></tr>
+<tr class="separator:a19a32c0a2ff3a0d8c3eeba0ac894f887"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5e8b6e757a521a8f2a186b8577aefb98"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e8b6e757a521a8f2a186b8577aefb98"></a>
+void * </td><td class="memItemRight" valign="bottom"><b>rml::pool_malloc</b> (MemoryPool *memPool, size_t size)</td></tr>
+<tr class="separator:a5e8b6e757a521a8f2a186b8577aefb98"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af9ac1381bacb2cbe1f4bca08e99dd2ee"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af9ac1381bacb2cbe1f4bca08e99dd2ee"></a>
+void * </td><td class="memItemRight" valign="bottom"><b>rml::pool_realloc</b> (MemoryPool *memPool, void *object, size_t size)</td></tr>
+<tr class="separator:af9ac1381bacb2cbe1f4bca08e99dd2ee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8ac1e82af435d8bef5f7c21506c5f831"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8ac1e82af435d8bef5f7c21506c5f831"></a>
+void * </td><td class="memItemRight" valign="bottom"><b>rml::pool_aligned_malloc</b> (MemoryPool *mPool, size_t size, size_t alignment)</td></tr>
+<tr class="separator:a8ac1e82af435d8bef5f7c21506c5f831"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3b2c69d3eae3f7bdcf36df5af9b2eb2e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3b2c69d3eae3f7bdcf36df5af9b2eb2e"></a>
+void * </td><td class="memItemRight" valign="bottom"><b>rml::pool_aligned_realloc</b> (MemoryPool *mPool, void *ptr, size_t size, size_t alignment)</td></tr>
+<tr class="separator:a3b2c69d3eae3f7bdcf36df5af9b2eb2e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a61700754fe0ba9d761fab34ad51e3bc2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a61700754fe0ba9d761fab34ad51e3bc2"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>rml::pool_reset</b> (MemoryPool *memPool)</td></tr>
+<tr class="separator:a61700754fe0ba9d761fab34ad51e3bc2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a06eff2efabb77248f880b86eecc08c6e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06eff2efabb77248f880b86eecc08c6e"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>rml::pool_free</b> (MemoryPool *memPool, void *object)</td></tr>
+<tr class="separator:a06eff2efabb77248f880b86eecc08c6e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab747521ef3669775b3310f5bc541919c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab747521ef3669775b3310f5bc541919c"></a>
+MemoryPool * </td><td class="memItemRight" valign="bottom"><b>rml::pool_identify</b> (void *object)</td></tr>
+<tr class="separator:ab747521ef3669775b3310f5bc541919c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a17323bcd620e6e3e4091e2e5568f97d3"><td class="memTemplParams" colspan="2"><a class="anchor" id="a17323bcd620e6e3e4091e2e5568f97d3"></a>
+template<typename T , typename U > </td></tr>
+<tr class="memitem:a17323bcd620e6e3e4091e2e5568f97d3"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>tbb::operator==</b> (const scalable_allocator< T > &, const scalable_allocator< U > &)</td></tr>
+<tr class="separator:a17323bcd620e6e3e4091e2e5568f97d3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af3fb987bb18adf8384db9c9713b81588"><td class="memTemplParams" colspan="2"><a class="anchor" id="af3fb987bb18adf8384db9c9713b81588"></a>
+template<typename T , typename U > </td></tr>
+<tr class="memitem:af3fb987bb18adf8384db9c9713b81588"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>tbb::operator!=</b> (const scalable_allocator< T > &, const scalable_allocator< U > &)</td></tr>
+<tr class="separator:af3fb987bb18adf8384db9c9713b81588"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<hr>
+<p></p>
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00217.html b/doc/html/a00217.html
deleted file mode 100644
index acb9944..0000000
--- a/doc/html/a00217.html
+++ /dev/null
@@ -1,191 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>scalable_allocator.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="dir_525f2cc589630bacbdc3bb450847427e.html">tbb</a></li><li class="navelem"><a class="el" href="dir_b9976680b2be72d2d0b8fca1c31202a2.html">1.0</a></li><li class="navelem"><a class="el" href="dir_63fb2cc293d133785b96e521fa051167.html">include</a></li><li class="navelem"><a class="el" href="dir_87119f26c7695cbc270003e99bc7f49f.html">tbb</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#namespaces">Constant Groups</a> |
-<a href="#typedef-members">Typedefs</a> |
-<a href="#enum-members">Enumerations</a> |
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">scalable_allocator.h File Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00095.html">rml::MemPoolPolicy</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html">tbb::scalable_allocator< T ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00129.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00115.html">tbb::scalable_allocator< T >::rebind< U ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html">tbb::scalable_allocator< void ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00130.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00116.html">tbb::scalable_allocator< void >::rebind< U ></a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr class="memitem:a00237"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html">rml</a></td></tr>
-<tr class="memdesc:a00237"><td class="mdescLeft"> </td><td class="mdescRight">The namespace rml contains components of low-level memory pool interface. <br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00240"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html">tbb</a></td></tr>
-<tr class="memdesc:a00240"><td class="mdescLeft"> </td><td class="mdescRight">The namespace tbb contains all components of the library. <br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
-Constant Groups</h2></td></tr>
-<tr class="memitem:a00237"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html">rml</a></td></tr>
-<tr class="memdesc:a00237"><td class="mdescLeft"> </td><td class="mdescRight">The namespace rml contains components of low-level memory pool interface. <br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00240"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html">tbb</a></td></tr>
-<tr class="memdesc:a00240"><td class="mdescLeft"> </td><td class="mdescRight">The namespace tbb contains all components of the library. <br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
-Typedefs</h2></td></tr>
-<tr class="memitem:ae13d09a0a00d9cae537655207c8560a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae13d09a0a00d9cae537655207c8560a2"></a>
-typedef void *(* </td><td class="memItemRight" valign="bottom"><b>rml::rawAllocType</b> )(intptr_t pool_id, size_t &bytes)</td></tr>
-<tr class="separator:ae13d09a0a00d9cae537655207c8560a2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a44f982f3478d462e81a1300dd516cb8e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a44f982f3478d462e81a1300dd516cb8e"></a>
-typedef int(* </td><td class="memItemRight" valign="bottom"><b>rml::rawFreeType</b> )(intptr_t pool_id, void *raw_ptr, size_t raw_bytes)</td></tr>
-<tr class="separator:a44f982f3478d462e81a1300dd516cb8e"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
-Enumerations</h2></td></tr>
-<tr class="memitem:abd5aafe33a307bbbe334f0049e625cd1"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>ScalableAllocationResult</b> { <br/>
-  <b>TBBMALLOC_OK</b>, 
-<b>TBBMALLOC_INVALID_PARAM</b>, 
-<b>TBBMALLOC_UNSUPPORTED</b>, 
-<b>TBBMALLOC_NO_MEMORY</b>, 
-<br/>
-  <b>TBBMALLOC_NO_EFFECT</b>
-<br/>
- }</td></tr>
-<tr class="separator:abd5aafe33a307bbbe334f0049e625cd1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a75085058c147f85d8897858363b6e99c"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>AllocationModeParam</b> { <b>TBBMALLOC_USE_HUGE_PAGES</b>, 
-<b>USE_HUGE_PAGES</b> = TBBMALLOC_USE_HUGE_PAGES, 
-<b>TBBMALLOC_SET_SOFT_HEAP_LIMIT</b>
- }</td></tr>
-<tr class="separator:a75085058c147f85d8897858363b6e99c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a57dd71201713941030ef626baa8fa0eb"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>ScalableAllocationCmd</b> { <b>TBBMALLOC_CLEAN_ALL_BUFFERS</b>, 
-<b>TBBMALLOC_CLEAN_THREAD_BUFFERS</b>
- }</td></tr>
-<tr class="separator:a57dd71201713941030ef626baa8fa0eb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a09eea006328e62aac7cbbbd9a3fb7958"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>MemPoolError</b> { <br/>
-  <b>POOL_OK</b> = TBBMALLOC_OK, 
-<b>INVALID_POLICY</b> = TBBMALLOC_INVALID_PARAM, 
-<b>UNSUPPORTED_POLICY</b> = TBBMALLOC_UNSUPPORTED, 
-<b>NO_MEMORY</b> = TBBMALLOC_NO_MEMORY, 
-<br/>
-  <b>NO_EFFECT</b> = TBBMALLOC_NO_EFFECT
-<br/>
- }</td></tr>
-<tr class="separator:a09eea006328e62aac7cbbbd9a3fb7958"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga2a5bdc71439a70b20f2eadf6e1a489e1"><td class="memItemLeft" align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#ga2a5bdc71439a70b20f2eadf6e1a489e1">scalable_malloc</a> (size_t size)</td></tr>
-<tr class="separator:ga2a5bdc71439a70b20f2eadf6e1a489e1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga2ad3952b8c4dd7d293e02ae18fc37b84"><td class="memItemLeft" align="right" valign="top">void __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#ga2ad3952b8c4dd7d293e02ae18fc37b84">scalable_free</a> (void *ptr)</td></tr>
-<tr class="separator:ga2ad3952b8c4dd7d293e02ae18fc37b84"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga40d6e0bc19cdfa3005b2b935c62077a1"><td class="memItemLeft" align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#ga40d6e0bc19cdfa3005b2b935c62077a1">scalable_realloc</a> (void *ptr, size_t size)</td></tr>
-<tr class="separator:ga40d6e0bc19cdfa3005b2b935c62077a1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga3b4ff39555cd9e929fce2958325cd8ea"><td class="memItemLeft" align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#ga3b4ff39555cd9e929fce2958325cd8ea">scalable_calloc</a> (size_t nobj, size_t size)</td></tr>
-<tr class="separator:ga3b4ff39555cd9e929fce2958325cd8ea"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gaf117b4994f719d539804da8dd115e28c"><td class="memItemLeft" align="right" valign="top">int __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#gaf117b4994f719d539804da8dd115e28c">scalable_posix_memalign</a> (void **memptr, size_t alignment, size_t size)</td></tr>
-<tr class="separator:gaf117b4994f719d539804da8dd115e28c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga903307de17bc1611515f8e6ae782a3d6"><td class="memItemLeft" align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#ga903307de17bc1611515f8e6ae782a3d6">scalable_aligned_malloc</a> (size_t size, size_t alignment)</td></tr>
-<tr class="separator:ga903307de17bc1611515f8e6ae782a3d6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gaa07391c54330b2e4dd1743ae9c9c4f2d"><td class="memItemLeft" align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#gaa07391c54330b2e4dd1743ae9c9c4f2d">scalable_aligned_realloc</a> (void *ptr, size_t size, size_t alignment)</td></tr>
-<tr class="separator:gaa07391c54330b2e4dd1743ae9c9c4f2d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gad9aa7595581a7bc5be193d7e034c8f61"><td class="memItemLeft" align="right" valign="top">void __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#gad9aa7595581a7bc5be193d7e034c8f61">scalable_aligned_free</a> (void *ptr)</td></tr>
-<tr class="separator:gad9aa7595581a7bc5be193d7e034c8f61"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga2b718206e50acb6392b86e4877d98213"><td class="memItemLeft" align="right" valign="top">size_t __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#ga2b718206e50acb6392b86e4877d98213">scalable_msize</a> (void *ptr)</td></tr>
-<tr class="separator:ga2b718206e50acb6392b86e4877d98213"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga7f5029970f72ebbffee896c46a23958e"><td class="memItemLeft" align="right" valign="top">int __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#ga7f5029970f72ebbffee896c46a23958e">scalable_allocation_mode</a> (int param, intptr_t value)</td></tr>
-<tr class="separator:ga7f5029970f72ebbffee896c46a23958e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gabe5acd876b4d89bf89787c4e779c2518"><td class="memItemLeft" align="right" valign="top">int __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#gabe5acd876b4d89bf89787c4e779c2518">scalable_allocation_command</a> (int cmd, void *param)</td></tr>
-<tr class="separator:gabe5acd876b4d89bf89787c4e779c2518"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a152cad3c009030ad9364bc1f3ff0c648"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a152cad3c009030ad9364bc1f3ff0c648"></a>
-MemPoolError </td><td class="memItemRight" valign="bottom"><b>rml::pool_create_v1</b> (intptr_t pool_id, const MemPoolPolicy *policy, rml::MemoryPool **pool)</td></tr>
-<tr class="separator:a152cad3c009030ad9364bc1f3ff0c648"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a19a32c0a2ff3a0d8c3eeba0ac894f887"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a19a32c0a2ff3a0d8c3eeba0ac894f887"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>rml::pool_destroy</b> (MemoryPool *memPool)</td></tr>
-<tr class="separator:a19a32c0a2ff3a0d8c3eeba0ac894f887"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5e8b6e757a521a8f2a186b8577aefb98"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e8b6e757a521a8f2a186b8577aefb98"></a>
-void * </td><td class="memItemRight" valign="bottom"><b>rml::pool_malloc</b> (MemoryPool *memPool, size_t size)</td></tr>
-<tr class="separator:a5e8b6e757a521a8f2a186b8577aefb98"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af9ac1381bacb2cbe1f4bca08e99dd2ee"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af9ac1381bacb2cbe1f4bca08e99dd2ee"></a>
-void * </td><td class="memItemRight" valign="bottom"><b>rml::pool_realloc</b> (MemoryPool *memPool, void *object, size_t size)</td></tr>
-<tr class="separator:af9ac1381bacb2cbe1f4bca08e99dd2ee"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8ac1e82af435d8bef5f7c21506c5f831"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8ac1e82af435d8bef5f7c21506c5f831"></a>
-void * </td><td class="memItemRight" valign="bottom"><b>rml::pool_aligned_malloc</b> (MemoryPool *mPool, size_t size, size_t alignment)</td></tr>
-<tr class="separator:a8ac1e82af435d8bef5f7c21506c5f831"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3b2c69d3eae3f7bdcf36df5af9b2eb2e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3b2c69d3eae3f7bdcf36df5af9b2eb2e"></a>
-void * </td><td class="memItemRight" valign="bottom"><b>rml::pool_aligned_realloc</b> (MemoryPool *mPool, void *ptr, size_t size, size_t alignment)</td></tr>
-<tr class="separator:a3b2c69d3eae3f7bdcf36df5af9b2eb2e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a61700754fe0ba9d761fab34ad51e3bc2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a61700754fe0ba9d761fab34ad51e3bc2"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>rml::pool_reset</b> (MemoryPool *memPool)</td></tr>
-<tr class="separator:a61700754fe0ba9d761fab34ad51e3bc2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a06eff2efabb77248f880b86eecc08c6e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06eff2efabb77248f880b86eecc08c6e"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>rml::pool_free</b> (MemoryPool *memPool, void *object)</td></tr>
-<tr class="separator:a06eff2efabb77248f880b86eecc08c6e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a17323bcd620e6e3e4091e2e5568f97d3"><td class="memTemplParams" colspan="2"><a class="anchor" id="a17323bcd620e6e3e4091e2e5568f97d3"></a>
-template<typename T , typename U > </td></tr>
-<tr class="memitem:a17323bcd620e6e3e4091e2e5568f97d3"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>tbb::operator==</b> (const scalable_allocator< T > &, const scalable_allocator< U > &)</td></tr>
-<tr class="separator:a17323bcd620e6e3e4091e2e5568f97d3"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af3fb987bb18adf8384db9c9713b81588"><td class="memTemplParams" colspan="2"><a class="anchor" id="af3fb987bb18adf8384db9c9713b81588"></a>
-template<typename T , typename U > </td></tr>
-<tr class="memitem:af3fb987bb18adf8384db9c9713b81588"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>tbb::operator!=</b> (const scalable_allocator< T > &, const scalable_allocator< U > &)</td></tr>
-<tr class="separator:af3fb987bb18adf8384db9c9713b81588"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-</div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00230.html b/doc/html/a00230.html
new file mode 100644
index 0000000..2492ebb
--- /dev/null
+++ b/doc/html/a00230.html
@@ -0,0 +1,116 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.4"/>
+<title>rml Namespace Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.4 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="namespaces.html"><span>Namespace List</span></a></li>
+      <li><a href="namespacemembers.html"><span>Namespace Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#typedef-members">Typedefs</a> |
+<a href="#enum-members">Enumerations</a> |
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">rml Namespace Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>The namespace rml contains components of low-level memory pool interface.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00079.html">MemPoolPolicy</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ae13d09a0a00d9cae537655207c8560a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae13d09a0a00d9cae537655207c8560a2"></a>
+typedef void *(* </td><td class="memItemRight" valign="bottom"><b>rawAllocType</b> )(intptr_t pool_id, size_t &bytes)</td></tr>
+<tr class="separator:ae13d09a0a00d9cae537655207c8560a2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a44f982f3478d462e81a1300dd516cb8e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a44f982f3478d462e81a1300dd516cb8e"></a>
+typedef int(* </td><td class="memItemRight" valign="bottom"><b>rawFreeType</b> )(intptr_t pool_id, void *raw_ptr, size_t raw_bytes)</td></tr>
+<tr class="separator:a44f982f3478d462e81a1300dd516cb8e"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:a09eea006328e62aac7cbbbd9a3fb7958"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>MemPoolError</b> { <br/>
+  <b>POOL_OK</b> = TBBMALLOC_OK, 
+<b>INVALID_POLICY</b> = TBBMALLOC_INVALID_PARAM, 
+<b>UNSUPPORTED_POLICY</b> = TBBMALLOC_UNSUPPORTED, 
+<b>NO_MEMORY</b> = TBBMALLOC_NO_MEMORY, 
+<br/>
+  <b>NO_EFFECT</b> = TBBMALLOC_NO_EFFECT
+<br/>
+ }</td></tr>
+<tr class="separator:a09eea006328e62aac7cbbbd9a3fb7958"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a152cad3c009030ad9364bc1f3ff0c648"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a152cad3c009030ad9364bc1f3ff0c648"></a>
+MemPoolError </td><td class="memItemRight" valign="bottom"><b>pool_create_v1</b> (intptr_t pool_id, const <a class="el" href="a00079.html">MemPoolPolicy</a> *policy, rml::MemoryPool **pool)</td></tr>
+<tr class="separator:a152cad3c009030ad9364bc1f3ff0c648"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a19a32c0a2ff3a0d8c3eeba0ac894f887"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a19a32c0a2ff3a0d8c3eeba0ac894f887"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>pool_destroy</b> (MemoryPool *memPool)</td></tr>
+<tr class="separator:a19a32c0a2ff3a0d8c3eeba0ac894f887"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5e8b6e757a521a8f2a186b8577aefb98"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e8b6e757a521a8f2a186b8577aefb98"></a>
+void * </td><td class="memItemRight" valign="bottom"><b>pool_malloc</b> (MemoryPool *memPool, size_t size)</td></tr>
+<tr class="separator:a5e8b6e757a521a8f2a186b8577aefb98"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af9ac1381bacb2cbe1f4bca08e99dd2ee"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af9ac1381bacb2cbe1f4bca08e99dd2ee"></a>
+void * </td><td class="memItemRight" valign="bottom"><b>pool_realloc</b> (MemoryPool *memPool, void *object, size_t size)</td></tr>
+<tr class="separator:af9ac1381bacb2cbe1f4bca08e99dd2ee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8ac1e82af435d8bef5f7c21506c5f831"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8ac1e82af435d8bef5f7c21506c5f831"></a>
+void * </td><td class="memItemRight" valign="bottom"><b>pool_aligned_malloc</b> (MemoryPool *mPool, size_t size, size_t alignment)</td></tr>
+<tr class="separator:a8ac1e82af435d8bef5f7c21506c5f831"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3b2c69d3eae3f7bdcf36df5af9b2eb2e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3b2c69d3eae3f7bdcf36df5af9b2eb2e"></a>
+void * </td><td class="memItemRight" valign="bottom"><b>pool_aligned_realloc</b> (MemoryPool *mPool, void *ptr, size_t size, size_t alignment)</td></tr>
+<tr class="separator:a3b2c69d3eae3f7bdcf36df5af9b2eb2e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a61700754fe0ba9d761fab34ad51e3bc2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a61700754fe0ba9d761fab34ad51e3bc2"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>pool_reset</b> (MemoryPool *memPool)</td></tr>
+<tr class="separator:a61700754fe0ba9d761fab34ad51e3bc2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a06eff2efabb77248f880b86eecc08c6e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06eff2efabb77248f880b86eecc08c6e"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>pool_free</b> (MemoryPool *memPool, void *object)</td></tr>
+<tr class="separator:a06eff2efabb77248f880b86eecc08c6e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab747521ef3669775b3310f5bc541919c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab747521ef3669775b3310f5bc541919c"></a>
+MemoryPool * </td><td class="memItemRight" valign="bottom"><b>pool_identify</b> (void *object)</td></tr>
+<tr class="separator:ab747521ef3669775b3310f5bc541919c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>The namespace rml contains components of low-level memory pool interface. </p>
+</div></div><!-- contents -->
+<hr>
+<p></p>
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00233.html b/doc/html/a00233.html
new file mode 100644
index 0000000..1424c70
--- /dev/null
+++ b/doc/html/a00233.html
@@ -0,0 +1,681 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.4"/>
+<title>tbb Namespace Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.4 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="namespaces.html"><span>Namespace List</span></a></li>
+      <li><a href="namespacemembers.html"><span>Namespace Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#typedef-members">Typedefs</a> |
+<a href="#enum-members">Enumerations</a> |
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">tbb Namespace Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>The namespace tbb contains all components of the library.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00014.html">aligned_space</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Block of space aligned sufficiently to construct an array T with N elements.  <a href="a00014.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00015.html">atomic</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Primary template for atomic.  <a href="a00015.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00016.html">atomic< void * ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Specialization for <a class="el" href="a00016.html" title="Specialization for atomic<void*>, for sake of not allowing arithmetic or operator->. ">atomic<void*></a>, for sake of not allowing arithmetic or operator->.  <a href="a00016.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00022.html">blocked_range</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A range over which to iterate.  <a href="a00022.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00023.html">blocked_range2d</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A 2-dimensional range that models the Range concept.  <a href="a00023.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html">blocked_range3d</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A 3-dimensional range that models the Range concept.  <a href="a00024.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00027.html">cache_aligned_allocator</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00027.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00028.html">cache_aligned_allocator< void ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00028.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00033.html">combinable</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Thread-local storage with optional reduction.  <a href="a00033.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html">concurrent_bounded_queue</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A high-performance thread-safe blocking concurrent bounded queue.  <a href="a00035.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html">concurrent_vector</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Concurrent vector container.  <a href="a00046.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html">mutex</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Wrapper around the platform's native lock.  <a href="a00082.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00084.html">null_mutex</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A mutex which does nothing.  <a href="a00084.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00085.html">null_rw_mutex</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A rw mutex which does nothing.  <a href="a00085.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html">task_group_context</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00104.html">pre_scan_tag</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Used to indicate that the initial scan is being performed.  <a href="a00104.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00061.html">final_scan_tag</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Used to indicate that the final scan is being performed.  <a href="a00061.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html">parallel_while</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a stream, with optional addition of more work.  <a href="a00102.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00059.html">filter</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline.  <a href="a00059.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html">thread_bound_filter</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline served by a user thread.  <a href="a00158.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00103.html">pipeline</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A processing pipeline that applies filters to items.  <a href="a00103.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00106.html">queuing_mutex</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Queuing mutex with local-only spinning.  <a href="a00106.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00107.html">queuing_rw_mutex</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Queuing reader-writer mutex with local-only spinning.  <a href="a00107.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00121.html">recursive_mutex</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00126.html">scalable_allocator</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00126.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html">scalable_allocator< void ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00127.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00140.html">spin_mutex</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A lock that occupies a single byte.  <a href="a00140.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html">spin_rw_mutex_v3</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Fast, unfair, spinning reader-writer lock with backoff and writer-preference.  <a href="a00141.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html">task_handle</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00145.html">task_group</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html">structured_task_group</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html">task_scheduler_init</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Class delimiting the scope of task scheduler activity.  <a href="a00150.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html">tbb_allocator</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00153.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00154.html">tbb_allocator< void ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00154.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html">zero_allocator</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00169.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html">zero_allocator< void, Allocator ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00170.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00018.html">bad_last_alloc</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Exception for concurrent containers.  <a href="a00018.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00071.html">improper_lock</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Exception for PPL locks.  <a href="a00071.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00168.html">user_abort</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Exception for user-initiated abort.  <a href="a00168.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00080.html">missing_wait</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Exception for missing wait on <a class="el" href="a00142.html">structured_task_group</a>.  <a href="a00080.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00073.html">invalid_multiple_scheduling</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Exception for repeated scheduling of the same <a class="el" href="a00148.html">task_handle</a>.  <a href="a00073.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html">tbb_exception</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Interface to be implemented by all exceptions TBB recognizes and propagates across the threads.  <a href="a00155.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html">captured_exception</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">This class is used by TBB to propagate information about unhandled exceptions into the root thread.  <a href="a00032.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00081.html">movable_exception</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread.  <a href="a00081.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html">tick_count</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Absolute timestamp.  <a href="a00163.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:a889d8f126388fdc24c597d195a4d7028"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a889d8f126388fdc24c597d195a4d7028"></a>
+typedef <br class="typebreak"/>
+<a class="el" href="a00050.html">internal::critical_section_v4</a> </td><td class="memItemRight" valign="bottom"><b>critical_section</b></td></tr>
+<tr class="separator:a889d8f126388fdc24c597d195a4d7028"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga69722571e9e4406693c4a1379f0b47eb"><td class="memItemLeft" align="right" valign="top">typedef <br class="typebreak"/>
+interface7::internal::padded_mutex<br class="typebreak"/>
+< interface7::internal::x86_eliding_mutex, <br class="typebreak"/>
+false > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#ga69722571e9e4406693c4a1379f0b47eb">speculative_spin_mutex</a></td></tr>
+<tr class="memdesc:ga69722571e9e4406693c4a1379f0b47eb"><td class="mdescLeft"> </td><td class="mdescRight">A cross-platform spin mutex with speculative lock acquisition.  <a href="a00255.html#ga69722571e9e4406693c4a1379f0b47eb">More...</a><br/></td></tr>
+<tr class="separator:ga69722571e9e4406693c4a1379f0b47eb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6cc3d02744cab8ac389919806d47e417"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6cc3d02744cab8ac389919806d47e417"></a>
+typedef <a class="el" href="a00141.html">spin_rw_mutex_v3</a> </td><td class="memItemRight" valign="bottom"><b>spin_rw_mutex</b></td></tr>
+<tr class="separator:a6cc3d02744cab8ac389919806d47e417"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1a268320974a3357e9609a2f98be5090"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1a268320974a3357e9609a2f98be5090"></a>
+typedef std::size_t </td><td class="memItemRight" valign="bottom"><b>stack_size_type</b></td></tr>
+<tr class="separator:a1a268320974a3357e9609a2f98be5090"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af58de4ab3200dd2bd621f052c6f677e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af58de4ab3200dd2bd621f052c6f677e4"></a>
+typedef <br class="typebreak"/>
+<a class="el" href="a00152.html">tbb::internal::task_scheduler_observer_v3</a> </td><td class="memItemRight" valign="bottom"><b>task_scheduler_observer</b></td></tr>
+<tr class="separator:af58de4ab3200dd2bd621f052c6f677e4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7805ca254302ff88b566f7dcde7e56b0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7805ca254302ff88b566f7dcde7e56b0"></a>
+typedef <a class="el" href="a00157.html">internal::tbb_thread_v3</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.html#a7805ca254302ff88b566f7dcde7e56b0">tbb_thread</a></td></tr>
+<tr class="memdesc:a7805ca254302ff88b566f7dcde7e56b0"><td class="mdescLeft"> </td><td class="mdescRight">Users reference thread class by name tbb_thread. <br/></td></tr>
+<tr class="separator:a7805ca254302ff88b566f7dcde7e56b0"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:adb86d08473679d6fe0eabcdc766ffe3a"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.html#adb86d08473679d6fe0eabcdc766ffe3a">memory_semantics</a> { <a class="el" href="a00233.html#adb86d08473679d6fe0eabcdc766ffe3aa6a315190cf4509ec388ecb423432f36a">full_fence</a>, 
+<a class="el" href="a00233.html#adb86d08473679d6fe0eabcdc766ffe3aaa92646b4dc7618530d3a9f51dd10a418">acquire</a>, 
+<a class="el" href="a00233.html#adb86d08473679d6fe0eabcdc766ffe3aa412563418e657114a102db610f726632">release</a>, 
+<a class="el" href="a00233.html#adb86d08473679d6fe0eabcdc766ffe3aa73cb2e2bcb94442b8b2b72e93a76f2e5">relaxed</a>
+ }</td></tr>
+<tr class="memdesc:adb86d08473679d6fe0eabcdc766ffe3a"><td class="mdescLeft"> </td><td class="mdescRight">Specifies memory semantics.  <a href="a00233.html#adb86d08473679d6fe0eabcdc766ffe3a">More...</a><br/></td></tr>
+<tr class="separator:adb86d08473679d6fe0eabcdc766ffe3a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac5bcb6154c8307fa9f97806afddf2288"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.html#ac5bcb6154c8307fa9f97806afddf2288">ets_key_usage_type</a> { <b>ets_key_per_instance</b>, 
+<b>ets_no_key</b>
+ }</td></tr>
+<tr class="memdesc:ac5bcb6154c8307fa9f97806afddf2288"><td class="mdescLeft"> </td><td class="mdescRight">enum for selecting between single key and key-per-instance versions <br/></td></tr>
+<tr class="separator:ac5bcb6154c8307fa9f97806afddf2288"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4454db821441ca68bad263d82c40fb7a"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>task_group_status</b> { <b>not_complete</b>, 
+<b>complete</b>, 
+<b>canceled</b>
+ }</td></tr>
+<tr class="separator:a4454db821441ca68bad263d82c40fb7a"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a5fefe7ed201b920d3fd6c390849c1ccf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5fefe7ed201b920d3fd6c390849c1ccf"></a>
+ </td><td class="memItemRight" valign="bottom"><b>__TBB_DECL_ATOMIC</b> (__TBB_LONG_LONG) __TBB_DECL_ATOMIC(unsigned __TBB_LONG_LONG) __TBB_DECL_ATOMIC(long) __TBB_DECL_ATOMIC(unsigned long) <a class="el" href="a00233.html#a59425abdcb421136e9f5954cfb975e5f">__TBB_DECL_ATOMIC_ALT</a>(unsigned</td></tr>
+<tr class="separator:a5fefe7ed201b920d3fd6c390849c1ccf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a59425abdcb421136e9f5954cfb975e5f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59425abdcb421136e9f5954cfb975e5f"></a>
+size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.html#a59425abdcb421136e9f5954cfb975e5f">__TBB_DECL_ATOMIC_ALT</a> (int, ptrdiff_t) __TBB_DECL_ATOMIC(unsigned) __TBB_DECL_ATOMIC(int) __TBB_DECL_ATOMIC(unsigned short) __TBB_DECL_ATOMIC(short) __TBB_DECL_ATOMIC(char) __TBB_DECL_ATOMIC(signed char) __TBB_DECL_ATOMIC(unsigned char) __TBB_DECL_ATOMIC(wchar_t) template< typename T > struct <a class="el" href="a00015.html">atomic</a>< T * ></td></tr>
+<tr class="memdesc:a59425abdcb421136e9f5954cfb975e5f"><td class="mdescLeft"> </td><td class="mdescRight">Specialization for atomic<T*> with arithmetic and operator->. <br/></td></tr>
+<tr class="separator:a59425abdcb421136e9f5954cfb975e5f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aed82c77b389b208a1c27012a2fc0b5fd"><td class="memTemplParams" colspan="2"><a class="anchor" id="aed82c77b389b208a1c27012a2fc0b5fd"></a>
+template<memory_semantics M, typename T > </td></tr>
+<tr class="memitem:aed82c77b389b208a1c27012a2fc0b5fd"><td class="memTemplItemLeft" align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>load</b> (const <a class="el" href="a00015.html">atomic</a>< T > &a)</td></tr>
+<tr class="separator:aed82c77b389b208a1c27012a2fc0b5fd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a219b97248f55c909aa3d84e43934b105"><td class="memTemplParams" colspan="2"><a class="anchor" id="a219b97248f55c909aa3d84e43934b105"></a>
+template<memory_semantics M, typename T > </td></tr>
+<tr class="memitem:a219b97248f55c909aa3d84e43934b105"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>store</b> (<a class="el" href="a00015.html">atomic</a>< T > &a, T value)</td></tr>
+<tr class="separator:a219b97248f55c909aa3d84e43934b105"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a49a6826cf4fb8845d26d8d1f1ad0b5fa"><td class="memTemplParams" colspan="2"><a class="anchor" id="a49a6826cf4fb8845d26d8d1f1ad0b5fa"></a>
+template<typename T , typename U > </td></tr>
+<tr class="memitem:a49a6826cf4fb8845d26d8d1f1ad0b5fa"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00027.html">cache_aligned_allocator</a>< T > &, const <a class="el" href="a00027.html">cache_aligned_allocator</a>< U > &)</td></tr>
+<tr class="separator:a49a6826cf4fb8845d26d8d1f1ad0b5fa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afdaaf3f3248efc804c6f6fe35855704d"><td class="memTemplParams" colspan="2"><a class="anchor" id="afdaaf3f3248efc804c6f6fe35855704d"></a>
+template<typename T , typename U > </td></tr>
+<tr class="memitem:afdaaf3f3248efc804c6f6fe35855704d"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00027.html">cache_aligned_allocator</a>< T > &, const <a class="el" href="a00027.html">cache_aligned_allocator</a>< U > &)</td></tr>
+<tr class="separator:afdaaf3f3248efc804c6f6fe35855704d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1db9470dd2871cb7394ab262dca2051a"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1db9470dd2871cb7394ab262dca2051a"></a>
+template<typename Key , typename T , typename HashCompare , typename A1 , typename A2 > </td></tr>
+<tr class="memitem:a1db9470dd2871cb7394ab262dca2051a"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const concurrent_hash_map< Key, T, HashCompare, A1 > &a, const concurrent_hash_map< Key, T, HashCompare, A2 > &b)</td></tr>
+<tr class="separator:a1db9470dd2871cb7394ab262dca2051a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a05667bcb12f763124fcda402d3720c6a"><td class="memTemplParams" colspan="2"><a class="anchor" id="a05667bcb12f763124fcda402d3720c6a"></a>
+template<typename Key , typename T , typename HashCompare , typename A1 , typename A2 > </td></tr>
+<tr class="memitem:a05667bcb12f763124fcda402d3720c6a"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const concurrent_hash_map< Key, T, HashCompare, A1 > &a, const concurrent_hash_map< Key, T, HashCompare, A2 > &b)</td></tr>
+<tr class="separator:a05667bcb12f763124fcda402d3720c6a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a16dc40ac2badc8b36b8cc70f92801b76"><td class="memTemplParams" colspan="2"><a class="anchor" id="a16dc40ac2badc8b36b8cc70f92801b76"></a>
+template<typename Key , typename T , typename HashCompare , typename A > </td></tr>
+<tr class="memitem:a16dc40ac2badc8b36b8cc70f92801b76"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>swap</b> (concurrent_hash_map< Key, T, HashCompare, A > &a, concurrent_hash_map< Key, T, HashCompare, A > &b)</td></tr>
+<tr class="separator:a16dc40ac2badc8b36b8cc70f92801b76"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a79ecee2d23f2486c03e720ab9e3ac36c"><td class="memTemplParams" colspan="2"><a class="anchor" id="a79ecee2d23f2486c03e720ab9e3ac36c"></a>
+template<typename T , class A1 , class A2 > </td></tr>
+<tr class="memitem:a79ecee2d23f2486c03e720ab9e3ac36c"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00046.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00046.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
+<tr class="separator:a79ecee2d23f2486c03e720ab9e3ac36c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab7258c4acabadf94d03dc62e29396ea0"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab7258c4acabadf94d03dc62e29396ea0"></a>
+template<typename T , class A1 , class A2 > </td></tr>
+<tr class="memitem:ab7258c4acabadf94d03dc62e29396ea0"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00046.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00046.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
+<tr class="separator:ab7258c4acabadf94d03dc62e29396ea0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1523d0389a8cbda80c17ae4f45caa3a6"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1523d0389a8cbda80c17ae4f45caa3a6"></a>
+template<typename T , class A1 , class A2 > </td></tr>
+<tr class="memitem:a1523d0389a8cbda80c17ae4f45caa3a6"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator<</b> (const <a class="el" href="a00046.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00046.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
+<tr class="separator:a1523d0389a8cbda80c17ae4f45caa3a6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a78cfed58bfde865b68859beb54805019"><td class="memTemplParams" colspan="2"><a class="anchor" id="a78cfed58bfde865b68859beb54805019"></a>
+template<typename T , class A1 , class A2 > </td></tr>
+<tr class="memitem:a78cfed58bfde865b68859beb54805019"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator></b> (const <a class="el" href="a00046.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00046.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
+<tr class="separator:a78cfed58bfde865b68859beb54805019"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac6009f009cd331952d8944bcc9733375"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac6009f009cd331952d8944bcc9733375"></a>
+template<typename T , class A1 , class A2 > </td></tr>
+<tr class="memitem:ac6009f009cd331952d8944bcc9733375"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator<=</b> (const <a class="el" href="a00046.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00046.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
+<tr class="separator:ac6009f009cd331952d8944bcc9733375"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa0d82e59919a1f2c7caa06d061b2480f"><td class="memTemplParams" colspan="2"><a class="anchor" id="aa0d82e59919a1f2c7caa06d061b2480f"></a>
+template<typename T , class A1 , class A2 > </td></tr>
+<tr class="memitem:aa0d82e59919a1f2c7caa06d061b2480f"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator>=</b> (const <a class="el" href="a00046.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00046.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
+<tr class="separator:aa0d82e59919a1f2c7caa06d061b2480f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4cd91084f08db8c2d23c6a0362e0c441"><td class="memTemplParams" colspan="2"><a class="anchor" id="a4cd91084f08db8c2d23c6a0362e0c441"></a>
+template<typename T , class A > </td></tr>
+<tr class="memitem:a4cd91084f08db8c2d23c6a0362e0c441"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>swap</b> (<a class="el" href="a00046.html">concurrent_vector</a>< T, A > &a, <a class="el" href="a00046.html">concurrent_vector</a>< T, A > &b)</td></tr>
+<tr class="separator:a4cd91084f08db8c2d23c6a0362e0c441"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a17323bcd620e6e3e4091e2e5568f97d3"><td class="memTemplParams" colspan="2"><a class="anchor" id="a17323bcd620e6e3e4091e2e5568f97d3"></a>
+template<typename T , typename U > </td></tr>
+<tr class="memitem:a17323bcd620e6e3e4091e2e5568f97d3"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00126.html">scalable_allocator</a>< T > &, const <a class="el" href="a00126.html">scalable_allocator</a>< U > &)</td></tr>
+<tr class="separator:a17323bcd620e6e3e4091e2e5568f97d3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af3fb987bb18adf8384db9c9713b81588"><td class="memTemplParams" colspan="2"><a class="anchor" id="af3fb987bb18adf8384db9c9713b81588"></a>
+template<typename T , typename U > </td></tr>
+<tr class="memitem:af3fb987bb18adf8384db9c9713b81588"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00126.html">scalable_allocator</a>< T > &, const <a class="el" href="a00126.html">scalable_allocator</a>< U > &)</td></tr>
+<tr class="separator:af3fb987bb18adf8384db9c9713b81588"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaef1698b222ba9312ab24dcdcd98bbd8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaef1698b222ba9312ab24dcdcd98bbd8"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>is_current_task_group_canceling</b> ()</td></tr>
+<tr class="separator:aaef1698b222ba9312ab24dcdcd98bbd8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6c291402bcc0ba9263cf08b76faf7a2c"><td class="memTemplParams" colspan="2"><a class="anchor" id="a6c291402bcc0ba9263cf08b76faf7a2c"></a>
+template<class F > </td></tr>
+<tr class="memitem:a6c291402bcc0ba9263cf08b76faf7a2c"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="a00148.html">task_handle</a>< F > </td><td class="memTemplItemRight" valign="bottom"><b>make_task</b> (const F &f)</td></tr>
+<tr class="separator:a6c291402bcc0ba9263cf08b76faf7a2c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af1595d1bfc4f7be923c17b4ee5c556ae"><td class="memTemplParams" colspan="2"><a class="anchor" id="af1595d1bfc4f7be923c17b4ee5c556ae"></a>
+template<typename T , typename U > </td></tr>
+<tr class="memitem:af1595d1bfc4f7be923c17b4ee5c556ae"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00153.html">tbb_allocator</a>< T > &, const <a class="el" href="a00153.html">tbb_allocator</a>< U > &)</td></tr>
+<tr class="separator:af1595d1bfc4f7be923c17b4ee5c556ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a82ff968904aaa1bb0e2152f590c47be6"><td class="memTemplParams" colspan="2"><a class="anchor" id="a82ff968904aaa1bb0e2152f590c47be6"></a>
+template<typename T , typename U > </td></tr>
+<tr class="memitem:a82ff968904aaa1bb0e2152f590c47be6"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00153.html">tbb_allocator</a>< T > &, const <a class="el" href="a00153.html">tbb_allocator</a>< U > &)</td></tr>
+<tr class="separator:a82ff968904aaa1bb0e2152f590c47be6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7bf465e2f6730e2cea0c9531bec9fb2f"><td class="memTemplParams" colspan="2"><a class="anchor" id="a7bf465e2f6730e2cea0c9531bec9fb2f"></a>
+template<typename T1 , template< typename X1 > class B1, typename T2 , template< typename X2 > class B2> </td></tr>
+<tr class="memitem:a7bf465e2f6730e2cea0c9531bec9fb2f"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00169.html">zero_allocator</a>< T1, B1 > &a, const <a class="el" href="a00169.html">zero_allocator</a>< T2, B2 > &b)</td></tr>
+<tr class="separator:a7bf465e2f6730e2cea0c9531bec9fb2f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a606762cf7c614cb5a1631955938737cd"><td class="memTemplParams" colspan="2"><a class="anchor" id="a606762cf7c614cb5a1631955938737cd"></a>
+template<typename T1 , template< typename X1 > class B1, typename T2 , template< typename X2 > class B2> </td></tr>
+<tr class="memitem:a606762cf7c614cb5a1631955938737cd"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00169.html">zero_allocator</a>< T1, B1 > &a, const <a class="el" href="a00169.html">zero_allocator</a>< T2, B2 > &b)</td></tr>
+<tr class="separator:a606762cf7c614cb5a1631955938737cd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ade8a8bc300d5ef09d38cbfb8baff5cd2"><td class="memItemLeft" align="right" valign="top">int __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.html#ade8a8bc300d5ef09d38cbfb8baff5cd2">TBB_runtime_interface_version</a> ()</td></tr>
+<tr class="memdesc:ade8a8bc300d5ef09d38cbfb8baff5cd2"><td class="mdescLeft"> </td><td class="mdescRight">The function returns the interface version of the TBB shared library being used.  <a href="#ade8a8bc300d5ef09d38cbfb8baff5cd2">More...</a><br/></td></tr>
+<tr class="separator:ade8a8bc300d5ef09d38cbfb8baff5cd2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a467930903ce9b7c240c4ad8f0fb8ae3d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a467930903ce9b7c240c4ad8f0fb8ae3d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>swap</b> (<a class="el" href="a00157.html">internal::tbb_thread_v3</a> &t1, <a class="el" href="a00157.html">internal::tbb_thread_v3</a> &t2) __TBB_NOEXCEPT(true)</td></tr>
+<tr class="separator:a467930903ce9b7c240c4ad8f0fb8ae3d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac41903d6b80e61bd6c605412e7820e08"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac41903d6b80e61bd6c605412e7820e08"></a>
+void </td><td class="memItemRight" valign="bottom"><b>move</b> (<a class="el" href="a00233.html#a7805ca254302ff88b566f7dcde7e56b0">tbb_thread</a> &t1, <a class="el" href="a00233.html#a7805ca254302ff88b566f7dcde7e56b0">tbb_thread</a> &t2)</td></tr>
+<tr class="separator:ac41903d6b80e61bd6c605412e7820e08"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa037c1f149250d61cd2fad4541a5e6cb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa037c1f149250d61cd2fad4541a5e6cb"></a>
+<a class="el" href="a00072.html">tick_count::interval_t</a> </td><td class="memItemRight" valign="bottom"><b>operator-</b> (const <a class="el" href="a00163.html">tick_count</a> &t1, const <a class="el" href="a00163.html">tick_count</a> &t0)</td></tr>
+<tr class="separator:aa037c1f149250d61cd2fad4541a5e6cb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr><td colspan="2"><div class="groupHeader">parallel_for</div></td></tr>
+<tr><td colspan="2"><div class="groupText"><p>See also requirements on <a class="el" href="a00001.html">Range</a> and <a class="el" href="a00002.html">parallel_for Body</a>. </p>
+</div></td></tr>
+<tr class="memitem:gaa8444c29dc4d2e527a1036717d109aef"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:gaa8444c29dc4d2e527a1036717d109aef"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gaa8444c29dc4d2e527a1036717d109aef">parallel_for</a> (const Range &range, const Body &body)</td></tr>
+<tr class="memdesc:gaa8444c29dc4d2e527a1036717d109aef"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with default partitioner.  <a href="a00252.html#gaa8444c29dc4d2e527a1036717d109aef">More...</a><br/></td></tr>
+<tr class="separator:gaa8444c29dc4d2e527a1036717d109aef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9722d2bc7e5edb4fae9f3b55268a1ecc"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga9722d2bc7e5edb4fae9f3b55268a1ecc"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga9722d2bc7e5edb4fae9f3b55268a1ecc">parallel_for</a> (const Range &range, const Body &body, const simple_partitioner &partitioner)</td></tr>
+<tr class="memdesc:ga9722d2bc7e5edb4fae9f3b55268a1ecc"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with simple partitioner.  <a href="a00252.html#ga9722d2bc7e5edb4fae9f3b55268a1ecc">More...</a><br/></td></tr>
+<tr class="separator:ga9722d2bc7e5edb4fae9f3b55268a1ecc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad6c4b06f96ae33cefe78235841791902"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:gad6c4b06f96ae33cefe78235841791902"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gad6c4b06f96ae33cefe78235841791902">parallel_for</a> (const Range &range, const Body &body, const auto_partitioner &partitioner)</td></tr>
+<tr class="memdesc:gad6c4b06f96ae33cefe78235841791902"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with auto_partitioner.  <a href="a00252.html#gad6c4b06f96ae33cefe78235841791902">More...</a><br/></td></tr>
+<tr class="separator:gad6c4b06f96ae33cefe78235841791902"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga14ae8670bd55620f906aa06e073bd225"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga14ae8670bd55620f906aa06e073bd225"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga14ae8670bd55620f906aa06e073bd225">parallel_for</a> (const Range &range, const Body &body, const static_partitioner &partitioner)</td></tr>
+<tr class="memdesc:ga14ae8670bd55620f906aa06e073bd225"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with static_partitioner.  <a href="a00252.html#ga14ae8670bd55620f906aa06e073bd225">More...</a><br/></td></tr>
+<tr class="separator:ga14ae8670bd55620f906aa06e073bd225"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf3d39e372d825bf54283b5ceafa90057"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:gaf3d39e372d825bf54283b5ceafa90057"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gaf3d39e372d825bf54283b5ceafa90057">parallel_for</a> (const Range &range, const Body &body, affinity_partitioner &partitioner)</td></tr>
+<tr class="memdesc:gaf3d39e372d825bf54283b5ceafa90057"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with affinity_partitioner.  <a href="a00252.html#gaf3d39e372d825bf54283b5ceafa90057">More...</a><br/></td></tr>
+<tr class="separator:gaf3d39e372d825bf54283b5ceafa90057"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga93a621202db94665144de38c0b09bdad"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga93a621202db94665144de38c0b09bdad"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga93a621202db94665144de38c0b09bdad">parallel_for</a> (const Range &range, const Body &body, <a class="el" href="a00147.html">task_group_context</a> &context)</td></tr>
+<tr class="memdesc:ga93a621202db94665144de38c0b09bdad"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with default partitioner and user-supplied context.  <a href="a00252.html#ga93a621202db94665144de38c0b09bdad">More...</a><br/></td></tr>
+<tr class="separator:ga93a621202db94665144de38c0b09bdad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5b7fab9d6ffe7a9345e9349a5a007bd4"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga5b7fab9d6ffe7a9345e9349a5a007bd4"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga5b7fab9d6ffe7a9345e9349a5a007bd4">parallel_for</a> (const Range &range, const Body &body, const simple_partitioner &partitioner, <a class="el" href="a00147.html">task_group_context</a> &context)</td></tr>
+<tr class="memdesc:ga5b7fab9d6ffe7a9345e9349a5a007bd4"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with simple partitioner and user-supplied context.  <a href="a00252.html#ga5b7fab9d6ffe7a9345e9349a5a007bd4">More...</a><br/></td></tr>
+<tr class="separator:ga5b7fab9d6ffe7a9345e9349a5a007bd4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4c9935d8710a5cf786a92f3522ab2976"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga4c9935d8710a5cf786a92f3522ab2976"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga4c9935d8710a5cf786a92f3522ab2976">parallel_for</a> (const Range &range, const Body &body, const auto_partitioner &partitioner, <a class="el" href="a00147.html">task_group_context</a> &context)</td></tr>
+<tr class="memdesc:ga4c9935d8710a5cf786a92f3522ab2976"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with auto_partitioner and user-supplied context.  <a href="a00252.html#ga4c9935d8710a5cf786a92f3522ab2976">More...</a><br/></td></tr>
+<tr class="separator:ga4c9935d8710a5cf786a92f3522ab2976"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4bb3d8cf616632476ca923eb056ee07d"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga4bb3d8cf616632476ca923eb056ee07d"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga4bb3d8cf616632476ca923eb056ee07d">parallel_for</a> (const Range &range, const Body &body, const static_partitioner &partitioner, <a class="el" href="a00147.html">task_group_context</a> &context)</td></tr>
+<tr class="memdesc:ga4bb3d8cf616632476ca923eb056ee07d"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with static_partitioner and user-supplied context.  <a href="a00252.html#ga4bb3d8cf616632476ca923eb056ee07d">More...</a><br/></td></tr>
+<tr class="separator:ga4bb3d8cf616632476ca923eb056ee07d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga62b1a9ac304ba1eb4f87ab8cc18dd281"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga62b1a9ac304ba1eb4f87ab8cc18dd281"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga62b1a9ac304ba1eb4f87ab8cc18dd281">parallel_for</a> (const Range &range, const Body &body, affinity_partitioner &partitioner, <a class="el" href="a00147.html">task_group_context</a> &context)</td></tr>
+<tr class="memdesc:ga62b1a9ac304ba1eb4f87ab8cc18dd281"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with affinity_partitioner and user-supplied context.  <a href="a00252.html#ga62b1a9ac304ba1eb4f87ab8cc18dd281">More...</a><br/></td></tr>
+<tr class="separator:ga62b1a9ac304ba1eb4f87ab8cc18dd281"><td class="memSeparator" colspan="2"> </td></tr>
+<tr><td colspan="2"><div class="groupHeader">parallel_for_each</div></td></tr>
+<tr class="memitem:gac9225af45fd0468843b3fc32608c71de"><td class="memTemplParams" colspan="2">template<typename Iterator , typename Function > </td></tr>
+<tr class="memitem:gac9225af45fd0468843b3fc32608c71de"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gac9225af45fd0468843b3fc32608c71de">parallel_for_each</a> (Iterator first, Iterator last, const Function &f, <a class="el" href="a00147.html">task_group_context</a> &context)</td></tr>
+<tr class="memdesc:gac9225af45fd0468843b3fc32608c71de"><td class="mdescLeft"> </td><td class="mdescRight">Calls function f for all items from [first, last) interval using user-supplied context.  <a href="a00252.html#gac9225af45fd0468843b3fc32608c71de">More...</a><br/></td></tr>
+<tr class="separator:gac9225af45fd0468843b3fc32608c71de"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga72131543fd218b67dbb048b768d534e4"><td class="memTemplParams" colspan="2">template<typename Range , typename Function > </td></tr>
+<tr class="memitem:ga72131543fd218b67dbb048b768d534e4"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga72131543fd218b67dbb048b768d534e4">parallel_for_each</a> (Range &rng, const Function &f, <a class="el" href="a00147.html">task_group_context</a> &context)</td></tr>
+<tr class="memdesc:ga72131543fd218b67dbb048b768d534e4"><td class="mdescLeft"> </td><td class="mdescRight">Calls function f for all items from rng using user-supplied context.  <a href="a00252.html#ga72131543fd218b67dbb048b768d534e4">More...</a><br/></td></tr>
+<tr class="separator:ga72131543fd218b67dbb048b768d534e4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad7d0702d16fbd7554584ab735eed39ba"><td class="memTemplParams" colspan="2">template<typename Range , typename Function > </td></tr>
+<tr class="memitem:gad7d0702d16fbd7554584ab735eed39ba"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gad7d0702d16fbd7554584ab735eed39ba">parallel_for_each</a> (const Range &rng, const Function &f, <a class="el" href="a00147.html">task_group_context</a> &context)</td></tr>
+<tr class="memdesc:gad7d0702d16fbd7554584ab735eed39ba"><td class="mdescLeft"> </td><td class="mdescRight">Calls function f for all items from const rng user-supplied context.  <a href="a00252.html#gad7d0702d16fbd7554584ab735eed39ba">More...</a><br/></td></tr>
+<tr class="separator:gad7d0702d16fbd7554584ab735eed39ba"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga21c63dee10188196a2f0514afa81ff1f"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga21c63dee10188196a2f0514afa81ff1f"></a>
+template<typename Iterator , typename Function > </td></tr>
+<tr class="memitem:ga21c63dee10188196a2f0514afa81ff1f"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga21c63dee10188196a2f0514afa81ff1f">parallel_for_each</a> (Iterator first, Iterator last, const Function &f)</td></tr>
+<tr class="memdesc:ga21c63dee10188196a2f0514afa81ff1f"><td class="mdescLeft"> </td><td class="mdescRight">Uses default context. <br/></td></tr>
+<tr class="separator:ga21c63dee10188196a2f0514afa81ff1f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5868cd01f2126b139ab5809f64632db1"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga5868cd01f2126b139ab5809f64632db1"></a>
+template<typename Range , typename Function > </td></tr>
+<tr class="memitem:ga5868cd01f2126b139ab5809f64632db1"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga5868cd01f2126b139ab5809f64632db1">parallel_for_each</a> (Range &rng, const Function &f)</td></tr>
+<tr class="memdesc:ga5868cd01f2126b139ab5809f64632db1"><td class="mdescLeft"> </td><td class="mdescRight">Uses default context. <br/></td></tr>
+<tr class="separator:ga5868cd01f2126b139ab5809f64632db1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga33463c8b0d0104cf9d9e0f9cb3c0b26b"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga33463c8b0d0104cf9d9e0f9cb3c0b26b"></a>
+template<typename Range , typename Function > </td></tr>
+<tr class="memitem:ga33463c8b0d0104cf9d9e0f9cb3c0b26b"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga33463c8b0d0104cf9d9e0f9cb3c0b26b">parallel_for_each</a> (const Range &rng, const Function &f)</td></tr>
+<tr class="memdesc:ga33463c8b0d0104cf9d9e0f9cb3c0b26b"><td class="mdescLeft"> </td><td class="mdescRight">Uses default context. <br/></td></tr>
+<tr class="separator:ga33463c8b0d0104cf9d9e0f9cb3c0b26b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr><td colspan="2"><div class="groupHeader">parallel_invoke</div></td></tr>
+<tr class="memitem:ga3c6fe4bf1076c82132e666fb545451cd"><td class="memTemplParams" colspan="2">template<typename F0 , typename F1 , typename... F> </td></tr>
+<tr class="memitem:ga3c6fe4bf1076c82132e666fb545451cd"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga3c6fe4bf1076c82132e666fb545451cd">parallel_invoke</a> (F0 &&f0, F1 &&f1, F &&...f)</td></tr>
+<tr class="memdesc:ga3c6fe4bf1076c82132e666fb545451cd"><td class="mdescLeft"> </td><td class="mdescRight">Executes a list of tasks in parallel and waits for all tasks to complete.  <a href="a00252.html#ga3c6fe4bf1076c82132e666fb545451cd">More...</a><br/></td></tr>
+<tr class="separator:ga3c6fe4bf1076c82132e666fb545451cd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga14459dcbcd631194df803b155a7f610b"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga14459dcbcd631194df803b155a7f610b"></a>
+template<typename F0 , typename F1 > </td></tr>
+<tr class="memitem:ga14459dcbcd631194df803b155a7f610b"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, <a class="el" href="a00147.html">tbb::task_group_context</a> &context)</td></tr>
+<tr class="separator:ga14459dcbcd631194df803b155a7f610b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaaea3f3a8883128afb596a963e856277f"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaaea3f3a8883128afb596a963e856277f"></a>
+template<typename F0 , typename F1 , typename F2 > </td></tr>
+<tr class="memitem:gaaea3f3a8883128afb596a963e856277f"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, <a class="el" href="a00147.html">tbb::task_group_context</a> &context)</td></tr>
+<tr class="separator:gaaea3f3a8883128afb596a963e856277f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga74932e64ede5047387108fa45f1af96f"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga74932e64ede5047387108fa45f1af96f"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 > </td></tr>
+<tr class="memitem:ga74932e64ede5047387108fa45f1af96f"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, <a class="el" href="a00147.html">tbb::task_group_context</a> &context)</td></tr>
+<tr class="separator:ga74932e64ede5047387108fa45f1af96f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaefc1ba8f73cbdd094575f6db454fc6b5"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaefc1ba8f73cbdd094575f6db454fc6b5"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 > </td></tr>
+<tr class="memitem:gaefc1ba8f73cbdd094575f6db454fc6b5"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, <a class="el" href="a00147.html">tbb::task_group_context</a> &context)</td></tr>
+<tr class="separator:gaefc1ba8f73cbdd094575f6db454fc6b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3f02dfbb94238b2cf2ef8f20844b03af"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga3f02dfbb94238b2cf2ef8f20844b03af"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 > </td></tr>
+<tr class="memitem:ga3f02dfbb94238b2cf2ef8f20844b03af"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, <a class="el" href="a00147.html">tbb::task_group_context</a> &context)</td></tr>
+<tr class="separator:ga3f02dfbb94238b2cf2ef8f20844b03af"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad8c1220bbd59e3b8e7bbcdcfdda8047e"><td class="memTemplParams" colspan="2"><a class="anchor" id="gad8c1220bbd59e3b8e7bbcdcfdda8047e"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 > </td></tr>
+<tr class="memitem:gad8c1220bbd59e3b8e7bbcdcfdda8047e"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, <a class="el" href="a00147.html">tbb::task_group_context</a> &context)</td></tr>
+<tr class="separator:gad8c1220bbd59e3b8e7bbcdcfdda8047e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5ee83a66397ee0b15c77756cb5e5168e"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga5ee83a66397ee0b15c77756cb5e5168e"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 > </td></tr>
+<tr class="memitem:ga5ee83a66397ee0b15c77756cb5e5168e"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, <a class="el" href="a00147.html">tbb::task_group_context</a> &context)</td></tr>
+<tr class="separator:ga5ee83a66397ee0b15c77756cb5e5168e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1af92ebd06f6cdf5ee668b1fe62657bd"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga1af92ebd06f6cdf5ee668b1fe62657bd"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 > </td></tr>
+<tr class="memitem:ga1af92ebd06f6cdf5ee668b1fe62657bd"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, <a class="el" href="a00147.html">tbb::task_group_context</a> &context)</td></tr>
+<tr class="separator:ga1af92ebd06f6cdf5ee668b1fe62657bd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga65846bc3b2f63ed1448b6cdfea9e1c80"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga65846bc3b2f63ed1448b6cdfea9e1c80"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 , typename F9 > </td></tr>
+<tr class="memitem:ga65846bc3b2f63ed1448b6cdfea9e1c80"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, const F9 &f9, <a class="el" href="a00147.html">tbb::task_group_context</a> &context)</td></tr>
+<tr class="separator:ga65846bc3b2f63ed1448b6cdfea9e1c80"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6b1c36ece1d3950677dd01ef0863648c"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga6b1c36ece1d3950677dd01ef0863648c"></a>
+template<typename F0 , typename F1 > </td></tr>
+<tr class="memitem:ga6b1c36ece1d3950677dd01ef0863648c"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1)</td></tr>
+<tr class="separator:ga6b1c36ece1d3950677dd01ef0863648c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa979656a4c207782b74800c6c42982f5"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaa979656a4c207782b74800c6c42982f5"></a>
+template<typename F0 , typename F1 , typename F2 > </td></tr>
+<tr class="memitem:gaa979656a4c207782b74800c6c42982f5"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2)</td></tr>
+<tr class="separator:gaa979656a4c207782b74800c6c42982f5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga219cb8061b7cf5454c0bc4d67cff1e34"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga219cb8061b7cf5454c0bc4d67cff1e34"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 > </td></tr>
+<tr class="memitem:ga219cb8061b7cf5454c0bc4d67cff1e34"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3)</td></tr>
+<tr class="separator:ga219cb8061b7cf5454c0bc4d67cff1e34"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8319ee980cd7cfb03f12ffc2a5ea4895"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga8319ee980cd7cfb03f12ffc2a5ea4895"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 > </td></tr>
+<tr class="memitem:ga8319ee980cd7cfb03f12ffc2a5ea4895"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4)</td></tr>
+<tr class="separator:ga8319ee980cd7cfb03f12ffc2a5ea4895"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga295daf6f7394fba29a979b914be09fc6"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga295daf6f7394fba29a979b914be09fc6"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 > </td></tr>
+<tr class="memitem:ga295daf6f7394fba29a979b914be09fc6"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5)</td></tr>
+<tr class="separator:ga295daf6f7394fba29a979b914be09fc6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7652a01622a2f28df1e0edf40b691190"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga7652a01622a2f28df1e0edf40b691190"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 > </td></tr>
+<tr class="memitem:ga7652a01622a2f28df1e0edf40b691190"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6)</td></tr>
+<tr class="separator:ga7652a01622a2f28df1e0edf40b691190"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadd8826371866c58e41dee3546c35d2c8"><td class="memTemplParams" colspan="2"><a class="anchor" id="gadd8826371866c58e41dee3546c35d2c8"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 > </td></tr>
+<tr class="memitem:gadd8826371866c58e41dee3546c35d2c8"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7)</td></tr>
+<tr class="separator:gadd8826371866c58e41dee3546c35d2c8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaeca8b72507d67dd023dae728bdc89896"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaeca8b72507d67dd023dae728bdc89896"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 > </td></tr>
+<tr class="memitem:gaeca8b72507d67dd023dae728bdc89896"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8)</td></tr>
+<tr class="separator:gaeca8b72507d67dd023dae728bdc89896"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga17c9f95fac24b2b7b62f325f511ee7be"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga17c9f95fac24b2b7b62f325f511ee7be"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 , typename F9 > </td></tr>
+<tr class="memitem:ga17c9f95fac24b2b7b62f325f511ee7be"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, const F9 &f9)</td></tr>
+<tr class="separator:ga17c9f95fac24b2b7b62f325f511ee7be"><td class="memSeparator" colspan="2"> </td></tr>
+<tr><td colspan="2"><div class="groupHeader">parallel_reduce</div></td></tr>
+<tr><td colspan="2"><div class="groupText"><p>See also requirements on <a class="el" href="a00001.html">Range</a> and <a class="el" href="a00003.html">parallel_reduce Body</a>. </p>
+</div></td></tr>
+<tr class="memitem:ga7b1ce9568e0a0efe1bd2d55677bc6687"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga7b1ce9568e0a0efe1bd2d55677bc6687"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga7b1ce9568e0a0efe1bd2d55677bc6687">parallel_reduce</a> (const Range &range, Body &body)</td></tr>
+<tr class="memdesc:ga7b1ce9568e0a0efe1bd2d55677bc6687"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and default partitioner.  <a href="a00252.html#ga7b1ce9568e0a0efe1bd2d55677bc6687">More...</a><br/></td></tr>
+<tr class="separator:ga7b1ce9568e0a0efe1bd2d55677bc6687"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaebb92b593827f9c3f5e1f8ee2f7d5f82"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:gaebb92b593827f9c3f5e1f8ee2f7d5f82"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gaebb92b593827f9c3f5e1f8ee2f7d5f82">parallel_reduce</a> (const Range &range, Body &body, const simple_partitioner &partitioner)</td></tr>
+<tr class="memdesc:gaebb92b593827f9c3f5e1f8ee2f7d5f82"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and simple_partitioner.  <a href="a00252.html#gaebb92b593827f9c3f5e1f8ee2f7d5f82">More...</a><br/></td></tr>
+<tr class="separator:gaebb92b593827f9c3f5e1f8ee2f7d5f82"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3011e7266fb1e43d307060fe75be2c6e"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga3011e7266fb1e43d307060fe75be2c6e"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga3011e7266fb1e43d307060fe75be2c6e">parallel_reduce</a> (const Range &range, Body &body, const auto_partitioner &partitioner)</td></tr>
+<tr class="memdesc:ga3011e7266fb1e43d307060fe75be2c6e"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and auto_partitioner.  <a href="a00252.html#ga3011e7266fb1e43d307060fe75be2c6e">More...</a><br/></td></tr>
+<tr class="separator:ga3011e7266fb1e43d307060fe75be2c6e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf15a4b0e2174dce3a12b70a89bbcdc63"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:gaf15a4b0e2174dce3a12b70a89bbcdc63"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gaf15a4b0e2174dce3a12b70a89bbcdc63">parallel_reduce</a> (const Range &range, Body &body, const static_partitioner &partitioner)</td></tr>
+<tr class="memdesc:gaf15a4b0e2174dce3a12b70a89bbcdc63"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and static_partitioner.  <a href="a00252.html#gaf15a4b0e2174dce3a12b70a89bbcdc63">More...</a><br/></td></tr>
+<tr class="separator:gaf15a4b0e2174dce3a12b70a89bbcdc63"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6e83e121490df24fa5893b14e68f5e2a"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga6e83e121490df24fa5893b14e68f5e2a"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga6e83e121490df24fa5893b14e68f5e2a">parallel_reduce</a> (const Range &range, Body &body, affinity_partitioner &partitioner)</td></tr>
+<tr class="memdesc:ga6e83e121490df24fa5893b14e68f5e2a"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and affinity_partitioner.  <a href="a00252.html#ga6e83e121490df24fa5893b14e68f5e2a">More...</a><br/></td></tr>
+<tr class="separator:ga6e83e121490df24fa5893b14e68f5e2a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac57281bea03450ccb2d098ee8c7ab697"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:gac57281bea03450ccb2d098ee8c7ab697"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gac57281bea03450ccb2d098ee8c7ab697">parallel_reduce</a> (const Range &range, Body &body, const simple_partitioner &partitioner, <a class="el" href="a00147.html">task_group_context</a> &context)</td></tr>
+<tr class="memdesc:gac57281bea03450ccb2d098ee8c7ab697"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, simple partitioner and user-supplied context.  <a href="a00252.html#gac57281bea03450ccb2d098ee8c7ab697">More...</a><br/></td></tr>
+<tr class="separator:gac57281bea03450ccb2d098ee8c7ab697"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5f3ebf50ab7f5e53fd936817c866f7be"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga5f3ebf50ab7f5e53fd936817c866f7be"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga5f3ebf50ab7f5e53fd936817c866f7be">parallel_reduce</a> (const Range &range, Body &body, const auto_partitioner &partitioner, <a class="el" href="a00147.html">task_group_context</a> &context)</td></tr>
+<tr class="memdesc:ga5f3ebf50ab7f5e53fd936817c866f7be"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, auto_partitioner and user-supplied context.  <a href="a00252.html#ga5f3ebf50ab7f5e53fd936817c866f7be">More...</a><br/></td></tr>
+<tr class="separator:ga5f3ebf50ab7f5e53fd936817c866f7be"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf049e6d185c38c2d9e153b0edd3a9015"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:gaf049e6d185c38c2d9e153b0edd3a9015"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gaf049e6d185c38c2d9e153b0edd3a9015">parallel_reduce</a> (const Range &range, Body &body, const static_partitioner &partitioner, <a class="el" href="a00147.html">task_group_context</a> &context)</td></tr>
+<tr class="memdesc:gaf049e6d185c38c2d9e153b0edd3a9015"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, static_partitioner and user-supplied context.  <a href="a00252.html#gaf049e6d185c38c2d9e153b0edd3a9015">More...</a><br/></td></tr>
+<tr class="separator:gaf049e6d185c38c2d9e153b0edd3a9015"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5df3f3a9618fd35931107819cb43fce6"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga5df3f3a9618fd35931107819cb43fce6"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga5df3f3a9618fd35931107819cb43fce6">parallel_reduce</a> (const Range &range, Body &body, affinity_partitioner &partitioner, <a class="el" href="a00147.html">task_group_context</a> &context)</td></tr>
+<tr class="memdesc:ga5df3f3a9618fd35931107819cb43fce6"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, affinity_partitioner and user-supplied context.  <a href="a00252.html#ga5df3f3a9618fd35931107819cb43fce6">More...</a><br/></td></tr>
+<tr class="separator:ga5df3f3a9618fd35931107819cb43fce6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1c9b66fa25cadee9ca3bff75a6609b05"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
+<tr class="memitem:ga1c9b66fa25cadee9ca3bff75a6609b05"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga1c9b66fa25cadee9ca3bff75a6609b05">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction)</td></tr>
+<tr class="memdesc:ga1c9b66fa25cadee9ca3bff75a6609b05"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and default partitioner.  <a href="a00252.html#ga1c9b66fa25cadee9ca3bff75a6609b05">More...</a><br/></td></tr>
+<tr class="separator:ga1c9b66fa25cadee9ca3bff75a6609b05"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0b22fd1de0e8bbaf46587d3c63a1ed93"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
+<tr class="memitem:ga0b22fd1de0e8bbaf46587d3c63a1ed93"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga0b22fd1de0e8bbaf46587d3c63a1ed93">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const simple_partitioner &partitioner)</td></tr>
+<tr class="memdesc:ga0b22fd1de0e8bbaf46587d3c63a1ed93"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and simple_partitioner.  <a href="a00252.html#ga0b22fd1de0e8bbaf46587d3c63a1ed93">More...</a><br/></td></tr>
+<tr class="separator:ga0b22fd1de0e8bbaf46587d3c63a1ed93"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga56e6b6e2eee521f532c00d855280be69"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
+<tr class="memitem:ga56e6b6e2eee521f532c00d855280be69"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga56e6b6e2eee521f532c00d855280be69">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const auto_partitioner &partitioner)</td></tr>
+<tr class="memdesc:ga56e6b6e2eee521f532c00d855280be69"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and auto_partitioner.  <a href="a00252.html#ga56e6b6e2eee521f532c00d855280be69">More...</a><br/></td></tr>
+<tr class="separator:ga56e6b6e2eee521f532c00d855280be69"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac0d4eb5ab127b185a92720eff1136fa8"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
+<tr class="memitem:gac0d4eb5ab127b185a92720eff1136fa8"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gac0d4eb5ab127b185a92720eff1136fa8">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const static_partitioner &partitioner)</td></tr>
+<tr class="memdesc:gac0d4eb5ab127b185a92720eff1136fa8"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and static_partitioner.  <a href="a00252.html#gac0d4eb5ab127b185a92720eff1136fa8">More...</a><br/></td></tr>
+<tr class="separator:gac0d4eb5ab127b185a92720eff1136fa8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac26c35d1983e7ac2ab003cc8e49dd7e6"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
+<tr class="memitem:gac26c35d1983e7ac2ab003cc8e49dd7e6"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gac26c35d1983e7ac2ab003cc8e49dd7e6">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, affinity_partitioner &partitioner)</td></tr>
+<tr class="memdesc:gac26c35d1983e7ac2ab003cc8e49dd7e6"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and affinity_partitioner.  <a href="a00252.html#gac26c35d1983e7ac2ab003cc8e49dd7e6">More...</a><br/></td></tr>
+<tr class="separator:gac26c35d1983e7ac2ab003cc8e49dd7e6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga518ef2653004d60319bdfc1c6bce86b6"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
+<tr class="memitem:ga518ef2653004d60319bdfc1c6bce86b6"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga518ef2653004d60319bdfc1c6bce86b6">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const simple_partitioner &partitioner, <a class="el" href="a00147.html">task_group_context</a> &context)</td></tr>
+<tr class="memdesc:ga518ef2653004d60319bdfc1c6bce86b6"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, simple partitioner and user-supplied context.  <a href="a00252.html#ga518ef2653004d60319bdfc1c6bce86b6">More...</a><br/></td></tr>
+<tr class="separator:ga518ef2653004d60319bdfc1c6bce86b6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga24ba50caf5a7c32cbd38912508cb69a4"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
+<tr class="memitem:ga24ba50caf5a7c32cbd38912508cb69a4"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga24ba50caf5a7c32cbd38912508cb69a4">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const auto_partitioner &partitioner, <a class="el" href="a00147.html">task_group_context</a> &context)</td></tr>
+<tr class="memdesc:ga24ba50caf5a7c32cbd38912508cb69a4"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, auto_partitioner and user-supplied context.  <a href="a00252.html#ga24ba50caf5a7c32cbd38912508cb69a4">More...</a><br/></td></tr>
+<tr class="separator:ga24ba50caf5a7c32cbd38912508cb69a4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1507205a91a8fd26bd7d9bbcb74ad98b"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
+<tr class="memitem:ga1507205a91a8fd26bd7d9bbcb74ad98b"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga1507205a91a8fd26bd7d9bbcb74ad98b">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const static_partitioner &partitioner, <a class="el" href="a00147.html">task_group_context</a> &context)</td></tr>
+<tr class="memdesc:ga1507205a91a8fd26bd7d9bbcb74ad98b"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, static_partitioner and user-supplied context.  <a href="a00252.html#ga1507205a91a8fd26bd7d9bbcb74ad98b">More...</a><br/></td></tr>
+<tr class="separator:ga1507205a91a8fd26bd7d9bbcb74ad98b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga367a8e77c4dac3f8764785afdc6c9299"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
+<tr class="memitem:ga367a8e77c4dac3f8764785afdc6c9299"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga367a8e77c4dac3f8764785afdc6c9299">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, affinity_partitioner &partitioner, <a class="el" href="a00147.html">task_group_context</a> &context)</td></tr>
+<tr class="memdesc:ga367a8e77c4dac3f8764785afdc6c9299"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, affinity_partitioner and user-supplied context.  <a href="a00252.html#ga367a8e77c4dac3f8764785afdc6c9299">More...</a><br/></td></tr>
+<tr class="separator:ga367a8e77c4dac3f8764785afdc6c9299"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1fd7e3c43592dfe1ae3e3572bd80d4f6"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga1fd7e3c43592dfe1ae3e3572bd80d4f6"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga1fd7e3c43592dfe1ae3e3572bd80d4f6">parallel_deterministic_reduce</a> (const Range &range, Body &body)</td></tr>
+<tr class="memdesc:ga1fd7e3c43592dfe1ae3e3572bd80d4f6"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction and default partitioner.  <a href="a00252.html#ga1fd7e3c43592dfe1ae3e3572bd80d4f6">More...</a><br/></td></tr>
+<tr class="separator:ga1fd7e3c43592dfe1ae3e3572bd80d4f6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga361201f81b4ec7b86f81b579d2db647a"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga361201f81b4ec7b86f81b579d2db647a"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga361201f81b4ec7b86f81b579d2db647a">parallel_deterministic_reduce</a> (const Range &range, Body &body, <a class="el" href="a00147.html">task_group_context</a> &context)</td></tr>
+<tr class="memdesc:ga361201f81b4ec7b86f81b579d2db647a"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction, simple partitioner and user-supplied context.  <a href="a00252.html#ga361201f81b4ec7b86f81b579d2db647a">More...</a><br/></td></tr>
+<tr class="separator:ga361201f81b4ec7b86f81b579d2db647a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7f69e6a632acb51ed26a43ebd331f349"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
+<tr class="memitem:ga7f69e6a632acb51ed26a43ebd331f349"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga7f69e6a632acb51ed26a43ebd331f349">parallel_deterministic_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction)</td></tr>
+<tr class="memdesc:ga7f69e6a632acb51ed26a43ebd331f349"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction and default partitioner.  <a href="a00252.html#ga7f69e6a632acb51ed26a43ebd331f349">More...</a><br/></td></tr>
+<tr class="separator:ga7f69e6a632acb51ed26a43ebd331f349"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga69b4eea059a62cbbf409cbad02b70bfa"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
+<tr class="memitem:ga69b4eea059a62cbbf409cbad02b70bfa"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga69b4eea059a62cbbf409cbad02b70bfa">parallel_deterministic_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, <a class="el" href="a00147.html">task_group_context</a> &context)</td></tr>
+<tr class="memdesc:ga69b4eea059a62cbbf409cbad02b70bfa"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction, simple partitioner and user-supplied context.  <a href="a00252.html#ga69b4eea059a62cbbf409cbad02b70bfa">More...</a><br/></td></tr>
+<tr class="separator:ga69b4eea059a62cbbf409cbad02b70bfa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr><td colspan="2"><div class="groupHeader">parallel_scan</div></td></tr>
+<tr><td colspan="2"><div class="groupText"><p>See also requirements on <a class="el" href="a00001.html">Range</a> and <a class="el" href="a00005.html">parallel_scan Body</a>. </p>
+</div></td></tr>
+<tr class="memitem:gae7eaaf124471a6c603b28fc925e8fbbb"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:gae7eaaf124471a6c603b28fc925e8fbbb"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gae7eaaf124471a6c603b28fc925e8fbbb">parallel_scan</a> (const Range &range, Body &body)</td></tr>
+<tr class="memdesc:gae7eaaf124471a6c603b28fc925e8fbbb"><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with default partitioner.  <a href="a00252.html#gae7eaaf124471a6c603b28fc925e8fbbb">More...</a><br/></td></tr>
+<tr class="separator:gae7eaaf124471a6c603b28fc925e8fbbb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7ddacf5e49f1bea9b67803f2d0f57531"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga7ddacf5e49f1bea9b67803f2d0f57531"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga7ddacf5e49f1bea9b67803f2d0f57531">parallel_scan</a> (const Range &range, Body &body, const simple_partitioner &partitioner)</td></tr>
+<tr class="memdesc:ga7ddacf5e49f1bea9b67803f2d0f57531"><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with simple_partitioner.  <a href="a00252.html#ga7ddacf5e49f1bea9b67803f2d0f57531">More...</a><br/></td></tr>
+<tr class="separator:ga7ddacf5e49f1bea9b67803f2d0f57531"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3548041731b7fa14f30f155541ceebb9"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga3548041731b7fa14f30f155541ceebb9"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga3548041731b7fa14f30f155541ceebb9">parallel_scan</a> (const Range &range, Body &body, const auto_partitioner &partitioner)</td></tr>
+<tr class="memdesc:ga3548041731b7fa14f30f155541ceebb9"><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with auto_partitioner.  <a href="a00252.html#ga3548041731b7fa14f30f155541ceebb9">More...</a><br/></td></tr>
+<tr class="separator:ga3548041731b7fa14f30f155541ceebb9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr><td colspan="2"><div class="groupHeader">parallel_sort</div></td></tr>
+<tr><td colspan="2"><div class="groupText"><p>See also requirements on <a class="el" href="a00006.html">iterators for parallel_sort</a>. </p>
+</div></td></tr>
+<tr class="memitem:gabdc90813499f91d3e32298cd6dc2fe45"><td class="memTemplParams" colspan="2">template<typename RandomAccessIterator , typename Compare > </td></tr>
+<tr class="memitem:gabdc90813499f91d3e32298cd6dc2fe45"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gabdc90813499f91d3e32298cd6dc2fe45">parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end, const Compare &comp)</td></tr>
+<tr class="memdesc:gabdc90813499f91d3e32298cd6dc2fe45"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in [begin,end) using the given comparator.  <a href="a00252.html#gabdc90813499f91d3e32298cd6dc2fe45">More...</a><br/></td></tr>
+<tr class="separator:gabdc90813499f91d3e32298cd6dc2fe45"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga73b58ac9249f49587d0b081c152af551"><td class="memTemplParams" colspan="2">template<typename RandomAccessIterator > </td></tr>
+<tr class="memitem:ga73b58ac9249f49587d0b081c152af551"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga73b58ac9249f49587d0b081c152af551">parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end)</td></tr>
+<tr class="memdesc:ga73b58ac9249f49587d0b081c152af551"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in [begin,end) with a default comparator <code>std::less<RandomAccessIterator></code>  <a href="a00252.html#ga73b58ac9249f49587d0b081c152af551">More...</a><br/></td></tr>
+<tr class="separator:ga73b58ac9249f49587d0b081c152af551"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga61ce8ba64868c5c15f9d98840193b9bf"><td class="memTemplParams" colspan="2">template<typename Range , typename Compare > </td></tr>
+<tr class="memitem:ga61ce8ba64868c5c15f9d98840193b9bf"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga61ce8ba64868c5c15f9d98840193b9bf">parallel_sort</a> (Range &rng, const Compare &comp)</td></tr>
+<tr class="memdesc:ga61ce8ba64868c5c15f9d98840193b9bf"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in rng using the given comparator.  <a href="a00252.html#ga61ce8ba64868c5c15f9d98840193b9bf">More...</a><br/></td></tr>
+<tr class="separator:ga61ce8ba64868c5c15f9d98840193b9bf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga541b2fd91e88842a7b823161107779e9"><td class="memTemplParams" colspan="2">template<typename Range , typename Compare > </td></tr>
+<tr class="memitem:ga541b2fd91e88842a7b823161107779e9"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga541b2fd91e88842a7b823161107779e9">parallel_sort</a> (const Range &rng, const Compare &comp)</td></tr>
+<tr class="memdesc:ga541b2fd91e88842a7b823161107779e9"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in const rng using the given comparator.  <a href="a00252.html#ga541b2fd91e88842a7b823161107779e9">More...</a><br/></td></tr>
+<tr class="separator:ga541b2fd91e88842a7b823161107779e9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf1fb3ae3aab1213cb9bcf56e30c164bb"><td class="memTemplParams" colspan="2">template<typename Range > </td></tr>
+<tr class="memitem:gaf1fb3ae3aab1213cb9bcf56e30c164bb"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gaf1fb3ae3aab1213cb9bcf56e30c164bb">parallel_sort</a> (Range &rng)</td></tr>
+<tr class="memdesc:gaf1fb3ae3aab1213cb9bcf56e30c164bb"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in rng with a default comparator <code>std::less<RandomAccessIterator></code>  <a href="a00252.html#gaf1fb3ae3aab1213cb9bcf56e30c164bb">More...</a><br/></td></tr>
+<tr class="separator:gaf1fb3ae3aab1213cb9bcf56e30c164bb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga60bbc3d7699f09618bd8b5114e4277cb"><td class="memTemplParams" colspan="2">template<typename Range > </td></tr>
+<tr class="memitem:ga60bbc3d7699f09618bd8b5114e4277cb"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga60bbc3d7699f09618bd8b5114e4277cb">parallel_sort</a> (const Range &rng)</td></tr>
+<tr class="memdesc:ga60bbc3d7699f09618bd8b5114e4277cb"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in const rng with a default comparator <code>std::less<RandomAccessIterator></code>  <a href="a00252.html#ga60bbc3d7699f09618bd8b5114e4277cb">More...</a><br/></td></tr>
+<tr class="separator:ga60bbc3d7699f09618bd8b5114e4277cb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8f176cdc232a6e5907456656a24983a8"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga8f176cdc232a6e5907456656a24983a8"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga8f176cdc232a6e5907456656a24983a8">parallel_sort</a> (T *begin, T *end)</td></tr>
+<tr class="memdesc:ga8f176cdc232a6e5907456656a24983a8"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in the range <code></code>[begin,end) with a default comparator <code>std::less<T></code>  <a href="a00252.html#ga8f176cdc232a6e5907456656a24983a8">More...</a><br/></td></tr>
+<tr class="separator:ga8f176cdc232a6e5907456656a24983a8"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>The namespace tbb contains all components of the library. </p>
+</div><h2 class="groupheader">Enumeration Type Documentation</h2>
+<a class="anchor" id="adb86d08473679d6fe0eabcdc766ffe3a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00233.html#adb86d08473679d6fe0eabcdc766ffe3a">tbb::memory_semantics</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Specifies memory semantics. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="adb86d08473679d6fe0eabcdc766ffe3aa6a315190cf4509ec388ecb423432f36a"></a>full_fence</em> </td><td class="fielddoc">
+<p>Sequential consistency. </p>
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="adb86d08473679d6fe0eabcdc766ffe3aaa92646b4dc7618530d3a9f51dd10a418"></a>acquire</em> </td><td class="fielddoc">
+<p>Acquire. </p>
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="adb86d08473679d6fe0eabcdc766ffe3aa412563418e657114a102db610f726632"></a>release</em> </td><td class="fielddoc">
+<p>Release. </p>
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="adb86d08473679d6fe0eabcdc766ffe3aa73cb2e2bcb94442b8b2b72e93a76f2e5"></a>relaxed</em> </td><td class="fielddoc">
+<p>No ordering. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ade8a8bc300d5ef09d38cbfb8baff5cd2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int __TBB_EXPORTED_FUNC tbb::TBB_runtime_interface_version </td>
+          <td>(</td>
+          <td class="paramname">)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>The function returns the interface version of the TBB shared library being used. </p>
+<p>The version it returns is determined at runtime, not at compile/link time. So it can be different than the value of TBB_INTERFACE_VERSION obtained at compile time. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<hr>
+<p></p>
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00237.html b/doc/html/a00237.html
deleted file mode 100644
index cde3d23..0000000
--- a/doc/html/a00237.html
+++ /dev/null
@@ -1,113 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>rml Namespace Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li class="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="namespaces.html"><span>Namespace List</span></a></li>
-      <li><a href="namespacemembers.html"><span>Namespace Members</span></a></li>
-    </ul>
-  </div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#typedef-members">Typedefs</a> |
-<a href="#enum-members">Enumerations</a> |
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">rml Namespace Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>The namespace rml contains components of low-level memory pool interface.  
-<a href="#details">More...</a></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00095.html">MemPoolPolicy</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
-Typedefs</h2></td></tr>
-<tr class="memitem:ae13d09a0a00d9cae537655207c8560a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae13d09a0a00d9cae537655207c8560a2"></a>
-typedef void *(* </td><td class="memItemRight" valign="bottom"><b>rawAllocType</b> )(intptr_t pool_id, size_t &bytes)</td></tr>
-<tr class="separator:ae13d09a0a00d9cae537655207c8560a2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a44f982f3478d462e81a1300dd516cb8e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a44f982f3478d462e81a1300dd516cb8e"></a>
-typedef int(* </td><td class="memItemRight" valign="bottom"><b>rawFreeType</b> )(intptr_t pool_id, void *raw_ptr, size_t raw_bytes)</td></tr>
-<tr class="separator:a44f982f3478d462e81a1300dd516cb8e"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
-Enumerations</h2></td></tr>
-<tr class="memitem:a09eea006328e62aac7cbbbd9a3fb7958"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>MemPoolError</b> { <br/>
-  <b>POOL_OK</b> = TBBMALLOC_OK, 
-<b>INVALID_POLICY</b> = TBBMALLOC_INVALID_PARAM, 
-<b>UNSUPPORTED_POLICY</b> = TBBMALLOC_UNSUPPORTED, 
-<b>NO_MEMORY</b> = TBBMALLOC_NO_MEMORY, 
-<br/>
-  <b>NO_EFFECT</b> = TBBMALLOC_NO_EFFECT
-<br/>
- }</td></tr>
-<tr class="separator:a09eea006328e62aac7cbbbd9a3fb7958"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a152cad3c009030ad9364bc1f3ff0c648"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a152cad3c009030ad9364bc1f3ff0c648"></a>
-MemPoolError </td><td class="memItemRight" valign="bottom"><b>pool_create_v1</b> (intptr_t pool_id, const <a class="el" href="a00095.html">MemPoolPolicy</a> *policy, rml::MemoryPool **pool)</td></tr>
-<tr class="separator:a152cad3c009030ad9364bc1f3ff0c648"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a19a32c0a2ff3a0d8c3eeba0ac894f887"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a19a32c0a2ff3a0d8c3eeba0ac894f887"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>pool_destroy</b> (MemoryPool *memPool)</td></tr>
-<tr class="separator:a19a32c0a2ff3a0d8c3eeba0ac894f887"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5e8b6e757a521a8f2a186b8577aefb98"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e8b6e757a521a8f2a186b8577aefb98"></a>
-void * </td><td class="memItemRight" valign="bottom"><b>pool_malloc</b> (MemoryPool *memPool, size_t size)</td></tr>
-<tr class="separator:a5e8b6e757a521a8f2a186b8577aefb98"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af9ac1381bacb2cbe1f4bca08e99dd2ee"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af9ac1381bacb2cbe1f4bca08e99dd2ee"></a>
-void * </td><td class="memItemRight" valign="bottom"><b>pool_realloc</b> (MemoryPool *memPool, void *object, size_t size)</td></tr>
-<tr class="separator:af9ac1381bacb2cbe1f4bca08e99dd2ee"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8ac1e82af435d8bef5f7c21506c5f831"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8ac1e82af435d8bef5f7c21506c5f831"></a>
-void * </td><td class="memItemRight" valign="bottom"><b>pool_aligned_malloc</b> (MemoryPool *mPool, size_t size, size_t alignment)</td></tr>
-<tr class="separator:a8ac1e82af435d8bef5f7c21506c5f831"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3b2c69d3eae3f7bdcf36df5af9b2eb2e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3b2c69d3eae3f7bdcf36df5af9b2eb2e"></a>
-void * </td><td class="memItemRight" valign="bottom"><b>pool_aligned_realloc</b> (MemoryPool *mPool, void *ptr, size_t size, size_t alignment)</td></tr>
-<tr class="separator:a3b2c69d3eae3f7bdcf36df5af9b2eb2e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a61700754fe0ba9d761fab34ad51e3bc2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a61700754fe0ba9d761fab34ad51e3bc2"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>pool_reset</b> (MemoryPool *memPool)</td></tr>
-<tr class="separator:a61700754fe0ba9d761fab34ad51e3bc2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a06eff2efabb77248f880b86eecc08c6e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06eff2efabb77248f880b86eecc08c6e"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>pool_free</b> (MemoryPool *memPool, void *object)</td></tr>
-<tr class="separator:a06eff2efabb77248f880b86eecc08c6e"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>The namespace rml contains components of low-level memory pool interface. </p>
-</div></div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00240.html b/doc/html/a00240.html
deleted file mode 100644
index 6f7ef12..0000000
--- a/doc/html/a00240.html
+++ /dev/null
@@ -1,692 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>tbb Namespace Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li class="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="namespaces.html"><span>Namespace List</span></a></li>
-      <li><a href="namespacemembers.html"><span>Namespace Members</span></a></li>
-    </ul>
-  </div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#typedef-members">Typedefs</a> |
-<a href="#enum-members">Enumerations</a> |
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">tbb Namespace Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>The namespace tbb contains all components of the library.  
-<a href="#details">More...</a></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00015.html">aligned_space</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Block of space aligned sufficiently to construct an array T with N elements.  <a href="a00015.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00018.html">atomic</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Primary template for atomic.  <a href="a00018.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00019.html">atomic< void * ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Specialization for <a class="el" href="a00019.html" title="Specialization for atomic<void*>, for sake of not allowing arithmetic or operator->. ">atomic<void*></a>, for sake of not allowing arithmetic or operator->.  <a href="a00019.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html">blocked_range</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A range over which to iterate.  <a href="a00024.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00025.html">blocked_range2d</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A 2-dimensional range that models the Range concept.  <a href="a00025.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html">blocked_range3d</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A 3-dimensional range that models the Range concept.  <a href="a00026.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html">cache_aligned_allocator</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00032.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00033.html">cache_aligned_allocator< void ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00033.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html">combinable</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Thread-local storage with optional reduction.  <a href="a00036.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html">tbb_hash_compare</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">hash_compare that is default argument for concurrent_hash_map  <a href="a00163.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html">concurrent_bounded_queue</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A high-performance thread-safe blocking concurrent bounded queue.  <a href="a00042.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html">concurrent_vector</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Concurrent vector container.  <a href="a00053.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00175.html">vector_iterator</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00099.html">mutex</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Wrapper around the platform's native reader-writer lock.  <a href="a00099.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00101.html">null_mutex</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A mutex which does nothing.  <a href="a00101.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html">null_rw_mutex</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A rw mutex which does nothing.  <a href="a00102.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00105.html">parallel_do_feeder</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Class the user supplied algorithm body uses to add new tasks.  <a href="a00105.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html">task_group_context</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00108.html">pre_scan_tag</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Used to indicate that the initial scan is being performed.  <a href="a00108.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00064.html">final_scan_tag</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Used to indicate that the final scan is being performed.  <a href="a00064.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00106.html">parallel_while</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a stream, with optional addition of more work.  <a href="a00106.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00062.html">filter</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline.  <a href="a00062.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html">thread_bound_filter</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline served by a user thread.  <a href="a00165.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00107.html">pipeline</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A processing pipeline that applies filters to items.  <a href="a00107.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00111.html">queuing_mutex</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Queuing mutex with local-only spinning.  <a href="a00111.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00112.html">queuing_rw_mutex</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Queuing reader-writer mutex with local-only spinning.  <a href="a00112.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html">recursive_mutex</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html">scalable_allocator</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00129.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html">scalable_allocator< void ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00130.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00145.html">spin_mutex</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A lock that occupies a single byte.  <a href="a00145.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html">spin_rw_mutex_v3</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Fast, unfair, spinning reader-writer lock with backoff and writer-preference.  <a href="a00146.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00154.html">task_handle</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html">task_group</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html">structured_task_group</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html">task_scheduler_init</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Class delimiting the scope of task scheduler activity.  <a href="a00156.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html">tbb_allocator</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00159.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html">tbb_allocator< void ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00160.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html">zero_allocator</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00177.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.html">zero_allocator< void, Allocator ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00178.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00020.html">bad_last_alloc</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Exception for concurrent containers.  <a href="a00020.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00074.html">improper_lock</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Exception for PPL locks.  <a href="a00074.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00173.html">user_abort</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Exception for user-initiated abort.  <a href="a00173.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00096.html">missing_wait</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Exception for missing wait on <a class="el" href="a00148.html">structured_task_group</a>.  <a href="a00096.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00086.html">invalid_multiple_scheduling</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Exception for repeated scheduling of the same <a class="el" href="a00154.html">task_handle</a>.  <a href="a00086.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html">tbb_exception</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Interface to be implemented by all exceptions TBB recognizes and propagates across the threads.  <a href="a00161.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html">captured_exception</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">This class is used by TBB to propagate information about unhandled exceptions into the root thread.  <a href="a00035.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00097.html">movable_exception</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread.  <a href="a00097.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html">tick_count</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Absolute timestamp.  <a href="a00170.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
-Typedefs</h2></td></tr>
-<tr class="memitem:a889d8f126388fdc24c597d195a4d7028"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a889d8f126388fdc24c597d195a4d7028"></a>
-typedef <br class="typebreak"/>
-<a class="el" href="a00058.html">internal::critical_section_v4</a> </td><td class="memItemRight" valign="bottom"><b>critical_section</b></td></tr>
-<tr class="separator:a889d8f126388fdc24c597d195a4d7028"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga69722571e9e4406693c4a1379f0b47eb"><td class="memItemLeft" align="right" valign="top">typedef <br class="typebreak"/>
-interface7::internal::padded_mutex<br class="typebreak"/>
-< interface7::internal::x86_eliding_mutex, <br class="typebreak"/>
-false > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00258.html#ga69722571e9e4406693c4a1379f0b47eb">speculative_spin_mutex</a></td></tr>
-<tr class="memdesc:ga69722571e9e4406693c4a1379f0b47eb"><td class="mdescLeft"> </td><td class="mdescRight">A cross-platform spin mutex with speculative lock acquisition.  <a href="a00258.html#ga69722571e9e4406693c4a1379f0b47eb">More...</a><br/></td></tr>
-<tr class="separator:ga69722571e9e4406693c4a1379f0b47eb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6cc3d02744cab8ac389919806d47e417"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6cc3d02744cab8ac389919806d47e417"></a>
-typedef <a class="el" href="a00146.html">spin_rw_mutex_v3</a> </td><td class="memItemRight" valign="bottom"><b>spin_rw_mutex</b></td></tr>
-<tr class="separator:a6cc3d02744cab8ac389919806d47e417"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1a268320974a3357e9609a2f98be5090"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1a268320974a3357e9609a2f98be5090"></a>
-typedef std::size_t </td><td class="memItemRight" valign="bottom"><b>stack_size_type</b></td></tr>
-<tr class="separator:a1a268320974a3357e9609a2f98be5090"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af58de4ab3200dd2bd621f052c6f677e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af58de4ab3200dd2bd621f052c6f677e4"></a>
-typedef <br class="typebreak"/>
-<a class="el" href="a00158.html">tbb::internal::task_scheduler_observer_v3</a> </td><td class="memItemRight" valign="bottom"><b>task_scheduler_observer</b></td></tr>
-<tr class="separator:af58de4ab3200dd2bd621f052c6f677e4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7805ca254302ff88b566f7dcde7e56b0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7805ca254302ff88b566f7dcde7e56b0"></a>
-typedef <a class="el" href="a00164.html">internal::tbb_thread_v3</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#a7805ca254302ff88b566f7dcde7e56b0">tbb_thread</a></td></tr>
-<tr class="memdesc:a7805ca254302ff88b566f7dcde7e56b0"><td class="mdescLeft"> </td><td class="mdescRight">Users reference thread class by name tbb_thread. <br/></td></tr>
-<tr class="separator:a7805ca254302ff88b566f7dcde7e56b0"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
-Enumerations</h2></td></tr>
-<tr class="memitem:adb86d08473679d6fe0eabcdc766ffe3a"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#adb86d08473679d6fe0eabcdc766ffe3a">memory_semantics</a> { <a class="el" href="a00240.html#adb86d08473679d6fe0eabcdc766ffe3aa6a315190cf4509ec388ecb423432f36a">full_fence</a>, 
-<a class="el" href="a00240.html#adb86d08473679d6fe0eabcdc766ffe3aaa92646b4dc7618530d3a9f51dd10a418">acquire</a>, 
-<a class="el" href="a00240.html#adb86d08473679d6fe0eabcdc766ffe3aa412563418e657114a102db610f726632">release</a>, 
-<a class="el" href="a00240.html#adb86d08473679d6fe0eabcdc766ffe3aa73cb2e2bcb94442b8b2b72e93a76f2e5">relaxed</a>
- }</td></tr>
-<tr class="memdesc:adb86d08473679d6fe0eabcdc766ffe3a"><td class="mdescLeft"> </td><td class="mdescRight">Specifies memory semantics.  <a href="a00240.html#adb86d08473679d6fe0eabcdc766ffe3a">More...</a><br/></td></tr>
-<tr class="separator:adb86d08473679d6fe0eabcdc766ffe3a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac5bcb6154c8307fa9f97806afddf2288"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#ac5bcb6154c8307fa9f97806afddf2288">ets_key_usage_type</a> { <b>ets_key_per_instance</b>, 
-<b>ets_no_key</b>
- }</td></tr>
-<tr class="memdesc:ac5bcb6154c8307fa9f97806afddf2288"><td class="mdescLeft"> </td><td class="mdescRight">enum for selecting between single key and key-per-instance versions <br/></td></tr>
-<tr class="separator:ac5bcb6154c8307fa9f97806afddf2288"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4454db821441ca68bad263d82c40fb7a"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>task_group_status</b> { <b>not_complete</b>, 
-<b>complete</b>, 
-<b>canceled</b>
- }</td></tr>
-<tr class="separator:a4454db821441ca68bad263d82c40fb7a"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a5fefe7ed201b920d3fd6c390849c1ccf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5fefe7ed201b920d3fd6c390849c1ccf"></a>
- </td><td class="memItemRight" valign="bottom"><b>__TBB_DECL_ATOMIC</b> (__TBB_LONG_LONG) __TBB_DECL_ATOMIC(unsigned __TBB_LONG_LONG) __TBB_DECL_ATOMIC(long) __TBB_DECL_ATOMIC(unsigned long) <a class="el" href="a00240.html#a59425abdcb421136e9f5954cfb975e5f">__TBB_DECL_ATOMIC_ALT</a>(unsigned</td></tr>
-<tr class="separator:a5fefe7ed201b920d3fd6c390849c1ccf"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a59425abdcb421136e9f5954cfb975e5f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59425abdcb421136e9f5954cfb975e5f"></a>
-size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#a59425abdcb421136e9f5954cfb975e5f">__TBB_DECL_ATOMIC_ALT</a> (int, ptrdiff_t) __TBB_DECL_ATOMIC(unsigned) __TBB_DECL_ATOMIC(int) __TBB_DECL_ATOMIC(unsigned short) __TBB_DECL_ATOMIC(short) __TBB_DECL_ATOMIC(char) __TBB_DECL_ATOMIC(signed char) __TBB_DECL_ATOMIC(unsigned char) __TBB_DECL_ATOMIC(wchar_t) template< typename T > struct <a class="el" href="a00018.html">atomic</a>< T * ></td></tr>
-<tr class="memdesc:a59425abdcb421136e9f5954cfb975e5f"><td class="mdescLeft"> </td><td class="mdescRight">Specialization for atomic<T*> with arithmetic and operator->. <br/></td></tr>
-<tr class="separator:a59425abdcb421136e9f5954cfb975e5f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aed82c77b389b208a1c27012a2fc0b5fd"><td class="memTemplParams" colspan="2"><a class="anchor" id="aed82c77b389b208a1c27012a2fc0b5fd"></a>
-template<memory_semantics M, typename T > </td></tr>
-<tr class="memitem:aed82c77b389b208a1c27012a2fc0b5fd"><td class="memTemplItemLeft" align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>load</b> (const <a class="el" href="a00018.html">atomic</a>< T > &a)</td></tr>
-<tr class="separator:aed82c77b389b208a1c27012a2fc0b5fd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a219b97248f55c909aa3d84e43934b105"><td class="memTemplParams" colspan="2"><a class="anchor" id="a219b97248f55c909aa3d84e43934b105"></a>
-template<memory_semantics M, typename T > </td></tr>
-<tr class="memitem:a219b97248f55c909aa3d84e43934b105"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>store</b> (<a class="el" href="a00018.html">atomic</a>< T > &a, T value)</td></tr>
-<tr class="separator:a219b97248f55c909aa3d84e43934b105"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a49a6826cf4fb8845d26d8d1f1ad0b5fa"><td class="memTemplParams" colspan="2"><a class="anchor" id="a49a6826cf4fb8845d26d8d1f1ad0b5fa"></a>
-template<typename T , typename U > </td></tr>
-<tr class="memitem:a49a6826cf4fb8845d26d8d1f1ad0b5fa"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00032.html">cache_aligned_allocator</a>< T > &, const <a class="el" href="a00032.html">cache_aligned_allocator</a>< U > &)</td></tr>
-<tr class="separator:a49a6826cf4fb8845d26d8d1f1ad0b5fa"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afdaaf3f3248efc804c6f6fe35855704d"><td class="memTemplParams" colspan="2"><a class="anchor" id="afdaaf3f3248efc804c6f6fe35855704d"></a>
-template<typename T , typename U > </td></tr>
-<tr class="memitem:afdaaf3f3248efc804c6f6fe35855704d"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00032.html">cache_aligned_allocator</a>< T > &, const <a class="el" href="a00032.html">cache_aligned_allocator</a>< U > &)</td></tr>
-<tr class="separator:afdaaf3f3248efc804c6f6fe35855704d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1db9470dd2871cb7394ab262dca2051a"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1db9470dd2871cb7394ab262dca2051a"></a>
-template<typename Key , typename T , typename HashCompare , typename A1 , typename A2 > </td></tr>
-<tr class="memitem:a1db9470dd2871cb7394ab262dca2051a"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const concurrent_hash_map< Key, T, HashCompare, A1 > &a, const concurrent_hash_map< Key, T, HashCompare, A2 > &b)</td></tr>
-<tr class="separator:a1db9470dd2871cb7394ab262dca2051a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a05667bcb12f763124fcda402d3720c6a"><td class="memTemplParams" colspan="2"><a class="anchor" id="a05667bcb12f763124fcda402d3720c6a"></a>
-template<typename Key , typename T , typename HashCompare , typename A1 , typename A2 > </td></tr>
-<tr class="memitem:a05667bcb12f763124fcda402d3720c6a"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const concurrent_hash_map< Key, T, HashCompare, A1 > &a, const concurrent_hash_map< Key, T, HashCompare, A2 > &b)</td></tr>
-<tr class="separator:a05667bcb12f763124fcda402d3720c6a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a16dc40ac2badc8b36b8cc70f92801b76"><td class="memTemplParams" colspan="2"><a class="anchor" id="a16dc40ac2badc8b36b8cc70f92801b76"></a>
-template<typename Key , typename T , typename HashCompare , typename A > </td></tr>
-<tr class="memitem:a16dc40ac2badc8b36b8cc70f92801b76"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>swap</b> (concurrent_hash_map< Key, T, HashCompare, A > &a, concurrent_hash_map< Key, T, HashCompare, A > &b)</td></tr>
-<tr class="separator:a16dc40ac2badc8b36b8cc70f92801b76"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a79ecee2d23f2486c03e720ab9e3ac36c"><td class="memTemplParams" colspan="2"><a class="anchor" id="a79ecee2d23f2486c03e720ab9e3ac36c"></a>
-template<typename T , class A1 , class A2 > </td></tr>
-<tr class="memitem:a79ecee2d23f2486c03e720ab9e3ac36c"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00053.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00053.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
-<tr class="separator:a79ecee2d23f2486c03e720ab9e3ac36c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab7258c4acabadf94d03dc62e29396ea0"><td class="memTemplParams" colspan="2"><a class="anchor" id="ab7258c4acabadf94d03dc62e29396ea0"></a>
-template<typename T , class A1 , class A2 > </td></tr>
-<tr class="memitem:ab7258c4acabadf94d03dc62e29396ea0"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00053.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00053.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
-<tr class="separator:ab7258c4acabadf94d03dc62e29396ea0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1523d0389a8cbda80c17ae4f45caa3a6"><td class="memTemplParams" colspan="2"><a class="anchor" id="a1523d0389a8cbda80c17ae4f45caa3a6"></a>
-template<typename T , class A1 , class A2 > </td></tr>
-<tr class="memitem:a1523d0389a8cbda80c17ae4f45caa3a6"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator<</b> (const <a class="el" href="a00053.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00053.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
-<tr class="separator:a1523d0389a8cbda80c17ae4f45caa3a6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a78cfed58bfde865b68859beb54805019"><td class="memTemplParams" colspan="2"><a class="anchor" id="a78cfed58bfde865b68859beb54805019"></a>
-template<typename T , class A1 , class A2 > </td></tr>
-<tr class="memitem:a78cfed58bfde865b68859beb54805019"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator></b> (const <a class="el" href="a00053.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00053.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
-<tr class="separator:a78cfed58bfde865b68859beb54805019"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac6009f009cd331952d8944bcc9733375"><td class="memTemplParams" colspan="2"><a class="anchor" id="ac6009f009cd331952d8944bcc9733375"></a>
-template<typename T , class A1 , class A2 > </td></tr>
-<tr class="memitem:ac6009f009cd331952d8944bcc9733375"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator<=</b> (const <a class="el" href="a00053.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00053.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
-<tr class="separator:ac6009f009cd331952d8944bcc9733375"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa0d82e59919a1f2c7caa06d061b2480f"><td class="memTemplParams" colspan="2"><a class="anchor" id="aa0d82e59919a1f2c7caa06d061b2480f"></a>
-template<typename T , class A1 , class A2 > </td></tr>
-<tr class="memitem:aa0d82e59919a1f2c7caa06d061b2480f"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator>=</b> (const <a class="el" href="a00053.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00053.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
-<tr class="separator:aa0d82e59919a1f2c7caa06d061b2480f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4cd91084f08db8c2d23c6a0362e0c441"><td class="memTemplParams" colspan="2"><a class="anchor" id="a4cd91084f08db8c2d23c6a0362e0c441"></a>
-template<typename T , class A > </td></tr>
-<tr class="memitem:a4cd91084f08db8c2d23c6a0362e0c441"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>swap</b> (<a class="el" href="a00053.html">concurrent_vector</a>< T, A > &a, <a class="el" href="a00053.html">concurrent_vector</a>< T, A > &b)</td></tr>
-<tr class="separator:a4cd91084f08db8c2d23c6a0362e0c441"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a17323bcd620e6e3e4091e2e5568f97d3"><td class="memTemplParams" colspan="2"><a class="anchor" id="a17323bcd620e6e3e4091e2e5568f97d3"></a>
-template<typename T , typename U > </td></tr>
-<tr class="memitem:a17323bcd620e6e3e4091e2e5568f97d3"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00129.html">scalable_allocator</a>< T > &, const <a class="el" href="a00129.html">scalable_allocator</a>< U > &)</td></tr>
-<tr class="separator:a17323bcd620e6e3e4091e2e5568f97d3"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af3fb987bb18adf8384db9c9713b81588"><td class="memTemplParams" colspan="2"><a class="anchor" id="af3fb987bb18adf8384db9c9713b81588"></a>
-template<typename T , typename U > </td></tr>
-<tr class="memitem:af3fb987bb18adf8384db9c9713b81588"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00129.html">scalable_allocator</a>< T > &, const <a class="el" href="a00129.html">scalable_allocator</a>< U > &)</td></tr>
-<tr class="separator:af3fb987bb18adf8384db9c9713b81588"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aaef1698b222ba9312ab24dcdcd98bbd8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaef1698b222ba9312ab24dcdcd98bbd8"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>is_current_task_group_canceling</b> ()</td></tr>
-<tr class="separator:aaef1698b222ba9312ab24dcdcd98bbd8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6c291402bcc0ba9263cf08b76faf7a2c"><td class="memTemplParams" colspan="2"><a class="anchor" id="a6c291402bcc0ba9263cf08b76faf7a2c"></a>
-template<class F > </td></tr>
-<tr class="memitem:a6c291402bcc0ba9263cf08b76faf7a2c"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="a00154.html">task_handle</a>< F > </td><td class="memTemplItemRight" valign="bottom"><b>make_task</b> (const F &f)</td></tr>
-<tr class="separator:a6c291402bcc0ba9263cf08b76faf7a2c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af1595d1bfc4f7be923c17b4ee5c556ae"><td class="memTemplParams" colspan="2"><a class="anchor" id="af1595d1bfc4f7be923c17b4ee5c556ae"></a>
-template<typename T , typename U > </td></tr>
-<tr class="memitem:af1595d1bfc4f7be923c17b4ee5c556ae"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00159.html">tbb_allocator</a>< T > &, const <a class="el" href="a00159.html">tbb_allocator</a>< U > &)</td></tr>
-<tr class="separator:af1595d1bfc4f7be923c17b4ee5c556ae"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a82ff968904aaa1bb0e2152f590c47be6"><td class="memTemplParams" colspan="2"><a class="anchor" id="a82ff968904aaa1bb0e2152f590c47be6"></a>
-template<typename T , typename U > </td></tr>
-<tr class="memitem:a82ff968904aaa1bb0e2152f590c47be6"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00159.html">tbb_allocator</a>< T > &, const <a class="el" href="a00159.html">tbb_allocator</a>< U > &)</td></tr>
-<tr class="separator:a82ff968904aaa1bb0e2152f590c47be6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7bf465e2f6730e2cea0c9531bec9fb2f"><td class="memTemplParams" colspan="2"><a class="anchor" id="a7bf465e2f6730e2cea0c9531bec9fb2f"></a>
-template<typename T1 , template< typename X1 > class B1, typename T2 , template< typename X2 > class B2> </td></tr>
-<tr class="memitem:a7bf465e2f6730e2cea0c9531bec9fb2f"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00177.html">zero_allocator</a>< T1, B1 > &a, const <a class="el" href="a00177.html">zero_allocator</a>< T2, B2 > &b)</td></tr>
-<tr class="separator:a7bf465e2f6730e2cea0c9531bec9fb2f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a606762cf7c614cb5a1631955938737cd"><td class="memTemplParams" colspan="2"><a class="anchor" id="a606762cf7c614cb5a1631955938737cd"></a>
-template<typename T1 , template< typename X1 > class B1, typename T2 , template< typename X2 > class B2> </td></tr>
-<tr class="memitem:a606762cf7c614cb5a1631955938737cd"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00177.html">zero_allocator</a>< T1, B1 > &a, const <a class="el" href="a00177.html">zero_allocator</a>< T2, B2 > &b)</td></tr>
-<tr class="separator:a606762cf7c614cb5a1631955938737cd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ade8a8bc300d5ef09d38cbfb8baff5cd2"><td class="memItemLeft" align="right" valign="top">int __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#ade8a8bc300d5ef09d38cbfb8baff5cd2">TBB_runtime_interface_version</a> ()</td></tr>
-<tr class="memdesc:ade8a8bc300d5ef09d38cbfb8baff5cd2"><td class="mdescLeft"> </td><td class="mdescRight">The function returns the interface version of the TBB shared library being used.  <a href="#ade8a8bc300d5ef09d38cbfb8baff5cd2">More...</a><br/></td></tr>
-<tr class="separator:ade8a8bc300d5ef09d38cbfb8baff5cd2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a467930903ce9b7c240c4ad8f0fb8ae3d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a467930903ce9b7c240c4ad8f0fb8ae3d"></a>
-void </td><td class="memItemRight" valign="bottom"><b>swap</b> (<a class="el" href="a00164.html">internal::tbb_thread_v3</a> &t1, <a class="el" href="a00164.html">internal::tbb_thread_v3</a> &t2) __TBB_NOEXCEPT(true)</td></tr>
-<tr class="separator:a467930903ce9b7c240c4ad8f0fb8ae3d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac41903d6b80e61bd6c605412e7820e08"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac41903d6b80e61bd6c605412e7820e08"></a>
-void </td><td class="memItemRight" valign="bottom"><b>move</b> (<a class="el" href="a00240.html#a7805ca254302ff88b566f7dcde7e56b0">tbb_thread</a> &t1, <a class="el" href="a00240.html#a7805ca254302ff88b566f7dcde7e56b0">tbb_thread</a> &t2)</td></tr>
-<tr class="separator:ac41903d6b80e61bd6c605412e7820e08"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa037c1f149250d61cd2fad4541a5e6cb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa037c1f149250d61cd2fad4541a5e6cb"></a>
-<a class="el" href="a00085.html">tick_count::interval_t</a> </td><td class="memItemRight" valign="bottom"><b>operator-</b> (const <a class="el" href="a00170.html">tick_count</a> &t1, const <a class="el" href="a00170.html">tick_count</a> &t0)</td></tr>
-<tr class="separator:aa037c1f149250d61cd2fad4541a5e6cb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr><td colspan="2"><div class="groupHeader">parallel_do</div></td></tr>
-<tr><td colspan="2"><div class="groupText"><p>See also requirements on <a class="el" href="a00002.html">parallel_do Body</a>. </p>
-</div></td></tr>
-<tr class="memitem:ga533f6732498ade8634a9470cbf89192d"><td class="memTemplParams" colspan="2">template<typename Iterator , typename Body > </td></tr>
-<tr class="memitem:ga533f6732498ade8634a9470cbf89192d"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga533f6732498ade8634a9470cbf89192d">parallel_do</a> (Iterator first, Iterator last, const Body &body)</td></tr>
-<tr class="memdesc:ga533f6732498ade8634a9470cbf89192d"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a range, with optional addition of more work.  <a href="a00255.html#ga533f6732498ade8634a9470cbf89192d">More...</a><br/></td></tr>
-<tr class="separator:ga533f6732498ade8634a9470cbf89192d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga135f72b966cd78a14f6aa1ddf0480701"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga135f72b966cd78a14f6aa1ddf0480701"></a>
-template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga135f72b966cd78a14f6aa1ddf0480701"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_do</b> (Range &rng, const Body &body)</td></tr>
-<tr class="separator:ga135f72b966cd78a14f6aa1ddf0480701"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gaaaf7a7c53d20fef24acaa2fe5cc36b45"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaaaf7a7c53d20fef24acaa2fe5cc36b45"></a>
-template<typename Range , typename Body > </td></tr>
-<tr class="memitem:gaaaf7a7c53d20fef24acaa2fe5cc36b45"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_do</b> (const Range &rng, const Body &body)</td></tr>
-<tr class="separator:gaaaf7a7c53d20fef24acaa2fe5cc36b45"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga7db29bc10d81eddc85854256ffc723c0"><td class="memTemplParams" colspan="2">template<typename Iterator , typename Body > </td></tr>
-<tr class="memitem:ga7db29bc10d81eddc85854256ffc723c0"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga7db29bc10d81eddc85854256ffc723c0">parallel_do</a> (Iterator first, Iterator last, const Body &body, <a class="el" href="a00153.html">task_group_context</a> &context)</td></tr>
-<tr class="memdesc:ga7db29bc10d81eddc85854256ffc723c0"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a range, with optional addition of more work and user-supplied context.  <a href="a00255.html#ga7db29bc10d81eddc85854256ffc723c0">More...</a><br/></td></tr>
-<tr class="separator:ga7db29bc10d81eddc85854256ffc723c0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga137e8ff95a0c69e747f4f4f1383a2677"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga137e8ff95a0c69e747f4f4f1383a2677"></a>
-template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga137e8ff95a0c69e747f4f4f1383a2677"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_do</b> (Range &rng, const Body &body, <a class="el" href="a00153.html">task_group_context</a> &context)</td></tr>
-<tr class="separator:ga137e8ff95a0c69e747f4f4f1383a2677"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga40258ae16882a49d5d579407c88b3281"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga40258ae16882a49d5d579407c88b3281"></a>
-template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga40258ae16882a49d5d579407c88b3281"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_do</b> (const Range &rng, const Body &body, <a class="el" href="a00153.html">task_group_context</a> &context)</td></tr>
-<tr class="separator:ga40258ae16882a49d5d579407c88b3281"><td class="memSeparator" colspan="2"> </td></tr>
-<tr><td colspan="2"><div class="groupHeader">parallel_for</div></td></tr>
-<tr><td colspan="2"><div class="groupText"><p>See also requirements on <a class="el" href="a00001.html">Range</a> and <a class="el" href="a00003.html">parallel_for Body</a>. </p>
-</div></td></tr>
-<tr class="memitem:gaa8444c29dc4d2e527a1036717d109aef"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:gaa8444c29dc4d2e527a1036717d109aef"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#gaa8444c29dc4d2e527a1036717d109aef">parallel_for</a> (const Range &range, const Body &body)</td></tr>
-<tr class="memdesc:gaa8444c29dc4d2e527a1036717d109aef"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with default partitioner.  <a href="a00255.html#gaa8444c29dc4d2e527a1036717d109aef">More...</a><br/></td></tr>
-<tr class="separator:gaa8444c29dc4d2e527a1036717d109aef"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga9722d2bc7e5edb4fae9f3b55268a1ecc"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga9722d2bc7e5edb4fae9f3b55268a1ecc"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga9722d2bc7e5edb4fae9f3b55268a1ecc">parallel_for</a> (const Range &range, const Body &body, const simple_partitioner &partitioner)</td></tr>
-<tr class="memdesc:ga9722d2bc7e5edb4fae9f3b55268a1ecc"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with simple partitioner.  <a href="a00255.html#ga9722d2bc7e5edb4fae9f3b55268a1ecc">More...</a><br/></td></tr>
-<tr class="separator:ga9722d2bc7e5edb4fae9f3b55268a1ecc"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gad6c4b06f96ae33cefe78235841791902"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:gad6c4b06f96ae33cefe78235841791902"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#gad6c4b06f96ae33cefe78235841791902">parallel_for</a> (const Range &range, const Body &body, const auto_partitioner &partitioner)</td></tr>
-<tr class="memdesc:gad6c4b06f96ae33cefe78235841791902"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with auto_partitioner.  <a href="a00255.html#gad6c4b06f96ae33cefe78235841791902">More...</a><br/></td></tr>
-<tr class="separator:gad6c4b06f96ae33cefe78235841791902"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gaf3d39e372d825bf54283b5ceafa90057"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:gaf3d39e372d825bf54283b5ceafa90057"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#gaf3d39e372d825bf54283b5ceafa90057">parallel_for</a> (const Range &range, const Body &body, affinity_partitioner &partitioner)</td></tr>
-<tr class="memdesc:gaf3d39e372d825bf54283b5ceafa90057"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with affinity_partitioner.  <a href="a00255.html#gaf3d39e372d825bf54283b5ceafa90057">More...</a><br/></td></tr>
-<tr class="separator:gaf3d39e372d825bf54283b5ceafa90057"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga93a621202db94665144de38c0b09bdad"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga93a621202db94665144de38c0b09bdad"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga93a621202db94665144de38c0b09bdad">parallel_for</a> (const Range &range, const Body &body, <a class="el" href="a00153.html">task_group_context</a> &context)</td></tr>
-<tr class="memdesc:ga93a621202db94665144de38c0b09bdad"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with default partitioner and user-supplied context.  <a href="a00255.html#ga93a621202db94665144de38c0b09bdad">More...</a><br/></td></tr>
-<tr class="separator:ga93a621202db94665144de38c0b09bdad"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga5b7fab9d6ffe7a9345e9349a5a007bd4"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga5b7fab9d6ffe7a9345e9349a5a007bd4"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga5b7fab9d6ffe7a9345e9349a5a007bd4">parallel_for</a> (const Range &range, const Body &body, const simple_partitioner &partitioner, <a class="el" href="a00153.html">task_group_context</a> &context)</td></tr>
-<tr class="memdesc:ga5b7fab9d6ffe7a9345e9349a5a007bd4"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with simple partitioner and user-supplied context.  <a href="a00255.html#ga5b7fab9d6ffe7a9345e9349a5a007bd4">More...</a><br/></td></tr>
-<tr class="separator:ga5b7fab9d6ffe7a9345e9349a5a007bd4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga4c9935d8710a5cf786a92f3522ab2976"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga4c9935d8710a5cf786a92f3522ab2976"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga4c9935d8710a5cf786a92f3522ab2976">parallel_for</a> (const Range &range, const Body &body, const auto_partitioner &partitioner, <a class="el" href="a00153.html">task_group_context</a> &context)</td></tr>
-<tr class="memdesc:ga4c9935d8710a5cf786a92f3522ab2976"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with auto_partitioner and user-supplied context.  <a href="a00255.html#ga4c9935d8710a5cf786a92f3522ab2976">More...</a><br/></td></tr>
-<tr class="separator:ga4c9935d8710a5cf786a92f3522ab2976"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga62b1a9ac304ba1eb4f87ab8cc18dd281"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga62b1a9ac304ba1eb4f87ab8cc18dd281"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga62b1a9ac304ba1eb4f87ab8cc18dd281">parallel_for</a> (const Range &range, const Body &body, affinity_partitioner &partitioner, <a class="el" href="a00153.html">task_group_context</a> &context)</td></tr>
-<tr class="memdesc:ga62b1a9ac304ba1eb4f87ab8cc18dd281"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with affinity_partitioner and user-supplied context.  <a href="a00255.html#ga62b1a9ac304ba1eb4f87ab8cc18dd281">More...</a><br/></td></tr>
-<tr class="separator:ga62b1a9ac304ba1eb4f87ab8cc18dd281"><td class="memSeparator" colspan="2"> </td></tr>
-<tr><td colspan="2"><div class="groupHeader">parallel_for_each</div></td></tr>
-<tr class="memitem:ga96bf42caaec779e413e5a2396c1e301c"><td class="memTemplParams" colspan="2">template<typename InputIterator , typename Function > </td></tr>
-<tr class="memitem:ga96bf42caaec779e413e5a2396c1e301c"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga96bf42caaec779e413e5a2396c1e301c">parallel_for_each</a> (InputIterator first, InputIterator last, const Function &f, <a class="el" href="a00153.html">task_group_context</a> &context)</td></tr>
-<tr class="memdesc:ga96bf42caaec779e413e5a2396c1e301c"><td class="mdescLeft"> </td><td class="mdescRight">Calls function f for all items from [first, last) interval using user-supplied context.  <a href="a00255.html#ga96bf42caaec779e413e5a2396c1e301c">More...</a><br/></td></tr>
-<tr class="separator:ga96bf42caaec779e413e5a2396c1e301c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga72131543fd218b67dbb048b768d534e4"><td class="memTemplParams" colspan="2">template<typename Range , typename Function > </td></tr>
-<tr class="memitem:ga72131543fd218b67dbb048b768d534e4"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga72131543fd218b67dbb048b768d534e4">parallel_for_each</a> (Range &rng, const Function &f, <a class="el" href="a00153.html">task_group_context</a> &context)</td></tr>
-<tr class="memdesc:ga72131543fd218b67dbb048b768d534e4"><td class="mdescLeft"> </td><td class="mdescRight">Calls function f for all items from rng using user-supplied context.  <a href="a00255.html#ga72131543fd218b67dbb048b768d534e4">More...</a><br/></td></tr>
-<tr class="separator:ga72131543fd218b67dbb048b768d534e4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gad7d0702d16fbd7554584ab735eed39ba"><td class="memTemplParams" colspan="2">template<typename Range , typename Function > </td></tr>
-<tr class="memitem:gad7d0702d16fbd7554584ab735eed39ba"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#gad7d0702d16fbd7554584ab735eed39ba">parallel_for_each</a> (const Range &rng, const Function &f, <a class="el" href="a00153.html">task_group_context</a> &context)</td></tr>
-<tr class="memdesc:gad7d0702d16fbd7554584ab735eed39ba"><td class="mdescLeft"> </td><td class="mdescRight">Calls function f for all items from const rng user-supplied context.  <a href="a00255.html#gad7d0702d16fbd7554584ab735eed39ba">More...</a><br/></td></tr>
-<tr class="separator:gad7d0702d16fbd7554584ab735eed39ba"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gaef59e9baf9141a19c99a291e4532bd98"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaef59e9baf9141a19c99a291e4532bd98"></a>
-template<typename InputIterator , typename Function > </td></tr>
-<tr class="memitem:gaef59e9baf9141a19c99a291e4532bd98"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#gaef59e9baf9141a19c99a291e4532bd98">parallel_for_each</a> (InputIterator first, InputIterator last, const Function &f)</td></tr>
-<tr class="memdesc:gaef59e9baf9141a19c99a291e4532bd98"><td class="mdescLeft"> </td><td class="mdescRight">Uses default context. <br/></td></tr>
-<tr class="separator:gaef59e9baf9141a19c99a291e4532bd98"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga5868cd01f2126b139ab5809f64632db1"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga5868cd01f2126b139ab5809f64632db1"></a>
-template<typename Range , typename Function > </td></tr>
-<tr class="memitem:ga5868cd01f2126b139ab5809f64632db1"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga5868cd01f2126b139ab5809f64632db1">parallel_for_each</a> (Range &rng, const Function &f)</td></tr>
-<tr class="memdesc:ga5868cd01f2126b139ab5809f64632db1"><td class="mdescLeft"> </td><td class="mdescRight">Uses default context. <br/></td></tr>
-<tr class="separator:ga5868cd01f2126b139ab5809f64632db1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga33463c8b0d0104cf9d9e0f9cb3c0b26b"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga33463c8b0d0104cf9d9e0f9cb3c0b26b"></a>
-template<typename Range , typename Function > </td></tr>
-<tr class="memitem:ga33463c8b0d0104cf9d9e0f9cb3c0b26b"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga33463c8b0d0104cf9d9e0f9cb3c0b26b">parallel_for_each</a> (const Range &rng, const Function &f)</td></tr>
-<tr class="memdesc:ga33463c8b0d0104cf9d9e0f9cb3c0b26b"><td class="mdescLeft"> </td><td class="mdescRight">Uses default context. <br/></td></tr>
-<tr class="separator:ga33463c8b0d0104cf9d9e0f9cb3c0b26b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr><td colspan="2"><div class="groupHeader">parallel_invoke</div></td></tr>
-<tr class="memitem:ga3c6fe4bf1076c82132e666fb545451cd"><td class="memTemplParams" colspan="2">template<typename F0 , typename F1 , typename... F> </td></tr>
-<tr class="memitem:ga3c6fe4bf1076c82132e666fb545451cd"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga3c6fe4bf1076c82132e666fb545451cd">parallel_invoke</a> (F0 &&f0, F1 &&f1, F &&...f)</td></tr>
-<tr class="memdesc:ga3c6fe4bf1076c82132e666fb545451cd"><td class="mdescLeft"> </td><td class="mdescRight">Executes a list of tasks in parallel and waits for all tasks to complete.  <a href="a00255.html#ga3c6fe4bf1076c82132e666fb545451cd">More...</a><br/></td></tr>
-<tr class="separator:ga3c6fe4bf1076c82132e666fb545451cd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga14459dcbcd631194df803b155a7f610b"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga14459dcbcd631194df803b155a7f610b"></a>
-template<typename F0 , typename F1 > </td></tr>
-<tr class="memitem:ga14459dcbcd631194df803b155a7f610b"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, <a class="el" href="a00153.html">tbb::task_group_context</a> &context)</td></tr>
-<tr class="separator:ga14459dcbcd631194df803b155a7f610b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gaaea3f3a8883128afb596a963e856277f"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaaea3f3a8883128afb596a963e856277f"></a>
-template<typename F0 , typename F1 , typename F2 > </td></tr>
-<tr class="memitem:gaaea3f3a8883128afb596a963e856277f"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, <a class="el" href="a00153.html">tbb::task_group_context</a> &context)</td></tr>
-<tr class="separator:gaaea3f3a8883128afb596a963e856277f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga74932e64ede5047387108fa45f1af96f"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga74932e64ede5047387108fa45f1af96f"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 > </td></tr>
-<tr class="memitem:ga74932e64ede5047387108fa45f1af96f"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, <a class="el" href="a00153.html">tbb::task_group_context</a> &context)</td></tr>
-<tr class="separator:ga74932e64ede5047387108fa45f1af96f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gaefc1ba8f73cbdd094575f6db454fc6b5"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaefc1ba8f73cbdd094575f6db454fc6b5"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 > </td></tr>
-<tr class="memitem:gaefc1ba8f73cbdd094575f6db454fc6b5"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, <a class="el" href="a00153.html">tbb::task_group_context</a> &context)</td></tr>
-<tr class="separator:gaefc1ba8f73cbdd094575f6db454fc6b5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga3f02dfbb94238b2cf2ef8f20844b03af"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga3f02dfbb94238b2cf2ef8f20844b03af"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 > </td></tr>
-<tr class="memitem:ga3f02dfbb94238b2cf2ef8f20844b03af"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, <a class="el" href="a00153.html">tbb::task_group_context</a> &context)</td></tr>
-<tr class="separator:ga3f02dfbb94238b2cf2ef8f20844b03af"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gad8c1220bbd59e3b8e7bbcdcfdda8047e"><td class="memTemplParams" colspan="2"><a class="anchor" id="gad8c1220bbd59e3b8e7bbcdcfdda8047e"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 > </td></tr>
-<tr class="memitem:gad8c1220bbd59e3b8e7bbcdcfdda8047e"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, <a class="el" href="a00153.html">tbb::task_group_context</a> &context)</td></tr>
-<tr class="separator:gad8c1220bbd59e3b8e7bbcdcfdda8047e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga5ee83a66397ee0b15c77756cb5e5168e"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga5ee83a66397ee0b15c77756cb5e5168e"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 > </td></tr>
-<tr class="memitem:ga5ee83a66397ee0b15c77756cb5e5168e"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, <a class="el" href="a00153.html">tbb::task_group_context</a> &context)</td></tr>
-<tr class="separator:ga5ee83a66397ee0b15c77756cb5e5168e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga1af92ebd06f6cdf5ee668b1fe62657bd"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga1af92ebd06f6cdf5ee668b1fe62657bd"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 > </td></tr>
-<tr class="memitem:ga1af92ebd06f6cdf5ee668b1fe62657bd"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, <a class="el" href="a00153.html">tbb::task_group_context</a> &context)</td></tr>
-<tr class="separator:ga1af92ebd06f6cdf5ee668b1fe62657bd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga65846bc3b2f63ed1448b6cdfea9e1c80"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga65846bc3b2f63ed1448b6cdfea9e1c80"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 , typename F9 > </td></tr>
-<tr class="memitem:ga65846bc3b2f63ed1448b6cdfea9e1c80"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, const F9 &f9, <a class="el" href="a00153.html">tbb::task_group_context</a> &context)</td></tr>
-<tr class="separator:ga65846bc3b2f63ed1448b6cdfea9e1c80"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga6b1c36ece1d3950677dd01ef0863648c"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga6b1c36ece1d3950677dd01ef0863648c"></a>
-template<typename F0 , typename F1 > </td></tr>
-<tr class="memitem:ga6b1c36ece1d3950677dd01ef0863648c"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1)</td></tr>
-<tr class="separator:ga6b1c36ece1d3950677dd01ef0863648c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gaa979656a4c207782b74800c6c42982f5"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaa979656a4c207782b74800c6c42982f5"></a>
-template<typename F0 , typename F1 , typename F2 > </td></tr>
-<tr class="memitem:gaa979656a4c207782b74800c6c42982f5"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2)</td></tr>
-<tr class="separator:gaa979656a4c207782b74800c6c42982f5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga219cb8061b7cf5454c0bc4d67cff1e34"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga219cb8061b7cf5454c0bc4d67cff1e34"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 > </td></tr>
-<tr class="memitem:ga219cb8061b7cf5454c0bc4d67cff1e34"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3)</td></tr>
-<tr class="separator:ga219cb8061b7cf5454c0bc4d67cff1e34"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga8319ee980cd7cfb03f12ffc2a5ea4895"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga8319ee980cd7cfb03f12ffc2a5ea4895"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 > </td></tr>
-<tr class="memitem:ga8319ee980cd7cfb03f12ffc2a5ea4895"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4)</td></tr>
-<tr class="separator:ga8319ee980cd7cfb03f12ffc2a5ea4895"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga295daf6f7394fba29a979b914be09fc6"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga295daf6f7394fba29a979b914be09fc6"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 > </td></tr>
-<tr class="memitem:ga295daf6f7394fba29a979b914be09fc6"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5)</td></tr>
-<tr class="separator:ga295daf6f7394fba29a979b914be09fc6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga7652a01622a2f28df1e0edf40b691190"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga7652a01622a2f28df1e0edf40b691190"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 > </td></tr>
-<tr class="memitem:ga7652a01622a2f28df1e0edf40b691190"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6)</td></tr>
-<tr class="separator:ga7652a01622a2f28df1e0edf40b691190"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gadd8826371866c58e41dee3546c35d2c8"><td class="memTemplParams" colspan="2"><a class="anchor" id="gadd8826371866c58e41dee3546c35d2c8"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 > </td></tr>
-<tr class="memitem:gadd8826371866c58e41dee3546c35d2c8"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7)</td></tr>
-<tr class="separator:gadd8826371866c58e41dee3546c35d2c8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gaeca8b72507d67dd023dae728bdc89896"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaeca8b72507d67dd023dae728bdc89896"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 > </td></tr>
-<tr class="memitem:gaeca8b72507d67dd023dae728bdc89896"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8)</td></tr>
-<tr class="separator:gaeca8b72507d67dd023dae728bdc89896"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga17c9f95fac24b2b7b62f325f511ee7be"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga17c9f95fac24b2b7b62f325f511ee7be"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 , typename F9 > </td></tr>
-<tr class="memitem:ga17c9f95fac24b2b7b62f325f511ee7be"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, const F9 &f9)</td></tr>
-<tr class="separator:ga17c9f95fac24b2b7b62f325f511ee7be"><td class="memSeparator" colspan="2"> </td></tr>
-<tr><td colspan="2"><div class="groupHeader">parallel_reduce</div></td></tr>
-<tr><td colspan="2"><div class="groupText"><p>See also requirements on <a class="el" href="a00001.html">Range</a> and <a class="el" href="a00004.html">parallel_reduce Body</a>. </p>
-</div></td></tr>
-<tr class="memitem:ga7b1ce9568e0a0efe1bd2d55677bc6687"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga7b1ce9568e0a0efe1bd2d55677bc6687"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga7b1ce9568e0a0efe1bd2d55677bc6687">parallel_reduce</a> (const Range &range, Body &body)</td></tr>
-<tr class="memdesc:ga7b1ce9568e0a0efe1bd2d55677bc6687"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and default partitioner.  <a href="a00255.html#ga7b1ce9568e0a0efe1bd2d55677bc6687">More...</a><br/></td></tr>
-<tr class="separator:ga7b1ce9568e0a0efe1bd2d55677bc6687"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gaebb92b593827f9c3f5e1f8ee2f7d5f82"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:gaebb92b593827f9c3f5e1f8ee2f7d5f82"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#gaebb92b593827f9c3f5e1f8ee2f7d5f82">parallel_reduce</a> (const Range &range, Body &body, const simple_partitioner &partitioner)</td></tr>
-<tr class="memdesc:gaebb92b593827f9c3f5e1f8ee2f7d5f82"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and simple_partitioner.  <a href="a00255.html#gaebb92b593827f9c3f5e1f8ee2f7d5f82">More...</a><br/></td></tr>
-<tr class="separator:gaebb92b593827f9c3f5e1f8ee2f7d5f82"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga3011e7266fb1e43d307060fe75be2c6e"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga3011e7266fb1e43d307060fe75be2c6e"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga3011e7266fb1e43d307060fe75be2c6e">parallel_reduce</a> (const Range &range, Body &body, const auto_partitioner &partitioner)</td></tr>
-<tr class="memdesc:ga3011e7266fb1e43d307060fe75be2c6e"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and auto_partitioner.  <a href="a00255.html#ga3011e7266fb1e43d307060fe75be2c6e">More...</a><br/></td></tr>
-<tr class="separator:ga3011e7266fb1e43d307060fe75be2c6e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga6e83e121490df24fa5893b14e68f5e2a"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga6e83e121490df24fa5893b14e68f5e2a"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga6e83e121490df24fa5893b14e68f5e2a">parallel_reduce</a> (const Range &range, Body &body, affinity_partitioner &partitioner)</td></tr>
-<tr class="memdesc:ga6e83e121490df24fa5893b14e68f5e2a"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and affinity_partitioner.  <a href="a00255.html#ga6e83e121490df24fa5893b14e68f5e2a">More...</a><br/></td></tr>
-<tr class="separator:ga6e83e121490df24fa5893b14e68f5e2a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gac57281bea03450ccb2d098ee8c7ab697"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:gac57281bea03450ccb2d098ee8c7ab697"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#gac57281bea03450ccb2d098ee8c7ab697">parallel_reduce</a> (const Range &range, Body &body, const simple_partitioner &partitioner, <a class="el" href="a00153.html">task_group_context</a> &context)</td></tr>
-<tr class="memdesc:gac57281bea03450ccb2d098ee8c7ab697"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, simple partitioner and user-supplied context.  <a href="a00255.html#gac57281bea03450ccb2d098ee8c7ab697">More...</a><br/></td></tr>
-<tr class="separator:gac57281bea03450ccb2d098ee8c7ab697"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga5f3ebf50ab7f5e53fd936817c866f7be"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga5f3ebf50ab7f5e53fd936817c866f7be"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga5f3ebf50ab7f5e53fd936817c866f7be">parallel_reduce</a> (const Range &range, Body &body, const auto_partitioner &partitioner, <a class="el" href="a00153.html">task_group_context</a> &context)</td></tr>
-<tr class="memdesc:ga5f3ebf50ab7f5e53fd936817c866f7be"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, auto_partitioner and user-supplied context.  <a href="a00255.html#ga5f3ebf50ab7f5e53fd936817c866f7be">More...</a><br/></td></tr>
-<tr class="separator:ga5f3ebf50ab7f5e53fd936817c866f7be"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga5df3f3a9618fd35931107819cb43fce6"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga5df3f3a9618fd35931107819cb43fce6"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga5df3f3a9618fd35931107819cb43fce6">parallel_reduce</a> (const Range &range, Body &body, affinity_partitioner &partitioner, <a class="el" href="a00153.html">task_group_context</a> &context)</td></tr>
-<tr class="memdesc:ga5df3f3a9618fd35931107819cb43fce6"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, affinity_partitioner and user-supplied context.  <a href="a00255.html#ga5df3f3a9618fd35931107819cb43fce6">More...</a><br/></td></tr>
-<tr class="separator:ga5df3f3a9618fd35931107819cb43fce6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga1c9b66fa25cadee9ca3bff75a6609b05"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
-<tr class="memitem:ga1c9b66fa25cadee9ca3bff75a6609b05"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga1c9b66fa25cadee9ca3bff75a6609b05">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction)</td></tr>
-<tr class="memdesc:ga1c9b66fa25cadee9ca3bff75a6609b05"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and default partitioner.  <a href="a00255.html#ga1c9b66fa25cadee9ca3bff75a6609b05">More...</a><br/></td></tr>
-<tr class="separator:ga1c9b66fa25cadee9ca3bff75a6609b05"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga0b22fd1de0e8bbaf46587d3c63a1ed93"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
-<tr class="memitem:ga0b22fd1de0e8bbaf46587d3c63a1ed93"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga0b22fd1de0e8bbaf46587d3c63a1ed93">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const simple_partitioner &partitioner)</td></tr>
-<tr class="memdesc:ga0b22fd1de0e8bbaf46587d3c63a1ed93"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and simple_partitioner.  <a href="a00255.html#ga0b22fd1de0e8bbaf46587d3c63a1ed93">More...</a><br/></td></tr>
-<tr class="separator:ga0b22fd1de0e8bbaf46587d3c63a1ed93"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga56e6b6e2eee521f532c00d855280be69"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
-<tr class="memitem:ga56e6b6e2eee521f532c00d855280be69"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga56e6b6e2eee521f532c00d855280be69">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const auto_partitioner &partitioner)</td></tr>
-<tr class="memdesc:ga56e6b6e2eee521f532c00d855280be69"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and auto_partitioner.  <a href="a00255.html#ga56e6b6e2eee521f532c00d855280be69">More...</a><br/></td></tr>
-<tr class="separator:ga56e6b6e2eee521f532c00d855280be69"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gac26c35d1983e7ac2ab003cc8e49dd7e6"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
-<tr class="memitem:gac26c35d1983e7ac2ab003cc8e49dd7e6"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#gac26c35d1983e7ac2ab003cc8e49dd7e6">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, affinity_partitioner &partitioner)</td></tr>
-<tr class="memdesc:gac26c35d1983e7ac2ab003cc8e49dd7e6"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and affinity_partitioner.  <a href="a00255.html#gac26c35d1983e7ac2ab003cc8e49dd7e6">More...</a><br/></td></tr>
-<tr class="separator:gac26c35d1983e7ac2ab003cc8e49dd7e6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga518ef2653004d60319bdfc1c6bce86b6"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
-<tr class="memitem:ga518ef2653004d60319bdfc1c6bce86b6"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga518ef2653004d60319bdfc1c6bce86b6">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const simple_partitioner &partitioner, <a class="el" href="a00153.html">task_group_context</a> &context)</td></tr>
-<tr class="memdesc:ga518ef2653004d60319bdfc1c6bce86b6"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, simple partitioner and user-supplied context.  <a href="a00255.html#ga518ef2653004d60319bdfc1c6bce86b6">More...</a><br/></td></tr>
-<tr class="separator:ga518ef2653004d60319bdfc1c6bce86b6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga24ba50caf5a7c32cbd38912508cb69a4"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
-<tr class="memitem:ga24ba50caf5a7c32cbd38912508cb69a4"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga24ba50caf5a7c32cbd38912508cb69a4">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const auto_partitioner &partitioner, <a class="el" href="a00153.html">task_group_context</a> &context)</td></tr>
-<tr class="memdesc:ga24ba50caf5a7c32cbd38912508cb69a4"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, auto_partitioner and user-supplied context.  <a href="a00255.html#ga24ba50caf5a7c32cbd38912508cb69a4">More...</a><br/></td></tr>
-<tr class="separator:ga24ba50caf5a7c32cbd38912508cb69a4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga367a8e77c4dac3f8764785afdc6c9299"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
-<tr class="memitem:ga367a8e77c4dac3f8764785afdc6c9299"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga367a8e77c4dac3f8764785afdc6c9299">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, affinity_partitioner &partitioner, <a class="el" href="a00153.html">task_group_context</a> &context)</td></tr>
-<tr class="memdesc:ga367a8e77c4dac3f8764785afdc6c9299"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, affinity_partitioner and user-supplied context.  <a href="a00255.html#ga367a8e77c4dac3f8764785afdc6c9299">More...</a><br/></td></tr>
-<tr class="separator:ga367a8e77c4dac3f8764785afdc6c9299"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga1fd7e3c43592dfe1ae3e3572bd80d4f6"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga1fd7e3c43592dfe1ae3e3572bd80d4f6"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga1fd7e3c43592dfe1ae3e3572bd80d4f6">parallel_deterministic_reduce</a> (const Range &range, Body &body)</td></tr>
-<tr class="memdesc:ga1fd7e3c43592dfe1ae3e3572bd80d4f6"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction and default partitioner.  <a href="a00255.html#ga1fd7e3c43592dfe1ae3e3572bd80d4f6">More...</a><br/></td></tr>
-<tr class="separator:ga1fd7e3c43592dfe1ae3e3572bd80d4f6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga361201f81b4ec7b86f81b579d2db647a"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga361201f81b4ec7b86f81b579d2db647a"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga361201f81b4ec7b86f81b579d2db647a">parallel_deterministic_reduce</a> (const Range &range, Body &body, <a class="el" href="a00153.html">task_group_context</a> &context)</td></tr>
-<tr class="memdesc:ga361201f81b4ec7b86f81b579d2db647a"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction, simple partitioner and user-supplied context.  <a href="a00255.html#ga361201f81b4ec7b86f81b579d2db647a">More...</a><br/></td></tr>
-<tr class="separator:ga361201f81b4ec7b86f81b579d2db647a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga7f69e6a632acb51ed26a43ebd331f349"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
-<tr class="memitem:ga7f69e6a632acb51ed26a43ebd331f349"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga7f69e6a632acb51ed26a43ebd331f349">parallel_deterministic_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction)</td></tr>
-<tr class="memdesc:ga7f69e6a632acb51ed26a43ebd331f349"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction and default partitioner.  <a href="a00255.html#ga7f69e6a632acb51ed26a43ebd331f349">More...</a><br/></td></tr>
-<tr class="separator:ga7f69e6a632acb51ed26a43ebd331f349"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga69b4eea059a62cbbf409cbad02b70bfa"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
-<tr class="memitem:ga69b4eea059a62cbbf409cbad02b70bfa"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga69b4eea059a62cbbf409cbad02b70bfa">parallel_deterministic_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, <a class="el" href="a00153.html">task_group_context</a> &context)</td></tr>
-<tr class="memdesc:ga69b4eea059a62cbbf409cbad02b70bfa"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction, simple partitioner and user-supplied context.  <a href="a00255.html#ga69b4eea059a62cbbf409cbad02b70bfa">More...</a><br/></td></tr>
-<tr class="separator:ga69b4eea059a62cbbf409cbad02b70bfa"><td class="memSeparator" colspan="2"> </td></tr>
-<tr><td colspan="2"><div class="groupHeader">parallel_scan</div></td></tr>
-<tr><td colspan="2"><div class="groupText"><p>See also requirements on <a class="el" href="a00001.html">Range</a> and <a class="el" href="a00006.html">parallel_scan Body</a>. </p>
-</div></td></tr>
-<tr class="memitem:gae7eaaf124471a6c603b28fc925e8fbbb"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:gae7eaaf124471a6c603b28fc925e8fbbb"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#gae7eaaf124471a6c603b28fc925e8fbbb">parallel_scan</a> (const Range &range, Body &body)</td></tr>
-<tr class="memdesc:gae7eaaf124471a6c603b28fc925e8fbbb"><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with default partitioner.  <a href="a00255.html#gae7eaaf124471a6c603b28fc925e8fbbb">More...</a><br/></td></tr>
-<tr class="separator:gae7eaaf124471a6c603b28fc925e8fbbb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga7ddacf5e49f1bea9b67803f2d0f57531"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga7ddacf5e49f1bea9b67803f2d0f57531"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga7ddacf5e49f1bea9b67803f2d0f57531">parallel_scan</a> (const Range &range, Body &body, const simple_partitioner &partitioner)</td></tr>
-<tr class="memdesc:ga7ddacf5e49f1bea9b67803f2d0f57531"><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with simple_partitioner.  <a href="a00255.html#ga7ddacf5e49f1bea9b67803f2d0f57531">More...</a><br/></td></tr>
-<tr class="separator:ga7ddacf5e49f1bea9b67803f2d0f57531"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga3548041731b7fa14f30f155541ceebb9"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga3548041731b7fa14f30f155541ceebb9"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga3548041731b7fa14f30f155541ceebb9">parallel_scan</a> (const Range &range, Body &body, const auto_partitioner &partitioner)</td></tr>
-<tr class="memdesc:ga3548041731b7fa14f30f155541ceebb9"><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with auto_partitioner.  <a href="a00255.html#ga3548041731b7fa14f30f155541ceebb9">More...</a><br/></td></tr>
-<tr class="separator:ga3548041731b7fa14f30f155541ceebb9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr><td colspan="2"><div class="groupHeader">parallel_sort</div></td></tr>
-<tr><td colspan="2"><div class="groupText"><p>See also requirements on <a class="el" href="a00007.html">iterators for parallel_sort</a>. </p>
-</div></td></tr>
-<tr class="memitem:gabdc90813499f91d3e32298cd6dc2fe45"><td class="memTemplParams" colspan="2">template<typename RandomAccessIterator , typename Compare > </td></tr>
-<tr class="memitem:gabdc90813499f91d3e32298cd6dc2fe45"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#gabdc90813499f91d3e32298cd6dc2fe45">parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end, const Compare &comp)</td></tr>
-<tr class="memdesc:gabdc90813499f91d3e32298cd6dc2fe45"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in [begin,end) using the given comparator.  <a href="a00255.html#gabdc90813499f91d3e32298cd6dc2fe45">More...</a><br/></td></tr>
-<tr class="separator:gabdc90813499f91d3e32298cd6dc2fe45"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga73b58ac9249f49587d0b081c152af551"><td class="memTemplParams" colspan="2">template<typename RandomAccessIterator > </td></tr>
-<tr class="memitem:ga73b58ac9249f49587d0b081c152af551"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga73b58ac9249f49587d0b081c152af551">parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end)</td></tr>
-<tr class="memdesc:ga73b58ac9249f49587d0b081c152af551"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in [begin,end) with a default comparator <code>std::less<RandomAccessIterator></code>  <a href="a00255.html#ga73b58ac9249f49587d0b081c152af551">More...</a><br/></td></tr>
-<tr class="separator:ga73b58ac9249f49587d0b081c152af551"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga61ce8ba64868c5c15f9d98840193b9bf"><td class="memTemplParams" colspan="2">template<typename Range , typename Compare > </td></tr>
-<tr class="memitem:ga61ce8ba64868c5c15f9d98840193b9bf"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga61ce8ba64868c5c15f9d98840193b9bf">parallel_sort</a> (Range &rng, const Compare &comp)</td></tr>
-<tr class="memdesc:ga61ce8ba64868c5c15f9d98840193b9bf"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in rng using the given comparator.  <a href="a00255.html#ga61ce8ba64868c5c15f9d98840193b9bf">More...</a><br/></td></tr>
-<tr class="separator:ga61ce8ba64868c5c15f9d98840193b9bf"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga541b2fd91e88842a7b823161107779e9"><td class="memTemplParams" colspan="2">template<typename Range , typename Compare > </td></tr>
-<tr class="memitem:ga541b2fd91e88842a7b823161107779e9"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga541b2fd91e88842a7b823161107779e9">parallel_sort</a> (const Range &rng, const Compare &comp)</td></tr>
-<tr class="memdesc:ga541b2fd91e88842a7b823161107779e9"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in const rng using the given comparator.  <a href="a00255.html#ga541b2fd91e88842a7b823161107779e9">More...</a><br/></td></tr>
-<tr class="separator:ga541b2fd91e88842a7b823161107779e9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gaf1fb3ae3aab1213cb9bcf56e30c164bb"><td class="memTemplParams" colspan="2">template<typename Range > </td></tr>
-<tr class="memitem:gaf1fb3ae3aab1213cb9bcf56e30c164bb"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#gaf1fb3ae3aab1213cb9bcf56e30c164bb">parallel_sort</a> (Range &rng)</td></tr>
-<tr class="memdesc:gaf1fb3ae3aab1213cb9bcf56e30c164bb"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in rng with a default comparator <code>std::less<RandomAccessIterator></code>  <a href="a00255.html#gaf1fb3ae3aab1213cb9bcf56e30c164bb">More...</a><br/></td></tr>
-<tr class="separator:gaf1fb3ae3aab1213cb9bcf56e30c164bb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga60bbc3d7699f09618bd8b5114e4277cb"><td class="memTemplParams" colspan="2">template<typename Range > </td></tr>
-<tr class="memitem:ga60bbc3d7699f09618bd8b5114e4277cb"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga60bbc3d7699f09618bd8b5114e4277cb">parallel_sort</a> (const Range &rng)</td></tr>
-<tr class="memdesc:ga60bbc3d7699f09618bd8b5114e4277cb"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in const rng with a default comparator <code>std::less<RandomAccessIterator></code>  <a href="a00255.html#ga60bbc3d7699f09618bd8b5114e4277cb">More...</a><br/></td></tr>
-<tr class="separator:ga60bbc3d7699f09618bd8b5114e4277cb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga8f176cdc232a6e5907456656a24983a8"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr class="memitem:ga8f176cdc232a6e5907456656a24983a8"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga8f176cdc232a6e5907456656a24983a8">parallel_sort</a> (T *begin, T *end)</td></tr>
-<tr class="memdesc:ga8f176cdc232a6e5907456656a24983a8"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in the range <code></code>[begin,end) with a default comparator <code>std::less<T></code>  <a href="a00255.html#ga8f176cdc232a6e5907456656a24983a8">More...</a><br/></td></tr>
-<tr class="separator:ga8f176cdc232a6e5907456656a24983a8"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>The namespace tbb contains all components of the library. </p>
-</div><h2 class="groupheader">Enumeration Type Documentation</h2>
-<a class="anchor" id="adb86d08473679d6fe0eabcdc766ffe3a"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="a00240.html#adb86d08473679d6fe0eabcdc766ffe3a">tbb::memory_semantics</a></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Specifies memory semantics. </p>
-<table class="fieldtable">
-<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="adb86d08473679d6fe0eabcdc766ffe3aa6a315190cf4509ec388ecb423432f36a"></a>full_fence</em> </td><td class="fielddoc">
-<p>Sequential consistency. </p>
-</td></tr>
-<tr><td class="fieldname"><em><a class="anchor" id="adb86d08473679d6fe0eabcdc766ffe3aaa92646b4dc7618530d3a9f51dd10a418"></a>acquire</em> </td><td class="fielddoc">
-<p>Acquire. </p>
-</td></tr>
-<tr><td class="fieldname"><em><a class="anchor" id="adb86d08473679d6fe0eabcdc766ffe3aa412563418e657114a102db610f726632"></a>release</em> </td><td class="fielddoc">
-<p>Release. </p>
-</td></tr>
-<tr><td class="fieldname"><em><a class="anchor" id="adb86d08473679d6fe0eabcdc766ffe3aa73cb2e2bcb94442b8b2b72e93a76f2e5"></a>relaxed</em> </td><td class="fielddoc">
-<p>No ordering. </p>
-</td></tr>
-</table>
-
-</div>
-</div>
-<h2 class="groupheader">Function Documentation</h2>
-<a class="anchor" id="ade8a8bc300d5ef09d38cbfb8baff5cd2"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int __TBB_EXPORTED_FUNC tbb::TBB_runtime_interface_version </td>
-          <td>(</td>
-          <td class="paramname">)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>The function returns the interface version of the TBB shared library being used. </p>
-<p>The version it returns is determined at runtime, not at compile/link time. So it can be different than the value of TBB_INTERFACE_VERSION obtained at compile time. </p>
-
-</div>
-</div>
-</div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00252.html b/doc/html/a00252.html
new file mode 100644
index 0000000..7f24620
--- /dev/null
+++ b/doc/html/a00252.html
@@ -0,0 +1,2187 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.4"/>
+<title>Algorithms</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.4 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a>  </div>
+  <div class="headertitle">
+<div class="title">Algorithms</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00022.html">tbb::blocked_range< Value ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A range over which to iterate.  <a href="a00022.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00023.html">tbb::blocked_range2d< RowValue, ColValue ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A 2-dimensional range that models the Range concept.  <a href="a00023.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A 3-dimensional range that models the Range concept.  <a href="a00024.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00104.html">tbb::pre_scan_tag</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Used to indicate that the initial scan is being performed.  <a href="a00104.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00061.html">tbb::final_scan_tag</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Used to indicate that the final scan is being performed.  <a href="a00061.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html">tbb::parallel_while< Body ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a stream, with optional addition of more work.  <a href="a00102.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00059.html">tbb::filter</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline.  <a href="a00059.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html">tbb::thread_bound_filter</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline served by a user thread.  <a href="a00158.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00103.html">tbb::pipeline</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A processing pipeline that applies filters to items.  <a href="a00103.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="member-group"></a>
+parallel_for</h2></td></tr>
+<tr><td class="ititle" colspan="2"><p><a class="anchor" id="amgrp020f371880777e82219a69f8a512e874"></a>See also requirements on <a class="el" href="a00001.html">Range</a> and <a class="el" href="a00002.html">parallel_for Body</a>. </p>
+</td></tr>
+<tr class="memitem:gaa8444c29dc4d2e527a1036717d109aef"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:gaa8444c29dc4d2e527a1036717d109aef"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gaa8444c29dc4d2e527a1036717d109aef">tbb::parallel_for</a> (const Range &range, const Body &body)</td></tr>
+<tr class="memdesc:gaa8444c29dc4d2e527a1036717d109aef"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with default partitioner.  <a href="#gaa8444c29dc4d2e527a1036717d109aef">More...</a><br/></td></tr>
+<tr class="separator:gaa8444c29dc4d2e527a1036717d109aef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9722d2bc7e5edb4fae9f3b55268a1ecc"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga9722d2bc7e5edb4fae9f3b55268a1ecc"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga9722d2bc7e5edb4fae9f3b55268a1ecc">tbb::parallel_for</a> (const Range &range, const Body &body, const simple_partitioner &partitioner)</td></tr>
+<tr class="memdesc:ga9722d2bc7e5edb4fae9f3b55268a1ecc"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with simple partitioner.  <a href="#ga9722d2bc7e5edb4fae9f3b55268a1ecc">More...</a><br/></td></tr>
+<tr class="separator:ga9722d2bc7e5edb4fae9f3b55268a1ecc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad6c4b06f96ae33cefe78235841791902"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:gad6c4b06f96ae33cefe78235841791902"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gad6c4b06f96ae33cefe78235841791902">tbb::parallel_for</a> (const Range &range, const Body &body, const auto_partitioner &partitioner)</td></tr>
+<tr class="memdesc:gad6c4b06f96ae33cefe78235841791902"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with auto_partitioner.  <a href="#gad6c4b06f96ae33cefe78235841791902">More...</a><br/></td></tr>
+<tr class="separator:gad6c4b06f96ae33cefe78235841791902"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga14ae8670bd55620f906aa06e073bd225"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga14ae8670bd55620f906aa06e073bd225"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga14ae8670bd55620f906aa06e073bd225">tbb::parallel_for</a> (const Range &range, const Body &body, const static_partitioner &partitioner)</td></tr>
+<tr class="memdesc:ga14ae8670bd55620f906aa06e073bd225"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with static_partitioner.  <a href="#ga14ae8670bd55620f906aa06e073bd225">More...</a><br/></td></tr>
+<tr class="separator:ga14ae8670bd55620f906aa06e073bd225"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf3d39e372d825bf54283b5ceafa90057"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:gaf3d39e372d825bf54283b5ceafa90057"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gaf3d39e372d825bf54283b5ceafa90057">tbb::parallel_for</a> (const Range &range, const Body &body, affinity_partitioner &partitioner)</td></tr>
+<tr class="memdesc:gaf3d39e372d825bf54283b5ceafa90057"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with affinity_partitioner.  <a href="#gaf3d39e372d825bf54283b5ceafa90057">More...</a><br/></td></tr>
+<tr class="separator:gaf3d39e372d825bf54283b5ceafa90057"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga93a621202db94665144de38c0b09bdad"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga93a621202db94665144de38c0b09bdad"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga93a621202db94665144de38c0b09bdad">tbb::parallel_for</a> (const Range &range, const Body &body, task_group_context &context)</td></tr>
+<tr class="memdesc:ga93a621202db94665144de38c0b09bdad"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with default partitioner and user-supplied context.  <a href="#ga93a621202db94665144de38c0b09bdad">More...</a><br/></td></tr>
+<tr class="separator:ga93a621202db94665144de38c0b09bdad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5b7fab9d6ffe7a9345e9349a5a007bd4"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga5b7fab9d6ffe7a9345e9349a5a007bd4"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga5b7fab9d6ffe7a9345e9349a5a007bd4">tbb::parallel_for</a> (const Range &range, const Body &body, const simple_partitioner &partitioner, task_group_context &context)</td></tr>
+<tr class="memdesc:ga5b7fab9d6ffe7a9345e9349a5a007bd4"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with simple partitioner and user-supplied context.  <a href="#ga5b7fab9d6ffe7a9345e9349a5a007bd4">More...</a><br/></td></tr>
+<tr class="separator:ga5b7fab9d6ffe7a9345e9349a5a007bd4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4c9935d8710a5cf786a92f3522ab2976"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga4c9935d8710a5cf786a92f3522ab2976"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga4c9935d8710a5cf786a92f3522ab2976">tbb::parallel_for</a> (const Range &range, const Body &body, const auto_partitioner &partitioner, task_group_context &context)</td></tr>
+<tr class="memdesc:ga4c9935d8710a5cf786a92f3522ab2976"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with auto_partitioner and user-supplied context.  <a href="#ga4c9935d8710a5cf786a92f3522ab2976">More...</a><br/></td></tr>
+<tr class="separator:ga4c9935d8710a5cf786a92f3522ab2976"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4bb3d8cf616632476ca923eb056ee07d"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga4bb3d8cf616632476ca923eb056ee07d"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga4bb3d8cf616632476ca923eb056ee07d">tbb::parallel_for</a> (const Range &range, const Body &body, const static_partitioner &partitioner, task_group_context &context)</td></tr>
+<tr class="memdesc:ga4bb3d8cf616632476ca923eb056ee07d"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with static_partitioner and user-supplied context.  <a href="#ga4bb3d8cf616632476ca923eb056ee07d">More...</a><br/></td></tr>
+<tr class="separator:ga4bb3d8cf616632476ca923eb056ee07d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga62b1a9ac304ba1eb4f87ab8cc18dd281"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga62b1a9ac304ba1eb4f87ab8cc18dd281"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga62b1a9ac304ba1eb4f87ab8cc18dd281">tbb::parallel_for</a> (const Range &range, const Body &body, affinity_partitioner &partitioner, task_group_context &context)</td></tr>
+<tr class="memdesc:ga62b1a9ac304ba1eb4f87ab8cc18dd281"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with affinity_partitioner and user-supplied context.  <a href="#ga62b1a9ac304ba1eb4f87ab8cc18dd281">More...</a><br/></td></tr>
+<tr class="separator:ga62b1a9ac304ba1eb4f87ab8cc18dd281"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="member-group"></a>
+parallel_for_each</h2></td></tr>
+<tr class="memitem:gac9225af45fd0468843b3fc32608c71de"><td class="memTemplParams" colspan="2">template<typename Iterator , typename Function > </td></tr>
+<tr class="memitem:gac9225af45fd0468843b3fc32608c71de"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gac9225af45fd0468843b3fc32608c71de">tbb::parallel_for_each</a> (Iterator first, Iterator last, const Function &f, task_group_context &context)</td></tr>
+<tr class="memdesc:gac9225af45fd0468843b3fc32608c71de"><td class="mdescLeft"> </td><td class="mdescRight">Calls function f for all items from [first, last) interval using user-supplied context.  <a href="#gac9225af45fd0468843b3fc32608c71de">More...</a><br/></td></tr>
+<tr class="separator:gac9225af45fd0468843b3fc32608c71de"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga72131543fd218b67dbb048b768d534e4"><td class="memTemplParams" colspan="2">template<typename Range , typename Function > </td></tr>
+<tr class="memitem:ga72131543fd218b67dbb048b768d534e4"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga72131543fd218b67dbb048b768d534e4">tbb::parallel_for_each</a> (Range &rng, const Function &f, task_group_context &context)</td></tr>
+<tr class="memdesc:ga72131543fd218b67dbb048b768d534e4"><td class="mdescLeft"> </td><td class="mdescRight">Calls function f for all items from rng using user-supplied context.  <a href="#ga72131543fd218b67dbb048b768d534e4">More...</a><br/></td></tr>
+<tr class="separator:ga72131543fd218b67dbb048b768d534e4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad7d0702d16fbd7554584ab735eed39ba"><td class="memTemplParams" colspan="2">template<typename Range , typename Function > </td></tr>
+<tr class="memitem:gad7d0702d16fbd7554584ab735eed39ba"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gad7d0702d16fbd7554584ab735eed39ba">tbb::parallel_for_each</a> (const Range &rng, const Function &f, task_group_context &context)</td></tr>
+<tr class="memdesc:gad7d0702d16fbd7554584ab735eed39ba"><td class="mdescLeft"> </td><td class="mdescRight">Calls function f for all items from const rng user-supplied context.  <a href="#gad7d0702d16fbd7554584ab735eed39ba">More...</a><br/></td></tr>
+<tr class="separator:gad7d0702d16fbd7554584ab735eed39ba"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga21c63dee10188196a2f0514afa81ff1f"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga21c63dee10188196a2f0514afa81ff1f"></a>
+template<typename Iterator , typename Function > </td></tr>
+<tr class="memitem:ga21c63dee10188196a2f0514afa81ff1f"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga21c63dee10188196a2f0514afa81ff1f">tbb::parallel_for_each</a> (Iterator first, Iterator last, const Function &f)</td></tr>
+<tr class="memdesc:ga21c63dee10188196a2f0514afa81ff1f"><td class="mdescLeft"> </td><td class="mdescRight">Uses default context. <br/></td></tr>
+<tr class="separator:ga21c63dee10188196a2f0514afa81ff1f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5868cd01f2126b139ab5809f64632db1"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga5868cd01f2126b139ab5809f64632db1"></a>
+template<typename Range , typename Function > </td></tr>
+<tr class="memitem:ga5868cd01f2126b139ab5809f64632db1"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga5868cd01f2126b139ab5809f64632db1">tbb::parallel_for_each</a> (Range &rng, const Function &f)</td></tr>
+<tr class="memdesc:ga5868cd01f2126b139ab5809f64632db1"><td class="mdescLeft"> </td><td class="mdescRight">Uses default context. <br/></td></tr>
+<tr class="separator:ga5868cd01f2126b139ab5809f64632db1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga33463c8b0d0104cf9d9e0f9cb3c0b26b"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga33463c8b0d0104cf9d9e0f9cb3c0b26b"></a>
+template<typename Range , typename Function > </td></tr>
+<tr class="memitem:ga33463c8b0d0104cf9d9e0f9cb3c0b26b"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga33463c8b0d0104cf9d9e0f9cb3c0b26b">tbb::parallel_for_each</a> (const Range &rng, const Function &f)</td></tr>
+<tr class="memdesc:ga33463c8b0d0104cf9d9e0f9cb3c0b26b"><td class="mdescLeft"> </td><td class="mdescRight">Uses default context. <br/></td></tr>
+<tr class="separator:ga33463c8b0d0104cf9d9e0f9cb3c0b26b"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="member-group"></a>
+parallel_invoke</h2></td></tr>
+<tr class="memitem:ga3c6fe4bf1076c82132e666fb545451cd"><td class="memTemplParams" colspan="2">template<typename F0 , typename F1 , typename... F> </td></tr>
+<tr class="memitem:ga3c6fe4bf1076c82132e666fb545451cd"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga3c6fe4bf1076c82132e666fb545451cd">tbb::parallel_invoke</a> (F0 &&f0, F1 &&f1, F &&...f)</td></tr>
+<tr class="memdesc:ga3c6fe4bf1076c82132e666fb545451cd"><td class="mdescLeft"> </td><td class="mdescRight">Executes a list of tasks in parallel and waits for all tasks to complete.  <a href="#ga3c6fe4bf1076c82132e666fb545451cd">More...</a><br/></td></tr>
+<tr class="separator:ga3c6fe4bf1076c82132e666fb545451cd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga14459dcbcd631194df803b155a7f610b"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga14459dcbcd631194df803b155a7f610b"></a>
+template<typename F0 , typename F1 > </td></tr>
+<tr class="memitem:ga14459dcbcd631194df803b155a7f610b"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, <a class="el" href="a00147.html">tbb::task_group_context</a> &context)</td></tr>
+<tr class="separator:ga14459dcbcd631194df803b155a7f610b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaaea3f3a8883128afb596a963e856277f"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaaea3f3a8883128afb596a963e856277f"></a>
+template<typename F0 , typename F1 , typename F2 > </td></tr>
+<tr class="memitem:gaaea3f3a8883128afb596a963e856277f"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, <a class="el" href="a00147.html">tbb::task_group_context</a> &context)</td></tr>
+<tr class="separator:gaaea3f3a8883128afb596a963e856277f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga74932e64ede5047387108fa45f1af96f"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga74932e64ede5047387108fa45f1af96f"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 > </td></tr>
+<tr class="memitem:ga74932e64ede5047387108fa45f1af96f"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, <a class="el" href="a00147.html">tbb::task_group_context</a> &context)</td></tr>
+<tr class="separator:ga74932e64ede5047387108fa45f1af96f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaefc1ba8f73cbdd094575f6db454fc6b5"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaefc1ba8f73cbdd094575f6db454fc6b5"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 > </td></tr>
+<tr class="memitem:gaefc1ba8f73cbdd094575f6db454fc6b5"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, <a class="el" href="a00147.html">tbb::task_group_context</a> &context)</td></tr>
+<tr class="separator:gaefc1ba8f73cbdd094575f6db454fc6b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3f02dfbb94238b2cf2ef8f20844b03af"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga3f02dfbb94238b2cf2ef8f20844b03af"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 > </td></tr>
+<tr class="memitem:ga3f02dfbb94238b2cf2ef8f20844b03af"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, <a class="el" href="a00147.html">tbb::task_group_context</a> &context)</td></tr>
+<tr class="separator:ga3f02dfbb94238b2cf2ef8f20844b03af"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad8c1220bbd59e3b8e7bbcdcfdda8047e"><td class="memTemplParams" colspan="2"><a class="anchor" id="gad8c1220bbd59e3b8e7bbcdcfdda8047e"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 > </td></tr>
+<tr class="memitem:gad8c1220bbd59e3b8e7bbcdcfdda8047e"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, <a class="el" href="a00147.html">tbb::task_group_context</a> &context)</td></tr>
+<tr class="separator:gad8c1220bbd59e3b8e7bbcdcfdda8047e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5ee83a66397ee0b15c77756cb5e5168e"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga5ee83a66397ee0b15c77756cb5e5168e"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 > </td></tr>
+<tr class="memitem:ga5ee83a66397ee0b15c77756cb5e5168e"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, <a class="el" href="a00147.html">tbb::task_group_context</a> &context)</td></tr>
+<tr class="separator:ga5ee83a66397ee0b15c77756cb5e5168e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1af92ebd06f6cdf5ee668b1fe62657bd"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga1af92ebd06f6cdf5ee668b1fe62657bd"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 > </td></tr>
+<tr class="memitem:ga1af92ebd06f6cdf5ee668b1fe62657bd"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, <a class="el" href="a00147.html">tbb::task_group_context</a> &context)</td></tr>
+<tr class="separator:ga1af92ebd06f6cdf5ee668b1fe62657bd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga65846bc3b2f63ed1448b6cdfea9e1c80"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga65846bc3b2f63ed1448b6cdfea9e1c80"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 , typename F9 > </td></tr>
+<tr class="memitem:ga65846bc3b2f63ed1448b6cdfea9e1c80"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, const F9 &f9, <a class="el" href="a00147.html">tbb::task_group_context</a> &context)</td></tr>
+<tr class="separator:ga65846bc3b2f63ed1448b6cdfea9e1c80"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6b1c36ece1d3950677dd01ef0863648c"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga6b1c36ece1d3950677dd01ef0863648c"></a>
+template<typename F0 , typename F1 > </td></tr>
+<tr class="memitem:ga6b1c36ece1d3950677dd01ef0863648c"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1)</td></tr>
+<tr class="separator:ga6b1c36ece1d3950677dd01ef0863648c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa979656a4c207782b74800c6c42982f5"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaa979656a4c207782b74800c6c42982f5"></a>
+template<typename F0 , typename F1 , typename F2 > </td></tr>
+<tr class="memitem:gaa979656a4c207782b74800c6c42982f5"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2)</td></tr>
+<tr class="separator:gaa979656a4c207782b74800c6c42982f5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga219cb8061b7cf5454c0bc4d67cff1e34"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga219cb8061b7cf5454c0bc4d67cff1e34"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 > </td></tr>
+<tr class="memitem:ga219cb8061b7cf5454c0bc4d67cff1e34"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3)</td></tr>
+<tr class="separator:ga219cb8061b7cf5454c0bc4d67cff1e34"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8319ee980cd7cfb03f12ffc2a5ea4895"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga8319ee980cd7cfb03f12ffc2a5ea4895"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 > </td></tr>
+<tr class="memitem:ga8319ee980cd7cfb03f12ffc2a5ea4895"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4)</td></tr>
+<tr class="separator:ga8319ee980cd7cfb03f12ffc2a5ea4895"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga295daf6f7394fba29a979b914be09fc6"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga295daf6f7394fba29a979b914be09fc6"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 > </td></tr>
+<tr class="memitem:ga295daf6f7394fba29a979b914be09fc6"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5)</td></tr>
+<tr class="separator:ga295daf6f7394fba29a979b914be09fc6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7652a01622a2f28df1e0edf40b691190"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga7652a01622a2f28df1e0edf40b691190"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 > </td></tr>
+<tr class="memitem:ga7652a01622a2f28df1e0edf40b691190"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6)</td></tr>
+<tr class="separator:ga7652a01622a2f28df1e0edf40b691190"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadd8826371866c58e41dee3546c35d2c8"><td class="memTemplParams" colspan="2"><a class="anchor" id="gadd8826371866c58e41dee3546c35d2c8"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 > </td></tr>
+<tr class="memitem:gadd8826371866c58e41dee3546c35d2c8"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7)</td></tr>
+<tr class="separator:gadd8826371866c58e41dee3546c35d2c8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaeca8b72507d67dd023dae728bdc89896"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaeca8b72507d67dd023dae728bdc89896"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 > </td></tr>
+<tr class="memitem:gaeca8b72507d67dd023dae728bdc89896"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8)</td></tr>
+<tr class="separator:gaeca8b72507d67dd023dae728bdc89896"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga17c9f95fac24b2b7b62f325f511ee7be"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga17c9f95fac24b2b7b62f325f511ee7be"></a>
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 , typename F9 > </td></tr>
+<tr class="memitem:ga17c9f95fac24b2b7b62f325f511ee7be"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, const F9 &f9)</td></tr>
+<tr class="separator:ga17c9f95fac24b2b7b62f325f511ee7be"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="member-group"></a>
+parallel_reduce</h2></td></tr>
+<tr><td class="ititle" colspan="2"><p><a class="anchor" id="amgrp949e4773fffd16cb2d32f76af48627d2"></a>See also requirements on <a class="el" href="a00001.html">Range</a> and <a class="el" href="a00003.html">parallel_reduce Body</a>. </p>
+</td></tr>
+<tr class="memitem:ga7b1ce9568e0a0efe1bd2d55677bc6687"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga7b1ce9568e0a0efe1bd2d55677bc6687"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga7b1ce9568e0a0efe1bd2d55677bc6687">tbb::parallel_reduce</a> (const Range &range, Body &body)</td></tr>
+<tr class="memdesc:ga7b1ce9568e0a0efe1bd2d55677bc6687"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and default partitioner.  <a href="#ga7b1ce9568e0a0efe1bd2d55677bc6687">More...</a><br/></td></tr>
+<tr class="separator:ga7b1ce9568e0a0efe1bd2d55677bc6687"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaebb92b593827f9c3f5e1f8ee2f7d5f82"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:gaebb92b593827f9c3f5e1f8ee2f7d5f82"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gaebb92b593827f9c3f5e1f8ee2f7d5f82">tbb::parallel_reduce</a> (const Range &range, Body &body, const simple_partitioner &partitioner)</td></tr>
+<tr class="memdesc:gaebb92b593827f9c3f5e1f8ee2f7d5f82"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and simple_partitioner.  <a href="#gaebb92b593827f9c3f5e1f8ee2f7d5f82">More...</a><br/></td></tr>
+<tr class="separator:gaebb92b593827f9c3f5e1f8ee2f7d5f82"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3011e7266fb1e43d307060fe75be2c6e"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga3011e7266fb1e43d307060fe75be2c6e"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga3011e7266fb1e43d307060fe75be2c6e">tbb::parallel_reduce</a> (const Range &range, Body &body, const auto_partitioner &partitioner)</td></tr>
+<tr class="memdesc:ga3011e7266fb1e43d307060fe75be2c6e"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and auto_partitioner.  <a href="#ga3011e7266fb1e43d307060fe75be2c6e">More...</a><br/></td></tr>
+<tr class="separator:ga3011e7266fb1e43d307060fe75be2c6e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf15a4b0e2174dce3a12b70a89bbcdc63"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:gaf15a4b0e2174dce3a12b70a89bbcdc63"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gaf15a4b0e2174dce3a12b70a89bbcdc63">tbb::parallel_reduce</a> (const Range &range, Body &body, const static_partitioner &partitioner)</td></tr>
+<tr class="memdesc:gaf15a4b0e2174dce3a12b70a89bbcdc63"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and static_partitioner.  <a href="#gaf15a4b0e2174dce3a12b70a89bbcdc63">More...</a><br/></td></tr>
+<tr class="separator:gaf15a4b0e2174dce3a12b70a89bbcdc63"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6e83e121490df24fa5893b14e68f5e2a"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga6e83e121490df24fa5893b14e68f5e2a"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga6e83e121490df24fa5893b14e68f5e2a">tbb::parallel_reduce</a> (const Range &range, Body &body, affinity_partitioner &partitioner)</td></tr>
+<tr class="memdesc:ga6e83e121490df24fa5893b14e68f5e2a"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and affinity_partitioner.  <a href="#ga6e83e121490df24fa5893b14e68f5e2a">More...</a><br/></td></tr>
+<tr class="separator:ga6e83e121490df24fa5893b14e68f5e2a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac57281bea03450ccb2d098ee8c7ab697"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:gac57281bea03450ccb2d098ee8c7ab697"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gac57281bea03450ccb2d098ee8c7ab697">tbb::parallel_reduce</a> (const Range &range, Body &body, const simple_partitioner &partitioner, task_group_context &context)</td></tr>
+<tr class="memdesc:gac57281bea03450ccb2d098ee8c7ab697"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, simple partitioner and user-supplied context.  <a href="#gac57281bea03450ccb2d098ee8c7ab697">More...</a><br/></td></tr>
+<tr class="separator:gac57281bea03450ccb2d098ee8c7ab697"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5f3ebf50ab7f5e53fd936817c866f7be"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga5f3ebf50ab7f5e53fd936817c866f7be"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga5f3ebf50ab7f5e53fd936817c866f7be">tbb::parallel_reduce</a> (const Range &range, Body &body, const auto_partitioner &partitioner, task_group_context &context)</td></tr>
+<tr class="memdesc:ga5f3ebf50ab7f5e53fd936817c866f7be"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, auto_partitioner and user-supplied context.  <a href="#ga5f3ebf50ab7f5e53fd936817c866f7be">More...</a><br/></td></tr>
+<tr class="separator:ga5f3ebf50ab7f5e53fd936817c866f7be"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf049e6d185c38c2d9e153b0edd3a9015"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:gaf049e6d185c38c2d9e153b0edd3a9015"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gaf049e6d185c38c2d9e153b0edd3a9015">tbb::parallel_reduce</a> (const Range &range, Body &body, const static_partitioner &partitioner, task_group_context &context)</td></tr>
+<tr class="memdesc:gaf049e6d185c38c2d9e153b0edd3a9015"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, static_partitioner and user-supplied context.  <a href="#gaf049e6d185c38c2d9e153b0edd3a9015">More...</a><br/></td></tr>
+<tr class="separator:gaf049e6d185c38c2d9e153b0edd3a9015"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5df3f3a9618fd35931107819cb43fce6"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga5df3f3a9618fd35931107819cb43fce6"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga5df3f3a9618fd35931107819cb43fce6">tbb::parallel_reduce</a> (const Range &range, Body &body, affinity_partitioner &partitioner, task_group_context &context)</td></tr>
+<tr class="memdesc:ga5df3f3a9618fd35931107819cb43fce6"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, affinity_partitioner and user-supplied context.  <a href="#ga5df3f3a9618fd35931107819cb43fce6">More...</a><br/></td></tr>
+<tr class="separator:ga5df3f3a9618fd35931107819cb43fce6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1c9b66fa25cadee9ca3bff75a6609b05"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
+<tr class="memitem:ga1c9b66fa25cadee9ca3bff75a6609b05"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga1c9b66fa25cadee9ca3bff75a6609b05">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction)</td></tr>
+<tr class="memdesc:ga1c9b66fa25cadee9ca3bff75a6609b05"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and default partitioner.  <a href="#ga1c9b66fa25cadee9ca3bff75a6609b05">More...</a><br/></td></tr>
+<tr class="separator:ga1c9b66fa25cadee9ca3bff75a6609b05"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0b22fd1de0e8bbaf46587d3c63a1ed93"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
+<tr class="memitem:ga0b22fd1de0e8bbaf46587d3c63a1ed93"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga0b22fd1de0e8bbaf46587d3c63a1ed93">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const simple_partitioner &partitioner)</td></tr>
+<tr class="memdesc:ga0b22fd1de0e8bbaf46587d3c63a1ed93"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and simple_partitioner.  <a href="#ga0b22fd1de0e8bbaf46587d3c63a1ed93">More...</a><br/></td></tr>
+<tr class="separator:ga0b22fd1de0e8bbaf46587d3c63a1ed93"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga56e6b6e2eee521f532c00d855280be69"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
+<tr class="memitem:ga56e6b6e2eee521f532c00d855280be69"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga56e6b6e2eee521f532c00d855280be69">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const auto_partitioner &partitioner)</td></tr>
+<tr class="memdesc:ga56e6b6e2eee521f532c00d855280be69"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and auto_partitioner.  <a href="#ga56e6b6e2eee521f532c00d855280be69">More...</a><br/></td></tr>
+<tr class="separator:ga56e6b6e2eee521f532c00d855280be69"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac0d4eb5ab127b185a92720eff1136fa8"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
+<tr class="memitem:gac0d4eb5ab127b185a92720eff1136fa8"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gac0d4eb5ab127b185a92720eff1136fa8">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const static_partitioner &partitioner)</td></tr>
+<tr class="memdesc:gac0d4eb5ab127b185a92720eff1136fa8"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and static_partitioner.  <a href="#gac0d4eb5ab127b185a92720eff1136fa8">More...</a><br/></td></tr>
+<tr class="separator:gac0d4eb5ab127b185a92720eff1136fa8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac26c35d1983e7ac2ab003cc8e49dd7e6"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
+<tr class="memitem:gac26c35d1983e7ac2ab003cc8e49dd7e6"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gac26c35d1983e7ac2ab003cc8e49dd7e6">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, affinity_partitioner &partitioner)</td></tr>
+<tr class="memdesc:gac26c35d1983e7ac2ab003cc8e49dd7e6"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and affinity_partitioner.  <a href="#gac26c35d1983e7ac2ab003cc8e49dd7e6">More...</a><br/></td></tr>
+<tr class="separator:gac26c35d1983e7ac2ab003cc8e49dd7e6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga518ef2653004d60319bdfc1c6bce86b6"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
+<tr class="memitem:ga518ef2653004d60319bdfc1c6bce86b6"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga518ef2653004d60319bdfc1c6bce86b6">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const simple_partitioner &partitioner, task_group_context &context)</td></tr>
+<tr class="memdesc:ga518ef2653004d60319bdfc1c6bce86b6"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, simple partitioner and user-supplied context.  <a href="#ga518ef2653004d60319bdfc1c6bce86b6">More...</a><br/></td></tr>
+<tr class="separator:ga518ef2653004d60319bdfc1c6bce86b6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga24ba50caf5a7c32cbd38912508cb69a4"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
+<tr class="memitem:ga24ba50caf5a7c32cbd38912508cb69a4"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga24ba50caf5a7c32cbd38912508cb69a4">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const auto_partitioner &partitioner, task_group_context &context)</td></tr>
+<tr class="memdesc:ga24ba50caf5a7c32cbd38912508cb69a4"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, auto_partitioner and user-supplied context.  <a href="#ga24ba50caf5a7c32cbd38912508cb69a4">More...</a><br/></td></tr>
+<tr class="separator:ga24ba50caf5a7c32cbd38912508cb69a4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1507205a91a8fd26bd7d9bbcb74ad98b"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
+<tr class="memitem:ga1507205a91a8fd26bd7d9bbcb74ad98b"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga1507205a91a8fd26bd7d9bbcb74ad98b">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const static_partitioner &partitioner, task_group_context &context)</td></tr>
+<tr class="memdesc:ga1507205a91a8fd26bd7d9bbcb74ad98b"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, static_partitioner and user-supplied context.  <a href="#ga1507205a91a8fd26bd7d9bbcb74ad98b">More...</a><br/></td></tr>
+<tr class="separator:ga1507205a91a8fd26bd7d9bbcb74ad98b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga367a8e77c4dac3f8764785afdc6c9299"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
+<tr class="memitem:ga367a8e77c4dac3f8764785afdc6c9299"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga367a8e77c4dac3f8764785afdc6c9299">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, affinity_partitioner &partitioner, task_group_context &context)</td></tr>
+<tr class="memdesc:ga367a8e77c4dac3f8764785afdc6c9299"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, affinity_partitioner and user-supplied context.  <a href="#ga367a8e77c4dac3f8764785afdc6c9299">More...</a><br/></td></tr>
+<tr class="separator:ga367a8e77c4dac3f8764785afdc6c9299"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1fd7e3c43592dfe1ae3e3572bd80d4f6"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga1fd7e3c43592dfe1ae3e3572bd80d4f6"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga1fd7e3c43592dfe1ae3e3572bd80d4f6">tbb::parallel_deterministic_reduce</a> (const Range &range, Body &body)</td></tr>
+<tr class="memdesc:ga1fd7e3c43592dfe1ae3e3572bd80d4f6"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction and default partitioner.  <a href="#ga1fd7e3c43592dfe1ae3e3572bd80d4f6">More...</a><br/></td></tr>
+<tr class="separator:ga1fd7e3c43592dfe1ae3e3572bd80d4f6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga361201f81b4ec7b86f81b579d2db647a"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga361201f81b4ec7b86f81b579d2db647a"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga361201f81b4ec7b86f81b579d2db647a">tbb::parallel_deterministic_reduce</a> (const Range &range, Body &body, task_group_context &context)</td></tr>
+<tr class="memdesc:ga361201f81b4ec7b86f81b579d2db647a"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction, simple partitioner and user-supplied context.  <a href="#ga361201f81b4ec7b86f81b579d2db647a">More...</a><br/></td></tr>
+<tr class="separator:ga361201f81b4ec7b86f81b579d2db647a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7f69e6a632acb51ed26a43ebd331f349"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
+<tr class="memitem:ga7f69e6a632acb51ed26a43ebd331f349"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga7f69e6a632acb51ed26a43ebd331f349">tbb::parallel_deterministic_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction)</td></tr>
+<tr class="memdesc:ga7f69e6a632acb51ed26a43ebd331f349"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction and default partitioner.  <a href="#ga7f69e6a632acb51ed26a43ebd331f349">More...</a><br/></td></tr>
+<tr class="separator:ga7f69e6a632acb51ed26a43ebd331f349"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga69b4eea059a62cbbf409cbad02b70bfa"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
+<tr class="memitem:ga69b4eea059a62cbbf409cbad02b70bfa"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga69b4eea059a62cbbf409cbad02b70bfa">tbb::parallel_deterministic_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, task_group_context &context)</td></tr>
+<tr class="memdesc:ga69b4eea059a62cbbf409cbad02b70bfa"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction, simple partitioner and user-supplied context.  <a href="#ga69b4eea059a62cbbf409cbad02b70bfa">More...</a><br/></td></tr>
+<tr class="separator:ga69b4eea059a62cbbf409cbad02b70bfa"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="member-group"></a>
+parallel_scan</h2></td></tr>
+<tr><td class="ititle" colspan="2"><p><a class="anchor" id="amgrpea856f699c9d234ea9f5ed535b0b16bb"></a>See also requirements on <a class="el" href="a00001.html">Range</a> and <a class="el" href="a00005.html">parallel_scan Body</a>. </p>
+</td></tr>
+<tr class="memitem:gae7eaaf124471a6c603b28fc925e8fbbb"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:gae7eaaf124471a6c603b28fc925e8fbbb"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gae7eaaf124471a6c603b28fc925e8fbbb">tbb::parallel_scan</a> (const Range &range, Body &body)</td></tr>
+<tr class="memdesc:gae7eaaf124471a6c603b28fc925e8fbbb"><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with default partitioner.  <a href="#gae7eaaf124471a6c603b28fc925e8fbbb">More...</a><br/></td></tr>
+<tr class="separator:gae7eaaf124471a6c603b28fc925e8fbbb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7ddacf5e49f1bea9b67803f2d0f57531"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga7ddacf5e49f1bea9b67803f2d0f57531"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga7ddacf5e49f1bea9b67803f2d0f57531">tbb::parallel_scan</a> (const Range &range, Body &body, const simple_partitioner &partitioner)</td></tr>
+<tr class="memdesc:ga7ddacf5e49f1bea9b67803f2d0f57531"><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with simple_partitioner.  <a href="#ga7ddacf5e49f1bea9b67803f2d0f57531">More...</a><br/></td></tr>
+<tr class="separator:ga7ddacf5e49f1bea9b67803f2d0f57531"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3548041731b7fa14f30f155541ceebb9"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
+<tr class="memitem:ga3548041731b7fa14f30f155541ceebb9"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga3548041731b7fa14f30f155541ceebb9">tbb::parallel_scan</a> (const Range &range, Body &body, const auto_partitioner &partitioner)</td></tr>
+<tr class="memdesc:ga3548041731b7fa14f30f155541ceebb9"><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with auto_partitioner.  <a href="#ga3548041731b7fa14f30f155541ceebb9">More...</a><br/></td></tr>
+<tr class="separator:ga3548041731b7fa14f30f155541ceebb9"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="member-group"></a>
+parallel_sort</h2></td></tr>
+<tr><td class="ititle" colspan="2"><p><a class="anchor" id="amgrp507087c4dcfb051fe7d24227c3a34024"></a>See also requirements on <a class="el" href="a00006.html">iterators for parallel_sort</a>. </p>
+</td></tr>
+<tr class="memitem:gabdc90813499f91d3e32298cd6dc2fe45"><td class="memTemplParams" colspan="2">template<typename RandomAccessIterator , typename Compare > </td></tr>
+<tr class="memitem:gabdc90813499f91d3e32298cd6dc2fe45"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gabdc90813499f91d3e32298cd6dc2fe45">tbb::parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end, const Compare &comp)</td></tr>
+<tr class="memdesc:gabdc90813499f91d3e32298cd6dc2fe45"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in [begin,end) using the given comparator.  <a href="#gabdc90813499f91d3e32298cd6dc2fe45">More...</a><br/></td></tr>
+<tr class="separator:gabdc90813499f91d3e32298cd6dc2fe45"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga73b58ac9249f49587d0b081c152af551"><td class="memTemplParams" colspan="2">template<typename RandomAccessIterator > </td></tr>
+<tr class="memitem:ga73b58ac9249f49587d0b081c152af551"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga73b58ac9249f49587d0b081c152af551">tbb::parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end)</td></tr>
+<tr class="memdesc:ga73b58ac9249f49587d0b081c152af551"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in [begin,end) with a default comparator <code>std::less<RandomAccessIterator></code>  <a href="#ga73b58ac9249f49587d0b081c152af551">More...</a><br/></td></tr>
+<tr class="separator:ga73b58ac9249f49587d0b081c152af551"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga61ce8ba64868c5c15f9d98840193b9bf"><td class="memTemplParams" colspan="2">template<typename Range , typename Compare > </td></tr>
+<tr class="memitem:ga61ce8ba64868c5c15f9d98840193b9bf"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga61ce8ba64868c5c15f9d98840193b9bf">tbb::parallel_sort</a> (Range &rng, const Compare &comp)</td></tr>
+<tr class="memdesc:ga61ce8ba64868c5c15f9d98840193b9bf"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in rng using the given comparator.  <a href="#ga61ce8ba64868c5c15f9d98840193b9bf">More...</a><br/></td></tr>
+<tr class="separator:ga61ce8ba64868c5c15f9d98840193b9bf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga541b2fd91e88842a7b823161107779e9"><td class="memTemplParams" colspan="2">template<typename Range , typename Compare > </td></tr>
+<tr class="memitem:ga541b2fd91e88842a7b823161107779e9"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga541b2fd91e88842a7b823161107779e9">tbb::parallel_sort</a> (const Range &rng, const Compare &comp)</td></tr>
+<tr class="memdesc:ga541b2fd91e88842a7b823161107779e9"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in const rng using the given comparator.  <a href="#ga541b2fd91e88842a7b823161107779e9">More...</a><br/></td></tr>
+<tr class="separator:ga541b2fd91e88842a7b823161107779e9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf1fb3ae3aab1213cb9bcf56e30c164bb"><td class="memTemplParams" colspan="2">template<typename Range > </td></tr>
+<tr class="memitem:gaf1fb3ae3aab1213cb9bcf56e30c164bb"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#gaf1fb3ae3aab1213cb9bcf56e30c164bb">tbb::parallel_sort</a> (Range &rng)</td></tr>
+<tr class="memdesc:gaf1fb3ae3aab1213cb9bcf56e30c164bb"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in rng with a default comparator <code>std::less<RandomAccessIterator></code>  <a href="#gaf1fb3ae3aab1213cb9bcf56e30c164bb">More...</a><br/></td></tr>
+<tr class="separator:gaf1fb3ae3aab1213cb9bcf56e30c164bb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga60bbc3d7699f09618bd8b5114e4277cb"><td class="memTemplParams" colspan="2">template<typename Range > </td></tr>
+<tr class="memitem:ga60bbc3d7699f09618bd8b5114e4277cb"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga60bbc3d7699f09618bd8b5114e4277cb">tbb::parallel_sort</a> (const Range &rng)</td></tr>
+<tr class="memdesc:ga60bbc3d7699f09618bd8b5114e4277cb"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in const rng with a default comparator <code>std::less<RandomAccessIterator></code>  <a href="#ga60bbc3d7699f09618bd8b5114e4277cb">More...</a><br/></td></tr>
+<tr class="separator:ga60bbc3d7699f09618bd8b5114e4277cb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8f176cdc232a6e5907456656a24983a8"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga8f176cdc232a6e5907456656a24983a8"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#ga8f176cdc232a6e5907456656a24983a8">tbb::parallel_sort</a> (T *begin, T *end)</td></tr>
+<tr class="memdesc:ga8f176cdc232a6e5907456656a24983a8"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in the range <code></code>[begin,end) with a default comparator <code>std::less<T></code>  <a href="#ga8f176cdc232a6e5907456656a24983a8">More...</a><br/></td></tr>
+<tr class="separator:ga8f176cdc232a6e5907456656a24983a8"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga1fd7e3c43592dfe1ae3e3572bd80d4f6"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Body > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_deterministic_reduce </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">Body & </td>
+          <td class="paramname"><em>body</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration with deterministic reduction and default partitioner. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga361201f81b4ec7b86f81b579d2db647a"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Body > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_deterministic_reduce </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">Body & </td>
+          <td class="paramname"><em>body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">task_group_context & </td>
+          <td class="paramname"><em>context</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration with deterministic reduction, simple partitioner and user-supplied context. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga7f69e6a632acb51ed26a43ebd331f349"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Value , typename RealBody , typename Reduction > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">Value tbb::parallel_deterministic_reduce </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Value & </td>
+          <td class="paramname"><em>identity</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const RealBody & </td>
+          <td class="paramname"><em>real_body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Reduction & </td>
+          <td class="paramname"><em>reduction</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration with deterministic reduction and default partitioner. </p>
+<p>parallel_reduce overloads that work with anonymous function objects (see also <a class="el" href="a00004.html">requirements on parallel_reduce anonymous function objects</a>). </p>
+
+</div>
+</div>
+<a class="anchor" id="ga69b4eea059a62cbbf409cbad02b70bfa"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Value , typename RealBody , typename Reduction > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">Value tbb::parallel_deterministic_reduce </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Value & </td>
+          <td class="paramname"><em>identity</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const RealBody & </td>
+          <td class="paramname"><em>real_body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Reduction & </td>
+          <td class="paramname"><em>reduction</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">task_group_context & </td>
+          <td class="paramname"><em>context</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration with deterministic reduction, simple partitioner and user-supplied context. </p>
+
+</div>
+</div>
+<a class="anchor" id="gaa8444c29dc4d2e527a1036717d109aef"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Body > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_for </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Body & </td>
+          <td class="paramname"><em>body</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration over range with default partitioner. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga9722d2bc7e5edb4fae9f3b55268a1ecc"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Body > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_for </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Body & </td>
+          <td class="paramname"><em>body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const simple_partitioner & </td>
+          <td class="paramname"><em>partitioner</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration over range with simple partitioner. </p>
+
+</div>
+</div>
+<a class="anchor" id="gad6c4b06f96ae33cefe78235841791902"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Body > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_for </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Body & </td>
+          <td class="paramname"><em>body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const auto_partitioner & </td>
+          <td class="paramname"><em>partitioner</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration over range with auto_partitioner. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga14ae8670bd55620f906aa06e073bd225"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Body > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_for </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Body & </td>
+          <td class="paramname"><em>body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const static_partitioner & </td>
+          <td class="paramname"><em>partitioner</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration over range with static_partitioner. </p>
+
+</div>
+</div>
+<a class="anchor" id="gaf3d39e372d825bf54283b5ceafa90057"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Body > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_for </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Body & </td>
+          <td class="paramname"><em>body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">affinity_partitioner & </td>
+          <td class="paramname"><em>partitioner</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration over range with affinity_partitioner. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga93a621202db94665144de38c0b09bdad"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Body > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_for </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Body & </td>
+          <td class="paramname"><em>body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">task_group_context & </td>
+          <td class="paramname"><em>context</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration over range with default partitioner and user-supplied context. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga5b7fab9d6ffe7a9345e9349a5a007bd4"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Body > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_for </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Body & </td>
+          <td class="paramname"><em>body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const simple_partitioner & </td>
+          <td class="paramname"><em>partitioner</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">task_group_context & </td>
+          <td class="paramname"><em>context</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration over range with simple partitioner and user-supplied context. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga4c9935d8710a5cf786a92f3522ab2976"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Body > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_for </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Body & </td>
+          <td class="paramname"><em>body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const auto_partitioner & </td>
+          <td class="paramname"><em>partitioner</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">task_group_context & </td>
+          <td class="paramname"><em>context</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration over range with auto_partitioner and user-supplied context. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga4bb3d8cf616632476ca923eb056ee07d"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Body > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_for </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Body & </td>
+          <td class="paramname"><em>body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const static_partitioner & </td>
+          <td class="paramname"><em>partitioner</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">task_group_context & </td>
+          <td class="paramname"><em>context</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration over range with static_partitioner and user-supplied context. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga62b1a9ac304ba1eb4f87ab8cc18dd281"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Body > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_for </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Body & </td>
+          <td class="paramname"><em>body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">affinity_partitioner & </td>
+          <td class="paramname"><em>partitioner</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">task_group_context & </td>
+          <td class="paramname"><em>context</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration over range with affinity_partitioner and user-supplied context. </p>
+
+</div>
+</div>
+<a class="anchor" id="gac9225af45fd0468843b3fc32608c71de"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Iterator , typename Function > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_for_each </td>
+          <td>(</td>
+          <td class="paramtype">Iterator </td>
+          <td class="paramname"><em>first</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">Iterator </td>
+          <td class="paramname"><em>last</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Function & </td>
+          <td class="paramname"><em>f</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">task_group_context & </td>
+          <td class="paramname"><em>context</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Calls function f for all items from [first, last) interval using user-supplied context. </p>
+
+<p>Referenced by <a class="el" href="a00252.html#ga72131543fd218b67dbb048b768d534e4">tbb::parallel_for_each()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga72131543fd218b67dbb048b768d534e4"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Function > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_for_each </td>
+          <td>(</td>
+          <td class="paramtype">Range & </td>
+          <td class="paramname"><em>rng</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Function & </td>
+          <td class="paramname"><em>f</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">task_group_context & </td>
+          <td class="paramname"><em>context</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Calls function f for all items from rng using user-supplied context. </p>
+
+<p>References <a class="el" href="a00252.html#gac9225af45fd0468843b3fc32608c71de">tbb::parallel_for_each()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gad7d0702d16fbd7554584ab735eed39ba"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Function > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_for_each </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>rng</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Function & </td>
+          <td class="paramname"><em>f</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">task_group_context & </td>
+          <td class="paramname"><em>context</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Calls function f for all items from const rng user-supplied context. </p>
+
+<p>References <a class="el" href="a00252.html#gac9225af45fd0468843b3fc32608c71de">tbb::parallel_for_each()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3c6fe4bf1076c82132e666fb545451cd"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename F0 , typename F1 , typename... F> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_invoke </td>
+          <td>(</td>
+          <td class="paramtype">F0 && </td>
+          <td class="paramname"><em>f0</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">F1 && </td>
+          <td class="paramname"><em>f1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">F &&... </td>
+          <td class="paramname"><em>f</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Executes a list of tasks in parallel and waits for all tasks to complete. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga7b1ce9568e0a0efe1bd2d55677bc6687"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Body > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_reduce </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">Body & </td>
+          <td class="paramname"><em>body</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration with reduction and default partitioner. </p>
+
+</div>
+</div>
+<a class="anchor" id="gaebb92b593827f9c3f5e1f8ee2f7d5f82"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Body > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_reduce </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">Body & </td>
+          <td class="paramname"><em>body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const simple_partitioner & </td>
+          <td class="paramname"><em>partitioner</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration with reduction and simple_partitioner. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga3011e7266fb1e43d307060fe75be2c6e"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Body > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_reduce </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">Body & </td>
+          <td class="paramname"><em>body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const auto_partitioner & </td>
+          <td class="paramname"><em>partitioner</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration with reduction and auto_partitioner. </p>
+
+</div>
+</div>
+<a class="anchor" id="gaf15a4b0e2174dce3a12b70a89bbcdc63"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Body > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_reduce </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">Body & </td>
+          <td class="paramname"><em>body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const static_partitioner & </td>
+          <td class="paramname"><em>partitioner</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration with reduction and static_partitioner. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga6e83e121490df24fa5893b14e68f5e2a"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Body > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_reduce </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">Body & </td>
+          <td class="paramname"><em>body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">affinity_partitioner & </td>
+          <td class="paramname"><em>partitioner</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration with reduction and affinity_partitioner. </p>
+
+</div>
+</div>
+<a class="anchor" id="gac57281bea03450ccb2d098ee8c7ab697"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Body > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_reduce </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">Body & </td>
+          <td class="paramname"><em>body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const simple_partitioner & </td>
+          <td class="paramname"><em>partitioner</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">task_group_context & </td>
+          <td class="paramname"><em>context</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration with reduction, simple partitioner and user-supplied context. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga5f3ebf50ab7f5e53fd936817c866f7be"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Body > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_reduce </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">Body & </td>
+          <td class="paramname"><em>body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const auto_partitioner & </td>
+          <td class="paramname"><em>partitioner</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">task_group_context & </td>
+          <td class="paramname"><em>context</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration with reduction, auto_partitioner and user-supplied context. </p>
+
+</div>
+</div>
+<a class="anchor" id="gaf049e6d185c38c2d9e153b0edd3a9015"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Body > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_reduce </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">Body & </td>
+          <td class="paramname"><em>body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const static_partitioner & </td>
+          <td class="paramname"><em>partitioner</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">task_group_context & </td>
+          <td class="paramname"><em>context</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration with reduction, static_partitioner and user-supplied context. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga5df3f3a9618fd35931107819cb43fce6"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Body > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_reduce </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">Body & </td>
+          <td class="paramname"><em>body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">affinity_partitioner & </td>
+          <td class="paramname"><em>partitioner</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">task_group_context & </td>
+          <td class="paramname"><em>context</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration with reduction, affinity_partitioner and user-supplied context. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga1c9b66fa25cadee9ca3bff75a6609b05"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Value , typename RealBody , typename Reduction > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">Value tbb::parallel_reduce </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Value & </td>
+          <td class="paramname"><em>identity</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const RealBody & </td>
+          <td class="paramname"><em>real_body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Reduction & </td>
+          <td class="paramname"><em>reduction</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration with reduction and default partitioner. </p>
+<p>parallel_reduce overloads that work with anonymous function objects (see also <a class="el" href="a00004.html">requirements on parallel_reduce anonymous function objects</a>). </p>
+
+</div>
+</div>
+<a class="anchor" id="ga0b22fd1de0e8bbaf46587d3c63a1ed93"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Value , typename RealBody , typename Reduction > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">Value tbb::parallel_reduce </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Value & </td>
+          <td class="paramname"><em>identity</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const RealBody & </td>
+          <td class="paramname"><em>real_body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Reduction & </td>
+          <td class="paramname"><em>reduction</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const simple_partitioner & </td>
+          <td class="paramname"><em>partitioner</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration with reduction and simple_partitioner. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga56e6b6e2eee521f532c00d855280be69"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Value , typename RealBody , typename Reduction > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">Value tbb::parallel_reduce </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Value & </td>
+          <td class="paramname"><em>identity</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const RealBody & </td>
+          <td class="paramname"><em>real_body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Reduction & </td>
+          <td class="paramname"><em>reduction</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const auto_partitioner & </td>
+          <td class="paramname"><em>partitioner</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration with reduction and auto_partitioner. </p>
+
+</div>
+</div>
+<a class="anchor" id="gac0d4eb5ab127b185a92720eff1136fa8"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Value , typename RealBody , typename Reduction > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">Value tbb::parallel_reduce </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Value & </td>
+          <td class="paramname"><em>identity</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const RealBody & </td>
+          <td class="paramname"><em>real_body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Reduction & </td>
+          <td class="paramname"><em>reduction</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const static_partitioner & </td>
+          <td class="paramname"><em>partitioner</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration with reduction and static_partitioner. </p>
+
+</div>
+</div>
+<a class="anchor" id="gac26c35d1983e7ac2ab003cc8e49dd7e6"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Value , typename RealBody , typename Reduction > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">Value tbb::parallel_reduce </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Value & </td>
+          <td class="paramname"><em>identity</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const RealBody & </td>
+          <td class="paramname"><em>real_body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Reduction & </td>
+          <td class="paramname"><em>reduction</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">affinity_partitioner & </td>
+          <td class="paramname"><em>partitioner</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration with reduction and affinity_partitioner. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga518ef2653004d60319bdfc1c6bce86b6"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Value , typename RealBody , typename Reduction > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">Value tbb::parallel_reduce </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Value & </td>
+          <td class="paramname"><em>identity</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const RealBody & </td>
+          <td class="paramname"><em>real_body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Reduction & </td>
+          <td class="paramname"><em>reduction</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const simple_partitioner & </td>
+          <td class="paramname"><em>partitioner</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">task_group_context & </td>
+          <td class="paramname"><em>context</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration with reduction, simple partitioner and user-supplied context. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga24ba50caf5a7c32cbd38912508cb69a4"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Value , typename RealBody , typename Reduction > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">Value tbb::parallel_reduce </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Value & </td>
+          <td class="paramname"><em>identity</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const RealBody & </td>
+          <td class="paramname"><em>real_body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Reduction & </td>
+          <td class="paramname"><em>reduction</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const auto_partitioner & </td>
+          <td class="paramname"><em>partitioner</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">task_group_context & </td>
+          <td class="paramname"><em>context</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration with reduction, auto_partitioner and user-supplied context. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga1507205a91a8fd26bd7d9bbcb74ad98b"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Value , typename RealBody , typename Reduction > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">Value tbb::parallel_reduce </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Value & </td>
+          <td class="paramname"><em>identity</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const RealBody & </td>
+          <td class="paramname"><em>real_body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Reduction & </td>
+          <td class="paramname"><em>reduction</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const static_partitioner & </td>
+          <td class="paramname"><em>partitioner</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">task_group_context & </td>
+          <td class="paramname"><em>context</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration with reduction, static_partitioner and user-supplied context. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga367a8e77c4dac3f8764785afdc6c9299"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Value , typename RealBody , typename Reduction > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">Value tbb::parallel_reduce </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Value & </td>
+          <td class="paramname"><em>identity</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const RealBody & </td>
+          <td class="paramname"><em>real_body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Reduction & </td>
+          <td class="paramname"><em>reduction</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">affinity_partitioner & </td>
+          <td class="paramname"><em>partitioner</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">task_group_context & </td>
+          <td class="paramname"><em>context</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel iteration with reduction, affinity_partitioner and user-supplied context. </p>
+
+</div>
+</div>
+<a class="anchor" id="gae7eaaf124471a6c603b28fc925e8fbbb"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Body > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_scan </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">Body & </td>
+          <td class="paramname"><em>body</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel prefix with default partitioner. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga7ddacf5e49f1bea9b67803f2d0f57531"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Body > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_scan </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">Body & </td>
+          <td class="paramname"><em>body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const simple_partitioner & </td>
+          <td class="paramname"><em>partitioner</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel prefix with simple_partitioner. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga3548041731b7fa14f30f155541ceebb9"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Body > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_scan </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>range</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">Body & </td>
+          <td class="paramname"><em>body</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const auto_partitioner & </td>
+          <td class="paramname"><em>partitioner</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parallel prefix with auto_partitioner. </p>
+
+</div>
+</div>
+<a class="anchor" id="gabdc90813499f91d3e32298cd6dc2fe45"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename RandomAccessIterator , typename Compare > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_sort </td>
+          <td>(</td>
+          <td class="paramtype">RandomAccessIterator </td>
+          <td class="paramname"><em>begin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">RandomAccessIterator </td>
+          <td class="paramname"><em>end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Compare & </td>
+          <td class="paramname"><em>comp</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sorts the data in [begin,end) using the given comparator. </p>
+<p>The compare function object is used for all comparisons between elements during sorting. The compare object must define a bool operator() function. </p>
+
+<p>Referenced by <a class="el" href="a00252.html#ga73b58ac9249f49587d0b081c152af551">tbb::parallel_sort()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga73b58ac9249f49587d0b081c152af551"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename RandomAccessIterator > </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_sort </td>
+          <td>(</td>
+          <td class="paramtype">RandomAccessIterator </td>
+          <td class="paramname"><em>begin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">RandomAccessIterator </td>
+          <td class="paramname"><em>end</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Sorts the data in [begin,end) with a default comparator <code>std::less<RandomAccessIterator></code> </p>
+
+<p>References <a class="el" href="a00252.html#gabdc90813499f91d3e32298cd6dc2fe45">tbb::parallel_sort()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga61ce8ba64868c5c15f9d98840193b9bf"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Compare > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_sort </td>
+          <td>(</td>
+          <td class="paramtype">Range & </td>
+          <td class="paramname"><em>rng</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Compare & </td>
+          <td class="paramname"><em>comp</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sorts the data in rng using the given comparator. </p>
+
+<p>References <a class="el" href="a00252.html#gabdc90813499f91d3e32298cd6dc2fe45">tbb::parallel_sort()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga541b2fd91e88842a7b823161107779e9"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range , typename Compare > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_sort </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>rng</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Compare & </td>
+          <td class="paramname"><em>comp</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sorts the data in const rng using the given comparator. </p>
+
+<p>References <a class="el" href="a00252.html#gabdc90813499f91d3e32298cd6dc2fe45">tbb::parallel_sort()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaf1fb3ae3aab1213cb9bcf56e30c164bb"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_sort </td>
+          <td>(</td>
+          <td class="paramtype">Range & </td>
+          <td class="paramname"><em>rng</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sorts the data in rng with a default comparator <code>std::less<RandomAccessIterator></code> </p>
+
+<p>References <a class="el" href="a00252.html#gabdc90813499f91d3e32298cd6dc2fe45">tbb::parallel_sort()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga60bbc3d7699f09618bd8b5114e4277cb"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Range > </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_sort </td>
+          <td>(</td>
+          <td class="paramtype">const Range & </td>
+          <td class="paramname"><em>rng</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sorts the data in const rng with a default comparator <code>std::less<RandomAccessIterator></code> </p>
+
+<p>References <a class="el" href="a00252.html#gabdc90813499f91d3e32298cd6dc2fe45">tbb::parallel_sort()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga8f176cdc232a6e5907456656a24983a8"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T > </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_sort </td>
+          <td>(</td>
+          <td class="paramtype">T * </td>
+          <td class="paramname"><em>begin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">T * </td>
+          <td class="paramname"><em>end</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Sorts the data in the range <code></code>[begin,end) with a default comparator <code>std::less<T></code> </p>
+
+<p>References <a class="el" href="a00252.html#gabdc90813499f91d3e32298cd6dc2fe45">tbb::parallel_sort()</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<hr>
+<p></p>
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00253.html b/doc/html/a00253.html
new file mode 100644
index 0000000..b75eca5
--- /dev/null
+++ b/doc/html/a00253.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.4"/>
+<title>Containers</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.4 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a>  </div>
+  <div class="headertitle">
+<div class="title">Containers</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00033.html">tbb::combinable< T ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Thread-local storage with optional reduction.  <a href="a00033.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Unordered map from Key to T.  <a href="a00036.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A high-performance thread-safe non-blocking concurrent queue.  <a href="a00039.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A high-performance thread-safe blocking concurrent bounded queue.  <a href="a00035.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Concurrent vector container.  <a href="a00046.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The <a class="el" href="a00058.html" title="The enumerable_thread_specific container. ">enumerable_thread_specific</a> container.  <a href="a00058.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+</div><!-- contents -->
+<hr>
+<p></p>
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00254.html b/doc/html/a00254.html
new file mode 100644
index 0000000..7160895
--- /dev/null
+++ b/doc/html/a00254.html
@@ -0,0 +1,382 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.4"/>
+<title>Memory Allocation</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.4 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Memory Allocation</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00014.html">tbb::aligned_space< T, N ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Block of space aligned sufficiently to construct an array T with N elements.  <a href="a00014.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00027.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00028.html">tbb::cache_aligned_allocator< void ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00028.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00077.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00078.html">tbb::interface6::memory_pool_allocator< void, P ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00078.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00126.html">tbb::scalable_allocator< T ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00126.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html">tbb::scalable_allocator< void ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00127.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html">tbb::tbb_allocator< T ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00153.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00154.html">tbb::tbb_allocator< void ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00154.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00169.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html">tbb::zero_allocator< void, Allocator ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00170.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga2a5bdc71439a70b20f2eadf6e1a489e1"><td class="memItemLeft" align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#ga2a5bdc71439a70b20f2eadf6e1a489e1">scalable_malloc</a> (size_t size)</td></tr>
+<tr class="separator:ga2a5bdc71439a70b20f2eadf6e1a489e1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2ad3952b8c4dd7d293e02ae18fc37b84"><td class="memItemLeft" align="right" valign="top">void __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#ga2ad3952b8c4dd7d293e02ae18fc37b84">scalable_free</a> (void *ptr)</td></tr>
+<tr class="separator:ga2ad3952b8c4dd7d293e02ae18fc37b84"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga40d6e0bc19cdfa3005b2b935c62077a1"><td class="memItemLeft" align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#ga40d6e0bc19cdfa3005b2b935c62077a1">scalable_realloc</a> (void *ptr, size_t size)</td></tr>
+<tr class="separator:ga40d6e0bc19cdfa3005b2b935c62077a1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3b4ff39555cd9e929fce2958325cd8ea"><td class="memItemLeft" align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#ga3b4ff39555cd9e929fce2958325cd8ea">scalable_calloc</a> (size_t nobj, size_t size)</td></tr>
+<tr class="separator:ga3b4ff39555cd9e929fce2958325cd8ea"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf117b4994f719d539804da8dd115e28c"><td class="memItemLeft" align="right" valign="top">int __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#gaf117b4994f719d539804da8dd115e28c">scalable_posix_memalign</a> (void **memptr, size_t alignment, size_t size)</td></tr>
+<tr class="separator:gaf117b4994f719d539804da8dd115e28c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga903307de17bc1611515f8e6ae782a3d6"><td class="memItemLeft" align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#ga903307de17bc1611515f8e6ae782a3d6">scalable_aligned_malloc</a> (size_t size, size_t alignment)</td></tr>
+<tr class="separator:ga903307de17bc1611515f8e6ae782a3d6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa07391c54330b2e4dd1743ae9c9c4f2d"><td class="memItemLeft" align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#gaa07391c54330b2e4dd1743ae9c9c4f2d">scalable_aligned_realloc</a> (void *ptr, size_t size, size_t alignment)</td></tr>
+<tr class="separator:gaa07391c54330b2e4dd1743ae9c9c4f2d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad9aa7595581a7bc5be193d7e034c8f61"><td class="memItemLeft" align="right" valign="top">void __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#gad9aa7595581a7bc5be193d7e034c8f61">scalable_aligned_free</a> (void *ptr)</td></tr>
+<tr class="separator:gad9aa7595581a7bc5be193d7e034c8f61"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2b718206e50acb6392b86e4877d98213"><td class="memItemLeft" align="right" valign="top">size_t __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#ga2b718206e50acb6392b86e4877d98213">scalable_msize</a> (void *ptr)</td></tr>
+<tr class="separator:ga2b718206e50acb6392b86e4877d98213"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7f5029970f72ebbffee896c46a23958e"><td class="memItemLeft" align="right" valign="top">int __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#ga7f5029970f72ebbffee896c46a23958e">scalable_allocation_mode</a> (int param, intptr_t value)</td></tr>
+<tr class="separator:ga7f5029970f72ebbffee896c46a23958e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabe5acd876b4d89bf89787c4e779c2518"><td class="memItemLeft" align="right" valign="top">int __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#gabe5acd876b4d89bf89787c4e779c2518">scalable_allocation_command</a> (int cmd, void *param)</td></tr>
+<tr class="separator:gabe5acd876b4d89bf89787c4e779c2518"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gad9aa7595581a7bc5be193d7e034c8f61"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_FUNC scalable_aligned_free </td>
+          <td>(</td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"><em>ptr</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The "_aligned_free" analogue. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga903307de17bc1611515f8e6ae782a3d6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* __TBB_EXPORTED_FUNC scalable_aligned_malloc </td>
+          <td>(</td>
+          <td class="paramtype">size_t </td>
+          <td class="paramname"><em>size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t </td>
+          <td class="paramname"><em>alignment</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The "_aligned_malloc" analogue. </p>
+
+</div>
+</div>
+<a class="anchor" id="gaa07391c54330b2e4dd1743ae9c9c4f2d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* __TBB_EXPORTED_FUNC scalable_aligned_realloc </td>
+          <td>(</td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"><em>ptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t </td>
+          <td class="paramname"><em>size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t </td>
+          <td class="paramname"><em>alignment</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The "_aligned_realloc" analogue. </p>
+
+</div>
+</div>
+<a class="anchor" id="gabe5acd876b4d89bf89787c4e779c2518"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int __TBB_EXPORTED_FUNC scalable_allocation_command </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>cmd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"><em>param</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Call TBB allocator-specific commands. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga7f5029970f72ebbffee896c46a23958e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int __TBB_EXPORTED_FUNC scalable_allocation_mode </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>param</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">intptr_t </td>
+          <td class="paramname"><em>value</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Set TBB allocator-specific allocation modes. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga3b4ff39555cd9e929fce2958325cd8ea"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* __TBB_EXPORTED_FUNC scalable_calloc </td>
+          <td>(</td>
+          <td class="paramtype">size_t </td>
+          <td class="paramname"><em>nobj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t </td>
+          <td class="paramname"><em>size</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The "calloc" analogue complementing scalable_malloc. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga2ad3952b8c4dd7d293e02ae18fc37b84"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_FUNC scalable_free </td>
+          <td>(</td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"><em>ptr</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The "free" analogue to discard a previously allocated piece of memory. </p>
+
+<p>Referenced by <a class="el" href="a00126.html#a0632b19f25e5d5f86f18b3101925f488">tbb::scalable_allocator< T >::deallocate()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga2a5bdc71439a70b20f2eadf6e1a489e1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* __TBB_EXPORTED_FUNC scalable_malloc </td>
+          <td>(</td>
+          <td class="paramtype">size_t </td>
+          <td class="paramname"><em>size</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The "malloc" analogue to allocate block of memory of size bytes. </p>
+
+<p>Referenced by <a class="el" href="a00126.html#acf24945c12dc0586dfb1f8638daf7838">tbb::scalable_allocator< T >::allocate()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga2b718206e50acb6392b86e4877d98213"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">size_t __TBB_EXPORTED_FUNC scalable_msize </td>
+          <td>(</td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"><em>ptr</em>)</td><td></td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The analogue of <em>msize/malloc_size/malloc_usable_size. Returns the usable size of a memory block previously allocated by scalable</em>*, or 0 (zero) if ptr does not point to such a block. </p>
+
+</div>
+</div>
+<a class="anchor" id="gaf117b4994f719d539804da8dd115e28c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int __TBB_EXPORTED_FUNC scalable_posix_memalign </td>
+          <td>(</td>
+          <td class="paramtype">void ** </td>
+          <td class="paramname"><em>memptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t </td>
+          <td class="paramname"><em>alignment</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t </td>
+          <td class="paramname"><em>size</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The "posix_memalign" analogue. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga40d6e0bc19cdfa3005b2b935c62077a1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* __TBB_EXPORTED_FUNC scalable_realloc </td>
+          <td>(</td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"><em>ptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t </td>
+          <td class="paramname"><em>size</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The "realloc" analogue complementing scalable_malloc. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<hr>
+<p></p>
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00255.html b/doc/html/a00255.html
index 05cb2a4..12ae999 100644
--- a/doc/html/a00255.html
+++ b/doc/html/a00255.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>Algorithms</title>
+<title>Synchronization</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -27,1987 +27,96 @@
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a>  </div>
+<a href="#nested-classes">Classes</a> |
+<a href="#typedef-members">Typedefs</a>  </div>
   <div class="headertitle">
-<div class="title">Algorithms</div>  </div>
+<div class="title">Synchronization</div>  </div>
 </div><!--header-->
 <div class="contents">
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
 Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html">tbb::blocked_range< Value ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A range over which to iterate.  <a href="a00024.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00015.html">tbb::atomic< T ></a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Primary template for atomic.  <a href="a00015.html#details">More...</a><br/></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00025.html">tbb::blocked_range2d< RowValue, ColValue ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A 2-dimensional range that models the Range concept.  <a href="a00025.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html">tbb::mutex</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Wrapper around the platform's native lock.  <a href="a00082.html#details">More...</a><br/></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A 3-dimensional range that models the Range concept.  <a href="a00026.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00084.html">tbb::null_mutex</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A mutex which does nothing.  <a href="a00084.html#details">More...</a><br/></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00108.html">tbb::pre_scan_tag</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Used to indicate that the initial scan is being performed.  <a href="a00108.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00085.html">tbb::null_rw_mutex</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A rw mutex which does nothing.  <a href="a00085.html#details">More...</a><br/></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00064.html">tbb::final_scan_tag</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Used to indicate that the final scan is being performed.  <a href="a00064.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00106.html">tbb::queuing_mutex</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Queuing mutex with local-only spinning.  <a href="a00106.html#details">More...</a><br/></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00106.html">tbb::parallel_while< Body ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a stream, with optional addition of more work.  <a href="a00106.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00107.html">tbb::queuing_rw_mutex</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Queuing reader-writer mutex with local-only spinning.  <a href="a00107.html#details">More...</a><br/></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00062.html">tbb::filter</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline.  <a href="a00062.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00108.html">tbb::interface5::reader_writer_lock</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Writer-preference reader-writer lock with local-only spinning on readers.  <a href="a00108.html#details">More...</a><br/></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html">tbb::thread_bound_filter</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline served by a user thread.  <a href="a00165.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00121.html">tbb::recursive_mutex</a></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00107.html">tbb::pipeline</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A processing pipeline that applies filters to items.  <a href="a00107.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00140.html">tbb::spin_mutex</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A lock that occupies a single byte.  <a href="a00140.html#details">More...</a><br/></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Fast, unfair, spinning reader-writer lock with backoff and writer-preference.  <a href="a00141.html#details">More...</a><br/></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="member-group"></a>
-parallel_do</h2></td></tr>
-<tr><td class="ititle" colspan="2"><p><a class="anchor" id="amgrp751e5e5b1749802e9339f8ae6e071bc7"></a>See also requirements on <a class="el" href="a00002.html">parallel_do Body</a>. </p>
-</td></tr>
-<tr class="memitem:ga533f6732498ade8634a9470cbf89192d"><td class="memTemplParams" colspan="2">template<typename Iterator , typename Body > </td></tr>
-<tr class="memitem:ga533f6732498ade8634a9470cbf89192d"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga533f6732498ade8634a9470cbf89192d">tbb::parallel_do</a> (Iterator first, Iterator last, const Body &body)</td></tr>
-<tr class="memdesc:ga533f6732498ade8634a9470cbf89192d"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a range, with optional addition of more work.  <a href="#ga533f6732498ade8634a9470cbf89192d">More...</a><br/></td></tr>
-<tr class="separator:ga533f6732498ade8634a9470cbf89192d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga7db29bc10d81eddc85854256ffc723c0"><td class="memTemplParams" colspan="2">template<typename Iterator , typename Body > </td></tr>
-<tr class="memitem:ga7db29bc10d81eddc85854256ffc723c0"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga7db29bc10d81eddc85854256ffc723c0">tbb::parallel_do</a> (Iterator first, Iterator last, const Body &body, task_group_context &context)</td></tr>
-<tr class="memdesc:ga7db29bc10d81eddc85854256ffc723c0"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a range, with optional addition of more work and user-supplied context.  <a href="#ga7db29bc10d81eddc85854256ffc723c0">More...</a><br/></td></tr>
-<tr class="separator:ga7db29bc10d81eddc85854256ffc723c0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga135f72b966cd78a14f6aa1ddf0480701"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga135f72b966cd78a14f6aa1ddf0480701"></a>
-template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga135f72b966cd78a14f6aa1ddf0480701"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_do</b> (Range &rng, const Body &body)</td></tr>
-<tr class="separator:ga135f72b966cd78a14f6aa1ddf0480701"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gaaaf7a7c53d20fef24acaa2fe5cc36b45"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaaaf7a7c53d20fef24acaa2fe5cc36b45"></a>
-template<typename Range , typename Body > </td></tr>
-<tr class="memitem:gaaaf7a7c53d20fef24acaa2fe5cc36b45"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_do</b> (const Range &rng, const Body &body)</td></tr>
-<tr class="separator:gaaaf7a7c53d20fef24acaa2fe5cc36b45"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga137e8ff95a0c69e747f4f4f1383a2677"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga137e8ff95a0c69e747f4f4f1383a2677"></a>
-template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga137e8ff95a0c69e747f4f4f1383a2677"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_do</b> (Range &rng, const Body &body, task_group_context &context)</td></tr>
-<tr class="separator:ga137e8ff95a0c69e747f4f4f1383a2677"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga40258ae16882a49d5d579407c88b3281"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga40258ae16882a49d5d579407c88b3281"></a>
-template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga40258ae16882a49d5d579407c88b3281"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_do</b> (const Range &rng, const Body &body, task_group_context &context)</td></tr>
-<tr class="separator:ga40258ae16882a49d5d579407c88b3281"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="member-group"></a>
-parallel_for</h2></td></tr>
-<tr><td class="ititle" colspan="2"><p><a class="anchor" id="amgrp020f371880777e82219a69f8a512e874"></a>See also requirements on <a class="el" href="a00001.html">Range</a> and <a class="el" href="a00003.html">parallel_for Body</a>. </p>
-</td></tr>
-<tr class="memitem:gaa8444c29dc4d2e527a1036717d109aef"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:gaa8444c29dc4d2e527a1036717d109aef"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#gaa8444c29dc4d2e527a1036717d109aef">tbb::parallel_for</a> (const Range &range, const Body &body)</td></tr>
-<tr class="memdesc:gaa8444c29dc4d2e527a1036717d109aef"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with default partitioner.  <a href="#gaa8444c29dc4d2e527a1036717d109aef">More...</a><br/></td></tr>
-<tr class="separator:gaa8444c29dc4d2e527a1036717d109aef"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga9722d2bc7e5edb4fae9f3b55268a1ecc"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga9722d2bc7e5edb4fae9f3b55268a1ecc"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga9722d2bc7e5edb4fae9f3b55268a1ecc">tbb::parallel_for</a> (const Range &range, const Body &body, const simple_partitioner &partitioner)</td></tr>
-<tr class="memdesc:ga9722d2bc7e5edb4fae9f3b55268a1ecc"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with simple partitioner.  <a href="#ga9722d2bc7e5edb4fae9f3b55268a1ecc">More...</a><br/></td></tr>
-<tr class="separator:ga9722d2bc7e5edb4fae9f3b55268a1ecc"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gad6c4b06f96ae33cefe78235841791902"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:gad6c4b06f96ae33cefe78235841791902"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#gad6c4b06f96ae33cefe78235841791902">tbb::parallel_for</a> (const Range &range, const Body &body, const auto_partitioner &partitioner)</td></tr>
-<tr class="memdesc:gad6c4b06f96ae33cefe78235841791902"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with auto_partitioner.  <a href="#gad6c4b06f96ae33cefe78235841791902">More...</a><br/></td></tr>
-<tr class="separator:gad6c4b06f96ae33cefe78235841791902"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gaf3d39e372d825bf54283b5ceafa90057"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:gaf3d39e372d825bf54283b5ceafa90057"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#gaf3d39e372d825bf54283b5ceafa90057">tbb::parallel_for</a> (const Range &range, const Body &body, affinity_partitioner &partitioner)</td></tr>
-<tr class="memdesc:gaf3d39e372d825bf54283b5ceafa90057"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with affinity_partitioner.  <a href="#gaf3d39e372d825bf54283b5ceafa90057">More...</a><br/></td></tr>
-<tr class="separator:gaf3d39e372d825bf54283b5ceafa90057"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga93a621202db94665144de38c0b09bdad"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga93a621202db94665144de38c0b09bdad"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga93a621202db94665144de38c0b09bdad">tbb::parallel_for</a> (const Range &range, const Body &body, task_group_context &context)</td></tr>
-<tr class="memdesc:ga93a621202db94665144de38c0b09bdad"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with default partitioner and user-supplied context.  <a href="#ga93a621202db94665144de38c0b09bdad">More...</a><br/></td></tr>
-<tr class="separator:ga93a621202db94665144de38c0b09bdad"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga5b7fab9d6ffe7a9345e9349a5a007bd4"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga5b7fab9d6ffe7a9345e9349a5a007bd4"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga5b7fab9d6ffe7a9345e9349a5a007bd4">tbb::parallel_for</a> (const Range &range, const Body &body, const simple_partitioner &partitioner, task_group_context &context)</td></tr>
-<tr class="memdesc:ga5b7fab9d6ffe7a9345e9349a5a007bd4"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with simple partitioner and user-supplied context.  <a href="#ga5b7fab9d6ffe7a9345e9349a5a007bd4">More...</a><br/></td></tr>
-<tr class="separator:ga5b7fab9d6ffe7a9345e9349a5a007bd4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga4c9935d8710a5cf786a92f3522ab2976"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga4c9935d8710a5cf786a92f3522ab2976"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga4c9935d8710a5cf786a92f3522ab2976">tbb::parallel_for</a> (const Range &range, const Body &body, const auto_partitioner &partitioner, task_group_context &context)</td></tr>
-<tr class="memdesc:ga4c9935d8710a5cf786a92f3522ab2976"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with auto_partitioner and user-supplied context.  <a href="#ga4c9935d8710a5cf786a92f3522ab2976">More...</a><br/></td></tr>
-<tr class="separator:ga4c9935d8710a5cf786a92f3522ab2976"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga62b1a9ac304ba1eb4f87ab8cc18dd281"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga62b1a9ac304ba1eb4f87ab8cc18dd281"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga62b1a9ac304ba1eb4f87ab8cc18dd281">tbb::parallel_for</a> (const Range &range, const Body &body, affinity_partitioner &partitioner, task_group_context &context)</td></tr>
-<tr class="memdesc:ga62b1a9ac304ba1eb4f87ab8cc18dd281"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with affinity_partitioner and user-supplied context.  <a href="#ga62b1a9ac304ba1eb4f87ab8cc18dd281">More...</a><br/></td></tr>
-<tr class="separator:ga62b1a9ac304ba1eb4f87ab8cc18dd281"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="member-group"></a>
-parallel_for_each</h2></td></tr>
-<tr class="memitem:ga96bf42caaec779e413e5a2396c1e301c"><td class="memTemplParams" colspan="2">template<typename InputIterator , typename Function > </td></tr>
-<tr class="memitem:ga96bf42caaec779e413e5a2396c1e301c"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga96bf42caaec779e413e5a2396c1e301c">tbb::parallel_for_each</a> (InputIterator first, InputIterator last, const Function &f, task_group_context &context)</td></tr>
-<tr class="memdesc:ga96bf42caaec779e413e5a2396c1e301c"><td class="mdescLeft"> </td><td class="mdescRight">Calls function f for all items from [first, last) interval using user-supplied context.  <a href="#ga96bf42caaec779e413e5a2396c1e301c">More...</a><br/></td></tr>
-<tr class="separator:ga96bf42caaec779e413e5a2396c1e301c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga72131543fd218b67dbb048b768d534e4"><td class="memTemplParams" colspan="2">template<typename Range , typename Function > </td></tr>
-<tr class="memitem:ga72131543fd218b67dbb048b768d534e4"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga72131543fd218b67dbb048b768d534e4">tbb::parallel_for_each</a> (Range &rng, const Function &f, task_group_context &context)</td></tr>
-<tr class="memdesc:ga72131543fd218b67dbb048b768d534e4"><td class="mdescLeft"> </td><td class="mdescRight">Calls function f for all items from rng using user-supplied context.  <a href="#ga72131543fd218b67dbb048b768d534e4">More...</a><br/></td></tr>
-<tr class="separator:ga72131543fd218b67dbb048b768d534e4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gad7d0702d16fbd7554584ab735eed39ba"><td class="memTemplParams" colspan="2">template<typename Range , typename Function > </td></tr>
-<tr class="memitem:gad7d0702d16fbd7554584ab735eed39ba"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#gad7d0702d16fbd7554584ab735eed39ba">tbb::parallel_for_each</a> (const Range &rng, const Function &f, task_group_context &context)</td></tr>
-<tr class="memdesc:gad7d0702d16fbd7554584ab735eed39ba"><td class="mdescLeft"> </td><td class="mdescRight">Calls function f for all items from const rng user-supplied context.  <a href="#gad7d0702d16fbd7554584ab735eed39ba">More...</a><br/></td></tr>
-<tr class="separator:gad7d0702d16fbd7554584ab735eed39ba"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gaef59e9baf9141a19c99a291e4532bd98"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaef59e9baf9141a19c99a291e4532bd98"></a>
-template<typename InputIterator , typename Function > </td></tr>
-<tr class="memitem:gaef59e9baf9141a19c99a291e4532bd98"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#gaef59e9baf9141a19c99a291e4532bd98">tbb::parallel_for_each</a> (InputIterator first, InputIterator last, const Function &f)</td></tr>
-<tr class="memdesc:gaef59e9baf9141a19c99a291e4532bd98"><td class="mdescLeft"> </td><td class="mdescRight">Uses default context. <br/></td></tr>
-<tr class="separator:gaef59e9baf9141a19c99a291e4532bd98"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga5868cd01f2126b139ab5809f64632db1"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga5868cd01f2126b139ab5809f64632db1"></a>
-template<typename Range , typename Function > </td></tr>
-<tr class="memitem:ga5868cd01f2126b139ab5809f64632db1"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga5868cd01f2126b139ab5809f64632db1">tbb::parallel_for_each</a> (Range &rng, const Function &f)</td></tr>
-<tr class="memdesc:ga5868cd01f2126b139ab5809f64632db1"><td class="mdescLeft"> </td><td class="mdescRight">Uses default context. <br/></td></tr>
-<tr class="separator:ga5868cd01f2126b139ab5809f64632db1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga33463c8b0d0104cf9d9e0f9cb3c0b26b"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga33463c8b0d0104cf9d9e0f9cb3c0b26b"></a>
-template<typename Range , typename Function > </td></tr>
-<tr class="memitem:ga33463c8b0d0104cf9d9e0f9cb3c0b26b"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga33463c8b0d0104cf9d9e0f9cb3c0b26b">tbb::parallel_for_each</a> (const Range &rng, const Function &f)</td></tr>
-<tr class="memdesc:ga33463c8b0d0104cf9d9e0f9cb3c0b26b"><td class="mdescLeft"> </td><td class="mdescRight">Uses default context. <br/></td></tr>
-<tr class="separator:ga33463c8b0d0104cf9d9e0f9cb3c0b26b"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="member-group"></a>
-parallel_invoke</h2></td></tr>
-<tr class="memitem:ga3c6fe4bf1076c82132e666fb545451cd"><td class="memTemplParams" colspan="2">template<typename F0 , typename F1 , typename... F> </td></tr>
-<tr class="memitem:ga3c6fe4bf1076c82132e666fb545451cd"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga3c6fe4bf1076c82132e666fb545451cd">tbb::parallel_invoke</a> (F0 &&f0, F1 &&f1, F &&...f)</td></tr>
-<tr class="memdesc:ga3c6fe4bf1076c82132e666fb545451cd"><td class="mdescLeft"> </td><td class="mdescRight">Executes a list of tasks in parallel and waits for all tasks to complete.  <a href="#ga3c6fe4bf1076c82132e666fb545451cd">More...</a><br/></td></tr>
-<tr class="separator:ga3c6fe4bf1076c82132e666fb545451cd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga14459dcbcd631194df803b155a7f610b"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga14459dcbcd631194df803b155a7f610b"></a>
-template<typename F0 , typename F1 > </td></tr>
-<tr class="memitem:ga14459dcbcd631194df803b155a7f610b"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, <a class="el" href="a00153.html">tbb::task_group_context</a> &context)</td></tr>
-<tr class="separator:ga14459dcbcd631194df803b155a7f610b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gaaea3f3a8883128afb596a963e856277f"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaaea3f3a8883128afb596a963e856277f"></a>
-template<typename F0 , typename F1 , typename F2 > </td></tr>
-<tr class="memitem:gaaea3f3a8883128afb596a963e856277f"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, <a class="el" href="a00153.html">tbb::task_group_context</a> &context)</td></tr>
-<tr class="separator:gaaea3f3a8883128afb596a963e856277f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga74932e64ede5047387108fa45f1af96f"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga74932e64ede5047387108fa45f1af96f"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 > </td></tr>
-<tr class="memitem:ga74932e64ede5047387108fa45f1af96f"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, <a class="el" href="a00153.html">tbb::task_group_context</a> &context)</td></tr>
-<tr class="separator:ga74932e64ede5047387108fa45f1af96f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gaefc1ba8f73cbdd094575f6db454fc6b5"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaefc1ba8f73cbdd094575f6db454fc6b5"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 > </td></tr>
-<tr class="memitem:gaefc1ba8f73cbdd094575f6db454fc6b5"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, <a class="el" href="a00153.html">tbb::task_group_context</a> &context)</td></tr>
-<tr class="separator:gaefc1ba8f73cbdd094575f6db454fc6b5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga3f02dfbb94238b2cf2ef8f20844b03af"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga3f02dfbb94238b2cf2ef8f20844b03af"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 > </td></tr>
-<tr class="memitem:ga3f02dfbb94238b2cf2ef8f20844b03af"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, <a class="el" href="a00153.html">tbb::task_group_context</a> &context)</td></tr>
-<tr class="separator:ga3f02dfbb94238b2cf2ef8f20844b03af"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gad8c1220bbd59e3b8e7bbcdcfdda8047e"><td class="memTemplParams" colspan="2"><a class="anchor" id="gad8c1220bbd59e3b8e7bbcdcfdda8047e"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 > </td></tr>
-<tr class="memitem:gad8c1220bbd59e3b8e7bbcdcfdda8047e"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, <a class="el" href="a00153.html">tbb::task_group_context</a> &context)</td></tr>
-<tr class="separator:gad8c1220bbd59e3b8e7bbcdcfdda8047e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga5ee83a66397ee0b15c77756cb5e5168e"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga5ee83a66397ee0b15c77756cb5e5168e"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 > </td></tr>
-<tr class="memitem:ga5ee83a66397ee0b15c77756cb5e5168e"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, <a class="el" href="a00153.html">tbb::task_group_context</a> &context)</td></tr>
-<tr class="separator:ga5ee83a66397ee0b15c77756cb5e5168e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga1af92ebd06f6cdf5ee668b1fe62657bd"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga1af92ebd06f6cdf5ee668b1fe62657bd"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 > </td></tr>
-<tr class="memitem:ga1af92ebd06f6cdf5ee668b1fe62657bd"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, <a class="el" href="a00153.html">tbb::task_group_context</a> &context)</td></tr>
-<tr class="separator:ga1af92ebd06f6cdf5ee668b1fe62657bd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga65846bc3b2f63ed1448b6cdfea9e1c80"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga65846bc3b2f63ed1448b6cdfea9e1c80"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 , typename F9 > </td></tr>
-<tr class="memitem:ga65846bc3b2f63ed1448b6cdfea9e1c80"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, const F9 &f9, <a class="el" href="a00153.html">tbb::task_group_context</a> &context)</td></tr>
-<tr class="separator:ga65846bc3b2f63ed1448b6cdfea9e1c80"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga6b1c36ece1d3950677dd01ef0863648c"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga6b1c36ece1d3950677dd01ef0863648c"></a>
-template<typename F0 , typename F1 > </td></tr>
-<tr class="memitem:ga6b1c36ece1d3950677dd01ef0863648c"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1)</td></tr>
-<tr class="separator:ga6b1c36ece1d3950677dd01ef0863648c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gaa979656a4c207782b74800c6c42982f5"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaa979656a4c207782b74800c6c42982f5"></a>
-template<typename F0 , typename F1 , typename F2 > </td></tr>
-<tr class="memitem:gaa979656a4c207782b74800c6c42982f5"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2)</td></tr>
-<tr class="separator:gaa979656a4c207782b74800c6c42982f5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga219cb8061b7cf5454c0bc4d67cff1e34"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga219cb8061b7cf5454c0bc4d67cff1e34"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 > </td></tr>
-<tr class="memitem:ga219cb8061b7cf5454c0bc4d67cff1e34"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3)</td></tr>
-<tr class="separator:ga219cb8061b7cf5454c0bc4d67cff1e34"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga8319ee980cd7cfb03f12ffc2a5ea4895"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga8319ee980cd7cfb03f12ffc2a5ea4895"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 > </td></tr>
-<tr class="memitem:ga8319ee980cd7cfb03f12ffc2a5ea4895"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4)</td></tr>
-<tr class="separator:ga8319ee980cd7cfb03f12ffc2a5ea4895"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga295daf6f7394fba29a979b914be09fc6"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga295daf6f7394fba29a979b914be09fc6"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 > </td></tr>
-<tr class="memitem:ga295daf6f7394fba29a979b914be09fc6"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5)</td></tr>
-<tr class="separator:ga295daf6f7394fba29a979b914be09fc6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga7652a01622a2f28df1e0edf40b691190"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga7652a01622a2f28df1e0edf40b691190"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 > </td></tr>
-<tr class="memitem:ga7652a01622a2f28df1e0edf40b691190"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6)</td></tr>
-<tr class="separator:ga7652a01622a2f28df1e0edf40b691190"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gadd8826371866c58e41dee3546c35d2c8"><td class="memTemplParams" colspan="2"><a class="anchor" id="gadd8826371866c58e41dee3546c35d2c8"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 > </td></tr>
-<tr class="memitem:gadd8826371866c58e41dee3546c35d2c8"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7)</td></tr>
-<tr class="separator:gadd8826371866c58e41dee3546c35d2c8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gaeca8b72507d67dd023dae728bdc89896"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaeca8b72507d67dd023dae728bdc89896"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 > </td></tr>
-<tr class="memitem:gaeca8b72507d67dd023dae728bdc89896"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8)</td></tr>
-<tr class="separator:gaeca8b72507d67dd023dae728bdc89896"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga17c9f95fac24b2b7b62f325f511ee7be"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga17c9f95fac24b2b7b62f325f511ee7be"></a>
-template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 , typename F9 > </td></tr>
-<tr class="memitem:ga17c9f95fac24b2b7b62f325f511ee7be"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, const F9 &f9)</td></tr>
-<tr class="separator:ga17c9f95fac24b2b7b62f325f511ee7be"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="member-group"></a>
-parallel_reduce</h2></td></tr>
-<tr><td class="ititle" colspan="2"><p><a class="anchor" id="amgrp949e4773fffd16cb2d32f76af48627d2"></a>See also requirements on <a class="el" href="a00001.html">Range</a> and <a class="el" href="a00004.html">parallel_reduce Body</a>. </p>
-</td></tr>
-<tr class="memitem:ga7b1ce9568e0a0efe1bd2d55677bc6687"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga7b1ce9568e0a0efe1bd2d55677bc6687"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga7b1ce9568e0a0efe1bd2d55677bc6687">tbb::parallel_reduce</a> (const Range &range, Body &body)</td></tr>
-<tr class="memdesc:ga7b1ce9568e0a0efe1bd2d55677bc6687"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and default partitioner.  <a href="#ga7b1ce9568e0a0efe1bd2d55677bc6687">More...</a><br/></td></tr>
-<tr class="separator:ga7b1ce9568e0a0efe1bd2d55677bc6687"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gaebb92b593827f9c3f5e1f8ee2f7d5f82"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:gaebb92b593827f9c3f5e1f8ee2f7d5f82"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#gaebb92b593827f9c3f5e1f8ee2f7d5f82">tbb::parallel_reduce</a> (const Range &range, Body &body, const simple_partitioner &partitioner)</td></tr>
-<tr class="memdesc:gaebb92b593827f9c3f5e1f8ee2f7d5f82"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and simple_partitioner.  <a href="#gaebb92b593827f9c3f5e1f8ee2f7d5f82">More...</a><br/></td></tr>
-<tr class="separator:gaebb92b593827f9c3f5e1f8ee2f7d5f82"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga3011e7266fb1e43d307060fe75be2c6e"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga3011e7266fb1e43d307060fe75be2c6e"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga3011e7266fb1e43d307060fe75be2c6e">tbb::parallel_reduce</a> (const Range &range, Body &body, const auto_partitioner &partitioner)</td></tr>
-<tr class="memdesc:ga3011e7266fb1e43d307060fe75be2c6e"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and auto_partitioner.  <a href="#ga3011e7266fb1e43d307060fe75be2c6e">More...</a><br/></td></tr>
-<tr class="separator:ga3011e7266fb1e43d307060fe75be2c6e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga6e83e121490df24fa5893b14e68f5e2a"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga6e83e121490df24fa5893b14e68f5e2a"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga6e83e121490df24fa5893b14e68f5e2a">tbb::parallel_reduce</a> (const Range &range, Body &body, affinity_partitioner &partitioner)</td></tr>
-<tr class="memdesc:ga6e83e121490df24fa5893b14e68f5e2a"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and affinity_partitioner.  <a href="#ga6e83e121490df24fa5893b14e68f5e2a">More...</a><br/></td></tr>
-<tr class="separator:ga6e83e121490df24fa5893b14e68f5e2a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gac57281bea03450ccb2d098ee8c7ab697"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:gac57281bea03450ccb2d098ee8c7ab697"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#gac57281bea03450ccb2d098ee8c7ab697">tbb::parallel_reduce</a> (const Range &range, Body &body, const simple_partitioner &partitioner, task_group_context &context)</td></tr>
-<tr class="memdesc:gac57281bea03450ccb2d098ee8c7ab697"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, simple partitioner and user-supplied context.  <a href="#gac57281bea03450ccb2d098ee8c7ab697">More...</a><br/></td></tr>
-<tr class="separator:gac57281bea03450ccb2d098ee8c7ab697"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga5f3ebf50ab7f5e53fd936817c866f7be"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga5f3ebf50ab7f5e53fd936817c866f7be"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga5f3ebf50ab7f5e53fd936817c866f7be">tbb::parallel_reduce</a> (const Range &range, Body &body, const auto_partitioner &partitioner, task_group_context &context)</td></tr>
-<tr class="memdesc:ga5f3ebf50ab7f5e53fd936817c866f7be"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, auto_partitioner and user-supplied context.  <a href="#ga5f3ebf50ab7f5e53fd936817c866f7be">More...</a><br/></td></tr>
-<tr class="separator:ga5f3ebf50ab7f5e53fd936817c866f7be"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga5df3f3a9618fd35931107819cb43fce6"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga5df3f3a9618fd35931107819cb43fce6"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga5df3f3a9618fd35931107819cb43fce6">tbb::parallel_reduce</a> (const Range &range, Body &body, affinity_partitioner &partitioner, task_group_context &context)</td></tr>
-<tr class="memdesc:ga5df3f3a9618fd35931107819cb43fce6"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, affinity_partitioner and user-supplied context.  <a href="#ga5df3f3a9618fd35931107819cb43fce6">More...</a><br/></td></tr>
-<tr class="separator:ga5df3f3a9618fd35931107819cb43fce6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga1c9b66fa25cadee9ca3bff75a6609b05"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
-<tr class="memitem:ga1c9b66fa25cadee9ca3bff75a6609b05"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga1c9b66fa25cadee9ca3bff75a6609b05">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction)</td></tr>
-<tr class="memdesc:ga1c9b66fa25cadee9ca3bff75a6609b05"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and default partitioner.  <a href="#ga1c9b66fa25cadee9ca3bff75a6609b05">More...</a><br/></td></tr>
-<tr class="separator:ga1c9b66fa25cadee9ca3bff75a6609b05"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga0b22fd1de0e8bbaf46587d3c63a1ed93"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
-<tr class="memitem:ga0b22fd1de0e8bbaf46587d3c63a1ed93"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga0b22fd1de0e8bbaf46587d3c63a1ed93">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const simple_partitioner &partitioner)</td></tr>
-<tr class="memdesc:ga0b22fd1de0e8bbaf46587d3c63a1ed93"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and simple_partitioner.  <a href="#ga0b22fd1de0e8bbaf46587d3c63a1ed93">More...</a><br/></td></tr>
-<tr class="separator:ga0b22fd1de0e8bbaf46587d3c63a1ed93"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga56e6b6e2eee521f532c00d855280be69"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
-<tr class="memitem:ga56e6b6e2eee521f532c00d855280be69"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga56e6b6e2eee521f532c00d855280be69">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const auto_partitioner &partitioner)</td></tr>
-<tr class="memdesc:ga56e6b6e2eee521f532c00d855280be69"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and auto_partitioner.  <a href="#ga56e6b6e2eee521f532c00d855280be69">More...</a><br/></td></tr>
-<tr class="separator:ga56e6b6e2eee521f532c00d855280be69"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gac26c35d1983e7ac2ab003cc8e49dd7e6"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
-<tr class="memitem:gac26c35d1983e7ac2ab003cc8e49dd7e6"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#gac26c35d1983e7ac2ab003cc8e49dd7e6">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, affinity_partitioner &partitioner)</td></tr>
-<tr class="memdesc:gac26c35d1983e7ac2ab003cc8e49dd7e6"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and affinity_partitioner.  <a href="#gac26c35d1983e7ac2ab003cc8e49dd7e6">More...</a><br/></td></tr>
-<tr class="separator:gac26c35d1983e7ac2ab003cc8e49dd7e6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga518ef2653004d60319bdfc1c6bce86b6"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
-<tr class="memitem:ga518ef2653004d60319bdfc1c6bce86b6"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga518ef2653004d60319bdfc1c6bce86b6">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const simple_partitioner &partitioner, task_group_context &context)</td></tr>
-<tr class="memdesc:ga518ef2653004d60319bdfc1c6bce86b6"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, simple partitioner and user-supplied context.  <a href="#ga518ef2653004d60319bdfc1c6bce86b6">More...</a><br/></td></tr>
-<tr class="separator:ga518ef2653004d60319bdfc1c6bce86b6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga24ba50caf5a7c32cbd38912508cb69a4"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
-<tr class="memitem:ga24ba50caf5a7c32cbd38912508cb69a4"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga24ba50caf5a7c32cbd38912508cb69a4">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const auto_partitioner &partitioner, task_group_context &context)</td></tr>
-<tr class="memdesc:ga24ba50caf5a7c32cbd38912508cb69a4"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, auto_partitioner and user-supplied context.  <a href="#ga24ba50caf5a7c32cbd38912508cb69a4">More...</a><br/></td></tr>
-<tr class="separator:ga24ba50caf5a7c32cbd38912508cb69a4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga367a8e77c4dac3f8764785afdc6c9299"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
-<tr class="memitem:ga367a8e77c4dac3f8764785afdc6c9299"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga367a8e77c4dac3f8764785afdc6c9299">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, affinity_partitioner &partitioner, task_group_context &context)</td></tr>
-<tr class="memdesc:ga367a8e77c4dac3f8764785afdc6c9299"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, affinity_partitioner and user-supplied context.  <a href="#ga367a8e77c4dac3f8764785afdc6c9299">More...</a><br/></td></tr>
-<tr class="separator:ga367a8e77c4dac3f8764785afdc6c9299"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga1fd7e3c43592dfe1ae3e3572bd80d4f6"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga1fd7e3c43592dfe1ae3e3572bd80d4f6"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga1fd7e3c43592dfe1ae3e3572bd80d4f6">tbb::parallel_deterministic_reduce</a> (const Range &range, Body &body)</td></tr>
-<tr class="memdesc:ga1fd7e3c43592dfe1ae3e3572bd80d4f6"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction and default partitioner.  <a href="#ga1fd7e3c43592dfe1ae3e3572bd80d4f6">More...</a><br/></td></tr>
-<tr class="separator:ga1fd7e3c43592dfe1ae3e3572bd80d4f6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga361201f81b4ec7b86f81b579d2db647a"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga361201f81b4ec7b86f81b579d2db647a"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga361201f81b4ec7b86f81b579d2db647a">tbb::parallel_deterministic_reduce</a> (const Range &range, Body &body, task_group_context &context)</td></tr>
-<tr class="memdesc:ga361201f81b4ec7b86f81b579d2db647a"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction, simple partitioner and user-supplied context.  <a href="#ga361201f81b4ec7b86f81b579d2db647a">More...</a><br/></td></tr>
-<tr class="separator:ga361201f81b4ec7b86f81b579d2db647a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga7f69e6a632acb51ed26a43ebd331f349"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
-<tr class="memitem:ga7f69e6a632acb51ed26a43ebd331f349"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga7f69e6a632acb51ed26a43ebd331f349">tbb::parallel_deterministic_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction)</td></tr>
-<tr class="memdesc:ga7f69e6a632acb51ed26a43ebd331f349"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction and default partitioner.  <a href="#ga7f69e6a632acb51ed26a43ebd331f349">More...</a><br/></td></tr>
-<tr class="separator:ga7f69e6a632acb51ed26a43ebd331f349"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga69b4eea059a62cbbf409cbad02b70bfa"><td class="memTemplParams" colspan="2">template<typename Range , typename Value , typename RealBody , typename Reduction > </td></tr>
-<tr class="memitem:ga69b4eea059a62cbbf409cbad02b70bfa"><td class="memTemplItemLeft" align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga69b4eea059a62cbbf409cbad02b70bfa">tbb::parallel_deterministic_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, task_group_context &context)</td></tr>
-<tr class="memdesc:ga69b4eea059a62cbbf409cbad02b70bfa"><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction, simple partitioner and user-supplied context.  <a href="#ga69b4eea059a62cbbf409cbad02b70bfa">More...</a><br/></td></tr>
-<tr class="separator:ga69b4eea059a62cbbf409cbad02b70bfa"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="member-group"></a>
-parallel_scan</h2></td></tr>
-<tr><td class="ititle" colspan="2"><p><a class="anchor" id="amgrpea856f699c9d234ea9f5ed535b0b16bb"></a>See also requirements on <a class="el" href="a00001.html">Range</a> and <a class="el" href="a00006.html">parallel_scan Body</a>. </p>
-</td></tr>
-<tr class="memitem:gae7eaaf124471a6c603b28fc925e8fbbb"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:gae7eaaf124471a6c603b28fc925e8fbbb"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#gae7eaaf124471a6c603b28fc925e8fbbb">tbb::parallel_scan</a> (const Range &range, Body &body)</td></tr>
-<tr class="memdesc:gae7eaaf124471a6c603b28fc925e8fbbb"><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with default partitioner.  <a href="#gae7eaaf124471a6c603b28fc925e8fbbb">More...</a><br/></td></tr>
-<tr class="separator:gae7eaaf124471a6c603b28fc925e8fbbb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga7ddacf5e49f1bea9b67803f2d0f57531"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga7ddacf5e49f1bea9b67803f2d0f57531"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga7ddacf5e49f1bea9b67803f2d0f57531">tbb::parallel_scan</a> (const Range &range, Body &body, const simple_partitioner &partitioner)</td></tr>
-<tr class="memdesc:ga7ddacf5e49f1bea9b67803f2d0f57531"><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with simple_partitioner.  <a href="#ga7ddacf5e49f1bea9b67803f2d0f57531">More...</a><br/></td></tr>
-<tr class="separator:ga7ddacf5e49f1bea9b67803f2d0f57531"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga3548041731b7fa14f30f155541ceebb9"><td class="memTemplParams" colspan="2">template<typename Range , typename Body > </td></tr>
-<tr class="memitem:ga3548041731b7fa14f30f155541ceebb9"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga3548041731b7fa14f30f155541ceebb9">tbb::parallel_scan</a> (const Range &range, Body &body, const auto_partitioner &partitioner)</td></tr>
-<tr class="memdesc:ga3548041731b7fa14f30f155541ceebb9"><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with auto_partitioner.  <a href="#ga3548041731b7fa14f30f155541ceebb9">More...</a><br/></td></tr>
-<tr class="separator:ga3548041731b7fa14f30f155541ceebb9"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="member-group"></a>
-parallel_sort</h2></td></tr>
-<tr><td class="ititle" colspan="2"><p><a class="anchor" id="amgrp507087c4dcfb051fe7d24227c3a34024"></a>See also requirements on <a class="el" href="a00007.html">iterators for parallel_sort</a>. </p>
-</td></tr>
-<tr class="memitem:gabdc90813499f91d3e32298cd6dc2fe45"><td class="memTemplParams" colspan="2">template<typename RandomAccessIterator , typename Compare > </td></tr>
-<tr class="memitem:gabdc90813499f91d3e32298cd6dc2fe45"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#gabdc90813499f91d3e32298cd6dc2fe45">tbb::parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end, const Compare &comp)</td></tr>
-<tr class="memdesc:gabdc90813499f91d3e32298cd6dc2fe45"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in [begin,end) using the given comparator.  <a href="#gabdc90813499f91d3e32298cd6dc2fe45">More...</a><br/></td></tr>
-<tr class="separator:gabdc90813499f91d3e32298cd6dc2fe45"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga73b58ac9249f49587d0b081c152af551"><td class="memTemplParams" colspan="2">template<typename RandomAccessIterator > </td></tr>
-<tr class="memitem:ga73b58ac9249f49587d0b081c152af551"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga73b58ac9249f49587d0b081c152af551">tbb::parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end)</td></tr>
-<tr class="memdesc:ga73b58ac9249f49587d0b081c152af551"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in [begin,end) with a default comparator <code>std::less<RandomAccessIterator></code>  <a href="#ga73b58ac9249f49587d0b081c152af551">More...</a><br/></td></tr>
-<tr class="separator:ga73b58ac9249f49587d0b081c152af551"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga61ce8ba64868c5c15f9d98840193b9bf"><td class="memTemplParams" colspan="2">template<typename Range , typename Compare > </td></tr>
-<tr class="memitem:ga61ce8ba64868c5c15f9d98840193b9bf"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga61ce8ba64868c5c15f9d98840193b9bf">tbb::parallel_sort</a> (Range &rng, const Compare &comp)</td></tr>
-<tr class="memdesc:ga61ce8ba64868c5c15f9d98840193b9bf"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in rng using the given comparator.  <a href="#ga61ce8ba64868c5c15f9d98840193b9bf">More...</a><br/></td></tr>
-<tr class="separator:ga61ce8ba64868c5c15f9d98840193b9bf"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga541b2fd91e88842a7b823161107779e9"><td class="memTemplParams" colspan="2">template<typename Range , typename Compare > </td></tr>
-<tr class="memitem:ga541b2fd91e88842a7b823161107779e9"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga541b2fd91e88842a7b823161107779e9">tbb::parallel_sort</a> (const Range &rng, const Compare &comp)</td></tr>
-<tr class="memdesc:ga541b2fd91e88842a7b823161107779e9"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in const rng using the given comparator.  <a href="#ga541b2fd91e88842a7b823161107779e9">More...</a><br/></td></tr>
-<tr class="separator:ga541b2fd91e88842a7b823161107779e9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gaf1fb3ae3aab1213cb9bcf56e30c164bb"><td class="memTemplParams" colspan="2">template<typename Range > </td></tr>
-<tr class="memitem:gaf1fb3ae3aab1213cb9bcf56e30c164bb"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#gaf1fb3ae3aab1213cb9bcf56e30c164bb">tbb::parallel_sort</a> (Range &rng)</td></tr>
-<tr class="memdesc:gaf1fb3ae3aab1213cb9bcf56e30c164bb"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in rng with a default comparator <code>std::less<RandomAccessIterator></code>  <a href="#gaf1fb3ae3aab1213cb9bcf56e30c164bb">More...</a><br/></td></tr>
-<tr class="separator:gaf1fb3ae3aab1213cb9bcf56e30c164bb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga60bbc3d7699f09618bd8b5114e4277cb"><td class="memTemplParams" colspan="2">template<typename Range > </td></tr>
-<tr class="memitem:ga60bbc3d7699f09618bd8b5114e4277cb"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga60bbc3d7699f09618bd8b5114e4277cb">tbb::parallel_sort</a> (const Range &rng)</td></tr>
-<tr class="memdesc:ga60bbc3d7699f09618bd8b5114e4277cb"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in const rng with a default comparator <code>std::less<RandomAccessIterator></code>  <a href="#ga60bbc3d7699f09618bd8b5114e4277cb">More...</a><br/></td></tr>
-<tr class="separator:ga60bbc3d7699f09618bd8b5114e4277cb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga8f176cdc232a6e5907456656a24983a8"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr class="memitem:ga8f176cdc232a6e5907456656a24983a8"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00255.html#ga8f176cdc232a6e5907456656a24983a8">tbb::parallel_sort</a> (T *begin, T *end)</td></tr>
-<tr class="memdesc:ga8f176cdc232a6e5907456656a24983a8"><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in the range <code></code>[begin,end) with a default comparator <code>std::less<T></code>  <a href="#ga8f176cdc232a6e5907456656a24983a8">More...</a><br/></td></tr>
-<tr class="separator:ga8f176cdc232a6e5907456656a24983a8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga69722571e9e4406693c4a1379f0b47eb"><td class="memItemLeft" align="right" valign="top">typedef <br class="typebreak"/>
+interface7::internal::padded_mutex<br class="typebreak"/>
+< interface7::internal::x86_eliding_mutex, <br class="typebreak"/>
+false > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#ga69722571e9e4406693c4a1379f0b47eb">tbb::speculative_spin_mutex</a></td></tr>
+<tr class="memdesc:ga69722571e9e4406693c4a1379f0b47eb"><td class="mdescLeft"> </td><td class="mdescRight">A cross-platform spin mutex with speculative lock acquisition.  <a href="#ga69722571e9e4406693c4a1379f0b47eb">More...</a><br/></td></tr>
+<tr class="separator:ga69722571e9e4406693c4a1379f0b47eb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga97d0da95fd4f92af12de15e1a8b5c780"><td class="memItemLeft" align="right" valign="top">typedef <br class="typebreak"/>
+interface7::internal::padded_mutex<br class="typebreak"/>
+< tbb::interface8::internal::x86_rtm_rw_mutex, <br class="typebreak"/>
+true > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#ga97d0da95fd4f92af12de15e1a8b5c780">tbb::interface8::speculative_spin_rw_mutex</a></td></tr>
+<tr class="memdesc:ga97d0da95fd4f92af12de15e1a8b5c780"><td class="mdescLeft"> </td><td class="mdescRight">A cross-platform spin reader/writer mutex with speculative lock acquisition.  <a href="#ga97d0da95fd4f92af12de15e1a8b5c780">More...</a><br/></td></tr>
+<tr class="separator:ga97d0da95fd4f92af12de15e1a8b5c780"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<h2 class="groupheader">Function Documentation</h2>
-<a class="anchor" id="ga1fd7e3c43592dfe1ae3e3572bd80d4f6"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Body > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_deterministic_reduce </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">Body & </td>
-          <td class="paramname"><em>body</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration with deterministic reduction and default partitioner. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga361201f81b4ec7b86f81b579d2db647a"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Body > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_deterministic_reduce </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">Body & </td>
-          <td class="paramname"><em>body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">task_group_context & </td>
-          <td class="paramname"><em>context</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration with deterministic reduction, simple partitioner and user-supplied context. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga7f69e6a632acb51ed26a43ebd331f349"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Value , typename RealBody , typename Reduction > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">Value tbb::parallel_deterministic_reduce </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Value & </td>
-          <td class="paramname"><em>identity</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const RealBody & </td>
-          <td class="paramname"><em>real_body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Reduction & </td>
-          <td class="paramname"><em>reduction</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration with deterministic reduction and default partitioner. </p>
-<p>parallel_reduce overloads that work with anonymous function objects (see also <a class="el" href="a00005.html">requirements on parallel_reduce anonymous function objects</a>). </p>
-
-</div>
-</div>
-<a class="anchor" id="ga69b4eea059a62cbbf409cbad02b70bfa"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Value , typename RealBody , typename Reduction > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">Value tbb::parallel_deterministic_reduce </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Value & </td>
-          <td class="paramname"><em>identity</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const RealBody & </td>
-          <td class="paramname"><em>real_body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Reduction & </td>
-          <td class="paramname"><em>reduction</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">task_group_context & </td>
-          <td class="paramname"><em>context</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration with deterministic reduction, simple partitioner and user-supplied context. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga533f6732498ade8634a9470cbf89192d"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Iterator , typename Body > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_do </td>
-          <td>(</td>
-          <td class="paramtype">Iterator </td>
-          <td class="paramname"><em>first</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">Iterator </td>
-          <td class="paramname"><em>last</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Body & </td>
-          <td class="paramname"><em>body</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration over a range, with optional addition of more work. </p>
-
-<p>Referenced by <a class="el" href="a00255.html#ga96bf42caaec779e413e5a2396c1e301c">tbb::parallel_for_each()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ga7db29bc10d81eddc85854256ffc723c0"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Iterator , typename Body > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_do </td>
-          <td>(</td>
-          <td class="paramtype">Iterator </td>
-          <td class="paramname"><em>first</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">Iterator </td>
-          <td class="paramname"><em>last</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Body & </td>
-          <td class="paramname"><em>body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">task_group_context & </td>
-          <td class="paramname"><em>context</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration over a range, with optional addition of more work and user-supplied context. </p>
-
-</div>
-</div>
-<a class="anchor" id="gaa8444c29dc4d2e527a1036717d109aef"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Body > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_for </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Body & </td>
-          <td class="paramname"><em>body</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration over range with default partitioner. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga9722d2bc7e5edb4fae9f3b55268a1ecc"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Body > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_for </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Body & </td>
-          <td class="paramname"><em>body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const simple_partitioner & </td>
-          <td class="paramname"><em>partitioner</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration over range with simple partitioner. </p>
-
-</div>
-</div>
-<a class="anchor" id="gad6c4b06f96ae33cefe78235841791902"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Body > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_for </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Body & </td>
-          <td class="paramname"><em>body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const auto_partitioner & </td>
-          <td class="paramname"><em>partitioner</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration over range with auto_partitioner. </p>
-
-</div>
-</div>
-<a class="anchor" id="gaf3d39e372d825bf54283b5ceafa90057"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Body > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_for </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Body & </td>
-          <td class="paramname"><em>body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">affinity_partitioner & </td>
-          <td class="paramname"><em>partitioner</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration over range with affinity_partitioner. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga93a621202db94665144de38c0b09bdad"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Body > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_for </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Body & </td>
-          <td class="paramname"><em>body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">task_group_context & </td>
-          <td class="paramname"><em>context</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration over range with default partitioner and user-supplied context. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga5b7fab9d6ffe7a9345e9349a5a007bd4"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Body > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_for </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Body & </td>
-          <td class="paramname"><em>body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const simple_partitioner & </td>
-          <td class="paramname"><em>partitioner</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">task_group_context & </td>
-          <td class="paramname"><em>context</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration over range with simple partitioner and user-supplied context. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga4c9935d8710a5cf786a92f3522ab2976"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Body > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_for </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Body & </td>
-          <td class="paramname"><em>body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const auto_partitioner & </td>
-          <td class="paramname"><em>partitioner</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">task_group_context & </td>
-          <td class="paramname"><em>context</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration over range with auto_partitioner and user-supplied context. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga62b1a9ac304ba1eb4f87ab8cc18dd281"></a>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="ga69722571e9e4406693c4a1379f0b47eb"></a>
 <div class="memitem">
 <div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Body > </div>
       <table class="memname">
         <tr>
-          <td class="memname">void tbb::parallel_for </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Body & </td>
-          <td class="paramname"><em>body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">affinity_partitioner & </td>
-          <td class="paramname"><em>partitioner</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">task_group_context & </td>
-          <td class="paramname"><em>context</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
+          <td class="memname">typedef interface7::internal::padded_mutex< spin_mutex, false > <a class="el" href="a00255.html#ga69722571e9e4406693c4a1379f0b47eb">tbb::speculative_spin_mutex</a></td>
         </tr>
       </table>
 </div><div class="memdoc">
 
-<p>Parallel iteration over range with affinity_partitioner and user-supplied context. </p>
+<p>A cross-platform spin mutex with speculative lock acquisition. </p>
+<p>On platforms with proper HW support, this lock may speculatively execute its critical sections, using HW mechanisms to detect real data races and ensure atomicity of the critical sections. In particular, it uses Intel(R) Transactional Synchronization Extensions (Intel(R) TSX). Without such HW support, it behaves like a <a class="el" href="a00140.html" title="A lock that occupies a single byte. ">spin_mutex</a>. It should be used for locking short critical sections where the lock is co [...]
 
 </div>
 </div>
-<a class="anchor" id="ga96bf42caaec779e413e5a2396c1e301c"></a>
+<a class="anchor" id="ga97d0da95fd4f92af12de15e1a8b5c780"></a>
 <div class="memitem">
 <div class="memproto">
-<div class="memtemplate">
-template<typename InputIterator , typename Function > </div>
       <table class="memname">
         <tr>
-          <td class="memname">void tbb::parallel_for_each </td>
-          <td>(</td>
-          <td class="paramtype">InputIterator </td>
-          <td class="paramname"><em>first</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">InputIterator </td>
-          <td class="paramname"><em>last</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Function & </td>
-          <td class="paramname"><em>f</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">task_group_context & </td>
-          <td class="paramname"><em>context</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
+          <td class="memname">typedef interface7::internal::padded_mutex< <a class="el" href="a00141.html">tbb::spin_rw_mutex</a>, true > <a class="el" href="a00255.html#ga97d0da95fd4f92af12de15e1a8b5c780">tbb::interface8::speculative_spin_rw_mutex</a></td>
         </tr>
       </table>
 </div><div class="memdoc">
 
-<p>Calls function f for all items from [first, last) interval using user-supplied context. </p>
-
-<p>References <a class="el" href="a00255.html#ga533f6732498ade8634a9470cbf89192d">tbb::parallel_do()</a>.</p>
-
-<p>Referenced by <a class="el" href="a00255.html#ga72131543fd218b67dbb048b768d534e4">tbb::parallel_for_each()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ga72131543fd218b67dbb048b768d534e4"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Function > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_for_each </td>
-          <td>(</td>
-          <td class="paramtype">Range & </td>
-          <td class="paramname"><em>rng</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Function & </td>
-          <td class="paramname"><em>f</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">task_group_context & </td>
-          <td class="paramname"><em>context</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Calls function f for all items from rng using user-supplied context. </p>
-
-<p>References <a class="el" href="a00255.html#ga96bf42caaec779e413e5a2396c1e301c">tbb::parallel_for_each()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="gad7d0702d16fbd7554584ab735eed39ba"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Function > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_for_each </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>rng</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Function & </td>
-          <td class="paramname"><em>f</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">task_group_context & </td>
-          <td class="paramname"><em>context</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Calls function f for all items from const rng user-supplied context. </p>
-
-<p>References <a class="el" href="a00255.html#ga96bf42caaec779e413e5a2396c1e301c">tbb::parallel_for_each()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ga3c6fe4bf1076c82132e666fb545451cd"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename F0 , typename F1 , typename... F> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_invoke </td>
-          <td>(</td>
-          <td class="paramtype">F0 && </td>
-          <td class="paramname"><em>f0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">F1 && </td>
-          <td class="paramname"><em>f1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">F &&... </td>
-          <td class="paramname"><em>f</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Executes a list of tasks in parallel and waits for all tasks to complete. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga7b1ce9568e0a0efe1bd2d55677bc6687"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Body > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_reduce </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">Body & </td>
-          <td class="paramname"><em>body</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration with reduction and default partitioner. </p>
-
-</div>
-</div>
-<a class="anchor" id="gaebb92b593827f9c3f5e1f8ee2f7d5f82"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Body > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_reduce </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">Body & </td>
-          <td class="paramname"><em>body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const simple_partitioner & </td>
-          <td class="paramname"><em>partitioner</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration with reduction and simple_partitioner. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga3011e7266fb1e43d307060fe75be2c6e"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Body > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_reduce </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">Body & </td>
-          <td class="paramname"><em>body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const auto_partitioner & </td>
-          <td class="paramname"><em>partitioner</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration with reduction and auto_partitioner. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga6e83e121490df24fa5893b14e68f5e2a"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Body > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_reduce </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">Body & </td>
-          <td class="paramname"><em>body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">affinity_partitioner & </td>
-          <td class="paramname"><em>partitioner</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration with reduction and affinity_partitioner. </p>
-
-</div>
-</div>
-<a class="anchor" id="gac57281bea03450ccb2d098ee8c7ab697"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Body > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_reduce </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">Body & </td>
-          <td class="paramname"><em>body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const simple_partitioner & </td>
-          <td class="paramname"><em>partitioner</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">task_group_context & </td>
-          <td class="paramname"><em>context</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration with reduction, simple partitioner and user-supplied context. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga5f3ebf50ab7f5e53fd936817c866f7be"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Body > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_reduce </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">Body & </td>
-          <td class="paramname"><em>body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const auto_partitioner & </td>
-          <td class="paramname"><em>partitioner</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">task_group_context & </td>
-          <td class="paramname"><em>context</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration with reduction, auto_partitioner and user-supplied context. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga5df3f3a9618fd35931107819cb43fce6"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Body > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_reduce </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">Body & </td>
-          <td class="paramname"><em>body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">affinity_partitioner & </td>
-          <td class="paramname"><em>partitioner</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">task_group_context & </td>
-          <td class="paramname"><em>context</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration with reduction, affinity_partitioner and user-supplied context. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga1c9b66fa25cadee9ca3bff75a6609b05"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Value , typename RealBody , typename Reduction > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">Value tbb::parallel_reduce </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Value & </td>
-          <td class="paramname"><em>identity</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const RealBody & </td>
-          <td class="paramname"><em>real_body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Reduction & </td>
-          <td class="paramname"><em>reduction</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration with reduction and default partitioner. </p>
-<p>parallel_reduce overloads that work with anonymous function objects (see also <a class="el" href="a00005.html">requirements on parallel_reduce anonymous function objects</a>). </p>
-
-</div>
-</div>
-<a class="anchor" id="ga0b22fd1de0e8bbaf46587d3c63a1ed93"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Value , typename RealBody , typename Reduction > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">Value tbb::parallel_reduce </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Value & </td>
-          <td class="paramname"><em>identity</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const RealBody & </td>
-          <td class="paramname"><em>real_body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Reduction & </td>
-          <td class="paramname"><em>reduction</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const simple_partitioner & </td>
-          <td class="paramname"><em>partitioner</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration with reduction and simple_partitioner. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga56e6b6e2eee521f532c00d855280be69"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Value , typename RealBody , typename Reduction > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">Value tbb::parallel_reduce </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Value & </td>
-          <td class="paramname"><em>identity</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const RealBody & </td>
-          <td class="paramname"><em>real_body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Reduction & </td>
-          <td class="paramname"><em>reduction</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const auto_partitioner & </td>
-          <td class="paramname"><em>partitioner</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration with reduction and auto_partitioner. </p>
-
-</div>
-</div>
-<a class="anchor" id="gac26c35d1983e7ac2ab003cc8e49dd7e6"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Value , typename RealBody , typename Reduction > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">Value tbb::parallel_reduce </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Value & </td>
-          <td class="paramname"><em>identity</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const RealBody & </td>
-          <td class="paramname"><em>real_body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Reduction & </td>
-          <td class="paramname"><em>reduction</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">affinity_partitioner & </td>
-          <td class="paramname"><em>partitioner</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration with reduction and affinity_partitioner. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga518ef2653004d60319bdfc1c6bce86b6"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Value , typename RealBody , typename Reduction > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">Value tbb::parallel_reduce </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Value & </td>
-          <td class="paramname"><em>identity</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const RealBody & </td>
-          <td class="paramname"><em>real_body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Reduction & </td>
-          <td class="paramname"><em>reduction</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const simple_partitioner & </td>
-          <td class="paramname"><em>partitioner</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">task_group_context & </td>
-          <td class="paramname"><em>context</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration with reduction, simple partitioner and user-supplied context. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga24ba50caf5a7c32cbd38912508cb69a4"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Value , typename RealBody , typename Reduction > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">Value tbb::parallel_reduce </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Value & </td>
-          <td class="paramname"><em>identity</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const RealBody & </td>
-          <td class="paramname"><em>real_body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Reduction & </td>
-          <td class="paramname"><em>reduction</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const auto_partitioner & </td>
-          <td class="paramname"><em>partitioner</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">task_group_context & </td>
-          <td class="paramname"><em>context</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration with reduction, auto_partitioner and user-supplied context. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga367a8e77c4dac3f8764785afdc6c9299"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Value , typename RealBody , typename Reduction > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">Value tbb::parallel_reduce </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Value & </td>
-          <td class="paramname"><em>identity</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const RealBody & </td>
-          <td class="paramname"><em>real_body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Reduction & </td>
-          <td class="paramname"><em>reduction</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">affinity_partitioner & </td>
-          <td class="paramname"><em>partitioner</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">task_group_context & </td>
-          <td class="paramname"><em>context</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel iteration with reduction, affinity_partitioner and user-supplied context. </p>
-
-</div>
-</div>
-<a class="anchor" id="gae7eaaf124471a6c603b28fc925e8fbbb"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Body > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_scan </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">Body & </td>
-          <td class="paramname"><em>body</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel prefix with default partitioner. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga7ddacf5e49f1bea9b67803f2d0f57531"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Body > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_scan </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">Body & </td>
-          <td class="paramname"><em>body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const simple_partitioner & </td>
-          <td class="paramname"><em>partitioner</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel prefix with simple_partitioner. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga3548041731b7fa14f30f155541ceebb9"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Body > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_scan </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>range</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">Body & </td>
-          <td class="paramname"><em>body</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const auto_partitioner & </td>
-          <td class="paramname"><em>partitioner</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Parallel prefix with auto_partitioner. </p>
-
-</div>
-</div>
-<a class="anchor" id="gabdc90813499f91d3e32298cd6dc2fe45"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename RandomAccessIterator , typename Compare > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_sort </td>
-          <td>(</td>
-          <td class="paramtype">RandomAccessIterator </td>
-          <td class="paramname"><em>begin</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">RandomAccessIterator </td>
-          <td class="paramname"><em>end</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Compare & </td>
-          <td class="paramname"><em>comp</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Sorts the data in [begin,end) using the given comparator. </p>
-<p>The compare function object is used for all comparisons between elements during sorting. The compare object must define a bool operator() function. </p>
-
-<p>Referenced by <a class="el" href="a00255.html#ga73b58ac9249f49587d0b081c152af551">tbb::parallel_sort()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ga73b58ac9249f49587d0b081c152af551"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename RandomAccessIterator > </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_sort </td>
-          <td>(</td>
-          <td class="paramtype">RandomAccessIterator </td>
-          <td class="paramname"><em>begin</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">RandomAccessIterator </td>
-          <td class="paramname"><em>end</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Sorts the data in [begin,end) with a default comparator <code>std::less<RandomAccessIterator></code> </p>
-
-<p>References <a class="el" href="a00255.html#gabdc90813499f91d3e32298cd6dc2fe45">tbb::parallel_sort()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ga61ce8ba64868c5c15f9d98840193b9bf"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Compare > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_sort </td>
-          <td>(</td>
-          <td class="paramtype">Range & </td>
-          <td class="paramname"><em>rng</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Compare & </td>
-          <td class="paramname"><em>comp</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Sorts the data in rng using the given comparator. </p>
-
-<p>References <a class="el" href="a00255.html#gabdc90813499f91d3e32298cd6dc2fe45">tbb::parallel_sort()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ga541b2fd91e88842a7b823161107779e9"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range , typename Compare > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_sort </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>rng</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Compare & </td>
-          <td class="paramname"><em>comp</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Sorts the data in const rng using the given comparator. </p>
-
-<p>References <a class="el" href="a00255.html#gabdc90813499f91d3e32298cd6dc2fe45">tbb::parallel_sort()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="gaf1fb3ae3aab1213cb9bcf56e30c164bb"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_sort </td>
-          <td>(</td>
-          <td class="paramtype">Range & </td>
-          <td class="paramname"><em>rng</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Sorts the data in rng with a default comparator <code>std::less<RandomAccessIterator></code> </p>
-
-<p>References <a class="el" href="a00255.html#gabdc90813499f91d3e32298cd6dc2fe45">tbb::parallel_sort()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ga60bbc3d7699f09618bd8b5114e4277cb"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Range > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_sort </td>
-          <td>(</td>
-          <td class="paramtype">const Range & </td>
-          <td class="paramname"><em>rng</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Sorts the data in const rng with a default comparator <code>std::less<RandomAccessIterator></code> </p>
-
-<p>References <a class="el" href="a00255.html#gabdc90813499f91d3e32298cd6dc2fe45">tbb::parallel_sort()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ga8f176cdc232a6e5907456656a24983a8"></a>
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_sort </td>
-          <td>(</td>
-          <td class="paramtype">T * </td>
-          <td class="paramname"><em>begin</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">T * </td>
-          <td class="paramname"><em>end</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Sorts the data in the range <code></code>[begin,end) with a default comparator <code>std::less<T></code> </p>
-
-<p>References <a class="el" href="a00255.html#gabdc90813499f91d3e32298cd6dc2fe45">tbb::parallel_sort()</a>.</p>
+<p>A cross-platform spin reader/writer mutex with speculative lock acquisition. </p>
+<p>On platforms with proper HW support, this lock may speculatively execute its critical sections, using HW mechanisms to detect real data races and ensure atomicity of the critical sections. In particular, it uses Intel(R) Transactional Synchronization Extensions (Intel(R) TSX). Without such HW support, it behaves like a spin_rw_mutex. It should be used for locking short critical sections where the lock is contended but the data it protects are not. </p>
 
 </div>
 </div>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00256.html b/doc/html/a00256.html
index 7fce7ad..ae5663e 100644
--- a/doc/html/a00256.html
+++ b/doc/html/a00256.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>Containers</title>
+<title>Timing</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -29,36 +29,21 @@
   <div class="summary">
 <a href="#nested-classes">Classes</a>  </div>
   <div class="headertitle">
-<div class="title">Containers</div>  </div>
+<div class="title">Timing</div>  </div>
 </div><!--header-->
 <div class="contents">
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
 Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html">tbb::combinable< T ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Thread-local storage with optional reduction.  <a href="a00036.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Unordered map from Key to T.  <a href="a00043.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A high-performance thread-safe non-blocking concurrent queue.  <a href="a00046.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A high-performance thread-safe blocking concurrent bounded queue.  <a href="a00042.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Concurrent vector container.  <a href="a00053.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The <a class="el" href="a00061.html" title="The enumerable_thread_specific container. ">enumerable_thread_specific</a> container.  <a href="a00061.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html">tbb::tick_count</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Absolute timestamp.  <a href="a00163.html#details">More...</a><br/></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00257.html b/doc/html/a00257.html
index b729671..780a463 100644
--- a/doc/html/a00257.html
+++ b/doc/html/a00257.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>Memory Allocation</title>
+<title>Task Scheduling</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -27,353 +27,23 @@
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#func-members">Functions</a>  </div>
+<a href="#nested-classes">Classes</a>  </div>
   <div class="headertitle">
-<div class="title">Memory Allocation</div>  </div>
+<div class="title">Task Scheduling</div>  </div>
 </div><!--header-->
 <div class="contents">
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
 Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00015.html">tbb::aligned_space< T, N ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Block of space aligned sufficiently to construct an array T with N elements.  <a href="a00015.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html">tbb::task_scheduler_init</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Class delimiting the scope of task scheduler activity.  <a href="a00150.html#details">More...</a><br/></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00032.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00033.html">tbb::cache_aligned_allocator< void ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00033.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00093.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00094.html">tbb::interface6::memory_pool_allocator< void, P ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00094.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html">tbb::scalable_allocator< T ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00129.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html">tbb::scalable_allocator< void ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00130.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html">tbb::tbb_allocator< T ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00159.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html">tbb::tbb_allocator< void ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00160.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00177.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.html">tbb::zero_allocator< void, Allocator ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00178.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga2a5bdc71439a70b20f2eadf6e1a489e1"><td class="memItemLeft" align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#ga2a5bdc71439a70b20f2eadf6e1a489e1">scalable_malloc</a> (size_t size)</td></tr>
-<tr class="separator:ga2a5bdc71439a70b20f2eadf6e1a489e1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga2ad3952b8c4dd7d293e02ae18fc37b84"><td class="memItemLeft" align="right" valign="top">void __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#ga2ad3952b8c4dd7d293e02ae18fc37b84">scalable_free</a> (void *ptr)</td></tr>
-<tr class="separator:ga2ad3952b8c4dd7d293e02ae18fc37b84"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga40d6e0bc19cdfa3005b2b935c62077a1"><td class="memItemLeft" align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#ga40d6e0bc19cdfa3005b2b935c62077a1">scalable_realloc</a> (void *ptr, size_t size)</td></tr>
-<tr class="separator:ga40d6e0bc19cdfa3005b2b935c62077a1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga3b4ff39555cd9e929fce2958325cd8ea"><td class="memItemLeft" align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#ga3b4ff39555cd9e929fce2958325cd8ea">scalable_calloc</a> (size_t nobj, size_t size)</td></tr>
-<tr class="separator:ga3b4ff39555cd9e929fce2958325cd8ea"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gaf117b4994f719d539804da8dd115e28c"><td class="memItemLeft" align="right" valign="top">int __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#gaf117b4994f719d539804da8dd115e28c">scalable_posix_memalign</a> (void **memptr, size_t alignment, size_t size)</td></tr>
-<tr class="separator:gaf117b4994f719d539804da8dd115e28c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga903307de17bc1611515f8e6ae782a3d6"><td class="memItemLeft" align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#ga903307de17bc1611515f8e6ae782a3d6">scalable_aligned_malloc</a> (size_t size, size_t alignment)</td></tr>
-<tr class="separator:ga903307de17bc1611515f8e6ae782a3d6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gaa07391c54330b2e4dd1743ae9c9c4f2d"><td class="memItemLeft" align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#gaa07391c54330b2e4dd1743ae9c9c4f2d">scalable_aligned_realloc</a> (void *ptr, size_t size, size_t alignment)</td></tr>
-<tr class="separator:gaa07391c54330b2e4dd1743ae9c9c4f2d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gad9aa7595581a7bc5be193d7e034c8f61"><td class="memItemLeft" align="right" valign="top">void __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#gad9aa7595581a7bc5be193d7e034c8f61">scalable_aligned_free</a> (void *ptr)</td></tr>
-<tr class="separator:gad9aa7595581a7bc5be193d7e034c8f61"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga2b718206e50acb6392b86e4877d98213"><td class="memItemLeft" align="right" valign="top">size_t __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#ga2b718206e50acb6392b86e4877d98213">scalable_msize</a> (void *ptr)</td></tr>
-<tr class="separator:ga2b718206e50acb6392b86e4877d98213"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga7f5029970f72ebbffee896c46a23958e"><td class="memItemLeft" align="right" valign="top">int __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#ga7f5029970f72ebbffee896c46a23958e">scalable_allocation_mode</a> (int param, intptr_t value)</td></tr>
-<tr class="separator:ga7f5029970f72ebbffee896c46a23958e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gabe5acd876b4d89bf89787c4e779c2518"><td class="memItemLeft" align="right" valign="top">int __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#gabe5acd876b4d89bf89787c4e779c2518">scalable_allocation_command</a> (int cmd, void *param)</td></tr>
-<tr class="separator:gabe5acd876b4d89bf89787c4e779c2518"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<h2 class="groupheader">Function Documentation</h2>
-<a class="anchor" id="gad9aa7595581a7bc5be193d7e034c8f61"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void __TBB_EXPORTED_FUNC scalable_aligned_free </td>
-          <td>(</td>
-          <td class="paramtype">void * </td>
-          <td class="paramname"><em>ptr</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<p>The "_aligned_free" analogue. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga903307de17bc1611515f8e6ae782a3d6"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void* __TBB_EXPORTED_FUNC scalable_aligned_malloc </td>
-          <td>(</td>
-          <td class="paramtype">size_t </td>
-          <td class="paramname"><em>size</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">size_t </td>
-          <td class="paramname"><em>alignment</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<p>The "_aligned_malloc" analogue. </p>
-
-</div>
-</div>
-<a class="anchor" id="gaa07391c54330b2e4dd1743ae9c9c4f2d"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void* __TBB_EXPORTED_FUNC scalable_aligned_realloc </td>
-          <td>(</td>
-          <td class="paramtype">void * </td>
-          <td class="paramname"><em>ptr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">size_t </td>
-          <td class="paramname"><em>size</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">size_t </td>
-          <td class="paramname"><em>alignment</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<p>The "_aligned_realloc" analogue. </p>
-
-</div>
-</div>
-<a class="anchor" id="gabe5acd876b4d89bf89787c4e779c2518"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int __TBB_EXPORTED_FUNC scalable_allocation_command </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>cmd</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">void * </td>
-          <td class="paramname"><em>param</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<p>Call TBB allocator-specific commands. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga7f5029970f72ebbffee896c46a23958e"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int __TBB_EXPORTED_FUNC scalable_allocation_mode </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>param</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">intptr_t </td>
-          <td class="paramname"><em>value</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<p>Set TBB allocator-specific allocation modes. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga3b4ff39555cd9e929fce2958325cd8ea"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void* __TBB_EXPORTED_FUNC scalable_calloc </td>
-          <td>(</td>
-          <td class="paramtype">size_t </td>
-          <td class="paramname"><em>nobj</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">size_t </td>
-          <td class="paramname"><em>size</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<p>The "calloc" analogue complementing scalable_malloc. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga2ad3952b8c4dd7d293e02ae18fc37b84"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void __TBB_EXPORTED_FUNC scalable_free </td>
-          <td>(</td>
-          <td class="paramtype">void * </td>
-          <td class="paramname"><em>ptr</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<p>The "free" analogue to discard a previously allocated piece of memory. </p>
-
-<p>Referenced by <a class="el" href="a00129.html#a0632b19f25e5d5f86f18b3101925f488">tbb::scalable_allocator< T >::deallocate()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ga2a5bdc71439a70b20f2eadf6e1a489e1"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void* __TBB_EXPORTED_FUNC scalable_malloc </td>
-          <td>(</td>
-          <td class="paramtype">size_t </td>
-          <td class="paramname"><em>size</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<p>The "malloc" analogue to allocate block of memory of size bytes. </p>
-
-<p>Referenced by <a class="el" href="a00129.html#acf24945c12dc0586dfb1f8638daf7838">tbb::scalable_allocator< T >::allocate()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ga2b718206e50acb6392b86e4877d98213"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">size_t __TBB_EXPORTED_FUNC scalable_msize </td>
-          <td>(</td>
-          <td class="paramtype">void * </td>
-          <td class="paramname"><em>ptr</em>)</td><td></td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<p>The analogue of <em>msize/malloc_size/malloc_usable_size. Returns the usable size of a memory block previously allocated by scalable</em>*, or 0 (zero) if ptr does not point to such a block. </p>
-
-</div>
-</div>
-<a class="anchor" id="gaf117b4994f719d539804da8dd115e28c"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int __TBB_EXPORTED_FUNC scalable_posix_memalign </td>
-          <td>(</td>
-          <td class="paramtype">void ** </td>
-          <td class="paramname"><em>memptr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">size_t </td>
-          <td class="paramname"><em>alignment</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">size_t </td>
-          <td class="paramname"><em>size</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<p>The "posix_memalign" analogue. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga40d6e0bc19cdfa3005b2b935c62077a1"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void* __TBB_EXPORTED_FUNC scalable_realloc </td>
-          <td>(</td>
-          <td class="paramtype">void * </td>
-          <td class="paramname"><em>ptr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">size_t </td>
-          <td class="paramname"><em>size</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<p>The "realloc" analogue complementing scalable_malloc. </p>
-
-</div>
-</div>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00258.html b/doc/html/a00258.html
deleted file mode 100644
index 5a6de93..0000000
--- a/doc/html/a00258.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>Synchronization</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#typedef-members">Typedefs</a>  </div>
-  <div class="headertitle">
-<div class="title">Synchronization</div>  </div>
-</div><!--header-->
-<div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00018.html">tbb::atomic< T ></a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Primary template for atomic.  <a href="a00018.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00099.html">tbb::mutex</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Wrapper around the platform's native reader-writer lock.  <a href="a00099.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00101.html">tbb::null_mutex</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A mutex which does nothing.  <a href="a00101.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html">tbb::null_rw_mutex</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A rw mutex which does nothing.  <a href="a00102.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00111.html">tbb::queuing_mutex</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Queuing mutex with local-only spinning.  <a href="a00111.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00112.html">tbb::queuing_rw_mutex</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Queuing reader-writer mutex with local-only spinning.  <a href="a00112.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00113.html">tbb::interface5::reader_writer_lock</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Writer-preference reader-writer lock with local-only spinning on readers.  <a href="a00113.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html">tbb::recursive_mutex</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00145.html">tbb::spin_mutex</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A lock that occupies a single byte.  <a href="a00145.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Fast, unfair, spinning reader-writer lock with backoff and writer-preference.  <a href="a00146.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
-Typedefs</h2></td></tr>
-<tr class="memitem:ga69722571e9e4406693c4a1379f0b47eb"><td class="memItemLeft" align="right" valign="top">typedef <br class="typebreak"/>
-interface7::internal::padded_mutex<br class="typebreak"/>
-< interface7::internal::x86_eliding_mutex, <br class="typebreak"/>
-false > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00258.html#ga69722571e9e4406693c4a1379f0b47eb">tbb::speculative_spin_mutex</a></td></tr>
-<tr class="memdesc:ga69722571e9e4406693c4a1379f0b47eb"><td class="mdescLeft"> </td><td class="mdescRight">A cross-platform spin mutex with speculative lock acquisition.  <a href="#ga69722571e9e4406693c4a1379f0b47eb">More...</a><br/></td></tr>
-<tr class="separator:ga69722571e9e4406693c4a1379f0b47eb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga97d0da95fd4f92af12de15e1a8b5c780"><td class="memItemLeft" align="right" valign="top">typedef <br class="typebreak"/>
-interface7::internal::padded_mutex<br class="typebreak"/>
-< tbb::interface8::internal::x86_rtm_rw_mutex, <br class="typebreak"/>
-true > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00258.html#ga97d0da95fd4f92af12de15e1a8b5c780">tbb::interface8::speculative_spin_rw_mutex</a></td></tr>
-<tr class="memdesc:ga97d0da95fd4f92af12de15e1a8b5c780"><td class="mdescLeft"> </td><td class="mdescRight">A cross-platform spin reader/writer mutex with speculative lock acquisition.  <a href="#ga97d0da95fd4f92af12de15e1a8b5c780">More...</a><br/></td></tr>
-<tr class="separator:ga97d0da95fd4f92af12de15e1a8b5c780"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<h2 class="groupheader">Typedef Documentation</h2>
-<a class="anchor" id="ga69722571e9e4406693c4a1379f0b47eb"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef interface7::internal::padded_mutex< spin_mutex, false > <a class="el" href="a00258.html#ga69722571e9e4406693c4a1379f0b47eb">tbb::speculative_spin_mutex</a></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>A cross-platform spin mutex with speculative lock acquisition. </p>
-<p>On platforms with proper HW support, this lock may speculatively execute its critical sections, using HW mechanisms to detect real data races and ensure atomicity of the critical sections. In particular, it uses Intel(R) Transactional Synchronization Extensions (Intel(R) TSX). Without such HW support, it behaves like a <a class="el" href="a00145.html" title="A lock that occupies a single byte. ">spin_mutex</a>. It should be used for locking short critical sections where the lock is co [...]
-
-</div>
-</div>
-<a class="anchor" id="ga97d0da95fd4f92af12de15e1a8b5c780"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef interface7::internal::padded_mutex< <a class="el" href="a00146.html">tbb::spin_rw_mutex</a>, true > <a class="el" href="a00258.html#ga97d0da95fd4f92af12de15e1a8b5c780">tbb::interface8::speculative_spin_rw_mutex</a></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>A cross-platform spin reader/writer mutex with speculative lock acquisition. </p>
-<p>On platforms with proper HW support, this lock may speculatively execute its critical sections, using HW mechanisms to detect real data races and ensure atomicity of the critical sections. In particular, it uses Intel(R) Transactional Synchronization Extensions (Intel(R) TSX). Without such HW support, it behaves like a spin_rw_mutex. It should be used for locking short critical sections where the lock is contended but the data it protects are not. </p>
-
-</div>
-</div>
-</div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00259.html b/doc/html/a00259.html
index 7b28d89..c3b8876 100644
--- a/doc/html/a00259.html
+++ b/doc/html/a00259.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>Timing</title>
+<title>Member List</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -20,30 +20,31 @@
       <li><a href="pages.html"><span>Related Pages</span></a></li>
       <li><a href="modules.html"><span>Modules</span></a></li>
       <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
       <li><a href="files.html"><span>Files</span></a></li>
     </ul>
   </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
 </div><!-- top -->
 <div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a>  </div>
   <div class="headertitle">
-<div class="title">Timing</div>  </div>
+<div class="title">__TBB_malloc_proxy_caller Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html">tbb::tick_count</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Absolute timestamp.  <a href="a00170.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-</div><!-- contents -->
+
+<p>This is the complete list of members for <a class="el" href="a00008.html">__TBB_malloc_proxy_caller</a>, including all inherited members.</p>
+<table class="directory">
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__TBB_malloc_proxy_caller</b>() (defined in <a class="el" href="a00008.html">__TBB_malloc_proxy_caller</a>)</td><td class="entry"><a class="el" href="a00008.html">__TBB_malloc_proxy_caller</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00260.html b/doc/html/a00260.html
index b0755da..abd02ba 100644
--- a/doc/html/a00260.html
+++ b/doc/html/a00260.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.4"/>
-<title>Task Scheduling</title>
+<title>Member List</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -20,30 +20,43 @@
       <li><a href="pages.html"><span>Related Pages</span></a></li>
       <li><a href="modules.html"><span>Modules</span></a></li>
       <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
       <li><a href="files.html"><span>Files</span></a></li>
     </ul>
   </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00230.html">rml</a></li><li class="navelem"><a class="el" href="a00079.html">MemPoolPolicy</a></li>  </ul>
+</div>
 </div><!-- top -->
 <div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a>  </div>
   <div class="headertitle">
-<div class="title">Task Scheduling</div>  </div>
+<div class="title">rml::MemPoolPolicy Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html">tbb::task_scheduler_init</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Class delimiting the scope of task scheduler activity.  <a href="a00156.html#details">More...</a><br/></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-</div><!-- contents -->
+
+<p>This is the complete list of members for <a class="el" href="a00079.html">rml::MemPoolPolicy</a>, including all inherited members.</p>
+<table class="directory">
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>fixedPool</b> (defined in <a class="el" href="a00079.html">rml::MemPoolPolicy</a>)</td><td class="entry"><a class="el" href="a00079.html">rml::MemPoolPolicy</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>granularity</b> (defined in <a class="el" href="a00079.html">rml::MemPoolPolicy</a>)</td><td class="entry"><a class="el" href="a00079.html">rml::MemPoolPolicy</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>keepAllMemory</b> (defined in <a class="el" href="a00079.html">rml::MemPoolPolicy</a>)</td><td class="entry"><a class="el" href="a00079.html">rml::MemPoolPolicy</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>MemPoolPolicy</b>(rawAllocType pAlloc_, rawFreeType pFree_, size_t granularity_=0, bool fixedPool_=false, bool keepAllMemory_=false) (defined in <a class="el" href="a00079.html">rml::MemPoolPolicy</a>)</td><td class="entry"><a class="el" href="a00079.html">rml::MemPoolPolicy</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pAlloc</b> (defined in <a class="el" href="a00079.html">rml::MemPoolPolicy</a>)</td><td class="entry"><a class="el" href="a00079.html">rml::MemPoolPolicy</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>pFree</b> (defined in <a class="el" href="a00079.html">rml::MemPoolPolicy</a>)</td><td class="entry"><a class="el" href="a00079.html">rml::MemPoolPolicy</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reserved</b> (defined in <a class="el" href="a00079.html">rml::MemPoolPolicy</a>)</td><td class="entry"><a class="el" href="a00079.html">rml::MemPoolPolicy</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>TBBMALLOC_POOL_VERSION</b> enum value (defined in <a class="el" href="a00079.html">rml::MemPoolPolicy</a>)</td><td class="entry"><a class="el" href="a00079.html">rml::MemPoolPolicy</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>version</b> (defined in <a class="el" href="a00079.html">rml::MemPoolPolicy</a>)</td><td class="entry"><a class="el" href="a00079.html">rml::MemPoolPolicy</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00261.html b/doc/html/a00261.html
new file mode 100644
index 0000000..f88fb24
--- /dev/null
+++ b/doc/html/a00261.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.4"/>
+<title>Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.4 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00014.html">aligned_space</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">tbb::aligned_space< T, N > Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="a00014.html">tbb::aligned_space< T, N ></a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="a00014.html#a3525dbbac0d4eaedfe18bc57b7760857">begin</a>()</td><td class="entry"><a class="el" href="a00014.html">tbb::aligned_space< T, N ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00014.html#ae95620e1159984a2670bd418ed4748d0">end</a>()</td><td class="entry"><a class="el" href="a00014.html">tbb::aligned_space< T, N ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<hr>
+<p></p>
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00262.html b/doc/html/a00262.html
index 98f187f..6d28d71 100644
--- a/doc/html/a00262.html
+++ b/doc/html/a00262.html
@@ -31,20 +31,27 @@
       <li><a href="functions.html"><span>Class Members</span></a></li>
     </ul>
   </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00015.html">atomic</a></li>  </ul>
+</div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">__TBB_malloc_proxy_caller Member List</div>  </div>
+<div class="title">tbb::atomic< T > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00009.html">__TBB_malloc_proxy_caller</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00015.html">tbb::atomic< T ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__TBB_malloc_proxy_caller</b>() (defined in <a class="el" href="a00009.html">__TBB_malloc_proxy_caller</a>)</td><td class="entry"><a class="el" href="a00009.html">__TBB_malloc_proxy_caller</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>atomic</b>()=default (defined in <a class="el" href="a00015.html">tbb::atomic< T ></a>)</td><td class="entry"><a class="el" href="a00015.html">tbb::atomic< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>atomic</b>(T arg) (defined in <a class="el" href="a00015.html">tbb::atomic< T ></a>)</td><td class="entry"><a class="el" href="a00015.html">tbb::atomic< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(T rhs) (defined in <a class="el" href="a00015.html">tbb::atomic< T ></a>)</td><td class="entry"><a class="el" href="a00015.html">tbb::atomic< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const atomic< T > &rhs) (defined in <a class="el" href="a00015.html">tbb::atomic< T ></a>)</td><td class="entry"><a class="el" href="a00015.html">tbb::atomic< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00263.html b/doc/html/a00263.html
index 3c9cde8..3b0a740 100644
--- a/doc/html/a00263.html
+++ b/doc/html/a00263.html
@@ -33,30 +33,25 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00237.html">rml</a></li><li class="navelem"><a class="el" href="a00095.html">MemPoolPolicy</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00016.html">atomic< void * ></a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">rml::MemPoolPolicy Member List</div>  </div>
+<div class="title">tbb::atomic< void * > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00095.html">rml::MemPoolPolicy</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00016.html">tbb::atomic< void * ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>fixedPool</b> (defined in <a class="el" href="a00095.html">rml::MemPoolPolicy</a>)</td><td class="entry"><a class="el" href="a00095.html">rml::MemPoolPolicy</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>granularity</b> (defined in <a class="el" href="a00095.html">rml::MemPoolPolicy</a>)</td><td class="entry"><a class="el" href="a00095.html">rml::MemPoolPolicy</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>keepAllMemory</b> (defined in <a class="el" href="a00095.html">rml::MemPoolPolicy</a>)</td><td class="entry"><a class="el" href="a00095.html">rml::MemPoolPolicy</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>MemPoolPolicy</b>(rawAllocType pAlloc_, rawFreeType pFree_, size_t granularity_=0, bool fixedPool_=false, bool keepAllMemory_=false) (defined in <a class="el" href="a00095.html">rml::MemPoolPolicy</a>)</td><td class="entry"><a class="el" href="a00095.html">rml::MemPoolPolicy</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pAlloc</b> (defined in <a class="el" href="a00095.html">rml::MemPoolPolicy</a>)</td><td class="entry"><a class="el" href="a00095.html">rml::MemPoolPolicy</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>pFree</b> (defined in <a class="el" href="a00095.html">rml::MemPoolPolicy</a>)</td><td class="entry"><a class="el" href="a00095.html">rml::MemPoolPolicy</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reserved</b> (defined in <a class="el" href="a00095.html">rml::MemPoolPolicy</a>)</td><td class="entry"><a class="el" href="a00095.html">rml::MemPoolPolicy</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>TBBMALLOC_POOL_VERSION</b> enum value (defined in <a class="el" href="a00095.html">rml::MemPoolPolicy</a>)</td><td class="entry"><a class="el" href="a00095.html">rml::MemPoolPolicy</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>version</b> (defined in <a class="el" href="a00095.html">rml::MemPoolPolicy</a>)</td><td class="entry"><a class="el" href="a00095.html">rml::MemPoolPolicy</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>atomic</b>()=default (defined in <a class="el" href="a00016.html">tbb::atomic< void * ></a>)</td><td class="entry"><a class="el" href="a00016.html">tbb::atomic< void * ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>atomic</b>(void *arg) (defined in <a class="el" href="a00016.html">tbb::atomic< void * ></a>)</td><td class="entry"><a class="el" href="a00016.html">tbb::atomic< void * ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(void *rhs) (defined in <a class="el" href="a00016.html">tbb::atomic< void * ></a>)</td><td class="entry"><a class="el" href="a00016.html">tbb::atomic< void * ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const atomic< void * > &rhs) (defined in <a class="el" href="a00016.html">tbb::atomic< void * ></a>)</td><td class="entry"><a class="el" href="a00016.html">tbb::atomic< void * ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00264.html b/doc/html/a00264.html
index 39f0ccd..7b6b298 100644
--- a/doc/html/a00264.html
+++ b/doc/html/a00264.html
@@ -33,23 +33,36 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00015.html">aligned_space</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00022.html">blocked_range</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::aligned_space< T, N > Member List</div>  </div>
+<div class="title">tbb::blocked_range< Value > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00015.html">tbb::aligned_space< T, N ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00022.html">tbb::blocked_range< Value ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00015.html#a3525dbbac0d4eaedfe18bc57b7760857">begin</a>()</td><td class="entry"><a class="el" href="a00015.html">tbb::aligned_space< T, N ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00015.html#ae95620e1159984a2670bd418ed4748d0">end</a>()</td><td class="entry"><a class="el" href="a00015.html">tbb::aligned_space< T, N ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00022.html#ae225fa10454b0fa33533dfb56f5060a2">begin</a>() const </td><td class="entry"><a class="el" href="a00022.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00022.html#aad176ab2cbd0bd73c3c2065761af3ccc">blocked_range</a>()</td><td class="entry"><a class="el" href="a00022.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00022.html#a49a97576004711b7159170fcaf488e4e">blocked_range</a>(Value begin_, Value end_, size_type grainsize_=1)</td><td class="entry"><a class="el" href="a00022.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00022.html#a75cae12286f4d5492970ea630a9783b9">blocked_range</a>(blocked_range &r, split)</td><td class="entry"><a class="el" href="a00022.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00022.html#a1f53fbb10b8b04a515f382704b00ed14">blocked_range</a>(blocked_range &r, proportional_split &proportion)</td><td class="entry"><a class="el" href="a00022.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>blocked_range2d</b> (defined in <a class="el" href="a00022.html">tbb::blocked_range< Value ></a>)</td><td class="entry"><a class="el" href="a00022.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>blocked_range3d</b> (defined in <a class="el" href="a00022.html">tbb::blocked_range< Value ></a>)</td><td class="entry"><a class="el" href="a00022.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00022.html#ad56ca70af46acf8870b4970d8a809791">const_iterator</a> typedef</td><td class="entry"><a class="el" href="a00022.html">tbb::blocked_range< Value ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00022.html#a59dec03416b3fefbf69600f798177710">empty</a>() const </td><td class="entry"><a class="el" href="a00022.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00022.html#a99f829599d3e51b181a30b4cd57b06c6">end</a>() const </td><td class="entry"><a class="el" href="a00022.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00022.html#ab408f3cf90c85fa9203df5641a2f9bb1">grainsize</a>() const </td><td class="entry"><a class="el" href="a00022.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00022.html#ad90ad1db0d4d9a301ef1c9e17712e8a0">is_divisible</a>() const </td><td class="entry"><a class="el" href="a00022.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00022.html#ae2b0210e2468092b408123adeb54b01c">is_splittable_in_proportion</a></td><td class="entry"><a class="el" href="a00022.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00022.html#a347ef8caa40edca3b7f475f182281140">size</a>() const </td><td class="entry"><a class="el" href="a00022.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00022.html#a89b300cecd9d617e4ee801c786756e55">size_type</a> typedef</td><td class="entry"><a class="el" href="a00022.html">tbb::blocked_range< Value ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00265.html b/doc/html/a00265.html
index 43b9cd0..2da75a8 100644
--- a/doc/html/a00265.html
+++ b/doc/html/a00265.html
@@ -33,25 +33,33 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00018.html">atomic</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00023.html">blocked_range2d</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::atomic< T > Member List</div>  </div>
+<div class="title">tbb::blocked_range2d< RowValue, ColValue > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00018.html">tbb::atomic< T ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00023.html">tbb::blocked_range2d< RowValue, ColValue ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>atomic</b>()=default (defined in <a class="el" href="a00018.html">tbb::atomic< T ></a>)</td><td class="entry"><a class="el" href="a00018.html">tbb::atomic< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>atomic</b>(T arg) (defined in <a class="el" href="a00018.html">tbb::atomic< T ></a>)</td><td class="entry"><a class="el" href="a00018.html">tbb::atomic< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(T rhs) (defined in <a class="el" href="a00018.html">tbb::atomic< T ></a>)</td><td class="entry"><a class="el" href="a00018.html">tbb::atomic< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const atomic< T > &rhs) (defined in <a class="el" href="a00018.html">tbb::atomic< T ></a>)</td><td class="entry"><a class="el" href="a00018.html">tbb::atomic< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>blocked_range2d</b>(RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize, ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize) (defined in <a class="el" href="a00023.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a00023.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="entry"><span cla [...]
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>blocked_range2d</b>(RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end) (defined in <a class="el" href="a00023.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a00023.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>blocked_range2d</b>(blocked_range2d &r, split) (defined in <a class="el" href="a00023.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a00023.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>blocked_range2d</b>(blocked_range2d &r, proportional_split &proportion) (defined in <a class="el" href="a00023.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a00023.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>col_range_type</b> typedef (defined in <a class="el" href="a00023.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a00023.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00023.html#af3bccfaf90126b285491096f78ca9473">cols</a>() const </td><td class="entry"><a class="el" href="a00023.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>do_split</b>(blocked_range2d &r, Split &split_obj) (defined in <a class="el" href="a00023.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a00023.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00023.html#a5805972c8c41b2681d286f9c9771cf52">empty</a>() const </td><td class="entry"><a class="el" href="a00023.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00023.html#ac84c6cc2ff8b0974ffa719fed804f586">is_divisible</a>() const </td><td class="entry"><a class="el" href="a00023.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00023.html#aa0519760654368000f7ebc87d9bfe898">is_splittable_in_proportion</a></td><td class="entry"><a class="el" href="a00023.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00023.html#ada609b296a9af0591cc34761b8538100">row_range_type</a> typedef</td><td class="entry"><a class="el" href="a00023.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00023.html#a4f7299e74c40df57dee2433c07ce65ae">rows</a>() const </td><td class="entry"><a class="el" href="a00023.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00266.html b/doc/html/a00266.html
index eee1a56..86abe65 100644
--- a/doc/html/a00266.html
+++ b/doc/html/a00266.html
@@ -33,25 +33,35 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00019.html">atomic< void * ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00024.html">blocked_range3d</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::atomic< void * > Member List</div>  </div>
+<div class="title">tbb::blocked_range3d< PageValue, RowValue, ColValue > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00019.html">tbb::atomic< void * ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00024.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>atomic</b>()=default (defined in <a class="el" href="a00019.html">tbb::atomic< void * ></a>)</td><td class="entry"><a class="el" href="a00019.html">tbb::atomic< void * ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>atomic</b>(void *arg) (defined in <a class="el" href="a00019.html">tbb::atomic< void * ></a>)</td><td class="entry"><a class="el" href="a00019.html">tbb::atomic< void * ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(void *rhs) (defined in <a class="el" href="a00019.html">tbb::atomic< void * ></a>)</td><td class="entry"><a class="el" href="a00019.html">tbb::atomic< void * ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const atomic< void * > &rhs) (defined in <a class="el" href="a00019.html">tbb::atomic< void * ></a>)</td><td class="entry"><a class="el" href="a00019.html">tbb::atomic< void * ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>blocked_range3d</b>(PageValue page_begin, PageValue page_end, RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end) (defined in <a class="el" href="a00024.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>blocked_range3d</b>(PageValue page_begin, PageValue page_end, typename page_range_type::size_type page_grainsize, RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize, ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize) (defined in <a class="el" href="a00024.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a0002 [...]
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>blocked_range3d</b>(blocked_range3d &r, split) (defined in <a class="el" href="a00024.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>blocked_range3d</b>(blocked_range3d &r, proportional_split &proportion) (defined in <a class="el" href="a00024.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>col_range_type</b> typedef (defined in <a class="el" href="a00024.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00024.html#a308d7089a1d53ff26770a7040ed817cd">cols</a>() const </td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>do_split</b>(blocked_range3d &r, Split &split_obj) (defined in <a class="el" href="a00024.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00024.html#aea992e0cd3d105f964a633b1a0a1a05f">empty</a>() const </td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00024.html#a0fce6bcae6269c37623c3a2cdbb8bcf0">is_divisible</a>() const </td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00024.html#a5940c1bd6ba0e8184ef83dea0ae56884">is_splittable_in_proportion</a></td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00024.html#a8cdc866378a12ce198da870d0439676f">page_range_type</a> typedef</td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00024.html#a5b794fd53ba92106aeafa4eed85731d4">pages</a>() const </td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>row_range_type</b> typedef (defined in <a class="el" href="a00024.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00024.html#aeac1def585af81467573f30ebb42cb4f">rows</a>() const </td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00267.html b/doc/html/a00267.html
index c288e98..bcc61a2 100644
--- a/doc/html/a00267.html
+++ b/doc/html/a00267.html
@@ -33,36 +33,40 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00024.html">blocked_range</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00027.html">cache_aligned_allocator</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::blocked_range< Value > Member List</div>  </div>
+<div class="title">tbb::cache_aligned_allocator< T > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00024.html">tbb::blocked_range< Value ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00024.html#ae225fa10454b0fa33533dfb56f5060a2">begin</a>() const </td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00024.html#aad176ab2cbd0bd73c3c2065761af3ccc">blocked_range</a>()</td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00024.html#a49a97576004711b7159170fcaf488e4e">blocked_range</a>(Value begin_, Value end_, size_type grainsize_=1)</td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00024.html#a75cae12286f4d5492970ea630a9783b9">blocked_range</a>(blocked_range &r, split)</td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00024.html#a1f53fbb10b8b04a515f382704b00ed14">blocked_range</a>(blocked_range &r, proportional_split &proportion)</td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>blocked_range2d</b> (defined in <a class="el" href="a00024.html">tbb::blocked_range< Value ></a>)</td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>blocked_range3d</b> (defined in <a class="el" href="a00024.html">tbb::blocked_range< Value ></a>)</td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00024.html#ad56ca70af46acf8870b4970d8a809791">const_iterator</a> typedef</td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range< Value ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00024.html#a59dec03416b3fefbf69600f798177710">empty</a>() const </td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00024.html#a99f829599d3e51b181a30b4cd57b06c6">end</a>() const </td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00024.html#ab408f3cf90c85fa9203df5641a2f9bb1">grainsize</a>() const </td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00024.html#ad90ad1db0d4d9a301ef1c9e17712e8a0">is_divisible</a>() const </td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00024.html#ae2b0210e2468092b408123adeb54b01c">is_splittable_in_proportion</a></td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00024.html#a347ef8caa40edca3b7f475f182281140">size</a>() const </td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range< Value ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00024.html#a89b300cecd9d617e4ee801c786756e55">size_type</a> typedef</td><td class="entry"><a class="el" href="a00024.html">tbb::blocked_range< Value ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>address</b>(reference x) const  (defined in <a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>address</b>(const_reference x) const  (defined in <a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00027.html#a99d05096f80877849cb31d80247e0f85">allocate</a>(size_type n, const void *hint=0)</td><td class="entry"><a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>cache_aligned_allocator</b>() (defined in <a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cache_aligned_allocator</b>(const cache_aligned_allocator &) (defined in <a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>cache_aligned_allocator</b>(const cache_aligned_allocator< U > &) (defined in <a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00027.html#ab316f80a66b991801b4ec4ea88b852d9">construct</a>(U *p, Args &&...args)</td><td class="entry"><a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>construct</b>(pointer p, value_type &&value) (defined in <a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>construct</b>(pointer p, const value_type &value) (defined in <a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00027.html#a7f7310e046c4b6b8618864de8e27a471">deallocate</a>(pointer p, size_type)</td><td class="entry"><a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00027.html#af2fd054d055403d4ea669fd3af661cc8">destroy</a>(pointer p)</td><td class="entry"><a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00027.html#a4b945b3180ea3dfe16dfa048f4591c6d">max_size</a>() const </td><td class="entry"><a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00027.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00268.html b/doc/html/a00268.html
index bb7e23c..a52daba 100644
--- a/doc/html/a00268.html
+++ b/doc/html/a00268.html
@@ -33,33 +33,22 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00025.html">blocked_range2d</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00027.html">cache_aligned_allocator</a></li><li class="navelem"><a class="el" href="a00112.html">rebind</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::blocked_range2d< RowValue, ColValue > Member List</div>  </div>
+<div class="title">tbb::cache_aligned_allocator< T >::rebind< U > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00025.html">tbb::blocked_range2d< RowValue, ColValue ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00112.html">tbb::cache_aligned_allocator< T >::rebind< U ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>blocked_range2d</b>(RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize, ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize) (defined in <a class="el" href="a00025.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a00025.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="entry"><span cla [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>blocked_range2d</b>(RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end) (defined in <a class="el" href="a00025.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a00025.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>blocked_range2d</b>(blocked_range2d &r, split) (defined in <a class="el" href="a00025.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a00025.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>blocked_range2d</b>(blocked_range2d &r, proportional_split &proportion) (defined in <a class="el" href="a00025.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a00025.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>col_range_type</b> typedef (defined in <a class="el" href="a00025.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a00025.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00025.html#af3bccfaf90126b285491096f78ca9473">cols</a>() const </td><td class="entry"><a class="el" href="a00025.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>do_split</b>(blocked_range2d &r, Split &split_obj) (defined in <a class="el" href="a00025.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a00025.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00025.html#a5805972c8c41b2681d286f9c9771cf52">empty</a>() const </td><td class="entry"><a class="el" href="a00025.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00025.html#ac84c6cc2ff8b0974ffa719fed804f586">is_divisible</a>() const </td><td class="entry"><a class="el" href="a00025.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00025.html#aa0519760654368000f7ebc87d9bfe898">is_splittable_in_proportion</a></td><td class="entry"><a class="el" href="a00025.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00025.html#ada609b296a9af0591cc34761b8538100">row_range_type</a> typedef</td><td class="entry"><a class="el" href="a00025.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00025.html#a4f7299e74c40df57dee2433c07ce65ae">rows</a>() const </td><td class="entry"><a class="el" href="a00025.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>other</b> typedef (defined in <a class="el" href="a00112.html">tbb::cache_aligned_allocator< T >::rebind< U ></a>)</td><td class="entry"><a class="el" href="a00112.html">tbb::cache_aligned_allocator< T >::rebind< U ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00269.html b/doc/html/a00269.html
index 242503b..1ff0ec4 100644
--- a/doc/html/a00269.html
+++ b/doc/html/a00269.html
@@ -33,35 +33,24 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00026.html">blocked_range3d</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00028.html">cache_aligned_allocator< void ></a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::blocked_range3d< PageValue, RowValue, ColValue > Member List</div>  </div>
+<div class="title">tbb::cache_aligned_allocator< void > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00026.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00028.html">tbb::cache_aligned_allocator< void ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>blocked_range3d</b>(PageValue page_begin, PageValue page_end, RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end) (defined in <a class="el" href="a00026.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a00026.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>blocked_range3d</b>(PageValue page_begin, PageValue page_end, typename page_range_type::size_type page_grainsize, RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize, ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize) (defined in <a class="el" href="a00026.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a0002 [...]
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>blocked_range3d</b>(blocked_range3d &r, split) (defined in <a class="el" href="a00026.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a00026.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>blocked_range3d</b>(blocked_range3d &r, proportional_split &proportion) (defined in <a class="el" href="a00026.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a00026.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>col_range_type</b> typedef (defined in <a class="el" href="a00026.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a00026.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00026.html#a308d7089a1d53ff26770a7040ed817cd">cols</a>() const </td><td class="entry"><a class="el" href="a00026.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>do_split</b>(blocked_range3d &r, Split &split_obj) (defined in <a class="el" href="a00026.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a00026.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00026.html#aea992e0cd3d105f964a633b1a0a1a05f">empty</a>() const </td><td class="entry"><a class="el" href="a00026.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00026.html#a0fce6bcae6269c37623c3a2cdbb8bcf0">is_divisible</a>() const </td><td class="entry"><a class="el" href="a00026.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00026.html#a5940c1bd6ba0e8184ef83dea0ae56884">is_splittable_in_proportion</a></td><td class="entry"><a class="el" href="a00026.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00026.html#a8cdc866378a12ce198da870d0439676f">page_range_type</a> typedef</td><td class="entry"><a class="el" href="a00026.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00026.html#a5b794fd53ba92106aeafa4eed85731d4">pages</a>() const </td><td class="entry"><a class="el" href="a00026.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>row_range_type</b> typedef (defined in <a class="el" href="a00026.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td class="entry"><a class="el" href="a00026.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00026.html#aeac1def585af81467573f30ebb42cb4f">rows</a>() const </td><td class="entry"><a class="el" href="a00026.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00028.html">tbb::cache_aligned_allocator< void ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::cache_aligned_allocator< void ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00028.html">tbb::cache_aligned_allocator< void ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::cache_aligned_allocator< void ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00028.html">tbb::cache_aligned_allocator< void ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::cache_aligned_allocator< void ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00270.html b/doc/html/a00270.html
index c778cc8..5159889 100644
--- a/doc/html/a00270.html
+++ b/doc/html/a00270.html
@@ -33,40 +33,22 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00032.html">cache_aligned_allocator</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00028.html">cache_aligned_allocator< void ></a></li><li class="navelem"><a class="el" href="a00109.html">rebind</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::cache_aligned_allocator< T > Member List</div>  </div>
+<div class="title">tbb::cache_aligned_allocator< void >::rebind< U > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00109.html">tbb::cache_aligned_allocator< void >::rebind< U ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>address</b>(reference x) const  (defined in <a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>address</b>(const_reference x) const  (defined in <a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00032.html#a99d05096f80877849cb31d80247e0f85">allocate</a>(size_type n, const void *hint=0)</td><td class="entry"><a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>cache_aligned_allocator</b>() (defined in <a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cache_aligned_allocator</b>(const cache_aligned_allocator &) (defined in <a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>cache_aligned_allocator</b>(const cache_aligned_allocator< U > &) (defined in <a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00032.html#ab316f80a66b991801b4ec4ea88b852d9">construct</a>(U *p, Args &&...args)</td><td class="entry"><a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>construct</b>(pointer p, value_type &&value) (defined in <a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>construct</b>(pointer p, const value_type &value) (defined in <a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00032.html#a7f7310e046c4b6b8618864de8e27a471">deallocate</a>(pointer p, size_type)</td><td class="entry"><a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00032.html#af2fd054d055403d4ea669fd3af661cc8">destroy</a>(pointer p)</td><td class="entry"><a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00032.html#a4b945b3180ea3dfe16dfa048f4591c6d">max_size</a>() const </td><td class="entry"><a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00032.html">tbb::cache_aligned_allocator< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>other</b> typedef (defined in <a class="el" href="a00109.html">tbb::cache_aligned_allocator< void >::rebind< U ></a>)</td><td class="entry"><a class="el" href="a00109.html">tbb::cache_aligned_allocator< void >::rebind< U ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00271.html b/doc/html/a00271.html
index d1706bb..83be3ce 100644
--- a/doc/html/a00271.html
+++ b/doc/html/a00271.html
@@ -33,22 +33,33 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00032.html">cache_aligned_allocator</a></li><li class="navelem"><a class="el" href="a00121.html">rebind</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00033.html">combinable</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::cache_aligned_allocator< T >::rebind< U > Member List</div>  </div>
+<div class="title">tbb::combinable< T > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00121.html">tbb::cache_aligned_allocator< T >::rebind< U ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00033.html">tbb::combinable< T ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>other</b> typedef (defined in <a class="el" href="a00121.html">tbb::cache_aligned_allocator< T >::rebind< U ></a>)</td><td class="entry"><a class="el" href="a00121.html">tbb::cache_aligned_allocator< T >::rebind< U ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>clear</b>() (defined in <a class="el" href="a00033.html">tbb::combinable< T ></a>)</td><td class="entry"><a class="el" href="a00033.html">tbb::combinable< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>combinable</b>() (defined in <a class="el" href="a00033.html">tbb::combinable< T ></a>)</td><td class="entry"><a class="el" href="a00033.html">tbb::combinable< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>combinable</b>(finit _finit) (defined in <a class="el" href="a00033.html">tbb::combinable< T ></a>)</td><td class="entry"><a class="el" href="a00033.html">tbb::combinable< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>combinable</b>(const combinable &other) (defined in <a class="el" href="a00033.html">tbb::combinable< T ></a>)</td><td class="entry"><a class="el" href="a00033.html">tbb::combinable< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>combinable</b>(combinable &&other) (defined in <a class="el" href="a00033.html">tbb::combinable< T ></a>)</td><td class="entry"><a class="el" href="a00033.html">tbb::combinable< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>combine</b>(combine_func_t f_combine) (defined in <a class="el" href="a00033.html">tbb::combinable< T ></a>)</td><td class="entry"><a class="el" href="a00033.html">tbb::combinable< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>combine_each</b>(combine_func_t f_combine) (defined in <a class="el" href="a00033.html">tbb::combinable< T ></a>)</td><td class="entry"><a class="el" href="a00033.html">tbb::combinable< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>local</b>() (defined in <a class="el" href="a00033.html">tbb::combinable< T ></a>)</td><td class="entry"><a class="el" href="a00033.html">tbb::combinable< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>local</b>(bool &exists) (defined in <a class="el" href="a00033.html">tbb::combinable< T ></a>)</td><td class="entry"><a class="el" href="a00033.html">tbb::combinable< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const combinable &other) (defined in <a class="el" href="a00033.html">tbb::combinable< T ></a>)</td><td class="entry"><a class="el" href="a00033.html">tbb::combinable< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(combinable &&other) (defined in <a class="el" href="a00033.html">tbb::combinable< T ></a>)</td><td class="entry"><a class="el" href="a00033.html">tbb::combinable< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00033.html#a52f00cf262d768048db72ab73c8f3ca4">~combinable</a>()</td><td class="entry"><a class="el" href="a00033.html">tbb::combinable< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00272.html b/doc/html/a00272.html
index 911ebb6..c6a9b20 100644
--- a/doc/html/a00272.html
+++ b/doc/html/a00272.html
@@ -33,24 +33,55 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00033.html">cache_aligned_allocator< void ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00035.html">concurrent_bounded_queue</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::cache_aligned_allocator< void > Member List</div>  </div>
+<div class="title">tbb::concurrent_bounded_queue< T, A > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00033.html">tbb::cache_aligned_allocator< void ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00033.html">tbb::cache_aligned_allocator< void ></a>)</td><td class="entry"><a class="el" href="a00033.html">tbb::cache_aligned_allocator< void ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00033.html">tbb::cache_aligned_allocator< void ></a>)</td><td class="entry"><a class="el" href="a00033.html">tbb::cache_aligned_allocator< void ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00033.html">tbb::cache_aligned_allocator< void ></a>)</td><td class="entry"><a class="el" href="a00033.html">tbb::cache_aligned_allocator< void ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00035.html#a77a755d94cabf5208905d10d5b57419c">abort</a>()</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00035.html#acbfceb845de1c770e2b56409f09b0364">allocator_type</a> typedef</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00035.html#a526487063242569685af8c8d778d39e0">capacity</a>() const </td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00035.html#a246be3920e079ea4847933f106baa98f">clear</a>()</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00035.html#a85f8a800cae02b601f36ad7a655a0126">concurrent_bounded_queue</a>(const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00035.html#aad6fd2353d64c2c31d074cd99df58c02">concurrent_bounded_queue</a>(const concurrent_bounded_queue &src, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00035.html#a228b9d3bf3158a9379748894a93fbe55">concurrent_bounded_queue</a>(concurrent_bounded_queue &&src)</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_bounded_queue</b>(concurrent_bounded_queue &&src, const allocator_type &a) (defined in <a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00035.html#afcfdc998e106fdb7b2dfa5df880cd9cf">concurrent_bounded_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_iterator</b> typedef (defined in <a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00035.html#af838e520ce0db2c22369748c019b11cb">const_reference</a> typedef</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00035.html#a72725361e050c5a981035a20ef1b773e">difference_type</a> typedef</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>emplace</b>(Arguments &&...args) (defined in <a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00035.html#a8c59578f28c5fb4718b0eff43776e879">empty</a>() const </td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00035.html#aaeba11bbcd368a7a3a6e6e2dd3082c9c">get_allocator</a>() const </td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::concurrent_queue_iterator</b> (defined in <a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00035.html#a87926c31967a918ce80690a9ed5d6fa8">pop</a>(T &destination)</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00035.html#ae5e9051772bbc93b2ccb8fd0a98a21f5">push</a>(const T &source)</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00035.html#a62a03e9c185562254ecb4104f38c106d">push</a>(T &&source)</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00035.html#a5fa4002bcd265d9d3ed305e3b686f1da">reference</a> typedef</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00035.html#a768699675813575eec08c1f43afda395">set_capacity</a>(size_type new_capacity)</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00035.html#a9d6c20fd8c193c12b6a7b0c3101fd966">size</a>() const </td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00035.html#ae73fa352d781bdb9d01bfb77f2a8bc28">size_type</a> typedef</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>try_emplace</b>(Arguments &&...args) (defined in <a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00035.html#a3086cb4dcdeee245ef5cf34f72fb3e10">try_pop</a>(T &destination)</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00035.html#a03d93a240841a21788396bebd71c51bd">try_push</a>(const T &source)</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00035.html#a93f35e9d9381629e0a2993f9fdd96d92">try_push</a>(T &&source)</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>unsafe_begin</b>() (defined in <a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>unsafe_begin</b>() const  (defined in <a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>unsafe_end</b>() (defined in <a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>unsafe_end</b>() const  (defined in <a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00035.html#a6eb564625fef03dd9a5881d5d4e52f9f">value_type</a> typedef</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00035.html#ab1291bf6837ecfb8836c24dde5dd80b5">~concurrent_bounded_queue</a>()</td><td class="entry"><a class="el" href="a00035.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00273.html b/doc/html/a00273.html
index 3d2f7b6..d233345 100644
--- a/doc/html/a00273.html
+++ b/doc/html/a00273.html
@@ -33,22 +33,99 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00033.html">cache_aligned_allocator< void ></a></li><li class="navelem"><a class="el" href="a00114.html">rebind</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00046.html">concurrent_vector</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::cache_aligned_allocator< void >::rebind< U > Member List</div>  </div>
+<div class="title">tbb::concurrent_vector< T, A > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00114.html">tbb::cache_aligned_allocator< void >::rebind< U ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>other</b> typedef (defined in <a class="el" href="a00114.html">tbb::cache_aligned_allocator< void >::rebind< U ></a>)</td><td class="entry"><a class="el" href="a00114.html">tbb::cache_aligned_allocator< void >::rebind< U ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocator_type</b> typedef (defined in <a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a87355dce93d0882aa73333a35c9b367c">assign</a>(size_type n, const_reference t)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#a7bb5399a8499f88cf859eab39f0ed9e0">assign</a>(I first, I last)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a584d6cda5794441b19d4f02bde399dff">assign</a>(std::initializer_list< T > init_list)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#a629a29eb21e528414b9d5c9becfe05cd">at</a>(size_type index)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#ae4dc6c1b55c0e0b73f0a8675ef2b60a4">at</a>(size_type index) const </td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#aaee3ddf1d05238a8a6887f6d824b76f8">back</a>()</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#acf66eb1e82dbcb430d9926a23711c720">back</a>() const </td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#ab55636c80368ad7d400f3200313fcf5f">begin</a>()</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#ad3eb33d1b10a988a87cc708ceb08f3a9">begin</a>() const </td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#a96c2ae9dfedc24d62554feb627df76c3">capacity</a>() const </td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a7a1c5441fa480c07ef37d9206b6260cc">cbegin</a>() const </td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#a9ea80faf139feb54d6576c036e4ba898">cend</a>() const </td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a526ba408fb3064ef846940d633b8f365">clear</a>()</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#a5bd95c2241653c760704a92b2c887a48">concurrent_vector</a>(const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#aa25dccd2f65fbfa148e92d01a11c20ff">concurrent_vector</a>(std::initializer_list< T > init_list, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#a03b5a0e9069b30dc4e2e5fc2f191ccb6">concurrent_vector</a>(const concurrent_vector &vector, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#aafb048cfda83d0e7803888ead76c06a9">concurrent_vector</a>(concurrent_vector &&source)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_vector</b>(concurrent_vector &&source, const allocator_type &a) (defined in <a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#abb0e376a31c3fdb91beaaa98441735f5">concurrent_vector</a>(const concurrent_vector< T, M > &vector, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#aa898a39aad73711ceca70cd465dc0b4f">concurrent_vector</a>(size_type n)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a736c6e35f1df11625636968ea546e21f">concurrent_vector</a>(size_type n, const_reference t, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#ae0d384ec56032d18f63e26960029d3ce">concurrent_vector</a>(I first, I last, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_iterator</b> typedef (defined in <a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_range_type</b> typedef (defined in <a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_reverse_iterator</b> typedef (defined in <a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_reverse_iterator</b> typedef (defined in <a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>copy_range</b>(void *dst, const void *p_type_erased_iterator, size_type n) (defined in <a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#a2627db4a7949522ea4727320b23a6348">crbegin</a>() const </td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#ad097225c529dbb24cc0e13a444ab4752">crend</a>() const </td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#afae4c378515b89cc2b0a11c8cf1bcc50">emplace_back</a>(Args &&...args)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#aa3f6774107e65642f73c0dcc9a962fe7">empty</a>() const </td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#aad2c07653375e4a5f89c33b375eda610">end</a>()</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#a6a4ad0795a19d94df24595e748f0b193">end</a>() const </td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a9bfc6d733cf543280b691ed8d7b7908a">front</a>()</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#a9067259572c2c41d014840d0f9d3cdce">front</a>() const </td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a88b62a9614d3f2b59c9c7c1a2143fb1e">get_allocator</a>() const </td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#ab89c2db5358048debdc282ff995caffb">grow_by</a>(size_type delta)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#aa11fc991cda82cf93789fce31b37a16c">grow_by</a>(size_type delta, const_reference t)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#acfd74483ff523213b78f44fb914c8eb4">grow_by</a>(I first, I last)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a95f57f1529e0ebd1ca6bd2d60003fcab">grow_by</a>(std::initializer_list< T > init_list)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#ae9ef9895e88f9bf036b379035c18f035">grow_to_at_least</a>(size_type n)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a422d9689ed72a5ef2b6b72f28e4143a2">grow_to_at_least</a>(size_type n, const_reference t)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::vector_iterator</b> (defined in <a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_vector_base</b>() const  (defined in <a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a0ec9c3ab3360e04bdaa5174956a3206d">max_size</a>() const </td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#a920384aece0eb8beea3049956320ec91">operator=</a>(const concurrent_vector &vector)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a0d26889a94203cdb5f5460fade7497c7">operator=</a>(concurrent_vector &&other)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#a1fe7f0b60bbf304890a9293a35e6819d">operator=</a>(const concurrent_vector< T, M > &vector)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a8498a1335a3bbac2f4925a4e8d70cdb8">operator=</a>(std::initializer_list< T > init_list)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#a3097cb46511504acfc9de7da5235f4a6">operator[]</a>(size_type index)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#abd6ca67f2f97fafca48395af2e693e73">operator[]</a>(size_type index) const </td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#ad68d1675fedef232bfae35f200ba007d">push_back</a>(const_reference item)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#ac29a9f08c0fac7c20786c7b8f4f0321a">push_back</a>(T &&item)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a8201f65735edcc28aeec95b6e73d75b6">range</a>(size_t grainsize=1)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#a8fcc32ec9ccb48c3327a88fe288c7538">range</a>(size_t grainsize=1) const </td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>range_type</b> typedef (defined in <a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#a9a2f8dce0adcbef8e29273c23723a78e">rbegin</a>()</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a976b0bed19de9ab93f78c10184a4e38f">rbegin</a>() const </td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a618f38279a370c18f73ea2c29ded9cb9">rend</a>()</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#abdb98e17cb65d9c445d7fd1e662c2699">rend</a>() const </td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a0b3284684328c58c0228c9a697ef3594">reserve</a>(size_type n)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#a65e53a98a1e1fdb515fdc2b84e2314e8">resize</a>(size_type n)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a941917a8a840ff08ce8810ca9476ff46">resize</a>(size_type n, const_reference t)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reverse_iterator</b> typedef (defined in <a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>reverse_iterator</b> typedef (defined in <a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00046.html#aba805b5225ad3399550f78ea15e51e93">shrink_to_fit</a>()</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a803268c16e3688ff4681251947d257c7">size</a>() const </td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#a8603bd57324fb6b60ba006884c95279d">swap</a>(concurrent_vector &vector)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00046.html#ab5bcaededc9a00e7aaecd6c262fd0b38">~concurrent_vector</a>()</td><td class="entry"><a class="el" href="a00046.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00274.html b/doc/html/a00274.html
index b51d0e8..0a6a5b0 100644
--- a/doc/html/a00274.html
+++ b/doc/html/a00274.html
@@ -33,31 +33,25 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00036.html">combinable</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00046.html">concurrent_vector</a></li><li class="navelem"><b>push_back_helper</b></li><li class="navelem"><a class="el" href="a00057.html">element_construction_guard</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::combinable< T > Member List</div>  </div>
+<div class="title">tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00036.html">tbb::combinable< T ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00057.html">tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>clear</b>() (defined in <a class="el" href="a00036.html">tbb::combinable< T ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::combinable< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>combinable</b>() (defined in <a class="el" href="a00036.html">tbb::combinable< T ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::combinable< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>combinable</b>(finit _finit) (defined in <a class="el" href="a00036.html">tbb::combinable< T ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::combinable< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>combinable</b>(const combinable &other) (defined in <a class="el" href="a00036.html">tbb::combinable< T ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::combinable< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>combine</b>(combine_func_t f_combine) (defined in <a class="el" href="a00036.html">tbb::combinable< T ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::combinable< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>combine_each</b>(combine_func_t f_combine) (defined in <a class="el" href="a00036.html">tbb::combinable< T ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::combinable< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>local</b>() (defined in <a class="el" href="a00036.html">tbb::combinable< T ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::combinable< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>local</b>(bool &exists) (defined in <a class="el" href="a00036.html">tbb::combinable< T ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::combinable< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(const combinable &other) (defined in <a class="el" href="a00036.html">tbb::combinable< T ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::combinable< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00036.html#a52f00cf262d768048db72ab73c8f3ca4">~combinable</a>()</td><td class="entry"><a class="el" href="a00036.html">tbb::combinable< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>dismiss</b>() (defined in <a class="el" href="a00057.html">tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard</a>)</td><td class="entry"><a class="el" href="a00057.html">tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>element</b> (defined in <a class="el" href="a00057.html">tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard</a>)</td><td class="entry"><a class="el" href="a00057.html">tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>element_construction_guard</b>(pointer an_element) (defined in <a class="el" href="a00057.html">tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard</a>)</td><td class="entry"><a class="el" href="a00057.html">tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>~element_construction_guard</b>() (defined in <a class="el" href="a00057.html">tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard</a>)</td><td class="entry"><a class="el" href="a00057.html">tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00275.html b/doc/html/a00275.html
index 953a1ff..2afdcca 100644
--- a/doc/html/a00275.html
+++ b/doc/html/a00275.html
@@ -33,23 +33,38 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00163.html">tbb_hash_compare</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00082.html">mutex</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::tbb_hash_compare< Key > Member List</div>  </div>
+<div class="title">tbb::mutex Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00163.html">tbb::tbb_hash_compare< Key ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00082.html">tbb::mutex</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>equal</b>(const Key &a, const Key &b) (defined in <a class="el" href="a00163.html">tbb::tbb_hash_compare< Key ></a>)</td><td class="entry"><a class="el" href="a00163.html">tbb::tbb_hash_compare< Key ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>hash</b>(const Key &a) (defined in <a class="el" href="a00163.html">tbb::tbb_hash_compare< Key ></a>)</td><td class="entry"><a class="el" href="a00163.html">tbb::tbb_hash_compare< Key ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DESTROYED</b> enum value (defined in <a class="el" href="a00082.html">tbb::mutex</a>)</td><td class="entry"><a class="el" href="a00082.html">tbb::mutex</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>HELD</b> enum value (defined in <a class="el" href="a00082.html">tbb::mutex</a>)</td><td class="entry"><a class="el" href="a00082.html">tbb::mutex</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>INITIALIZED</b> enum value (defined in <a class="el" href="a00082.html">tbb::mutex</a>)</td><td class="entry"><a class="el" href="a00082.html">tbb::mutex</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_fair_mutex</b> (defined in <a class="el" href="a00082.html">tbb::mutex</a>)</td><td class="entry"><a class="el" href="a00082.html">tbb::mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_recursive_mutex</b> (defined in <a class="el" href="a00082.html">tbb::mutex</a>)</td><td class="entry"><a class="el" href="a00082.html">tbb::mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_rw_mutex</b> (defined in <a class="el" href="a00082.html">tbb::mutex</a>)</td><td class="entry"><a class="el" href="a00082.html">tbb::mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00082.html#a95ff02ee699b34696001db4003c11a3a">lock</a>()</td><td class="entry"><a class="el" href="a00082.html">tbb::mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00082.html#ad1b280c954ffc8b8b3e63e4ee4144035">mutex</a>()</td><td class="entry"><a class="el" href="a00082.html">tbb::mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>native_handle</b>() (defined in <a class="el" href="a00082.html">tbb::mutex</a>)</td><td class="entry"><a class="el" href="a00082.html">tbb::mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00082.html#abbe0cd12246121753ace00a5a12a90b0">native_handle_type</a> typedef</td><td class="entry"><a class="el" href="a00082.html">tbb::mutex</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>native_handle_type</b> typedef (defined in <a class="el" href="a00082.html">tbb::mutex</a>)</td><td class="entry"><a class="el" href="a00082.html">tbb::mutex</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>scoped_lock</b> (defined in <a class="el" href="a00082.html">tbb::mutex</a>)</td><td class="entry"><a class="el" href="a00082.html">tbb::mutex</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00082.html#a0857c4596d7d5de09fe402ccd41d3e42">set_state</a>(state_t to)</td><td class="entry"><a class="el" href="a00082.html">tbb::mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>state_t</b> enum name (defined in <a class="el" href="a00082.html">tbb::mutex</a>)</td><td class="entry"><a class="el" href="a00082.html">tbb::mutex</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00082.html#a480283933106941125717499f9c5ad42">try_lock</a>()</td><td class="entry"><a class="el" href="a00082.html">tbb::mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00082.html#a721eeae7ba16f8b92535f4534b583874">unlock</a>()</td><td class="entry"><a class="el" href="a00082.html">tbb::mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~mutex</b>() (defined in <a class="el" href="a00082.html">tbb::mutex</a>)</td><td class="entry"><a class="el" href="a00082.html">tbb::mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00276.html b/doc/html/a00276.html
index ea6b9a0..db48fdd 100644
--- a/doc/html/a00276.html
+++ b/doc/html/a00276.html
@@ -33,55 +33,28 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00042.html">concurrent_bounded_queue</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00082.html">mutex</a></li><li class="navelem"><a class="el" href="a00135.html">scoped_lock</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::concurrent_bounded_queue< T, A > Member List</div>  </div>
+<div class="title">tbb::mutex::scoped_lock Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00135.html">tbb::mutex::scoped_lock</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00042.html#a77a755d94cabf5208905d10d5b57419c">abort</a>()</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00042.html#acbfceb845de1c770e2b56409f09b0364">allocator_type</a> typedef</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00042.html#a526487063242569685af8c8d778d39e0">capacity</a>() const </td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00042.html#a246be3920e079ea4847933f106baa98f">clear</a>()</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00042.html#a85f8a800cae02b601f36ad7a655a0126">concurrent_bounded_queue</a>(const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00042.html#aad6fd2353d64c2c31d074cd99df58c02">concurrent_bounded_queue</a>(const concurrent_bounded_queue &src, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00042.html#a228b9d3bf3158a9379748894a93fbe55">concurrent_bounded_queue</a>(concurrent_bounded_queue &&src)</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_bounded_queue</b>(concurrent_bounded_queue &&src, const allocator_type &a) (defined in <a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00042.html#afcfdc998e106fdb7b2dfa5df880cd9cf">concurrent_bounded_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_iterator</b> typedef (defined in <a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00042.html#af838e520ce0db2c22369748c019b11cb">const_reference</a> typedef</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00042.html#a72725361e050c5a981035a20ef1b773e">difference_type</a> typedef</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>emplace</b>(Arguments &&...args) (defined in <a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00042.html#a8c59578f28c5fb4718b0eff43776e879">empty</a>() const </td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00042.html#aaeba11bbcd368a7a3a6e6e2dd3082c9c">get_allocator</a>() const </td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::concurrent_queue_iterator</b> (defined in <a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00042.html#a87926c31967a918ce80690a9ed5d6fa8">pop</a>(T &destination)</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00042.html#ae5e9051772bbc93b2ccb8fd0a98a21f5">push</a>(const T &source)</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00042.html#a62a03e9c185562254ecb4104f38c106d">push</a>(T &&source)</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00042.html#a5fa4002bcd265d9d3ed305e3b686f1da">reference</a> typedef</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00042.html#a768699675813575eec08c1f43afda395">set_capacity</a>(size_type new_capacity)</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00042.html#a9d6c20fd8c193c12b6a7b0c3101fd966">size</a>() const </td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00042.html#ae73fa352d781bdb9d01bfb77f2a8bc28">size_type</a> typedef</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>try_emplace</b>(Arguments &&...args) (defined in <a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00042.html#a3086cb4dcdeee245ef5cf34f72fb3e10">try_pop</a>(T &destination)</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00042.html#a03d93a240841a21788396bebd71c51bd">try_push</a>(const T &source)</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00042.html#a93f35e9d9381629e0a2993f9fdd96d92">try_push</a>(T &&source)</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>unsafe_begin</b>() (defined in <a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>unsafe_begin</b>() const  (defined in <a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>unsafe_end</b>() (defined in <a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>unsafe_end</b>() const  (defined in <a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00042.html#a6eb564625fef03dd9a5881d5d4e52f9f">value_type</a> typedef</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00042.html#ab1291bf6837ecfb8836c24dde5dd80b5">~concurrent_bounded_queue</a>()</td><td class="entry"><a class="el" href="a00042.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00135.html#a9fce3e2e9f592315dc9c1ada72ae5e3c">acquire</a>(mutex &mutex)</td><td class="entry"><a class="el" href="a00135.html">tbb::mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>mutex</b> (defined in <a class="el" href="a00135.html">tbb::mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00135.html">tbb::mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00135.html#a1a1590281ccca912229a689d920fd78a">release</a>()</td><td class="entry"><a class="el" href="a00135.html">tbb::mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00135.html#a23122745ccd5fc2498fcbbd5ced09e06">scoped_lock</a>()</td><td class="entry"><a class="el" href="a00135.html">tbb::mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00135.html#ab7c2074543443824790433d3d6c3fece">scoped_lock</a>(mutex &mutex)</td><td class="entry"><a class="el" href="a00135.html">tbb::mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00135.html#a46f983371aa852d2427ce69f9a571f78">try_acquire</a>(mutex &mutex)</td><td class="entry"><a class="el" href="a00135.html">tbb::mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00135.html#a08c399ee0bb9762039b29e570ec46fe9">~scoped_lock</a>()</td><td class="entry"><a class="el" href="a00135.html">tbb::mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00277.html b/doc/html/a00277.html
index b9f0253..8855640 100644
--- a/doc/html/a00277.html
+++ b/doc/html/a00277.html
@@ -33,99 +33,25 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00053.html">concurrent_vector</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00084.html">null_mutex</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::concurrent_vector< T, A > Member List</div>  </div>
+<div class="title">tbb::null_mutex Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00084.html">tbb::null_mutex</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocator_type</b> typedef (defined in <a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#a87355dce93d0882aa73333a35c9b367c">assign</a>(size_type n, const_reference t)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#a7bb5399a8499f88cf859eab39f0ed9e0">assign</a>(I first, I last)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#a584d6cda5794441b19d4f02bde399dff">assign</a>(std::initializer_list< T > init_list)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#a629a29eb21e528414b9d5c9becfe05cd">at</a>(size_type index)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#ae4dc6c1b55c0e0b73f0a8675ef2b60a4">at</a>(size_type index) const </td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#aaee3ddf1d05238a8a6887f6d824b76f8">back</a>()</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#acf66eb1e82dbcb430d9926a23711c720">back</a>() const </td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#ab55636c80368ad7d400f3200313fcf5f">begin</a>()</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#ad3eb33d1b10a988a87cc708ceb08f3a9">begin</a>() const </td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#a96c2ae9dfedc24d62554feb627df76c3">capacity</a>() const </td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#a7a1c5441fa480c07ef37d9206b6260cc">cbegin</a>() const </td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#a9ea80faf139feb54d6576c036e4ba898">cend</a>() const </td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#a526ba408fb3064ef846940d633b8f365">clear</a>()</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#a5bd95c2241653c760704a92b2c887a48">concurrent_vector</a>(const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#aa25dccd2f65fbfa148e92d01a11c20ff">concurrent_vector</a>(std::initializer_list< T > init_list, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#a03b5a0e9069b30dc4e2e5fc2f191ccb6">concurrent_vector</a>(const concurrent_vector &vector, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#aafb048cfda83d0e7803888ead76c06a9">concurrent_vector</a>(concurrent_vector &&source)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_vector</b>(concurrent_vector &&source, const allocator_type &a) (defined in <a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#abb0e376a31c3fdb91beaaa98441735f5">concurrent_vector</a>(const concurrent_vector< T, M > &vector, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#aa898a39aad73711ceca70cd465dc0b4f">concurrent_vector</a>(size_type n)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#a736c6e35f1df11625636968ea546e21f">concurrent_vector</a>(size_type n, const_reference t, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#ae0d384ec56032d18f63e26960029d3ce">concurrent_vector</a>(I first, I last, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_iterator</b> typedef (defined in <a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_range_type</b> typedef (defined in <a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_reverse_iterator</b> typedef (defined in <a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_reverse_iterator</b> typedef (defined in <a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>copy_range</b>(void *dst, const void *p_type_erased_iterator, size_type n) (defined in <a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#a2627db4a7949522ea4727320b23a6348">crbegin</a>() const </td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#ad097225c529dbb24cc0e13a444ab4752">crend</a>() const </td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#afae4c378515b89cc2b0a11c8cf1bcc50">emplace_back</a>(Args &&...args)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#aa3f6774107e65642f73c0dcc9a962fe7">empty</a>() const </td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#aad2c07653375e4a5f89c33b375eda610">end</a>()</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#a6a4ad0795a19d94df24595e748f0b193">end</a>() const </td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#a9bfc6d733cf543280b691ed8d7b7908a">front</a>()</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#a9067259572c2c41d014840d0f9d3cdce">front</a>() const </td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#a88b62a9614d3f2b59c9c7c1a2143fb1e">get_allocator</a>() const </td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#ab89c2db5358048debdc282ff995caffb">grow_by</a>(size_type delta)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#aa11fc991cda82cf93789fce31b37a16c">grow_by</a>(size_type delta, const_reference t)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#acfd74483ff523213b78f44fb914c8eb4">grow_by</a>(I first, I last)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#a95f57f1529e0ebd1ca6bd2d60003fcab">grow_by</a>(std::initializer_list< T > init_list)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#ae9ef9895e88f9bf036b379035c18f035">grow_to_at_least</a>(size_type n)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#a422d9689ed72a5ef2b6b72f28e4143a2">grow_to_at_least</a>(size_type n, const_reference t)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::vector_iterator</b> (defined in <a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_vector_base</b>() const  (defined in <a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#a0ec9c3ab3360e04bdaa5174956a3206d">max_size</a>() const </td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#a920384aece0eb8beea3049956320ec91">operator=</a>(const concurrent_vector &vector)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#a0d26889a94203cdb5f5460fade7497c7">operator=</a>(concurrent_vector &&other)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#a1fe7f0b60bbf304890a9293a35e6819d">operator=</a>(const concurrent_vector< T, M > &vector)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#a8498a1335a3bbac2f4925a4e8d70cdb8">operator=</a>(std::initializer_list< T > init_list)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#a3097cb46511504acfc9de7da5235f4a6">operator[]</a>(size_type index)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#abd6ca67f2f97fafca48395af2e693e73">operator[]</a>(size_type index) const </td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#ad68d1675fedef232bfae35f200ba007d">push_back</a>(const_reference item)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#ac29a9f08c0fac7c20786c7b8f4f0321a">push_back</a>(T &&item)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#a8201f65735edcc28aeec95b6e73d75b6">range</a>(size_t grainsize=1)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#a8fcc32ec9ccb48c3327a88fe288c7538">range</a>(size_t grainsize=1) const </td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>range_type</b> typedef (defined in <a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#a9a2f8dce0adcbef8e29273c23723a78e">rbegin</a>()</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#a976b0bed19de9ab93f78c10184a4e38f">rbegin</a>() const </td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#a618f38279a370c18f73ea2c29ded9cb9">rend</a>()</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#abdb98e17cb65d9c445d7fd1e662c2699">rend</a>() const </td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#a0b3284684328c58c0228c9a697ef3594">reserve</a>(size_type n)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#a65e53a98a1e1fdb515fdc2b84e2314e8">resize</a>(size_type n)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#a941917a8a840ff08ce8810ca9476ff46">resize</a>(size_type n, const_reference t)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reverse_iterator</b> typedef (defined in <a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reverse_iterator</b> typedef (defined in <a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00053.html#aba805b5225ad3399550f78ea15e51e93">shrink_to_fit</a>()</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#a803268c16e3688ff4681251947d257c7">size</a>() const </td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#a8603bd57324fb6b60ba006884c95279d">swap</a>(concurrent_vector &vector)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00053.html#ab5bcaededc9a00e7aaecd6c262fd0b38">~concurrent_vector</a>()</td><td class="entry"><a class="el" href="a00053.html">tbb::concurrent_vector< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_fair_mutex</b> (defined in <a class="el" href="a00084.html">tbb::null_mutex</a>)</td><td class="entry"><a class="el" href="a00084.html">tbb::null_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_recursive_mutex</b> (defined in <a class="el" href="a00084.html">tbb::null_mutex</a>)</td><td class="entry"><a class="el" href="a00084.html">tbb::null_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_rw_mutex</b> (defined in <a class="el" href="a00084.html">tbb::null_mutex</a>)</td><td class="entry"><a class="el" href="a00084.html">tbb::null_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>null_mutex</b>() (defined in <a class="el" href="a00084.html">tbb::null_mutex</a>)</td><td class="entry"><a class="el" href="a00084.html">tbb::null_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00278.html b/doc/html/a00278.html
index c5c53dc..1b126df 100644
--- a/doc/html/a00278.html
+++ b/doc/html/a00278.html
@@ -33,25 +33,27 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00053.html">concurrent_vector</a></li><li class="navelem"><b>push_back_helper</b></li><li class="navelem"><a class="el" href="a00060.html">element_construction_guard</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00084.html">null_mutex</a></li><li class="navelem"><a class="el" href="a00137.html">scoped_lock</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard Member List</div>  </div>
+<div class="title">tbb::null_mutex::scoped_lock Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00060.html">tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>dismiss</b>() (defined in <a class="el" href="a00060.html">tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard</a>)</td><td class="entry"><a class="el" href="a00060.html">tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>element</b> (defined in <a class="el" href="a00060.html">tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard</a>)</td><td class="entry"><a class="el" href="a00060.html">tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>element_construction_guard</b>(pointer an_element) (defined in <a class="el" href="a00060.html">tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard</a>)</td><td class="entry"><a class="el" href="a00060.html">tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~element_construction_guard</b>() (defined in <a class="el" href="a00060.html">tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard</a>)</td><td class="entry"><a class="el" href="a00060.html">tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>acquire</b>(null_mutex &) (defined in <a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>release</b>() (defined in <a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scoped_lock</b>() (defined in <a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>scoped_lock</b>(null_mutex &) (defined in <a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>try_acquire</b>(null_mutex &) (defined in <a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>~scoped_lock</b>() (defined in <a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00279.html b/doc/html/a00279.html
index 2a8a705..0564cc9 100644
--- a/doc/html/a00279.html
+++ b/doc/html/a00279.html
@@ -33,38 +33,25 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00099.html">mutex</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00085.html">null_rw_mutex</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::mutex Member List</div>  </div>
+<div class="title">tbb::null_rw_mutex Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00099.html">tbb::mutex</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00085.html">tbb::null_rw_mutex</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DESTROYED</b> enum value (defined in <a class="el" href="a00099.html">tbb::mutex</a>)</td><td class="entry"><a class="el" href="a00099.html">tbb::mutex</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>HELD</b> enum value (defined in <a class="el" href="a00099.html">tbb::mutex</a>)</td><td class="entry"><a class="el" href="a00099.html">tbb::mutex</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>INITIALIZED</b> enum value (defined in <a class="el" href="a00099.html">tbb::mutex</a>)</td><td class="entry"><a class="el" href="a00099.html">tbb::mutex</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_fair_mutex</b> (defined in <a class="el" href="a00099.html">tbb::mutex</a>)</td><td class="entry"><a class="el" href="a00099.html">tbb::mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_recursive_mutex</b> (defined in <a class="el" href="a00099.html">tbb::mutex</a>)</td><td class="entry"><a class="el" href="a00099.html">tbb::mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_rw_mutex</b> (defined in <a class="el" href="a00099.html">tbb::mutex</a>)</td><td class="entry"><a class="el" href="a00099.html">tbb::mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00099.html#a95ff02ee699b34696001db4003c11a3a">lock</a>()</td><td class="entry"><a class="el" href="a00099.html">tbb::mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00099.html#ad1b280c954ffc8b8b3e63e4ee4144035">mutex</a>()</td><td class="entry"><a class="el" href="a00099.html">tbb::mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>native_handle</b>() (defined in <a class="el" href="a00099.html">tbb::mutex</a>)</td><td class="entry"><a class="el" href="a00099.html">tbb::mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00099.html#abbe0cd12246121753ace00a5a12a90b0">native_handle_type</a> typedef</td><td class="entry"><a class="el" href="a00099.html">tbb::mutex</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>native_handle_type</b> typedef (defined in <a class="el" href="a00099.html">tbb::mutex</a>)</td><td class="entry"><a class="el" href="a00099.html">tbb::mutex</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>scoped_lock</b> (defined in <a class="el" href="a00099.html">tbb::mutex</a>)</td><td class="entry"><a class="el" href="a00099.html">tbb::mutex</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00099.html#a0857c4596d7d5de09fe402ccd41d3e42">set_state</a>(state_t to)</td><td class="entry"><a class="el" href="a00099.html">tbb::mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>state_t</b> enum name (defined in <a class="el" href="a00099.html">tbb::mutex</a>)</td><td class="entry"><a class="el" href="a00099.html">tbb::mutex</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00099.html#a480283933106941125717499f9c5ad42">try_lock</a>()</td><td class="entry"><a class="el" href="a00099.html">tbb::mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00099.html#a721eeae7ba16f8b92535f4534b583874">unlock</a>()</td><td class="entry"><a class="el" href="a00099.html">tbb::mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~mutex</b>() (defined in <a class="el" href="a00099.html">tbb::mutex</a>)</td><td class="entry"><a class="el" href="a00099.html">tbb::mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_fair_mutex</b> (defined in <a class="el" href="a00085.html">tbb::null_rw_mutex</a>)</td><td class="entry"><a class="el" href="a00085.html">tbb::null_rw_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_recursive_mutex</b> (defined in <a class="el" href="a00085.html">tbb::null_rw_mutex</a>)</td><td class="entry"><a class="el" href="a00085.html">tbb::null_rw_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_rw_mutex</b> (defined in <a class="el" href="a00085.html">tbb::null_rw_mutex</a>)</td><td class="entry"><a class="el" href="a00085.html">tbb::null_rw_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>null_rw_mutex</b>() (defined in <a class="el" href="a00085.html">tbb::null_rw_mutex</a>)</td><td class="entry"><a class="el" href="a00085.html">tbb::null_rw_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00280.html b/doc/html/a00280.html
index eb5362a..88019c6 100644
--- a/doc/html/a00280.html
+++ b/doc/html/a00280.html
@@ -33,28 +33,29 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00099.html">mutex</a></li><li class="navelem"><a class="el" href="a00140.html">scoped_lock</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00085.html">null_rw_mutex</a></li><li class="navelem"><a class="el" href="a00129.html">scoped_lock</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::mutex::scoped_lock Member List</div>  </div>
+<div class="title">tbb::null_rw_mutex::scoped_lock Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00140.html">tbb::mutex::scoped_lock</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00129.html">tbb::null_rw_mutex::scoped_lock</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00140.html#a9fce3e2e9f592315dc9c1ada72ae5e3c">acquire</a>(mutex &mutex)</td><td class="entry"><a class="el" href="a00140.html">tbb::mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>mutex</b> (defined in <a class="el" href="a00140.html">tbb::mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00140.html">tbb::mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00140.html#a1a1590281ccca912229a689d920fd78a">release</a>()</td><td class="entry"><a class="el" href="a00140.html">tbb::mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00140.html#a23122745ccd5fc2498fcbbd5ced09e06">scoped_lock</a>()</td><td class="entry"><a class="el" href="a00140.html">tbb::mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00140.html#ab7c2074543443824790433d3d6c3fece">scoped_lock</a>(mutex &mutex)</td><td class="entry"><a class="el" href="a00140.html">tbb::mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00140.html#a46f983371aa852d2427ce69f9a571f78">try_acquire</a>(mutex &mutex)</td><td class="entry"><a class="el" href="a00140.html">tbb::mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00140.html#a08c399ee0bb9762039b29e570ec46fe9">~scoped_lock</a>()</td><td class="entry"><a class="el" href="a00140.html">tbb::mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>acquire</b>(null_rw_mutex &, bool=true) (defined in <a class="el" href="a00129.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00129.html">tbb::null_rw_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>downgrade_to_reader</b>() (defined in <a class="el" href="a00129.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00129.html">tbb::null_rw_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>release</b>() (defined in <a class="el" href="a00129.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00129.html">tbb::null_rw_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>scoped_lock</b>() (defined in <a class="el" href="a00129.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00129.html">tbb::null_rw_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scoped_lock</b>(null_rw_mutex &, bool=true) (defined in <a class="el" href="a00129.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00129.html">tbb::null_rw_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>try_acquire</b>(null_rw_mutex &, bool=true) (defined in <a class="el" href="a00129.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00129.html">tbb::null_rw_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>upgrade_to_writer</b>() (defined in <a class="el" href="a00129.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00129.html">tbb::null_rw_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>~scoped_lock</b>() (defined in <a class="el" href="a00129.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00129.html">tbb::null_rw_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00281.html b/doc/html/a00281.html
index 41f9730..1d39e2a 100644
--- a/doc/html/a00281.html
+++ b/doc/html/a00281.html
@@ -33,25 +33,22 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00101.html">null_mutex</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00104.html">pre_scan_tag</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::null_mutex Member List</div>  </div>
+<div class="title">tbb::pre_scan_tag Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00101.html">tbb::null_mutex</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00104.html">tbb::pre_scan_tag</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_fair_mutex</b> (defined in <a class="el" href="a00101.html">tbb::null_mutex</a>)</td><td class="entry"><a class="el" href="a00101.html">tbb::null_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_recursive_mutex</b> (defined in <a class="el" href="a00101.html">tbb::null_mutex</a>)</td><td class="entry"><a class="el" href="a00101.html">tbb::null_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_rw_mutex</b> (defined in <a class="el" href="a00101.html">tbb::null_mutex</a>)</td><td class="entry"><a class="el" href="a00101.html">tbb::null_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>null_mutex</b>() (defined in <a class="el" href="a00101.html">tbb::null_mutex</a>)</td><td class="entry"><a class="el" href="a00101.html">tbb::null_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_final_scan</b>() (defined in <a class="el" href="a00104.html">tbb::pre_scan_tag</a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::pre_scan_tag</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00282.html b/doc/html/a00282.html
index b9dc0ee..b17c52d 100644
--- a/doc/html/a00282.html
+++ b/doc/html/a00282.html
@@ -33,27 +33,22 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00101.html">null_mutex</a></li><li class="navelem"><a class="el" href="a00137.html">scoped_lock</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00061.html">final_scan_tag</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::null_mutex::scoped_lock Member List</div>  </div>
+<div class="title">tbb::final_scan_tag Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00061.html">tbb::final_scan_tag</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>acquire</b>(null_mutex &) (defined in <a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>release</b>() (defined in <a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scoped_lock</b>() (defined in <a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>scoped_lock</b>(null_mutex &) (defined in <a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>try_acquire</b>(null_mutex &) (defined in <a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~scoped_lock</b>() (defined in <a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00137.html">tbb::null_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_final_scan</b>() (defined in <a class="el" href="a00061.html">tbb::final_scan_tag</a>)</td><td class="entry"><a class="el" href="a00061.html">tbb::final_scan_tag</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00283.html b/doc/html/a00283.html
index 2bed3af..e525167 100644
--- a/doc/html/a00283.html
+++ b/doc/html/a00283.html
@@ -33,25 +33,26 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00102.html">null_rw_mutex</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00102.html">parallel_while</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::null_rw_mutex Member List</div>  </div>
+<div class="title">tbb::parallel_while< Body > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00102.html">tbb::null_rw_mutex</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00102.html">tbb::parallel_while< Body ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_fair_mutex</b> (defined in <a class="el" href="a00102.html">tbb::null_rw_mutex</a>)</td><td class="entry"><a class="el" href="a00102.html">tbb::null_rw_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_recursive_mutex</b> (defined in <a class="el" href="a00102.html">tbb::null_rw_mutex</a>)</td><td class="entry"><a class="el" href="a00102.html">tbb::null_rw_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_rw_mutex</b> (defined in <a class="el" href="a00102.html">tbb::null_rw_mutex</a>)</td><td class="entry"><a class="el" href="a00102.html">tbb::null_rw_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>null_rw_mutex</b>() (defined in <a class="el" href="a00102.html">tbb::null_rw_mutex</a>)</td><td class="entry"><a class="el" href="a00102.html">tbb::null_rw_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00102.html#a4861989d7f5e3111d264d4d6013e8fe1">add</a>(const value_type &item)</td><td class="entry"><a class="el" href="a00102.html">tbb::parallel_while< Body ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00102.html#a220a7307358aa36802c8754ea45ca385">parallel_while</a>()</td><td class="entry"><a class="el" href="a00102.html">tbb::parallel_while< Body ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00102.html#a20607ba5faa958144787d980aa850c16">run</a>(Stream &stream, const Body &body)</td><td class="entry"><a class="el" href="a00102.html">tbb::parallel_while< Body ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00102.html#a2442f019427e608d46801376267e44a8">value_type</a> typedef</td><td class="entry"><a class="el" href="a00102.html">tbb::parallel_while< Body ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00102.html#ac2fd559c8a38639fa1ba97a0d5639ca8">~parallel_while</a>()</td><td class="entry"><a class="el" href="a00102.html">tbb::parallel_while< Body ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00284.html b/doc/html/a00284.html
index 3a67e8f..62b7b85 100644
--- a/doc/html/a00284.html
+++ b/doc/html/a00284.html
@@ -33,29 +33,26 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00102.html">null_rw_mutex</a></li><li class="navelem"><a class="el" href="a00138.html">scoped_lock</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00059.html">filter</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::null_rw_mutex::scoped_lock Member List</div>  </div>
+<div class="title">tbb::filter Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00138.html">tbb::null_rw_mutex::scoped_lock</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00059.html">tbb::filter</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>acquire</b>(null_rw_mutex &, bool=true) (defined in <a class="el" href="a00138.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00138.html">tbb::null_rw_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>downgrade_to_reader</b>() (defined in <a class="el" href="a00138.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00138.html">tbb::null_rw_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>release</b>() (defined in <a class="el" href="a00138.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00138.html">tbb::null_rw_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>scoped_lock</b>() (defined in <a class="el" href="a00138.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00138.html">tbb::null_rw_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scoped_lock</b>(null_rw_mutex &, bool=true) (defined in <a class="el" href="a00138.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00138.html">tbb::null_rw_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>try_acquire</b>(null_rw_mutex &, bool=true) (defined in <a class="el" href="a00138.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00138.html">tbb::null_rw_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>upgrade_to_writer</b>() (defined in <a class="el" href="a00138.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00138.html">tbb::null_rw_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~scoped_lock</b>() (defined in <a class="el" href="a00138.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00138.html">tbb::null_rw_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00059.html#aab9689e23a96c6c9bf1c8caae74d92ee">exact_exception_propagation</a></td><td class="entry"><a class="el" href="a00059.html">tbb::filter</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00059.html#a1382f216bd094064a18eb48ecc43c86b">filter_is_bound</a></td><td class="entry"><a class="el" href="a00059.html">tbb::filter</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00059.html#a091fcf6abc79edfa5c8bf01f742e2392">filter_is_out_of_order</a></td><td class="entry"><a class="el" href="a00059.html">tbb::filter</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00059.html#ae9dab2e01b0963b341ab04b59eec1475">filter_is_serial</a></td><td class="entry"><a class="el" href="a00059.html">tbb::filter</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00059.html#a6645ec56872b6ba2056dcaa467e292f7">filter_may_emit_null</a></td><td class="entry"><a class="el" href="a00059.html">tbb::filter</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00285.html b/doc/html/a00285.html
index 2ebbd5e..5938be1 100644
--- a/doc/html/a00285.html
+++ b/doc/html/a00285.html
@@ -33,23 +33,33 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00105.html">parallel_do_feeder</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00158.html">thread_bound_filter</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::parallel_do_feeder< Item > Member List</div>  </div>
+<div class="title">tbb::thread_bound_filter Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00105.html">tbb::parallel_do_feeder< Item ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00158.html">tbb::thread_bound_filter</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00105.html#ac095c6b1a32e9c0be010aa32875d7a63">add</a>(const Item &item)</td><td class="entry"><a class="el" href="a00105.html">tbb::parallel_do_feeder< Item ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::parallel_do_feeder_impl</b> (defined in <a class="el" href="a00105.html">tbb::parallel_do_feeder< Item ></a>)</td><td class="entry"><a class="el" href="a00105.html">tbb::parallel_do_feeder< Item ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>end_of_stream</b> enum value (defined in <a class="el" href="a00158.html">tbb::thread_bound_filter</a>)</td><td class="entry"><a class="el" href="a00158.html">tbb::thread_bound_filter</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00059.html#aab9689e23a96c6c9bf1c8caae74d92ee">exact_exception_propagation</a></td><td class="entry"><a class="el" href="a00059.html">tbb::filter</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00059.html#a1382f216bd094064a18eb48ecc43c86b">filter_is_bound</a></td><td class="entry"><a class="el" href="a00059.html">tbb::filter</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00059.html#a091fcf6abc79edfa5c8bf01f742e2392">filter_is_out_of_order</a></td><td class="entry"><a class="el" href="a00059.html">tbb::filter</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00059.html#ae9dab2e01b0963b341ab04b59eec1475">filter_is_serial</a></td><td class="entry"><a class="el" href="a00059.html">tbb::filter</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00059.html#a6645ec56872b6ba2056dcaa467e292f7">filter_may_emit_null</a></td><td class="entry"><a class="el" href="a00059.html">tbb::filter</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>item_not_available</b> enum value (defined in <a class="el" href="a00158.html">tbb::thread_bound_filter</a>)</td><td class="entry"><a class="el" href="a00158.html">tbb::thread_bound_filter</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00158.html#ac99258407f382d84568a510075074fc7">process_item</a>()</td><td class="entry"><a class="el" href="a00158.html">tbb::thread_bound_filter</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>result_type</b> enum name (defined in <a class="el" href="a00158.html">tbb::thread_bound_filter</a>)</td><td class="entry"><a class="el" href="a00158.html">tbb::thread_bound_filter</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>success</b> enum value (defined in <a class="el" href="a00158.html">tbb::thread_bound_filter</a>)</td><td class="entry"><a class="el" href="a00158.html">tbb::thread_bound_filter</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>thread_bound_filter</b>(mode filter_mode) (defined in <a class="el" href="a00158.html">tbb::thread_bound_filter</a>)</td><td class="entry"><a class="el" href="a00158.html">tbb::thread_bound_filter</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00158.html#a12cfa43c620066a8783529cc8519c6f9">try_process_item</a>()</td><td class="entry"><a class="el" href="a00158.html">tbb::thread_bound_filter</a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00286.html b/doc/html/a00286.html
index 4b33244..5288c2f 100644
--- a/doc/html/a00286.html
+++ b/doc/html/a00286.html
@@ -33,22 +33,33 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00108.html">pre_scan_tag</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00103.html">pipeline</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::pre_scan_tag Member List</div>  </div>
+<div class="title">tbb::pipeline Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00108.html">tbb::pre_scan_tag</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00103.html">tbb::pipeline</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_final_scan</b>() (defined in <a class="el" href="a00108.html">tbb::pre_scan_tag</a>)</td><td class="entry"><a class="el" href="a00108.html">tbb::pre_scan_tag</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00103.html#a8eb83014bd53b184e0ed50f120ca310b">add_filter</a>(filter &filter_)</td><td class="entry"><a class="el" href="a00103.html">tbb::pipeline</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00103.html#ae53edbda1771eeaa254d78ae6100a762">clear</a>()</td><td class="entry"><a class="el" href="a00103.html">tbb::pipeline</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>filter</b> (defined in <a class="el" href="a00103.html">tbb::pipeline</a>)</td><td class="entry"><a class="el" href="a00103.html">tbb::pipeline</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::pipeline_cleaner</b> (defined in <a class="el" href="a00103.html">tbb::pipeline</a>)</td><td class="entry"><a class="el" href="a00103.html">tbb::pipeline</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::pipeline_root_task</b> (defined in <a class="el" href="a00103.html">tbb::pipeline</a>)</td><td class="entry"><a class="el" href="a00103.html">tbb::pipeline</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::stage_task</b> (defined in <a class="el" href="a00103.html">tbb::pipeline</a>)</td><td class="entry"><a class="el" href="a00103.html">tbb::pipeline</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00103.html#afe7b7bd9b2617c2b69170675a478b2bd">pipeline</a>()</td><td class="entry"><a class="el" href="a00103.html">tbb::pipeline</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00103.html#ac9ee9080cfc080c40a7ee7cb03a62637">run</a>(size_t max_number_of_live_tokens)</td><td class="entry"><a class="el" href="a00103.html">tbb::pipeline</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00103.html#a270dba81f7dd9935be7f3d69db907ff4">run</a>(size_t max_number_of_live_tokens, tbb::task_group_context &context)</td><td class="entry"><a class="el" href="a00103.html">tbb::pipeline</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>tbb::interface6::internal::pipeline_proxy</b> (defined in <a class="el" href="a00103.html">tbb::pipeline</a>)</td><td class="entry"><a class="el" href="a00103.html">tbb::pipeline</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>thread_bound_filter</b> (defined in <a class="el" href="a00103.html">tbb::pipeline</a>)</td><td class="entry"><a class="el" href="a00103.html">tbb::pipeline</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00103.html#ac3a7b33217b3f3bb0682ec3a40fd2c39">~pipeline</a>()</td><td class="entry"><a class="el" href="a00103.html">tbb::pipeline</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00287.html b/doc/html/a00287.html
index f172e27..2b6fc2b 100644
--- a/doc/html/a00287.html
+++ b/doc/html/a00287.html
@@ -33,22 +33,26 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00064.html">final_scan_tag</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00106.html">queuing_mutex</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::final_scan_tag Member List</div>  </div>
+<div class="title">tbb::queuing_mutex Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00064.html">tbb::final_scan_tag</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00106.html">tbb::queuing_mutex</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_final_scan</b>() (defined in <a class="el" href="a00064.html">tbb::final_scan_tag</a>)</td><td class="entry"><a class="el" href="a00064.html">tbb::final_scan_tag</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_construct</b>() (defined in <a class="el" href="a00106.html">tbb::queuing_mutex</a>)</td><td class="entry"><a class="el" href="a00106.html">tbb::queuing_mutex</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_fair_mutex</b> (defined in <a class="el" href="a00106.html">tbb::queuing_mutex</a>)</td><td class="entry"><a class="el" href="a00106.html">tbb::queuing_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_recursive_mutex</b> (defined in <a class="el" href="a00106.html">tbb::queuing_mutex</a>)</td><td class="entry"><a class="el" href="a00106.html">tbb::queuing_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_rw_mutex</b> (defined in <a class="el" href="a00106.html">tbb::queuing_mutex</a>)</td><td class="entry"><a class="el" href="a00106.html">tbb::queuing_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00106.html#a0e58fce2062ae349a30b320b7fdc9155">queuing_mutex</a>()</td><td class="entry"><a class="el" href="a00106.html">tbb::queuing_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00288.html b/doc/html/a00288.html
index 7fff734..b3a274d 100644
--- a/doc/html/a00288.html
+++ b/doc/html/a00288.html
@@ -33,26 +33,27 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00106.html">parallel_while</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00106.html">queuing_mutex</a></li><li class="navelem"><a class="el" href="a00128.html">scoped_lock</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::parallel_while< Body > Member List</div>  </div>
+<div class="title">tbb::queuing_mutex::scoped_lock Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00106.html">tbb::parallel_while< Body ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00128.html">tbb::queuing_mutex::scoped_lock</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00106.html#a4861989d7f5e3111d264d4d6013e8fe1">add</a>(const value_type &item)</td><td class="entry"><a class="el" href="a00106.html">tbb::parallel_while< Body ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00106.html#a220a7307358aa36802c8754ea45ca385">parallel_while</a>()</td><td class="entry"><a class="el" href="a00106.html">tbb::parallel_while< Body ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00106.html#a20607ba5faa958144787d980aa850c16">run</a>(Stream &stream, const Body &body)</td><td class="entry"><a class="el" href="a00106.html">tbb::parallel_while< Body ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00106.html#a2442f019427e608d46801376267e44a8">value_type</a> typedef</td><td class="entry"><a class="el" href="a00106.html">tbb::parallel_while< Body ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00106.html#ac2fd559c8a38639fa1ba97a0d5639ca8">~parallel_while</a>()</td><td class="entry"><a class="el" href="a00106.html">tbb::parallel_while< Body ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00128.html#abf8aa7ccd48d54dcb53665700a17d02a">acquire</a>(queuing_mutex &m)</td><td class="entry"><a class="el" href="a00128.html">tbb::queuing_mutex::scoped_lock</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00128.html#aaa065e48b428b8d43e9bb931ba9e6f6c">release</a>()</td><td class="entry"><a class="el" href="a00128.html">tbb::queuing_mutex::scoped_lock</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00128.html#a0afe0107eb0aae613e726f67624d2fca">scoped_lock</a>()</td><td class="entry"><a class="el" href="a00128.html">tbb::queuing_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00128.html#aa82d9da0dcfe5b21f1c08473f8223105">scoped_lock</a>(queuing_mutex &m)</td><td class="entry"><a class="el" href="a00128.html">tbb::queuing_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00128.html#ab4800ba9e743cd91f152036a6689b0e9">try_acquire</a>(queuing_mutex &m)</td><td class="entry"><a class="el" href="a00128.html">tbb::queuing_mutex::scoped_lock</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00128.html#a469ec43836a8dd250ce0a22b02945630">~scoped_lock</a>()</td><td class="entry"><a class="el" href="a00128.html">tbb::queuing_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00289.html b/doc/html/a00289.html
index b2bbd12..509c3df 100644
--- a/doc/html/a00289.html
+++ b/doc/html/a00289.html
@@ -33,26 +33,27 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00062.html">filter</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00107.html">queuing_rw_mutex</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::filter Member List</div>  </div>
+<div class="title">tbb::queuing_rw_mutex Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00062.html">tbb::filter</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00107.html">tbb::queuing_rw_mutex</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00062.html#aab9689e23a96c6c9bf1c8caae74d92ee">exact_exception_propagation</a></td><td class="entry"><a class="el" href="a00062.html">tbb::filter</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00062.html#a1382f216bd094064a18eb48ecc43c86b">filter_is_bound</a></td><td class="entry"><a class="el" href="a00062.html">tbb::filter</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00062.html#a091fcf6abc79edfa5c8bf01f742e2392">filter_is_out_of_order</a></td><td class="entry"><a class="el" href="a00062.html">tbb::filter</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00062.html#ae9dab2e01b0963b341ab04b59eec1475">filter_is_serial</a></td><td class="entry"><a class="el" href="a00062.html">tbb::filter</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00062.html#a6645ec56872b6ba2056dcaa467e292f7">filter_may_emit_null</a></td><td class="entry"><a class="el" href="a00062.html">tbb::filter</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_construct</b>() (defined in <a class="el" href="a00107.html">tbb::queuing_rw_mutex</a>)</td><td class="entry"><a class="el" href="a00107.html">tbb::queuing_rw_mutex</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_fair_mutex</b> (defined in <a class="el" href="a00107.html">tbb::queuing_rw_mutex</a>)</td><td class="entry"><a class="el" href="a00107.html">tbb::queuing_rw_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_recursive_mutex</b> (defined in <a class="el" href="a00107.html">tbb::queuing_rw_mutex</a>)</td><td class="entry"><a class="el" href="a00107.html">tbb::queuing_rw_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_rw_mutex</b> (defined in <a class="el" href="a00107.html">tbb::queuing_rw_mutex</a>)</td><td class="entry"><a class="el" href="a00107.html">tbb::queuing_rw_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00107.html#a23de1ac415b6f54b778c8fd6ec6073e0">queuing_rw_mutex</a>()</td><td class="entry"><a class="el" href="a00107.html">tbb::queuing_rw_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00107.html#ae67fe828d7e07222e7876ef9fd780fcc">~queuing_rw_mutex</a>()</td><td class="entry"><a class="el" href="a00107.html">tbb::queuing_rw_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00290.html b/doc/html/a00290.html
index 9039570..5c0ec64 100644
--- a/doc/html/a00290.html
+++ b/doc/html/a00290.html
@@ -33,33 +33,29 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00165.html">thread_bound_filter</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00107.html">queuing_rw_mutex</a></li><li class="navelem"><a class="el" href="a00131.html">scoped_lock</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::thread_bound_filter Member List</div>  </div>
+<div class="title">tbb::queuing_rw_mutex::scoped_lock Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00165.html">tbb::thread_bound_filter</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00131.html">tbb::queuing_rw_mutex::scoped_lock</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>end_of_stream</b> enum value (defined in <a class="el" href="a00165.html">tbb::thread_bound_filter</a>)</td><td class="entry"><a class="el" href="a00165.html">tbb::thread_bound_filter</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00062.html#aab9689e23a96c6c9bf1c8caae74d92ee">exact_exception_propagation</a></td><td class="entry"><a class="el" href="a00062.html">tbb::filter</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00062.html#a1382f216bd094064a18eb48ecc43c86b">filter_is_bound</a></td><td class="entry"><a class="el" href="a00062.html">tbb::filter</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00062.html#a091fcf6abc79edfa5c8bf01f742e2392">filter_is_out_of_order</a></td><td class="entry"><a class="el" href="a00062.html">tbb::filter</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00062.html#ae9dab2e01b0963b341ab04b59eec1475">filter_is_serial</a></td><td class="entry"><a class="el" href="a00062.html">tbb::filter</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00062.html#a6645ec56872b6ba2056dcaa467e292f7">filter_may_emit_null</a></td><td class="entry"><a class="el" href="a00062.html">tbb::filter</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>item_not_available</b> enum value (defined in <a class="el" href="a00165.html">tbb::thread_bound_filter</a>)</td><td class="entry"><a class="el" href="a00165.html">tbb::thread_bound_filter</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00165.html#ac99258407f382d84568a510075074fc7">process_item</a>()</td><td class="entry"><a class="el" href="a00165.html">tbb::thread_bound_filter</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>result_type</b> enum name (defined in <a class="el" href="a00165.html">tbb::thread_bound_filter</a>)</td><td class="entry"><a class="el" href="a00165.html">tbb::thread_bound_filter</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>success</b> enum value (defined in <a class="el" href="a00165.html">tbb::thread_bound_filter</a>)</td><td class="entry"><a class="el" href="a00165.html">tbb::thread_bound_filter</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>thread_bound_filter</b>(mode filter_mode) (defined in <a class="el" href="a00165.html">tbb::thread_bound_filter</a>)</td><td class="entry"><a class="el" href="a00165.html">tbb::thread_bound_filter</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00165.html#a12cfa43c620066a8783529cc8519c6f9">try_process_item</a>()</td><td class="entry"><a class="el" href="a00165.html">tbb::thread_bound_filter</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00131.html#ab4bf2fb86d6a418f9ea36474eb8893f9">acquire</a>(queuing_rw_mutex &m, bool write=true)</td><td class="entry"><a class="el" href="a00131.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00131.html#af0af63035147a3d8422f8c8d7b8d2629">downgrade_to_reader</a>()</td><td class="entry"><a class="el" href="a00131.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00131.html#a50fb02b77f02a01c74754d163157ec77">release</a>()</td><td class="entry"><a class="el" href="a00131.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00131.html#a1ae3792726dcff8da1f2c5366fb2b754">scoped_lock</a>()</td><td class="entry"><a class="el" href="a00131.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00131.html#af1b55ca1839c9c7c2cd779cd2dd9c474">scoped_lock</a>(queuing_rw_mutex &m, bool write=true)</td><td class="entry"><a class="el" href="a00131.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00131.html#a4843d40dddc37c1aa3444e27d35d2433">try_acquire</a>(queuing_rw_mutex &m, bool write=true)</td><td class="entry"><a class="el" href="a00131.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00131.html#ae0f28ecfbbc5f8b3024cd47048b72b5b">upgrade_to_writer</a>()</td><td class="entry"><a class="el" href="a00131.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00131.html#a6cb16cc55f884bbbd5a69430c47b288f">~scoped_lock</a>()</td><td class="entry"><a class="el" href="a00131.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00291.html b/doc/html/a00291.html
index aaedd07..f9e4575 100644
--- a/doc/html/a00291.html
+++ b/doc/html/a00291.html
@@ -33,33 +33,33 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00107.html">pipeline</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00121.html">recursive_mutex</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::pipeline Member List</div>  </div>
+<div class="title">tbb::recursive_mutex Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00107.html">tbb::pipeline</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00121.html">tbb::recursive_mutex</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00107.html#a8eb83014bd53b184e0ed50f120ca310b">add_filter</a>(filter &filter_)</td><td class="entry"><a class="el" href="a00107.html">tbb::pipeline</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00107.html#ae53edbda1771eeaa254d78ae6100a762">clear</a>()</td><td class="entry"><a class="el" href="a00107.html">tbb::pipeline</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>filter</b> (defined in <a class="el" href="a00107.html">tbb::pipeline</a>)</td><td class="entry"><a class="el" href="a00107.html">tbb::pipeline</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::pipeline_cleaner</b> (defined in <a class="el" href="a00107.html">tbb::pipeline</a>)</td><td class="entry"><a class="el" href="a00107.html">tbb::pipeline</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::pipeline_root_task</b> (defined in <a class="el" href="a00107.html">tbb::pipeline</a>)</td><td class="entry"><a class="el" href="a00107.html">tbb::pipeline</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::stage_task</b> (defined in <a class="el" href="a00107.html">tbb::pipeline</a>)</td><td class="entry"><a class="el" href="a00107.html">tbb::pipeline</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00107.html#afe7b7bd9b2617c2b69170675a478b2bd">pipeline</a>()</td><td class="entry"><a class="el" href="a00107.html">tbb::pipeline</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00107.html#ac9ee9080cfc080c40a7ee7cb03a62637">run</a>(size_t max_number_of_live_tokens)</td><td class="entry"><a class="el" href="a00107.html">tbb::pipeline</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00107.html#a270dba81f7dd9935be7f3d69db907ff4">run</a>(size_t max_number_of_live_tokens, tbb::task_group_context &context)</td><td class="entry"><a class="el" href="a00107.html">tbb::pipeline</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>tbb::interface6::internal::pipeline_proxy</b> (defined in <a class="el" href="a00107.html">tbb::pipeline</a>)</td><td class="entry"><a class="el" href="a00107.html">tbb::pipeline</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>thread_bound_filter</b> (defined in <a class="el" href="a00107.html">tbb::pipeline</a>)</td><td class="entry"><a class="el" href="a00107.html">tbb::pipeline</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00107.html#ac3a7b33217b3f3bb0682ec3a40fd2c39">~pipeline</a>()</td><td class="entry"><a class="el" href="a00107.html">tbb::pipeline</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_fair_mutex</b> (defined in <a class="el" href="a00121.html">tbb::recursive_mutex</a>)</td><td class="entry"><a class="el" href="a00121.html">tbb::recursive_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_recursive_mutex</b> (defined in <a class="el" href="a00121.html">tbb::recursive_mutex</a>)</td><td class="entry"><a class="el" href="a00121.html">tbb::recursive_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_rw_mutex</b> (defined in <a class="el" href="a00121.html">tbb::recursive_mutex</a>)</td><td class="entry"><a class="el" href="a00121.html">tbb::recursive_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00121.html#adea997b45dc4a360f38d14bde9c991f2">lock</a>()</td><td class="entry"><a class="el" href="a00121.html">tbb::recursive_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>native_handle</b>() (defined in <a class="el" href="a00121.html">tbb::recursive_mutex</a>)</td><td class="entry"><a class="el" href="a00121.html">tbb::recursive_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00121.html#a3d40334b0e26d5addfde5596e7f9aaec">native_handle_type</a> typedef</td><td class="entry"><a class="el" href="a00121.html">tbb::recursive_mutex</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>native_handle_type</b> typedef (defined in <a class="el" href="a00121.html">tbb::recursive_mutex</a>)</td><td class="entry"><a class="el" href="a00121.html">tbb::recursive_mutex</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00121.html#a47eb6e7e7ffa5d35341125792b17236b">recursive_mutex</a>()</td><td class="entry"><a class="el" href="a00121.html">tbb::recursive_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scoped_lock</b> (defined in <a class="el" href="a00121.html">tbb::recursive_mutex</a>)</td><td class="entry"><a class="el" href="a00121.html">tbb::recursive_mutex</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00121.html#a8b181d9aaa95444145222cfe206e8094">try_lock</a>()</td><td class="entry"><a class="el" href="a00121.html">tbb::recursive_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00121.html#af57e8d25e0e7614e98bcfa50bc9416c8">unlock</a>()</td><td class="entry"><a class="el" href="a00121.html">tbb::recursive_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>~recursive_mutex</b>() (defined in <a class="el" href="a00121.html">tbb::recursive_mutex</a>)</td><td class="entry"><a class="el" href="a00121.html">tbb::recursive_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00292.html b/doc/html/a00292.html
index 5b059dc..8e39933 100644
--- a/doc/html/a00292.html
+++ b/doc/html/a00292.html
@@ -33,26 +33,28 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00111.html">queuing_mutex</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00121.html">recursive_mutex</a></li><li class="navelem"><a class="el" href="a00133.html">scoped_lock</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::queuing_mutex Member List</div>  </div>
+<div class="title">tbb::recursive_mutex::scoped_lock Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00111.html">tbb::queuing_mutex</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00133.html">tbb::recursive_mutex::scoped_lock</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_construct</b>() (defined in <a class="el" href="a00111.html">tbb::queuing_mutex</a>)</td><td class="entry"><a class="el" href="a00111.html">tbb::queuing_mutex</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_fair_mutex</b> (defined in <a class="el" href="a00111.html">tbb::queuing_mutex</a>)</td><td class="entry"><a class="el" href="a00111.html">tbb::queuing_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_recursive_mutex</b> (defined in <a class="el" href="a00111.html">tbb::queuing_mutex</a>)</td><td class="entry"><a class="el" href="a00111.html">tbb::queuing_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_rw_mutex</b> (defined in <a class="el" href="a00111.html">tbb::queuing_mutex</a>)</td><td class="entry"><a class="el" href="a00111.html">tbb::queuing_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00111.html#a0e58fce2062ae349a30b320b7fdc9155">queuing_mutex</a>()</td><td class="entry"><a class="el" href="a00111.html">tbb::queuing_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00133.html#ac5450ce6a5813f395afaa434384c6539">acquire</a>(recursive_mutex &mutex)</td><td class="entry"><a class="el" href="a00133.html">tbb::recursive_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>recursive_mutex</b> (defined in <a class="el" href="a00133.html">tbb::recursive_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00133.html">tbb::recursive_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00133.html#a2fe3246ffc26bdb5a58f33ca513b6c0f">release</a>()</td><td class="entry"><a class="el" href="a00133.html">tbb::recursive_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00133.html#a0a9962a3932cfbd0d12cb197494f951b">scoped_lock</a>()</td><td class="entry"><a class="el" href="a00133.html">tbb::recursive_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00133.html#ab42cb541abb9647cac23b1db9a4db93d">scoped_lock</a>(recursive_mutex &mutex)</td><td class="entry"><a class="el" href="a00133.html">tbb::recursive_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00133.html#a160bba506f4033980ddb69ab7a02c4fb">try_acquire</a>(recursive_mutex &mutex)</td><td class="entry"><a class="el" href="a00133.html">tbb::recursive_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00133.html#a90a966e19120aac99b36a3d6d04af1a2">~scoped_lock</a>()</td><td class="entry"><a class="el" href="a00133.html">tbb::recursive_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00293.html b/doc/html/a00293.html
index 97e5095..ec64d38 100644
--- a/doc/html/a00293.html
+++ b/doc/html/a00293.html
@@ -33,27 +33,40 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00111.html">queuing_mutex</a></li><li class="navelem"><a class="el" href="a00132.html">scoped_lock</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00126.html">scalable_allocator</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::queuing_mutex::scoped_lock Member List</div>  </div>
+<div class="title">tbb::scalable_allocator< T > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00132.html">tbb::queuing_mutex::scoped_lock</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00126.html">tbb::scalable_allocator< T ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00132.html#abf8aa7ccd48d54dcb53665700a17d02a">acquire</a>(queuing_mutex &m)</td><td class="entry"><a class="el" href="a00132.html">tbb::queuing_mutex::scoped_lock</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00132.html#aaa065e48b428b8d43e9bb931ba9e6f6c">release</a>()</td><td class="entry"><a class="el" href="a00132.html">tbb::queuing_mutex::scoped_lock</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00132.html#a0afe0107eb0aae613e726f67624d2fca">scoped_lock</a>()</td><td class="entry"><a class="el" href="a00132.html">tbb::queuing_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00132.html#aa82d9da0dcfe5b21f1c08473f8223105">scoped_lock</a>(queuing_mutex &m)</td><td class="entry"><a class="el" href="a00132.html">tbb::queuing_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00132.html#ab4800ba9e743cd91f152036a6689b0e9">try_acquire</a>(queuing_mutex &m)</td><td class="entry"><a class="el" href="a00132.html">tbb::queuing_mutex::scoped_lock</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00132.html#a469ec43836a8dd250ce0a22b02945630">~scoped_lock</a>()</td><td class="entry"><a class="el" href="a00132.html">tbb::queuing_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>address</b>(reference x) const  (defined in <a class="el" href="a00126.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00126.html">tbb::scalable_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>address</b>(const_reference x) const  (defined in <a class="el" href="a00126.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00126.html">tbb::scalable_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00126.html#acf24945c12dc0586dfb1f8638daf7838">allocate</a>(size_type n, const void *=0)</td><td class="entry"><a class="el" href="a00126.html">tbb::scalable_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00126.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00126.html">tbb::scalable_allocator< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00126.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00126.html">tbb::scalable_allocator< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>construct</b>(U *p, Args &&...args) (defined in <a class="el" href="a00126.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00126.html">tbb::scalable_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>construct</b>(pointer p, value_type &&value) (defined in <a class="el" href="a00126.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00126.html">tbb::scalable_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>construct</b>(pointer p, const value_type &value) (defined in <a class="el" href="a00126.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00126.html">tbb::scalable_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00126.html#a0632b19f25e5d5f86f18b3101925f488">deallocate</a>(pointer p, size_type)</td><td class="entry"><a class="el" href="a00126.html">tbb::scalable_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>destroy</b>(pointer p) (defined in <a class="el" href="a00126.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00126.html">tbb::scalable_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00126.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00126.html">tbb::scalable_allocator< T ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00126.html#afaa85d739b466699cf669116fd10d175">max_size</a>() const </td><td class="entry"><a class="el" href="a00126.html">tbb::scalable_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00126.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00126.html">tbb::scalable_allocator< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00126.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00126.html">tbb::scalable_allocator< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scalable_allocator</b>() (defined in <a class="el" href="a00126.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00126.html">tbb::scalable_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>scalable_allocator</b>(const scalable_allocator &) (defined in <a class="el" href="a00126.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00126.html">tbb::scalable_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scalable_allocator</b>(const scalable_allocator< U > &) (defined in <a class="el" href="a00126.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00126.html">tbb::scalable_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00126.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00126.html">tbb::scalable_allocator< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00126.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00126.html">tbb::scalable_allocator< T ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00294.html b/doc/html/a00294.html
index 5d8a105..c4e3ae0 100644
--- a/doc/html/a00294.html
+++ b/doc/html/a00294.html
@@ -33,27 +33,22 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00112.html">queuing_rw_mutex</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00126.html">scalable_allocator</a></li><li class="navelem"><a class="el" href="a00111.html">rebind</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::queuing_rw_mutex Member List</div>  </div>
+<div class="title">tbb::scalable_allocator< T >::rebind< U > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00112.html">tbb::queuing_rw_mutex</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00111.html">tbb::scalable_allocator< T >::rebind< U ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_construct</b>() (defined in <a class="el" href="a00112.html">tbb::queuing_rw_mutex</a>)</td><td class="entry"><a class="el" href="a00112.html">tbb::queuing_rw_mutex</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_fair_mutex</b> (defined in <a class="el" href="a00112.html">tbb::queuing_rw_mutex</a>)</td><td class="entry"><a class="el" href="a00112.html">tbb::queuing_rw_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_recursive_mutex</b> (defined in <a class="el" href="a00112.html">tbb::queuing_rw_mutex</a>)</td><td class="entry"><a class="el" href="a00112.html">tbb::queuing_rw_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_rw_mutex</b> (defined in <a class="el" href="a00112.html">tbb::queuing_rw_mutex</a>)</td><td class="entry"><a class="el" href="a00112.html">tbb::queuing_rw_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00112.html#a23de1ac415b6f54b778c8fd6ec6073e0">queuing_rw_mutex</a>()</td><td class="entry"><a class="el" href="a00112.html">tbb::queuing_rw_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00112.html#ae67fe828d7e07222e7876ef9fd780fcc">~queuing_rw_mutex</a>()</td><td class="entry"><a class="el" href="a00112.html">tbb::queuing_rw_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>other</b> typedef (defined in <a class="el" href="a00111.html">tbb::scalable_allocator< T >::rebind< U ></a>)</td><td class="entry"><a class="el" href="a00111.html">tbb::scalable_allocator< T >::rebind< U ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00295.html b/doc/html/a00295.html
index 9cbffd3..f16389e 100644
--- a/doc/html/a00295.html
+++ b/doc/html/a00295.html
@@ -33,29 +33,24 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00112.html">queuing_rw_mutex</a></li><li class="navelem"><a class="el" href="a00131.html">scoped_lock</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00127.html">scalable_allocator< void ></a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::queuing_rw_mutex::scoped_lock Member List</div>  </div>
+<div class="title">tbb::scalable_allocator< void > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00131.html">tbb::queuing_rw_mutex::scoped_lock</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00127.html">tbb::scalable_allocator< void ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00131.html#ab4bf2fb86d6a418f9ea36474eb8893f9">acquire</a>(queuing_rw_mutex &m, bool write=true)</td><td class="entry"><a class="el" href="a00131.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00131.html#af0af63035147a3d8422f8c8d7b8d2629">downgrade_to_reader</a>()</td><td class="entry"><a class="el" href="a00131.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00131.html#a50fb02b77f02a01c74754d163157ec77">release</a>()</td><td class="entry"><a class="el" href="a00131.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00131.html#a1ae3792726dcff8da1f2c5366fb2b754">scoped_lock</a>()</td><td class="entry"><a class="el" href="a00131.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00131.html#af1b55ca1839c9c7c2cd779cd2dd9c474">scoped_lock</a>(queuing_rw_mutex &m, bool write=true)</td><td class="entry"><a class="el" href="a00131.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00131.html#a4843d40dddc37c1aa3444e27d35d2433">try_acquire</a>(queuing_rw_mutex &m, bool write=true)</td><td class="entry"><a class="el" href="a00131.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00131.html#ae0f28ecfbbc5f8b3024cd47048b72b5b">upgrade_to_writer</a>()</td><td class="entry"><a class="el" href="a00131.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00131.html#a6cb16cc55f884bbbd5a69430c47b288f">~scoped_lock</a>()</td><td class="entry"><a class="el" href="a00131.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00127.html">tbb::scalable_allocator< void ></a>)</td><td class="entry"><a class="el" href="a00127.html">tbb::scalable_allocator< void ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00127.html">tbb::scalable_allocator< void ></a>)</td><td class="entry"><a class="el" href="a00127.html">tbb::scalable_allocator< void ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00127.html">tbb::scalable_allocator< void ></a>)</td><td class="entry"><a class="el" href="a00127.html">tbb::scalable_allocator< void ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00296.html b/doc/html/a00296.html
index 01a5a07..1d2d86c 100644
--- a/doc/html/a00296.html
+++ b/doc/html/a00296.html
@@ -33,33 +33,22 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00125.html">recursive_mutex</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00127.html">scalable_allocator< void ></a></li><li class="navelem"><a class="el" href="a00115.html">rebind</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::recursive_mutex Member List</div>  </div>
+<div class="title">tbb::scalable_allocator< void >::rebind< U > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00125.html">tbb::recursive_mutex</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00115.html">tbb::scalable_allocator< void >::rebind< U ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_fair_mutex</b> (defined in <a class="el" href="a00125.html">tbb::recursive_mutex</a>)</td><td class="entry"><a class="el" href="a00125.html">tbb::recursive_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_recursive_mutex</b> (defined in <a class="el" href="a00125.html">tbb::recursive_mutex</a>)</td><td class="entry"><a class="el" href="a00125.html">tbb::recursive_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_rw_mutex</b> (defined in <a class="el" href="a00125.html">tbb::recursive_mutex</a>)</td><td class="entry"><a class="el" href="a00125.html">tbb::recursive_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00125.html#adea997b45dc4a360f38d14bde9c991f2">lock</a>()</td><td class="entry"><a class="el" href="a00125.html">tbb::recursive_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>native_handle</b>() (defined in <a class="el" href="a00125.html">tbb::recursive_mutex</a>)</td><td class="entry"><a class="el" href="a00125.html">tbb::recursive_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00125.html#a3d40334b0e26d5addfde5596e7f9aaec">native_handle_type</a> typedef</td><td class="entry"><a class="el" href="a00125.html">tbb::recursive_mutex</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>native_handle_type</b> typedef (defined in <a class="el" href="a00125.html">tbb::recursive_mutex</a>)</td><td class="entry"><a class="el" href="a00125.html">tbb::recursive_mutex</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00125.html#a47eb6e7e7ffa5d35341125792b17236b">recursive_mutex</a>()</td><td class="entry"><a class="el" href="a00125.html">tbb::recursive_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scoped_lock</b> (defined in <a class="el" href="a00125.html">tbb::recursive_mutex</a>)</td><td class="entry"><a class="el" href="a00125.html">tbb::recursive_mutex</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00125.html#a8b181d9aaa95444145222cfe206e8094">try_lock</a>()</td><td class="entry"><a class="el" href="a00125.html">tbb::recursive_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00125.html#af57e8d25e0e7614e98bcfa50bc9416c8">unlock</a>()</td><td class="entry"><a class="el" href="a00125.html">tbb::recursive_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~recursive_mutex</b>() (defined in <a class="el" href="a00125.html">tbb::recursive_mutex</a>)</td><td class="entry"><a class="el" href="a00125.html">tbb::recursive_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>other</b> typedef (defined in <a class="el" href="a00115.html">tbb::scalable_allocator< void >::rebind< U ></a>)</td><td class="entry"><a class="el" href="a00115.html">tbb::scalable_allocator< void >::rebind< U ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00297.html b/doc/html/a00297.html
index edf54f4..89aee85 100644
--- a/doc/html/a00297.html
+++ b/doc/html/a00297.html
@@ -33,28 +33,30 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00125.html">recursive_mutex</a></li><li class="navelem"><a class="el" href="a00139.html">scoped_lock</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00140.html">spin_mutex</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::recursive_mutex::scoped_lock Member List</div>  </div>
+<div class="title">tbb::spin_mutex Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00139.html">tbb::recursive_mutex::scoped_lock</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00140.html">tbb::spin_mutex</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00139.html#ac5450ce6a5813f395afaa434384c6539">acquire</a>(recursive_mutex &mutex)</td><td class="entry"><a class="el" href="a00139.html">tbb::recursive_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>recursive_mutex</b> (defined in <a class="el" href="a00139.html">tbb::recursive_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00139.html">tbb::recursive_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00139.html#a2fe3246ffc26bdb5a58f33ca513b6c0f">release</a>()</td><td class="entry"><a class="el" href="a00139.html">tbb::recursive_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00139.html#a0a9962a3932cfbd0d12cb197494f951b">scoped_lock</a>()</td><td class="entry"><a class="el" href="a00139.html">tbb::recursive_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00139.html#ab42cb541abb9647cac23b1db9a4db93d">scoped_lock</a>(recursive_mutex &mutex)</td><td class="entry"><a class="el" href="a00139.html">tbb::recursive_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00139.html#a160bba506f4033980ddb69ab7a02c4fb">try_acquire</a>(recursive_mutex &mutex)</td><td class="entry"><a class="el" href="a00139.html">tbb::recursive_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00139.html#a90a966e19120aac99b36a3d6d04af1a2">~scoped_lock</a>()</td><td class="entry"><a class="el" href="a00139.html">tbb::recursive_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00140.html#a4ec484f4df6ec5595ec821ef20bd6cd7">internal_construct</a>()</td><td class="entry"><a class="el" href="a00140.html">tbb::spin_mutex</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_fair_mutex</b> (defined in <a class="el" href="a00140.html">tbb::spin_mutex</a>)</td><td class="entry"><a class="el" href="a00140.html">tbb::spin_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_recursive_mutex</b> (defined in <a class="el" href="a00140.html">tbb::spin_mutex</a>)</td><td class="entry"><a class="el" href="a00140.html">tbb::spin_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_rw_mutex</b> (defined in <a class="el" href="a00140.html">tbb::spin_mutex</a>)</td><td class="entry"><a class="el" href="a00140.html">tbb::spin_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00140.html#a8957e40b0781192419d01d28e5205ec4">lock</a>()</td><td class="entry"><a class="el" href="a00140.html">tbb::spin_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>scoped_lock</b> (defined in <a class="el" href="a00140.html">tbb::spin_mutex</a>)</td><td class="entry"><a class="el" href="a00140.html">tbb::spin_mutex</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00140.html#a6c96196965bf7df426311d282ad3c378">spin_mutex</a>()</td><td class="entry"><a class="el" href="a00140.html">tbb::spin_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00140.html#a003ffb196d22bf22ca22142338b7eeab">try_lock</a>()</td><td class="entry"><a class="el" href="a00140.html">tbb::spin_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00140.html#adfcf8fe840aa73c08c2cadd570fd48fd">unlock</a>()</td><td class="entry"><a class="el" href="a00140.html">tbb::spin_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00298.html b/doc/html/a00298.html
index 572a81e..6d220ae 100644
--- a/doc/html/a00298.html
+++ b/doc/html/a00298.html
@@ -33,40 +33,28 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00129.html">scalable_allocator</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00140.html">spin_mutex</a></li><li class="navelem"><a class="el" href="a00130.html">scoped_lock</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::scalable_allocator< T > Member List</div>  </div>
+<div class="title">tbb::spin_mutex::scoped_lock Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00129.html">tbb::scalable_allocator< T ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00130.html">tbb::spin_mutex::scoped_lock</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>address</b>(reference x) const  (defined in <a class="el" href="a00129.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00129.html">tbb::scalable_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>address</b>(const_reference x) const  (defined in <a class="el" href="a00129.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00129.html">tbb::scalable_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00129.html#acf24945c12dc0586dfb1f8638daf7838">allocate</a>(size_type n, const void *=0)</td><td class="entry"><a class="el" href="a00129.html">tbb::scalable_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00129.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00129.html">tbb::scalable_allocator< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00129.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00129.html">tbb::scalable_allocator< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>construct</b>(U *p, Args &&...args) (defined in <a class="el" href="a00129.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00129.html">tbb::scalable_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>construct</b>(pointer p, value_type &&value) (defined in <a class="el" href="a00129.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00129.html">tbb::scalable_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>construct</b>(pointer p, const value_type &value) (defined in <a class="el" href="a00129.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00129.html">tbb::scalable_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00129.html#a0632b19f25e5d5f86f18b3101925f488">deallocate</a>(pointer p, size_type)</td><td class="entry"><a class="el" href="a00129.html">tbb::scalable_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>destroy</b>(pointer p) (defined in <a class="el" href="a00129.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00129.html">tbb::scalable_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00129.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00129.html">tbb::scalable_allocator< T ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00129.html#afaa85d739b466699cf669116fd10d175">max_size</a>() const </td><td class="entry"><a class="el" href="a00129.html">tbb::scalable_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00129.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00129.html">tbb::scalable_allocator< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00129.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00129.html">tbb::scalable_allocator< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scalable_allocator</b>() (defined in <a class="el" href="a00129.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00129.html">tbb::scalable_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>scalable_allocator</b>(const scalable_allocator &) (defined in <a class="el" href="a00129.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00129.html">tbb::scalable_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scalable_allocator</b>(const scalable_allocator< U > &) (defined in <a class="el" href="a00129.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00129.html">tbb::scalable_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00129.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00129.html">tbb::scalable_allocator< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00129.html">tbb::scalable_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00129.html">tbb::scalable_allocator< T ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00130.html#a7c702117f08ae82d034a98b3d5510ffc">acquire</a>(spin_mutex &m)</td><td class="entry"><a class="el" href="a00130.html">tbb::spin_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00130.html#a7e801b0c28fd8395fec400b96acc5c34">release</a>()</td><td class="entry"><a class="el" href="a00130.html">tbb::spin_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00130.html#a4287be975cf2448c95f068b065c45107">scoped_lock</a>()</td><td class="entry"><a class="el" href="a00130.html">tbb::spin_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00130.html#a73f7381a9a112b9f5a856b1face525fb">scoped_lock</a>(spin_mutex &m)</td><td class="entry"><a class="el" href="a00130.html">tbb::spin_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>spin_mutex</b> (defined in <a class="el" href="a00130.html">tbb::spin_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00130.html">tbb::spin_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00130.html#a76acbd67c74906f6ea33a1de6fd443ce">try_acquire</a>(spin_mutex &m)</td><td class="entry"><a class="el" href="a00130.html">tbb::spin_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00130.html#a9940d6e494466d9c53846ed347d79d83">~scoped_lock</a>()</td><td class="entry"><a class="el" href="a00130.html">tbb::spin_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00299.html b/doc/html/a00299.html
index c0e607b..804b601 100644
--- a/doc/html/a00299.html
+++ b/doc/html/a00299.html
@@ -33,22 +33,38 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00129.html">scalable_allocator</a></li><li class="navelem"><a class="el" href="a00115.html">rebind</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00141.html">spin_rw_mutex_v3</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::scalable_allocator< T >::rebind< U > Member List</div>  </div>
+<div class="title">tbb::spin_rw_mutex_v3 Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00115.html">tbb::scalable_allocator< T >::rebind< U ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>other</b> typedef (defined in <a class="el" href="a00115.html">tbb::scalable_allocator< T >::rebind< U ></a>)</td><td class="entry"><a class="el" href="a00115.html">tbb::scalable_allocator< T >::rebind< U ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>BUSY</b> (defined in <a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a>)</td><td class="entry"><a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_fair_mutex</b> (defined in <a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a>)</td><td class="entry"><a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_recursive_mutex</b> (defined in <a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a>)</td><td class="entry"><a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_rw_mutex</b> (defined in <a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a>)</td><td class="entry"><a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00141.html#a51e207646300a4c242bb4aaa4e04e9b8">lock</a>()</td><td class="entry"><a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00141.html#aa0e3bb644e9021d0f80ee36b03f228e4">lock_read</a>()</td><td class="entry"><a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ONE_READER</b> (defined in <a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a>)</td><td class="entry"><a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>READERS</b> (defined in <a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a>)</td><td class="entry"><a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00141.html#ad30fc1ffa0a2b8134e177e02c5821d7f">spin_rw_mutex_v3</a>()</td><td class="entry"><a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00141.html#aa28625051072472ccd8a2b19405d6fb3">state</a></td><td class="entry"><a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>state_t</b> typedef (defined in <a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a>)</td><td class="entry"><a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00141.html#ab6ec20b1ec43a49c8c2908984e35b5e8">try_lock</a>()</td><td class="entry"><a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00141.html#ac932f65b0b66320688e7957ce9c3e2c1">try_lock_read</a>()</td><td class="entry"><a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00141.html#ab04321ed2cdf12ac5825c54591028fc0">unlock</a>()</td><td class="entry"><a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>WRITER</b> (defined in <a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a>)</td><td class="entry"><a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>WRITER_PENDING</b> (defined in <a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a>)</td><td class="entry"><a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00141.html#acc7cf2e4b14d3a2a591a3552d74ba99d">~spin_rw_mutex_v3</a>()</td><td class="entry"><a class="el" href="a00141.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00300.html b/doc/html/a00300.html
index 42c7208..42612cc 100644
--- a/doc/html/a00300.html
+++ b/doc/html/a00300.html
@@ -33,24 +33,32 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00130.html">scalable_allocator< void ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00141.html">spin_rw_mutex_v3</a></li><li class="navelem"><a class="el" href="a00134.html">scoped_lock</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::scalable_allocator< void > Member List</div>  </div>
+<div class="title">tbb::spin_rw_mutex_v3::scoped_lock Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00130.html">tbb::scalable_allocator< void ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00134.html">tbb::spin_rw_mutex_v3::scoped_lock</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00130.html">tbb::scalable_allocator< void ></a>)</td><td class="entry"><a class="el" href="a00130.html">tbb::scalable_allocator< void ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00130.html">tbb::scalable_allocator< void ></a>)</td><td class="entry"><a class="el" href="a00130.html">tbb::scalable_allocator< void ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00130.html">tbb::scalable_allocator< void ></a>)</td><td class="entry"><a class="el" href="a00130.html">tbb::scalable_allocator< void ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00134.html#a6d49df365396ab314e78ba07c6b96433">acquire</a>(spin_rw_mutex &m, bool write=true)</td><td class="entry"><a class="el" href="a00134.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00134.html#aa693c05221d977856a98270a255fe5df">downgrade_to_reader</a>()</td><td class="entry"><a class="el" href="a00134.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00134.html#acfd129dc5106ad1129ba803e67311050">is_writer</a></td><td class="entry"><a class="el" href="a00134.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00134.html#a8d70c5a2348e30a6979bfbf677328dc4">mutex</a></td><td class="entry"><a class="el" href="a00134.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00134.html#a99e279a995a51abfb87b865e886949f8">release</a>()</td><td class="entry"><a class="el" href="a00134.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00134.html#a285b355121772c874a7ecaaf4d347224">scoped_lock</a>()</td><td class="entry"><a class="el" href="a00134.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00134.html#a0a2e15358575f7651446bca13a5a2674">scoped_lock</a>(spin_rw_mutex &m, bool write=true)</td><td class="entry"><a class="el" href="a00134.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>tbb::interface8::internal::x86_rtm_rw_mutex</b> (defined in <a class="el" href="a00134.html">tbb::spin_rw_mutex_v3::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00134.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00134.html#abf17ada91882fd70f139c503c0220f16">try_acquire</a>(spin_rw_mutex &m, bool write=true)</td><td class="entry"><a class="el" href="a00134.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00134.html#afbe5de57eadc457518df7a1bb0d30c00">upgrade_to_writer</a>()</td><td class="entry"><a class="el" href="a00134.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00134.html#a5c27ca2e0c9db960a9a7430082ff7edd">~scoped_lock</a>()</td><td class="entry"><a class="el" href="a00134.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00301.html b/doc/html/a00301.html
index 9dce743..8cf34b4 100644
--- a/doc/html/a00301.html
+++ b/doc/html/a00301.html
@@ -33,22 +33,26 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00130.html">scalable_allocator< void ></a></li><li class="navelem"><a class="el" href="a00116.html">rebind</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00148.html">task_handle</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::scalable_allocator< void >::rebind< U > Member List</div>  </div>
+<div class="title">tbb::task_handle< F > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00116.html">tbb::scalable_allocator< void >::rebind< U ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00148.html">tbb::task_handle< F ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>other</b> typedef (defined in <a class="el" href="a00116.html">tbb::scalable_allocator< void >::rebind< U ></a>)</td><td class="entry"><a class="el" href="a00116.html">tbb::scalable_allocator< void >::rebind< U ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::task_handle_task</b> (defined in <a class="el" href="a00148.html">tbb::task_handle< F ></a>)</td><td class="entry"><a class="el" href="a00148.html">tbb::task_handle< F ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator()</b>() const  (defined in <a class="el" href="a00148.html">tbb::task_handle< F ></a>)</td><td class="entry"><a class="el" href="a00148.html">tbb::task_handle< F ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>structured_task_group</b> (defined in <a class="el" href="a00148.html">tbb::task_handle< F ></a>)</td><td class="entry"><a class="el" href="a00148.html">tbb::task_handle< F ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>task_group</b> (defined in <a class="el" href="a00148.html">tbb::task_handle< F ></a>)</td><td class="entry"><a class="el" href="a00148.html">tbb::task_handle< F ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>task_handle</b>(const F &f) (defined in <a class="el" href="a00148.html">tbb::task_handle< F ></a>)</td><td class="entry"><a class="el" href="a00148.html">tbb::task_handle< F ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00302.html b/doc/html/a00302.html
index 122ebaa..a3fb29e 100644
--- a/doc/html/a00302.html
+++ b/doc/html/a00302.html
@@ -33,30 +33,36 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00145.html">spin_mutex</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00145.html">task_group</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::spin_mutex Member List</div>  </div>
+<div class="title">tbb::task_group Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00145.html">tbb::spin_mutex</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00145.html">tbb::task_group</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00145.html#a4ec484f4df6ec5595ec821ef20bd6cd7">internal_construct</a>()</td><td class="entry"><a class="el" href="a00145.html">tbb::spin_mutex</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_fair_mutex</b> (defined in <a class="el" href="a00145.html">tbb::spin_mutex</a>)</td><td class="entry"><a class="el" href="a00145.html">tbb::spin_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_recursive_mutex</b> (defined in <a class="el" href="a00145.html">tbb::spin_mutex</a>)</td><td class="entry"><a class="el" href="a00145.html">tbb::spin_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_rw_mutex</b> (defined in <a class="el" href="a00145.html">tbb::spin_mutex</a>)</td><td class="entry"><a class="el" href="a00145.html">tbb::spin_mutex</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00145.html#a8957e40b0781192419d01d28e5205ec4">lock</a>()</td><td class="entry"><a class="el" href="a00145.html">tbb::spin_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>scoped_lock</b> (defined in <a class="el" href="a00145.html">tbb::spin_mutex</a>)</td><td class="entry"><a class="el" href="a00145.html">tbb::spin_mutex</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00145.html#a6c96196965bf7df426311d282ad3c378">spin_mutex</a>()</td><td class="entry"><a class="el" href="a00145.html">tbb::spin_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00145.html#a003ffb196d22bf22ca22142338b7eeab">try_lock</a>()</td><td class="entry"><a class="el" href="a00145.html">tbb::spin_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00145.html#adfcf8fe840aa73c08c2cadd570fd48fd">unlock</a>()</td><td class="entry"><a class="el" href="a00145.html">tbb::spin_mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cancel</b>() (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_run</b>(F &f) (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_run_and_wait</b>(F &f) (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_canceling</b>() (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_context</b> (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_root</b> (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>owner</b>() (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>run</b>(task_handle< F > &h) (defined in <a class="el" href="a00145.html">tbb::task_group</a>)</td><td class="entry"><a class="el" href="a00145.html">tbb::task_group</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>run</b>(const F &f) (defined in <a class="el" href="a00145.html">tbb::task_group</a>)</td><td class="entry"><a class="el" href="a00145.html">tbb::task_group</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>run_and_wait</b>(const F &f) (defined in <a class="el" href="a00145.html">tbb::task_group</a>)</td><td class="entry"><a class="el" href="a00145.html">tbb::task_group</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>run_and_wait</b>(task_handle< F > &h) (defined in <a class="el" href="a00145.html">tbb::task_group</a>)</td><td class="entry"><a class="el" href="a00145.html">tbb::task_group</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>task_group</b>() (defined in <a class="el" href="a00145.html">tbb::task_group</a>)</td><td class="entry"><a class="el" href="a00145.html">tbb::task_group</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>task_group_base</b>(uintptr_t traits=0) (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>wait</b>() (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~task_group_base</b>() __TBB_NOEXCEPT(false) (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00303.html b/doc/html/a00303.html
index 70e7966..9ed062e 100644
--- a/doc/html/a00303.html
+++ b/doc/html/a00303.html
@@ -33,28 +33,33 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00145.html">spin_mutex</a></li><li class="navelem"><a class="el" href="a00134.html">scoped_lock</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00142.html">structured_task_group</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::spin_mutex::scoped_lock Member List</div>  </div>
+<div class="title">tbb::structured_task_group Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00134.html">tbb::spin_mutex::scoped_lock</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00142.html">tbb::structured_task_group</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00134.html#a7c702117f08ae82d034a98b3d5510ffc">acquire</a>(spin_mutex &m)</td><td class="entry"><a class="el" href="a00134.html">tbb::spin_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00134.html#a7e801b0c28fd8395fec400b96acc5c34">release</a>()</td><td class="entry"><a class="el" href="a00134.html">tbb::spin_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00134.html#a4287be975cf2448c95f068b065c45107">scoped_lock</a>()</td><td class="entry"><a class="el" href="a00134.html">tbb::spin_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00134.html#a73f7381a9a112b9f5a856b1face525fb">scoped_lock</a>(spin_mutex &m)</td><td class="entry"><a class="el" href="a00134.html">tbb::spin_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>spin_mutex</b> (defined in <a class="el" href="a00134.html">tbb::spin_mutex::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00134.html">tbb::spin_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00134.html#a76acbd67c74906f6ea33a1de6fd443ce">try_acquire</a>(spin_mutex &m)</td><td class="entry"><a class="el" href="a00134.html">tbb::spin_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00134.html#a9940d6e494466d9c53846ed347d79d83">~scoped_lock</a>()</td><td class="entry"><a class="el" href="a00134.html">tbb::spin_mutex::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cancel</b>() (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_run</b>(F &f) (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_run_and_wait</b>(F &f) (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_canceling</b>() (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_context</b> (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_root</b> (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>owner</b>() (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>run</b>(task_handle< F > &h) (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>run_and_wait</b>(task_handle< F > &h) (defined in <a class="el" href="a00142.html">tbb::structured_task_group</a>)</td><td class="entry"><a class="el" href="a00142.html">tbb::structured_task_group</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>task_group_base</b>(uintptr_t traits=0) (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>wait</b>() (defined in <a class="el" href="a00142.html">tbb::structured_task_group</a>)</td><td class="entry"><a class="el" href="a00142.html">tbb::structured_task_group</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>~task_group_base</b>() __TBB_NOEXCEPT(false) (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00304.html b/doc/html/a00304.html
index 1a127da..68832c0 100644
--- a/doc/html/a00304.html
+++ b/doc/html/a00304.html
@@ -33,38 +33,32 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00146.html">spin_rw_mutex_v3</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00150.html">task_scheduler_init</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::spin_rw_mutex_v3 Member List</div>  </div>
+<div class="title">tbb::task_scheduler_init Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00150.html">tbb::task_scheduler_init</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>BUSY</b> (defined in <a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_fair_mutex</b> (defined in <a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_recursive_mutex</b> (defined in <a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_rw_mutex</b> (defined in <a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00146.html#a51e207646300a4c242bb4aaa4e04e9b8">lock</a>()</td><td class="entry"><a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00146.html#aa0e3bb644e9021d0f80ee36b03f228e4">lock_read</a>()</td><td class="entry"><a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ONE_READER</b> (defined in <a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>READERS</b> (defined in <a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00146.html#ad30fc1ffa0a2b8134e177e02c5821d7f">spin_rw_mutex_v3</a>()</td><td class="entry"><a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00146.html#aa28625051072472ccd8a2b19405d6fb3">state</a></td><td class="entry"><a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>state_t</b> typedef (defined in <a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00146.html#ab6ec20b1ec43a49c8c2908984e35b5e8">try_lock</a>()</td><td class="entry"><a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00146.html#ac932f65b0b66320688e7957ce9c3e2c1">try_lock_read</a>()</td><td class="entry"><a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00146.html#ab04321ed2cdf12ac5825c54591028fc0">unlock</a>()</td><td class="entry"><a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>WRITER</b> (defined in <a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>WRITER_PENDING</b> (defined in <a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00146.html#acc7cf2e4b14d3a2a591a3552d74ba99d">~spin_rw_mutex_v3</a>()</td><td class="entry"><a class="el" href="a00146.html">tbb::spin_rw_mutex_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00150.html#a945886f5ef48300a8ebff2d077c166b1">automatic</a></td><td class="entry"><a class="el" href="a00150.html">tbb::task_scheduler_init</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00150.html#ae261cf6c54a3689ef4e2c079fe0f67d0">blocking_terminate</a>()</td><td class="entry"><a class="el" href="a00150.html">tbb::task_scheduler_init</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00150.html#a2721ff874fb21f97b470d14a5ec151f3">blocking_terminate</a>(const std::nothrow_t &) __TBB_NOEXCEPT(true)</td><td class="entry"><a class="el" href="a00150.html">tbb::task_scheduler_init</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00150.html#aa0c0d46ec09bedc1ee876aa8aa87c3d1">default_num_threads</a>()</td><td class="entry"><a class="el" href="a00150.html">tbb::task_scheduler_init</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00150.html#af0e49ff2f59a4e53c9c07897b57f084d">deferred</a></td><td class="entry"><a class="el" href="a00150.html">tbb::task_scheduler_init</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00150.html#a485028b867bffef5829209330e79e64c">initialize</a>(int number_of_threads=automatic)</td><td class="entry"><a class="el" href="a00150.html">tbb::task_scheduler_init</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00150.html#a0f5294f74b123a646a1762c68d11e39a">initialize</a>(int number_of_threads, stack_size_type thread_stack_size)</td><td class="entry"><a class="el" href="a00150.html">tbb::task_scheduler_init</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00150.html#aed5505d7fed9d5493676aa15c176512c">is_active</a>() const </td><td class="entry"><a class="el" href="a00150.html">tbb::task_scheduler_init</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00150.html#a8b2657d9b7c39fede2d19507d0e94688">task_scheduler_init</a>(int number_of_threads=automatic, stack_size_type thread_stack_size=0)</td><td class="entry"><a class="el" href="a00150.html">tbb::task_scheduler_init</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00150.html#a15d5dca7f79c5769bb96f674e4da0c04">terminate</a>()</td><td class="entry"><a class="el" href="a00150.html">tbb::task_scheduler_init</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00150.html#a20b121334ec39c1d91bd4fe9a51892b0">~task_scheduler_init</a>()</td><td class="entry"><a class="el" href="a00150.html">tbb::task_scheduler_init</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00305.html b/doc/html/a00305.html
index 918be9d..0ab5a9e 100644
--- a/doc/html/a00305.html
+++ b/doc/html/a00305.html
@@ -33,32 +33,44 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00146.html">spin_rw_mutex_v3</a></li><li class="navelem"><a class="el" href="a00135.html">scoped_lock</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00153.html">tbb_allocator</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::spin_rw_mutex_v3::scoped_lock Member List</div>  </div>
+<div class="title">tbb::tbb_allocator< T > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00135.html">tbb::spin_rw_mutex_v3::scoped_lock</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00153.html">tbb::tbb_allocator< T ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00135.html#a6d49df365396ab314e78ba07c6b96433">acquire</a>(spin_rw_mutex &m, bool write=true)</td><td class="entry"><a class="el" href="a00135.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00135.html#aa693c05221d977856a98270a255fe5df">downgrade_to_reader</a>()</td><td class="entry"><a class="el" href="a00135.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00135.html#acfd129dc5106ad1129ba803e67311050">is_writer</a></td><td class="entry"><a class="el" href="a00135.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00135.html#a8d70c5a2348e30a6979bfbf677328dc4">mutex</a></td><td class="entry"><a class="el" href="a00135.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00135.html#a99e279a995a51abfb87b865e886949f8">release</a>()</td><td class="entry"><a class="el" href="a00135.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00135.html#a285b355121772c874a7ecaaf4d347224">scoped_lock</a>()</td><td class="entry"><a class="el" href="a00135.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00135.html#a0a2e15358575f7651446bca13a5a2674">scoped_lock</a>(spin_rw_mutex &m, bool write=true)</td><td class="entry"><a class="el" href="a00135.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>tbb::interface8::internal::x86_rtm_rw_mutex</b> (defined in <a class="el" href="a00135.html">tbb::spin_rw_mutex_v3::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00135.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00135.html#abf17ada91882fd70f139c503c0220f16">try_acquire</a>(spin_rw_mutex &m, bool write=true)</td><td class="entry"><a class="el" href="a00135.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00135.html#afbe5de57eadc457518df7a1bb0d30c00">upgrade_to_writer</a>()</td><td class="entry"><a class="el" href="a00135.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00135.html#a5c27ca2e0c9db960a9a7430082ff7edd">~scoped_lock</a>()</td><td class="entry"><a class="el" href="a00135.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>address</b>(reference x) const  (defined in <a class="el" href="a00153.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00153.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>address</b>(const_reference x) const  (defined in <a class="el" href="a00153.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00153.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00153.html#afedd8a64eed9692083c708f419338e0c">allocate</a>(size_type n, const void *=0)</td><td class="entry"><a class="el" href="a00153.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00153.html#aa4606cff0156ec4237c1571204851bfb">allocator_type</a>()</td><td class="entry"><a class="el" href="a00153.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00153.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00153.html">tbb::tbb_allocator< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00153.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00153.html">tbb::tbb_allocator< T ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00153.html#af54fa3029e33cebe5ba64a8538306fdf">construct</a>(U *p, Args &&...args)</td><td class="entry"><a class="el" href="a00153.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>construct</b>(pointer p, value_type &&value) (defined in <a class="el" href="a00153.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00153.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>construct</b>(pointer p, const value_type &value) (defined in <a class="el" href="a00153.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00153.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00153.html#a28e333e0fff56dd53c20b82cfee430ab">deallocate</a>(pointer p, size_type)</td><td class="entry"><a class="el" href="a00153.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00153.html#ac7b1b393a8ff3399079328c0971c1996">destroy</a>(pointer p)</td><td class="entry"><a class="el" href="a00153.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00153.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00153.html">tbb::tbb_allocator< T ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00153.html#a60463a571d5c20f7762112367261ad94">malloc_type</a> enum name</td><td class="entry"><a class="el" href="a00153.html">tbb::tbb_allocator< T ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00153.html#a0a2676fb8a2f931961d373b88848c93e">max_size</a>() const </td><td class="entry"><a class="el" href="a00153.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00153.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00153.html">tbb::tbb_allocator< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00153.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00153.html">tbb::tbb_allocator< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scalable</b> enum value (defined in <a class="el" href="a00153.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00153.html">tbb::tbb_allocator< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00153.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00153.html">tbb::tbb_allocator< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>standard</b> enum value (defined in <a class="el" href="a00153.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00153.html">tbb::tbb_allocator< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>tbb_allocator</b>() (defined in <a class="el" href="a00153.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00153.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>tbb_allocator</b>(const tbb_allocator &) (defined in <a class="el" href="a00153.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00153.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>tbb_allocator</b>(const tbb_allocator< U > &) (defined in <a class="el" href="a00153.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00153.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00153.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00153.html">tbb::tbb_allocator< T ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00306.html b/doc/html/a00306.html
index 71e6f60..eb7e8e4 100644
--- a/doc/html/a00306.html
+++ b/doc/html/a00306.html
@@ -33,26 +33,22 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00154.html">task_handle</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00153.html">tbb_allocator</a></li><li class="navelem"><a class="el" href="a00113.html">rebind</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::task_handle< F > Member List</div>  </div>
+<div class="title">tbb::tbb_allocator< T >::rebind< U > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00154.html">tbb::task_handle< F ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00113.html">tbb::tbb_allocator< T >::rebind< U ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::task_handle_task</b> (defined in <a class="el" href="a00154.html">tbb::task_handle< F ></a>)</td><td class="entry"><a class="el" href="a00154.html">tbb::task_handle< F ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator()</b>() const  (defined in <a class="el" href="a00154.html">tbb::task_handle< F ></a>)</td><td class="entry"><a class="el" href="a00154.html">tbb::task_handle< F ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>structured_task_group</b> (defined in <a class="el" href="a00154.html">tbb::task_handle< F ></a>)</td><td class="entry"><a class="el" href="a00154.html">tbb::task_handle< F ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>task_group</b> (defined in <a class="el" href="a00154.html">tbb::task_handle< F ></a>)</td><td class="entry"><a class="el" href="a00154.html">tbb::task_handle< F ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>task_handle</b>(const F &f) (defined in <a class="el" href="a00154.html">tbb::task_handle< F ></a>)</td><td class="entry"><a class="el" href="a00154.html">tbb::task_handle< F ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>other</b> typedef (defined in <a class="el" href="a00113.html">tbb::tbb_allocator< T >::rebind< U ></a>)</td><td class="entry"><a class="el" href="a00113.html">tbb::tbb_allocator< T >::rebind< U ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00307.html b/doc/html/a00307.html
index 2471518..29c0be7 100644
--- a/doc/html/a00307.html
+++ b/doc/html/a00307.html
@@ -33,36 +33,24 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00151.html">task_group</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00154.html">tbb_allocator< void ></a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::task_group Member List</div>  </div>
+<div class="title">tbb::tbb_allocator< void > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00151.html">tbb::task_group</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00154.html">tbb::tbb_allocator< void ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cancel</b>() (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_run</b>(F &f) (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_run_and_wait</b>(F &f) (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_canceling</b>() (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_context</b> (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_root</b> (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>owner</b>() (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>run</b>(task_handle< F > &h) (defined in <a class="el" href="a00151.html">tbb::task_group</a>)</td><td class="entry"><a class="el" href="a00151.html">tbb::task_group</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>run</b>(const F &f) (defined in <a class="el" href="a00151.html">tbb::task_group</a>)</td><td class="entry"><a class="el" href="a00151.html">tbb::task_group</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>run_and_wait</b>(const F &f) (defined in <a class="el" href="a00151.html">tbb::task_group</a>)</td><td class="entry"><a class="el" href="a00151.html">tbb::task_group</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>run_and_wait</b>(task_handle< F > &h) (defined in <a class="el" href="a00151.html">tbb::task_group</a>)</td><td class="entry"><a class="el" href="a00151.html">tbb::task_group</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>task_group</b>() (defined in <a class="el" href="a00151.html">tbb::task_group</a>)</td><td class="entry"><a class="el" href="a00151.html">tbb::task_group</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>task_group_base</b>(uintptr_t traits=0) (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>wait</b>() (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~task_group_base</b>() __TBB_NOEXCEPT(false) (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00154.html">tbb::tbb_allocator< void ></a>)</td><td class="entry"><a class="el" href="a00154.html">tbb::tbb_allocator< void ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00154.html">tbb::tbb_allocator< void ></a>)</td><td class="entry"><a class="el" href="a00154.html">tbb::tbb_allocator< void ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00154.html">tbb::tbb_allocator< void ></a>)</td><td class="entry"><a class="el" href="a00154.html">tbb::tbb_allocator< void ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00308.html b/doc/html/a00308.html
index 35bce33..5eb754f 100644
--- a/doc/html/a00308.html
+++ b/doc/html/a00308.html
@@ -33,33 +33,22 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00148.html">structured_task_group</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00154.html">tbb_allocator< void ></a></li><li class="navelem"><a class="el" href="a00114.html">rebind</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::structured_task_group Member List</div>  </div>
+<div class="title">tbb::tbb_allocator< void >::rebind< U > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00148.html">tbb::structured_task_group</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00114.html">tbb::tbb_allocator< void >::rebind< U ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cancel</b>() (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_run</b>(F &f) (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_run_and_wait</b>(F &f) (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_canceling</b>() (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_context</b> (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_root</b> (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>owner</b>() (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>run</b>(task_handle< F > &h) (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>run_and_wait</b>(task_handle< F > &h) (defined in <a class="el" href="a00148.html">tbb::structured_task_group</a>)</td><td class="entry"><a class="el" href="a00148.html">tbb::structured_task_group</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>task_group_base</b>(uintptr_t traits=0) (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>wait</b>() (defined in <a class="el" href="a00148.html">tbb::structured_task_group</a>)</td><td class="entry"><a class="el" href="a00148.html">tbb::structured_task_group</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~task_group_base</b>() __TBB_NOEXCEPT(false) (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>other</b> typedef (defined in <a class="el" href="a00114.html">tbb::tbb_allocator< void >::rebind< U ></a>)</td><td class="entry"><a class="el" href="a00114.html">tbb::tbb_allocator< void >::rebind< U ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00309.html b/doc/html/a00309.html
index 3979eaf..1b64feb 100644
--- a/doc/html/a00309.html
+++ b/doc/html/a00309.html
@@ -33,32 +33,33 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00156.html">task_scheduler_init</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00169.html">zero_allocator</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::task_scheduler_init Member List</div>  </div>
+<div class="title">tbb::zero_allocator< T, Allocator > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00156.html">tbb::task_scheduler_init</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00156.html#a945886f5ef48300a8ebff2d077c166b1">automatic</a></td><td class="entry"><a class="el" href="a00156.html">tbb::task_scheduler_init</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00156.html#aa0c0d46ec09bedc1ee876aa8aa87c3d1">default_num_threads</a>()</td><td class="entry"><a class="el" href="a00156.html">tbb::task_scheduler_init</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00156.html#af0e49ff2f59a4e53c9c07897b57f084d">deferred</a></td><td class="entry"><a class="el" href="a00156.html">tbb::task_scheduler_init</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>if</b>(wait_workers_in_terminate) my_scheduler (defined in <a class="el" href="a00156.html">tbb::task_scheduler_init</a>)</td><td class="entry"><a class="el" href="a00156.html">tbb::task_scheduler_init</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00156.html#a485028b867bffef5829209330e79e64c">initialize</a>(int number_of_threads=automatic)</td><td class="entry"><a class="el" href="a00156.html">tbb::task_scheduler_init</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00156.html#a0f5294f74b123a646a1762c68d11e39a">initialize</a>(int number_of_threads, stack_size_type thread_stack_size)</td><td class="entry"><a class="el" href="a00156.html">tbb::task_scheduler_init</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>initialize</b>(number_of_threads, thread_stack_size) (defined in <a class="el" href="a00156.html">tbb::task_scheduler_init</a>)</td><td class="entry"><a class="el" href="a00156.html">tbb::task_scheduler_init</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00156.html#aed5505d7fed9d5493676aa15c176512c">is_active</a>() const </td><td class="entry"><a class="el" href="a00156.html">tbb::task_scheduler_init</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00156.html#a15d5dca7f79c5769bb96f674e4da0c04">terminate</a>()</td><td class="entry"><a class="el" href="a00156.html">tbb::task_scheduler_init</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00156.html#a8310e807e1199d0f23b3a57aeb4fde51">thread_stack_size</a></td><td class="entry"><a class="el" href="a00156.html">tbb::task_scheduler_init</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00156.html#a20b121334ec39c1d91bd4fe9a51892b0">~task_scheduler_init</a>()</td><td class="entry"><a class="el" href="a00156.html">tbb::task_scheduler_init</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocate</b>(const size_type n, const void *hint=0) (defined in <a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a>)</td><td class="entry"><a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>base_allocator_type</b> typedef (defined in <a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a>)</td><td class="entry"><a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a>)</td><td class="entry"><a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a>)</td><td class="entry"><a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a>)</td><td class="entry"><a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a>)</td><td class="entry"><a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a>)</td><td class="entry"><a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a>)</td><td class="entry"><a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a>)</td><td class="entry"><a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>zero_allocator</b>() (defined in <a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a>)</td><td class="entry"><a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>zero_allocator</b>(const zero_allocator &a) (defined in <a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a>)</td><td class="entry"><a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>zero_allocator</b>(const zero_allocator< U > &a) (defined in <a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a>)</td><td class="entry"><a class="el" href="a00169.html">tbb::zero_allocator< T, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00310.html b/doc/html/a00310.html
index 34bb2c8..5a5dcb7 100644
--- a/doc/html/a00310.html
+++ b/doc/html/a00310.html
@@ -33,44 +33,22 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00159.html">tbb_allocator</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00169.html">zero_allocator</a></li><li class="navelem"><a class="el" href="a00110.html">rebind</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::tbb_allocator< T > Member List</div>  </div>
+<div class="title">tbb::zero_allocator< T, Allocator >::rebind< U > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00159.html">tbb::tbb_allocator< T ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00110.html">tbb::zero_allocator< T, Allocator >::rebind< U ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>address</b>(reference x) const  (defined in <a class="el" href="a00159.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00159.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>address</b>(const_reference x) const  (defined in <a class="el" href="a00159.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00159.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00159.html#afedd8a64eed9692083c708f419338e0c">allocate</a>(size_type n, const void *=0)</td><td class="entry"><a class="el" href="a00159.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00159.html#aa4606cff0156ec4237c1571204851bfb">allocator_type</a>()</td><td class="entry"><a class="el" href="a00159.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00159.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00159.html">tbb::tbb_allocator< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00159.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00159.html">tbb::tbb_allocator< T ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00159.html#af54fa3029e33cebe5ba64a8538306fdf">construct</a>(U *p, Args &&...args)</td><td class="entry"><a class="el" href="a00159.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>construct</b>(pointer p, value_type &&value) (defined in <a class="el" href="a00159.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00159.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>construct</b>(pointer p, const value_type &value) (defined in <a class="el" href="a00159.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00159.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00159.html#a28e333e0fff56dd53c20b82cfee430ab">deallocate</a>(pointer p, size_type)</td><td class="entry"><a class="el" href="a00159.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00159.html#ac7b1b393a8ff3399079328c0971c1996">destroy</a>(pointer p)</td><td class="entry"><a class="el" href="a00159.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00159.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00159.html">tbb::tbb_allocator< T ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00159.html#a60463a571d5c20f7762112367261ad94">malloc_type</a> enum name</td><td class="entry"><a class="el" href="a00159.html">tbb::tbb_allocator< T ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00159.html#a0a2676fb8a2f931961d373b88848c93e">max_size</a>() const </td><td class="entry"><a class="el" href="a00159.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00159.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00159.html">tbb::tbb_allocator< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00159.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00159.html">tbb::tbb_allocator< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scalable</b> enum value (defined in <a class="el" href="a00159.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00159.html">tbb::tbb_allocator< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00159.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00159.html">tbb::tbb_allocator< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>standard</b> enum value (defined in <a class="el" href="a00159.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00159.html">tbb::tbb_allocator< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>tbb_allocator</b>() (defined in <a class="el" href="a00159.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00159.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>tbb_allocator</b>(const tbb_allocator &) (defined in <a class="el" href="a00159.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00159.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>tbb_allocator</b>(const tbb_allocator< U > &) (defined in <a class="el" href="a00159.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00159.html">tbb::tbb_allocator< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00159.html">tbb::tbb_allocator< T ></a>)</td><td class="entry"><a class="el" href="a00159.html">tbb::tbb_allocator< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>other</b> typedef (defined in <a class="el" href="a00110.html">tbb::zero_allocator< T, Allocator >::rebind< U ></a>)</td><td class="entry"><a class="el" href="a00110.html">tbb::zero_allocator< T, Allocator >::rebind< U ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00311.html b/doc/html/a00311.html
index a10e1e4..0e462c8 100644
--- a/doc/html/a00311.html
+++ b/doc/html/a00311.html
@@ -33,22 +33,25 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00159.html">tbb_allocator</a></li><li class="navelem"><a class="el" href="a00117.html">rebind</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00170.html">zero_allocator< void, Allocator ></a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::tbb_allocator< T >::rebind< U > Member List</div>  </div>
+<div class="title">tbb::zero_allocator< void, Allocator > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00117.html">tbb::tbb_allocator< T >::rebind< U ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00170.html">tbb::zero_allocator< void, Allocator ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>other</b> typedef (defined in <a class="el" href="a00117.html">tbb::tbb_allocator< T >::rebind< U ></a>)</td><td class="entry"><a class="el" href="a00117.html">tbb::tbb_allocator< T >::rebind< U ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>base_allocator_type</b> typedef (defined in <a class="el" href="a00170.html">tbb::zero_allocator< void, Allocator ></a>)</td><td class="entry"><a class="el" href="a00170.html">tbb::zero_allocator< void, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00170.html">tbb::zero_allocator< void, Allocator ></a>)</td><td class="entry"><a class="el" href="a00170.html">tbb::zero_allocator< void, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00170.html">tbb::zero_allocator< void, Allocator ></a>)</td><td class="entry"><a class="el" href="a00170.html">tbb::zero_allocator< void, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00170.html">tbb::zero_allocator< void, Allocator ></a>)</td><td class="entry"><a class="el" href="a00170.html">tbb::zero_allocator< void, Allocator ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00312.html b/doc/html/a00312.html
index 1becd6c..bf9df52 100644
--- a/doc/html/a00312.html
+++ b/doc/html/a00312.html
@@ -33,24 +33,22 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00160.html">tbb_allocator< void ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00170.html">zero_allocator< void, Allocator ></a></li><li class="navelem"><a class="el" href="a00117.html">rebind</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::tbb_allocator< void > Member List</div>  </div>
+<div class="title">tbb::zero_allocator< void, Allocator >::rebind< U > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00160.html">tbb::tbb_allocator< void ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00117.html">tbb::zero_allocator< void, Allocator >::rebind< U ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00160.html">tbb::tbb_allocator< void ></a>)</td><td class="entry"><a class="el" href="a00160.html">tbb::tbb_allocator< void ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00160.html">tbb::tbb_allocator< void ></a>)</td><td class="entry"><a class="el" href="a00160.html">tbb::tbb_allocator< void ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00160.html">tbb::tbb_allocator< void ></a>)</td><td class="entry"><a class="el" href="a00160.html">tbb::tbb_allocator< void ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>other</b> typedef (defined in <a class="el" href="a00117.html">tbb::zero_allocator< void, Allocator >::rebind< U ></a>)</td><td class="entry"><a class="el" href="a00117.html">tbb::zero_allocator< void, Allocator >::rebind< U ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00313.html b/doc/html/a00313.html
index 7e90c3c..736b048 100644
--- a/doc/html/a00313.html
+++ b/doc/html/a00313.html
@@ -33,22 +33,23 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00160.html">tbb_allocator< void ></a></li><li class="navelem"><a class="el" href="a00118.html">rebind</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00018.html">bad_last_alloc</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::tbb_allocator< void >::rebind< U > Member List</div>  </div>
+<div class="title">tbb::bad_last_alloc Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00118.html">tbb::tbb_allocator< void >::rebind< U ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00018.html">tbb::bad_last_alloc</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>other</b> typedef (defined in <a class="el" href="a00118.html">tbb::tbb_allocator< void >::rebind< U ></a>)</td><td class="entry"><a class="el" href="a00118.html">tbb::tbb_allocator< void >::rebind< U ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>what</b>() const __TBB_override (defined in <a class="el" href="a00018.html">tbb::bad_last_alloc</a>)</td><td class="entry"><a class="el" href="a00018.html">tbb::bad_last_alloc</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>~bad_last_alloc</b>() __TBB_override (defined in <a class="el" href="a00018.html">tbb::bad_last_alloc</a>)</td><td class="entry"><a class="el" href="a00018.html">tbb::bad_last_alloc</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00314.html b/doc/html/a00314.html
index 7d5cb42..870cd92 100644
--- a/doc/html/a00314.html
+++ b/doc/html/a00314.html
@@ -33,33 +33,22 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00177.html">zero_allocator</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00071.html">improper_lock</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::zero_allocator< T, Allocator > Member List</div>  </div>
+<div class="title">tbb::improper_lock Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00071.html">tbb::improper_lock</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocate</b>(const size_type n, const void *hint=0) (defined in <a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a>)</td><td class="entry"><a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>base_allocator_type</b> typedef (defined in <a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a>)</td><td class="entry"><a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a>)</td><td class="entry"><a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a>)</td><td class="entry"><a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a>)</td><td class="entry"><a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a>)</td><td class="entry"><a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a>)</td><td class="entry"><a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a>)</td><td class="entry"><a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a>)</td><td class="entry"><a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>zero_allocator</b>() (defined in <a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a>)</td><td class="entry"><a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>zero_allocator</b>(const zero_allocator &a) (defined in <a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a>)</td><td class="entry"><a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>zero_allocator</b>(const zero_allocator< U > &a) (defined in <a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a>)</td><td class="entry"><a class="el" href="a00177.html">tbb::zero_allocator< T, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>what</b>() const __TBB_override (defined in <a class="el" href="a00071.html">tbb::improper_lock</a>)</td><td class="entry"><a class="el" href="a00071.html">tbb::improper_lock</a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00315.html b/doc/html/a00315.html
index 15b9d75..ef3f5fa 100644
--- a/doc/html/a00315.html
+++ b/doc/html/a00315.html
@@ -33,22 +33,22 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00177.html">zero_allocator</a></li><li class="navelem"><a class="el" href="a00119.html">rebind</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00168.html">user_abort</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::zero_allocator< T, Allocator >::rebind< U > Member List</div>  </div>
+<div class="title">tbb::user_abort Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00119.html">tbb::zero_allocator< T, Allocator >::rebind< U ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00168.html">tbb::user_abort</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>other</b> typedef (defined in <a class="el" href="a00119.html">tbb::zero_allocator< T, Allocator >::rebind< U ></a>)</td><td class="entry"><a class="el" href="a00119.html">tbb::zero_allocator< T, Allocator >::rebind< U ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>what</b>() const __TBB_override (defined in <a class="el" href="a00168.html">tbb::user_abort</a>)</td><td class="entry"><a class="el" href="a00168.html">tbb::user_abort</a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00316.html b/doc/html/a00316.html
index 127d0ab..6c75e9e 100644
--- a/doc/html/a00316.html
+++ b/doc/html/a00316.html
@@ -33,25 +33,22 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00178.html">zero_allocator< void, Allocator ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00080.html">missing_wait</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::zero_allocator< void, Allocator > Member List</div>  </div>
+<div class="title">tbb::missing_wait Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00178.html">tbb::zero_allocator< void, Allocator ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00080.html">tbb::missing_wait</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>base_allocator_type</b> typedef (defined in <a class="el" href="a00178.html">tbb::zero_allocator< void, Allocator ></a>)</td><td class="entry"><a class="el" href="a00178.html">tbb::zero_allocator< void, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00178.html">tbb::zero_allocator< void, Allocator ></a>)</td><td class="entry"><a class="el" href="a00178.html">tbb::zero_allocator< void, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00178.html">tbb::zero_allocator< void, Allocator ></a>)</td><td class="entry"><a class="el" href="a00178.html">tbb::zero_allocator< void, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00178.html">tbb::zero_allocator< void, Allocator ></a>)</td><td class="entry"><a class="el" href="a00178.html">tbb::zero_allocator< void, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>what</b>() const __TBB_override (defined in <a class="el" href="a00080.html">tbb::missing_wait</a>)</td><td class="entry"><a class="el" href="a00080.html">tbb::missing_wait</a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00317.html b/doc/html/a00317.html
index 5b9a020..dd4145a 100644
--- a/doc/html/a00317.html
+++ b/doc/html/a00317.html
@@ -33,22 +33,22 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00178.html">zero_allocator< void, Allocator ></a></li><li class="navelem"><a class="el" href="a00120.html">rebind</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00073.html">invalid_multiple_scheduling</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::zero_allocator< void, Allocator >::rebind< U > Member List</div>  </div>
+<div class="title">tbb::invalid_multiple_scheduling Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00120.html">tbb::zero_allocator< void, Allocator >::rebind< U ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00073.html">tbb::invalid_multiple_scheduling</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>other</b> typedef (defined in <a class="el" href="a00120.html">tbb::zero_allocator< void, Allocator >::rebind< U ></a>)</td><td class="entry"><a class="el" href="a00120.html">tbb::zero_allocator< void, Allocator >::rebind< U ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>what</b>() const __TBB_override (defined in <a class="el" href="a00073.html">tbb::invalid_multiple_scheduling</a>)</td><td class="entry"><a class="el" href="a00073.html">tbb::invalid_multiple_scheduling</a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00318.html b/doc/html/a00318.html
index b0770ef..20e4723 100644
--- a/doc/html/a00318.html
+++ b/doc/html/a00318.html
@@ -33,23 +33,28 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00020.html">bad_last_alloc</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00155.html">tbb_exception</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::bad_last_alloc Member List</div>  </div>
+<div class="title">tbb::tbb_exception Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00020.html">tbb::bad_last_alloc</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00155.html">tbb::tbb_exception</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>what</b>() const  (defined in <a class="el" href="a00020.html">tbb::bad_last_alloc</a>)</td><td class="entry"><a class="el" href="a00020.html">tbb::bad_last_alloc</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~bad_last_alloc</b>() (defined in <a class="el" href="a00020.html">tbb::bad_last_alloc</a>)</td><td class="entry"><a class="el" href="a00020.html">tbb::bad_last_alloc</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00155.html#ad3bc09bf78c33f19a0bcdf882fdf9d41">destroy</a>()=0</td><td class="entry"><a class="el" href="a00155.html">tbb::tbb_exception</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00155.html#a4bd4ba0d501021013d1473d21b020b69">move</a>()=0</td><td class="entry"><a class="el" href="a00155.html">tbb::tbb_exception</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00155.html#a282bb7dce5f157d044d14d50cd6ff35c">name</a>() const =0</td><td class="entry"><a class="el" href="a00155.html">tbb::tbb_exception</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00155.html#a6a973c37078afedf7d457ff4704bf8cd">operator delete</a>(void *p)</td><td class="entry"><a class="el" href="a00155.html">tbb::tbb_exception</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00155.html#ae45c08d36c7ec7ae91785da3515a8828">throw_self</a>()=0</td><td class="entry"><a class="el" href="a00155.html">tbb::tbb_exception</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00155.html#aa6739787c42d80943e18913cce47f42f">what</a>() const __TBB_override=0</td><td class="entry"><a class="el" href="a00155.html">tbb::tbb_exception</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~tbb_exception</b>() (defined in <a class="el" href="a00155.html">tbb::tbb_exception</a>)</td><td class="entry"><a class="el" href="a00155.html">tbb::tbb_exception</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00319.html b/doc/html/a00319.html
index fc5a1ee..b7506bd 100644
--- a/doc/html/a00319.html
+++ b/doc/html/a00319.html
@@ -33,22 +33,34 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00074.html">improper_lock</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00032.html">captured_exception</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::improper_lock Member List</div>  </div>
+<div class="title">tbb::captured_exception Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00074.html">tbb::improper_lock</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00032.html">tbb::captured_exception</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>what</b>() const  (defined in <a class="el" href="a00074.html">tbb::improper_lock</a>)</td><td class="entry"><a class="el" href="a00074.html">tbb::improper_lock</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>captured_exception</b>(const captured_exception &src) (defined in <a class="el" href="a00032.html">tbb::captured_exception</a>)</td><td class="entry"><a class="el" href="a00032.html">tbb::captured_exception</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>captured_exception</b>(const char *name_, const char *info) (defined in <a class="el" href="a00032.html">tbb::captured_exception</a>)</td><td class="entry"><a class="el" href="a00032.html">tbb::captured_exception</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>clear</b>() (defined in <a class="el" href="a00032.html">tbb::captured_exception</a>)</td><td class="entry"><a class="el" href="a00032.html">tbb::captured_exception</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00032.html#abfc1220a6f9da0361082a3f3ad80cdc9">destroy</a>() __TBB_override</td><td class="entry"><a class="el" href="a00032.html">tbb::captured_exception</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00032.html#a3b75205c631b51a00faf98c9e107f78a">move</a>() __TBB_override</td><td class="entry"><a class="el" href="a00032.html">tbb::captured_exception</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00032.html#a543e1a18c9a3f3b093c8c2bd927a6d12">name</a>() const __TBB_override</td><td class="entry"><a class="el" href="a00032.html">tbb::captured_exception</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00155.html#a6a973c37078afedf7d457ff4704bf8cd">operator delete</a>(void *p)</td><td class="entry"><a class="el" href="a00155.html">tbb::tbb_exception</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const captured_exception &src) (defined in <a class="el" href="a00032.html">tbb::captured_exception</a>)</td><td class="entry"><a class="el" href="a00032.html">tbb::captured_exception</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set</b>(const char *name, const char *info) (defined in <a class="el" href="a00032.html">tbb::captured_exception</a>)</td><td class="entry"><a class="el" href="a00032.html">tbb::captured_exception</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00032.html#a6df0d3a1943ca6f84a9a9aca25e9633d">throw_self</a>() __TBB_override</td><td class="entry"><a class="el" href="a00032.html">tbb::captured_exception</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00032.html#a1e9d36a304dd7e49906754a0cb72da2e">what</a>() const __TBB_override</td><td class="entry"><a class="el" href="a00032.html">tbb::captured_exception</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>~captured_exception</b>() (defined in <a class="el" href="a00032.html">tbb::captured_exception</a>)</td><td class="entry"><a class="el" href="a00032.html">tbb::captured_exception</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~tbb_exception</b>() (defined in <a class="el" href="a00155.html">tbb::tbb_exception</a>)</td><td class="entry"><a class="el" href="a00155.html">tbb::tbb_exception</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00320.html b/doc/html/a00320.html
index c049e95..8efff75 100644
--- a/doc/html/a00320.html
+++ b/doc/html/a00320.html
@@ -33,22 +33,35 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00173.html">user_abort</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00081.html">movable_exception</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::user_abort Member List</div>  </div>
+<div class="title">tbb::movable_exception< ExceptionData > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00173.html">tbb::user_abort</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00081.html">tbb::movable_exception< ExceptionData ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>what</b>() const  (defined in <a class="el" href="a00173.html">tbb::user_abort</a>)</td><td class="entry"><a class="el" href="a00173.html">tbb::user_abort</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>data</b>() (defined in <a class="el" href="a00081.html">tbb::movable_exception< ExceptionData ></a>)</td><td class="entry"><a class="el" href="a00081.html">tbb::movable_exception< ExceptionData ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>data</b>() const  (defined in <a class="el" href="a00081.html">tbb::movable_exception< ExceptionData ></a>)</td><td class="entry"><a class="el" href="a00081.html">tbb::movable_exception< ExceptionData ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00081.html#aa4be7e2bf375edcb218fb5d7ed8e279b">destroy</a>() __TBB_override</td><td class="entry"><a class="el" href="a00081.html">tbb::movable_exception< ExceptionData ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>movable_exception</b>(const ExceptionData &data_) (defined in <a class="el" href="a00081.html">tbb::movable_exception< ExceptionData ></a>)</td><td class="entry"><a class="el" href="a00081.html">tbb::movable_exception< ExceptionData ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>movable_exception</b>(const movable_exception &src) (defined in <a class="el" href="a00081.html">tbb::movable_exception< ExceptionData ></a>)</td><td class="entry"><a class="el" href="a00081.html">tbb::movable_exception< ExceptionData ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00081.html#a46eee42a3279007f48c9e8f11d074d16">move</a>() __TBB_override</td><td class="entry"><a class="el" href="a00081.html">tbb::movable_exception< ExceptionData ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00081.html#adba063da80054afe64d5268711084d9b">my_exception_data</a></td><td class="entry"><a class="el" href="a00081.html">tbb::movable_exception< ExceptionData ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00081.html#ae74fdea1aac39197bc1f5026dfd0a840">name</a>() const __TBB_override</td><td class="entry"><a class="el" href="a00081.html">tbb::movable_exception< ExceptionData ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00155.html#a6a973c37078afedf7d457ff4704bf8cd">operator delete</a>(void *p)</td><td class="entry"><a class="el" href="a00155.html">tbb::tbb_exception</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const movable_exception &src) (defined in <a class="el" href="a00081.html">tbb::movable_exception< ExceptionData ></a>)</td><td class="entry"><a class="el" href="a00081.html">tbb::movable_exception< ExceptionData ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00081.html#a0e9ac8a4468eb0ff3b2bb246b806a10e">throw_self</a>() __TBB_override</td><td class="entry"><a class="el" href="a00081.html">tbb::movable_exception< ExceptionData ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00081.html#a59040b31c3147f7c77232a6cbc76ba05">what</a>() const __TBB_override</td><td class="entry"><a class="el" href="a00081.html">tbb::movable_exception< ExceptionData ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~movable_exception</b>() (defined in <a class="el" href="a00081.html">tbb::movable_exception< ExceptionData ></a>)</td><td class="entry"><a class="el" href="a00081.html">tbb::movable_exception< ExceptionData ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>~tbb_exception</b>() (defined in <a class="el" href="a00155.html">tbb::tbb_exception</a>)</td><td class="entry"><a class="el" href="a00155.html">tbb::tbb_exception</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00321.html b/doc/html/a00321.html
index 8d2137c..b7a2cc1 100644
--- a/doc/html/a00321.html
+++ b/doc/html/a00321.html
@@ -33,22 +33,25 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00096.html">missing_wait</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00163.html">tick_count</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::missing_wait Member List</div>  </div>
+<div class="title">tbb::tick_count Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00096.html">tbb::missing_wait</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00163.html">tbb::tick_count</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>what</b>() const  (defined in <a class="el" href="a00096.html">tbb::missing_wait</a>)</td><td class="entry"><a class="el" href="a00096.html">tbb::missing_wait</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00163.html#a74dcecde7431ff4591d7c46fc1d50d7e">now</a>()</td><td class="entry"><a class="el" href="a00163.html">tbb::tick_count</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00163.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653">operator-</a>(const tick_count &t1, const tick_count &t0)</td><td class="entry"><a class="el" href="a00163.html">tbb::tick_count</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00163.html#aaf6a0d91e7d40f7d68e0ad6b79350e58">resolution</a>()</td><td class="entry"><a class="el" href="a00163.html">tbb::tick_count</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00163.html#a9f1daa0b7a4feb800f802b4be1f1e497">tick_count</a>()</td><td class="entry"><a class="el" href="a00163.html">tbb::tick_count</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00322.html b/doc/html/a00322.html
index eafa310..e5514c4 100644
--- a/doc/html/a00322.html
+++ b/doc/html/a00322.html
@@ -33,22 +33,30 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00086.html">invalid_multiple_scheduling</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><a class="el" href="a00163.html">tick_count</a></li><li class="navelem"><a class="el" href="a00072.html">interval_t</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::invalid_multiple_scheduling Member List</div>  </div>
+<div class="title">tbb::tick_count::interval_t Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00086.html">tbb::invalid_multiple_scheduling</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00072.html">tbb::tick_count::interval_t</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>what</b>() const  (defined in <a class="el" href="a00086.html">tbb::invalid_multiple_scheduling</a>)</td><td class="entry"><a class="el" href="a00086.html">tbb::invalid_multiple_scheduling</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00072.html#a95e3e14750bebafe719856176e2737db">interval_t</a>()</td><td class="entry"><a class="el" href="a00072.html">tbb::tick_count::interval_t</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00072.html#a73b462297173f6bffa15bc5a86c30ef4">interval_t</a>(double sec)</td><td class="entry"><a class="el" href="a00072.html">tbb::tick_count::interval_t</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00072.html#ac8910ee3b69f68eb905af787c273e9a8">operator+</a>(const interval_t &i, const interval_t &j)</td><td class="entry"><a class="el" href="a00072.html">tbb::tick_count::interval_t</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00072.html#a19bf32f4541252daaa6b09fd33fa9177">operator+=</a>(const interval_t &i)</td><td class="entry"><a class="el" href="a00072.html">tbb::tick_count::interval_t</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00072.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653">operator-</a>(const tick_count &t1, const tick_count &t0)</td><td class="entry"><a class="el" href="a00072.html">tbb::tick_count::interval_t</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00072.html#a3d11133daa9a7d3c903d070293278f8f">operator-</a>(const interval_t &i, const interval_t &j)</td><td class="entry"><a class="el" href="a00072.html">tbb::tick_count::interval_t</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00072.html#a3394d9f3678e6a4c3d6e1be840fe2ff2">operator-=</a>(const interval_t &i)</td><td class="entry"><a class="el" href="a00072.html">tbb::tick_count::interval_t</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00072.html#abe81446bbbb6b6e98d854b91acf47809">seconds</a>() const </td><td class="entry"><a class="el" href="a00072.html">tbb::tick_count::interval_t</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>tbb::tick_count</b> (defined in <a class="el" href="a00072.html">tbb::tick_count::interval_t</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::tick_count::interval_t</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00323.html b/doc/html/a00323.html
index 1d66234..da399d8 100644
--- a/doc/html/a00323.html
+++ b/doc/html/a00323.html
@@ -33,28 +33,46 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00161.html">tbb_exception</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00139.html">sender</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::tbb_exception Member List</div>  </div>
+<div class="title">tbb::flow::interface9::sender< T > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00161.html">tbb::tbb_exception</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00161.html#ad3bc09bf78c33f19a0bcdf882fdf9d41">destroy</a>()=0</td><td class="entry"><a class="el" href="a00161.html">tbb::tbb_exception</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00161.html#a4bd4ba0d501021013d1473d21b020b69">move</a>()=0</td><td class="entry"><a class="el" href="a00161.html">tbb::tbb_exception</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00161.html#a282bb7dce5f157d044d14d50cd6ff35c">name</a>() const =0</td><td class="entry"><a class="el" href="a00161.html">tbb::tbb_exception</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00161.html#a6a973c37078afedf7d457ff4704bf8cd">operator delete</a>(void *p)</td><td class="entry"><a class="el" href="a00161.html">tbb::tbb_exception</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00161.html#ae45c08d36c7ec7ae91785da3515a8828">throw_self</a>()=0</td><td class="entry"><a class="el" href="a00161.html">tbb::tbb_exception</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00161.html#ae0ad81121d4b722ecc466b5d3cc4e919">what</a>() const =0</td><td class="entry"><a class="el" href="a00161.html">tbb::tbb_exception</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~tbb_exception</b>() (defined in <a class="el" href="a00161.html">tbb::tbb_exception</a>)</td><td class="entry"><a class="el" href="a00161.html">tbb::tbb_exception</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_successors</b>()=0 (defined in <a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a>)</td><td class="entry"><a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00139.html#a437ea39be02895899af68a1a91f6c1e5">built_successors_type</a> typedef</td><td class="entry"><a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copy_successors</b>(successor_list_type &)=0 (defined in <a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a>)</td><td class="entry"><a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>filtered_type</b> typedef (defined in <a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a>)</td><td class="entry"><a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_add_built_successor</b>(successor_type &)=0 (defined in <a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a>)</td><td class="entry"><a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_delete_built_successor</b>(successor_type &)=0 (defined in <a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a>)</td><td class="entry"><a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00139.html#a7824890d85a80842e2c9b2258cd7c484">output_type</a> typedef</td><td class="entry"><a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00139.html#a7824890d85a80842e2c9b2258cd7c484">output_type</a> typedef</td><td class="entry"><a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00139.html#af481e8df87d085c3054bd7c76d7f50ef">register_successor</a>(successor_type &r)=0</td><td class="entry"><a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00139.html#a7b94781eff02591069fd8afdfd7f01d7">remove_successor</a>(successor_type &r)=0</td><td class="entry"><a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>successor_count</b>()=0 (defined in <a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a>)</td><td class="entry"><a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>successor_list_type</b> typedef (defined in <a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a>)</td><td class="entry"><a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00139.html#a2e54e49c21aed85603dd1f0ed5ca8e2e">successor_type</a> typedef</td><td class="entry"><a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00139.html#a0d0fa0cabcbbc4b1ba219ab806b85aa1">try_consume</a>()</td><td class="entry"><a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00139.html#a1cd7d47cd6ac5db05c0868ca43231633">try_get</a>(T &)</td><td class="entry"><a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00139.html#a1cd7d47cd6ac5db05c0868ca43231633">try_get</a>(T &)</td><td class="entry"><a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00165.html#a3c422ea58b7f11b6cc536539000a556e">tbb::flow::interface9::internal::untyped_sender::try_get</a>(X &t)</td><td class="entry"><a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>try_get_wrapper</b>(void *p, bool is_async) __TBB_override (defined in <a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a>)</td><td class="entry"><a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00139.html#a554f795789a3902760847a1e83a2f0ad">try_release</a>()</td><td class="entry"><a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00139.html#a82caccf2fcbbad3f255380260c39d02c">try_reserve</a>(T &)</td><td class="entry"><a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00139.html#a82caccf2fcbbad3f255380260c39d02c">try_reserve</a>(T &)</td><td class="entry"><a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00165.html#ad48b26c7dec4845e1cb374e9f1c59fea">tbb::flow::interface9::internal::untyped_sender::try_reserve</a>(X &t)</td><td class="entry"><a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>try_reserve_wrapper</b>(void *p, bool is_async) __TBB_override (defined in <a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a>)</td><td class="entry"><a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>~sender</b>() (defined in <a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a>)</td><td class="entry"><a class="el" href="a00139.html">tbb::flow::interface9::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~untyped_sender</b>() (defined in <a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a>)</td><td class="entry"><a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00324.html b/doc/html/a00324.html
index 982353d..b1fbc5c 100644
--- a/doc/html/a00324.html
+++ b/doc/html/a00324.html
@@ -33,34 +33,54 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00035.html">captured_exception</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00119.html">receiver</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::captured_exception Member List</div>  </div>
+<div class="title">tbb::flow::interface9::receiver< T > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00035.html">tbb::captured_exception</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>captured_exception</b>(const captured_exception &src) (defined in <a class="el" href="a00035.html">tbb::captured_exception</a>)</td><td class="entry"><a class="el" href="a00035.html">tbb::captured_exception</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>captured_exception</b>(const char *name_, const char *info) (defined in <a class="el" href="a00035.html">tbb::captured_exception</a>)</td><td class="entry"><a class="el" href="a00035.html">tbb::captured_exception</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>clear</b>() (defined in <a class="el" href="a00035.html">tbb::captured_exception</a>)</td><td class="entry"><a class="el" href="a00035.html">tbb::captured_exception</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00035.html#a3006b6825dda6c746d28fb748f5675de">destroy</a>()</td><td class="entry"><a class="el" href="a00035.html">tbb::captured_exception</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00035.html#abb221485cd260349efdef681f633a6a4">move</a>()</td><td class="entry"><a class="el" href="a00035.html">tbb::captured_exception</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00035.html#a23426113851b78d3f0069956afd21976">name</a>() const </td><td class="entry"><a class="el" href="a00035.html">tbb::captured_exception</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00161.html#a6a973c37078afedf7d457ff4704bf8cd">operator delete</a>(void *p)</td><td class="entry"><a class="el" href="a00161.html">tbb::tbb_exception</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const captured_exception &src) (defined in <a class="el" href="a00035.html">tbb::captured_exception</a>)</td><td class="entry"><a class="el" href="a00035.html">tbb::captured_exception</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set</b>(const char *name, const char *info) (defined in <a class="el" href="a00035.html">tbb::captured_exception</a>)</td><td class="entry"><a class="el" href="a00035.html">tbb::captured_exception</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00035.html#ac9ae925678fcc0cc02a74df7d06b8d63">throw_self</a>()</td><td class="entry"><a class="el" href="a00035.html">tbb::captured_exception</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00035.html#ac97ee315d8613c803dae2f6d3e0b91a7">what</a>() const </td><td class="entry"><a class="el" href="a00035.html">tbb::captured_exception</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~captured_exception</b>() (defined in <a class="el" href="a00035.html">tbb::captured_exception</a>)</td><td class="entry"><a class="el" href="a00035.html">tbb::captured_exception</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~tbb_exception</b>() (defined in <a class="el" href="a00161.html">tbb::tbb_exception</a>)</td><td class="entry"><a class="el" href="a00161.html">tbb::tbb_exception</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_predecessors</b>()=0 (defined in <a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>built_predecessors_type</b> typedef (defined in <a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copy_predecessors</b>(predecessor_list_type &)=0 (defined in <a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>filtered_type</b> typedef (defined in <a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00119.html#ac7e1e823c3a7d6e491e336ff832a2495">input_type</a> typedef</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00119.html#ac7e1e823c3a7d6e491e336ff832a2495">input_type</a> typedef</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::async_helpers</b> (defined in <a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::async_storage</b> (defined in <a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::broadcast_cache</b> (defined in <a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::round_robin_cache</b> (defined in <a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::successor_cache</b> (defined in <a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_add_built_predecessor</b>(predecessor_type &)=0 (defined in <a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_delete_built_predecessor</b>(predecessor_type &)=0 (defined in <a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_continue_receiver</b>() (defined in <a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00119.html#a05ec930a348f7eed564236d00edbda24">limiter_node</a> class</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>predecessor_count</b>()=0 (defined in <a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>predecessor_list_type</b> typedef (defined in <a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00119.html#a97b14fcd2a562cf47a9548764c4e5abc">predecessor_type</a> typedef</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>proxy_dependency_receiver</b> (defined in <a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00119.html#a272b4aa85424e7e96371868403fe3c54">register_predecessor</a>(predecessor_type &)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00119.html#ae8f45b84f3179964dd77f32835ece6c0">remove_predecessor</a>(predecessor_type &)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00119.html#a4b0f31d3bc03ce4cb1b00819aeb1d37e">reset_receiver</a>(reset_flags f=rf_reset_protocol)=0</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00119.html#abaf9bf74ca5f2854d09f5f07337280eb">run_and_put_task</a> class</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00119.html#a6ac09b1571cea3efd1fdbdaf4e6ce71a">try_put</a>(const typename internal::async_helpers< T >::filtered_type &t)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>try_put</b>(const typename internal::async_helpers< T >::async_type &t) (defined in <a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00119.html#a7f58c8ec0f790193be2e477b2546ead2">try_put</a>(const T &t)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00164.html#a84f8406cd5e3252965d9e238575eaede">tbb::flow::interface9::internal::untyped_receiver::try_put</a>(const X &t)</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00119.html#aaff8d049a1209b14e6e871768c82a629">try_put_task</a>(const T &t)=0</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>try_put_task</b>(const T &t)=0 (defined in <a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>try_put_task</b>(const X &t) (defined in <a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>try_put_task_wrapper</b>(const void *p, bool is_async) __TBB_override (defined in <a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00119.html#a33c66d3eb36a9e95db44fce5efeb65b4">~receiver</a>()</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00164.html#a632631c8a370c1dd1fa8815cbc5e18ec">~untyped_receiver</a>()</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00325.html b/doc/html/a00325.html
index f5bf6bb..10dbf2b 100644
--- a/doc/html/a00325.html
+++ b/doc/html/a00325.html
@@ -33,35 +33,57 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00097.html">movable_exception</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00049.html">continue_receiver</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::movable_exception< ExceptionData > Member List</div>  </div>
+<div class="title">tbb::flow::interface9::continue_receiver Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00097.html">tbb::movable_exception< ExceptionData ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>data</b>() (defined in <a class="el" href="a00097.html">tbb::movable_exception< ExceptionData ></a>)</td><td class="entry"><a class="el" href="a00097.html">tbb::movable_exception< ExceptionData ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>data</b>() const  (defined in <a class="el" href="a00097.html">tbb::movable_exception< ExceptionData ></a>)</td><td class="entry"><a class="el" href="a00097.html">tbb::movable_exception< ExceptionData ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00097.html#a02f0401b465690de797face2432d9421">destroy</a>()</td><td class="entry"><a class="el" href="a00097.html">tbb::movable_exception< ExceptionData ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>movable_exception</b>(const ExceptionData &data_) (defined in <a class="el" href="a00097.html">tbb::movable_exception< ExceptionData ></a>)</td><td class="entry"><a class="el" href="a00097.html">tbb::movable_exception< ExceptionData ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>movable_exception</b>(const movable_exception &src) (defined in <a class="el" href="a00097.html">tbb::movable_exception< ExceptionData ></a>)</td><td class="entry"><a class="el" href="a00097.html">tbb::movable_exception< ExceptionData ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00097.html#aeb47d3ac90a1f01fe642b572f6ac519d">move</a>()</td><td class="entry"><a class="el" href="a00097.html">tbb::movable_exception< ExceptionData ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00097.html#adba063da80054afe64d5268711084d9b">my_exception_data</a></td><td class="entry"><a class="el" href="a00097.html">tbb::movable_exception< ExceptionData ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00097.html#a65dd805ed2424f1d2d0998f5567a9690">name</a>() const </td><td class="entry"><a class="el" href="a00097.html">tbb::movable_exception< ExceptionData ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00161.html#a6a973c37078afedf7d457ff4704bf8cd">operator delete</a>(void *p)</td><td class="entry"><a class="el" href="a00161.html">tbb::tbb_exception</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const movable_exception &src) (defined in <a class="el" href="a00097.html">tbb::movable_exception< ExceptionData ></a>)</td><td class="entry"><a class="el" href="a00097.html">tbb::movable_exception< ExceptionData ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00097.html#a3d1570b53220fbcb45eb81552b57827a">throw_self</a>()</td><td class="entry"><a class="el" href="a00097.html">tbb::movable_exception< ExceptionData ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00097.html#a41a2a7b61537ecd684bae760366f611c">what</a>() const </td><td class="entry"><a class="el" href="a00097.html">tbb::movable_exception< ExceptionData ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~movable_exception</b>() (defined in <a class="el" href="a00097.html">tbb::movable_exception< ExceptionData ></a>)</td><td class="entry"><a class="el" href="a00097.html">tbb::movable_exception< ExceptionData ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~tbb_exception</b>() (defined in <a class="el" href="a00161.html">tbb::tbb_exception</a>)</td><td class="entry"><a class="el" href="a00161.html">tbb::tbb_exception</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_predecessors</b>() __TBB_override (defined in <a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>built_predecessors_type</b> typedef (defined in <a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00049.html#a1e72842b80f083994dd44bdb53e2284b">continue_receiver</a>(int number_of_predecessors=0)</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00049.html#a3483cef04880be4c4c3907936af9afae">continue_receiver</a>(const continue_receiver &src)</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copy_predecessors</b>(predecessor_list_type &v) __TBB_override (defined in <a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00049.html#ace97f82507453a8f3bc234d8de9f960d">execute</a>()=0</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>filtered_type</b> typedef (defined in <a class="el" href="a00119.html">tbb::flow::interface9::receiver< continue_msg ></a>)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< continue_msg ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00049.html#a9b5c2950832344121fcc9e83ce569786">input_type</a> typedef</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::broadcast_cache</b> (defined in <a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::round_robin_cache</b> (defined in <a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::successor_cache</b> (defined in <a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_add_built_predecessor</b>(predecessor_type &s) __TBB_override (defined in <a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_delete_built_predecessor</b>(predecessor_type &s) __TBB_override (defined in <a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_continue_receiver</b>() __TBB_override (defined in <a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>limiter_node</b> (defined in <a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_built_predecessors</b> (defined in <a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_current_count</b> (defined in <a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_initial_predecessor_count</b> (defined in <a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_mutex</b> (defined in <a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_predecessor_count</b> (defined in <a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>predecessor_count</b>() __TBB_override (defined in <a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>predecessor_list_type</b> typedef (defined in <a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00049.html#a2c67857ee60501f3a3e0afeeaf06b957">predecessor_type</a> typedef</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00049.html#a3921e10cb2c5666d4541259d47713754">register_predecessor</a>(predecessor_type &) __TBB_override</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00049.html#aa0c679a297c71fba43380b07ef69563b">remove_predecessor</a>(predecessor_type &) __TBB_override</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00049.html#a7074cdcd8437cde18780f7dcca69e349">reset_receiver</a>(reset_flags f) __TBB_override</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>run_and_put_task</b> (defined in <a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00119.html#a6ac09b1571cea3efd1fdbdaf4e6ce71a">try_put</a>(const typename internal::async_helpers< continue_msg >::filtered_type &t)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< continue_msg ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>try_put</b>(const typename internal::async_helpers< continue_msg >::async_type &t) (defined in <a class="el" href="a00119.html">tbb::flow::interface9::receiver< continue_msg ></a>)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< continue_msg ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00119.html#a7f58c8ec0f790193be2e477b2546ead2">try_put</a>(const continue_msg &t)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< continue_msg ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00164.html#a84f8406cd5e3252965d9e238575eaede">tbb::flow::interface9::internal::untyped_receiver::try_put</a>(const X &t)</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00049.html#a83b0bfae936dac53172d62a6dab4062e">try_put_task</a>(const input_type &) __TBB_override</td><td class="entry"><a class="el" href="a00049.html">tbb::flow::interface9::continue_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>try_put_task</b>(const X &t) (defined in <a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>try_put_task_wrapper</b>(const void *p, bool is_async) __TBB_override (defined in <a class="el" href="a00119.html">tbb::flow::interface9::receiver< continue_msg ></a>)</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< continue_msg ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00119.html#a33c66d3eb36a9e95db44fce5efeb65b4">~receiver</a>()</td><td class="entry"><a class="el" href="a00119.html">tbb::flow::interface9::receiver< continue_msg ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00164.html#a632631c8a370c1dd1fa8815cbc5e18ec">~untyped_receiver</a>()</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00326.html b/doc/html/a00326.html
index 555433b..255db7f 100644
--- a/doc/html/a00326.html
+++ b/doc/html/a00326.html
@@ -33,25 +33,24 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00170.html">tick_count</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00069.html">graph_proxy</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::tick_count Member List</div>  </div>
+<div class="title">tbb::flow::interface9::graph_proxy Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00170.html">tbb::tick_count</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00069.html">tbb::flow::interface9::graph_proxy</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00170.html#a74dcecde7431ff4591d7c46fc1d50d7e">now</a>()</td><td class="entry"><a class="el" href="a00170.html">tbb::tick_count</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00170.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653">operator-</a>(const tick_count &t1, const tick_count &t0)</td><td class="entry"><a class="el" href="a00170.html">tbb::tick_count</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00170.html#aaf6a0d91e7d40f7d68e0ad6b79350e58">resolution</a>()</td><td class="entry"><a class="el" href="a00170.html">tbb::tick_count</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00170.html#a9f1daa0b7a4feb800f802b4be1f1e497">tick_count</a>()</td><td class="entry"><a class="el" href="a00170.html">tbb::tick_count</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00069.html#a5f751c4f3a0b5be4f97b2b857aaecea0">release_wait</a>()=0</td><td class="entry"><a class="el" href="a00069.html">tbb::flow::interface9::graph_proxy</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00069.html#a89db56a08929f4d3e45d27838cec3272">reserve_wait</a>()=0</td><td class="entry"><a class="el" href="a00069.html">tbb::flow::interface9::graph_proxy</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~graph_proxy</b>() (defined in <a class="el" href="a00069.html">tbb::flow::interface9::graph_proxy</a>)</td><td class="entry"><a class="el" href="a00069.html">tbb::flow::interface9::graph_proxy</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00327.html b/doc/html/a00327.html
index a8632fc..9306472 100644
--- a/doc/html/a00327.html
+++ b/doc/html/a00327.html
@@ -33,30 +33,26 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><a class="el" href="a00170.html">tick_count</a></li><li class="navelem"><a class="el" href="a00085.html">interval_t</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00120.html">receiver_gateway</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::tick_count::interval_t Member List</div>  </div>
+<div class="title">tbb::flow::interface9::receiver_gateway< Input > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00085.html">tbb::tick_count::interval_t</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00120.html">tbb::flow::interface9::receiver_gateway< Input ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00085.html#a95e3e14750bebafe719856176e2737db">interval_t</a>()</td><td class="entry"><a class="el" href="a00085.html">tbb::tick_count::interval_t</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00085.html#a73b462297173f6bffa15bc5a86c30ef4">interval_t</a>(double sec)</td><td class="entry"><a class="el" href="a00085.html">tbb::tick_count::interval_t</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00085.html#ac8910ee3b69f68eb905af787c273e9a8">operator+</a>(const interval_t &i, const interval_t &j)</td><td class="entry"><a class="el" href="a00085.html">tbb::tick_count::interval_t</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00085.html#a19bf32f4541252daaa6b09fd33fa9177">operator+=</a>(const interval_t &i)</td><td class="entry"><a class="el" href="a00085.html">tbb::tick_count::interval_t</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00085.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653">operator-</a>(const tick_count &t1, const tick_count &t0)</td><td class="entry"><a class="el" href="a00085.html">tbb::tick_count::interval_t</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00085.html#a3d11133daa9a7d3c903d070293278f8f">operator-</a>(const interval_t &i, const interval_t &j)</td><td class="entry"><a class="el" href="a00085.html">tbb::tick_count::interval_t</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00085.html#a3394d9f3678e6a4c3d6e1be840fe2ff2">operator-=</a>(const interval_t &i)</td><td class="entry"><a class="el" href="a00085.html">tbb::tick_count::interval_t</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00085.html#abe81446bbbb6b6e98d854b91acf47809">seconds</a>() const </td><td class="entry"><a class="el" href="a00085.html">tbb::tick_count::interval_t</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>tbb::tick_count</b> (defined in <a class="el" href="a00085.html">tbb::tick_count::interval_t</a>)</td><td class="entry"><a class="el" href="a00085.html">tbb::tick_count::interval_t</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00120.html#a67a0833e5e6520286423a5f04969dcd4">input_type</a> typedef</td><td class="entry"><a class="el" href="a00120.html">tbb::flow::interface9::receiver_gateway< Input ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00069.html#a5f751c4f3a0b5be4f97b2b857aaecea0">release_wait</a>()=0</td><td class="entry"><a class="el" href="a00069.html">tbb::flow::interface9::graph_proxy</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00069.html#a89db56a08929f4d3e45d27838cec3272">reserve_wait</a>()=0</td><td class="entry"><a class="el" href="a00069.html">tbb::flow::interface9::graph_proxy</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00120.html#a382797f42de522b37205415703cb32bd">try_put</a>(const input_type &)=0</td><td class="entry"><a class="el" href="a00120.html">tbb::flow::interface9::receiver_gateway< Input ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~graph_proxy</b>() (defined in <a class="el" href="a00069.html">tbb::flow::interface9::graph_proxy</a>)</td><td class="entry"><a class="el" href="a00069.html">tbb::flow::interface9::graph_proxy</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00328.html b/doc/html/a00328.html
index 3666006..9c2a91b 100644
--- a/doc/html/a00328.html
+++ b/doc/html/a00328.html
@@ -33,37 +33,41 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00142.html">sender</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00088.html">opencl_buffer_impl</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::sender< T > Member List</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_buffer_impl< Factory > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00088.html">tbb::flow::interface9::opencl_buffer_impl< Factory ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_successors</b>()=0 (defined in <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a>)</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">built_successors_type</a> typedef</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copy_successors</b>(successor_list_type &)=0 (defined in <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a>)</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_add_built_successor</b>(successor_type &)=0 (defined in <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a>)</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_delete_built_successor</b>(successor_type &)=0 (defined in <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a>)</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">output_type</a> typedef</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00142.html#a4dac8f53a1f8373c1f3a874b9617e4ec">register_successor</a>(successor_type &r)=0</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00142.html#ac1ae19f49e31c6ca94dcf14732eb7a64">remove_successor</a>(successor_type &r)=0</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>successor_count</b>()=0 (defined in <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a>)</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>successor_list_type</b> typedef (defined in <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a>)</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">successor_type</a> typedef</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00142.html#ad404d5218c7ae2556261ffa880cdf804">try_consume</a>()</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00142.html#ad50b8ac93e79cbdcd2bba11d35432f2c">try_get</a>(T &)</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00142.html#a97ac316ddfb6bd7c7f2f56e3e819a30a">try_release</a>()</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00142.html#aa1b9dcf77ab558530ff93a706b4c4b5d">try_reserve</a>(T &)</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~sender</b>() (defined in <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a>)</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>factory</b>() const  (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>get_cl_mem</b>() const  (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_host_ptr</b>() (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>map_memory</b>(opencl_device device, dependency_msg< void *, Factory > &dmsg) __TBB_override (defined in <a class="el" href="a00088.html">tbb::flow::interface9::opencl_buffer_impl< Factory ></a>)</td><td class="entry"><a class="el" href="a00088.html">tbb::flow::interface9::opencl_buffer_impl< Factory ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_cl_mem</b> (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_curr_device_id</b> (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_factory</b> (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_host_ptr</b> (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_sending_event</b> (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_sending_event_present</b> (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_sending_lock</b> (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_buffer</b> (defined in <a class="el" href="a00088.html">tbb::flow::interface9::opencl_buffer_impl< Factory ></a>)</td><td class="entry"><a class="el" href="a00088.html">tbb::flow::interface9::opencl_buffer_impl< Factory ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_buffer_impl</b>(size_t size, Factory &f) (defined in <a class="el" href="a00088.html">tbb::flow::interface9::opencl_buffer_impl< Factory ></a>)</td><td class="entry"><a class="el" href="a00088.html">tbb::flow::interface9::opencl_buffer_impl< Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_buffer_impl</b>(cl_mem m, size_t index, size_t size, Factory &f) (defined in <a class="el" href="a00088.html">tbb::flow::interface9::opencl_buffer_impl< Factory ></a>)</td><td class="entry"><a class="el" href="a00088.html">tbb::flow::interface9::opencl_buffer_impl< Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_memory</b>() (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_memory</b>(Factory &f) (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>receive</b>(const cl_event *e) (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>send</b>(opencl_device d, const cl_event *e) (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>size</b>() const  (defined in <a class="el" href="a00088.html">tbb::flow::interface9::opencl_buffer_impl< Factory ></a>)</td><td class="entry"><a class="el" href="a00088.html">tbb::flow::interface9::opencl_buffer_impl< Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>~opencl_memory</b>() (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00329.html b/doc/html/a00329.html
index e4deec1..ab45b1e 100644
--- a/doc/html/a00329.html
+++ b/doc/html/a00329.html
@@ -33,42 +33,33 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00124.html">receiver</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00099.html">opencl_program</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::receiver< T > Member List</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_program< Factory > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00099.html">tbb::flow::interface9::opencl_program< Factory ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_predecessors</b>()=0 (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>built_predecessors_type</b> typedef (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copy_predecessors</b>(predecessor_list_type &)=0 (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">input_type</a> typedef</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::broadcast_cache</b> (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::round_robin_cache</b> (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::successor_cache</b> (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_add_built_predecessor</b>(predecessor_type &)=0 (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_delete_built_predecessor</b>(predecessor_type &)=0 (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_continue_receiver</b>() (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00124.html#a05ec930a348f7eed564236d00edbda24">limiter_node</a> class</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>predecessor_count</b>()=0 (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>predecessor_list_type</b> typedef (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">predecessor_type</a> typedef</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00124.html#a16427aa709505de93ffe0d79136e4251">register_predecessor</a>(predecessor_type &)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00124.html#a55adae6228bbdc1539695e1ec20e9762">remove_predecessor</a>(predecessor_type &)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_receiver</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00124.html#abaf9bf74ca5f2854d09f5f07337280eb">run_and_put_task</a> class</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00124.html#aee5067bb4f4b71ffa786c1b33cb9aa6a">try_put</a>(const T &t)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>try_put_task</b>(const T &t)=0 (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00124.html#a733889a9053478ef2fb2528e2205bf07">~receiver</a>()</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_kernel</b>(const std::string &k) const  (defined in <a class="el" href="a00099.html">tbb::flow::interface9::opencl_program< Factory ></a>)</td><td class="entry"><a class="el" href="a00099.html">tbb::flow::interface9::opencl_program< Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>kernel_type</b> typedef (defined in <a class="el" href="a00099.html">tbb::flow::interface9::opencl_program< Factory ></a>)</td><td class="entry"><a class="el" href="a00099.html">tbb::flow::interface9::opencl_program< Factory ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_factory</b> (defined in <a class="el" href="a00099.html">tbb::flow::interface9::opencl_program< Factory ></a>)</td><td class="entry"><a class="el" href="a00099.html">tbb::flow::interface9::opencl_program< Factory ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_factory< DeviceFilter >::kernel</b> (defined in <a class="el" href="a00099.html">tbb::flow::interface9::opencl_program< Factory ></a>)</td><td class="entry"><a class="el" href="a00099.html">tbb::flow::interface9::opencl_program< Factory ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_program</b>(Factory &factory, opencl_program_type type, const std::string &program_name) (defined in <a class="el" href="a00099.html">tbb::flow::interface9::opencl_program< Factory ></a>)</td><td class="entry"><a class="el" href="a00099.html">tbb::flow::interface9::opencl_program< Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_program</b>(Factory &factory, const char *program_name) (defined in <a class="el" href="a00099.html">tbb::flow::interface9::opencl_program< Factory ></a>)</td><td class="entry"><a class="el" href="a00099.html">tbb::flow::interface9::opencl_program< Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_program</b>(Factory &factory, const std::string &program_name) (defined in <a class="el" href="a00099.html">tbb::flow::interface9::opencl_program< Factory ></a>)</td><td class="entry"><a class="el" href="a00099.html">tbb::flow::interface9::opencl_program< Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_program</b>(opencl_graph &graph, opencl_program_type type, const std::string &program_name) (defined in <a class="el" href="a00099.html">tbb::flow::interface9::opencl_program< Factory ></a>)</td><td class="entry"><a class="el" href="a00099.html">tbb::flow::interface9::opencl_program< Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_program</b>(opencl_graph &graph, const char *program_name) (defined in <a class="el" href="a00099.html">tbb::flow::interface9::opencl_program< Factory ></a>)</td><td class="entry"><a class="el" href="a00099.html">tbb::flow::interface9::opencl_program< Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_program</b>(opencl_graph &graph, const std::string &program_name) (defined in <a class="el" href="a00099.html">tbb::flow::interface9::opencl_program< Factory ></a>)</td><td class="entry"><a class="el" href="a00099.html">tbb::flow::interface9::opencl_program< Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_program</b>(opencl_graph &graph, opencl_program_type type) (defined in <a class="el" href="a00099.html">tbb::flow::interface9::opencl_program< Factory ></a>)</td><td class="entry"><a class="el" href="a00099.html">tbb::flow::interface9::opencl_program< Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_program</b>(const opencl_program &src) (defined in <a class="el" href="a00099.html">tbb::flow::interface9::opencl_program< Factory ></a>)</td><td class="entry"><a class="el" href="a00099.html">tbb::flow::interface9::opencl_program< Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00330.html b/doc/html/a00330.html
index 5cef660..a86a7ed 100644
--- a/doc/html/a00330.html
+++ b/doc/html/a00330.html
@@ -33,72 +33,32 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00091.html">limiter_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00093.html">opencl_graph</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::limiter_node< T > Member List</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_graph Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00093.html">tbb::flow::interface9::opencl_graph</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_predecessors</b>() (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>built_predecessors_type</b> typedef (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_successors</b>() (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>built_successors_type</b> typedef (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copy_predecessors</b>(predecessor_list_type &v) (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>copy_predecessors</b>(predecessor_list_type &)=0 (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copy_successors</b>(successor_list_type &v) (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00091.html#ac313b6586bf183a33c3196037964547d">decrement</a></td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>extract</b>() (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>input_type</b> typedef (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::broadcast_cache</b> (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::decrementer< limiter_node< T > ></b> (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::forward_task_bypass< limiter_node< T > ></b> (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::round_robin_cache</b> (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_add_built_predecessor</b>(sender< output_type > &src) (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_add_built_successor</b>(receiver< output_type > &src) (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_delete_built_predecessor</b>(sender< output_type > &src) (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_delete_built_successor</b>(receiver< output_type > &src) (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_continue_receiver</b>() (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00091.html#af1c8daee8d1fd31e63f78dbb8d0ec87d">limiter_node</a>(graph &g, size_t threshold, int num_decrement_predecessors=0)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00091.html#a99b359e7a83de8dc72dcad01798acab8">limiter_node</a>(const limiter_node &src)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_graph</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>next</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>predecessor_count</b>() (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>predecessor_list_type</b> typedef (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>predecessor_type</b> typedef (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>prev</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00091.html#aca5ef5cec3b26227d71686d99ee04f7e">register_predecessor</a>(predecessor_type &src)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00091.html#ad2cfd954eb06732f7bae8f2c8fe28735">register_successor</a>(receiver< output_type > &r)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00091.html#a8aca7b4bd4ee13faf713021eb0d86735">remove_predecessor</a>(predecessor_type &src)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00091.html#ac7b092dcc2808abf02816d4ac9c86e66">remove_successor</a>(receiver< output_type > &r)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f)) (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_receiver</b>(__TBB_PFG_RESET_ARG(reset_flags)) (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_receiver</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>run_and_put_task</b> (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>successor_count</b>() (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>successor_list_type</b> typedef (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>successor_type</b> typedef (defined in <a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00142.html#ad404d5218c7ae2556261ffa880cdf804">try_consume</a>()</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00142.html#ad50b8ac93e79cbdcd2bba11d35432f2c">try_get</a>(T &)</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00124.html#aee5067bb4f4b71ffa786c1b33cb9aa6a">try_put</a>(const T &t)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00091.html#a0551cf104b35669b5f5153c1d03d5d2d">try_put_task</a>(const T &t)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface7::limiter_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00142.html#a97ac316ddfb6bd7c7f2f56e3e819a30a">try_release</a>()</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00142.html#aa1b9dcf77ab558530ff93a706b4c4b5d">try_reserve</a>(T &)</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~graph_node</b>() (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00124.html#a733889a9053478ef2fb2528e2205bf07">~receiver</a>()</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~sender</b>() (defined in <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a>)</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00093.html#ab61ac804963875b343626891cef00c7b">available_devices</a>()</td><td class="entry"><a class="el" href="a00093.html">tbb::flow::interface9::opencl_graph</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>get_opencl_foundation</b>() (defined in <a class="el" href="a00093.html">tbb::flow::interface9::opencl_graph</a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::flow::interface9::opencl_graph</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_opencl_foundation</b> (defined in <a class="el" href="a00093.html">tbb::flow::interface9::opencl_graph</a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::flow::interface9::opencl_graph</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_buffer</b> (defined in <a class="el" href="a00093.html">tbb::flow::interface9::opencl_graph</a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::flow::interface9::opencl_graph</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_factory</b> (defined in <a class="el" href="a00093.html">tbb::flow::interface9::opencl_graph</a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::flow::interface9::opencl_graph</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_factory</b>() (defined in <a class="el" href="a00093.html">tbb::flow::interface9::opencl_graph</a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::flow::interface9::opencl_graph</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00093.html#a9ba7a7b2c5fe477941ce580da97f5444">opencl_graph</a>()</td><td class="entry"><a class="el" href="a00093.html">tbb::flow::interface9::opencl_graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00093.html#a4d87515053b88b4e0602d1a5f8e342c6">opencl_graph</a>(task_group_context &context)</td><td class="entry"><a class="el" href="a00093.html">tbb::flow::interface9::opencl_graph</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_image2d</b> (defined in <a class="el" href="a00093.html">tbb::flow::interface9::opencl_graph</a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::flow::interface9::opencl_graph</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_node</b> (defined in <a class="el" href="a00093.html">tbb::flow::interface9::opencl_graph</a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::flow::interface9::opencl_graph</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00093.html#aa2887522d89a7d1deff76002f398d905">~opencl_graph</a>()</td><td class="entry"><a class="el" href="a00093.html">tbb::flow::interface9::opencl_graph</a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00331.html b/doc/html/a00331.html
index 2d27980..dc4d58b 100644
--- a/doc/html/a00331.html
+++ b/doc/html/a00331.html
@@ -33,52 +33,36 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00057.html">continue_receiver</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00091.html">opencl_factory</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::continue_receiver Member List</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_factory< DeviceFilter > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_predecessors</b>() (defined in <a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>built_predecessors_type</b> typedef (defined in <a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00057.html#a1ac173b0a739731b0b1db5a1e91d9326">continue_receiver</a>(int number_of_predecessors=0)</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00057.html#a3055f8a570f7558b6eb9e210feb91b90">continue_receiver</a>(const continue_receiver &src)</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copy_predecessors</b>(predecessor_list_type &v) (defined in <a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00057.html#adf70ce80d67a565d04e029da461bbe72">execute</a>()=0</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00057.html#a7474ed0edad2bb26d9f86065ecf2c93d">input_type</a> typedef</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::broadcast_cache</b> (defined in <a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::round_robin_cache</b> (defined in <a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::successor_cache</b> (defined in <a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_add_built_predecessor</b>(predecessor_type &s) (defined in <a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_delete_built_predecessor</b>(predecessor_type &s) (defined in <a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_continue_receiver</b>() (defined in <a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>limiter_node</b> (defined in <a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_built_predecessors</b> (defined in <a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_current_count</b> (defined in <a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_initial_predecessor_count</b> (defined in <a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_mutex</b> (defined in <a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_predecessor_count</b> (defined in <a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>predecessor_count</b>() (defined in <a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>predecessor_list_type</b> typedef (defined in <a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00057.html#a86d210b5614d47aaa43731b7e303751f">predecessor_type</a> typedef</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00057.html#a9ff043995b7b4d39ab0ec41c9e3628bf">register_predecessor</a>(predecessor_type &)</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00057.html#aea58a2200f20acd9cda829ba6958b22a">remove_predecessor</a>(predecessor_type &)</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_receiver</b>(__TBB_PFG_RESET_ARG(reset_flags f)) (defined in <a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_receiver</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< continue_msg ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< continue_msg ></a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>run_and_put_task</b> (defined in <a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00124.html#aee5067bb4f4b71ffa786c1b33cb9aa6a">try_put</a>(const continue_msg &t)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< continue_msg ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>try_put_task</b>(const input_type &) (defined in <a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a>)</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00057.html#a2ca2de23e1e1eeb7071a838a457a50b2">~continue_receiver</a>()</td><td class="entry"><a class="el" href="a00057.html">tbb::flow::interface7::continue_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00124.html#a733889a9053478ef2fb2528e2205bf07">~receiver</a>()</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< continue_msg ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>async_msg_type</b> typedef (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>device_type</b> typedef (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>devices</b>() (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>finalize</b>(opencl_device device, FinalizeFn fn, Args &...args) (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>init</b>(const opencl_device_list &device_list) (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>kernel_type</b> typedef (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_buffer_impl</b> (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_factory</b>(opencl_graph &g) (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_memory</b> (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_program</b> (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>range_type</b> typedef (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>send_data</b>(opencl_device device, T &t, Rest &...args) (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>send_data</b>(opencl_device) (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>send_kernel</b>(opencl_device device, const kernel_type &kernel, const range_type &work_size, Args &...args) (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~opencl_factory</b>() (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< DeviceFilter ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00332.html b/doc/html/a00332.html
index 3f0520b..8d5a584 100644
--- a/doc/html/a00332.html
+++ b/doc/html/a00332.html
@@ -33,38 +33,25 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00071.html">graph_iterator</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00091.html">opencl_factory</a></li><li class="navelem"><a class="el" href="a00074.html">kernel</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType > Member List</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_factory< DeviceFilter >::kernel Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00074.html">tbb::flow::interface9::opencl_factory< DeviceFilter >::kernel</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a>)</td><td class="entry"><a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>graph</b> (defined in <a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a>)</td><td class="entry"><a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00071.html#a5082b1f425ffbd4a93533230d6ff99c0">graph_iterator</a>()</td><td class="entry"><a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00071.html#a72937fa822ca1e285a4cb22e544bafbf">graph_iterator</a>(const graph_iterator &other)</td><td class="entry"><a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>graph_node</b> (defined in <a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a>)</td><td class="entry"><a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>iterator_category</b> typedef (defined in <a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a>)</td><td class="entry"><a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00071.html#af3f6d2cc6cbec2dc1194f7d5f4091a73">operator!=</a>(const graph_iterator &other) const </td><td class="entry"><a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00071.html#a1daffd203bebae367ed0f32917048f22">operator*</a>() const </td><td class="entry"><a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00071.html#ab84587ed134f01886f6a0d64d5a6ccef">operator++</a>()</td><td class="entry"><a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00071.html#abc9d079735fe9c1b07d136284556e15a">operator++</a>(int)</td><td class="entry"><a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00071.html#abfb28c989f76822e26b47211febe3d72">operator-></a>() const </td><td class="entry"><a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00071.html#ada73cea77a417f0df629eeaf4c1e2002">operator=</a>(const graph_iterator &other)</td><td class="entry"><a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00071.html#a3b0d834dffd2a99a596e9541b7a96d2a">operator==</a>(const graph_iterator &other) const </td><td class="entry"><a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a>)</td><td class="entry"><a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a>)</td><td class="entry"><a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a>)</td><td class="entry"><a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a>)</td><td class="entry"><a class="el" href="a00071.html">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>kernel</b>(const kernel &k) (defined in <a class="el" href="a00074.html">tbb::flow::interface9::opencl_factory< DeviceFilter >::kernel</a>)</td><td class="entry"><a class="el" href="a00074.html">tbb::flow::interface9::opencl_factory< DeviceFilter >::kernel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_factory</b> (defined in <a class="el" href="a00074.html">tbb::flow::interface9::opencl_factory< DeviceFilter >::kernel</a>)</td><td class="entry"><a class="el" href="a00074.html">tbb::flow::interface9::opencl_factory< DeviceFilter >::kernel</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_program</b> (defined in <a class="el" href="a00074.html">tbb::flow::interface9::opencl_factory< DeviceFilter >::kernel</a>)</td><td class="entry"><a class="el" href="a00074.html">tbb::flow::interface9::opencl_factory< DeviceFilter >::kernel</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>~kernel</b>() (defined in <a class="el" href="a00074.html">tbb::flow::interface9::opencl_factory< DeviceFilter >::kernel</a>)</td><td class="entry"><a class="el" href="a00074.html">tbb::flow::interface9::opencl_factory< DeviceFilter >::kernel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00333.html b/doc/html/a00333.html
index 14097dd..7d2a069 100644
--- a/doc/html/a00333.html
+++ b/doc/html/a00333.html
@@ -33,46 +33,40 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00070.html">graph</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00053.html">dependency_msg</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::graph Member List</div>  </div>
+<div class="title">tbb::flow::interface9::dependency_msg< T, Factory > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00070.html">tbb::flow::interface7::graph</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00070.html#a91d2f9921342a504668b2cdc3064a846">begin</a>()</td><td class="entry"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00070.html#ac404d2e08620aca079532124551a646a">begin</a>() const </td><td class="entry"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00070.html#a2af8f195917817ce2b77ff7b6463c344">cbegin</a>() const </td><td class="entry"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00070.html#acf6d3f610c2675eaf8bf2a40853081aa">cend</a>() const </td><td class="entry"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_iterator</b> typedef (defined in <a class="el" href="a00070.html">tbb::flow::interface7::graph</a>)</td><td class="entry"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00070.html#af16d14eaed1355ae376bb78dde7762c3">decrement_wait_count</a>()</td><td class="entry"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00070.html#a221a7ee0a1f0e69a01add5c1dda43be7">end</a>()</td><td class="entry"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00070.html#a599e6a885a76db84928b039063c299e4">end</a>() const </td><td class="entry"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>exception_thrown</b>() (defined in <a class="el" href="a00070.html">tbb::flow::interface7::graph</a>)</td><td class="entry"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00070.html#ac274a9006e66ecc75bcd59f784fe1867">graph</a>()</td><td class="entry"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00070.html#a656cee3d0240a3f142a450800e6b17c7">graph</a>(task_group_context &use_this_context)</td><td class="entry"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>graph_iterator</b> (defined in <a class="el" href="a00070.html">tbb::flow::interface7::graph</a>)</td><td class="entry"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>graph_node</b> (defined in <a class="el" href="a00070.html">tbb::flow::interface7::graph</a>)</td><td class="entry"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00070.html#ad96c910ae45e6c5d2433bb1d9e910891">increment_wait_count</a>()</td><td class="entry"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_active</b>() (defined in <a class="el" href="a00070.html">tbb::flow::interface7::graph</a>)</td><td class="entry"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00070.html#a9e26f4f5d608e39c8adc9dc6d06a7a01">is_cancelled</a>()</td><td class="entry"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="a00070.html">tbb::flow::interface7::graph</a>)</td><td class="entry"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol)) (defined in <a class="el" href="a00070.html">tbb::flow::interface7::graph</a>)</td><td class="entry"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00070.html#ae5f59627a7d130cf289f105a849ad3f0">root_task</a>()</td><td class="entry"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00070.html#ac0a03f1d59dc2ccb9526995599c2c83c">run</a>(Receiver &r, Body body)</td><td class="entry"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00070.html#a6e428c2d7c8780f3c2587a71c4d92466">run</a>(Body body)</td><td class="entry"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>set_active</b>(bool a=true) (defined in <a class="el" href="a00070.html">tbb::flow::interface7::graph</a>)</td><td class="entry"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00070.html">tbb::flow::interface7::graph</a>)</td><td class="entry"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00070.html#a397208ce3b432c83cd24f416b082e8db">wait_for_all</a>()</td><td class="entry"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00070.html#a3412df4d4bf0113aed93c958bbb49ec4">~graph</a>()</td><td class="entry"><a class="el" href="a00070.html">tbb::flow::interface7::graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>clear_event</b>() const  (defined in <a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>data</b>(bool wait=true) (defined in <a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>data</b>(bool wait=true) const  (defined in <a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>dependency_msg</b>() (defined in <a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>dependency_msg</b>(const T &data) (defined in <a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>dependency_msg</b>(opencl_graph &g, const T &data) (defined in <a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>dependency_msg</b>(const T &data, cl_event event) (defined in <a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>dependency_msg</b>(const dependency_msg &dmsg) (defined in <a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>dependency_msg</b>(dependency_msg &&dmsg) (defined in <a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>finalize</b>() const __TBB_override (defined in <a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_event</b>() const  (defined in <a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator const T &</b>() const  (defined in <a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator T &</b>() (defined in <a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const dependency_msg &dmsg) (defined in <a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>register_callback</b>(Callback c) const  (defined in <a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>set_event</b>(cl_event e) const  (defined in <a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_graph</b>(graph &g) (defined in <a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~dependency_msg</b>() (defined in <a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00053.html">tbb::flow::interface9::dependency_msg< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00334.html b/doc/html/a00334.html
index 6756044..1f12b49 100644
--- a/doc/html/a00334.html
+++ b/doc/html/a00334.html
@@ -33,31 +33,59 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00072.html">graph_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00089.html">opencl_device</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::graph_node Member List</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_device Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>extract</b>()=0 (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>graph</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>graph_iterator</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_graph</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>next</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>prev</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_name</b>(const char *name)=0 (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~graph_node</b>() (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>address_bits</b>() const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>available</b>() const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_in_kernel_available</b>(const std::string &k) const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>built_in_kernels</b>() const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>command_queue</b>() const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>compiler_available</b>() const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>device_id</b>() const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>device_id_type</b> typedef (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>extension_available</b>(const std::string &ext) const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>extensions</b>() const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>host</b> enum value (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>info</b>(cl_device_info i, T &t) const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>linker_available</b>() const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>major_version</b>() const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>max_work_group_size</b>() const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>max_work_item_sizes</b>() const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>minor_version</b>() const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>name</b>() const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_buffer</b> (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_device</b>() (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_device</b>(cl_device_id cl_d_id, device_id_type device_id) (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_factory</b> (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_foundation</b> (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_memory</b> (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_program</b> (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator==</b> (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>out_of_order_exec_mode_on_device_present</b>() const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>out_of_order_exec_mode_on_host_present</b>() const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>platform_extensions</b>() const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>platform_name</b>() const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>platform_profile</b>() const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>platform_vendor</b>() const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>platform_version</b>() const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>set_command_queue</b>(cl_command_queue cmd_queue) (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>type</b>() const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>unknown</b> enum value (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>vendor</b>() const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>version</b>() const  (defined in <a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface9::opencl_device</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00335.html b/doc/html/a00335.html
index 51bf37a..41d68f2 100644
--- a/doc/html/a00335.html
+++ b/doc/html/a00335.html
@@ -33,53 +33,35 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00144.html">source_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00090.html">opencl_device_list</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::source_node< Output > Member List</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_device_list Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00144.html#a67264c4564abefbf14c0d587c6fe2857">activate</a>()</td><td class="entry"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>built_successors</b>() (defined in <a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a>)</td><td class="entry"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_successors_type</b> typedef (defined in <a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a>)</td><td class="entry"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>copy_function_object</b>() (defined in <a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a>)</td><td class="entry"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copy_successors</b>(successor_list_type &v) (defined in <a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a>)</td><td class="entry"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>extract</b>() (defined in <a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a>)</td><td class="entry"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>input_type</b> typedef (defined in <a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a>)</td><td class="entry"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::source_task_bypass< source_node< output_type > ></b> (defined in <a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a>)</td><td class="entry"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_add_built_successor</b>(successor_type &r) (defined in <a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a>)</td><td class="entry"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_delete_built_successor</b>(successor_type &r) (defined in <a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a>)</td><td class="entry"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_graph</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>next</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00144.html#a0308ffc2e5c24739cd85e769ec8a8f5f">output_type</a> typedef</td><td class="entry"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>prev</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00144.html#a27aa895c54d59f570f267c26f14f0cf1">register_successor</a>(successor_type &r)</td><td class="entry"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00144.html#a313af00af7584f4b9aee1e1bacff4041">remove_successor</a>(successor_type &r)</td><td class="entry"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00144.html#aed1fa277170d6cee6d1437f1258ac544">reset_node</a>(__TBB_PFG_RESET_ARG(reset_flags f))</td><td class="entry"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a>)</td><td class="entry"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00144.html#a5730a4677f5bfdf6ff6e45e31a249d37">source_node</a>(graph &g, Body body, bool is_active=true)</td><td class="entry"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00144.html#aa365130109912d4cdd4534a0cb1d92bd">source_node</a>(const source_node &src)</td><td class="entry"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>successor_count</b>() (defined in <a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a>)</td><td class="entry"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>successor_list_type</b> typedef (defined in <a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a>)</td><td class="entry"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00144.html#ae354d135ba9aceb6ca41464fff027666">successor_type</a> typedef</td><td class="entry"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00144.html#ad38a58c2f8f74f4c5cf72a2625ac26bf">try_consume</a>()</td><td class="entry"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00144.html#a038c6b2b406d496244617a2d6dc01581">try_get</a>(output_type &v)</td><td class="entry"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00144.html#a309c65a2d0208a1072f7e852198d461d">try_release</a>()</td><td class="entry"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00144.html#aabb0d505d684d173b1a2c976bf0781a6">try_reserve</a>(output_type &v)</td><td class="entry"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~graph_node</b>() (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~sender</b>() (defined in <a class="el" href="a00142.html">tbb::flow::interface7::sender< Output ></a>)</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< Output ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00144.html#a5ce12e348e121b9f4dffda9d1035c490">~source_node</a>()</td><td class="entry"><a class="el" href="a00144.html">tbb::flow::interface7::source_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>add</b>(opencl_device d) (defined in <a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>begin</b>() (defined in <a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>begin</b>() const  (defined in <a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>cbegin</b>() const  (defined in <a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cend</b>() const  (defined in <a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_iterator</b> typedef (defined in <a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>empty</b>() const  (defined in <a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>end</b>() (defined in <a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>end</b>() const  (defined in <a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_device_list</b>() (defined in <a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_device_list</b>(std::initializer_list< opencl_device > il) (defined in <a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>size</b>() const  (defined in <a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface9::opencl_device_list</a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00336.html b/doc/html/a00336.html
index 5554192..2f31d26 100644
--- a/doc/html/a00336.html
+++ b/doc/html/a00336.html
@@ -33,43 +33,23 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00068.html">function_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00031.html">callback_base</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::function_node< Input, Output, G, Allocator > Member List</div>  </div>
+<div class="title">tbb::flow::interface9::callback_base Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00031.html">tbb::flow::interface9::callback_base</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>extract</b>() (defined in <a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a>)</td><td class="entry"><a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>fInput_type</b> typedef (defined in <a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a>)</td><td class="entry"><a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>fOutput_type</b> typedef (defined in <a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a>)</td><td class="entry"><a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00068.html#a00e4607cc585926677f3d10458ff4f6d">function_node</a>(graph &g, size_t concurrency, Body body)</td><td class="entry"><a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00068.html#a1bb4915f2b6d6fbfbe6bfacece5639c6">function_node</a>(const function_node &src)</td><td class="entry"><a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>input_queue_type</b> typedef (defined in <a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a>)</td><td class="entry"><a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>input_type</b> typedef (defined in <a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a>)</td><td class="entry"><a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::broadcast_cache</b> (defined in <a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a>)</td><td class="entry"><a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::round_robin_cache</b> (defined in <a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a>)</td><td class="entry"><a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_graph</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>next</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a>)</td><td class="entry"><a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>predecessor_type</b> typedef (defined in <a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a>)</td><td class="entry"><a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>prev</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f)) (defined in <a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a>)</td><td class="entry"><a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>run_and_put_task</b> (defined in <a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a>)</td><td class="entry"><a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a>)</td><td class="entry"><a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>successor_type</b> typedef (defined in <a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a>)</td><td class="entry"><a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>successors</b>() (defined in <a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a>)</td><td class="entry"><a class="el" href="a00068.html">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~graph_node</b>() (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>call</b>()=0 (defined in <a class="el" href="a00031.html">tbb::flow::interface9::callback_base</a>)</td><td class="entry"><a class="el" href="a00031.html">tbb::flow::interface9::callback_base</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>~callback_base</b>() (defined in <a class="el" href="a00031.html">tbb::flow::interface9::callback_base</a>)</td><td class="entry"><a class="el" href="a00031.html">tbb::flow::interface9::callback_base</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00337.html b/doc/html/a00337.html
index ede4d30..0b872ed 100644
--- a/doc/html/a00337.html
+++ b/doc/html/a00337.html
@@ -33,38 +33,25 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00098.html">multifunction_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00030.html">callback</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator > Member List</div>  </div>
+<div class="title">tbb::flow::interface9::callback< Callback, T > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00030.html">tbb::flow::interface9::callback< Callback, T ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>extract</b>() (defined in <a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a>)</td><td class="entry"><a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>fInput_type</b> typedef (defined in <a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a>)</td><td class="entry"><a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>input_queue_type</b> typedef (defined in <a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a>)</td><td class="entry"><a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>input_type</b> typedef (defined in <a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a>)</td><td class="entry"><a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>multifunction_node</b>(graph &g, size_t concurrency, Body body) (defined in <a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a>)</td><td class="entry"><a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>multifunction_node</b>(const multifunction_node &other) (defined in <a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a>)</td><td class="entry"><a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_graph</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>N</b> (defined in <a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a>)</td><td class="entry"><a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>next</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>output_ports_type</b> typedef (defined in <a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a>)</td><td class="entry"><a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a>)</td><td class="entry"><a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>prev</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f)) (defined in <a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a>)</td><td class="entry"><a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a>)</td><td class="entry"><a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~graph_node</b>() (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>call</b>() __TBB_override (defined in <a class="el" href="a00030.html">tbb::flow::interface9::callback< Callback, T ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface9::callback< Callback, T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>callback</b>(graph &g, Callback c, const T &t) (defined in <a class="el" href="a00030.html">tbb::flow::interface9::callback< Callback, T ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface9::callback< Callback, T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~callback</b>() (defined in <a class="el" href="a00030.html">tbb::flow::interface9::callback< Callback, T ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface9::callback< Callback, T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>~callback_base</b>() (defined in <a class="el" href="a00031.html">tbb::flow::interface9::callback_base</a>)</td><td class="entry"><a class="el" href="a00031.html">tbb::flow::interface9::callback_base</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00338.html b/doc/html/a00338.html
index 22efcd6..30f5645 100644
--- a/doc/html/a00338.html
+++ b/doc/html/a00338.html
@@ -33,40 +33,37 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00147.html">split_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00094.html">opencl_memory</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::split_node< TupleType, Allocator > Member List</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_memory< Factory > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00147.html">tbb::flow::interface7::split_node< TupleType, Allocator ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocator_type</b> typedef (defined in <a class="el" href="a00147.html">tbb::flow::interface7::split_node< TupleType, Allocator ></a>)</td><td class="entry"><a class="el" href="a00147.html">tbb::flow::interface7::split_node< TupleType, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>extract</b>() (defined in <a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< TupleType, TupleType, rejecting, Allocator ></a>)</td><td class="entry"><a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< TupleType, TupleType, rejecting, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>fInput_type</b> typedef (defined in <a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< TupleType, TupleType, rejecting, Allocator ></a>)</td><td class="entry"><a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< TupleType, TupleType, rejecting, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>input_queue_type</b> typedef (defined in <a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< TupleType, TupleType, rejecting, Allocator ></a>)</td><td class="entry"><a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< TupleType, TupleType, rejecting, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>input_type</b> typedef (defined in <a class="el" href="a00147.html">tbb::flow::interface7::split_node< TupleType, Allocator ></a>)</td><td class="entry"><a class="el" href="a00147.html">tbb::flow::interface7::split_node< TupleType, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>multifunction_node</b>(graph &g, size_t concurrency, Body body) (defined in <a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< TupleType, TupleType, rejecting, Allocator ></a>)</td><td class="entry"><a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< TupleType, TupleType, rejecting, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>multifunction_node</b>(const multifunction_node &other) (defined in <a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< TupleType, TupleType, rejecting, Allocator ></a>)</td><td class="entry"><a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< TupleType, TupleType, rejecting, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_graph</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>next</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>output_ports_type</b> typedef (defined in <a class="el" href="a00147.html">tbb::flow::interface7::split_node< TupleType, Allocator ></a>)</td><td class="entry"><a class="el" href="a00147.html">tbb::flow::interface7::split_node< TupleType, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00147.html">tbb::flow::interface7::split_node< TupleType, Allocator ></a>)</td><td class="entry"><a class="el" href="a00147.html">tbb::flow::interface7::split_node< TupleType, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>prev</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f)) (defined in <a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< TupleType, TupleType, rejecting, Allocator ></a>)</td><td class="entry"><a class="el" href="a00098.html">tbb::flow::interface7::multifunction_node< TupleType, TupleType, rejecting, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00147.html">tbb::flow::interface7::split_node< TupleType, Allocator ></a>)</td><td class="entry"><a class="el" href="a00147.html">tbb::flow::interface7::split_node< TupleType, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>split_node</b>(graph &g) (defined in <a class="el" href="a00147.html">tbb::flow::interface7::split_node< TupleType, Allocator ></a>)</td><td class="entry"><a class="el" href="a00147.html">tbb::flow::interface7::split_node< TupleType, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>split_node</b>(const split_node &other) (defined in <a class="el" href="a00147.html">tbb::flow::interface7::split_node< TupleType, Allocator ></a>)</td><td class="entry"><a class="el" href="a00147.html">tbb::flow::interface7::split_node< TupleType, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~graph_node</b>() (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>factory</b>() const  (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>get_cl_mem</b>() const  (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_host_ptr</b>() (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>map_memory</b>(opencl_device, dependency_msg< void *, Factory > &)=0 (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_cl_mem</b> (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_curr_device_id</b> (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_factory</b> (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_host_ptr</b> (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_sending_event</b> (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_sending_event_present</b> (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_sending_lock</b> (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_memory</b>() (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_memory</b>(Factory &f) (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>receive</b>(const cl_event *e) (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>send</b>(opencl_device d, const cl_event *e) (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>~opencl_memory</b>() (defined in <a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00339.html b/doc/html/a00339.html
index dc1c3cd..bd1957b 100644
--- a/doc/html/a00339.html
+++ b/doc/html/a00339.html
@@ -33,43 +33,41 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00056.html">continue_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00101.html">opencl_subbuffer</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::continue_node< Output > Member List</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_subbuffer< T, Factory > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00101.html">tbb::flow::interface9::opencl_subbuffer< T, Factory ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00056.html#a7b96b9eb41772ff1d7a52329ac56b8f0">continue_node</a>(graph &g, Body body)</td><td class="entry"><a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00056.html#a05e8957de1cb5a940d2ed3f9fc7637ed">continue_node</a>(graph &g, int number_of_predecessors, Body body)</td><td class="entry"><a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00056.html#a8ab0750127a7ead08e14b8910a21cf50">continue_node</a>(const continue_node &src)</td><td class="entry"><a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>extract</b>() (defined in <a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a>)</td><td class="entry"><a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>fInput_type</b> typedef (defined in <a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a>)</td><td class="entry"><a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>fOutput_type</b> typedef (defined in <a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a>)</td><td class="entry"><a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>input_type</b> typedef (defined in <a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a>)</td><td class="entry"><a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::broadcast_cache</b> (defined in <a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a>)</td><td class="entry"><a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::round_robin_cache</b> (defined in <a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a>)</td><td class="entry"><a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_graph</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>next</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a>)</td><td class="entry"><a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>predecessor_type</b> typedef (defined in <a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a>)</td><td class="entry"><a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>prev</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f)) (defined in <a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a>)</td><td class="entry"><a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>run_and_put_task</b> (defined in <a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a>)</td><td class="entry"><a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a>)</td><td class="entry"><a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>successor_type</b> typedef (defined in <a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a>)</td><td class="entry"><a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>successors</b>() (defined in <a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a>)</td><td class="entry"><a class="el" href="a00056.html">tbb::flow::interface7::continue_node< Output ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~graph_node</b>() (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>access</b>() const  (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>begin</b>() const  (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>data</b>() const  (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>end</b>() const  (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>memory_object</b>() const  (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>memory_object_type</b> typedef (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>native_object</b>() const  (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>native_object_type</b> typedef (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_buffer</b>() (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_buffer</b>(opencl_graph &g, size_t size) (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_buffer</b>(Factory &f, size_t size) (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_factory_type</b> typedef (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_subbuffer</b>() (defined in <a class="el" href="a00101.html">tbb::flow::interface9::opencl_subbuffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00101.html">tbb::flow::interface9::opencl_subbuffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_subbuffer</b>(const opencl_buffer< T, Factory > &owner, size_t index, size_t size) (defined in <a class="el" href="a00101.html">tbb::flow::interface9::opencl_subbuffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00101.html">tbb::flow::interface9::opencl_subbuffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator[]</b>(ptrdiff_t k) (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>receive</b>(const dependency_msg< opencl_buffer, Factory > &dependency) const  (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>send</b>(opencl_device device, dependency_msg< opencl_buffer, Factory > &dependency) const  (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>size</b>() const  (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>subbuffer</b>(size_t index, size_t size) const  (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00340.html b/doc/html/a00340.html
index fc19214..f419100 100644
--- a/doc/html/a00340.html
+++ b/doc/html/a00340.html
@@ -33,77 +33,42 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00104.html">overwrite_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00087.html">opencl_buffer</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::overwrite_node< T > Member List</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_buffer< T, Factory > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_predecessors</b>() (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>built_predecessors_type</b> typedef (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_successors</b>() (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>built_successors_type</b> typedef (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>clear</b>() (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>copy_predecessors</b>(predecessor_list_type &v) (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copy_predecessors</b>(predecessor_list_type &)=0 (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>copy_successors</b>(successor_list_type &v) (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>extract</b>() (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>input_type</b> typedef (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::broadcast_cache</b> (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::round_robin_cache</b> (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_add_built_predecessor</b>(predecessor_type &p) (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_add_built_successor</b>(successor_type &s) (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_delete_built_predecessor</b>(predecessor_type &p) (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_delete_built_successor</b>(successor_type &s) (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_continue_receiver</b>() (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_valid</b>() (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_buffer</b> (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_buffer_is_valid</b> (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_built_predecessors</b> (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_graph</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_mutex</b> (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_successors</b> (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>next</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>overwrite_node</b>(graph &g) (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>overwrite_node</b>(const overwrite_node &src) (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>predecessor_count</b>() (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>predecessor_list_type</b> typedef (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>predecessor_type</b> typedef (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>prev</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00124.html#a16427aa709505de93ffe0d79136e4251">register_predecessor</a>(predecessor_type &)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00104.html#aed811ce5f59a555396c7bcd56316b4da">register_successor</a>(successor_type &s)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00124.html#a55adae6228bbdc1539695e1ec20e9762">remove_predecessor</a>(predecessor_type &)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00104.html#ab5ff89d56e2e3c3848d84a09c88b1d52">remove_successor</a>(successor_type &s)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f)) (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_receiver</b>(__TBB_PFG_RESET_ARG(reset_flags)) (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_receiver</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>run_and_put_task</b> (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>successor_count</b>() (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>successor_list_type</b> typedef (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>successor_type</b> typedef (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00142.html#ad404d5218c7ae2556261ffa880cdf804">try_consume</a>()</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00104.html#aa655eef6671b35f99dfbddd0f3cf2309">try_get</a>(input_type &v)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00124.html#aee5067bb4f4b71ffa786c1b33cb9aa6a">try_put</a>(const T &t)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>try_put_task</b>(const input_type &v) (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00142.html#a97ac316ddfb6bd7c7f2f56e3e819a30a">try_release</a>()</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00142.html#aa1b9dcf77ab558530ff93a706b4c4b5d">try_reserve</a>(T &)</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~graph_node</b>() (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~overwrite_node</b>() (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00124.html#a733889a9053478ef2fb2528e2205bf07">~receiver</a>()</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~sender</b>() (defined in <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a>)</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>access</b>() const  (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>begin</b>() const  (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>data</b>() const  (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>end</b>() const  (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>memory_object</b>() const  (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>memory_object_type</b> typedef (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>native_object</b>() const  (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>native_object_type</b> typedef (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_buffer</b>() (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_buffer</b>(opencl_graph &g, size_t size) (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_buffer</b>(Factory &f, size_t size) (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_factory</b> (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_factory_type</b> typedef (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_subbuffer</b> (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator==</b> (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator[]</b>(ptrdiff_t k) (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>receive</b>(const dependency_msg< opencl_buffer, Factory > &dependency) const  (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>send</b>(opencl_device device, dependency_msg< opencl_buffer, Factory > &dependency) const  (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>size</b>() const  (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>subbuffer</b>(size_t index, size_t size) const  (defined in <a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a>)</td><td class="entry"><a class="el" href="a00087.html">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00341.html b/doc/html/a00341.html
index 2e341f0..52daf04 100644
--- a/doc/html/a00341.html
+++ b/doc/html/a00341.html
@@ -33,79 +33,26 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00176.html">write_once_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00100.html">opencl_range</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::write_once_node< T > Member List</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_range Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00176.html">tbb::flow::interface7::write_once_node< T ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00100.html">tbb::flow::interface9::opencl_range</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_predecessors</b>() (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>built_predecessors_type</b> typedef (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_successors</b>() (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>built_successors_type</b> typedef (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>clear</b>() (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>copy_predecessors</b>(predecessor_list_type &v) (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copy_predecessors</b>(predecessor_list_type &)=0 (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>copy_successors</b>(successor_list_type &v) (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>extract</b>() (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>input_type</b> typedef (defined in <a class="el" href="a00176.html">tbb::flow::interface7::write_once_node< T ></a>)</td><td class="entry"><a class="el" href="a00176.html">tbb::flow::interface7::write_once_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::broadcast_cache</b> (defined in <a class="el" href="a00176.html">tbb::flow::interface7::write_once_node< T ></a>)</td><td class="entry"><a class="el" href="a00176.html">tbb::flow::interface7::write_once_node< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::round_robin_cache</b> (defined in <a class="el" href="a00176.html">tbb::flow::interface7::write_once_node< T ></a>)</td><td class="entry"><a class="el" href="a00176.html">tbb::flow::interface7::write_once_node< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_add_built_predecessor</b>(predecessor_type &p) (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_add_built_successor</b>(successor_type &s) (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_delete_built_predecessor</b>(predecessor_type &p) (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_delete_built_successor</b>(successor_type &s) (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_continue_receiver</b>() (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_valid</b>() (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_buffer</b> (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_buffer_is_valid</b> (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_built_predecessors</b> (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_graph</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_mutex</b> (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_successors</b> (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>next</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00176.html">tbb::flow::interface7::write_once_node< T ></a>)</td><td class="entry"><a class="el" href="a00176.html">tbb::flow::interface7::write_once_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>overwrite_node</b>(graph &g) (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>overwrite_node</b>(const overwrite_node &src) (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>predecessor_count</b>() (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>predecessor_list_type</b> typedef (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>predecessor_type</b> typedef (defined in <a class="el" href="a00176.html">tbb::flow::interface7::write_once_node< T ></a>)</td><td class="entry"><a class="el" href="a00176.html">tbb::flow::interface7::write_once_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>prev</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00124.html#a16427aa709505de93ffe0d79136e4251">register_predecessor</a>(predecessor_type &)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00104.html#aed811ce5f59a555396c7bcd56316b4da">register_successor</a>(successor_type &s)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00124.html#a55adae6228bbdc1539695e1ec20e9762">remove_predecessor</a>(predecessor_type &)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00104.html#ab5ff89d56e2e3c3848d84a09c88b1d52">remove_successor</a>(successor_type &s)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f)) (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_receiver</b>(__TBB_PFG_RESET_ARG(reset_flags)) (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_receiver</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>run_and_put_task</b> (defined in <a class="el" href="a00176.html">tbb::flow::interface7::write_once_node< T ></a>)</td><td class="entry"><a class="el" href="a00176.html">tbb::flow::interface7::write_once_node< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00176.html">tbb::flow::interface7::write_once_node< T ></a>)</td><td class="entry"><a class="el" href="a00176.html">tbb::flow::interface7::write_once_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>successor_count</b>() (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>successor_list_type</b> typedef (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>successor_type</b> typedef (defined in <a class="el" href="a00176.html">tbb::flow::interface7::write_once_node< T ></a>)</td><td class="entry"><a class="el" href="a00176.html">tbb::flow::interface7::write_once_node< T ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00142.html#ad404d5218c7ae2556261ffa880cdf804">try_consume</a>()</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00104.html#aa655eef6671b35f99dfbddd0f3cf2309">try_get</a>(input_type &v)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00124.html#aee5067bb4f4b71ffa786c1b33cb9aa6a">try_put</a>(const T &t)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>try_put_task</b>(const T &v) (defined in <a class="el" href="a00176.html">tbb::flow::interface7::write_once_node< T ></a>)</td><td class="entry"><a class="el" href="a00176.html">tbb::flow::interface7::write_once_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00142.html#a97ac316ddfb6bd7c7f2f56e3e819a30a">try_release</a>()</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00142.html#aa1b9dcf77ab558530ff93a706b4c4b5d">try_reserve</a>(T &)</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00176.html#a8225d7ca0ff9762552413cfb1382d78f">write_once_node</a>(graph &g)</td><td class="entry"><a class="el" href="a00176.html">tbb::flow::interface7::write_once_node< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00176.html#a68b94bb09b608522462080fe99125e07">write_once_node</a>(const write_once_node &src)</td><td class="entry"><a class="el" href="a00176.html">tbb::flow::interface7::write_once_node< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~graph_node</b>() (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~overwrite_node</b>() (defined in <a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a>)</td><td class="entry"><a class="el" href="a00104.html">tbb::flow::interface7::overwrite_node< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00124.html#a733889a9053478ef2fb2528e2205bf07">~receiver</a>()</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~sender</b>() (defined in <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a>)</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>global_range</b>() const  (defined in <a class="el" href="a00100.html">tbb::flow::interface9::opencl_range</a>)</td><td class="entry"><a class="el" href="a00100.html">tbb::flow::interface9::opencl_range</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>local_range</b>() const  (defined in <a class="el" href="a00100.html">tbb::flow::interface9::opencl_range</a>)</td><td class="entry"><a class="el" href="a00100.html">tbb::flow::interface9::opencl_range</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>nd_range_type</b> typedef (defined in <a class="el" href="a00100.html">tbb::flow::interface9::opencl_range</a>)</td><td class="entry"><a class="el" href="a00100.html">tbb::flow::interface9::opencl_range</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_range</b>(G &&global_work=std::initializer_list< int >({0}), L &&local_work=std::initializer_list< int >({0, 0, 0})) (defined in <a class="el" href="a00100.html">tbb::flow::interface9::opencl_range</a>)</td><td class="entry"><a class="el" href="a00100.html">tbb::flow::interface9::opencl_range</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>range_index_type</b> typedef (defined in <a class="el" href="a00100.html">tbb::flow::interface9::opencl_range</a>)</td><td class="entry"><a class="el" href="a00100.html">tbb::flow::interface9::opencl_range</a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00342.html b/doc/html/a00342.html
index ee5fe00..6bb3aa4 100644
--- a/doc/html/a00342.html
+++ b/doc/html/a00342.html
@@ -33,69 +33,22 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00028.html">broadcast_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00052.html">default_opencl_factory_device_filter</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::broadcast_node< T > Member List</div>  </div>
+<div class="title">tbb::flow::interface9::default_opencl_factory_device_filter Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00052.html">tbb::flow::interface9::default_opencl_factory_device_filter</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>broadcast_node</b>(graph &g) (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>broadcast_node</b>(const broadcast_node &src) (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_predecessors</b>() (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>built_predecessors_type</b> typedef (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_successors</b>() (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>built_successors_type</b> typedef (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copy_predecessors</b>(predecessor_list_type &v) (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>copy_predecessors</b>(predecessor_list_type &)=0 (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copy_successors</b>(successor_list_type &v) (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>extract</b>() (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>input_type</b> typedef (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::broadcast_cache</b> (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::round_robin_cache</b> (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_add_built_predecessor</b>(predecessor_type &p) (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_add_built_successor</b>(successor_type &r) (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_delete_built_predecessor</b>(predecessor_type &p) (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_delete_built_successor</b>(successor_type &r) (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_continue_receiver</b>() (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_graph</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>next</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>predecessor_count</b>() (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>predecessor_list_type</b> typedef (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>predecessor_type</b> typedef (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>prev</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00124.html#a16427aa709505de93ffe0d79136e4251">register_predecessor</a>(predecessor_type &)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00028.html#a36b5c86faa58a264d899b7c26286c80e">register_successor</a>(receiver< T > &r)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00124.html#a55adae6228bbdc1539695e1ec20e9762">remove_predecessor</a>(predecessor_type &)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00028.html#a22d463b071df6e0b7ca11df27bb2637e">remove_successor</a>(receiver< T > &r)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f)) (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_receiver</b>(__TBB_PFG_RESET_ARG(reset_flags)) (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_receiver</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>run_and_put_task</b> (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>successor_count</b>() (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>successor_list_type</b> typedef (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>successor_type</b> typedef (defined in <a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a>)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00142.html#ad404d5218c7ae2556261ffa880cdf804">try_consume</a>()</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00142.html#ad50b8ac93e79cbdcd2bba11d35432f2c">try_get</a>(T &)</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00124.html#aee5067bb4f4b71ffa786c1b33cb9aa6a">try_put</a>(const T &t)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00028.html#a07d030b43c6e2d9169a7e58db30a547b">try_put_task</a>(const T &t)</td><td class="entry"><a class="el" href="a00028.html">tbb::flow::interface7::broadcast_node< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00142.html#a97ac316ddfb6bd7c7f2f56e3e819a30a">try_release</a>()</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00142.html#aa1b9dcf77ab558530ff93a706b4c4b5d">try_reserve</a>(T &)</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~graph_node</b>() (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00124.html#a733889a9053478ef2fb2528e2205bf07">~receiver</a>()</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~sender</b>() (defined in <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a>)</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator()</b>(const opencl_device_list &devices) (defined in <a class="el" href="a00052.html">tbb::flow::interface9::default_opencl_factory_device_filter</a>)</td><td class="entry"><a class="el" href="a00052.html">tbb::flow::interface9::default_opencl_factory_device_filter</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00343.html b/doc/html/a00343.html
index 9ee1d3c..10b0148 100644
--- a/doc/html/a00343.html
+++ b/doc/html/a00343.html
@@ -33,120 +33,34 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00030.html">buffer_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00051.html">default_opencl_factory</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::buffer_node< T, A > Member List</div>  </div>
+<div class="title">tbb::flow::interface9::default_opencl_factory Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00051.html">tbb::flow::interface9::default_opencl_factory</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>add_blt_pred</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>add_blt_succ</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>blt_pred_cnt</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>blt_pred_cpy</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>blt_succ_cnt</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>blt_succ_cpy</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#a152f7bb9ab1f033ec56caa451327634c">buffer_node</a>(graph &g)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00030.html#a739635c43d1150f2c8dd3f455d698d36">buffer_node</a>(const buffer_node &src)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_predecessors</b>() (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>built_predecessors_type</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_successors</b>() (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>built_successors_type</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>con_res</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>copy_predecessors</b>(predecessor_list_type &v) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copy_predecessors</b>(predecessor_list_type &)=0 (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>copy_successors</b>(successor_list_type &v) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>del_blt_pred</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>del_blt_succ</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>enqueue_forwarding_task</b>(buffer_operation &op_data) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>extract</b>() (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>FAILED</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00030.html#a8910a497040a4c6f1a6a1fb7a33a8888">forward_task</a>()</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>forwarder_busy</b> (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>grab_forwarding_task</b>(buffer_operation &op_data) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>handle_operations</b>(buffer_operation *op_list) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>input_type</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::aggregating_functor< my_class, buffer_operation ></b> (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::broadcast_cache</b> (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::forward_task_bypass< buffer_node< T, A > ></b> (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::round_robin_cache</b> (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_add_built_pred</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_add_built_predecessor</b>(predecessor_type &p) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_add_built_succ</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_add_built_successor</b>(successor_type &r) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_consume</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_copy_preds</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_copy_succs</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_del_built_pred</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_del_built_succ</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_delete_built_predecessor</b>(predecessor_type &p) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_delete_built_successor</b>(successor_type &r) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#a3aa7578ccbd3d5f986869ab8698c037c">internal_forward_task</a>(buffer_operation *op)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_pop</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_pred_cnt</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_push</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#afa2dd93a1b42e77ccf7e1de0fddf3158">internal_reg_succ</a>(buffer_operation *op)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_release</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#a46c7f9cd9130036244d4ea8efd74bf22">internal_rem_succ</a>(buffer_operation *op)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_reserve</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_succ_cnt</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_continue_receiver</b>() (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_aggregator</b> (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_built_predecessors</b> (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_class</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_graph</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_handler</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_successors</b> (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>next</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>op_stat</b> enum name (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>op_type</b> enum name (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>predecessor_count</b>() (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>predecessor_list_type</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>predecessor_type</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>prev</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>put_item</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reg_succ</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00124.html#a16427aa709505de93ffe0d79136e4251">register_predecessor</a>(predecessor_type &)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00030.html#a5e87f7e8fd8698f62f2cad8b52b6e565">register_successor</a>(successor_type &r)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>rel_res</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>rem_succ</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00124.html#a55adae6228bbdc1539695e1ec20e9762">remove_predecessor</a>(predecessor_type &)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00030.html#a3c31300c060bffbbad7798219e702aba">remove_successor</a>(successor_type &r)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>req_item</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>res_item</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f)) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_receiver</b>(__TBB_PFG_RESET_ARG(reset_flags)) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_receiver</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>run_and_put_task</b> (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>SUCCEEDED</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>successor_count</b>() (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>successor_list_type</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>successor_type</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00030.html#a335072bc547c5e9b40f58dfeab525953">try_consume</a>()</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>try_fwd_task</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00030.html#a175cb77dfbdd0e322097a833a2271c1e">try_get</a>(T &v)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00124.html#aee5067bb4f4b71ffa786c1b33cb9aa6a">try_put</a>(const T &t)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00030.html#aa4517c0a58649ea5eb140ab4b786e1ec">try_put_task</a>(const T &t)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#aaa3745fd4705345df16fb33954d93e30">try_release</a>()</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00030.html#a3b12cdebf8cef15b90e3c9cd9e51019f">try_reserve</a>(T &v)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>WAIT</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~buffer_node</b>() (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~graph_node</b>() (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00124.html#a733889a9053478ef2fb2528e2205bf07">~receiver</a>()</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~sender</b>() (defined in <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a>)</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>async_msg_type</b> typedef (defined in <a class="el" href="a00051.html">tbb::flow::interface9::default_opencl_factory</a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::flow::interface9::default_opencl_factory</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>default_opencl_factory</b>(opencl_graph &g) (defined in <a class="el" href="a00051.html">tbb::flow::interface9::default_opencl_factory</a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::flow::interface9::default_opencl_factory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>device_type</b> typedef (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>devices</b>() (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>finalize</b>(opencl_device device, FinalizeFn fn, Args &...args) (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>init</b>(const opencl_device_list &device_list) (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>kernel_type</b> typedef (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_factory</b>(opencl_graph &g) (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>range_type</b> typedef (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>send_data</b>(opencl_device device, T &t, Rest &...args) (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>send_data</b>(opencl_device) (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>send_kernel</b>(opencl_device device, const kernel_type &kernel, const range_type &work_size, Args &...args) (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter ></a></td><td class="entry"><span class="mlabel">inline [...]
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~opencl_factory</b>() (defined in <a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter ></a>)</td><td class="entry"><a class="el" href="a00091.html">tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00344.html b/doc/html/a00344.html
index c1f517c..d2f3e2a 100644
--- a/doc/html/a00344.html
+++ b/doc/html/a00344.html
@@ -33,31 +33,25 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00030.html">buffer_node</a></li><li class="navelem"><a class="el" href="a00031.html">buffer_operation</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00092.html">opencl_foundation</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::buffer_node< T, A >::buffer_operation Member List</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_foundation Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00031.html">tbb::flow::interface7::buffer_node< T, A >::buffer_operation</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00092.html">tbb::flow::interface9::opencl_foundation</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>buffer_operation</b>(const T &e, op_type t) (defined in <a class="el" href="a00031.html">tbb::flow::interface7::buffer_node< T, A >::buffer_operation</a>)</td><td class="entry"><a class="el" href="a00031.html">tbb::flow::interface7::buffer_node< T, A >::buffer_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>cnt_val</b> (defined in <a class="el" href="a00031.html">tbb::flow::interface7::buffer_node< T, A >::buffer_operation</a>)</td><td class="entry"><a class="el" href="a00031.html">tbb::flow::interface7::buffer_node< T, A >::buffer_operation</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>elem</b> (defined in <a class="el" href="a00031.html">tbb::flow::interface7::buffer_node< T, A >::buffer_operation</a>)</td><td class="entry"><a class="el" href="a00031.html">tbb::flow::interface7::buffer_node< T, A >::buffer_operation</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>elem</b> (defined in <a class="el" href="a00031.html">tbb::flow::interface7::buffer_node< T, A >::buffer_operation</a>)</td><td class="entry"><a class="el" href="a00031.html">tbb::flow::interface7::buffer_node< T, A >::buffer_operation</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ltask</b> (defined in <a class="el" href="a00031.html">tbb::flow::interface7::buffer_node< T, A >::buffer_operation</a>)</td><td class="entry"><a class="el" href="a00031.html">tbb::flow::interface7::buffer_node< T, A >::buffer_operation</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>p</b> (defined in <a class="el" href="a00031.html">tbb::flow::interface7::buffer_node< T, A >::buffer_operation</a>)</td><td class="entry"><a class="el" href="a00031.html">tbb::flow::interface7::buffer_node< T, A >::buffer_operation</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pvec</b> (defined in <a class="el" href="a00031.html">tbb::flow::interface7::buffer_node< T, A >::buffer_operation</a>)</td><td class="entry"><a class="el" href="a00031.html">tbb::flow::interface7::buffer_node< T, A >::buffer_operation</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>r</b> (defined in <a class="el" href="a00031.html">tbb::flow::interface7::buffer_node< T, A >::buffer_operation</a>)</td><td class="entry"><a class="el" href="a00031.html">tbb::flow::interface7::buffer_node< T, A >::buffer_operation</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>svec</b> (defined in <a class="el" href="a00031.html">tbb::flow::interface7::buffer_node< T, A >::buffer_operation</a>)</td><td class="entry"><a class="el" href="a00031.html">tbb::flow::interface7::buffer_node< T, A >::buffer_operation</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>type</b> (defined in <a class="el" href="a00031.html">tbb::flow::interface7::buffer_node< T, A >::buffer_operation</a>)</td><td class="entry"><a class="el" href="a00031.html">tbb::flow::interface7::buffer_node< T, A >::buffer_operation</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_all_devices</b>() (defined in <a class="el" href="a00092.html">tbb::flow::interface9::opencl_foundation</a>)</td><td class="entry"><a class="el" href="a00092.html">tbb::flow::interface9::opencl_foundation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>get_default_device_selector</b>() (defined in <a class="el" href="a00092.html">tbb::flow::interface9::opencl_foundation</a>)</td><td class="entry"><a class="el" href="a00092.html">tbb::flow::interface9::opencl_foundation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_default_opencl_factory</b>() (defined in <a class="el" href="a00092.html">tbb::flow::interface9::opencl_foundation</a>)</td><td class="entry"><a class="el" href="a00092.html">tbb::flow::interface9::opencl_foundation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_foundation</b>(opencl_graph &g) (defined in <a class="el" href="a00092.html">tbb::flow::interface9::opencl_foundation</a>)</td><td class="entry"><a class="el" href="a00092.html">tbb::flow::interface9::opencl_foundation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00345.html b/doc/html/a00345.html
new file mode 100644
index 0000000..1028bbb
--- /dev/null
+++ b/doc/html/a00345.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.4"/>
+<title>Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.4 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class List</span></a></li>
+      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class Members</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00098.html">opencl_node< tuple< Ports...>, JP, Factory ></a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">tbb::flow::interface9::opencl_node< tuple< Ports...>, JP, Factory > Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="a00098.html">tbb::flow::interface9::opencl_node< tuple< Ports...>, JP, Factory ></a>, including all inherited members.</p>
+<table class="directory">
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>kernel_type</b> typedef (defined in <a class="el" href="a00098.html">tbb::flow::interface9::opencl_node< tuple< Ports...>, JP, Factory ></a>)</td><td class="entry"><a class="el" href="a00098.html">tbb::flow::interface9::opencl_node< tuple< Ports...>, JP, Factory ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_node</b>(opencl_graph &g, const kernel_type &kernel) (defined in <a class="el" href="a00098.html">tbb::flow::interface9::opencl_node< tuple< Ports...>, JP, Factory ></a>)</td><td class="entry"><a class="el" href="a00098.html">tbb::flow::interface9::opencl_node< tuple< Ports...>, JP, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_node</b>(opencl_graph &g, const kernel_type &kernel, Factory &f) (defined in <a class="el" href="a00098.html">tbb::flow::interface9::opencl_node< tuple< Ports...>, JP, Factory ></a>)</td><td class="entry"><a class="el" href="a00098.html">tbb::flow::interface9::opencl_node< tuple< Ports...>, JP, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_node</b>(opencl_graph &g, const kernel_type &kernel, DeviceSelector d, Factory &f) (defined in <a class="el" href="a00098.html">tbb::flow::interface9::opencl_node< tuple< Ports...>, JP, Factory ></a>)</td><td class="entry"><a class="el" href="a00098.html">tbb::flow::interface9::opencl_node< tuple< Ports...>, JP, Factory ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<hr>
+<p></p>
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00346.html b/doc/html/a00346.html
index fb89036..e8ca471 100644
--- a/doc/html/a00346.html
+++ b/doc/html/a00346.html
@@ -33,119 +33,24 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00110.html">queue_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00097.html">opencl_node< tuple< Ports...>, JP ></a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::queue_node< T, A > Member List</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_node< tuple< Ports...>, JP > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00097.html">tbb::flow::interface9::opencl_node< tuple< Ports...>, JP ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>add_blt_pred</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>add_blt_succ</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>base_type</b> typedef (defined in <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>blt_pred_cnt</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>blt_pred_cpy</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>blt_succ_cnt</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>blt_succ_cpy</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00030.html#a152f7bb9ab1f033ec56caa451327634c">buffer_node</a>(graph &g)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#a739635c43d1150f2c8dd3f455d698d36">buffer_node</a>(const buffer_node &src)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>built_predecessors</b>() (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_predecessors_type</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>built_successors</b>() (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_successors_type</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>con_res</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copy_predecessors</b>(predecessor_list_type &v) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>copy_predecessors</b>(predecessor_list_type &)=0 (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copy_successors</b>(successor_list_type &v) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>del_blt_pred</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>del_blt_succ</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>enqueue_forwarding_task</b>(buffer_operation &op_data) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>extract</b>() (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>FAILED</b> enum value (defined in <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#a8910a497040a4c6f1a6a1fb7a33a8888">forward_task</a>()</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>forwarder_busy</b> (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>grab_forwarding_task</b>(buffer_operation &op_data) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>handle_operations</b>(buffer_operation *op_list) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>input_type</b> typedef (defined in <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_add_built_pred</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_add_built_predecessor</b>(predecessor_type &p) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_add_built_succ</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_add_built_successor</b>(successor_type &r) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_consume</b>(queue_operation *op) (defined in <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_copy_preds</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_copy_succs</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_del_built_pred</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_del_built_succ</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_delete_built_predecessor</b>(predecessor_type &p) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_delete_built_successor</b>(successor_type &r) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00110.html#a1ab7e37f537acb75175844bd34132b99">internal_forward_task</a>(queue_operation *op)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_pop</b>(queue_operation *op) (defined in <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_pred_cnt</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_push</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00030.html#afa2dd93a1b42e77ccf7e1de0fddf3158">internal_reg_succ</a>(buffer_operation *op)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_release</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00030.html#a46c7f9cd9130036244d4ea8efd74bf22">internal_rem_succ</a>(buffer_operation *op)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_reserve</b>(queue_operation *op) (defined in <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_succ_cnt</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_continue_receiver</b>() (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_aggregator</b> (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_built_predecessors</b> (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_class</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_graph</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_handler</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_successors</b> (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>next</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>op_stat</b> enum name (defined in <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>op_type</b> enum name (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>predecessor_count</b>() (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>predecessor_list_type</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>predecessor_type</b> typedef (defined in <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>prev</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>put_item</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00110.html#a503d3fe4f98302549e36f74633de5716">queue_node</a>(graph &g)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00110.html#aa790bb6d3c8bef58d59235dfba1a1092">queue_node</a>(const queue_node &src)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>queue_operation</b> typedef (defined in <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reg_succ</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00124.html#a16427aa709505de93ffe0d79136e4251">register_predecessor</a>(predecessor_type &)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00030.html#a5e87f7e8fd8698f62f2cad8b52b6e565">register_successor</a>(successor_type &r)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>rel_res</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>rem_succ</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00124.html#a55adae6228bbdc1539695e1ec20e9762">remove_predecessor</a>(predecessor_type &)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00030.html#a3c31300c060bffbbad7798219e702aba">remove_successor</a>(successor_type &r)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>req_item</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>res_item</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f)) (defined in <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_receiver</b>(__TBB_PFG_RESET_ARG(reset_flags)) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_receiver</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>SUCCEEDED</b> enum value (defined in <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>successor_count</b>() (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>successor_list_type</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>successor_type</b> typedef (defined in <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#a335072bc547c5e9b40f58dfeab525953">try_consume</a>()</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>try_fwd_task</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#a175cb77dfbdd0e322097a833a2271c1e">try_get</a>(T &v)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00124.html#aee5067bb4f4b71ffa786c1b33cb9aa6a">try_put</a>(const T &t)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#aa4517c0a58649ea5eb140ab4b786e1ec">try_put_task</a>(const T &t)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00030.html#aaa3745fd4705345df16fb33954d93e30">try_release</a>()</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#a3b12cdebf8cef15b90e3c9cd9e51019f">try_reserve</a>(T &v)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>WAIT</b> enum value (defined in <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~buffer_node</b>() (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~graph_node</b>() (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00124.html#a733889a9053478ef2fb2528e2205bf07">~receiver</a>()</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~sender</b>() (defined in <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a>)</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>kernel_type</b> typedef (defined in <a class="el" href="a00097.html">tbb::flow::interface9::opencl_node< tuple< Ports...>, JP ></a>)</td><td class="entry"><a class="el" href="a00097.html">tbb::flow::interface9::opencl_node< tuple< Ports...>, JP ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_node</b>(opencl_graph &g, const kernel_type &kernel) (defined in <a class="el" href="a00097.html">tbb::flow::interface9::opencl_node< tuple< Ports...>, JP ></a>)</td><td class="entry"><a class="el" href="a00097.html">tbb::flow::interface9::opencl_node< tuple< Ports...>, JP ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_node</b>(opencl_graph &g, const kernel_type &kernel, DeviceSelector d) (defined in <a class="el" href="a00097.html">tbb::flow::interface9::opencl_node< tuple< Ports...>, JP ></a>)</td><td class="entry"><a class="el" href="a00097.html">tbb::flow::interface9::opencl_node< tuple< Ports...>, JP ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00347.html b/doc/html/a00347.html
index e9161d9..b8726d8 100644
--- a/doc/html/a00347.html
+++ b/doc/html/a00347.html
@@ -33,122 +33,24 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00143.html">sequencer_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00096.html">opencl_node< tuple< Ports...> ></a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::sequencer_node< T, A > Member List</div>  </div>
+<div class="title">tbb::flow::interface9::opencl_node< tuple< Ports...> > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00096.html">tbb::flow::interface9::opencl_node< tuple< Ports...> ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>add_blt_pred</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>add_blt_succ</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>base_type</b> typedef (defined in <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>blt_pred_cnt</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>blt_pred_cpy</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>blt_succ_cnt</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>blt_succ_cpy</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00030.html#a152f7bb9ab1f033ec56caa451327634c">buffer_node</a>(graph &g)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#a739635c43d1150f2c8dd3f455d698d36">buffer_node</a>(const buffer_node &src)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>built_predecessors</b>() (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_predecessors_type</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>built_successors</b>() (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_successors_type</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>con_res</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copy_predecessors</b>(predecessor_list_type &v) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>copy_predecessors</b>(predecessor_list_type &)=0 (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copy_successors</b>(successor_list_type &v) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>del_blt_pred</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>del_blt_succ</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>enqueue_forwarding_task</b>(buffer_operation &op_data) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>extract</b>() (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>FAILED</b> enum value (defined in <a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#a8910a497040a4c6f1a6a1fb7a33a8888">forward_task</a>()</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>forwarder_busy</b> (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>grab_forwarding_task</b>(buffer_operation &op_data) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>handle_operations</b>(buffer_operation *op_list) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>input_type</b> typedef (defined in <a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_add_built_pred</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_add_built_predecessor</b>(predecessor_type &p) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_add_built_succ</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_add_built_successor</b>(successor_type &r) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_consume</b>(queue_operation *op) (defined in <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_copy_preds</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_copy_succs</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_del_built_pred</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_del_built_succ</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_delete_built_predecessor</b>(predecessor_type &p) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_delete_built_successor</b>(successor_type &r) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00110.html#a1ab7e37f537acb75175844bd34132b99">internal_forward_task</a>(queue_operation *op)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_pop</b>(queue_operation *op) (defined in <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_pred_cnt</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#afa2dd93a1b42e77ccf7e1de0fddf3158">internal_reg_succ</a>(buffer_operation *op)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_release</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#a46c7f9cd9130036244d4ea8efd74bf22">internal_rem_succ</a>(buffer_operation *op)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_reserve</b>(queue_operation *op) (defined in <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_succ_cnt</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_continue_receiver</b>() (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_aggregator</b> (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_built_predecessors</b> (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_class</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_graph</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_handler</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_successors</b> (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>next</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>op_stat</b> enum name (defined in <a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>op_type</b> enum name (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>predecessor_count</b>() (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>predecessor_list_type</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>predecessor_type</b> typedef (defined in <a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>prev</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>put_item</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00110.html#a503d3fe4f98302549e36f74633de5716">queue_node</a>(graph &g)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00110.html#aa790bb6d3c8bef58d59235dfba1a1092">queue_node</a>(const queue_node &src)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>queue_operation</b> typedef (defined in <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reg_succ</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00124.html#a16427aa709505de93ffe0d79136e4251">register_predecessor</a>(predecessor_type &)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#a5e87f7e8fd8698f62f2cad8b52b6e565">register_successor</a>(successor_type &r)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>rel_res</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>rem_succ</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00124.html#a55adae6228bbdc1539695e1ec20e9762">remove_predecessor</a>(predecessor_type &)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#a3c31300c060bffbbad7798219e702aba">remove_successor</a>(successor_type &r)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>req_item</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>res_item</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f)) (defined in <a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00110.html">tbb::flow::interface7::queue_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_receiver</b>(__TBB_PFG_RESET_ARG(reset_flags)) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_receiver</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00143.html#a0e8d3d486edc7f70c81b36ce9421c11a">sequencer_node</a>(graph &g, const Sequencer &s)</td><td class="entry"><a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00143.html#a19cfdaf85098d0fcf0b1956dc913a7a2">sequencer_node</a>(const sequencer_node &src)</td><td class="entry"><a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>sequencer_operation</b> typedef (defined in <a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>SUCCEEDED</b> enum value (defined in <a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>successor_count</b>() (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>successor_list_type</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>successor_type</b> typedef (defined in <a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#a335072bc547c5e9b40f58dfeab525953">try_consume</a>()</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>try_fwd_task</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#a175cb77dfbdd0e322097a833a2271c1e">try_get</a>(T &v)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00124.html#aee5067bb4f4b71ffa786c1b33cb9aa6a">try_put</a>(const T &t)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#aa4517c0a58649ea5eb140ab4b786e1ec">try_put_task</a>(const T &t)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00030.html#aaa3745fd4705345df16fb33954d93e30">try_release</a>()</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#a3b12cdebf8cef15b90e3c9cd9e51019f">try_reserve</a>(T &v)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>WAIT</b> enum value (defined in <a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~buffer_node</b>() (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~graph_node</b>() (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00124.html#a733889a9053478ef2fb2528e2205bf07">~receiver</a>()</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~sender</b>() (defined in <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a>)</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00143.html#a01fd0321c7bd0f2112458cec2a636d7d">~sequencer_node</a>()</td><td class="entry"><a class="el" href="a00143.html">tbb::flow::interface7::sequencer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>kernel_type</b> typedef (defined in <a class="el" href="a00096.html">tbb::flow::interface9::opencl_node< tuple< Ports...> ></a>)</td><td class="entry"><a class="el" href="a00096.html">tbb::flow::interface9::opencl_node< tuple< Ports...> ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>opencl_node</b>(opencl_graph &g, const kernel_type &kernel) (defined in <a class="el" href="a00096.html">tbb::flow::interface9::opencl_node< tuple< Ports...> ></a>)</td><td class="entry"><a class="el" href="a00096.html">tbb::flow::interface9::opencl_node< tuple< Ports...> ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>opencl_node</b>(opencl_graph &g, const kernel_type &kernel, DeviceSelector d) (defined in <a class="el" href="a00096.html">tbb::flow::interface9::opencl_node< tuple< Ports...> ></a>)</td><td class="entry"><a class="el" href="a00096.html">tbb::flow::interface9::opencl_node< tuple< Ports...> ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00348.html b/doc/html/a00348.html
index e0720fe..24643f0 100644
--- a/doc/html/a00348.html
+++ b/doc/html/a00348.html
@@ -33,120 +33,35 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00109.html">priority_queue_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00066.html">gfx_buffer</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::priority_queue_node< T, Compare, A > Member List</div>  </div>
+<div class="title">tbb::flow::interface9::gfx_buffer< T > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>add_blt_pred</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>add_blt_succ</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>base_type</b> typedef (defined in <a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a>)</td><td class="entry"><a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>blt_pred_cnt</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>blt_pred_cpy</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>blt_succ_cnt</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>blt_succ_cpy</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00030.html#a152f7bb9ab1f033ec56caa451327634c">buffer_node</a>(graph &g)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#a739635c43d1150f2c8dd3f455d698d36">buffer_node</a>(const buffer_node &src)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>built_predecessors</b>() (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_predecessors_type</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>built_successors</b>() (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_successors_type</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>con_res</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copy_predecessors</b>(predecessor_list_type &v) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>copy_predecessors</b>(predecessor_list_type &)=0 (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copy_successors</b>(successor_list_type &v) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>del_blt_pred</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>del_blt_succ</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>enqueue_forwarding_task</b>(buffer_operation &op_data) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>extract</b>() (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>FAILED</b> enum value (defined in <a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a>)</td><td class="entry"><a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#a8910a497040a4c6f1a6a1fb7a33a8888">forward_task</a>()</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>forwarder_busy</b> (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>grab_forwarding_task</b>(buffer_operation &op_data) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>handle_operations</b>(prio_operation *op_list) (defined in <a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a>)</td><td class="entry"><a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>input_type</b> typedef (defined in <a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a>)</td><td class="entry"><a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_add_built_pred</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_add_built_predecessor</b>(predecessor_type &p) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_add_built_succ</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_add_built_successor</b>(successor_type &r) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_consume</b>(prio_operation *op) (defined in <a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a>)</td><td class="entry"><a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_copy_preds</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_copy_succs</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_del_built_pred</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_del_built_succ</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_delete_built_predecessor</b>(predecessor_type &p) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_delete_built_successor</b>(successor_type &r) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00109.html#a4e6d43ca8748046098fd27ca97e58f3d">internal_forward_task</a>(prio_operation *op)</td><td class="entry"><a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_pop</b>(prio_operation *op) (defined in <a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a>)</td><td class="entry"><a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_pred_cnt</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_push</b>(prio_operation *op) (defined in <a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a>)</td><td class="entry"><a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00030.html#afa2dd93a1b42e77ccf7e1de0fddf3158">internal_reg_succ</a>(buffer_operation *op)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_release</b>(prio_operation *op) (defined in <a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a>)</td><td class="entry"><a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00030.html#a46c7f9cd9130036244d4ea8efd74bf22">internal_rem_succ</a>(buffer_operation *op)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_reserve</b>(prio_operation *op) (defined in <a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a>)</td><td class="entry"><a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_succ_cnt</b>(buffer_operation *op) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_continue_receiver</b>() (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>item_type</b> typedef (defined in <a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a>)</td><td class="entry"><a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_aggregator</b> (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_built_predecessors</b> (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_class</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_graph</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_handler</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_successors</b> (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>next</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>op_stat</b> enum name (defined in <a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a>)</td><td class="entry"><a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>op_type</b> enum name (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a>)</td><td class="entry"><a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>predecessor_count</b>() (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>predecessor_list_type</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>predecessor_type</b> typedef (defined in <a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a>)</td><td class="entry"><a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>prev</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>prio_operation</b> typedef (defined in <a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a>)</td><td class="entry"><a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00109.html#ab295c7b50ff804f7276609a25016e7ca">priority_queue_node</a>(graph &g)</td><td class="entry"><a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00109.html#aa163d8a81b4a795cb37f207b02191a39">priority_queue_node</a>(const priority_queue_node &src)</td><td class="entry"><a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>put_item</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reg_succ</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00124.html#a16427aa709505de93ffe0d79136e4251">register_predecessor</a>(predecessor_type &)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#a5e87f7e8fd8698f62f2cad8b52b6e565">register_successor</a>(successor_type &r)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>rel_res</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>rem_succ</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00124.html#a55adae6228bbdc1539695e1ec20e9762">remove_predecessor</a>(predecessor_type &)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#a3c31300c060bffbbad7798219e702aba">remove_successor</a>(successor_type &r)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>req_item</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>res_item</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f)) (defined in <a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a>)</td><td class="entry"><a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_receiver</b>(__TBB_PFG_RESET_ARG(reset_flags)) (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_receiver</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a>)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a>)</td><td class="entry"><a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a>)</td><td class="entry"><a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>SUCCEEDED</b> enum value (defined in <a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a>)</td><td class="entry"><a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>successor_count</b>() (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>successor_list_type</b> typedef (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>successor_type</b> typedef (defined in <a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a>)</td><td class="entry"><a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00030.html#a335072bc547c5e9b40f58dfeab525953">try_consume</a>()</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>try_fwd_task</b> enum value (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00030.html#a175cb77dfbdd0e322097a833a2271c1e">try_get</a>(T &v)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00124.html#aee5067bb4f4b71ffa786c1b33cb9aa6a">try_put</a>(const T &t)</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00030.html#aa4517c0a58649ea5eb140ab4b786e1ec">try_put_task</a>(const T &t)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00030.html#aaa3745fd4705345df16fb33954d93e30">try_release</a>()</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00030.html#a3b12cdebf8cef15b90e3c9cd9e51019f">try_reserve</a>(T &v)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>WAIT</b> enum value (defined in <a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a>)</td><td class="entry"><a class="el" href="a00109.html">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~buffer_node</b>() (defined in <a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a>)</td><td class="entry"><a class="el" href="a00030.html">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~graph_node</b>() (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00124.html#a733889a9053478ef2fb2528e2205bf07">~receiver</a>()</td><td class="entry"><a class="el" href="a00124.html">tbb::flow::interface7::receiver< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~sender</b>() (defined in <a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a>)</td><td class="entry"><a class="el" href="a00142.html">tbb::flow::interface7::sender< T ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>begin</b>() (defined in <a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>cbegin</b>() const  (defined in <a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cend</b>() const  (defined in <a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_iterator</b> typedef (defined in <a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>data</b>() (defined in <a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>data</b>() const  (defined in <a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>end</b>() (defined in <a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>gfx_buffer</b>() (defined in <a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>gfx_buffer</b>(size_type size) (defined in <a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator[]</b>(size_type pos) (defined in <a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator[]</b>(size_type pos) const  (defined in <a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>size</b>() const  (defined in <a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::flow::interface9::gfx_buffer< T ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00349.html b/doc/html/a00349.html
index d7c6107..b6d6816 100644
--- a/doc/html/a00349.html
+++ b/doc/html/a00349.html
@@ -33,26 +33,28 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00089.html">join_node< OutputTuple, reserving ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00065.html">gfx_async_msg</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::join_node< OutputTuple, reserving > Member List</div>  </div>
+<div class="title">tbb::flow::interface9::gfx_async_msg< T > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00089.html">tbb::flow::interface7::join_node< OutputTuple, reserving ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00065.html">tbb::flow::interface9::gfx_async_msg< T ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>input_ports_type</b> typedef (defined in <a class="el" href="a00089.html">tbb::flow::interface7::join_node< OutputTuple, reserving ></a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface7::join_node< OutputTuple, reserving ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>join_node</b>(graph &g) (defined in <a class="el" href="a00089.html">tbb::flow::interface7::join_node< OutputTuple, reserving ></a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface7::join_node< OutputTuple, reserving ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>join_node</b>(const join_node &other) (defined in <a class="el" href="a00089.html">tbb::flow::interface7::join_node< OutputTuple, reserving ></a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface7::join_node< OutputTuple, reserving ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00089.html">tbb::flow::interface7::join_node< OutputTuple, reserving ></a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface7::join_node< OutputTuple, reserving ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00089.html">tbb::flow::interface7::join_node< OutputTuple, reserving ></a>)</td><td class="entry"><a class="el" href="a00089.html">tbb::flow::interface7::join_node< OutputTuple, reserving ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>data</b>() (defined in <a class="el" href="a00065.html">tbb::flow::interface9::gfx_async_msg< T ></a>)</td><td class="entry"><a class="el" href="a00065.html">tbb::flow::interface9::gfx_async_msg< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>data</b>() const  (defined in <a class="el" href="a00065.html">tbb::flow::interface9::gfx_async_msg< T ></a>)</td><td class="entry"><a class="el" href="a00065.html">tbb::flow::interface9::gfx_async_msg< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>gfx_async_msg</b>() (defined in <a class="el" href="a00065.html">tbb::flow::interface9::gfx_async_msg< T ></a>)</td><td class="entry"><a class="el" href="a00065.html">tbb::flow::interface9::gfx_async_msg< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>gfx_async_msg</b>(const T &input_data) (defined in <a class="el" href="a00065.html">tbb::flow::interface9::gfx_async_msg< T ></a>)</td><td class="entry"><a class="el" href="a00065.html">tbb::flow::interface9::gfx_async_msg< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>kernel_id_type</b> typedef (defined in <a class="el" href="a00065.html">tbb::flow::interface9::gfx_async_msg< T ></a>)</td><td class="entry"><a class="el" href="a00065.html">tbb::flow::interface9::gfx_async_msg< T ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>set_task_id</b>(kernel_id_type id) (defined in <a class="el" href="a00065.html">tbb::flow::interface9::gfx_async_msg< T ></a>)</td><td class="entry"><a class="el" href="a00065.html">tbb::flow::interface9::gfx_async_msg< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>task_id</b>() const  (defined in <a class="el" href="a00065.html">tbb::flow::interface9::gfx_async_msg< T ></a>)</td><td class="entry"><a class="el" href="a00065.html">tbb::flow::interface9::gfx_async_msg< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00350.html b/doc/html/a00350.html
index b7b3912..d08b1d4 100644
--- a/doc/html/a00350.html
+++ b/doc/html/a00350.html
@@ -33,26 +33,28 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00088.html">join_node< OutputTuple, queueing ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00067.html">gfx_factory</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::join_node< OutputTuple, queueing > Member List</div>  </div>
+<div class="title">tbb::flow::interface9::gfx_factory Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00088.html">tbb::flow::interface7::join_node< OutputTuple, queueing ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00067.html">tbb::flow::interface9::gfx_factory</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>input_ports_type</b> typedef (defined in <a class="el" href="a00088.html">tbb::flow::interface7::join_node< OutputTuple, queueing ></a>)</td><td class="entry"><a class="el" href="a00088.html">tbb::flow::interface7::join_node< OutputTuple, queueing ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>join_node</b>(graph &g) (defined in <a class="el" href="a00088.html">tbb::flow::interface7::join_node< OutputTuple, queueing ></a>)</td><td class="entry"><a class="el" href="a00088.html">tbb::flow::interface7::join_node< OutputTuple, queueing ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>join_node</b>(const join_node &other) (defined in <a class="el" href="a00088.html">tbb::flow::interface7::join_node< OutputTuple, queueing ></a>)</td><td class="entry"><a class="el" href="a00088.html">tbb::flow::interface7::join_node< OutputTuple, queueing ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00088.html">tbb::flow::interface7::join_node< OutputTuple, queueing ></a>)</td><td class="entry"><a class="el" href="a00088.html">tbb::flow::interface7::join_node< OutputTuple, queueing ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00088.html">tbb::flow::interface7::join_node< OutputTuple, queueing ></a>)</td><td class="entry"><a class="el" href="a00088.html">tbb::flow::interface7::join_node< OutputTuple, queueing ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>async_msg_type</b> typedef (defined in <a class="el" href="a00067.html">tbb::flow::interface9::gfx_factory</a>)</td><td class="entry"><a class="el" href="a00067.html">tbb::flow::interface9::gfx_factory</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>finalize</b>(device_type, FinalizeFn fn, Args &...) (defined in <a class="el" href="a00067.html">tbb::flow::interface9::gfx_factory</a>)</td><td class="entry"><a class="el" href="a00067.html">tbb::flow::interface9::gfx_factory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>gfx_factory</b>(tbb::flow::graph &g) (defined in <a class="el" href="a00067.html">tbb::flow::interface9::gfx_factory</a>)</td><td class="entry"><a class="el" href="a00067.html">tbb::flow::interface9::gfx_factory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>kernel_id_type</b> typedef (defined in <a class="el" href="a00067.html">tbb::flow::interface9::gfx_factory</a>)</td><td class="entry"><a class="el" href="a00067.html">tbb::flow::interface9::gfx_factory</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>kernel_type</b> typedef (defined in <a class="el" href="a00067.html">tbb::flow::interface9::gfx_factory</a>)</td><td class="entry"><a class="el" href="a00067.html">tbb::flow::interface9::gfx_factory</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>send_data</b>(device_type, Args &...args) (defined in <a class="el" href="a00067.html">tbb::flow::interface9::gfx_factory</a>)</td><td class="entry"><a class="el" href="a00067.html">tbb::flow::interface9::gfx_factory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>send_kernel</b>(device_type, const kernel_type &kernel, Args &...args) (defined in <a class="el" href="a00067.html">tbb::flow::interface9::gfx_factory</a>)</td><td class="entry"><a class="el" href="a00067.html">tbb::flow::interface9::gfx_factory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00351.html b/doc/html/a00351.html
index 83ec246..8bc6bfe 100644
--- a/doc/html/a00351.html
+++ b/doc/html/a00351.html
@@ -33,34 +33,22 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00090.html">join_node< OutputTuple, tag_matching ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00067.html">gfx_factory</a></li><li class="navelem"><a class="el" href="a00055.html">dummy_device_selector</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::join_node< OutputTuple, tag_matching > Member List</div>  </div>
+<div class="title">tbb::flow::interface9::gfx_factory::dummy_device_selector Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00055.html">tbb::flow::interface9::gfx_factory::dummy_device_selector</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>input_ports_type</b> typedef (defined in <a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>join_node</b>(graph &g, __TBB_B0 b0, __TBB_B1 b1) (defined in <a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>join_node</b>(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2) (defined in <a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>join_node</b>(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3) (defined in <a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>join_node</b>(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4) (defined in <a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>join_node</b>(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5) (defined in <a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>join_node</b>(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5, __TBB_B6 b6) (defined in <a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>join_node</b>(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5, __TBB_B6 b6, __TBB_B7 b7) (defined in <a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>join_node</b>(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5, __TBB_B6 b6, __TBB_B7 b7, __TBB_B8 b8) (defined in <a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a></td><td class="entry"><span class="mlabel">i [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>join_node</b>(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5, __TBB_B6 b6, __TBB_B7 b7, __TBB_B8 b8, __TBB_B9 b9) (defined in <a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a></td><td class="entry"><span class="mlabel">i [...]
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>join_node</b>(const join_node &other) (defined in <a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a>)</td><td class="entry"><a class="el" href="a00090.html">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator()</b>(gfx_factory &) (defined in <a class="el" href="a00055.html">tbb::flow::interface9::gfx_factory::dummy_device_selector</a>)</td><td class="entry"><a class="el" href="a00055.html">tbb::flow::interface9::gfx_factory::dummy_device_selector</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00352.html b/doc/html/a00352.html
index f1b2d83..c5f429c 100644
--- a/doc/html/a00352.html
+++ b/doc/html/a00352.html
@@ -33,27 +33,29 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00075.html">indexer_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00056.html">edge_container</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 > Member List</div>  </div>
+<div class="title">tbb::flow::interface9::internal::edge_container< C > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00075.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00056.html">tbb::flow::interface9::internal::edge_container< C ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>indexer_node</b>(graph &g) (defined in <a class="el" href="a00075.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 ></a>)</td><td class="entry"><a class="el" href="a00075.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>indexer_node</b>(const indexer_node &other) (defined in <a class="el" href="a00075.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 ></a>)</td><td class="entry"><a class="el" href="a00075.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>InputTuple</b> typedef (defined in <a class="el" href="a00075.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 ></a>)</td><td class="entry"><a class="el" href="a00075.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00075.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 ></a>)</td><td class="entry"><a class="el" href="a00075.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00075.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 ></a>)</td><td class="entry"><a class="el" href="a00075.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>unfolded_type</b> typedef (defined in <a class="el" href="a00075.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 ></a>)</td><td class="entry"><a class="el" href="a00075.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>add_edge</b>(C &s) (defined in <a class="el" href="a00056.html">tbb::flow::interface9::internal::edge_container< C ></a>)</td><td class="entry"><a class="el" href="a00056.html">tbb::flow::interface9::internal::edge_container< C ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>clear</b>() (defined in <a class="el" href="a00056.html">tbb::flow::interface9::internal::edge_container< C ></a>)</td><td class="entry"><a class="el" href="a00056.html">tbb::flow::interface9::internal::edge_container< C ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copy_edges</b>(edge_list_type &v) (defined in <a class="el" href="a00056.html">tbb::flow::interface9::internal::edge_container< C ></a>)</td><td class="entry"><a class="el" href="a00056.html">tbb::flow::interface9::internal::edge_container< C ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>delete_edge</b>(C &s) (defined in <a class="el" href="a00056.html">tbb::flow::interface9::internal::edge_container< C ></a>)</td><td class="entry"><a class="el" href="a00056.html">tbb::flow::interface9::internal::edge_container< C ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>edge_count</b>() (defined in <a class="el" href="a00056.html">tbb::flow::interface9::internal::edge_container< C ></a>)</td><td class="entry"><a class="el" href="a00056.html">tbb::flow::interface9::internal::edge_container< C ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>edge_list_type</b> typedef (defined in <a class="el" href="a00056.html">tbb::flow::interface9::internal::edge_container< C ></a>)</td><td class="entry"><a class="el" href="a00056.html">tbb::flow::interface9::internal::edge_container< C ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>receiver_extract</b>(R &r) (defined in <a class="el" href="a00056.html">tbb::flow::interface9::internal::edge_container< C ></a>)</td><td class="entry"><a class="el" href="a00056.html">tbb::flow::interface9::internal::edge_container< C ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>sender_extract</b>(S &s) (defined in <a class="el" href="a00056.html">tbb::flow::interface9::internal::edge_container< C ></a>)</td><td class="entry"><a class="el" href="a00056.html">tbb::flow::interface9::internal::edge_container< C ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00353.html b/doc/html/a00353.html
index ee78270..c4379f1 100644
--- a/doc/html/a00353.html
+++ b/doc/html/a00353.html
@@ -33,27 +33,40 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00076.html">indexer_node< T0 ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00165.html">untyped_sender</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::indexer_node< T0 > Member List</div>  </div>
+<div class="title">tbb::flow::interface9::internal::untyped_sender Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00076.html">tbb::flow::interface7::indexer_node< T0 ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>indexer_node</b>(graph &g) (defined in <a class="el" href="a00076.html">tbb::flow::interface7::indexer_node< T0 ></a>)</td><td class="entry"><a class="el" href="a00076.html">tbb::flow::interface7::indexer_node< T0 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>indexer_node</b>(const indexer_node &other) (defined in <a class="el" href="a00076.html">tbb::flow::interface7::indexer_node< T0 ></a>)</td><td class="entry"><a class="el" href="a00076.html">tbb::flow::interface7::indexer_node< T0 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>InputTuple</b> typedef (defined in <a class="el" href="a00076.html">tbb::flow::interface7::indexer_node< T0 ></a>)</td><td class="entry"><a class="el" href="a00076.html">tbb::flow::interface7::indexer_node< T0 ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00076.html">tbb::flow::interface7::indexer_node< T0 ></a>)</td><td class="entry"><a class="el" href="a00076.html">tbb::flow::interface7::indexer_node< T0 ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00076.html">tbb::flow::interface7::indexer_node< T0 ></a>)</td><td class="entry"><a class="el" href="a00076.html">tbb::flow::interface7::indexer_node< T0 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>unfolded_type</b> typedef (defined in <a class="el" href="a00076.html">tbb::flow::interface7::indexer_node< T0 ></a>)</td><td class="entry"><a class="el" href="a00076.html">tbb::flow::interface7::indexer_node< T0 ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_successors</b>()=0 (defined in <a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a>)</td><td class="entry"><a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00165.html#a0d674709d3783ec5b42eb243069fed73">built_successors_type</a> typedef</td><td class="entry"><a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copy_successors</b>(successor_list_type &)=0 (defined in <a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a>)</td><td class="entry"><a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::predecessor_cache</b> (defined in <a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a>)</td><td class="entry"><a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::reservable_predecessor_cache</b> (defined in <a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a>)</td><td class="entry"><a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_add_built_successor</b>(successor_type &)=0 (defined in <a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a>)</td><td class="entry"><a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_delete_built_successor</b>(successor_type &)=0 (defined in <a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a>)</td><td class="entry"><a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00165.html#a2298076f4c5e52a6c9c8a8e6fbfbd9de">register_successor</a>(successor_type &r)=0</td><td class="entry"><a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00165.html#a32affec91647eba02f826f18f43e02e5">remove_successor</a>(successor_type &r)=0</td><td class="entry"><a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>successor_count</b>()=0 (defined in <a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a>)</td><td class="entry"><a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>successor_list_type</b> typedef (defined in <a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a>)</td><td class="entry"><a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00165.html#a7b4e68e6917207283f5c621e7053c7ea">successor_type</a> typedef</td><td class="entry"><a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00165.html#acfb8e3669932e5866fb6afa603ff8250">try_consume</a>()</td><td class="entry"><a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00165.html#a3c422ea58b7f11b6cc536539000a556e">try_get</a>(X &t)</td><td class="entry"><a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>try_get_wrapper</b>(void *p, bool is_async)=0 (defined in <a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a>)</td><td class="entry"><a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00165.html#ac81ea252a8397324c865b035f67903ee">try_release</a>()</td><td class="entry"><a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00165.html#ad48b26c7dec4845e1cb374e9f1c59fea">try_reserve</a>(X &t)</td><td class="entry"><a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>try_reserve_wrapper</b>(void *p, bool is_async)=0 (defined in <a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a>)</td><td class="entry"><a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~untyped_sender</b>() (defined in <a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a>)</td><td class="entry"><a class="el" href="a00165.html">tbb::flow::interface9::internal::untyped_sender</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00354.html b/doc/html/a00354.html
index b92f8ae..9ca32e2 100644
--- a/doc/html/a00354.html
+++ b/doc/html/a00354.html
@@ -33,27 +33,43 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00077.html">indexer_node< T0, T1 ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface9</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00164.html">untyped_receiver</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::indexer_node< T0, T1 > Member List</div>  </div>
+<div class="title">tbb::flow::interface9::internal::untyped_receiver Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00077.html">tbb::flow::interface7::indexer_node< T0, T1 ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>indexer_node</b>(graph &g) (defined in <a class="el" href="a00077.html">tbb::flow::interface7::indexer_node< T0, T1 ></a>)</td><td class="entry"><a class="el" href="a00077.html">tbb::flow::interface7::indexer_node< T0, T1 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>indexer_node</b>(const indexer_node &other) (defined in <a class="el" href="a00077.html">tbb::flow::interface7::indexer_node< T0, T1 ></a>)</td><td class="entry"><a class="el" href="a00077.html">tbb::flow::interface7::indexer_node< T0, T1 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>InputTuple</b> typedef (defined in <a class="el" href="a00077.html">tbb::flow::interface7::indexer_node< T0, T1 ></a>)</td><td class="entry"><a class="el" href="a00077.html">tbb::flow::interface7::indexer_node< T0, T1 ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00077.html">tbb::flow::interface7::indexer_node< T0, T1 ></a>)</td><td class="entry"><a class="el" href="a00077.html">tbb::flow::interface7::indexer_node< T0, T1 ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00077.html">tbb::flow::interface7::indexer_node< T0, T1 ></a>)</td><td class="entry"><a class="el" href="a00077.html">tbb::flow::interface7::indexer_node< T0, T1 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>unfolded_type</b> typedef (defined in <a class="el" href="a00077.html">tbb::flow::interface7::indexer_node< T0, T1 ></a>)</td><td class="entry"><a class="el" href="a00077.html">tbb::flow::interface7::indexer_node< T0, T1 ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>built_predecessors</b>()=0 (defined in <a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>built_predecessors_type</b> typedef (defined in <a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copy_predecessors</b>(predecessor_list_type &)=0 (defined in <a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::broadcast_cache</b> (defined in <a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::round_robin_cache</b> (defined in <a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::successor_cache</b> (defined in <a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_add_built_predecessor</b>(predecessor_type &)=0 (defined in <a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_delete_built_predecessor</b>(predecessor_type &)=0 (defined in <a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_continue_receiver</b>() (defined in <a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>limiter_node</b> (defined in <a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>predecessor_count</b>()=0 (defined in <a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>predecessor_list_type</b> typedef (defined in <a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">predecessor_type</a> typedef</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>proxy_dependency_receiver</b> (defined in <a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00164.html#ae1c186c47aace8ad385c6bb6fdf3a14d">register_predecessor</a>(predecessor_type &)</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00164.html#a18c7050e86d482a8aed57611e40d3c6f">remove_predecessor</a>(predecessor_type &)</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00164.html#a2ddcd11694b38141f369af99498971ca">reset_receiver</a>(reset_flags f=rf_reset_protocol)=0</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>run_and_put_task</b> (defined in <a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00164.html#a84f8406cd5e3252965d9e238575eaede">try_put</a>(const X &t)</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>try_put_task</b>(const X &t) (defined in <a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>try_put_task_wrapper</b>(const void *p, bool is_async)=0 (defined in <a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00164.html#a632631c8a370c1dd1fa8815cbc5e18ec">~untyped_receiver</a>()</td><td class="entry"><a class="el" href="a00164.html">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00355.html b/doc/html/a00355.html
index 64f6d05..a70fc1d 100644
--- a/doc/html/a00355.html
+++ b/doc/html/a00355.html
@@ -33,27 +33,108 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00078.html">indexer_node< T0, T1, T2 ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00036.html">concurrent_hash_map</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::indexer_node< T0, T1, T2 > Member List</div>  </div>
+<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00078.html">tbb::flow::interface7::indexer_node< T0, T1, T2 ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>indexer_node</b>(graph &g) (defined in <a class="el" href="a00078.html">tbb::flow::interface7::indexer_node< T0, T1, T2 ></a>)</td><td class="entry"><a class="el" href="a00078.html">tbb::flow::interface7::indexer_node< T0, T1, T2 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>indexer_node</b>(const indexer_node &other) (defined in <a class="el" href="a00078.html">tbb::flow::interface7::indexer_node< T0, T1, T2 ></a>)</td><td class="entry"><a class="el" href="a00078.html">tbb::flow::interface7::indexer_node< T0, T1, T2 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>InputTuple</b> typedef (defined in <a class="el" href="a00078.html">tbb::flow::interface7::indexer_node< T0, T1, T2 ></a>)</td><td class="entry"><a class="el" href="a00078.html">tbb::flow::interface7::indexer_node< T0, T1, T2 ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00078.html">tbb::flow::interface7::indexer_node< T0, T1, T2 ></a>)</td><td class="entry"><a class="el" href="a00078.html">tbb::flow::interface7::indexer_node< T0, T1, T2 ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00078.html">tbb::flow::interface7::indexer_node< T0, T1, T2 ></a>)</td><td class="entry"><a class="el" href="a00078.html">tbb::flow::interface7::indexer_node< T0, T1, T2 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>unfolded_type</b> typedef (defined in <a class="el" href="a00078.html">tbb::flow::interface7::indexer_node< T0, T1, T2 ></a>)</td><td class="entry"><a class="el" href="a00078.html">tbb::flow::interface7::indexer_node< T0, T1, T2 ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>accessor_location</b> (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>accessor_location</b> (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocate_node_copy_construct</b>(node_allocator_type &allocator, const Key &key, const T *t) (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected [...]
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>allocate_node_default_construct</b>(node_allocator_type &allocator, const Key &key, const T *) (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><spa [...]
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocate_node_emplace_construct</b>(node_allocator_type &allocator, Args &&...args) (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</spa [...]
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>allocate_node_move_construct</b>(node_allocator_type &allocator, const Key &key, const T *t) (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span  [...]
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocator_type</b> typedef (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>begin</b>() (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>begin</b>() const  (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#aa067a2a4db1d96f38555369a89deee64">bucket_count</a>() const </td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#ab8295bc260b5e4df883fef11574b84c6">clear</a>()</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#aa3a9767b525144a2afb69ed125714c53">concurrent_hash_map</a>(const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#aae76e1252b56b107685f8746e0f6a1f4">concurrent_hash_map</a>(size_type n, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#a8a73b86f9a5e9836b38713e56c546654">concurrent_hash_map</a>(const concurrent_hash_map &table, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#a2bd04845683b15a590913a72a19fa3dc">concurrent_hash_map</a>(concurrent_hash_map &&table)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#ad642e497153df5669e6454acef095675">concurrent_hash_map</a>(concurrent_hash_map &&table, const allocator_type &a)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#ad56fc19d656099d49051f3c363cefc89">concurrent_hash_map</a>(I first, I last, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#a57149f90060b033b1f2493f2a88ef291">concurrent_hash_map</a>(std::initializer_list< value_type > il, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_accessor</b> (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_iterator</b> typedef (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_range_type</b> typedef (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#ac375d3884bf9c80efe56117757c822e7">count</a>(const Key &key) const </td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>delete_node</b>(node_base *n) (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>do_not_allocate_node</b>(node_allocator_type &, const Key &, const T *) (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="m [...]
+  <tr><td class="entry"><a class="el" href="a00036.html#a382178ea2f00f69096c91bcf76ae7913">emplace</a>(const_accessor &result, Args &&...args)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#a17e51c8864282c35aa4d23f22909cc4a">emplace</a>(accessor &result, Args &&...args)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#acbe1d0f3a87786a83a7021af2ef52ee0">emplace</a>(Args &&...args)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#a5e05f2a1ca3accfb4252d7ee82d1e990">empty</a>() const </td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>end</b>() (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>end</b>() const  (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>equal_range</b>(const Key &key) (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>equal_range</b>(const Key &key) const  (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#a5144122dbb946d933b94a92117543b33">erase</a>(const Key &key)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#a2ec6f95ed9beda9d32df56cdd45c1842">erase</a>(const_accessor &item_accessor)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#a3ed0fbcc6cfd4db8242e100355ac1fa5">erase</a>(accessor &item_accessor)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#a6fec452b31b8f0e185dc2de64b7128b2">exclude</a>(const_accessor &item_accessor)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#a27a3f296dc170ae25f8e3fd9efa93cff">find</a>(const_accessor &result, const Key &key) const </td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#a6b61799e2018381b5ee4b78752a41483">find</a>(accessor &result, const Key &key)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>generic_emplace</b>(Accessor &&result, Args &&...args) (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>generic_move_insert</b>(Accessor &&result, value_type &&value) (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#a121865c574f8ae5cae69ed3d6b7e0511">get_allocator</a>() const </td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#aaebb10a9e9dcb24e63860caa745a281d">insert</a>(const_accessor &result, const Key &key)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#a766c6033c203e8f342501d85a7cf3405">insert</a>(accessor &result, const Key &key)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#ae0b420cdb752e749790c8a7daa15c3c2">insert</a>(const_accessor &result, const value_type &value)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#a2047214e041b7674c3b83e204d0d6c6a">insert</a>(accessor &result, const value_type &value)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#a8e39501f9edb3210504c9c4ca05384b7">insert</a>(const value_type &value)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#a446910c1ca4818bdb00f4ffa91b9108a">insert</a>(const_accessor &result, value_type &&value)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#a50c929e78ecfa36986c8821287665a70">insert</a>(accessor &result, value_type &&value)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#a5d3da283d2e74c7ff0ecb0dfd4d371fd">insert</a>(value_type &&value)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#ab84dfd77316252cbf39c7ae89e365a00">insert</a>(I first, I last)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#a580fdba266e87106ad41470479f641d6">insert</a>(std::initializer_list< value_type > il)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::hash_map_iterator</b> (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::hash_map_range</b> (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#a0bc3593f82b3b4f9839fc051780212ab">internal_copy</a>(const concurrent_hash_map &source)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_copy</b>(I first, I last) (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#a8603f5288db63ec35a16844427e97e42">internal_equal_range</a>(const Key &key, I end) const </td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#acbb5b18c097fb32f264b7b5fe8d9fdd4">internal_fast_find</a>(const Key &key) const </td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_write_access_needed</b> (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_write_access_needed</b> (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_write_access_needed</b> (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>key_type</b> typedef (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#a2a319cf46fb9cf9a88aab6c0a20c98b3">lookup</a>(bool op_insert, const Key &key, const T *t, const_accessor *result, bool write, node *(*allocate_node)(node_allocator_type &, const Key &, const T *), node *tmp_n=0)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mapped_type</b> typedef (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#aea0a0e5220a0dcb67da57d0280d36005">max_size</a>() const </td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_allocator</b> (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_hash_compare</b> (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>node_allocator_type</b> typedef (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#a63e01b1f79c287ae0257ccfd483fd90a">operator=</a>(const concurrent_hash_map &table)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#a92b506ceed93d1c25979948961054380">operator=</a>(concurrent_hash_map &&table)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#aac73665b1a55e3de7332f36598488252">operator=</a>(std::initializer_list< value_type > il)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>range</b>(size_type grainsize=1) (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>range</b>(size_type grainsize=1) const  (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>range_type</b> typedef (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00036.html#adf1fa9470c605731063e5949f0418eb7">rehash</a>(size_type n=0)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>rehash_bucket</b>(bucket *b_new, const hashcode_t h) (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>search_bucket</b>(const key_type &key, bucket *b) const  (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#ad2ce6da7cd62bc7425f0a29498332ab4">size</a>() const </td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#a4c8edf603bc776a6c84c007702c1808e">swap</a>(concurrent_hash_map &table)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00036.html#a9ce9ab8c954bf6979c2c57d10fd8a8ed">~concurrent_hash_map</a>()</td><td class="entry"><a class="el" href="a00036.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00356.html b/doc/html/a00356.html
index b33c27c..4ed8cd2 100644
--- a/doc/html/a00356.html
+++ b/doc/html/a00356.html
@@ -33,27 +33,31 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00079.html">indexer_node< T0, T1, T2, T3 ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00036.html">concurrent_hash_map</a></li><li class="navelem"><a class="el" href="a00009.html">accessor</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::indexer_node< T0, T1, T2, T3 > Member List</div>  </div>
+<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00079.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3 ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00009.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>indexer_node</b>(graph &g) (defined in <a class="el" href="a00079.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3 ></a>)</td><td class="entry"><a class="el" href="a00079.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>indexer_node</b>(const indexer_node &other) (defined in <a class="el" href="a00079.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3 ></a>)</td><td class="entry"><a class="el" href="a00079.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>InputTuple</b> typedef (defined in <a class="el" href="a00079.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3 ></a>)</td><td class="entry"><a class="el" href="a00079.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3 ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00079.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3 ></a>)</td><td class="entry"><a class="el" href="a00079.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3 ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00079.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3 ></a>)</td><td class="entry"><a class="el" href="a00079.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>unfolded_type</b> typedef (defined in <a class="el" href="a00079.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3 ></a>)</td><td class="entry"><a class="el" href="a00079.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3 ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00047.html#a7b26d22d228cf0d8678c9b346c63752c">const_accessor</a>()</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00047.html#a6299b523d2ae8e2613f1bc160ca99b85">empty</a>() const </td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_writer</b>() (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_hash</b> (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_node</b> (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00009.html#a4e03905a33fbdafdb99113cc68d2bd4b">operator*</a>() const </td><td class="entry"><a class="el" href="a00009.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00009.html#ab04f73bd4a4ca7df0dc91a7b4d66f987">operator-></a>() const </td><td class="entry"><a class="el" href="a00009.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00047.html#a18390cb369369d72bdf7c867755b5190">release</a>()</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00009.html#a850178bbdcdbc4cf5955cab37eb8c42c">value_type</a> typedef</td><td class="entry"><a class="el" href="a00009.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00047.html#afbc0c85a146c912b9a0f94a7695957c7">~const_accessor</a>()</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00357.html b/doc/html/a00357.html
index 05def21..f8dc519 100644
--- a/doc/html/a00357.html
+++ b/doc/html/a00357.html
@@ -33,27 +33,22 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00080.html">indexer_node< T0, T1, T2, T3, T4 ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00036.html">concurrent_hash_map</a></li><li class="navelem"><a class="el" href="a00010.html">accessor_not_used</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4 > Member List</div>  </div>
+<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor_not_used Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00080.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4 ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00010.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor_not_used</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>indexer_node</b>(graph &g) (defined in <a class="el" href="a00080.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4 ></a>)</td><td class="entry"><a class="el" href="a00080.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>indexer_node</b>(const indexer_node &other) (defined in <a class="el" href="a00080.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4 ></a>)</td><td class="entry"><a class="el" href="a00080.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>InputTuple</b> typedef (defined in <a class="el" href="a00080.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4 ></a>)</td><td class="entry"><a class="el" href="a00080.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4 ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00080.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4 ></a>)</td><td class="entry"><a class="el" href="a00080.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4 ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00080.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4 ></a>)</td><td class="entry"><a class="el" href="a00080.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>unfolded_type</b> typedef (defined in <a class="el" href="a00080.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4 ></a>)</td><td class="entry"><a class="el" href="a00080.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4 ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>release</b>() (defined in <a class="el" href="a00010.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor_not_used</a>)</td><td class="entry"><a class="el" href="a00010.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor_not_used</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00358.html b/doc/html/a00358.html
index 9144933..99e989d 100644
--- a/doc/html/a00358.html
+++ b/doc/html/a00358.html
@@ -33,27 +33,25 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00081.html">indexer_node< T0, T1, T2, T3, T4, T5 ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00036.html">concurrent_hash_map</a></li><li class="navelem"><a class="el" href="a00026.html">bucket_accessor</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5 > Member List</div>  </div>
+<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00081.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5 ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00026.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>indexer_node</b>(graph &g) (defined in <a class="el" href="a00081.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5 ></a>)</td><td class="entry"><a class="el" href="a00081.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>indexer_node</b>(const indexer_node &other) (defined in <a class="el" href="a00081.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5 ></a>)</td><td class="entry"><a class="el" href="a00081.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>InputTuple</b> typedef (defined in <a class="el" href="a00081.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5 ></a>)</td><td class="entry"><a class="el" href="a00081.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5 ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00081.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5 ></a>)</td><td class="entry"><a class="el" href="a00081.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5 ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00081.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5 ></a>)</td><td class="entry"><a class="el" href="a00081.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>unfolded_type</b> typedef (defined in <a class="el" href="a00081.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5 ></a>)</td><td class="entry"><a class="el" href="a00081.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5 ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00026.html#a0d7d8f3d101bb18056b8e5d4d2c8b079">acquire</a>(concurrent_hash_map *base, const hashcode_t h, bool writer=false)</td><td class="entry"><a class="el" href="a00026.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>bucket_accessor</b>(concurrent_hash_map *base, const hashcode_t h, bool writer=false) (defined in <a class="el" href="a00026.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a>)</td><td class="entry"><a class="el" href="a00026.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00026.html#aaa8167e2961330435fd23eb92127805c">is_writer</a>()</td><td class="entry"><a class="el" href="a00026.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00026.html#a16e714a5e77dbf8daf81973df30722d4">operator()</a>()</td><td class="entry"><a class="el" href="a00026.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00359.html b/doc/html/a00359.html
index 60918c4..1922c22 100644
--- a/doc/html/a00359.html
+++ b/doc/html/a00359.html
@@ -33,27 +33,25 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00082.html">indexer_node< T0, T1, T2, T3, T4, T5, T6 ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00036.html">concurrent_hash_map</a></li><li class="navelem"><a class="el" href="a00029.html">call_clear_on_leave</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6 > Member List</div>  </div>
+<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00082.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6 ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00029.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>indexer_node</b>(graph &g) (defined in <a class="el" href="a00082.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6 ></a>)</td><td class="entry"><a class="el" href="a00082.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>indexer_node</b>(const indexer_node &other) (defined in <a class="el" href="a00082.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6 ></a>)</td><td class="entry"><a class="el" href="a00082.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>InputTuple</b> typedef (defined in <a class="el" href="a00082.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6 ></a>)</td><td class="entry"><a class="el" href="a00082.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6 ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00082.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6 ></a>)</td><td class="entry"><a class="el" href="a00082.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6 ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00082.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6 ></a>)</td><td class="entry"><a class="el" href="a00082.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>unfolded_type</b> typedef (defined in <a class="el" href="a00082.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6 ></a>)</td><td class="entry"><a class="el" href="a00082.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6 ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>call_clear_on_leave</b>(concurrent_hash_map *a_ch_map) (defined in <a class="el" href="a00029.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave</a>)</td><td class="entry"><a class="el" href="a00029.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>dismiss</b>() (defined in <a class="el" href="a00029.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave</a>)</td><td class="entry"><a class="el" href="a00029.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_ch_map</b> (defined in <a class="el" href="a00029.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave</a>)</td><td class="entry"><a class="el" href="a00029.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>~call_clear_on_leave</b>() (defined in <a class="el" href="a00029.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave</a>)</td><td class="entry"><a class="el" href="a00029.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00360.html b/doc/html/a00360.html
index e24c1c1..f0bc3d6 100644
--- a/doc/html/a00360.html
+++ b/doc/html/a00360.html
@@ -33,27 +33,33 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00083.html">indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00036.html">concurrent_hash_map</a></li><li class="navelem"><a class="el" href="a00047.html">const_accessor</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 > Member List</div>  </div>
+<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00083.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>indexer_node</b>(graph &g) (defined in <a class="el" href="a00083.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 ></a>)</td><td class="entry"><a class="el" href="a00083.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>indexer_node</b>(const indexer_node &other) (defined in <a class="el" href="a00083.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 ></a>)</td><td class="entry"><a class="el" href="a00083.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>InputTuple</b> typedef (defined in <a class="el" href="a00083.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 ></a>)</td><td class="entry"><a class="el" href="a00083.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00083.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 ></a>)</td><td class="entry"><a class="el" href="a00083.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00083.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 ></a>)</td><td class="entry"><a class="el" href="a00083.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>unfolded_type</b> typedef (defined in <a class="el" href="a00083.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 ></a>)</td><td class="entry"><a class="el" href="a00083.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>accessor</b> (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_hash_map< Key, T, HashCompare, Allocator ></b> (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00047.html#a7b26d22d228cf0d8678c9b346c63752c">const_accessor</a>()</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00047.html#a6299b523d2ae8e2613f1bc160ca99b85">empty</a>() const </td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_writer</b>() (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_hash</b> (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_node</b> (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00047.html#a8adf04e33e7c8c876ba849f26807713a">operator*</a>() const </td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00047.html#a28fa9b9e6c35d7e80217e69a7afe1ee5">operator-></a>() const </td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00047.html#a18390cb369369d72bdf7c867755b5190">release</a>()</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00047.html#aa8ca5aef4ee14b7eddb64767b8cd5fda">value_type</a> typedef</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00047.html#afbc0c85a146c912b9a0f94a7695957c7">~const_accessor</a>()</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00361.html b/doc/html/a00361.html
index 17c1307..29be32a 100644
--- a/doc/html/a00361.html
+++ b/doc/html/a00361.html
@@ -33,27 +33,31 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00084.html">indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00036.html">concurrent_hash_map</a></li><li class="navelem"><a class="el" href="a00083.html">node</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 > Member List</div>  </div>
+<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00084.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00083.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>indexer_node</b>(graph &g) (defined in <a class="el" href="a00084.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 ></a>)</td><td class="entry"><a class="el" href="a00084.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>indexer_node</b>(const indexer_node &other) (defined in <a class="el" href="a00084.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 ></a>)</td><td class="entry"><a class="el" href="a00084.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>InputTuple</b> typedef (defined in <a class="el" href="a00084.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 ></a>)</td><td class="entry"><a class="el" href="a00084.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00084.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 ></a>)</td><td class="entry"><a class="el" href="a00084.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00084.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 ></a>)</td><td class="entry"><a class="el" href="a00084.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>unfolded_type</b> typedef (defined in <a class="el" href="a00084.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 ></a>)</td><td class="entry"><a class="el" href="a00084.html">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>item</b> (defined in <a class="el" href="a00083.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a>)</td><td class="entry"><a class="el" href="a00083.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>node</b>(const Key &key) (defined in <a class="el" href="a00083.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a>)</td><td class="entry"><a class="el" href="a00083.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>node</b>(const Key &key, const T &t) (defined in <a class="el" href="a00083.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a>)</td><td class="entry"><a class="el" href="a00083.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>node</b>(const Key &key, T &&t) (defined in <a class="el" href="a00083.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a>)</td><td class="entry"><a class="el" href="a00083.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>node</b>(value_type &&i) (defined in <a class="el" href="a00083.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a>)</td><td class="entry"><a class="el" href="a00083.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>node</b>(Args &&...args) (defined in <a class="el" href="a00083.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a>)</td><td class="entry"><a class="el" href="a00083.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>node</b>(value_type &i) (defined in <a class="el" href="a00083.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a>)</td><td class="entry"><a class="el" href="a00083.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>node</b>(const value_type &i) (defined in <a class="el" href="a00083.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a>)</td><td class="entry"><a class="el" href="a00083.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator delete</b>(void *ptr, node_allocator_type &a) (defined in <a class="el" href="a00083.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a>)</td><td class="entry"><a class="el" href="a00083.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator new</b>(size_t, node_allocator_type &a) (defined in <a class="el" href="a00083.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a>)</td><td class="entry"><a class="el" href="a00083.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00362.html b/doc/html/a00362.html
index 04c9cee..67fb2a5 100644
--- a/doc/html/a00362.html
+++ b/doc/html/a00362.html
@@ -33,42 +33,49 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00038.html">composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00038.html">concurrent_priority_queue</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> > Member List</div>  </div>
+<div class="title">tbb::interface5::concurrent_priority_queue< T, Compare, A > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>add_nodes</b>(const NodeTypes &...n) (defined in <a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="entry"><span cl [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>add_nodes</b>(Nodes &...) (defined in <a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="entry"><span class="mlabel">inline</spa [...]
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>add_visible_nodes</b>(const NodeTypes &...n) (defined in <a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="entry"> [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>add_visible_nodes</b>(Nodes &...) (defined in <a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="entry"><span class="mlabel">inl [...]
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>composite_node</b>(graph &g, const char *my_type_name=" ") (defined in <a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>extract</b>() (defined in <a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="entry"><span class="mlabel">inline</span><span class="m [...]
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>input_ports</b>() (defined in <a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>input_ports_type</b> typedef (defined in <a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_graph</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>next</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>output_ports</b>() (defined in <a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>output_ports_type</b> typedef (defined in <a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>prev</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags)) (defined in <a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="entry"> [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_external_ports</b>(input_ports_type &&input_ports_tuple, output_ports_type &&output_ports_tuple) (defined in <a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>set_external_ports</b>(const input_ports_type &input_ports_tuple, const output_ports_type &output_ports_tuple) (defined in <a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tup [...]
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="entry"><span class="mlabe [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~composite_node</b>() (defined in <a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00038.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="entry"><span class="mlabel">inline</span><span  [...]
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~graph_node</b>() (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a> typedef</td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#ac64c7b627708f0d6b2e5421fb0d49150">assign</a>(InputIterator begin, InputIterator end)</td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#ac1b3a945aac5a17c85d56756cc6aa3d1">assign</a>(std::initializer_list< T > il)</td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#a2459166998a4103880d603b237c429e6">clear</a>()</td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#a405be01bac4048f214797c287e2571a1">concurrent_priority_queue</a>(const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#a43c3917ea8a19cf1fec947e29ad4ff3e">concurrent_priority_queue</a>(size_type init_capacity, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#a0cebee26cc0d00d4dcbb1c74e08029f7">concurrent_priority_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#aaa8ac175143e12db29a014674a392b38">concurrent_priority_queue</a>(std::initializer_list< T > init_list, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#a332d26234f9c37a6b7ba269c648815d0">concurrent_priority_queue</a>(const concurrent_priority_queue &src)</td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#aa52cea369b6630699ee78cc42622be9d">concurrent_priority_queue</a>(const concurrent_priority_queue &src, const allocator_type &a)</td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#ae9ac965bbac3933c7db89f512adfcbcb">concurrent_priority_queue</a>(concurrent_priority_queue &&src)</td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#a14dd20a4673f77cff3eb6f269a888016">concurrent_priority_queue</a>(concurrent_priority_queue &&src, const allocator_type &a)</td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#a0bd617fe8e4657777e86f0ae15d8094f">const_reference</a> typedef</td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#ae010b1fa9c0942504737228474b51a0b">difference_type</a> typedef</td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#a278d208cd92e5aeccc9c7f6fc192e3ce">emplace</a>(Args &&...args)</td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#a8dec2dd0e8b22af14f1753eaef1bf5eb">empty</a>() const </td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#a312e88e51246da4c516d35abbb30721a">get_allocator</a>() const </td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#ac0c3f41b10f04547f3438517c40cf8a5">operator=</a>(const concurrent_priority_queue &src)</td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#a9b21bd56aff8c412c5fcdd0d88b48c98">operator=</a>(concurrent_priority_queue &&src)</td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#a7eaa05dcb74604e45e0e2c55e1e456e9">operator=</a>(std::initializer_list< T > il)</td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#a1bfa0e7269b3407d6bb5c706264d2406">push</a>(const_reference elem)</td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#a72ff26945c61b4ce3ce7ca0f9b9aaa48">push</a>(value_type &&elem)</td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#ae4b7ed2ddc8ec6cc910f935c9d299c7a">reference</a> typedef</td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#a7d86ba200474b51ec99a6b917429c6bb">size</a>() const </td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#a7d3da9b47ec58e1c09e3550f702edcfc">size_type</a> typedef</td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#aa6ee6d356e538b67a7cb4e242e6e36c9">swap</a>(concurrent_priority_queue &q)</td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00038.html#a954177b09e184cf3db47f1b180a7ef5e">try_pop</a>(reference elem)</td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00038.html#a2c75d97ae429019363ab6fd1a872512e">value_type</a> typedef</td><td class="entry"><a class="el" href="a00038.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00363.html b/doc/html/a00363.html
index 6675ad4..fc57357 100644
--- a/doc/html/a00363.html
+++ b/doc/html/a00363.html
@@ -33,40 +33,30 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00039.html">composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00041.html">concurrent_unordered_map_traits</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> > Member List</div>  </div>
+<div class="title">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00041.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>add_nodes</b>(const NodeTypes &...n) (defined in <a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a>)</td><td class="entry"><a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>add_nodes</b>(Nodes &...) (defined in <a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a>)</td><td class="entry"><a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>add_visible_nodes</b>(const NodeTypes &...n) (defined in <a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a>)</td><td class="entry"><a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a></td><td class="entry"><span class="mlabel">inline</s [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>add_visible_nodes</b>(Nodes &...) (defined in <a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a>)</td><td class="entry"><a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>composite_node</b>(graph &g, const char *my_type_name=" ") (defined in <a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a>)</td><td class="entry"><a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a></td><td class="entry"><span  [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>extract</b>() (defined in <a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a>)</td><td class="entry"><a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>input_ports</b>() (defined in <a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a>)</td><td class="entry"><a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>input_ports_type</b> typedef (defined in <a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a>)</td><td class="entry"><a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_graph</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>next</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>prev</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags)) (defined in <a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a>)</td><td class="entry"><a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a></td><td class="entry"><span class="mlabel">inline</s [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_external_ports</b>(input_ports_type &&input_ports_tuple) (defined in <a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a>)</td><td class="entry"><a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a></td><td class="entry"><span clas [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>set_external_ports</b>(const input_ports_type &input_ports_tuple) (defined in <a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a>)</td><td class="entry"><a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a></td><td class="entry"><span class="mlabel">i [...]
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a>)</td><td class="entry"><a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a></td><td class="entry"><span class="mlabel">inline</span><span class="m [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~composite_node</b>() (defined in <a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a>)</td><td class="entry"><a class="el" href="a00039.html">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span>< [...]
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~graph_node</b>() (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocator_type</b> typedef (defined in <a class="el" href="a00041.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00041.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>allow_multimapping</b> enum value (defined in <a class="el" href="a00041.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00041.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_map_traits</b>() (defined in <a class="el" href="a00041.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00041.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">inline</span><span class [...]
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_map_traits</b>(const hash_compare &hc) (defined in <a class="el" href="a00041.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00041.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">inline</spa [...]
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_key</b>(const std::pair< Type1, Type2 > &value) (defined in <a class="el" href="a00041.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00041.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel"> [...]
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>hash_compare</b> typedef (defined in <a class="el" href="a00041.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00041.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>key_type</b> typedef (defined in <a class="el" href="a00041.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00041.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_hash_compare</b> (defined in <a class="el" href="a00041.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00041.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00041.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00041.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00364.html b/doc/html/a00364.html
index d13f061..7eac718 100644
--- a/doc/html/a00364.html
+++ b/doc/html/a00364.html
@@ -33,40 +33,51 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00040.html">composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00040.html">concurrent_unordered_map</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> > Member List</div>  </div>
+<div class="title">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>add_nodes</b>(const NodeTypes &...n) (defined in <a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="entry"><span class="mlabel">inline</span></ [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>add_nodes</b>(Nodes &...) (defined in <a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>add_visible_nodes</b>(const NodeTypes &...n) (defined in <a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="entry"><span class="mlabel">inline< [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>add_visible_nodes</b>(Nodes &...) (defined in <a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>composite_node</b>(graph &g, const char *my_type_name=" ") (defined in <a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="entry"><spa [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>extract</b>() (defined in <a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_graph</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>next</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>output_ports</b>() (defined in <a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>output_ports_type</b> typedef (defined in <a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>prev</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags)) (defined in <a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="entry"><span class="mlabel">inline< [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_external_ports</b>(output_ports_type &&output_ports_tuple) (defined in <a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="entry"><span  [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>set_external_ports</b>(const output_ports_type &output_ports_tuple) (defined in <a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="entry"><span class="mlabe [...]
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="entry"><span class="mlabel">inline</span><span class= [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~composite_node</b>() (defined in <a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span [...]
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~graph_node</b>() (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocator_type</b> typedef (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>at</b>(const key_type &key) (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>at</b>(const key_type &key) const  (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_map</b>(size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type()) (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unorder [...]
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_map</b>(const Allocator &a) (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</spa [...]
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_map</b>(Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type()) (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb: [...]
+  <tr class="even"><td class="entry"><a class="el" href="a00040.html#a788a7225915574c1a349abc0f1f653c7">concurrent_unordered_map</a>(std::initializer_list< value_type > il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equal [...]
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_map</b>(const concurrent_unordered_map &table) (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_map</b>(concurrent_unordered_map &&table) (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_map</b>(concurrent_unordered_map &&table, const Allocator &a) (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_map</b>(const concurrent_unordered_map &table, const Allocator &a) (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inli [...]
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_iterator</b> typedef (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_local_iterator</b> typedef (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>hasher</b> typedef (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>key_compare</b> typedef (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>key_equal</b> typedef (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>key_type</b> typedef (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>local_iterator</b> typedef (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mapped_type</b> typedef (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const concurrent_unordered_map &table) (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(concurrent_unordered_map &&table) (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator[]</b>(const key_type &key) (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00040.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00365.html b/doc/html/a00365.html
index 1698ccd..5f6c95c 100644
--- a/doc/html/a00365.html
+++ b/doc/html/a00365.html
@@ -33,49 +33,48 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00017.html">async_node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00042.html">concurrent_unordered_multimap</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::async_node< Input, Output, Allocator > Member List</div>  </div>
+<div class="title">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>async_commit</b>() (defined in <a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a>)</td><td class="entry"><a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>async_gateway</b>() (defined in <a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a>)</td><td class="entry"><a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>async_gateway_type</b> typedef (defined in <a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a>)</td><td class="entry"><a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>async_input_type</b> typedef (defined in <a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a>)</td><td class="entry"><a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00017.html#aea2575eeaf4b1cc483d4d9854b47e823">async_node</a>(graph &g, Body body)</td><td class="entry"><a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00017.html#a941e58ff009aa492f1f011947f7b04ac">async_node</a>(const async_node &src)</td><td class="entry"><a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>async_output_type</b> typedef (defined in <a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a>)</td><td class="entry"><a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>async_reserve</b>() (defined in <a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a>)</td><td class="entry"><a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00017.html#a565f12fc3ce62a14156398c94f401d9c">async_try_put</a>(const output_type &i)</td><td class="entry"><a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>extract</b>() (defined in <a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a>)</td><td class="entry"><a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>input_type</b> typedef (defined in <a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a>)</td><td class="entry"><a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::broadcast_cache</b> (defined in <a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a>)</td><td class="entry"><a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::round_robin_cache</b> (defined in <a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a>)</td><td class="entry"><a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_class</b> typedef (defined in <a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a>)</td><td class="entry"><a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_graph</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>next</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a>)</td><td class="entry"><a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>predecessor_type</b> typedef (defined in <a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a>)</td><td class="entry"><a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>prev</b> (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f)) (defined in <a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a>)</td><td class="entry"><a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset_node</b>(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol))=0 (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>run_and_put_task</b> (defined in <a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a>)</td><td class="entry"><a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>set_name</b>(const char *name) (defined in <a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a>)</td><td class="entry"><a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>successor_type</b> typedef (defined in <a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a>)</td><td class="entry"><a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>successors</b>() (defined in <a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a>)</td><td class="entry"><a class="el" href="a00017.html">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~async_gateway</b>() (defined in <a class="el" href="a00016.html">tbb::flow::interface7::internal::async_gateway< Output ></a>)</td><td class="entry"><a class="el" href="a00016.html">tbb::flow::interface7::internal::async_gateway< Output ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~graph_node</b>() (defined in <a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a>)</td><td class="entry"><a class="el" href="a00072.html">tbb::flow::interface7::graph_node</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocator_type</b> typedef (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_multimap</b>(size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type()) (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurre [...]
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_multimap</b>(const Allocator &a) (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel [...]
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_multimap</b>(Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type()) (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042. [...]
+  <tr class="even"><td class="entry"><a class="el" href="a00042.html#a5957d29e5fa9f8c53538de3f7a41ebc9">concurrent_unordered_multimap</a>(std::initializer_list< value_type > il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, [...]
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_multimap</b>(const concurrent_unordered_multimap &table) (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_multimap</b>(concurrent_unordered_multimap &&table) (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</s [...]
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_multimap</b>(concurrent_unordered_multimap &&table, const Allocator &a) (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel [...]
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_multimap</b>(const concurrent_unordered_multimap &table, const Allocator &a) (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span [...]
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_iterator</b> typedef (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_local_iterator</b> typedef (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>hasher</b> typedef (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>key_compare</b> typedef (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>key_equal</b> typedef (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>key_type</b> typedef (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>local_iterator</b> typedef (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mapped_type</b> typedef (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const concurrent_unordered_multimap &table) (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(concurrent_unordered_multimap &&table) (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00042.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00366.html b/doc/html/a00366.html
index 2c33559..4d75ca1 100644
--- a/doc/html/a00366.html
+++ b/doc/html/a00366.html
@@ -33,29 +33,30 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00059.html">edge_container</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00045.html">concurrent_unordered_set_traits</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::internal::edge_container< C > Member List</div>  </div>
+<div class="title">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00059.html">tbb::flow::interface7::internal::edge_container< C ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00045.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>add_edge</b>(C &s) (defined in <a class="el" href="a00059.html">tbb::flow::interface7::internal::edge_container< C ></a>)</td><td class="entry"><a class="el" href="a00059.html">tbb::flow::interface7::internal::edge_container< C ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>clear</b>() (defined in <a class="el" href="a00059.html">tbb::flow::interface7::internal::edge_container< C ></a>)</td><td class="entry"><a class="el" href="a00059.html">tbb::flow::interface7::internal::edge_container< C ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copy_edges</b>(edge_list_type &v) (defined in <a class="el" href="a00059.html">tbb::flow::interface7::internal::edge_container< C ></a>)</td><td class="entry"><a class="el" href="a00059.html">tbb::flow::interface7::internal::edge_container< C ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>delete_edge</b>(C &s) (defined in <a class="el" href="a00059.html">tbb::flow::interface7::internal::edge_container< C ></a>)</td><td class="entry"><a class="el" href="a00059.html">tbb::flow::interface7::internal::edge_container< C ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>edge_count</b>() (defined in <a class="el" href="a00059.html">tbb::flow::interface7::internal::edge_container< C ></a>)</td><td class="entry"><a class="el" href="a00059.html">tbb::flow::interface7::internal::edge_container< C ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>edge_list_type</b> typedef (defined in <a class="el" href="a00059.html">tbb::flow::interface7::internal::edge_container< C ></a>)</td><td class="entry"><a class="el" href="a00059.html">tbb::flow::interface7::internal::edge_container< C ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>receiver_extract</b>(R &r) (defined in <a class="el" href="a00059.html">tbb::flow::interface7::internal::edge_container< C ></a>)</td><td class="entry"><a class="el" href="a00059.html">tbb::flow::interface7::internal::edge_container< C ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>sender_extract</b>(S &s) (defined in <a class="el" href="a00059.html">tbb::flow::interface7::internal::edge_container< C ></a>)</td><td class="entry"><a class="el" href="a00059.html">tbb::flow::interface7::internal::edge_container< C ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocator_type</b> typedef (defined in <a class="el" href="a00045.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>allow_multimapping</b> enum value (defined in <a class="el" href="a00045.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_set_traits</b>() (defined in <a class="el" href="a00045.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlab [...]
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_set_traits</b>(const hash_compare &hc) (defined in <a class="el" href="a00045.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">inline</span><spa [...]
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_key</b>(const value_type &value) (defined in <a class="el" href="a00045.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">inline</span><span class="m [...]
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>hash_compare</b> typedef (defined in <a class="el" href="a00045.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>key_type</b> typedef (defined in <a class="el" href="a00045.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_hash_compare</b> (defined in <a class="el" href="a00045.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00045.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00367.html b/doc/html/a00367.html
index f8ba2fc..95973a4 100644
--- a/doc/html/a00367.html
+++ b/doc/html/a00367.html
@@ -33,26 +33,48 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>flow</b></li><li class="navelem"><b>interface7</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00016.html">async_gateway</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00044.html">concurrent_unordered_set</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::flow::interface7::internal::async_gateway< Output > Member List</div>  </div>
+<div class="title">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00016.html">tbb::flow::interface7::internal::async_gateway< Output ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>async_commit</b>()=0 (defined in <a class="el" href="a00016.html">tbb::flow::interface7::internal::async_gateway< Output ></a>)</td><td class="entry"><a class="el" href="a00016.html">tbb::flow::interface7::internal::async_gateway< Output ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>async_reserve</b>()=0 (defined in <a class="el" href="a00016.html">tbb::flow::interface7::internal::async_gateway< Output ></a>)</td><td class="entry"><a class="el" href="a00016.html">tbb::flow::interface7::internal::async_gateway< Output ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00016.html#a308f7feb8ac2fc3b7cbcf4e5246e78a2">async_try_put</a>(const output_type &i)=0</td><td class="entry"><a class="el" href="a00016.html">tbb::flow::interface7::internal::async_gateway< Output ></a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>output_type</b> typedef (defined in <a class="el" href="a00016.html">tbb::flow::interface7::internal::async_gateway< Output ></a>)</td><td class="entry"><a class="el" href="a00016.html">tbb::flow::interface7::internal::async_gateway< Output ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~async_gateway</b>() (defined in <a class="el" href="a00016.html">tbb::flow::interface7::internal::async_gateway< Output ></a>)</td><td class="entry"><a class="el" href="a00016.html">tbb::flow::interface7::internal::async_gateway< Output ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocator_type</b> typedef (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_set</b>(size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type()) (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set&l [...]
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_set</b>(const Allocator &a) (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_set</b>(Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type()) (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interfa [...]
+  <tr class="even"><td class="entry"><a class="el" href="a00044.html#a6f6d5ecff239ff13000848e925904fe7">concurrent_unordered_set</a>(std::initializer_list< value_type > il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, All [...]
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_set</b>(const concurrent_unordered_set &table) (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_set</b>(concurrent_unordered_set &&table) (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_set</b>(concurrent_unordered_set &&table, const Allocator &a) (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_set</b>(const concurrent_unordered_set &table, const Allocator &a) (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</sp [...]
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_iterator</b> typedef (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_local_iterator</b> typedef (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>hasher</b> typedef (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>key_compare</b> typedef (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>key_equal</b> typedef (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>key_type</b> typedef (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>local_iterator</b> typedef (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mapped_type</b> typedef (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const concurrent_unordered_set &table) (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(concurrent_unordered_set &&table) (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00368.html b/doc/html/a00368.html
index d73d99f..a863c2e 100644
--- a/doc/html/a00368.html
+++ b/doc/html/a00368.html
@@ -33,108 +33,48 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00043.html">concurrent_hash_map</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00043.html">concurrent_unordered_multiset</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A > Member List</div>  </div>
+<div class="title">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>accessor_location</b> (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>accessor_location</b> (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocate_node_copy_construct</b>(node_allocator_type &allocator, const Key &key, const T *t) (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>allocate_node_default_construct</b>(node_allocator_type &allocator, const Key &key, const T *) (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><spa [...]
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocate_node_emplace_construct</b>(node_allocator_type &allocator, Args &&...args) (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</spa [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>allocate_node_move_construct</b>(node_allocator_type &allocator, const Key &key, const T *t) (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span  [...]
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocator_type</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>begin</b>() (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>begin</b>() const  (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00043.html#aa067a2a4db1d96f38555369a89deee64">bucket_count</a>() const </td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00043.html#ab8295bc260b5e4df883fef11574b84c6">clear</a>()</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00043.html#aa3a9767b525144a2afb69ed125714c53">concurrent_hash_map</a>(const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00043.html#aae76e1252b56b107685f8746e0f6a1f4">concurrent_hash_map</a>(size_type n, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00043.html#a8a73b86f9a5e9836b38713e56c546654">concurrent_hash_map</a>(const concurrent_hash_map &table, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00043.html#a2bd04845683b15a590913a72a19fa3dc">concurrent_hash_map</a>(concurrent_hash_map &&table)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00043.html#ad642e497153df5669e6454acef095675">concurrent_hash_map</a>(concurrent_hash_map &&table, const allocator_type &a)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00043.html#ad56fc19d656099d49051f3c363cefc89">concurrent_hash_map</a>(I first, I last, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00043.html#a57149f90060b033b1f2493f2a88ef291">concurrent_hash_map</a>(std::initializer_list< value_type > il, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_accessor</b> (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_iterator</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_range_type</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00043.html#ac375d3884bf9c80efe56117757c822e7">count</a>(const Key &key) const </td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>delete_node</b>(node_base *n) (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>do_not_allocate_node</b>(node_allocator_type &, const Key &, const T *) (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="m [...]
-  <tr><td class="entry"><a class="el" href="a00043.html#a382178ea2f00f69096c91bcf76ae7913">emplace</a>(const_accessor &result, Args &&...args)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00043.html#a17e51c8864282c35aa4d23f22909cc4a">emplace</a>(accessor &result, Args &&...args)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00043.html#acbe1d0f3a87786a83a7021af2ef52ee0">emplace</a>(Args &&...args)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00043.html#a5e05f2a1ca3accfb4252d7ee82d1e990">empty</a>() const </td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>end</b>() (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>end</b>() const  (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>equal_range</b>(const Key &key) (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>equal_range</b>(const Key &key) const  (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00043.html#a5144122dbb946d933b94a92117543b33">erase</a>(const Key &key)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00043.html#a2ec6f95ed9beda9d32df56cdd45c1842">erase</a>(const_accessor &item_accessor)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00043.html#a3ed0fbcc6cfd4db8242e100355ac1fa5">erase</a>(accessor &item_accessor)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00043.html#a6fec452b31b8f0e185dc2de64b7128b2">exclude</a>(const_accessor &item_accessor)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00043.html#a27a3f296dc170ae25f8e3fd9efa93cff">find</a>(const_accessor &result, const Key &key) const </td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00043.html#a6b61799e2018381b5ee4b78752a41483">find</a>(accessor &result, const Key &key)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>generic_emplace</b>(Accessor &&result, Args &&...args) (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>generic_move_insert</b>(Accessor &&result, value_type &&value) (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00043.html#a121865c574f8ae5cae69ed3d6b7e0511">get_allocator</a>() const </td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00043.html#aaebb10a9e9dcb24e63860caa745a281d">insert</a>(const_accessor &result, const Key &key)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00043.html#a766c6033c203e8f342501d85a7cf3405">insert</a>(accessor &result, const Key &key)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00043.html#ae0b420cdb752e749790c8a7daa15c3c2">insert</a>(const_accessor &result, const value_type &value)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00043.html#a2047214e041b7674c3b83e204d0d6c6a">insert</a>(accessor &result, const value_type &value)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00043.html#a8e39501f9edb3210504c9c4ca05384b7">insert</a>(const value_type &value)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00043.html#a446910c1ca4818bdb00f4ffa91b9108a">insert</a>(const_accessor &result, value_type &&value)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00043.html#a50c929e78ecfa36986c8821287665a70">insert</a>(accessor &result, value_type &&value)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00043.html#a5d3da283d2e74c7ff0ecb0dfd4d371fd">insert</a>(value_type &&value)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00043.html#ab84dfd77316252cbf39c7ae89e365a00">insert</a>(I first, I last)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00043.html#a580fdba266e87106ad41470479f641d6">insert</a>(std::initializer_list< value_type > il)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::hash_map_iterator</b> (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::hash_map_range</b> (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00043.html#a0bc3593f82b3b4f9839fc051780212ab">internal_copy</a>(const concurrent_hash_map &source)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_copy</b>(I first, I last) (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00043.html#a8603f5288db63ec35a16844427e97e42">internal_equal_range</a>(const Key &key, I end) const </td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00043.html#acbb5b18c097fb32f264b7b5fe8d9fdd4">internal_fast_find</a>(const Key &key) const </td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_write_access_needed</b> (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_write_access_needed</b> (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_write_access_needed</b> (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>key_type</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00043.html#a2a319cf46fb9cf9a88aab6c0a20c98b3">lookup</a>(bool op_insert, const Key &key, const T *t, const_accessor *result, bool write, node *(*allocate_node)(node_allocator_type &, const Key &, const T *), node *tmp_n=0)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mapped_type</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00043.html#aea0a0e5220a0dcb67da57d0280d36005">max_size</a>() const </td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_allocator</b> (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_hash_compare</b> (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>node_allocator_type</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00043.html#a63e01b1f79c287ae0257ccfd483fd90a">operator=</a>(const concurrent_hash_map &table)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00043.html#a92b506ceed93d1c25979948961054380">operator=</a>(concurrent_hash_map &&table)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00043.html#aac73665b1a55e3de7332f36598488252">operator=</a>(std::initializer_list< value_type > il)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>range</b>(size_type grainsize=1) (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>range</b>(size_type grainsize=1) const  (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>range_type</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00043.html#adf1fa9470c605731063e5949f0418eb7">rehash</a>(size_type n=0)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>rehash_bucket</b>(bucket *b_new, const hashcode_t h) (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>search_bucket</b>(const key_type &key, bucket *b) const  (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00043.html#ad2ce6da7cd62bc7425f0a29498332ab4">size</a>() const </td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00043.html#a4c8edf603bc776a6c84c007702c1808e">swap</a>(concurrent_hash_map &table)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00043.html#a9ce9ab8c954bf6979c2c57d10fd8a8ed">~concurrent_hash_map</a>()</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocator_type</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_multiset</b>(size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type()) (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_ [...]
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_multiset</b>(const Allocator &a) (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">expl [...]
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_multiset</b>(Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type()) (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.htm [...]
+  <tr class="even"><td class="entry"><a class="el" href="a00043.html#a15631f048043195863c66bad6533bccb">concurrent_unordered_multiset</a>(std::initializer_list< value_type > il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equ [...]
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_multiset</b>(const concurrent_unordered_multiset &table) (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_multiset</b>(concurrent_unordered_multiset &&table) (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></ [...]
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_multiset</b>(concurrent_unordered_multiset &&table, const Allocator &a) (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inli [...]
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_multiset</b>(const concurrent_unordered_multiset &table, const Allocator &a) (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class [...]
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_iterator</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_local_iterator</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>hasher</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>key_compare</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>key_equal</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>key_type</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>local_iterator</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mapped_type</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const concurrent_unordered_multiset &table) (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(concurrent_unordered_multiset &&table) (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00043.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00369.html b/doc/html/a00369.html
index 0dbf666..6dcd112 100644
--- a/doc/html/a00369.html
+++ b/doc/html/a00369.html
@@ -33,31 +33,35 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00043.html">concurrent_hash_map</a></li><li class="navelem"><a class="el" href="a00010.html">accessor</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00108.html">reader_writer_lock</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor Member List</div>  </div>
+<div class="title">tbb::interface5::reader_writer_lock Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00010.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00108.html">tbb::interface5::reader_writer_lock</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00054.html#a7b26d22d228cf0d8678c9b346c63752c">const_accessor</a>()</td><td class="entry"><a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00054.html#a6299b523d2ae8e2613f1bc160ca99b85">empty</a>() const </td><td class="entry"><a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_writer</b>() (defined in <a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>)</td><td class="entry"><a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_hash</b> (defined in <a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>)</td><td class="entry"><a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_node</b> (defined in <a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>)</td><td class="entry"><a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00010.html#a4e03905a33fbdafdb99113cc68d2bd4b">operator*</a>() const </td><td class="entry"><a class="el" href="a00010.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00010.html#ab04f73bd4a4ca7df0dc91a7b4d66f987">operator-></a>() const </td><td class="entry"><a class="el" href="a00010.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00054.html#a18390cb369369d72bdf7c867755b5190">release</a>()</td><td class="entry"><a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00010.html#a850178bbdcdbc4cf5955cab37eb8c42c">value_type</a> typedef</td><td class="entry"><a class="el" href="a00010.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00054.html#afbc0c85a146c912b9a0f94a7695957c7">~const_accessor</a>()</td><td class="entry"><a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>active</b> enum value (defined in <a class="el" href="a00108.html">tbb::interface5::reader_writer_lock</a>)</td><td class="entry"><a class="el" href="a00108.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>invalid</b> enum value (defined in <a class="el" href="a00108.html">tbb::interface5::reader_writer_lock</a>)</td><td class="entry"><a class="el" href="a00108.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00108.html#af92eb949fc491af8f7e350869ea0a0d1">lock</a>()</td><td class="entry"><a class="el" href="a00108.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00108.html#a6fd4fcdf0e5c0425d1cc736d644f234f">lock_read</a>()</td><td class="entry"><a class="el" href="a00108.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00108.html#abceda6c50b0c36eacbef51f4682742f3">reader_writer_lock</a>()</td><td class="entry"><a class="el" href="a00108.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>scoped_lock</b> (defined in <a class="el" href="a00108.html">tbb::interface5::reader_writer_lock</a>)</td><td class="entry"><a class="el" href="a00108.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scoped_lock_read</b> (defined in <a class="el" href="a00108.html">tbb::interface5::reader_writer_lock</a>)</td><td class="entry"><a class="el" href="a00108.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00108.html#a29bbf9ca21c12b313d9fa5326feaf3ed">status_t</a> enum name</td><td class="entry"><a class="el" href="a00108.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00108.html#a1739e842af52925a2d4a7e821b9b3b8d">try_lock</a>()</td><td class="entry"><a class="el" href="a00108.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00108.html#a9c7aa04e00202c9a1197cb6d870cabb4">try_lock_read</a>()</td><td class="entry"><a class="el" href="a00108.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00108.html#a4c55c4dbde63e950fdc843c9b01a174f">unlock</a>()</td><td class="entry"><a class="el" href="a00108.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>waiting</b> enum value (defined in <a class="el" href="a00108.html">tbb::interface5::reader_writer_lock</a>)</td><td class="entry"><a class="el" href="a00108.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>waiting_nonblocking</b> enum value (defined in <a class="el" href="a00108.html">tbb::interface5::reader_writer_lock</a>)</td><td class="entry"><a class="el" href="a00108.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00108.html#aeee96b648c7b5ff6126c8a2e13ec7241">~reader_writer_lock</a>()</td><td class="entry"><a class="el" href="a00108.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00370.html b/doc/html/a00370.html
index 77dbb96..4d5f404 100644
--- a/doc/html/a00370.html
+++ b/doc/html/a00370.html
@@ -33,22 +33,26 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00043.html">concurrent_hash_map</a></li><li class="navelem"><a class="el" href="a00011.html">accessor_not_used</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00108.html">reader_writer_lock</a></li><li class="navelem"><a class="el" href="a00132.html">scoped_lock</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor_not_used Member List</div>  </div>
+<div class="title">tbb::interface5::reader_writer_lock::scoped_lock Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00011.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor_not_used</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00132.html">tbb::interface5::reader_writer_lock::scoped_lock</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>release</b>() (defined in <a class="el" href="a00011.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor_not_used</a>)</td><td class="entry"><a class="el" href="a00011.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor_not_used</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator delete</b>(void *p) (defined in <a class="el" href="a00132.html">tbb::interface5::reader_writer_lock::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00132.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator new</b>(size_t s) (defined in <a class="el" href="a00132.html">tbb::interface5::reader_writer_lock::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00132.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reader_writer_lock</b> (defined in <a class="el" href="a00132.html">tbb::interface5::reader_writer_lock::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00132.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00132.html#aaed982d8c3f1e84298f9842063694f3c">scoped_lock</a>(reader_writer_lock &lock)</td><td class="entry"><a class="el" href="a00132.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00132.html#a41e77cf094ed30b0a9a39ee217c3653b">~scoped_lock</a>()</td><td class="entry"><a class="el" href="a00132.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00371.html b/doc/html/a00371.html
index e1f0f88..e8db139 100644
--- a/doc/html/a00371.html
+++ b/doc/html/a00371.html
@@ -33,25 +33,26 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00043.html">concurrent_hash_map</a></li><li class="navelem"><a class="el" href="a00029.html">bucket_accessor</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00108.html">reader_writer_lock</a></li><li class="navelem"><a class="el" href="a00138.html">scoped_lock_read</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor Member List</div>  </div>
+<div class="title">tbb::interface5::reader_writer_lock::scoped_lock_read Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00029.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00138.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00029.html#a0d7d8f3d101bb18056b8e5d4d2c8b079">acquire</a>(concurrent_hash_map *base, const hashcode_t h, bool writer=false)</td><td class="entry"><a class="el" href="a00029.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>bucket_accessor</b>(concurrent_hash_map *base, const hashcode_t h, bool writer=false) (defined in <a class="el" href="a00029.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a>)</td><td class="entry"><a class="el" href="a00029.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00029.html#aaa8167e2961330435fd23eb92127805c">is_writer</a>()</td><td class="entry"><a class="el" href="a00029.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00029.html#a16e714a5e77dbf8daf81973df30722d4">operator()</a>()</td><td class="entry"><a class="el" href="a00029.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator delete</b>(void *p) (defined in <a class="el" href="a00138.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>)</td><td class="entry"><a class="el" href="a00138.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator new</b>(size_t s) (defined in <a class="el" href="a00138.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>)</td><td class="entry"><a class="el" href="a00138.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reader_writer_lock</b> (defined in <a class="el" href="a00138.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>)</td><td class="entry"><a class="el" href="a00138.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00138.html#a9d3120a23016dabd4cc2683fa561ee5a">scoped_lock_read</a>(reader_writer_lock &lock)</td><td class="entry"><a class="el" href="a00138.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00138.html#acf0e23fb4d3aeb6bde18d5d1236bd9d5">~scoped_lock_read</a>()</td><td class="entry"><a class="el" href="a00138.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00372.html b/doc/html/a00372.html
index 786a548..313cf1d 100644
--- a/doc/html/a00372.html
+++ b/doc/html/a00372.html
@@ -33,25 +33,23 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00043.html">concurrent_hash_map</a></li><li class="navelem"><a class="el" href="a00034.html">call_clear_on_leave</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00166.html">use_element_copy_constructor</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave Member List</div>  </div>
+<div class="title">tbb::interface5::internal::use_element_copy_constructor< T, C > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00034.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00166.html">tbb::interface5::internal::use_element_copy_constructor< T, C ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>call_clear_on_leave</b>(concurrent_hash_map *a_ch_map) (defined in <a class="el" href="a00034.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave</a>)</td><td class="entry"><a class="el" href="a00034.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>dismiss</b>() (defined in <a class="el" href="a00034.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave</a>)</td><td class="entry"><a class="el" href="a00034.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_ch_map</b> (defined in <a class="el" href="a00034.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave</a>)</td><td class="entry"><a class="el" href="a00034.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~call_clear_on_leave</b>() (defined in <a class="el" href="a00034.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave</a>)</td><td class="entry"><a class="el" href="a00034.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>type</b> typedef (defined in <a class="el" href="a00166.html">tbb::interface5::internal::use_element_copy_constructor< T, C ></a>)</td><td class="entry"><a class="el" href="a00166.html">tbb::interface5::internal::use_element_copy_constructor< T, C ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>type</b> typedef (defined in <a class="el" href="a00166.html">tbb::interface5::internal::use_element_copy_constructor< T, C ></a>)</td><td class="entry"><a class="el" href="a00166.html">tbb::interface5::internal::use_element_copy_constructor< T, C ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00373.html b/doc/html/a00373.html
index 3250b5f..e7085a3 100644
--- a/doc/html/a00373.html
+++ b/doc/html/a00373.html
@@ -33,33 +33,22 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00043.html">concurrent_hash_map</a></li><li class="navelem"><a class="el" href="a00054.html">const_accessor</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00167.html">use_element_copy_constructor< T, false ></a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor Member List</div>  </div>
+<div class="title">tbb::interface5::internal::use_element_copy_constructor< T, false > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00167.html">tbb::interface5::internal::use_element_copy_constructor< T, false ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>accessor</b> (defined in <a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>)</td><td class="entry"><a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_hash_map< Key, T, HashCompare, Allocator ></b> (defined in <a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>)</td><td class="entry"><a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00054.html#a7b26d22d228cf0d8678c9b346c63752c">const_accessor</a>()</td><td class="entry"><a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00054.html#a6299b523d2ae8e2613f1bc160ca99b85">empty</a>() const </td><td class="entry"><a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_writer</b>() (defined in <a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>)</td><td class="entry"><a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_hash</b> (defined in <a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>)</td><td class="entry"><a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_node</b> (defined in <a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>)</td><td class="entry"><a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00054.html#a8adf04e33e7c8c876ba849f26807713a">operator*</a>() const </td><td class="entry"><a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00054.html#a28fa9b9e6c35d7e80217e69a7afe1ee5">operator-></a>() const </td><td class="entry"><a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00054.html#a18390cb369369d72bdf7c867755b5190">release</a>()</td><td class="entry"><a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00054.html#aa8ca5aef4ee14b7eddb64767b8cd5fda">value_type</a> typedef</td><td class="entry"><a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00054.html#afbc0c85a146c912b9a0f94a7695957c7">~const_accessor</a>()</td><td class="entry"><a class="el" href="a00054.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>type</b> typedef (defined in <a class="el" href="a00167.html">tbb::interface5::internal::use_element_copy_constructor< T, false ></a>)</td><td class="entry"><a class="el" href="a00167.html">tbb::interface5::internal::use_element_copy_constructor< T, false ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00374.html b/doc/html/a00374.html
index 1baf9d8..8167a9b 100644
--- a/doc/html/a00374.html
+++ b/doc/html/a00374.html
@@ -33,31 +33,30 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00043.html">concurrent_hash_map</a></li><li class="navelem"><a class="el" href="a00100.html">node</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00013.html">aggregator_operation</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node Member List</div>  </div>
+<div class="title">tbb::interface6::aggregator_operation Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00100.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>item</b> (defined in <a class="el" href="a00100.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a>)</td><td class="entry"><a class="el" href="a00100.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>node</b>(const Key &key) (defined in <a class="el" href="a00100.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a>)</td><td class="entry"><a class="el" href="a00100.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>node</b>(const Key &key, const T &t) (defined in <a class="el" href="a00100.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a>)</td><td class="entry"><a class="el" href="a00100.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>node</b>(const Key &key, T &&t) (defined in <a class="el" href="a00100.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a>)</td><td class="entry"><a class="el" href="a00100.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>node</b>(value_type &&i) (defined in <a class="el" href="a00100.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a>)</td><td class="entry"><a class="el" href="a00100.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>node</b>(Args &&...args) (defined in <a class="el" href="a00100.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a>)</td><td class="entry"><a class="el" href="a00100.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>node</b>(value_type &i) (defined in <a class="el" href="a00100.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a>)</td><td class="entry"><a class="el" href="a00100.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>node</b>(const value_type &i) (defined in <a class="el" href="a00100.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a>)</td><td class="entry"><a class="el" href="a00100.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator delete</b>(void *ptr, node_allocator_type &a) (defined in <a class="el" href="a00100.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a>)</td><td class="entry"><a class="el" href="a00100.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator new</b>(size_t, node_allocator_type &a) (defined in <a class="el" href="a00100.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a>)</td><td class="entry"><a class="el" href="a00100.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>agg_finished</b> enum value (defined in <a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>agg_waiting</b> enum value (defined in <a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>aggregator_ext</b> (defined in <a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>aggregator_operation</b>() (defined in <a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>aggregator_operation_status</b> enum name (defined in <a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00013.html#ac7edadfe74f475783f3b429904e7010a">finish</a>()</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>next</b>() (defined in <a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>set_next</b>(aggregator_operation *n) (defined in <a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00013.html#adc0e032aa604f1da85ffc7ec269b157f">start</a>()</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00375.html b/doc/html/a00375.html
index fe8df7b..e238ee1 100644
--- a/doc/html/a00375.html
+++ b/doc/html/a00375.html
@@ -33,49 +33,24 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00045.html">concurrent_priority_queue</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00012.html">aggregator_ext</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_priority_queue< T, Compare, A > Member List</div>  </div>
+<div class="title">tbb::interface6::aggregator_ext< handler_type > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00012.html">tbb::interface6::aggregator_ext< handler_type ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00045.html#a1d2cebf242fa83d88eebdc3ad6891fb1">allocator_type</a> typedef</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00045.html#ac64c7b627708f0d6b2e5421fb0d49150">assign</a>(InputIterator begin, InputIterator end)</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00045.html#ac1b3a945aac5a17c85d56756cc6aa3d1">assign</a>(std::initializer_list< T > il)</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00045.html#a2459166998a4103880d603b237c429e6">clear</a>()</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00045.html#a405be01bac4048f214797c287e2571a1">concurrent_priority_queue</a>(const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00045.html#a43c3917ea8a19cf1fec947e29ad4ff3e">concurrent_priority_queue</a>(size_type init_capacity, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00045.html#a0cebee26cc0d00d4dcbb1c74e08029f7">concurrent_priority_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00045.html#aaa8ac175143e12db29a014674a392b38">concurrent_priority_queue</a>(std::initializer_list< T > init_list, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00045.html#a332d26234f9c37a6b7ba269c648815d0">concurrent_priority_queue</a>(const concurrent_priority_queue &src)</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00045.html#aa52cea369b6630699ee78cc42622be9d">concurrent_priority_queue</a>(const concurrent_priority_queue &src, const allocator_type &a)</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00045.html#ae9ac965bbac3933c7db89f512adfcbcb">concurrent_priority_queue</a>(concurrent_priority_queue &&src)</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00045.html#a14dd20a4673f77cff3eb6f269a888016">concurrent_priority_queue</a>(concurrent_priority_queue &&src, const allocator_type &a)</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00045.html#a0bd617fe8e4657777e86f0ae15d8094f">const_reference</a> typedef</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00045.html#ae010b1fa9c0942504737228474b51a0b">difference_type</a> typedef</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00045.html#a278d208cd92e5aeccc9c7f6fc192e3ce">emplace</a>(Args &&...args)</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00045.html#a8dec2dd0e8b22af14f1753eaef1bf5eb">empty</a>() const </td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00045.html#a312e88e51246da4c516d35abbb30721a">get_allocator</a>() const </td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00045.html#ac0c3f41b10f04547f3438517c40cf8a5">operator=</a>(const concurrent_priority_queue &src)</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00045.html#a9b21bd56aff8c412c5fcdd0d88b48c98">operator=</a>(concurrent_priority_queue &&src)</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00045.html#a7eaa05dcb74604e45e0e2c55e1e456e9">operator=</a>(std::initializer_list< T > il)</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00045.html#a1bfa0e7269b3407d6bb5c706264d2406">push</a>(const_reference elem)</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00045.html#a72ff26945c61b4ce3ce7ca0f9b9aaa48">push</a>(value_type &&elem)</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00045.html#ae4b7ed2ddc8ec6cc910f935c9d299c7a">reference</a> typedef</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00045.html#a7d86ba200474b51ec99a6b917429c6bb">size</a>() const </td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00045.html#a7d3da9b47ec58e1c09e3550f702edcfc">size_type</a> typedef</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00045.html#aa6ee6d356e538b67a7cb4e242e6e36c9">swap</a>(concurrent_priority_queue &q)</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00045.html#a954177b09e184cf3db47f1b180a7ef5e">try_pop</a>(reference elem)</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00045.html#a2c75d97ae429019363ab6fd1a872512e">value_type</a> typedef</td><td class="entry"><a class="el" href="a00045.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>aggregator_ext</b>(const handler_type &h) (defined in <a class="el" href="a00012.html">tbb::interface6::aggregator_ext< handler_type ></a>)</td><td class="entry"><a class="el" href="a00012.html">tbb::interface6::aggregator_ext< handler_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00012.html#ad376e5c31d10e885f33964592aa629d4">execute_impl</a>(aggregator_operation &op)</td><td class="entry"><a class="el" href="a00012.html">tbb::interface6::aggregator_ext< handler_type ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00012.html#ae55b16ec6af204aa00d6a716fccec9f7">process</a>(aggregator_operation *op)</td><td class="entry"><a class="el" href="a00012.html">tbb::interface6::aggregator_ext< handler_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00376.html b/doc/html/a00376.html
index e421819..251259f 100644
--- a/doc/html/a00376.html
+++ b/doc/html/a00376.html
@@ -33,30 +33,26 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00048.html">concurrent_unordered_map_traits</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00011.html">aggregator</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping > Member List</div>  </div>
+<div class="title">tbb::interface6::aggregator Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00048.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00011.html">tbb::interface6::aggregator</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocator_type</b> typedef (defined in <a class="el" href="a00048.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00048.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>allow_multimapping</b> enum value (defined in <a class="el" href="a00048.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00048.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_map_traits</b>() (defined in <a class="el" href="a00048.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00048.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">inline</span><span class [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_map_traits</b>(const hash_compare &hc) (defined in <a class="el" href="a00048.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00048.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">inline</spa [...]
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_key</b>(const std::pair< Type1, Type2 > &value) (defined in <a class="el" href="a00048.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00048.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel"> [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>hash_compare</b> typedef (defined in <a class="el" href="a00048.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00048.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>key_type</b> typedef (defined in <a class="el" href="a00048.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00048.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_hash_compare</b> (defined in <a class="el" href="a00048.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00048.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00048.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00048.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>aggregator</b>() (defined in <a class="el" href="a00011.html">tbb::interface6::aggregator</a>)</td><td class="entry"><a class="el" href="a00011.html">tbb::interface6::aggregator</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>aggregator_ext</b>(const internal::basic_handler &h) (defined in <a class="el" href="a00012.html">tbb::interface6::aggregator_ext< internal::basic_handler ></a>)</td><td class="entry"><a class="el" href="a00012.html">tbb::interface6::aggregator_ext< internal::basic_handler ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">private</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00011.html#aa7cc924b6f0d17578d61fd9002f59f84">execute</a>(const Body &b)</td><td class="entry"><a class="el" href="a00011.html">tbb::interface6::aggregator</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00012.html#ad376e5c31d10e885f33964592aa629d4">execute_impl</a>(aggregator_operation &op)</td><td class="entry"><a class="el" href="a00012.html">tbb::interface6::aggregator_ext< internal::basic_handler ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">private</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00012.html#ae55b16ec6af204aa00d6a716fccec9f7">process</a>(aggregator_operation *op)</td><td class="entry"><a class="el" href="a00012.html">tbb::interface6::aggregator_ext< internal::basic_handler ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">private</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00377.html b/doc/html/a00377.html
index f44dafd..03443c8 100644
--- a/doc/html/a00377.html
+++ b/doc/html/a00377.html
@@ -33,25 +33,25 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00048.html">concurrent_unordered_map_traits</a></li><li class="navelem"><a class="el" href="a00174.html">value_compare</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00037.html">concurrent_lru_cache</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >::value_compare Member List</div>  </div>
+<div class="title">tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00174.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >::value_compare</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00037.html">tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></b> (defined in <a class="el" href="a00174.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >::value_compare</a>)</td><td class="entry"><a class="el" href="a00174.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping &g [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_hash_compare</b> (defined in <a class="el" href="a00174.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >::value_compare</a>)</td><td class="entry"><a class="el" href="a00174.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >::value_compare</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator()</b>(const value_type &left, const value_type &right) const  (defined in <a class="el" href="a00174.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >::value_compare</a>)</td><td class="entry"><a class="el" href="a00174.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >::value_compare< [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>value_compare</b>(const hash_compare &comparator) (defined in <a class="el" href="a00174.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >::value_compare</a>)</td><td class="entry"><a class="el" href="a00174.html">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >::value_compare</a></td><td class="entry"><span class= [...]
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_lru_cache</b>(value_function_type f, std::size_t number_of_lru_history_items) (defined in <a class="el" href="a00037.html">tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type ></a>)</td><td class="entry"><a class="el" href="a00037.html">tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>handle</b> typedef (defined in <a class="el" href="a00037.html">tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type ></a>)</td><td class="entry"><a class="el" href="a00037.html">tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator[]</b>(key_type k) (defined in <a class="el" href="a00037.html">tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type ></a>)</td><td class="entry"><a class="el" href="a00037.html">tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>tbb::internal::aggregating_functor< self_type, aggregated_operation_type ></b> (defined in <a class="el" href="a00037.html">tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type ></a>)</td><td class="entry"><a class="el" href="a00037.html">tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00378.html b/doc/html/a00378.html
index 1561dd9..25f9fc8 100644
--- a/doc/html/a00378.html
+++ b/doc/html/a00378.html
@@ -33,51 +33,61 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00047.html">concurrent_unordered_map</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00058.html">enumerable_thread_specific</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator > Member List</div>  </div>
+<div class="title">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocator_type</b> typedef (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>at</b>(const key_type &key) (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>at</b>(const key_type &key) const  (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_map</b>(size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type()) (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unorder [...]
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_map</b>(const Allocator &a) (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_map</b>(Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type()) (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb: [...]
-  <tr class="even"><td class="entry"><a class="el" href="a00047.html#a788a7225915574c1a349abc0f1f653c7">concurrent_unordered_map</a>(std::initializer_list< value_type > il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equal [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_map</b>(const concurrent_unordered_map &table) (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_map</b>(concurrent_unordered_map &&table) (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_map</b>(const concurrent_unordered_map &table, const Allocator &a) (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_map</b>(concurrent_unordered_map &&table, const Allocator &a) (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inlin [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_iterator</b> typedef (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_local_iterator</b> typedef (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>hasher</b> typedef (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>key_compare</b> typedef (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>key_equal</b> typedef (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>key_type</b> typedef (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>local_iterator</b> typedef (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mapped_type</b> typedef (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const concurrent_unordered_map &table) (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(concurrent_unordered_map &&table) (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator[]</b>(const key_type &key) (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00047.html">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00058.html#ad50ceae1b0e91d0fd31fe506e690692b">allocator_type</a> typedef</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00058.html#a070d26debf1f65c83de13f64f91aefdc">begin</a>()</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00058.html#aa097383eb6f90e4a551830fc00b60b3a">begin</a>() const </td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00058.html#a85a0d8f088ef1ee07aeb2c0e944a4a5e">clear</a>()</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>combine</b>(combine_func_t f_combine) (defined in <a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>combine_each</b>(combine_func_t f_combine) (defined in <a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_iterator</b> typedef (defined in <a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_range_type</b> typedef (defined in <a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00058.html#adfa4b2e13e47ab825dc40c4f195d2bc5">empty</a>() const </td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00058.html#ad225e2e8a968b131bf05d72f5686b924">end</a>()</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00058.html#a5ed0248f10a7aa5045d2cda77dad9588">end</a>() const </td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>enumerable_thread_specific</b> (defined in <a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00058.html#ad95ccef01367c0b6d75f6f91f5bf5315">enumerable_thread_specific</a>()</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00058.html#aafd6049aa255826c712aaba778524a7c">enumerable_thread_specific</a>(Finit finit)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00058.html#a6f0249ee95fa56665da4b6984f3a685a">enumerable_thread_specific</a>(const T &exemplar)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>enumerable_thread_specific</b>(T &&exemplar) (defined in <a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00058.html#aa636348d57b1fc5127c7d642af51f6da">enumerable_thread_specific</a>(P1 &&arg1, P &&...args)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>enumerable_thread_specific</b>(const enumerable_thread_specific &other) (defined in <a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>enumerable_thread_specific</b>(const enumerable_thread_specific< T, Alloc, Cachetype > &other) (defined in <a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>enumerable_thread_specific</b>(enumerable_thread_specific &&other) (defined in <a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>enumerable_thread_specific</b>(enumerable_thread_specific< T, Alloc, Cachetype > &&other) (defined in <a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00058.html#aea846c6cbafbe2ff6bde6e8c2a2ee97e">local</a>()</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00058.html#abbbc24a5816dc163d5df057c5e7f379d">local</a>(bool &exists)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const enumerable_thread_specific &other) (defined in <a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(const enumerable_thread_specific< T, Alloc, Cachetype > &other) (defined in <a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(enumerable_thread_specific &&other) (defined in <a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(enumerable_thread_specific< T, Alloc, Cachetype > &&other) (defined in <a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00058.html#ac94dd896ed78df240da4a450defbca6c">range</a>(size_t grainsize=1)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00058.html#a25b9153dfe994c8122a7f0227cffe793">range</a>(size_t grainsize=1) const </td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>range_type</b> typedef (defined in <a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00058.html#a4c33c5390783e17daf2b25d53ae919fb">size</a>() const </td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00058.html#a6ea8d717f770acb63efc406df52d4585">~enumerable_thread_specific</a>()</td><td class="entry"><a class="el" href="a00058.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00379.html b/doc/html/a00379.html
index 6c0c9de..08ee1eb 100644
--- a/doc/html/a00379.html
+++ b/doc/html/a00379.html
@@ -33,48 +33,38 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00049.html">concurrent_unordered_multimap</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00063.html">flattened2d</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator > Member List</div>  </div>
+<div class="title">tbb::interface6::flattened2d< Container > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocator_type</b> typedef (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_multimap</b>(size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type()) (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurre [...]
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_multimap</b>(const Allocator &a) (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_multimap</b>(Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type()) (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049. [...]
-  <tr class="even"><td class="entry"><a class="el" href="a00049.html#a5957d29e5fa9f8c53538de3f7a41ebc9">concurrent_unordered_multimap</a>(std::initializer_list< value_type > il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_multimap</b>(const concurrent_unordered_multimap &table) (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_multimap</b>(concurrent_unordered_multimap &&table) (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</s [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_multimap</b>(const concurrent_unordered_multimap &table, const Allocator &a) (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabe [...]
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_multimap</b>(concurrent_unordered_multimap &&table, const Allocator &a) (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span  [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_iterator</b> typedef (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_local_iterator</b> typedef (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>hasher</b> typedef (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>key_compare</b> typedef (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>key_equal</b> typedef (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>key_type</b> typedef (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>local_iterator</b> typedef (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mapped_type</b> typedef (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const concurrent_unordered_multimap &table) (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(concurrent_unordered_multimap &&table) (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00049.html">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocator_type</b> typedef (defined in <a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>begin</b>() (defined in <a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>begin</b>() const  (defined in <a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_iterator</b> typedef (defined in <a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>end</b>() (defined in <a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>end</b>() const  (defined in <a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>flattened2d</b>(const Container &c, typename Container::const_iterator b, typename Container::const_iterator e) (defined in <a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>flattened2d</b>(const Container &c) (defined in <a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>size</b>() const  (defined in <a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00063.html#a8b84f8f2cc4499f49d17141eaedc99c0">size_type</a> typedef</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00380.html b/doc/html/a00380.html
index a9817a9..4ebc79a 100644
--- a/doc/html/a00380.html
+++ b/doc/html/a00380.html
@@ -33,31 +33,45 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00052.html">concurrent_unordered_set_traits</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00077.html">memory_pool_allocator</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping > Member List</div>  </div>
+<div class="title">tbb::interface6::memory_pool_allocator< T, P > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00052.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocator_type</b> typedef (defined in <a class="el" href="a00052.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00052.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>allow_multimapping</b> enum value (defined in <a class="el" href="a00052.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00052.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_set_traits</b>() (defined in <a class="el" href="a00052.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00052.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlab [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_set_traits</b>(const hash_compare &hc) (defined in <a class="el" href="a00052.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00052.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">inline</span><spa [...]
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_key</b>(const value_type &value) (defined in <a class="el" href="a00052.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00052.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">inline</span><span class="m [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>hash_compare</b> typedef (defined in <a class="el" href="a00052.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00052.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>key_type</b> typedef (defined in <a class="el" href="a00052.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00052.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_hash_compare</b> (defined in <a class="el" href="a00052.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00052.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_compare</b> typedef (defined in <a class="el" href="a00052.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00052.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00052.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a>)</td><td class="entry"><a class="el" href="a00052.html">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>address</b>(reference x) const  (defined in <a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>address</b>(const_reference x) const  (defined in <a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00077.html#a10b9888883a3dbd66e87c4a7f874ef28">allocate</a>(size_type n, const void *=0)</td><td class="entry"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00077.html#ac51b34ef90ecabdd2e0483e25603a15b">construct</a>(U *p, Args &&...args)</td><td class="entry"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>construct</b>(pointer p, value_type &&value) (defined in <a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>construct</b>(pointer p, const value_type &value) (defined in <a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00077.html#a9fcf288f2d653972d1bdc0c65abebed4">deallocate</a>(pointer p, size_type)</td><td class="entry"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00077.html#a2223b6469f88aadc432a4b3f88728d0f">destroy</a>(pointer p)</td><td class="entry"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00077.html#a2bded8e3fb2cec32b48771e7a1bbb838">max_size</a>() const </td><td class="entry"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>memory_pool_allocator</b> (defined in <a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>memory_pool_allocator</b>(pool_type &pool) (defined in <a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>memory_pool_allocator</b>(const memory_pool_allocator &src) (defined in <a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>memory_pool_allocator</b>(const memory_pool_allocator< U, P > &src) (defined in <a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_pool</b> (defined in <a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator!=</b> (defined in <a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator==</b> (defined in <a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pool_type</b> typedef (defined in <a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00077.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00381.html b/doc/html/a00381.html
index c119146..923963e 100644
--- a/doc/html/a00381.html
+++ b/doc/html/a00381.html
@@ -33,48 +33,22 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00051.html">concurrent_unordered_set</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00077.html">memory_pool_allocator</a></li><li class="navelem"><a class="el" href="a00116.html">rebind</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator > Member List</div>  </div>
+<div class="title">tbb::interface6::memory_pool_allocator< T, P >::rebind< U > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00116.html">tbb::interface6::memory_pool_allocator< T, P >::rebind< U ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocator_type</b> typedef (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_set</b>(size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type()) (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set&l [...]
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_set</b>(const Allocator &a) (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_set</b>(Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type()) (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interfa [...]
-  <tr class="even"><td class="entry"><a class="el" href="a00051.html#a6f6d5ecff239ff13000848e925904fe7">concurrent_unordered_set</a>(std::initializer_list< value_type > il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, All [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_set</b>(const concurrent_unordered_set &table) (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_set</b>(concurrent_unordered_set &&table) (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_set</b>(const concurrent_unordered_set &table, const Allocator &a) (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_set</b>(concurrent_unordered_set &&table, const Allocator &a) (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</spa [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_iterator</b> typedef (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_local_iterator</b> typedef (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>hasher</b> typedef (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>key_compare</b> typedef (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>key_equal</b> typedef (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>key_type</b> typedef (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>local_iterator</b> typedef (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mapped_type</b> typedef (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const concurrent_unordered_set &table) (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(concurrent_unordered_set &&table) (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00051.html">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>other</b> typedef (defined in <a class="el" href="a00116.html">tbb::interface6::memory_pool_allocator< T, P >::rebind< U ></a>)</td><td class="entry"><a class="el" href="a00116.html">tbb::interface6::memory_pool_allocator< T, P >::rebind< U ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00382.html b/doc/html/a00382.html
index f1c0283..bd10a5c 100644
--- a/doc/html/a00382.html
+++ b/doc/html/a00382.html
@@ -33,48 +33,32 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00050.html">concurrent_unordered_multiset</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00078.html">memory_pool_allocator< void, P ></a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator > Member List</div>  </div>
+<div class="title">tbb::interface6::memory_pool_allocator< void, P > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00078.html">tbb::interface6::memory_pool_allocator< void, P ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocator_type</b> typedef (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_multiset</b>(size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type()) (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_ [...]
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_multiset</b>(const Allocator &a) (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_multiset</b>(Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type()) (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.htm [...]
-  <tr class="even"><td class="entry"><a class="el" href="a00050.html#a15631f048043195863c66bad6533bccb">concurrent_unordered_multiset</a>(std::initializer_list< value_type > il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equ [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_multiset</b>(const concurrent_unordered_multiset &table) (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_multiset</b>(concurrent_unordered_multiset &&table) (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></ [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>concurrent_unordered_multiset</b>(const concurrent_unordered_multiset &table, const Allocator &a) (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inl [...]
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_unordered_multiset</b>(concurrent_unordered_multiset &&table, const Allocator &a) (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class= [...]
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_iterator</b> typedef (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_local_iterator</b> typedef (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>hasher</b> typedef (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>key_compare</b> typedef (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>key_equal</b> typedef (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>key_type</b> typedef (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>local_iterator</b> typedef (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mapped_type</b> typedef (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const concurrent_unordered_multiset &table) (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(concurrent_unordered_multiset &&table) (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00078.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td class="entry"><a class="el" href="a00078.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>memory_pool_allocator</b> (defined in <a class="el" href="a00078.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td class="entry"><a class="el" href="a00078.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>memory_pool_allocator</b>(pool_type &pool) (defined in <a class="el" href="a00078.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td class="entry"><a class="el" href="a00078.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>memory_pool_allocator</b>(const memory_pool_allocator &src) (defined in <a class="el" href="a00078.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td class="entry"><a class="el" href="a00078.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>memory_pool_allocator</b>(const memory_pool_allocator< U, P > &src) (defined in <a class="el" href="a00078.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td class="entry"><a class="el" href="a00078.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_pool</b> (defined in <a class="el" href="a00078.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td class="entry"><a class="el" href="a00078.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator!=</b> (defined in <a class="el" href="a00078.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td class="entry"><a class="el" href="a00078.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator==</b> (defined in <a class="el" href="a00078.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td class="entry"><a class="el" href="a00078.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00078.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td class="entry"><a class="el" href="a00078.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>pool_type</b> typedef (defined in <a class="el" href="a00078.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td class="entry"><a class="el" href="a00078.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00078.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td class="entry"><a class="el" href="a00078.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00383.html b/doc/html/a00383.html
index e75b3f6..13b865e 100644
--- a/doc/html/a00383.html
+++ b/doc/html/a00383.html
@@ -33,35 +33,22 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00113.html">reader_writer_lock</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00078.html">memory_pool_allocator< void, P ></a></li><li class="navelem"><a class="el" href="a00118.html">rebind</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface5::reader_writer_lock Member List</div>  </div>
+<div class="title">tbb::interface6::memory_pool_allocator< void, P >::rebind< U > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00113.html">tbb::interface5::reader_writer_lock</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00118.html">tbb::interface6::memory_pool_allocator< void, P >::rebind< U ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>active</b> enum value (defined in <a class="el" href="a00113.html">tbb::interface5::reader_writer_lock</a>)</td><td class="entry"><a class="el" href="a00113.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>invalid</b> enum value (defined in <a class="el" href="a00113.html">tbb::interface5::reader_writer_lock</a>)</td><td class="entry"><a class="el" href="a00113.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00113.html#af92eb949fc491af8f7e350869ea0a0d1">lock</a>()</td><td class="entry"><a class="el" href="a00113.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00113.html#a6fd4fcdf0e5c0425d1cc736d644f234f">lock_read</a>()</td><td class="entry"><a class="el" href="a00113.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00113.html#abceda6c50b0c36eacbef51f4682742f3">reader_writer_lock</a>()</td><td class="entry"><a class="el" href="a00113.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>scoped_lock</b> (defined in <a class="el" href="a00113.html">tbb::interface5::reader_writer_lock</a>)</td><td class="entry"><a class="el" href="a00113.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scoped_lock_read</b> (defined in <a class="el" href="a00113.html">tbb::interface5::reader_writer_lock</a>)</td><td class="entry"><a class="el" href="a00113.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00113.html#a29bbf9ca21c12b313d9fa5326feaf3ed">status_t</a> enum name</td><td class="entry"><a class="el" href="a00113.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00113.html#a1739e842af52925a2d4a7e821b9b3b8d">try_lock</a>()</td><td class="entry"><a class="el" href="a00113.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00113.html#a9c7aa04e00202c9a1197cb6d870cabb4">try_lock_read</a>()</td><td class="entry"><a class="el" href="a00113.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00113.html#a4c55c4dbde63e950fdc843c9b01a174f">unlock</a>()</td><td class="entry"><a class="el" href="a00113.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>waiting</b> enum value (defined in <a class="el" href="a00113.html">tbb::interface5::reader_writer_lock</a>)</td><td class="entry"><a class="el" href="a00113.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>waiting_nonblocking</b> enum value (defined in <a class="el" href="a00113.html">tbb::interface5::reader_writer_lock</a>)</td><td class="entry"><a class="el" href="a00113.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00113.html#aeee96b648c7b5ff6126c8a2e13ec7241">~reader_writer_lock</a>()</td><td class="entry"><a class="el" href="a00113.html">tbb::interface5::reader_writer_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>other</b> typedef (defined in <a class="el" href="a00118.html">tbb::interface6::memory_pool_allocator< void, P >::rebind< U ></a>)</td><td class="entry"><a class="el" href="a00118.html">tbb::interface6::memory_pool_allocator< void, P >::rebind< U ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00384.html b/doc/html/a00384.html
index 94b9ee2..0148027 100644
--- a/doc/html/a00384.html
+++ b/doc/html/a00384.html
@@ -33,26 +33,23 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00113.html">reader_writer_lock</a></li><li class="navelem"><a class="el" href="a00133.html">scoped_lock</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00076.html">memory_pool</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface5::reader_writer_lock::scoped_lock Member List</div>  </div>
+<div class="title">tbb::interface6::memory_pool< Alloc > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00133.html">tbb::interface5::reader_writer_lock::scoped_lock</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00076.html">tbb::interface6::memory_pool< Alloc ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator delete</b>(void *p) (defined in <a class="el" href="a00133.html">tbb::interface5::reader_writer_lock::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00133.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator new</b>(size_t s) (defined in <a class="el" href="a00133.html">tbb::interface5::reader_writer_lock::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00133.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reader_writer_lock</b> (defined in <a class="el" href="a00133.html">tbb::interface5::reader_writer_lock::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00133.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00133.html#aaed982d8c3f1e84298f9842063694f3c">scoped_lock</a>(reader_writer_lock &lock)</td><td class="entry"><a class="el" href="a00133.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00133.html#a41e77cf094ed30b0a9a39ee217c3653b">~scoped_lock</a>()</td><td class="entry"><a class="el" href="a00133.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00076.html#af4c36829a159eac04d630ac5a99b9354">memory_pool</a>(const Alloc &src=Alloc())</td><td class="entry"><a class="el" href="a00076.html">tbb::interface6::memory_pool< Alloc ></a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00076.html#ad2c7645b39b7280b1b3cf393d05fbaf7">~memory_pool</a>()</td><td class="entry"><a class="el" href="a00076.html">tbb::interface6::memory_pool< Alloc ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00385.html b/doc/html/a00385.html
index 1c0c974..2ec2674 100644
--- a/doc/html/a00385.html
+++ b/doc/html/a00385.html
@@ -33,26 +33,23 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00113.html">reader_writer_lock</a></li><li class="navelem"><a class="el" href="a00141.html">scoped_lock_read</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00062.html">fixed_pool</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface5::reader_writer_lock::scoped_lock_read Member List</div>  </div>
+<div class="title">tbb::interface6::fixed_pool Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00141.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00062.html">tbb::interface6::fixed_pool</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator delete</b>(void *p) (defined in <a class="el" href="a00141.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>)</td><td class="entry"><a class="el" href="a00141.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator new</b>(size_t s) (defined in <a class="el" href="a00141.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>)</td><td class="entry"><a class="el" href="a00141.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reader_writer_lock</b> (defined in <a class="el" href="a00141.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>)</td><td class="entry"><a class="el" href="a00141.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00141.html#a9d3120a23016dabd4cc2683fa561ee5a">scoped_lock_read</a>(reader_writer_lock &lock)</td><td class="entry"><a class="el" href="a00141.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00141.html#acf0e23fb4d3aeb6bde18d5d1236bd9d5">~scoped_lock_read</a>()</td><td class="entry"><a class="el" href="a00141.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00062.html#aa3811fe3d437ba2eefa926d52732491a">fixed_pool</a>(void *buf, size_t size)</td><td class="entry"><a class="el" href="a00062.html">tbb::interface6::fixed_pool</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00062.html#ab854a85575e5c1e9c9f4d3eafcc28044">~fixed_pool</a>()</td><td class="entry"><a class="el" href="a00062.html">tbb::interface6::fixed_pool</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00386.html b/doc/html/a00386.html
index 5f200e6..7d5fb0b 100644
--- a/doc/html/a00386.html
+++ b/doc/html/a00386.html
@@ -33,23 +33,23 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00171.html">use_element_copy_constructor</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00064.html">flow_control</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface5::internal::use_element_copy_constructor< T, C > Member List</div>  </div>
+<div class="title">tbb::interface6::flow_control Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00171.html">tbb::interface5::internal::use_element_copy_constructor< T, C ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00064.html">tbb::interface6::flow_control</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>type</b> typedef (defined in <a class="el" href="a00171.html">tbb::interface5::internal::use_element_copy_constructor< T, C ></a>)</td><td class="entry"><a class="el" href="a00171.html">tbb::interface5::internal::use_element_copy_constructor< T, C ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>type</b> typedef (defined in <a class="el" href="a00171.html">tbb::interface5::internal::use_element_copy_constructor< T, C ></a>)</td><td class="entry"><a class="el" href="a00171.html">tbb::interface5::internal::use_element_copy_constructor< T, C ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::concrete_filter</b> (defined in <a class="el" href="a00064.html">tbb::interface6::flow_control</a>)</td><td class="entry"><a class="el" href="a00064.html">tbb::interface6::flow_control</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>stop</b>() (defined in <a class="el" href="a00064.html">tbb::interface6::flow_control</a>)</td><td class="entry"><a class="el" href="a00064.html">tbb::interface6::flow_control</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00387.html b/doc/html/a00387.html
index 9840492..7a2771b 100644
--- a/doc/html/a00387.html
+++ b/doc/html/a00387.html
@@ -33,22 +33,30 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00172.html">use_element_copy_constructor< T, false ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00060.html">filter_t</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface5::internal::use_element_copy_constructor< T, false > Member List</div>  </div>
+<div class="title">tbb::interface6::filter_t< T, U > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00172.html">tbb::interface5::internal::use_element_copy_constructor< T, false ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00060.html">tbb::interface6::filter_t< T, U ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>type</b> typedef (defined in <a class="el" href="a00172.html">tbb::interface5::internal::use_element_copy_constructor< T, false ></a>)</td><td class="entry"><a class="el" href="a00172.html">tbb::interface5::internal::use_element_copy_constructor< T, false ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>clear</b>() (defined in <a class="el" href="a00060.html">tbb::interface6::filter_t< T, U ></a>)</td><td class="entry"><a class="el" href="a00060.html">tbb::interface6::filter_t< T, U ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>filter_t</b>() (defined in <a class="el" href="a00060.html">tbb::interface6::filter_t< T, U ></a>)</td><td class="entry"><a class="el" href="a00060.html">tbb::interface6::filter_t< T, U ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>filter_t</b>(const filter_t< T, U > &rhs) (defined in <a class="el" href="a00060.html">tbb::interface6::filter_t< T, U ></a>)</td><td class="entry"><a class="el" href="a00060.html">tbb::interface6::filter_t< T, U ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>filter_t</b>(tbb::filter::mode mode, const Body &body) (defined in <a class="el" href="a00060.html">tbb::interface6::filter_t< T, U ></a>)</td><td class="entry"><a class="el" href="a00060.html">tbb::interface6::filter_t< T, U ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::pipeline_proxy</b> (defined in <a class="el" href="a00060.html">tbb::interface6::filter_t< T, U ></a>)</td><td class="entry"><a class="el" href="a00060.html">tbb::interface6::filter_t< T, U ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00060.html#a21460fde704da22caa222778f5abb140">make_filter</a>(tbb::filter::mode, const Body &)</td><td class="entry"><a class="el" href="a00060.html">tbb::interface6::filter_t< T, U ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator&</b> (defined in <a class="el" href="a00060.html">tbb::interface6::filter_t< T, U ></a>)</td><td class="entry"><a class="el" href="a00060.html">tbb::interface6::filter_t< T, U ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const filter_t< T, U > &rhs) (defined in <a class="el" href="a00060.html">tbb::interface6::filter_t< T, U ></a>)</td><td class="entry"><a class="el" href="a00060.html">tbb::interface6::filter_t< T, U ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~filter_t</b>() (defined in <a class="el" href="a00060.html">tbb::interface6::filter_t< T, U ></a>)</td><td class="entry"><a class="el" href="a00060.html">tbb::interface6::filter_t< T, U ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00388.html b/doc/html/a00388.html
index 97d34bf..0e934b3 100644
--- a/doc/html/a00388.html
+++ b/doc/html/a00388.html
@@ -33,30 +33,37 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00014.html">aggregator_operation</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00125.html">runtime_loader</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface6::aggregator_operation Member List</div>  </div>
+<div class="title">tbb::interface6::runtime_loader Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00125.html">tbb::interface6::runtime_loader</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>agg_finished</b> enum value (defined in <a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>agg_waiting</b> enum value (defined in <a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>aggregator_ext</b> (defined in <a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>aggregator_operation</b>() (defined in <a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>aggregator_operation_status</b> enum name (defined in <a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00014.html#ac7edadfe74f475783f3b429904e7010a">finish</a>()</td><td class="entry"><a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>next</b>() (defined in <a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>set_next</b>(aggregator_operation *n) (defined in <a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00014.html#adc0e032aa604f1da85ffc7ec269b157f">start</a>()</td><td class="entry"><a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7afd928f63eb3da0980e746d58374b07c3">ec_bad_arg</a> enum value</td><td class="entry"><a class="el" href="a00125.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7a670e4d0a5a3c1bbcdff9e5ee16dc9c01">ec_bad_call</a> enum value</td><td class="entry"><a class="el" href="a00125.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7a71f874957c0322f499ba764dd0bb8732">ec_bad_lib</a> enum value</td><td class="entry"><a class="el" href="a00125.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7aae7497a49ceae69d06d6ab9fef636064">ec_bad_ver</a> enum value</td><td class="entry"><a class="el" href="a00125.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7a5e694560f3ada80d2cc25881b5ae43dd">ec_no_lib</a> enum value</td><td class="entry"><a class="el" href="a00125.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7afc7eba28f2fc936312f041cf85276434">ec_ok</a> enum value</td><td class="entry"><a class="el" href="a00125.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00125.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35">em_abort</a> enum value</td><td class="entry"><a class="el" href="a00125.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00125.html#ab85c82f9c0ccd91905f2795a79ac1295af9c9137d6acdb0fd37f1a92b5cdaeb36">em_status</a> enum value</td><td class="entry"><a class="el" href="a00125.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00125.html#ab85c82f9c0ccd91905f2795a79ac1295a17ec1019cffa635146eaefb042e28a2c">em_throw</a> enum value</td><td class="entry"><a class="el" href="a00125.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7">error_code</a> enum name</td><td class="entry"><a class="el" href="a00125.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00125.html#ab85c82f9c0ccd91905f2795a79ac1295">error_mode</a> enum name</td><td class="entry"><a class="el" href="a00125.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00125.html#ae2949e9adcac56a2cb9864437be8e22e">load</a>(char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX)</td><td class="entry"><a class="el" href="a00125.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00125.html#a2f87eaf99564c705aa140f2eb8848eaa">runtime_loader</a>(error_mode mode=em_abort)</td><td class="entry"><a class="el" href="a00125.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00125.html#a3e0932074d2f3ad04605e7e5da88c561">runtime_loader</a>(char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX, error_mode mode=em_abort)</td><td class="entry"><a class="el" href="a00125.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00125.html#a85bf9ee021a2076a3ac7cfd70aae7345">status</a>()</td><td class="entry"><a class="el" href="a00125.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00125.html#aa3b96f53e165e3d692c3c36292ba0737">~runtime_loader</a>()</td><td class="entry"><a class="el" href="a00125.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00389.html b/doc/html/a00389.html
index 8960293..095d554 100644
--- a/doc/html/a00389.html
+++ b/doc/html/a00389.html
@@ -33,24 +33,36 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00013.html">aggregator_ext</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00151.html">task_scheduler_observer</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface6::aggregator_ext< handler_type > Member List</div>  </div>
+<div class="title">tbb::interface6::task_scheduler_observer Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00013.html">tbb::interface6::aggregator_ext< handler_type ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00151.html">tbb::interface6::task_scheduler_observer</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>aggregator_ext</b>(const handler_type &h) (defined in <a class="el" href="a00013.html">tbb::interface6::aggregator_ext< handler_type ></a>)</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_ext< handler_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00013.html#ad376e5c31d10e885f33964592aa629d4">execute_impl</a>(aggregator_operation &op)</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_ext< handler_type ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00013.html#ae55b16ec6af204aa00d6a716fccec9f7">process</a>(aggregator_operation *op)</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_ext< handler_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allow_sleep</b> enum value (defined in <a class="el" href="a00151.html">tbb::interface6::task_scheduler_observer</a>)</td><td class="entry"><a class="el" href="a00151.html">tbb::interface6::task_scheduler_observer</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::observer_list</b> (defined in <a class="el" href="a00151.html">tbb::interface6::task_scheduler_observer</a>)</td><td class="entry"><a class="el" href="a00151.html">tbb::interface6::task_scheduler_observer</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::observer_proxy</b> (defined in <a class="el" href="a00151.html">tbb::interface6::task_scheduler_observer</a>)</td><td class="entry"><a class="el" href="a00151.html">tbb::interface6::task_scheduler_observer</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::task_scheduler_observer_v3</b> (defined in <a class="el" href="a00151.html">tbb::interface6::task_scheduler_observer</a>)</td><td class="entry"><a class="el" href="a00151.html">tbb::interface6::task_scheduler_observer</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00152.html#a31abaf256f7172f010cfb2259c7787bb">is_observing</a>() const </td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>keep_awake</b> enum value (defined in <a class="el" href="a00151.html">tbb::interface6::task_scheduler_observer</a>)</td><td class="entry"><a class="el" href="a00151.html">tbb::interface6::task_scheduler_observer</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00151.html#a2390325945912ee7ce58cd9700664ea4">may_sleep</a>()</td><td class="entry"><a class="el" href="a00151.html">tbb::interface6::task_scheduler_observer</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00151.html#ad5b33790cea52c61e1fb004a8ed26365">observe</a>(bool state=true)</td><td class="entry"><a class="el" href="a00151.html">tbb::interface6::task_scheduler_observer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00152.html#af4282a27725fbe86052bb785bdd9c5d3">on_scheduler_entry</a>(bool)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00152.html#a657e90f833568e217b807d0122fa7668">on_scheduler_exit</a>(bool)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00151.html#a89025b1e1d42e97d6fe114c0c331f730">task_scheduler_observer</a>(bool local=false)</td><td class="entry"><a class="el" href="a00151.html">tbb::interface6::task_scheduler_observer</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00151.html#a36e7e0c466320029d5a3e50a573e04c1">task_scheduler_observer</a>(task_arena &a)</td><td class="entry"><a class="el" href="a00151.html">tbb::interface6::task_scheduler_observer</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00152.html#a25bffb05efaaab36bc58590969e29745">task_scheduler_observer_v3</a>()</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00151.html#a9ef3f1853439b46e5a9db7fd1c0f9116">~task_scheduler_observer</a>()</td><td class="entry"><a class="el" href="a00151.html">tbb::interface6::task_scheduler_observer</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00152.html#a151e475ebba39172fcc13f43bed426cc">~task_scheduler_observer_v3</a>()</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00390.html b/doc/html/a00390.html
index b451a9a..ddd121c 100644
--- a/doc/html/a00390.html
+++ b/doc/html/a00390.html
@@ -33,26 +33,32 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00012.html">aggregator</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00021.html">basic_operation_base</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface6::aggregator Member List</div>  </div>
+<div class="title">tbb::interface6::internal::basic_operation_base Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00012.html">tbb::interface6::aggregator</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00021.html">tbb::interface6::internal::basic_operation_base</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>aggregator</b>() (defined in <a class="el" href="a00012.html">tbb::interface6::aggregator</a>)</td><td class="entry"><a class="el" href="a00012.html">tbb::interface6::aggregator</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>aggregator_ext</b>(const internal::basic_handler &h) (defined in <a class="el" href="a00013.html">tbb::interface6::aggregator_ext< internal::basic_handler ></a>)</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_ext< internal::basic_handler ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">private</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00012.html#aa7cc924b6f0d17578d61fd9002f59f84">execute</a>(const Body &b)</td><td class="entry"><a class="el" href="a00012.html">tbb::interface6::aggregator</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00013.html#ad376e5c31d10e885f33964592aa629d4">execute_impl</a>(aggregator_operation &op)</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_ext< internal::basic_handler ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">private</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00013.html#ae55b16ec6af204aa00d6a716fccec9f7">process</a>(aggregator_operation *op)</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_ext< internal::basic_handler ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">private</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>agg_finished</b> enum value (defined in <a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>agg_waiting</b> enum value (defined in <a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>aggregator_operation</b>() (defined in <a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>aggregator_operation_status</b> enum name (defined in <a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>basic_handler</b> (defined in <a class="el" href="a00021.html">tbb::interface6::internal::basic_operation_base</a>)</td><td class="entry"><a class="el" href="a00021.html">tbb::interface6::internal::basic_operation_base</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>basic_operation_base</b>() (defined in <a class="el" href="a00021.html">tbb::interface6::internal::basic_operation_base</a>)</td><td class="entry"><a class="el" href="a00021.html">tbb::interface6::internal::basic_operation_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00013.html#ac7edadfe74f475783f3b429904e7010a">finish</a>()</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>next</b>() (defined in <a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_next</b>(aggregator_operation *n) (defined in <a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00013.html#adc0e032aa604f1da85ffc7ec269b157f">start</a>()</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~basic_operation_base</b>() (defined in <a class="el" href="a00021.html">tbb::interface6::internal::basic_operation_base</a>)</td><td class="entry"><a class="el" href="a00021.html">tbb::interface6::internal::basic_operation_base</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00391.html b/doc/html/a00391.html
index 06385eb..5cda6a3 100644
--- a/doc/html/a00391.html
+++ b/doc/html/a00391.html
@@ -33,25 +33,32 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00044.html">concurrent_lru_cache</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00020.html">basic_operation</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type > Member List</div>  </div>
+<div class="title">tbb::interface6::internal::basic_operation< Body > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00044.html">tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00020.html">tbb::interface6::internal::basic_operation< Body ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_lru_cache</b>(value_function_type f, std::size_t number_of_lru_history_items) (defined in <a class="el" href="a00044.html">tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>handle</b> typedef (defined in <a class="el" href="a00044.html">tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator[]</b>(key_type k) (defined in <a class="el" href="a00044.html">tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>tbb::internal::aggregating_functor< self_type, aggregated_operation_type ></b> (defined in <a class="el" href="a00044.html">tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type ></a>)</td><td class="entry"><a class="el" href="a00044.html">tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>agg_finished</b> enum value (defined in <a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>agg_waiting</b> enum value (defined in <a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>aggregator_operation</b>() (defined in <a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>aggregator_operation_status</b> enum name (defined in <a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>basic_operation</b>(const Body &b) (defined in <a class="el" href="a00020.html">tbb::interface6::internal::basic_operation< Body ></a>)</td><td class="entry"><a class="el" href="a00020.html">tbb::interface6::internal::basic_operation< Body ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>basic_operation_base</b>() (defined in <a class="el" href="a00021.html">tbb::interface6::internal::basic_operation_base</a>)</td><td class="entry"><a class="el" href="a00021.html">tbb::interface6::internal::basic_operation_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00013.html#ac7edadfe74f475783f3b429904e7010a">finish</a>()</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>next</b>() (defined in <a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_next</b>(aggregator_operation *n) (defined in <a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00013.html#adc0e032aa604f1da85ffc7ec269b157f">start</a>()</td><td class="entry"><a class="el" href="a00013.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~basic_operation_base</b>() (defined in <a class="el" href="a00021.html">tbb::interface6::internal::basic_operation_base</a>)</td><td class="entry"><a class="el" href="a00021.html">tbb::interface6::internal::basic_operation_base</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00392.html b/doc/html/a00392.html
index 5a3d207..03bad58 100644
--- a/doc/html/a00392.html
+++ b/doc/html/a00392.html
@@ -33,57 +33,23 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00061.html">enumerable_thread_specific</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00019.html">basic_handler</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type > Member List</div>  </div>
+<div class="title">tbb::interface6::internal::basic_handler Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00019.html">tbb::interface6::internal::basic_handler</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00061.html#ad50ceae1b0e91d0fd31fe506e690692b">allocator_type</a> typedef</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00061.html#a070d26debf1f65c83de13f64f91aefdc">begin</a>()</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00061.html#aa097383eb6f90e4a551830fc00b60b3a">begin</a>() const </td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00061.html#a85a0d8f088ef1ee07aeb2c0e944a4a5e">clear</a>()</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>combine</b>(combine_func_t f_combine) (defined in <a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>combine_each</b>(combine_func_t f_combine) (defined in <a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_iterator</b> typedef (defined in <a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_range_type</b> typedef (defined in <a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00061.html#adfa4b2e13e47ab825dc40c4f195d2bc5">empty</a>() const </td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00061.html#ad225e2e8a968b131bf05d72f5686b924">end</a>()</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00061.html#a5ed0248f10a7aa5045d2cda77dad9588">end</a>() const </td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>enumerable_thread_specific</b> (defined in <a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00061.html#ad95ccef01367c0b6d75f6f91f5bf5315">enumerable_thread_specific</a>()</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00061.html#aafd6049aa255826c712aaba778524a7c">enumerable_thread_specific</a>(Finit finit)</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00061.html#a6f0249ee95fa56665da4b6984f3a685a">enumerable_thread_specific</a>(const T &exemplar)</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>enumerable_thread_specific</b>(T &&exemplar) (defined in <a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00061.html#aa636348d57b1fc5127c7d642af51f6da">enumerable_thread_specific</a>(P1 &&arg1, P &&...args)</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>enumerable_thread_specific</b>(const enumerable_thread_specific< T, Alloc, Cachetype > &other) (defined in <a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>enumerable_thread_specific</b>(const enumerable_thread_specific &other) (defined in <a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00061.html#aea846c6cbafbe2ff6bde6e8c2a2ee97e">local</a>()</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00061.html#abbbc24a5816dc163d5df057c5e7f379d">local</a>(bool &exists)</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const enumerable_thread_specific &other) (defined in <a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(const enumerable_thread_specific< T, Alloc, Cachetype > &other) (defined in <a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00061.html#ac94dd896ed78df240da4a450defbca6c">range</a>(size_t grainsize=1)</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00061.html#a25b9153dfe994c8122a7f0227cffe793">range</a>(size_t grainsize=1) const </td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>range_type</b> typedef (defined in <a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00061.html#a4c33c5390783e17daf2b25d53ae919fb">size</a>() const </td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00061.html#a6ea8d717f770acb63efc406df52d4585">~enumerable_thread_specific</a>()</td><td class="entry"><a class="el" href="a00061.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>basic_handler</b>() (defined in <a class="el" href="a00019.html">tbb::interface6::internal::basic_handler</a>)</td><td class="entry"><a class="el" href="a00019.html">tbb::interface6::internal::basic_handler</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator()</b>(aggregator_operation *op_list) const  (defined in <a class="el" href="a00019.html">tbb::interface6::internal::basic_handler</a>)</td><td class="entry"><a class="el" href="a00019.html">tbb::interface6::internal::basic_handler</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00393.html b/doc/html/a00393.html
index edff362..77482e7 100644
--- a/doc/html/a00393.html
+++ b/doc/html/a00393.html
@@ -33,38 +33,39 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00066.html">flattened2d</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00144.html">task_arena</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface6::flattened2d< Container > Member List</div>  </div>
+<div class="title">tbb::interface7::task_arena Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00144.html">tbb::interface7::task_arena</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocator_type</b> typedef (defined in <a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>begin</b>() (defined in <a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>begin</b>() const  (defined in <a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_iterator</b> typedef (defined in <a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>end</b>() (defined in <a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>end</b>() const  (defined in <a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>flattened2d</b>(const Container &c, typename Container::const_iterator b, typename Container::const_iterator e) (defined in <a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>flattened2d</b>(const Container &c) (defined in <a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>size</b>() const  (defined in <a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00066.html#a8b84f8f2cc4499f49d17141eaedc99c0">size_type</a> typedef</td><td class="entry"><a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a>)</td><td class="entry"><a class="el" href="a00066.html">tbb::interface6::flattened2d< Container ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00144.html#af695a8aa3d2a4f498067c662e287dd8f">current_thread_index</a>()</td><td class="entry"><a class="el" href="a00144.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00144.html#a07d87dff8c6116ee349684e10f754aeb">debug_wait_until_empty</a>()</td><td class="entry"><a class="el" href="a00144.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00144.html#a8034275ed2fffa68f70484043b90d406">enqueue</a>(const F &f)</td><td class="entry"><a class="el" href="a00144.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00144.html#a9a04ab4afb2d74b0317618f59ab49be7">enqueue</a>(const F &f, priority_t p)</td><td class="entry"><a class="el" href="a00144.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00144.html#af0c96f325b59d567b4c720f2830adde8">execute</a>(F &f)</td><td class="entry"><a class="el" href="a00144.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00144.html#ab8442c8e9e3e678349409e08cabc7ae2">execute</a>(const F &f)</td><td class="entry"><a class="el" href="a00144.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00144.html#a955131a79f8dc5a0a5c9ffa66a7e7140">initialize</a>()</td><td class="entry"><a class="el" href="a00144.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00144.html#ae7986309715cf224f5320dc06ee7d335">initialize</a>(int max_concurrency_, unsigned reserved_for_masters=1)</td><td class="entry"><a class="el" href="a00144.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00144.html#aace9ac1366eb3e0ec921da11699ba236">initialize</a>(attach)</td><td class="entry"><a class="el" href="a00144.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00144.html#ad85856cefa30d42155a2b122b03efd8c">is_active</a>() const </td><td class="entry"><a class="el" href="a00144.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00144.html#a2977b0fba9253e6cab31570f4992c998">max_concurrency</a>() const </td><td class="entry"><a class="el" href="a00144.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00144.html#abe92eac81ca849b110de69e6efd0e5aa">task_arena</a>(int max_concurrency_=automatic, unsigned reserved_for_masters=1)</td><td class="entry"><a class="el" href="a00144.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00144.html#a70d122b3e6e4760c6053c5c230c715ef">task_arena</a>(const task_arena &s)</td><td class="entry"><a class="el" href="a00144.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00144.html#a84dfcfd70fd08d383b8d4e8b96fa4a0d">task_arena</a>(attach)</td><td class="entry"><a class="el" href="a00144.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>tbb::internal::task_scheduler_observer_v3</b> (defined in <a class="el" href="a00144.html">tbb::interface7::task_arena</a>)</td><td class="entry"><a class="el" href="a00144.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>tbb::this_task_arena::max_concurrency</b> (defined in <a class="el" href="a00144.html">tbb::interface7::task_arena</a>)</td><td class="entry"><a class="el" href="a00144.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00144.html#aecb3eedeacfe8469a91c17525dae7fc9">terminate</a>()</td><td class="entry"><a class="el" href="a00144.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00144.html#a9ff5a35a219953a4f3d99b833fa5f683">~task_arena</a>()</td><td class="entry"><a class="el" href="a00144.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00394.html b/doc/html/a00394.html
index e798aaa..8949d6d 100644
--- a/doc/html/a00394.html
+++ b/doc/html/a00394.html
@@ -33,45 +33,28 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00093.html">memory_pool_allocator</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00068.html">global_control</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface6::memory_pool_allocator< T, P > Member List</div>  </div>
+<div class="title">tbb::interface9::global_control Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00068.html">tbb::interface9::global_control</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>address</b>(reference x) const  (defined in <a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>address</b>(const_reference x) const  (defined in <a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00093.html#a10b9888883a3dbd66e87c4a7f874ef28">allocate</a>(size_type n, const void *=0)</td><td class="entry"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_reference</b> typedef (defined in <a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00093.html#ac51b34ef90ecabdd2e0483e25603a15b">construct</a>(U *p, Args &&...args)</td><td class="entry"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>construct</b>(pointer p, value_type &&value) (defined in <a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>construct</b>(pointer p, const value_type &value) (defined in <a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00093.html#a9fcf288f2d653972d1bdc0c65abebed4">deallocate</a>(pointer p, size_type)</td><td class="entry"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00093.html#a2223b6469f88aadc432a4b3f88728d0f">destroy</a>(pointer p)</td><td class="entry"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>difference_type</b> typedef (defined in <a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00093.html#a2bded8e3fb2cec32b48771e7a1bbb838">max_size</a>() const </td><td class="entry"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>memory_pool_allocator</b> (defined in <a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>memory_pool_allocator</b>(pool_type &pool) (defined in <a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>memory_pool_allocator</b>(const memory_pool_allocator &src) (defined in <a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>memory_pool_allocator</b>(const memory_pool_allocator< U, P > &src) (defined in <a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_pool</b> (defined in <a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator!=</b> (defined in <a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator==</b> (defined in <a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pool_type</b> typedef (defined in <a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reference</b> typedef (defined in <a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>size_type</b> typedef (defined in <a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td class="entry"><a class="el" href="a00093.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>active_value</b>(parameter p) (defined in <a class="el" href="a00068.html">tbb::interface9::global_control</a>)</td><td class="entry"><a class="el" href="a00068.html">tbb::interface9::global_control</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>global_control</b>(parameter p, size_t value) (defined in <a class="el" href="a00068.html">tbb::interface9::global_control</a>)</td><td class="entry"><a class="el" href="a00068.html">tbb::interface9::global_control</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>max_allowed_parallelism</b> enum value (defined in <a class="el" href="a00068.html">tbb::interface9::global_control</a>)</td><td class="entry"><a class="el" href="a00068.html">tbb::interface9::global_control</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>parameter</b> enum name (defined in <a class="el" href="a00068.html">tbb::interface9::global_control</a>)</td><td class="entry"><a class="el" href="a00068.html">tbb::interface9::global_control</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>parameter_max</b> enum value (defined in <a class="el" href="a00068.html">tbb::interface9::global_control</a>)</td><td class="entry"><a class="el" href="a00068.html">tbb::interface9::global_control</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>thread_stack_size</b> enum value (defined in <a class="el" href="a00068.html">tbb::interface9::global_control</a>)</td><td class="entry"><a class="el" href="a00068.html">tbb::interface9::global_control</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~global_control</b>() (defined in <a class="el" href="a00068.html">tbb::interface9::global_control</a>)</td><td class="entry"><a class="el" href="a00068.html">tbb::interface9::global_control</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00395.html b/doc/html/a00395.html
index 5147990..40b17a1 100644
--- a/doc/html/a00395.html
+++ b/doc/html/a00395.html
@@ -33,22 +33,30 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00093.html">memory_pool_allocator</a></li><li class="navelem"><a class="el" href="a00122.html">rebind</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00050.html">critical_section_v4</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface6::memory_pool_allocator< T, P >::rebind< U > Member List</div>  </div>
+<div class="title">tbb::internal::critical_section_v4 Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00122.html">tbb::interface6::memory_pool_allocator< T, P >::rebind< U ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00050.html">tbb::internal::critical_section_v4</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>other</b> typedef (defined in <a class="el" href="a00122.html">tbb::interface6::memory_pool_allocator< T, P >::rebind< U ></a>)</td><td class="entry"><a class="el" href="a00122.html">tbb::interface6::memory_pool_allocator< T, P >::rebind< U ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>critical_section_v4</b>() (defined in <a class="el" href="a00050.html">tbb::internal::critical_section_v4</a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::internal::critical_section_v4</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_construct</b>() (defined in <a class="el" href="a00050.html">tbb::internal::critical_section_v4</a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::internal::critical_section_v4</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_fair_mutex</b> (defined in <a class="el" href="a00050.html">tbb::internal::critical_section_v4</a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::internal::critical_section_v4</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_recursive_mutex</b> (defined in <a class="el" href="a00050.html">tbb::internal::critical_section_v4</a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::internal::critical_section_v4</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_rw_mutex</b> (defined in <a class="el" href="a00050.html">tbb::internal::critical_section_v4</a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::internal::critical_section_v4</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>lock</b>() (defined in <a class="el" href="a00050.html">tbb::internal::critical_section_v4</a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::internal::critical_section_v4</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>try_lock</b>() (defined in <a class="el" href="a00050.html">tbb::internal::critical_section_v4</a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::internal::critical_section_v4</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>unlock</b>() (defined in <a class="el" href="a00050.html">tbb::internal::critical_section_v4</a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::internal::critical_section_v4</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~critical_section_v4</b>() (defined in <a class="el" href="a00050.html">tbb::internal::critical_section_v4</a>)</td><td class="entry"><a class="el" href="a00050.html">tbb::internal::critical_section_v4</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00396.html b/doc/html/a00396.html
index 9602550..a51f4b1 100644
--- a/doc/html/a00396.html
+++ b/doc/html/a00396.html
@@ -33,32 +33,23 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00094.html">memory_pool_allocator< void, P ></a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00050.html">critical_section_v4</a></li><li class="navelem"><a class="el" href="a00136.html">scoped_lock</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface6::memory_pool_allocator< void, P > Member List</div>  </div>
+<div class="title">tbb::internal::critical_section_v4::scoped_lock Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00094.html">tbb::interface6::memory_pool_allocator< void, P ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00136.html">tbb::internal::critical_section_v4::scoped_lock</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_pointer</b> typedef (defined in <a class="el" href="a00094.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>memory_pool_allocator</b> (defined in <a class="el" href="a00094.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>memory_pool_allocator</b>(pool_type &pool) (defined in <a class="el" href="a00094.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>memory_pool_allocator</b>(const memory_pool_allocator &src) (defined in <a class="el" href="a00094.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>memory_pool_allocator</b>(const memory_pool_allocator< U, P > &src) (defined in <a class="el" href="a00094.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_pool</b> (defined in <a class="el" href="a00094.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator!=</b> (defined in <a class="el" href="a00094.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator==</b> (defined in <a class="el" href="a00094.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>pointer</b> typedef (defined in <a class="el" href="a00094.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>pool_type</b> typedef (defined in <a class="el" href="a00094.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="a00094.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td class="entry"><a class="el" href="a00094.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scoped_lock</b>(critical_section_v4 &lock_me) (defined in <a class="el" href="a00136.html">tbb::internal::critical_section_v4::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00136.html">tbb::internal::critical_section_v4::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>~scoped_lock</b>() (defined in <a class="el" href="a00136.html">tbb::internal::critical_section_v4::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00136.html">tbb::internal::critical_section_v4::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00397.html b/doc/html/a00397.html
index 9fb437f..fcfcfb2 100644
--- a/doc/html/a00397.html
+++ b/doc/html/a00397.html
@@ -33,22 +33,22 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00094.html">memory_pool_allocator< void, P ></a></li><li class="navelem"><a class="el" href="a00123.html">rebind</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00149.html">task_handle_task</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface6::memory_pool_allocator< void, P >::rebind< U > Member List</div>  </div>
+<div class="title">tbb::internal::task_handle_task< F > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00123.html">tbb::interface6::memory_pool_allocator< void, P >::rebind< U ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00149.html">tbb::internal::task_handle_task< F ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>other</b> typedef (defined in <a class="el" href="a00123.html">tbb::interface6::memory_pool_allocator< void, P >::rebind< U ></a>)</td><td class="entry"><a class="el" href="a00123.html">tbb::interface6::memory_pool_allocator< void, P >::rebind< U ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>task_handle_task</b>(task_handle< F > &h) (defined in <a class="el" href="a00149.html">tbb::internal::task_handle_task< F ></a>)</td><td class="entry"><a class="el" href="a00149.html">tbb::internal::task_handle_task< F ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00398.html b/doc/html/a00398.html
index bcd7782..7340edc 100644
--- a/doc/html/a00398.html
+++ b/doc/html/a00398.html
@@ -33,23 +33,32 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00092.html">memory_pool</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00146.html">task_group_base</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface6::memory_pool< Alloc > Member List</div>  </div>
+<div class="title">tbb::internal::task_group_base Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00092.html">tbb::interface6::memory_pool< Alloc ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00146.html">tbb::internal::task_group_base</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00092.html#af4c36829a159eac04d630ac5a99b9354">memory_pool</a>(const Alloc &src=Alloc())</td><td class="entry"><a class="el" href="a00092.html">tbb::interface6::memory_pool< Alloc ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00092.html#ad2c7645b39b7280b1b3cf393d05fbaf7">~memory_pool</a>()</td><td class="entry"><a class="el" href="a00092.html">tbb::interface6::memory_pool< Alloc ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cancel</b>() (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_run</b>(F &f) (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_run_and_wait</b>(F &f) (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_canceling</b>() (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_context</b> (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_root</b> (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>owner</b>() (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>run</b>(task_handle< F > &h) (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>task_group_base</b>(uintptr_t traits=0) (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>wait</b>() (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~task_group_base</b>() __TBB_NOEXCEPT(false) (defined in <a class="el" href="a00146.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00146.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00399.html b/doc/html/a00399.html
index a3d2f88..4633bb8 100644
--- a/doc/html/a00399.html
+++ b/doc/html/a00399.html
@@ -33,23 +33,30 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00065.html">fixed_pool</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00152.html">task_scheduler_observer_v3</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface6::fixed_pool Member List</div>  </div>
+<div class="title">tbb::internal::task_scheduler_observer_v3 Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00065.html">tbb::interface6::fixed_pool</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00152.html">tbb::internal::task_scheduler_observer_v3</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00065.html#aa3811fe3d437ba2eefa926d52732491a">fixed_pool</a>(void *buf, size_t size)</td><td class="entry"><a class="el" href="a00065.html">tbb::interface6::fixed_pool</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00065.html#ab854a85575e5c1e9c9f4d3eafcc28044">~fixed_pool</a>()</td><td class="entry"><a class="el" href="a00065.html">tbb::interface6::fixed_pool</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>interface6::task_scheduler_observer</b> (defined in <a class="el" href="a00152.html">tbb::internal::task_scheduler_observer_v3</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00152.html#a31abaf256f7172f010cfb2259c7787bb">is_observing</a>() const </td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00152.html#a40209b347e3c82bb5bfda05941304309">observe</a>(bool state=true)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>observer_list</b> (defined in <a class="el" href="a00152.html">tbb::internal::task_scheduler_observer_v3</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>observer_proxy</b> (defined in <a class="el" href="a00152.html">tbb::internal::task_scheduler_observer_v3</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00152.html#af4282a27725fbe86052bb785bdd9c5d3">on_scheduler_entry</a>(bool)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00152.html#a657e90f833568e217b807d0122fa7668">on_scheduler_exit</a>(bool)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00152.html#a25bffb05efaaab36bc58590969e29745">task_scheduler_observer_v3</a>()</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00152.html#a151e475ebba39172fcc13f43bed426cc">~task_scheduler_observer_v3</a>()</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00400.html b/doc/html/a00400.html
index 2265068..deea926 100644
--- a/doc/html/a00400.html
+++ b/doc/html/a00400.html
@@ -33,23 +33,26 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00067.html">flow_control</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00156.html">tbb_exception_ptr</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface6::flow_control Member List</div>  </div>
+<div class="title">tbb::internal::tbb_exception_ptr Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00067.html">tbb::interface6::flow_control</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00156.html">tbb::internal::tbb_exception_ptr</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::concrete_filter</b> (defined in <a class="el" href="a00067.html">tbb::interface6::flow_control</a>)</td><td class="entry"><a class="el" href="a00067.html">tbb::interface6::flow_control</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>stop</b>() (defined in <a class="el" href="a00067.html">tbb::interface6::flow_control</a>)</td><td class="entry"><a class="el" href="a00067.html">tbb::interface6::flow_control</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocate</b>() (defined in <a class="el" href="a00156.html">tbb::internal::tbb_exception_ptr</a>)</td><td class="entry"><a class="el" href="a00156.html">tbb::internal::tbb_exception_ptr</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>allocate</b>(const tbb_exception &tag) (defined in <a class="el" href="a00156.html">tbb::internal::tbb_exception_ptr</a>)</td><td class="entry"><a class="el" href="a00156.html">tbb::internal::tbb_exception_ptr</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00156.html#abfbea91401d2594deb04ea331734171c">allocate</a>(captured_exception &src)</td><td class="entry"><a class="el" href="a00156.html">tbb::internal::tbb_exception_ptr</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00156.html#a38d3ca480e2758a67bcd7427b156daae">destroy</a>()</td><td class="entry"><a class="el" href="a00156.html">tbb::internal::tbb_exception_ptr</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00156.html#a1713aa9a6a3850049d34358397a8ed81">throw_self</a>()</td><td class="entry"><a class="el" href="a00156.html">tbb::internal::tbb_exception_ptr</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00401.html b/doc/html/a00401.html
index 39347df..3620704 100644
--- a/doc/html/a00401.html
+++ b/doc/html/a00401.html
@@ -33,30 +33,23 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00063.html">filter_t</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00162.html">thread_closure_base</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface6::filter_t< T, U > Member List</div>  </div>
+<div class="title">tbb::internal::thread_closure_base Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00063.html">tbb::interface6::filter_t< T, U ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00162.html">tbb::internal::thread_closure_base</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>clear</b>() (defined in <a class="el" href="a00063.html">tbb::interface6::filter_t< T, U ></a>)</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::filter_t< T, U ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>filter_t</b>() (defined in <a class="el" href="a00063.html">tbb::interface6::filter_t< T, U ></a>)</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::filter_t< T, U ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>filter_t</b>(const filter_t< T, U > &rhs) (defined in <a class="el" href="a00063.html">tbb::interface6::filter_t< T, U ></a>)</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::filter_t< T, U ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>filter_t</b>(tbb::filter::mode mode, const Body &body) (defined in <a class="el" href="a00063.html">tbb::interface6::filter_t< T, U ></a>)</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::filter_t< T, U ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::pipeline_proxy</b> (defined in <a class="el" href="a00063.html">tbb::interface6::filter_t< T, U ></a>)</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::filter_t< T, U ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00063.html#a21460fde704da22caa222778f5abb140">make_filter</a>(tbb::filter::mode, const Body &)</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::filter_t< T, U ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator&</b> (defined in <a class="el" href="a00063.html">tbb::interface6::filter_t< T, U ></a>)</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::filter_t< T, U ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const filter_t< T, U > &rhs) (defined in <a class="el" href="a00063.html">tbb::interface6::filter_t< T, U ></a>)</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::filter_t< T, U ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~filter_t</b>() (defined in <a class="el" href="a00063.html">tbb::interface6::filter_t< T, U ></a>)</td><td class="entry"><a class="el" href="a00063.html">tbb::interface6::filter_t< T, U ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator delete</b>(void *ptr) (defined in <a class="el" href="a00162.html">tbb::internal::thread_closure_base</a>)</td><td class="entry"><a class="el" href="a00162.html">tbb::internal::thread_closure_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator new</b>(size_t size) (defined in <a class="el" href="a00162.html">tbb::internal::thread_closure_base</a>)</td><td class="entry"><a class="el" href="a00162.html">tbb::internal::thread_closure_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00402.html b/doc/html/a00402.html
index 4645d71..3909c90 100644
--- a/doc/html/a00402.html
+++ b/doc/html/a00402.html
@@ -33,37 +33,26 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00128.html">runtime_loader</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00159.html">thread_closure_0</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface6::runtime_loader Member List</div>  </div>
+<div class="title">tbb::internal::thread_closure_0< F > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00128.html">tbb::interface6::runtime_loader</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00159.html">tbb::internal::thread_closure_0< F ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7afd928f63eb3da0980e746d58374b07c3">ec_bad_arg</a> enum value</td><td class="entry"><a class="el" href="a00128.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7a670e4d0a5a3c1bbcdff9e5ee16dc9c01">ec_bad_call</a> enum value</td><td class="entry"><a class="el" href="a00128.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7a71f874957c0322f499ba764dd0bb8732">ec_bad_lib</a> enum value</td><td class="entry"><a class="el" href="a00128.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7aae7497a49ceae69d06d6ab9fef636064">ec_bad_ver</a> enum value</td><td class="entry"><a class="el" href="a00128.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7a5e694560f3ada80d2cc25881b5ae43dd">ec_no_lib</a> enum value</td><td class="entry"><a class="el" href="a00128.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7afc7eba28f2fc936312f041cf85276434">ec_ok</a> enum value</td><td class="entry"><a class="el" href="a00128.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00128.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35">em_abort</a> enum value</td><td class="entry"><a class="el" href="a00128.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00128.html#ab85c82f9c0ccd91905f2795a79ac1295af9c9137d6acdb0fd37f1a92b5cdaeb36">em_status</a> enum value</td><td class="entry"><a class="el" href="a00128.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00128.html#ab85c82f9c0ccd91905f2795a79ac1295a17ec1019cffa635146eaefb042e28a2c">em_throw</a> enum value</td><td class="entry"><a class="el" href="a00128.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7">error_code</a> enum name</td><td class="entry"><a class="el" href="a00128.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00128.html#ab85c82f9c0ccd91905f2795a79ac1295">error_mode</a> enum name</td><td class="entry"><a class="el" href="a00128.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00128.html#ae2949e9adcac56a2cb9864437be8e22e">load</a>(char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX)</td><td class="entry"><a class="el" href="a00128.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00128.html#a2f87eaf99564c705aa140f2eb8848eaa">runtime_loader</a>(error_mode mode=em_abort)</td><td class="entry"><a class="el" href="a00128.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00128.html#a3e0932074d2f3ad04605e7e5da88c561">runtime_loader</a>(char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX, error_mode mode=em_abort)</td><td class="entry"><a class="el" href="a00128.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00128.html#a85bf9ee021a2076a3ac7cfd70aae7345">status</a>()</td><td class="entry"><a class="el" href="a00128.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00128.html#aa3b96f53e165e3d692c3c36292ba0737">~runtime_loader</a>()</td><td class="entry"><a class="el" href="a00128.html">tbb::interface6::runtime_loader</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>function</b> (defined in <a class="el" href="a00159.html">tbb::internal::thread_closure_0< F ></a>)</td><td class="entry"><a class="el" href="a00159.html">tbb::internal::thread_closure_0< F ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator delete</b>(void *ptr) (defined in <a class="el" href="a00162.html">tbb::internal::thread_closure_base</a>)</td><td class="entry"><a class="el" href="a00162.html">tbb::internal::thread_closure_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator new</b>(size_t size) (defined in <a class="el" href="a00162.html">tbb::internal::thread_closure_base</a>)</td><td class="entry"><a class="el" href="a00162.html">tbb::internal::thread_closure_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>start_routine</b>(void *c) (defined in <a class="el" href="a00159.html">tbb::internal::thread_closure_0< F ></a>)</td><td class="entry"><a class="el" href="a00159.html">tbb::internal::thread_closure_0< F ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>thread_closure_0</b>(const F &f) (defined in <a class="el" href="a00159.html">tbb::internal::thread_closure_0< F ></a>)</td><td class="entry"><a class="el" href="a00159.html">tbb::internal::thread_closure_0< F ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00403.html b/doc/html/a00403.html
index f0c0856..c32f250 100644
--- a/doc/html/a00403.html
+++ b/doc/html/a00403.html
@@ -33,36 +33,27 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><a class="el" href="a00157.html">task_scheduler_observer</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00160.html">thread_closure_1</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface6::task_scheduler_observer Member List</div>  </div>
+<div class="title">tbb::internal::thread_closure_1< F, X > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00157.html">tbb::interface6::task_scheduler_observer</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00160.html">tbb::internal::thread_closure_1< F, X ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allow_sleep</b> enum value (defined in <a class="el" href="a00157.html">tbb::interface6::task_scheduler_observer</a>)</td><td class="entry"><a class="el" href="a00157.html">tbb::interface6::task_scheduler_observer</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::observer_list</b> (defined in <a class="el" href="a00157.html">tbb::interface6::task_scheduler_observer</a>)</td><td class="entry"><a class="el" href="a00157.html">tbb::interface6::task_scheduler_observer</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal::observer_proxy</b> (defined in <a class="el" href="a00157.html">tbb::interface6::task_scheduler_observer</a>)</td><td class="entry"><a class="el" href="a00157.html">tbb::interface6::task_scheduler_observer</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::task_scheduler_observer_v3</b> (defined in <a class="el" href="a00157.html">tbb::interface6::task_scheduler_observer</a>)</td><td class="entry"><a class="el" href="a00157.html">tbb::interface6::task_scheduler_observer</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00158.html#a31abaf256f7172f010cfb2259c7787bb">is_observing</a>() const </td><td class="entry"><a class="el" href="a00158.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>keep_awake</b> enum value (defined in <a class="el" href="a00157.html">tbb::interface6::task_scheduler_observer</a>)</td><td class="entry"><a class="el" href="a00157.html">tbb::interface6::task_scheduler_observer</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00157.html#a2390325945912ee7ce58cd9700664ea4">may_sleep</a>()</td><td class="entry"><a class="el" href="a00157.html">tbb::interface6::task_scheduler_observer</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00157.html#ad5b33790cea52c61e1fb004a8ed26365">observe</a>(bool state=true)</td><td class="entry"><a class="el" href="a00157.html">tbb::interface6::task_scheduler_observer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00158.html#af4282a27725fbe86052bb785bdd9c5d3">on_scheduler_entry</a>(bool)</td><td class="entry"><a class="el" href="a00158.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00158.html#a657e90f833568e217b807d0122fa7668">on_scheduler_exit</a>(bool)</td><td class="entry"><a class="el" href="a00158.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00157.html#a89025b1e1d42e97d6fe114c0c331f730">task_scheduler_observer</a>(bool local=false)</td><td class="entry"><a class="el" href="a00157.html">tbb::interface6::task_scheduler_observer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00157.html#a36e7e0c466320029d5a3e50a573e04c1">task_scheduler_observer</a>(task_arena &a)</td><td class="entry"><a class="el" href="a00157.html">tbb::interface6::task_scheduler_observer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00158.html#a25bffb05efaaab36bc58590969e29745">task_scheduler_observer_v3</a>()</td><td class="entry"><a class="el" href="a00158.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00157.html#a9ef3f1853439b46e5a9db7fd1c0f9116">~task_scheduler_observer</a>()</td><td class="entry"><a class="el" href="a00157.html">tbb::interface6::task_scheduler_observer</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00158.html#a151e475ebba39172fcc13f43bed426cc">~task_scheduler_observer_v3</a>()</td><td class="entry"><a class="el" href="a00158.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>arg1</b> (defined in <a class="el" href="a00160.html">tbb::internal::thread_closure_1< F, X ></a>)</td><td class="entry"><a class="el" href="a00160.html">tbb::internal::thread_closure_1< F, X ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>function</b> (defined in <a class="el" href="a00160.html">tbb::internal::thread_closure_1< F, X ></a>)</td><td class="entry"><a class="el" href="a00160.html">tbb::internal::thread_closure_1< F, X ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator delete</b>(void *ptr) (defined in <a class="el" href="a00162.html">tbb::internal::thread_closure_base</a>)</td><td class="entry"><a class="el" href="a00162.html">tbb::internal::thread_closure_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator new</b>(size_t size) (defined in <a class="el" href="a00162.html">tbb::internal::thread_closure_base</a>)</td><td class="entry"><a class="el" href="a00162.html">tbb::internal::thread_closure_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00160.html#a33d533b3301c45708c6252d040f855a6">start_routine</a>(void *c)</td><td class="entry"><a class="el" href="a00160.html">tbb::internal::thread_closure_1< F, X ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>thread_closure_1</b>(const F &f, const X &x) (defined in <a class="el" href="a00160.html">tbb::internal::thread_closure_1< F, X ></a>)</td><td class="entry"><a class="el" href="a00160.html">tbb::internal::thread_closure_1< F, X ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00404.html b/doc/html/a00404.html
index f4783a0..bdb1ae2 100644
--- a/doc/html/a00404.html
+++ b/doc/html/a00404.html
@@ -33,32 +33,28 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00023.html">basic_operation_base</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00161.html">thread_closure_2</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface6::internal::basic_operation_base Member List</div>  </div>
+<div class="title">tbb::internal::thread_closure_2< F, X, Y > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00023.html">tbb::interface6::internal::basic_operation_base</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00161.html">tbb::internal::thread_closure_2< F, X, Y ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>agg_finished</b> enum value (defined in <a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>agg_waiting</b> enum value (defined in <a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>aggregator_operation</b>() (defined in <a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>aggregator_operation_status</b> enum name (defined in <a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>basic_handler</b> (defined in <a class="el" href="a00023.html">tbb::interface6::internal::basic_operation_base</a>)</td><td class="entry"><a class="el" href="a00023.html">tbb::interface6::internal::basic_operation_base</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>basic_operation_base</b>() (defined in <a class="el" href="a00023.html">tbb::interface6::internal::basic_operation_base</a>)</td><td class="entry"><a class="el" href="a00023.html">tbb::interface6::internal::basic_operation_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00014.html#ac7edadfe74f475783f3b429904e7010a">finish</a>()</td><td class="entry"><a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>next</b>() (defined in <a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_next</b>(aggregator_operation *n) (defined in <a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00014.html#adc0e032aa604f1da85ffc7ec269b157f">start</a>()</td><td class="entry"><a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~basic_operation_base</b>() (defined in <a class="el" href="a00023.html">tbb::interface6::internal::basic_operation_base</a>)</td><td class="entry"><a class="el" href="a00023.html">tbb::interface6::internal::basic_operation_base</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>arg1</b> (defined in <a class="el" href="a00161.html">tbb::internal::thread_closure_2< F, X, Y ></a>)</td><td class="entry"><a class="el" href="a00161.html">tbb::internal::thread_closure_2< F, X, Y ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>arg2</b> (defined in <a class="el" href="a00161.html">tbb::internal::thread_closure_2< F, X, Y ></a>)</td><td class="entry"><a class="el" href="a00161.html">tbb::internal::thread_closure_2< F, X, Y ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>function</b> (defined in <a class="el" href="a00161.html">tbb::internal::thread_closure_2< F, X, Y ></a>)</td><td class="entry"><a class="el" href="a00161.html">tbb::internal::thread_closure_2< F, X, Y ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator delete</b>(void *ptr) (defined in <a class="el" href="a00162.html">tbb::internal::thread_closure_base</a>)</td><td class="entry"><a class="el" href="a00162.html">tbb::internal::thread_closure_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator new</b>(size_t size) (defined in <a class="el" href="a00162.html">tbb::internal::thread_closure_base</a>)</td><td class="entry"><a class="el" href="a00162.html">tbb::internal::thread_closure_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00161.html#a29003179f98d768622c72b9ab5cfe8f6">start_routine</a>(void *c)</td><td class="entry"><a class="el" href="a00161.html">tbb::internal::thread_closure_2< F, X, Y ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>thread_closure_2</b>(const F &f, const X &x, const Y &y) (defined in <a class="el" href="a00161.html">tbb::internal::thread_closure_2< F, X, Y ></a>)</td><td class="entry"><a class="el" href="a00161.html">tbb::internal::thread_closure_2< F, X, Y ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00405.html b/doc/html/a00405.html
index e868bdb..3ddbd3e 100644
--- a/doc/html/a00405.html
+++ b/doc/html/a00405.html
@@ -33,32 +33,40 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00022.html">basic_operation</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00157.html">tbb_thread_v3</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface6::internal::basic_operation< Body > Member List</div>  </div>
+<div class="title">tbb::internal::tbb_thread_v3 Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00022.html">tbb::interface6::internal::basic_operation< Body ></a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>agg_finished</b> enum value (defined in <a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>agg_waiting</b> enum value (defined in <a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>aggregator_operation</b>() (defined in <a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>aggregator_operation_status</b> enum name (defined in <a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>basic_operation</b>(const Body &b) (defined in <a class="el" href="a00022.html">tbb::interface6::internal::basic_operation< Body ></a>)</td><td class="entry"><a class="el" href="a00022.html">tbb::interface6::internal::basic_operation< Body ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>basic_operation_base</b>() (defined in <a class="el" href="a00023.html">tbb::interface6::internal::basic_operation_base</a>)</td><td class="entry"><a class="el" href="a00023.html">tbb::interface6::internal::basic_operation_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00014.html#ac7edadfe74f475783f3b429904e7010a">finish</a>()</td><td class="entry"><a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>next</b>() (defined in <a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>set_next</b>(aggregator_operation *n) (defined in <a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a>)</td><td class="entry"><a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00014.html#adc0e032aa604f1da85ffc7ec269b157f">start</a>()</td><td class="entry"><a class="el" href="a00014.html">tbb::interface6::aggregator_operation</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~basic_operation_base</b>() (defined in <a class="el" href="a00023.html">tbb::interface6::internal::basic_operation_base</a>)</td><td class="entry"><a class="el" href="a00023.html">tbb::interface6::internal::basic_operation_base</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00157.html#a80a31a41708872af5557b907f129b19b">detach</a>()</td><td class="entry"><a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>get_id</b>() const __TBB_NOEXCEPT(true) (defined in <a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a>)</td><td class="entry"><a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00157.html#a23d7a420709b2e2b29b42dea897bd8bc">hardware_concurrency</a>() __TBB_NOEXCEPT(true)</td><td class="entry"><a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00157.html#a044c8727c51e921b0cc43a6b057eb559">join</a>()</td><td class="entry"><a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>joinable</b>() const __TBB_NOEXCEPT(true) (defined in <a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a>)</td><td class="entry"><a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>move_v3</b> (defined in <a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a>)</td><td class="entry"><a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>native_handle</b>() (defined in <a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a>)</td><td class="entry"><a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>native_handle_type</b> typedef (defined in <a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a>)</td><td class="entry"><a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>native_handle_type</b> typedef (defined in <a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a>)</td><td class="entry"><a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b> (defined in <a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a>)</td><td class="entry"><a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(tbb_thread_v3 &x) (defined in <a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a>)</td><td class="entry"><a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>swap</b>(tbb_thread_v3 &t) __TBB_NOEXCEPT(true) (defined in <a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a>)</td><td class="entry"><a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>tbb::swap</b> (defined in <a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a>)</td><td class="entry"><a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>tbb_thread_v3</b>(const tbb_thread_v3 &) (defined in <a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a>)</td><td class="entry"><a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00157.html#a15b84e454eb0179e010b90a88baa0933">tbb_thread_v3</a>() __TBB_NOEXCEPT(true)</td><td class="entry"><a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00157.html#a9c5587ab76ca1aa98bae7fe69a459466">tbb_thread_v3</a>(F f)</td><td class="entry"><a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00157.html#a672a5367e687635c869926bf8a986296">tbb_thread_v3</a>(F f, X x)</td><td class="entry"><a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00157.html#ac3f57678f2a289084a6d275f8f8fbc62">tbb_thread_v3</a>(F f, X x, Y y)</td><td class="entry"><a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~tbb_thread_v3</b>() (defined in <a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a>)</td><td class="entry"><a class="el" href="a00157.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00406.html b/doc/html/a00406.html
index 3b2a895..8a4745c 100644
--- a/doc/html/a00406.html
+++ b/doc/html/a00406.html
@@ -33,23 +33,33 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface6</b></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00021.html">basic_handler</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00157.html">tbb_thread_v3</a></li><li class="navelem"><a class="el" href="a00070.html">id</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface6::internal::basic_handler Member List</div>  </div>
+<div class="title">tbb::internal::tbb_thread_v3::id Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00021.html">tbb::interface6::internal::basic_handler</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00070.html">tbb::internal::tbb_thread_v3::id</a>, including all inherited members.</p>
 <table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>basic_handler</b>() (defined in <a class="el" href="a00021.html">tbb::interface6::internal::basic_handler</a>)</td><td class="entry"><a class="el" href="a00021.html">tbb::interface6::internal::basic_handler</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator()</b>(aggregator_operation *op_list) const  (defined in <a class="el" href="a00021.html">tbb::interface6::internal::basic_handler</a>)</td><td class="entry"><a class="el" href="a00021.html">tbb::interface6::internal::basic_handler</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>atomic_compare_and_swap</b> (defined in <a class="el" href="a00070.html">tbb::internal::tbb_thread_v3::id</a>)</td><td class="entry"><a class="el" href="a00070.html">tbb::internal::tbb_thread_v3::id</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>id</b>() __TBB_NOEXCEPT(true) (defined in <a class="el" href="a00070.html">tbb::internal::tbb_thread_v3::id</a>)</td><td class="entry"><a class="el" href="a00070.html">tbb::internal::tbb_thread_v3::id</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator!=</b> (defined in <a class="el" href="a00070.html">tbb::internal::tbb_thread_v3::id</a>)</td><td class="entry"><a class="el" href="a00070.html">tbb::internal::tbb_thread_v3::id</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator<</b> (defined in <a class="el" href="a00070.html">tbb::internal::tbb_thread_v3::id</a>)</td><td class="entry"><a class="el" href="a00070.html">tbb::internal::tbb_thread_v3::id</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator<<</b> (defined in <a class="el" href="a00070.html">tbb::internal::tbb_thread_v3::id</a>)</td><td class="entry"><a class="el" href="a00070.html">tbb::internal::tbb_thread_v3::id</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator<=</b> (defined in <a class="el" href="a00070.html">tbb::internal::tbb_thread_v3::id</a>)</td><td class="entry"><a class="el" href="a00070.html">tbb::internal::tbb_thread_v3::id</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator==</b> (defined in <a class="el" href="a00070.html">tbb::internal::tbb_thread_v3::id</a>)</td><td class="entry"><a class="el" href="a00070.html">tbb::internal::tbb_thread_v3::id</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator></b> (defined in <a class="el" href="a00070.html">tbb::internal::tbb_thread_v3::id</a>)</td><td class="entry"><a class="el" href="a00070.html">tbb::internal::tbb_thread_v3::id</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator>=</b> (defined in <a class="el" href="a00070.html">tbb::internal::tbb_thread_v3::id</a>)</td><td class="entry"><a class="el" href="a00070.html">tbb::internal::tbb_thread_v3::id</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>tbb_hasher</b> (defined in <a class="el" href="a00070.html">tbb::internal::tbb_thread_v3::id</a>)</td><td class="entry"><a class="el" href="a00070.html">tbb::internal::tbb_thread_v3::id</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>tbb_thread_v3</b> (defined in <a class="el" href="a00070.html">tbb::internal::tbb_thread_v3::id</a>)</td><td class="entry"><a class="el" href="a00070.html">tbb::internal::tbb_thread_v3::id</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>thread_get_id_v3</b> (defined in <a class="el" href="a00070.html">tbb::internal::tbb_thread_v3::id</a>)</td><td class="entry"><a class="el" href="a00070.html">tbb::internal::tbb_thread_v3::id</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00407.html b/doc/html/a00407.html
index ccd751c..788a412 100644
--- a/doc/html/a00407.html
+++ b/doc/html/a00407.html
@@ -33,35 +33,48 @@
   </div>
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface7</b></li><li class="navelem"><a class="el" href="a00150.html">task_arena</a></li>  </ul>
+<li class="navelem"><a class="el" href="a00233.html">tbb</a></li><li class="navelem"><b>strict_ppl</b></li><li class="navelem"><a class="el" href="a00039.html">concurrent_queue</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tbb::interface7::task_arena Member List</div>  </div>
+<div class="title">tbb::strict_ppl::concurrent_queue< T, A > Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="a00150.html">tbb::interface7::task_arena</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00150.html#af695a8aa3d2a4f498067c662e287dd8f">current_thread_index</a>()</td><td class="entry"><a class="el" href="a00150.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00150.html#a07d87dff8c6116ee349684e10f754aeb">debug_wait_until_empty</a>()</td><td class="entry"><a class="el" href="a00150.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00150.html#a8034275ed2fffa68f70484043b90d406">enqueue</a>(const F &f)</td><td class="entry"><a class="el" href="a00150.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00150.html#a9a04ab4afb2d74b0317618f59ab49be7">enqueue</a>(const F &f, priority_t p)</td><td class="entry"><a class="el" href="a00150.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00150.html#af0c96f325b59d567b4c720f2830adde8">execute</a>(F &f)</td><td class="entry"><a class="el" href="a00150.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00150.html#ab8442c8e9e3e678349409e08cabc7ae2">execute</a>(const F &f)</td><td class="entry"><a class="el" href="a00150.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00150.html#a955131a79f8dc5a0a5c9ffa66a7e7140">initialize</a>()</td><td class="entry"><a class="el" href="a00150.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00150.html#a754d60ba6981461eb7c86afd14d3da2a">initialize</a>(int max_concurrency, unsigned reserved_for_masters=1)</td><td class="entry"><a class="el" href="a00150.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00150.html#ad85856cefa30d42155a2b122b03efd8c">is_active</a>() const </td><td class="entry"><a class="el" href="a00150.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00150.html#a6035737ce1a8db376d06880dae9d0c40">task_arena</a>(int max_concurrency=automatic, unsigned reserved_for_masters=1)</td><td class="entry"><a class="el" href="a00150.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00150.html#a70d122b3e6e4760c6053c5c230c715ef">task_arena</a>(const task_arena &s)</td><td class="entry"><a class="el" href="a00150.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>tbb::internal::task_scheduler_observer_v3</b> (defined in <a class="el" href="a00150.html">tbb::interface7::task_arena</a>)</td><td class="entry"><a class="el" href="a00150.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00150.html#aecb3eedeacfe8469a91c17525dae7fc9">terminate</a>()</td><td class="entry"><a class="el" href="a00150.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00150.html#a9ff5a35a219953a4f3d99b833fa5f683">~task_arena</a>()</td><td class="entry"><a class="el" href="a00150.html">tbb::interface7::task_arena</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00039.html#acbdd1a5bd034358fb0774b322a66b1ed">allocator_type</a> typedef</td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00039.html#ad3384818fb6350a494d5ec62445e59ee">clear</a>()</td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00039.html#a49b2e16902577cd3174355be0fa684e5">concurrent_queue</a>(const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00039.html#a43ac953152e60815c09fe4a4d4a623a9">concurrent_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00039.html#ae918807d098d5d5b41cc6d606fa2e7a1">concurrent_queue</a>(const concurrent_queue &src, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00039.html#acc04574f4d7d41fd5cad779508394740">concurrent_queue</a>(concurrent_queue &&src)</td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_queue</b>(concurrent_queue &&src, const allocator_type &a) (defined in <a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_iterator</b> typedef (defined in <a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00039.html#a478c2b7f763b2e821e01cc14e13baf4c">const_reference</a> typedef</td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00039.html#a63b42d83a9ed13fc6741e0b4388b0e96">difference_type</a> typedef</td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>emplace</b>(Arguments &&...args) (defined in <a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00039.html#aeda3156929d0c250faed7b807ca6ab0e">empty</a>() const </td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00039.html#a7f2b39f350281590b86db906eca6c480">get_allocator</a>() const </td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::concurrent_queue_iterator</b> (defined in <a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00039.html#a9330ca6590980d80ef7b1ea3613a699a">push</a>(const T &source)</td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>push</b>(T &&source) (defined in <a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00039.html#ab26ddf11b15d61ac87e6c1ae67af92a2">reference</a> typedef</td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00039.html#a9f883e49afea16293ba92da779981bb8">size_type</a> typedef</td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="a00039.html#aabb1acef18196fa11ed7db8e046c3943">try_pop</a>(T &result)</td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>unsafe_begin</b>() (defined in <a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>unsafe_begin</b>() const  (defined in <a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>unsafe_end</b>() (defined in <a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>unsafe_end</b>() const  (defined in <a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00039.html#aad4b253ba595637b0b146eb6565556f2">unsafe_size</a>() const </td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="a00039.html#aeeee93a7ac2eecc80bbf3e857e900538">value_type</a> typedef</td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="a00039.html#aa0056b242f280f5e25332ce998f9f670">~concurrent_queue</a>()</td><td class="entry"><a class="el" href="a00039.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00408.html b/doc/html/a00408.html
deleted file mode 100644
index 27ca66a..0000000
--- a/doc/html/a00408.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>interface9</b></li><li class="navelem"><a class="el" href="a00069.html">global_control</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">tbb::interface9::global_control Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="a00069.html">tbb::interface9::global_control</a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>active_value</b>(parameter p) (defined in <a class="el" href="a00069.html">tbb::interface9::global_control</a>)</td><td class="entry"><a class="el" href="a00069.html">tbb::interface9::global_control</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>global_control</b>(parameter p, size_t value) (defined in <a class="el" href="a00069.html">tbb::interface9::global_control</a>)</td><td class="entry"><a class="el" href="a00069.html">tbb::interface9::global_control</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>max_allowed_parallelism</b> enum value (defined in <a class="el" href="a00069.html">tbb::interface9::global_control</a>)</td><td class="entry"><a class="el" href="a00069.html">tbb::interface9::global_control</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>parameter</b> enum name (defined in <a class="el" href="a00069.html">tbb::interface9::global_control</a>)</td><td class="entry"><a class="el" href="a00069.html">tbb::interface9::global_control</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>parameter_max</b> enum value (defined in <a class="el" href="a00069.html">tbb::interface9::global_control</a>)</td><td class="entry"><a class="el" href="a00069.html">tbb::interface9::global_control</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>thread_stack_size</b> enum value (defined in <a class="el" href="a00069.html">tbb::interface9::global_control</a>)</td><td class="entry"><a class="el" href="a00069.html">tbb::interface9::global_control</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~global_control</b>() (defined in <a class="el" href="a00069.html">tbb::interface9::global_control</a>)</td><td class="entry"><a class="el" href="a00069.html">tbb::interface9::global_control</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-</table></div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00409.html b/doc/html/a00409.html
deleted file mode 100644
index cc79ca6..0000000
--- a/doc/html/a00409.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00058.html">critical_section_v4</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">tbb::internal::critical_section_v4 Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="a00058.html">tbb::internal::critical_section_v4</a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>critical_section_v4</b>() (defined in <a class="el" href="a00058.html">tbb::internal::critical_section_v4</a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::internal::critical_section_v4</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_construct</b>() (defined in <a class="el" href="a00058.html">tbb::internal::critical_section_v4</a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::internal::critical_section_v4</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_fair_mutex</b> (defined in <a class="el" href="a00058.html">tbb::internal::critical_section_v4</a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::internal::critical_section_v4</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_recursive_mutex</b> (defined in <a class="el" href="a00058.html">tbb::internal::critical_section_v4</a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::internal::critical_section_v4</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_rw_mutex</b> (defined in <a class="el" href="a00058.html">tbb::internal::critical_section_v4</a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::internal::critical_section_v4</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>lock</b>() (defined in <a class="el" href="a00058.html">tbb::internal::critical_section_v4</a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::internal::critical_section_v4</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>try_lock</b>() (defined in <a class="el" href="a00058.html">tbb::internal::critical_section_v4</a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::internal::critical_section_v4</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>unlock</b>() (defined in <a class="el" href="a00058.html">tbb::internal::critical_section_v4</a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::internal::critical_section_v4</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~critical_section_v4</b>() (defined in <a class="el" href="a00058.html">tbb::internal::critical_section_v4</a>)</td><td class="entry"><a class="el" href="a00058.html">tbb::internal::critical_section_v4</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-</table></div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00410.html b/doc/html/a00410.html
deleted file mode 100644
index f42c026..0000000
--- a/doc/html/a00410.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00058.html">critical_section_v4</a></li><li class="navelem"><a class="el" href="a00136.html">scoped_lock</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">tbb::internal::critical_section_v4::scoped_lock Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="a00136.html">tbb::internal::critical_section_v4::scoped_lock</a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scoped_lock</b>(critical_section_v4 &lock_me) (defined in <a class="el" href="a00136.html">tbb::internal::critical_section_v4::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00136.html">tbb::internal::critical_section_v4::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>~scoped_lock</b>() (defined in <a class="el" href="a00136.html">tbb::internal::critical_section_v4::scoped_lock</a>)</td><td class="entry"><a class="el" href="a00136.html">tbb::internal::critical_section_v4::scoped_lock</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-</table></div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00411.html b/doc/html/a00411.html
deleted file mode 100644
index 0c56cf2..0000000
--- a/doc/html/a00411.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00155.html">task_handle_task</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">tbb::internal::task_handle_task< F > Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="a00155.html">tbb::internal::task_handle_task< F ></a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>task_handle_task</b>(task_handle< F > &h) (defined in <a class="el" href="a00155.html">tbb::internal::task_handle_task< F ></a>)</td><td class="entry"><a class="el" href="a00155.html">tbb::internal::task_handle_task< F ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-</table></div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00412.html b/doc/html/a00412.html
deleted file mode 100644
index ed3f158..0000000
--- a/doc/html/a00412.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00152.html">task_group_base</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">tbb::internal::task_group_base Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="a00152.html">tbb::internal::task_group_base</a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cancel</b>() (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal_run</b>(F &f) (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>internal_run_and_wait</b>(F &f) (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_canceling</b>() (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>my_context</b> (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>my_root</b> (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>owner</b>() (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>run</b>(task_handle< F > &h) (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>task_group_base</b>(uintptr_t traits=0) (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>wait</b>() (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~task_group_base</b>() __TBB_NOEXCEPT(false) (defined in <a class="el" href="a00152.html">tbb::internal::task_group_base</a>)</td><td class="entry"><a class="el" href="a00152.html">tbb::internal::task_group_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-</table></div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00413.html b/doc/html/a00413.html
deleted file mode 100644
index 7f8db40..0000000
--- a/doc/html/a00413.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00158.html">task_scheduler_observer_v3</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">tbb::internal::task_scheduler_observer_v3 Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="a00158.html">tbb::internal::task_scheduler_observer_v3</a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>interface6::task_scheduler_observer</b> (defined in <a class="el" href="a00158.html">tbb::internal::task_scheduler_observer_v3</a>)</td><td class="entry"><a class="el" href="a00158.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00158.html#a31abaf256f7172f010cfb2259c7787bb">is_observing</a>() const </td><td class="entry"><a class="el" href="a00158.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00158.html#a40209b347e3c82bb5bfda05941304309">observe</a>(bool state=true)</td><td class="entry"><a class="el" href="a00158.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>observer_list</b> (defined in <a class="el" href="a00158.html">tbb::internal::task_scheduler_observer_v3</a>)</td><td class="entry"><a class="el" href="a00158.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>observer_proxy</b> (defined in <a class="el" href="a00158.html">tbb::internal::task_scheduler_observer_v3</a>)</td><td class="entry"><a class="el" href="a00158.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00158.html#af4282a27725fbe86052bb785bdd9c5d3">on_scheduler_entry</a>(bool)</td><td class="entry"><a class="el" href="a00158.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00158.html#a657e90f833568e217b807d0122fa7668">on_scheduler_exit</a>(bool)</td><td class="entry"><a class="el" href="a00158.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00158.html#a25bffb05efaaab36bc58590969e29745">task_scheduler_observer_v3</a>()</td><td class="entry"><a class="el" href="a00158.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00158.html#a151e475ebba39172fcc13f43bed426cc">~task_scheduler_observer_v3</a>()</td><td class="entry"><a class="el" href="a00158.html">tbb::internal::task_scheduler_observer_v3</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-</table></div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00414.html b/doc/html/a00414.html
deleted file mode 100644
index 11efb59..0000000
--- a/doc/html/a00414.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00162.html">tbb_exception_ptr</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">tbb::internal::tbb_exception_ptr Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="a00162.html">tbb::internal::tbb_exception_ptr</a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocate</b>() (defined in <a class="el" href="a00162.html">tbb::internal::tbb_exception_ptr</a>)</td><td class="entry"><a class="el" href="a00162.html">tbb::internal::tbb_exception_ptr</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>allocate</b>(const tbb_exception &tag) (defined in <a class="el" href="a00162.html">tbb::internal::tbb_exception_ptr</a>)</td><td class="entry"><a class="el" href="a00162.html">tbb::internal::tbb_exception_ptr</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00162.html#abfbea91401d2594deb04ea331734171c">allocate</a>(captured_exception &src)</td><td class="entry"><a class="el" href="a00162.html">tbb::internal::tbb_exception_ptr</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00162.html#a38d3ca480e2758a67bcd7427b156daae">destroy</a>()</td><td class="entry"><a class="el" href="a00162.html">tbb::internal::tbb_exception_ptr</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00162.html#a1713aa9a6a3850049d34358397a8ed81">throw_self</a>()</td><td class="entry"><a class="el" href="a00162.html">tbb::internal::tbb_exception_ptr</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-</table></div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00415.html b/doc/html/a00415.html
deleted file mode 100644
index b091678..0000000
--- a/doc/html/a00415.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00169.html">thread_closure_base</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">tbb::internal::thread_closure_base Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="a00169.html">tbb::internal::thread_closure_base</a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator delete</b>(void *ptr) (defined in <a class="el" href="a00169.html">tbb::internal::thread_closure_base</a>)</td><td class="entry"><a class="el" href="a00169.html">tbb::internal::thread_closure_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator new</b>(size_t size) (defined in <a class="el" href="a00169.html">tbb::internal::thread_closure_base</a>)</td><td class="entry"><a class="el" href="a00169.html">tbb::internal::thread_closure_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-</table></div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00416.html b/doc/html/a00416.html
deleted file mode 100644
index dc1bc0a..0000000
--- a/doc/html/a00416.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00166.html">thread_closure_0</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">tbb::internal::thread_closure_0< F > Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="a00166.html">tbb::internal::thread_closure_0< F ></a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>function</b> (defined in <a class="el" href="a00166.html">tbb::internal::thread_closure_0< F ></a>)</td><td class="entry"><a class="el" href="a00166.html">tbb::internal::thread_closure_0< F ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator delete</b>(void *ptr) (defined in <a class="el" href="a00169.html">tbb::internal::thread_closure_base</a>)</td><td class="entry"><a class="el" href="a00169.html">tbb::internal::thread_closure_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator new</b>(size_t size) (defined in <a class="el" href="a00169.html">tbb::internal::thread_closure_base</a>)</td><td class="entry"><a class="el" href="a00169.html">tbb::internal::thread_closure_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>start_routine</b>(void *c) (defined in <a class="el" href="a00166.html">tbb::internal::thread_closure_0< F ></a>)</td><td class="entry"><a class="el" href="a00166.html">tbb::internal::thread_closure_0< F ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>thread_closure_0</b>(const F &f) (defined in <a class="el" href="a00166.html">tbb::internal::thread_closure_0< F ></a>)</td><td class="entry"><a class="el" href="a00166.html">tbb::internal::thread_closure_0< F ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-</table></div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00417.html b/doc/html/a00417.html
deleted file mode 100644
index c4352f2..0000000
--- a/doc/html/a00417.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00167.html">thread_closure_1</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">tbb::internal::thread_closure_1< F, X > Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="a00167.html">tbb::internal::thread_closure_1< F, X ></a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>arg1</b> (defined in <a class="el" href="a00167.html">tbb::internal::thread_closure_1< F, X ></a>)</td><td class="entry"><a class="el" href="a00167.html">tbb::internal::thread_closure_1< F, X ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>function</b> (defined in <a class="el" href="a00167.html">tbb::internal::thread_closure_1< F, X ></a>)</td><td class="entry"><a class="el" href="a00167.html">tbb::internal::thread_closure_1< F, X ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator delete</b>(void *ptr) (defined in <a class="el" href="a00169.html">tbb::internal::thread_closure_base</a>)</td><td class="entry"><a class="el" href="a00169.html">tbb::internal::thread_closure_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator new</b>(size_t size) (defined in <a class="el" href="a00169.html">tbb::internal::thread_closure_base</a>)</td><td class="entry"><a class="el" href="a00169.html">tbb::internal::thread_closure_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00167.html#a33d533b3301c45708c6252d040f855a6">start_routine</a>(void *c)</td><td class="entry"><a class="el" href="a00167.html">tbb::internal::thread_closure_1< F, X ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>thread_closure_1</b>(const F &f, const X &x) (defined in <a class="el" href="a00167.html">tbb::internal::thread_closure_1< F, X ></a>)</td><td class="entry"><a class="el" href="a00167.html">tbb::internal::thread_closure_1< F, X ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-</table></div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00418.html b/doc/html/a00418.html
deleted file mode 100644
index edf00b8..0000000
--- a/doc/html/a00418.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00168.html">thread_closure_2</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">tbb::internal::thread_closure_2< F, X, Y > Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="a00168.html">tbb::internal::thread_closure_2< F, X, Y ></a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>arg1</b> (defined in <a class="el" href="a00168.html">tbb::internal::thread_closure_2< F, X, Y ></a>)</td><td class="entry"><a class="el" href="a00168.html">tbb::internal::thread_closure_2< F, X, Y ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>arg2</b> (defined in <a class="el" href="a00168.html">tbb::internal::thread_closure_2< F, X, Y ></a>)</td><td class="entry"><a class="el" href="a00168.html">tbb::internal::thread_closure_2< F, X, Y ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>function</b> (defined in <a class="el" href="a00168.html">tbb::internal::thread_closure_2< F, X, Y ></a>)</td><td class="entry"><a class="el" href="a00168.html">tbb::internal::thread_closure_2< F, X, Y ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator delete</b>(void *ptr) (defined in <a class="el" href="a00169.html">tbb::internal::thread_closure_base</a>)</td><td class="entry"><a class="el" href="a00169.html">tbb::internal::thread_closure_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator new</b>(size_t size) (defined in <a class="el" href="a00169.html">tbb::internal::thread_closure_base</a>)</td><td class="entry"><a class="el" href="a00169.html">tbb::internal::thread_closure_base</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00168.html#a29003179f98d768622c72b9ab5cfe8f6">start_routine</a>(void *c)</td><td class="entry"><a class="el" href="a00168.html">tbb::internal::thread_closure_2< F, X, Y ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>thread_closure_2</b>(const F &f, const X &x, const Y &y) (defined in <a class="el" href="a00168.html">tbb::internal::thread_closure_2< F, X, Y ></a>)</td><td class="entry"><a class="el" href="a00168.html">tbb::internal::thread_closure_2< F, X, Y ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-</table></div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00419.html b/doc/html/a00419.html
deleted file mode 100644
index f3c6ecb..0000000
--- a/doc/html/a00419.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00164.html">tbb_thread_v3</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">tbb::internal::tbb_thread_v3 Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a>, including all inherited members.</p>
-<table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00164.html#a80a31a41708872af5557b907f129b19b">detach</a>()</td><td class="entry"><a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>get_id</b>() const __TBB_NOEXCEPT(true) (defined in <a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00164.html#a23d7a420709b2e2b29b42dea897bd8bc">hardware_concurrency</a>() __TBB_NOEXCEPT(true)</td><td class="entry"><a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00164.html#a044c8727c51e921b0cc43a6b057eb559">join</a>()</td><td class="entry"><a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>joinable</b>() const __TBB_NOEXCEPT(true) (defined in <a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>move_v3</b> (defined in <a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>native_handle</b>() (defined in <a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>native_handle_type</b> typedef (defined in <a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>native_handle_type</b> typedef (defined in <a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b> (defined in <a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(tbb_thread_v3 &x) (defined in <a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>swap</b>(tbb_thread_v3 &t) __TBB_NOEXCEPT(true) (defined in <a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>tbb::swap</b> (defined in <a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>tbb_thread_v3</b>(const tbb_thread_v3 &) (defined in <a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00164.html#a15b84e454eb0179e010b90a88baa0933">tbb_thread_v3</a>() __TBB_NOEXCEPT(true)</td><td class="entry"><a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00164.html#a9c5587ab76ca1aa98bae7fe69a459466">tbb_thread_v3</a>(F f)</td><td class="entry"><a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00164.html#a672a5367e687635c869926bf8a986296">tbb_thread_v3</a>(F f, X x)</td><td class="entry"><a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00164.html#ac3f57678f2a289084a6d275f8f8fbc62">tbb_thread_v3</a>(F f, X x, Y y)</td><td class="entry"><a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~tbb_thread_v3</b>() (defined in <a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a>)</td><td class="entry"><a class="el" href="a00164.html">tbb::internal::tbb_thread_v3</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-</table></div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00420.html b/doc/html/a00420.html
deleted file mode 100644
index 6147f02..0000000
--- a/doc/html/a00420.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>internal</b></li><li class="navelem"><a class="el" href="a00164.html">tbb_thread_v3</a></li><li class="navelem"><a class="el" href="a00073.html">id</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">tbb::internal::tbb_thread_v3::id Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="a00073.html">tbb::internal::tbb_thread_v3::id</a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>id</b>() __TBB_NOEXCEPT(true) (defined in <a class="el" href="a00073.html">tbb::internal::tbb_thread_v3::id</a>)</td><td class="entry"><a class="el" href="a00073.html">tbb::internal::tbb_thread_v3::id</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator!=</b> (defined in <a class="el" href="a00073.html">tbb::internal::tbb_thread_v3::id</a>)</td><td class="entry"><a class="el" href="a00073.html">tbb::internal::tbb_thread_v3::id</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator<</b> (defined in <a class="el" href="a00073.html">tbb::internal::tbb_thread_v3::id</a>)</td><td class="entry"><a class="el" href="a00073.html">tbb::internal::tbb_thread_v3::id</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator<<</b> (defined in <a class="el" href="a00073.html">tbb::internal::tbb_thread_v3::id</a>)</td><td class="entry"><a class="el" href="a00073.html">tbb::internal::tbb_thread_v3::id</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator<=</b> (defined in <a class="el" href="a00073.html">tbb::internal::tbb_thread_v3::id</a>)</td><td class="entry"><a class="el" href="a00073.html">tbb::internal::tbb_thread_v3::id</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator==</b> (defined in <a class="el" href="a00073.html">tbb::internal::tbb_thread_v3::id</a>)</td><td class="entry"><a class="el" href="a00073.html">tbb::internal::tbb_thread_v3::id</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator></b> (defined in <a class="el" href="a00073.html">tbb::internal::tbb_thread_v3::id</a>)</td><td class="entry"><a class="el" href="a00073.html">tbb::internal::tbb_thread_v3::id</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>operator>=</b> (defined in <a class="el" href="a00073.html">tbb::internal::tbb_thread_v3::id</a>)</td><td class="entry"><a class="el" href="a00073.html">tbb::internal::tbb_thread_v3::id</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>tbb_thread_v3</b> (defined in <a class="el" href="a00073.html">tbb::internal::tbb_thread_v3::id</a>)</td><td class="entry"><a class="el" href="a00073.html">tbb::internal::tbb_thread_v3::id</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>thread_get_id_v3</b> (defined in <a class="el" href="a00073.html">tbb::internal::tbb_thread_v3::id</a>)</td><td class="entry"><a class="el" href="a00073.html">tbb::internal::tbb_thread_v3::id</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-</table></div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00421.html b/doc/html/a00421.html
deleted file mode 100644
index 8d7ecb6..0000000
--- a/doc/html/a00421.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.4"/>
-<title>Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.4 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="a00240.html">tbb</a></li><li class="navelem"><b>strict_ppl</b></li><li class="navelem"><a class="el" href="a00046.html">concurrent_queue</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">tbb::strict_ppl::concurrent_queue< T, A > Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a>, including all inherited members.</p>
-<table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="a00046.html#acbdd1a5bd034358fb0774b322a66b1ed">allocator_type</a> typedef</td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00046.html#ad3384818fb6350a494d5ec62445e59ee">clear</a>()</td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00046.html#a49b2e16902577cd3174355be0fa684e5">concurrent_queue</a>(const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00046.html#a43ac953152e60815c09fe4a4d4a623a9">concurrent_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00046.html#ae918807d098d5d5b41cc6d606fa2e7a1">concurrent_queue</a>(const concurrent_queue &src, const allocator_type &a=allocator_type())</td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00046.html#acc04574f4d7d41fd5cad779508394740">concurrent_queue</a>(concurrent_queue &&src)</td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>concurrent_queue</b>(concurrent_queue &&src, const allocator_type &a) (defined in <a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>const_iterator</b> typedef (defined in <a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00046.html#a478c2b7f763b2e821e01cc14e13baf4c">const_reference</a> typedef</td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00046.html#a63b42d83a9ed13fc6741e0b4388b0e96">difference_type</a> typedef</td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>emplace</b>(Arguments &&...args) (defined in <a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00046.html#aeda3156929d0c250faed7b807ca6ab0e">empty</a>() const </td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00046.html#a7f2b39f350281590b86db906eca6c480">get_allocator</a>() const </td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>internal::concurrent_queue_iterator</b> (defined in <a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00046.html#a9330ca6590980d80ef7b1ea3613a699a">push</a>(const T &source)</td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>push</b>(T &&source) (defined in <a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00046.html#ab26ddf11b15d61ac87e6c1ae67af92a2">reference</a> typedef</td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00046.html#a9f883e49afea16293ba92da779981bb8">size_type</a> typedef</td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="a00046.html#aabb1acef18196fa11ed7db8e046c3943">try_pop</a>(T &result)</td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>unsafe_begin</b>() (defined in <a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>unsafe_begin</b>() const  (defined in <a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>unsafe_end</b>() (defined in <a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>unsafe_end</b>() const  (defined in <a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00046.html#aad4b253ba595637b0b146eb6565556f2">unsafe_size</a>() const </td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="a00046.html#aeeee93a7ac2eecc80bbf3e857e900538">value_type</a> typedef</td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="a00046.html#aa0056b242f280f5e25332ce998f9f670">~concurrent_queue</a>()</td><td class="entry"><a class="el" href="a00046.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="entry"></td></tr>
-</table></div><!-- contents -->
-<hr>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/annotated.html b/doc/html/annotated.html
index c92af35..b136446 100644
--- a/doc/html/annotated.html
+++ b/doc/html/annotated.html
@@ -39,194 +39,187 @@
 <div class="contents">
 <div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
 <div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span><span onclick="javascript:toggleLevel(4);">4</span><span onclick="javascript:toggleLevel(5);">5</span>]</div><table class="directory">
-<tr id="row_0_" class="even"><td class="entry"><img id="arr_0_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('0_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><a class="el" href="a00237.html" target="_self">rml</a></td><td class="desc">The namespace rml contains components of low-level memory pool interface </td></tr>
-<tr id="row_0_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00095.html" target="_self">MemPoolPolicy</a></td><td class="desc"></td></tr>
-<tr id="row_1_" class="even"><td class="entry"><img id="arr_1_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><a class="el" href="a00240.html" target="_self">tbb</a></td><td class="desc">The namespace tbb contains all components of the library </td></tr>
+<tr id="row_0_" class="even"><td class="entry"><img id="arr_0_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('0_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><a class="el" href="a00230.html" target="_self">rml</a></td><td class="desc">The namespace rml contains components of low-level memory pool interface </td></tr>
+<tr id="row_0_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00079.html" target="_self">MemPoolPolicy</a></td><td class="desc"></td></tr>
+<tr id="row_1_" class="even"><td class="entry"><img id="arr_1_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><a class="el" href="a00233.html" target="_self">tbb</a></td><td class="desc">The namespace tbb contains all components of the library </td></tr>
 <tr id="row_1_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_0_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_0_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>flow</b></td><td class="desc"></td></tr>
-<tr id="row_1_0_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_0_0_" src="ftv2plastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('1_0_0_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>interface7</b></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_0_0_" src="ftv2plastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('1_0_0_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>interface9</b></td><td class="desc"></td></tr>
 <tr id="row_1_0_0_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img id="arr_1_0_0_0_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_0_0_0_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>internal</b></td><td class="desc"></td></tr>
-<tr id="row_1_0_0_0_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00149.html" target="_self">successor [...]
-<tr id="row_1_0_0_0_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00027.html" target="_self">broadcast [...]
-<tr id="row_1_0_0_0_2_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00126.html" target="_self">round_rob [...]
-<tr id="row_1_0_0_0_3_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00059.html" target="_self">edge_cont [...]
-<tr id="row_1_0_0_0_4_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00016.html" target="_self">async [...]
-<tr id="row_1_0_0_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00103.html" target="_self">null_type</a></td><td class="desc"></td></tr>
-<tr id="row_1_0_0_2_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00055.html" target="_self">continue_msg</a></td><td class="desc">An empty class used for messages t [...]
-<tr id="row_1_0_0_3_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00142.html" target="_self">sender</a></td><td class="desc">Pure virtual template class that defines [...]
-<tr id="row_1_0_0_4_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00124.html" target="_self">receiver</a></td><td class="desc">Pure virtual template class that defin [...]
-<tr id="row_1_0_0_5_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00091.html" target="_self">limiter_node</a></td><td class="desc">Forwards messages only if the thre [...]
-<tr id="row_1_0_0_6_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00127.html" target="_self">run_and_put_task</a></td><td class="desc"></td></tr>
-<tr id="row_1_0_0_7_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00057.html" target="_self">continue_receiver</a></td><td class="desc">Base class for receivers of c [...]
-<tr id="row_1_0_0_8_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00071.html" target="_self">graph_iterator</a></td><td class="desc"></td></tr>
-<tr id="row_1_0_0_9_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00070.html" target="_self">graph</a></td><td class="desc">The graph class </td></tr>
-<tr id="row_1_0_0_10_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00072.html" target="_self">graph_node</a></td><td class="desc">The base of all graph nodes </td></tr>
-<tr id="row_1_0_0_11_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00144.html" target="_self">source_node</a></td><td class="desc">An executable node that acts as a  [...]
-<tr id="row_1_0_0_12_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00068.html" target="_self">function_node</a></td><td class="desc">Implements a function node that  [...]
-<tr id="row_1_0_0_13_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00098.html" target="_self">multifunction_node</a></td><td class="desc">Implements a function node  [...]
-<tr id="row_1_0_0_14_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00147.html" target="_self">split_node</a></td><td class="desc">Split_node: accepts a tuple as inpu [...]
-<tr id="row_1_0_0_15_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00056.html" target="_self">continue_node</a></td><td class="desc">Implements an executable node th [...]
-<tr id="row_1_0_0_16_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00104.html" target="_self">overwrite_node</a></td><td class="desc"></td></tr>
-<tr id="row_1_0_0_17_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00176.html" target="_self">write_once_node</a></td><td class="desc"></td></tr>
-<tr id="row_1_0_0_18_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00028.html" target="_self">broadcast_node</a></td><td class="desc">Forwards messages of type T to  [...]
-<tr id="row_1_0_0_19_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img id="arr_1_0_0_19_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_0_0_19_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00030.html" target="_self">buffer_node</a>< [...]
-<tr id="row_1_0_0_19_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00031.html" target="_self">buff [...]
-<tr id="row_1_0_0_20_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00110.html" target="_self">queue_node</a></td><td class="desc">Forwards messages in FIFO order </td></tr>
-<tr id="row_1_0_0_21_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00143.html" target="_self">sequencer_node</a></td><td class="desc">Forwards messages in sequence o [...]
-<tr id="row_1_0_0_22_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00109.html" target="_self">priority_queue_node</a></td><td class="desc">Forwards messages in prior [...]
-<tr id="row_1_0_0_23_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00087.html" target="_self">join_node</a></td><td class="desc"></td></tr>
-<tr id="row_1_0_0_24_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00089.html" target="_self">join_node< OutputTuple, reserving ></a></td><td class="desc"></td></tr>
-<tr id="row_1_0_0_25_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00088.html" target="_self">join_node< OutputTuple, queueing ></a></td><td class="desc"></td></tr>
-<tr id="row_1_0_0_26_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00090.html" target="_self">join_node< OutputTuple, tag_matching ></a></td><td class="desc">< [...]
-<tr id="row_1_0_0_27_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00075.html" target="_self">indexer_node</a></td><td class="desc"></td></tr>
-<tr id="row_1_0_0_28_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00076.html" target="_self">indexer_node< T0 ></a></td><td class="desc"></td></tr>
-<tr id="row_1_0_0_29_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00077.html" target="_self">indexer_node< T0, T1 ></a></td><td class="desc"></td></tr>
-<tr id="row_1_0_0_30_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00078.html" target="_self">indexer_node< T0, T1, T2 ></a></td><td class="desc"></td></tr>
-<tr id="row_1_0_0_31_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00079.html" target="_self">indexer_node< T0, T1, T2, T3 ></a></td><td class="desc"></td></tr>
-<tr id="row_1_0_0_32_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00080.html" target="_self">indexer_node< T0, T1, T2, T3, T4 ></a></td><td class="desc"></td></tr>
-<tr id="row_1_0_0_33_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00081.html" target="_self">indexer_node< T0, T1, T2, T3, T4, T5 ></a></td><td class="desc">< [...]
-<tr id="row_1_0_0_34_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00082.html" target="_self">indexer_node< T0, T1, T2, T3, T4, T5, T6 ></a></td><td class="des [...]
-<tr id="row_1_0_0_35_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00083.html" target="_self">indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 ></a></td><td class= [...]
-<tr id="row_1_0_0_36_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00084.html" target="_self">indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 ></a></td><td cl [...]
-<tr id="row_1_0_0_37_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00037.html" target="_self">composite_node</a></td><td class="desc"></td></tr>
-<tr id="row_1_0_0_38_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00038.html" target="_self">composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::t [...]
-<tr id="row_1_0_0_39_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00039.html" target="_self">composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::t [...]
-<tr id="row_1_0_0_40_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00040.html" target="_self">composite_node< tbb::flow::tuple<>, tbb::flow::tuple< Outpu [...]
-<tr id="row_1_0_0_41_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00017.html" target="_self">async_node</a></td><td class="desc">Implements a async node </td></tr>
+<tr id="row_1_0_0_0_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00143.html" target="_self">successor [...]
+<tr id="row_1_0_0_0_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00025.html" target="_self">broadcast [...]
+<tr id="row_1_0_0_0_2_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00123.html" target="_self">round_rob [...]
+<tr id="row_1_0_0_0_3_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00105.html" target="_self">predecess [...]
+<tr id="row_1_0_0_0_4_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00122.html" target="_self">reservabl [...]
+<tr id="row_1_0_0_0_5_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00056.html" target="_self">edge_cont [...]
+<tr id="row_1_0_0_0_6_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00165.html" target="_self">untyped_s [...]
+<tr id="row_1_0_0_0_7_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00164.html" target="_self">untyp [...]
+<tr id="row_1_0_0_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00086.html" target="_self">null_type</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_2_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00048.html" target="_self">continue_msg</a></td><td class="desc">An empty class used for messages t [...]
+<tr id="row_1_0_0_3_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00139.html" target="_self">sender</a></td><td class="desc">Pure virtual template class that defines [...]
+<tr id="row_1_0_0_4_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00119.html" target="_self">receiver</a></td><td class="desc">Pure virtual template class that defin [...]
+<tr id="row_1_0_0_5_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00075.html" target="_self">limiter_node</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_6_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00124.html" target="_self">run_and_put_task</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_7_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00049.html" target="_self">continue_receiver</a></td><td class="desc">Base class for receivers of c [...]
+<tr id="row_1_0_0_8_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00069.html" target="_self">graph_proxy</a></td><td class="desc">Pure virtual template classes that  [...]
+<tr id="row_1_0_0_9_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00120.html" target="_self">receiver_gateway</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_10_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00088.html" target="_self">opencl_buffer_impl</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_11_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00099.html" target="_self">opencl_program</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_12_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00093.html" target="_self">opencl_graph</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_13_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img id="arr_1_0_0_13_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_0_0_13_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00091.html" target="_self">opencl_factory</ [...]
+<tr id="row_1_0_0_13_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00074.html" target="_self">kern [...]
+<tr id="row_1_0_0_14_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00053.html" target="_self">dependency_msg</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_15_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00089.html" target="_self">opencl_device</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_16_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00090.html" target="_self">opencl_device_list</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_17_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00031.html" target="_self">callback_base</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_18_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00030.html" target="_self">callback</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_19_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00094.html" target="_self">opencl_memory</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_20_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00101.html" target="_self">opencl_subbuffer</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_21_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00087.html" target="_self">opencl_buffer</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_22_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00100.html" target="_self">opencl_range</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_23_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00052.html" target="_self">default_opencl_factory_device_filter</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_24_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00051.html" target="_self">default_opencl_factory</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_25_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00092.html" target="_self">opencl_foundation</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_26_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00095.html" target="_self">opencl_node</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_27_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00098.html" target="_self">opencl_node< tuple< Ports...>, JP, Factory ></a></td><td cl [...]
+<tr id="row_1_0_0_28_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00097.html" target="_self">opencl_node< tuple< Ports...>, JP ></a></td><td class="desc [...]
+<tr id="row_1_0_0_29_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00096.html" target="_self">opencl_node< tuple< Ports...> ></a></td><td class="desc"></ [...]
+<tr id="row_1_0_0_30_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00066.html" target="_self">gfx_buffer</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_31_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00065.html" target="_self">gfx_async_msg</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_32_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img id="arr_1_0_0_32_" src="ftv2plastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('1_0_0_32_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00067.html" target="_self">gfx_factory< [...]
+<tr id="row_1_0_0_32_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00054.html" target="_self">device [...]
+<tr id="row_1_0_0_32_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00055.html" target="_self">du [...]
 <tr id="row_1_1_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_1_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_1_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>interface5</b></td><td class="desc"></td></tr>
 <tr id="row_1_1_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_1_0_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_1_0_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>internal</b></td><td class="desc"></td></tr>
-<tr id="row_1_1_0_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00171.html" target="_self">use_element_copy_constructor</a></td><td class="desc"></td></tr>
-<tr id="row_1_1_0_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00172.html" target="_self">use_element_copy_constructor< T, false ></a></td><td class="desc"></td></tr>
-<tr id="row_1_1_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_1_1_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_1_1_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00043.html" target="_self">concurrent_hash_map</a></td><td class="desc">Unordered map from Key to T </td></tr>
-<tr id="row_1_1_1_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00010.html" target="_self">accessor</a></td><td class="desc">Allows write access to elements and combines data acc [...]
-<tr id="row_1_1_1_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00011.html" target="_self">accessor_not_used</a></td><td class="desc"></td></tr>
-<tr id="row_1_1_1_2_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00029.html" target="_self">bucket_accessor</a></td><td class="desc">Bucket accessor is to find, rehash, acquire a  [...]
-<tr id="row_1_1_1_3_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00034.html" target="_self">call_clear_on_leave</a></td><td class="desc"></td></tr>
-<tr id="row_1_1_1_4_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00054.html" target="_self">const_accessor</a></td><td class="desc">Combines data access, locking, and garbage coll [...]
-<tr id="row_1_1_1_5_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00100.html" target="_self">node</a></td><td class="desc"></td></tr>
-<tr id="row_1_1_2_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00045.html" target="_self">concurrent_priority_queue</a></td><td class="desc">Concurrent priority queue </td></tr>
-<tr id="row_1_1_3_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_1_3_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_1_3_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00048.html" target="_self">concurrent_unordered_map_traits</a></td><td class="desc"></td></tr>
-<tr id="row_1_1_3_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00174.html" target="_self">value_compare</a></td><td class="desc"></td></tr>
-<tr id="row_1_1_4_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00047.html" target="_self">concurrent_unordered_map</a></td><td class="desc"></td></tr>
-<tr id="row_1_1_5_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00049.html" target="_self">concurrent_unordered_multimap</a></td><td class="desc"></td></tr>
-<tr id="row_1_1_6_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00052.html" target="_self">concurrent_unordered_set_traits</a></td><td class="desc"></td></tr>
-<tr id="row_1_1_7_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00051.html" target="_self">concurrent_unordered_set</a></td><td class="desc"></td></tr>
-<tr id="row_1_1_8_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00050.html" target="_self">concurrent_unordered_multiset</a></td><td class="desc"></td></tr>
-<tr id="row_1_1_9_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_1_9_" src="ftv2plastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('1_1_9_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00113.html" target="_self">reader_writer_lock</a></td><td class="desc">Writer-preference reader-writer lock with local-only  [...]
-<tr id="row_1_1_9_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00133.html" target="_self">scoped_lock</a></td><td class="desc">The scoped lock pattern for write locks </td></tr>
-<tr id="row_1_1_9_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00141.html" target="_self">scoped_lock_read</a></td><td class="desc">The scoped lock pattern for read locks  [...]
+<tr id="row_1_1_0_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00166.html" target="_self">use_element_copy_constructor</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_0_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00167.html" target="_self">use_element_copy_constructor< T, false ></a></td><td class="desc"></td></tr>
+<tr id="row_1_1_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_1_1_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_1_1_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00036.html" target="_self">concurrent_hash_map</a></td><td class="desc">Unordered map from Key to T </td></tr>
+<tr id="row_1_1_1_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00009.html" target="_self">accessor</a></td><td class="desc">Allows write access to elements and combines data acc [...]
+<tr id="row_1_1_1_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00010.html" target="_self">accessor_not_used</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_1_2_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00026.html" target="_self">bucket_accessor</a></td><td class="desc">Bucket accessor is to find, rehash, acquire a  [...]
+<tr id="row_1_1_1_3_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00029.html" target="_self">call_clear_on_leave</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_1_4_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00047.html" target="_self">const_accessor</a></td><td class="desc">Combines data access, locking, and garbage coll [...]
+<tr id="row_1_1_1_5_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00083.html" target="_self">node</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_2_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00038.html" target="_self">concurrent_priority_queue</a></td><td class="desc">Concurrent priority queue </td></tr>
+<tr id="row_1_1_3_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00041.html" target="_self">concurrent_unordered_map_traits</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_4_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00040.html" target="_self">concurrent_unordered_map</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_5_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00042.html" target="_self">concurrent_unordered_multimap</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_6_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00045.html" target="_self">concurrent_unordered_set_traits</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_7_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00044.html" target="_self">concurrent_unordered_set</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_8_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00043.html" target="_self">concurrent_unordered_multiset</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_9_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_1_9_" src="ftv2plastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('1_1_9_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00108.html" target="_self">reader_writer_lock</a></td><td class="desc">Writer-preference reader-writer lock with local-only  [...]
+<tr id="row_1_1_9_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00132.html" target="_self">scoped_lock</a></td><td class="desc">The scoped lock pattern for write locks </td></tr>
+<tr id="row_1_1_9_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00138.html" target="_self">scoped_lock_read</a></td><td class="desc">The scoped lock pattern for read locks  [...]
 <tr id="row_1_2_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_2_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_2_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>interface6</b></td><td class="desc"></td></tr>
 <tr id="row_1_2_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_2_0_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_2_0_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>internal</b></td><td class="desc"></td></tr>
-<tr id="row_1_2_0_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00023.html" target="_self">basic_operation_base</a></td><td class="desc"></td></tr>
-<tr id="row_1_2_0_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00022.html" target="_self">basic_operation</a></td><td class="desc"></td></tr>
-<tr id="row_1_2_0_2_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00021.html" target="_self">basic_handler</a></td><td class="desc"></td></tr>
-<tr id="row_1_2_0_3_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00041.html" target="_self">concrete_filter</a></td><td class="desc"></td></tr>
-<tr id="row_1_2_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00014.html" target="_self">aggregator_operation</a></td><td class="desc"></td></tr>
-<tr id="row_1_2_2_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00013.html" target="_self">aggregator_ext</a></td><td class="desc">Aggregator base class and expert interface </td></tr>
-<tr id="row_1_2_3_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00012.html" target="_self">aggregator</a></td><td class="desc">Basic aggregator interface </td></tr>
-<tr id="row_1_2_4_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00044.html" target="_self">concurrent_lru_cache</a></td><td class="desc"></td></tr>
-<tr id="row_1_2_5_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00061.html" target="_self">enumerable_thread_specific</a></td><td class="desc">The <a class="el" href="a00061.html" title="The enumerable_thread_specific container. [...]
-<tr id="row_1_2_6_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00066.html" target="_self">flattened2d</a></td><td class="desc"></td></tr>
-<tr id="row_1_2_7_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_2_7_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_2_7_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00093.html" target="_self">memory_pool_allocator</a></td><td class="desc">Meets "allocator" requirements of ISO C++ [...]
-<tr id="row_1_2_7_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00122.html" target="_self">rebind</a></td><td class="desc"></td></tr>
-<tr id="row_1_2_8_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_2_8_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_2_8_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00094.html" target="_self">memory_pool_allocator< void, P ></a></td><td class="desc">Analogous to std::alloca [...]
-<tr id="row_1_2_8_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00123.html" target="_self">rebind</a></td><td class="desc"></td></tr>
-<tr id="row_1_2_9_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00092.html" target="_self">memory_pool</a></td><td class="desc">Thread-safe growable pool allocator for variable-size requests </td></tr>
-<tr id="row_1_2_10_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00065.html" target="_self">fixed_pool</a></td><td class="desc"></td></tr>
-<tr id="row_1_2_11_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00067.html" target="_self">flow_control</a></td><td class="desc">Input_filter control to signal end-of-input for parallel_pipeline </td></tr>
-<tr id="row_1_2_12_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00063.html" target="_self">filter_t</a></td><td class="desc">Class representing a chain of type-safe pipeline filters </td></tr>
-<tr id="row_1_2_13_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00128.html" target="_self">runtime_loader</a></td><td class="desc">Load TBB at runtime </td></tr>
-<tr id="row_1_2_14_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00157.html" target="_self">task_scheduler_observer</a></td><td class="desc"></td></tr>
+<tr id="row_1_2_0_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00021.html" target="_self">basic_operation_base</a></td><td class="desc"></td></tr>
+<tr id="row_1_2_0_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00020.html" target="_self">basic_operation</a></td><td class="desc"></td></tr>
+<tr id="row_1_2_0_2_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00019.html" target="_self">basic_handler</a></td><td class="desc"></td></tr>
+<tr id="row_1_2_0_3_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00034.html" target="_self">concrete_filter</a></td><td class="desc"></td></tr>
+<tr id="row_1_2_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00013.html" target="_self">aggregator_operation</a></td><td class="desc"></td></tr>
+<tr id="row_1_2_2_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00012.html" target="_self">aggregator_ext</a></td><td class="desc">Aggregator base class and expert interface </td></tr>
+<tr id="row_1_2_3_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00011.html" target="_self">aggregator</a></td><td class="desc">Basic aggregator interface </td></tr>
+<tr id="row_1_2_4_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00037.html" target="_self">concurrent_lru_cache</a></td><td class="desc"></td></tr>
+<tr id="row_1_2_5_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00058.html" target="_self">enumerable_thread_specific</a></td><td class="desc">The <a class="el" href="a00058.html" title="The enumerable_thread_specific container. [...]
+<tr id="row_1_2_6_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00063.html" target="_self">flattened2d</a></td><td class="desc"></td></tr>
+<tr id="row_1_2_7_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_2_7_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_2_7_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00077.html" target="_self">memory_pool_allocator</a></td><td class="desc">Meets "allocator" requirements of ISO C++ [...]
+<tr id="row_1_2_7_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00116.html" target="_self">rebind</a></td><td class="desc"></td></tr>
+<tr id="row_1_2_8_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_2_8_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_2_8_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00078.html" target="_self">memory_pool_allocator< void, P ></a></td><td class="desc">Analogous to std::alloca [...]
+<tr id="row_1_2_8_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00118.html" target="_self">rebind</a></td><td class="desc"></td></tr>
+<tr id="row_1_2_9_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00076.html" target="_self">memory_pool</a></td><td class="desc">Thread-safe growable pool allocator for variable-size requests </td></tr>
+<tr id="row_1_2_10_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00062.html" target="_self">fixed_pool</a></td><td class="desc"></td></tr>
+<tr id="row_1_2_11_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00064.html" target="_self">flow_control</a></td><td class="desc">Input_filter control to signal end-of-input for parallel_pipeline </td></tr>
+<tr id="row_1_2_12_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00060.html" target="_self">filter_t</a></td><td class="desc">Class representing a chain of type-safe pipeline filters </td></tr>
+<tr id="row_1_2_13_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00125.html" target="_self">runtime_loader</a></td><td class="desc">Load TBB at runtime </td></tr>
+<tr id="row_1_2_14_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00151.html" target="_self">task_scheduler_observer</a></td><td class="desc"></td></tr>
 <tr id="row_1_3_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_3_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_3_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>interface7</b></td><td class="desc"></td></tr>
-<tr id="row_1_3_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00150.html" target="_self">task_arena</a></td><td class="desc"></td></tr>
+<tr id="row_1_3_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_3_0_" src="ftv2plastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('1_3_0_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00144.html" target="_self">task_arena</a></td><td class="desc"></td></tr>
+<tr id="row_1_3_0_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00017.html" target="_self">attach</a></td><td class="desc">Tag class used to indicate the "attaching" constr [...]
 <tr id="row_1_4_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_4_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_4_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>interface9</b></td><td class="desc"></td></tr>
-<tr id="row_1_4_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00069.html" target="_self">global_control</a></td><td class="desc"></td></tr>
+<tr id="row_1_4_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00068.html" target="_self">global_control</a></td><td class="desc"></td></tr>
 <tr id="row_1_5_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_5_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_5_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>internal</b></td><td class="desc"></td></tr>
-<tr id="row_1_5_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_5_0_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_5_0_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00058.html" target="_self">critical_section_v4</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_5_0_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_5_0_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00050.html" target="_self">critical_section_v4</a></td><td class="desc"></td></tr>
 <tr id="row_1_5_0_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00136.html" target="_self">scoped_lock</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00155.html" target="_self">task_handle_task</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_2_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00152.html" target="_self">task_group_base</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_3_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00158.html" target="_self">task_scheduler_observer_v3</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_4_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00162.html" target="_self">tbb_exception_ptr</a></td><td class="desc">Exception container that preserves the exact copy of the original exception </td></tr>
-<tr id="row_1_5_5_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00169.html" target="_self">thread_closure_base</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_6_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00166.html" target="_self">thread_closure_0</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_7_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00167.html" target="_self">thread_closure_1</a></td><td class="desc">Structure used to pass user function with 1 argument to thread </td></tr>
-<tr id="row_1_5_8_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00168.html" target="_self">thread_closure_2</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_9_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_5_9_" src="ftv2plastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('1_5_9_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00164.html" target="_self">tbb_thread_v3</a></td><td class="desc">Versioned thread class </td></tr>
-<tr id="row_1_5_9_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00073.html" target="_self">id</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00149.html" target="_self">task_handle_task</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_2_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00146.html" target="_self">task_group_base</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_3_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00152.html" target="_self">task_scheduler_observer_v3</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_4_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00156.html" target="_self">tbb_exception_ptr</a></td><td class="desc">Exception container that preserves the exact copy of the original exception </td></tr>
+<tr id="row_1_5_5_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00162.html" target="_self">thread_closure_base</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_6_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00159.html" target="_self">thread_closure_0</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_7_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00160.html" target="_self">thread_closure_1</a></td><td class="desc">Structure used to pass user function with 1 argument to thread </td></tr>
+<tr id="row_1_5_8_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00161.html" target="_self">thread_closure_2</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_9_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_5_9_" src="ftv2plastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('1_5_9_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00157.html" target="_self">tbb_thread_v3</a></td><td class="desc">Versioned thread class </td></tr>
+<tr id="row_1_5_9_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00070.html" target="_self">id</a></td><td class="desc"></td></tr>
 <tr id="row_1_6_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_6_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_6_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><b>strict_ppl</b></td><td class="desc"></td></tr>
-<tr id="row_1_6_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00046.html" target="_self">concurrent_queue</a></td><td class="desc">A high-performance thread-safe non-blocking concurrent queue </td></tr>
-<tr id="row_1_7_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00015.html" target="_self">aligned_space</a></td><td class="desc">Block of space aligned sufficiently to construct an array T with N elements </td></tr>
-<tr id="row_1_8_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00018.html" target="_self">atomic</a></td><td class="desc">Primary template for atomic </td></tr>
-<tr id="row_1_9_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00019.html" target="_self">atomic< void * ></a></td><td class="desc">Specialization for <a class="el" href="a00019.html" title="Specialization for atomic<void*>, for sake of not allowing arithmetic or operator->. ">atomic<void*> [...]
-<tr id="row_1_10_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00024.html" target="_self">blocked_range</a></td><td class="desc">A range over which to iterate </td></tr>
-<tr id="row_1_11_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00025.html" target="_self">blocked_range2d</a></td><td class="desc">A 2-dimensional range that models the Range concept </td></tr>
-<tr id="row_1_12_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00026.html" target="_self">blocked_range3d</a></td><td class="desc">A 3-dimensional range that models the Range concept </td></tr>
-<tr id="row_1_13_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_13_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_13_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00032.html" target="_self">cache_aligned_allocator</a></td><td class="desc">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
-<tr id="row_1_13_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00121.html" target="_self">rebind</a></td><td class="desc"></td></tr>
-<tr id="row_1_14_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_14_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_14_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00033.html" target="_self">cache_aligned_allocator< void ></a></td><td class="desc">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
-<tr id="row_1_14_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00114.html" target="_self">rebind</a></td><td class="desc"></td></tr>
-<tr id="row_1_15_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00036.html" target="_self">combinable</a></td><td class="desc">Thread-local storage with optional reduction </td></tr>
-<tr id="row_1_16_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00163.html" target="_self">tbb_hash_compare</a></td><td class="desc">Hash_compare that is default argument for concurrent_hash_map </td></tr>
-<tr id="row_1_17_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00042.html" target="_self">concurrent_bounded_queue</a></td><td class="desc">A high-performance thread-safe blocking concurrent bounded queue </td></tr>
-<tr id="row_1_18_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00053.html" target="_self">concurrent_vector</a></td><td class="desc">Concurrent vector container </td></tr>
-<tr id="row_1_19_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00175.html" target="_self">vector_iterator</a></td><td class="desc"></td></tr>
-<tr id="row_1_20_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_20_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_20_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00099.html" target="_self">mutex</a></td><td class="desc">Wrapper around the platform's native reader-writer lock </td></tr>
-<tr id="row_1_20_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00140.html" target="_self">scoped_lock</a></td><td class="desc">The scoped locking pattern </td></tr>
-<tr id="row_1_21_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_21_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_21_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00101.html" target="_self">null_mutex</a></td><td class="desc">A mutex which does nothing </td></tr>
-<tr id="row_1_21_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00137.html" target="_self">scoped_lock</a></td><td class="desc">Represents acquisition of a mutex </td></tr>
-<tr id="row_1_22_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_22_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_22_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00102.html" target="_self">null_rw_mutex</a></td><td class="desc">A rw mutex which does nothing </td></tr>
-<tr id="row_1_22_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00138.html" target="_self">scoped_lock</a></td><td class="desc">Represents acquisition of a mutex </td></tr>
-<tr id="row_1_23_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00105.html" target="_self">parallel_do_feeder</a></td><td class="desc">Class the user supplied algorithm body uses to add new tasks </td></tr>
-<tr id="row_1_24_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00153.html" target="_self">task_group_context</a></td><td class="desc"></td></tr>
-<tr id="row_1_25_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00108.html" target="_self">pre_scan_tag</a></td><td class="desc">Used to indicate that the initial scan is being performed </td></tr>
-<tr id="row_1_26_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00064.html" target="_self">final_scan_tag</a></td><td class="desc">Used to indicate that the final scan is being performed </td></tr>
-<tr id="row_1_27_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00106.html" target="_self">parallel_while</a></td><td class="desc">Parallel iteration over a stream, with optional addition of more work </td></tr>
-<tr id="row_1_28_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00062.html" target="_self">filter</a></td><td class="desc">A stage in a pipeline </td></tr>
-<tr id="row_1_29_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00165.html" target="_self">thread_bound_filter</a></td><td class="desc">A stage in a pipeline served by a user thread </td></tr>
-<tr id="row_1_30_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00107.html" target="_self">pipeline</a></td><td class="desc">A processing pipeline that applies filters to items </td></tr>
-<tr id="row_1_31_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_31_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_31_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00111.html" target="_self">queuing_mutex</a></td><td class="desc">Queuing mutex with local-only spinning </td></tr>
-<tr id="row_1_31_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00132.html" target="_self">scoped_lock</a></td><td class="desc">The scoped locking pattern </td></tr>
-<tr id="row_1_32_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_32_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_32_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00112.html" target="_self">queuing_rw_mutex</a></td><td class="desc">Queuing reader-writer mutex with local-only spinning </td></tr>
-<tr id="row_1_32_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00131.html" target="_self">scoped_lock</a></td><td class="desc">The scoped locking pattern </td></tr>
-<tr id="row_1_33_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_33_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_33_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00125.html" target="_self">recursive_mutex</a></td><td class="desc"></td></tr>
-<tr id="row_1_33_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00139.html" target="_self">scoped_lock</a></td><td class="desc">The scoped locking pattern </td></tr>
-<tr id="row_1_34_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_34_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_34_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00129.html" target="_self">scalable_allocator</a></td><td class="desc">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
-<tr id="row_1_34_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00115.html" target="_self">rebind</a></td><td class="desc"></td></tr>
-<tr id="row_1_35_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_35_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_35_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00130.html" target="_self">scalable_allocator< void ></a></td><td class="desc">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
-<tr id="row_1_35_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00116.html" target="_self">rebind</a></td><td class="desc"></td></tr>
-<tr id="row_1_36_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_36_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_36_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00145.html" target="_self">spin_mutex</a></td><td class="desc">A lock that occupies a single byte </td></tr>
-<tr id="row_1_36_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00134.html" target="_self">scoped_lock</a></td><td class="desc">Represents acquisition of a mutex </td></tr>
-<tr id="row_1_37_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_37_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_37_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00146.html" target="_self">spin_rw_mutex_v3</a></td><td class="desc">Fast, unfair, spinning reader-writer lock with backoff and writer-preference </td></tr>
-<tr id="row_1_37_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00135.html" target="_self">scoped_lock</a></td><td class="desc">The scoped locking pattern </td></tr>
-<tr id="row_1_38_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00154.html" target="_self">task_handle</a></td><td class="desc"></td></tr>
-<tr id="row_1_39_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00151.html" target="_self">task_group</a></td><td class="desc"></td></tr>
-<tr id="row_1_40_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00148.html" target="_self">structured_task_group</a></td><td class="desc"></td></tr>
-<tr id="row_1_41_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00156.html" target="_self">task_scheduler_init</a></td><td class="desc">Class delimiting the scope of task scheduler activity </td></tr>
-<tr id="row_1_42_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_42_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_42_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00159.html" target="_self">tbb_allocator</a></td><td class="desc">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
+<tr id="row_1_6_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00039.html" target="_self">concurrent_queue</a></td><td class="desc">A high-performance thread-safe non-blocking concurrent queue </td></tr>
+<tr id="row_1_7_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00014.html" target="_self">aligned_space</a></td><td class="desc">Block of space aligned sufficiently to construct an array T with N elements </td></tr>
+<tr id="row_1_8_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00015.html" target="_self">atomic</a></td><td class="desc">Primary template for atomic </td></tr>
+<tr id="row_1_9_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00016.html" target="_self">atomic< void * ></a></td><td class="desc">Specialization for <a class="el" href="a00016.html" title="Specialization for atomic<void*>, for sake of not allowing arithmetic or operator->. ">atomic<void*> [...]
+<tr id="row_1_10_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00022.html" target="_self">blocked_range</a></td><td class="desc">A range over which to iterate </td></tr>
+<tr id="row_1_11_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00023.html" target="_self">blocked_range2d</a></td><td class="desc">A 2-dimensional range that models the Range concept </td></tr>
+<tr id="row_1_12_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00024.html" target="_self">blocked_range3d</a></td><td class="desc">A 3-dimensional range that models the Range concept </td></tr>
+<tr id="row_1_13_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_13_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_13_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00027.html" target="_self">cache_aligned_allocator</a></td><td class="desc">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
+<tr id="row_1_13_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00112.html" target="_self">rebind</a></td><td class="desc"></td></tr>
+<tr id="row_1_14_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_14_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_14_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00028.html" target="_self">cache_aligned_allocator< void ></a></td><td class="desc">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
+<tr id="row_1_14_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00109.html" target="_self">rebind</a></td><td class="desc"></td></tr>
+<tr id="row_1_15_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00033.html" target="_self">combinable</a></td><td class="desc">Thread-local storage with optional reduction </td></tr>
+<tr id="row_1_16_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00035.html" target="_self">concurrent_bounded_queue</a></td><td class="desc">A high-performance thread-safe blocking concurrent bounded queue </td></tr>
+<tr id="row_1_17_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00046.html" target="_self">concurrent_vector</a></td><td class="desc">Concurrent vector container </td></tr>
+<tr id="row_1_18_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_18_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_18_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00082.html" target="_self">mutex</a></td><td class="desc">Wrapper around the platform's native lock </td></tr>
+<tr id="row_1_18_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00135.html" target="_self">scoped_lock</a></td><td class="desc">The scoped locking pattern </td></tr>
+<tr id="row_1_19_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_19_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_19_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00084.html" target="_self">null_mutex</a></td><td class="desc">A mutex which does nothing </td></tr>
+<tr id="row_1_19_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00137.html" target="_self">scoped_lock</a></td><td class="desc">Represents acquisition of a mutex </td></tr>
+<tr id="row_1_20_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_20_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_20_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00085.html" target="_self">null_rw_mutex</a></td><td class="desc">A rw mutex which does nothing </td></tr>
+<tr id="row_1_20_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00129.html" target="_self">scoped_lock</a></td><td class="desc">Represents acquisition of a mutex </td></tr>
+<tr id="row_1_21_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00147.html" target="_self">task_group_context</a></td><td class="desc"></td></tr>
+<tr id="row_1_22_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00104.html" target="_self">pre_scan_tag</a></td><td class="desc">Used to indicate that the initial scan is being performed </td></tr>
+<tr id="row_1_23_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00061.html" target="_self">final_scan_tag</a></td><td class="desc">Used to indicate that the final scan is being performed </td></tr>
+<tr id="row_1_24_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00102.html" target="_self">parallel_while</a></td><td class="desc">Parallel iteration over a stream, with optional addition of more work </td></tr>
+<tr id="row_1_25_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00059.html" target="_self">filter</a></td><td class="desc">A stage in a pipeline </td></tr>
+<tr id="row_1_26_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00158.html" target="_self">thread_bound_filter</a></td><td class="desc">A stage in a pipeline served by a user thread </td></tr>
+<tr id="row_1_27_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00103.html" target="_self">pipeline</a></td><td class="desc">A processing pipeline that applies filters to items </td></tr>
+<tr id="row_1_28_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_28_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_28_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00106.html" target="_self">queuing_mutex</a></td><td class="desc">Queuing mutex with local-only spinning </td></tr>
+<tr id="row_1_28_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00128.html" target="_self">scoped_lock</a></td><td class="desc">The scoped locking pattern </td></tr>
+<tr id="row_1_29_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_29_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_29_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00107.html" target="_self">queuing_rw_mutex</a></td><td class="desc">Queuing reader-writer mutex with local-only spinning </td></tr>
+<tr id="row_1_29_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00131.html" target="_self">scoped_lock</a></td><td class="desc">The scoped locking pattern </td></tr>
+<tr id="row_1_30_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_30_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_30_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00121.html" target="_self">recursive_mutex</a></td><td class="desc"></td></tr>
+<tr id="row_1_30_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00133.html" target="_self">scoped_lock</a></td><td class="desc">The scoped locking pattern </td></tr>
+<tr id="row_1_31_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_31_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_31_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00126.html" target="_self">scalable_allocator</a></td><td class="desc">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
+<tr id="row_1_31_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00111.html" target="_self">rebind</a></td><td class="desc"></td></tr>
+<tr id="row_1_32_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_32_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_32_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00127.html" target="_self">scalable_allocator< void ></a></td><td class="desc">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
+<tr id="row_1_32_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00115.html" target="_self">rebind</a></td><td class="desc"></td></tr>
+<tr id="row_1_33_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_33_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_33_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00140.html" target="_self">spin_mutex</a></td><td class="desc">A lock that occupies a single byte </td></tr>
+<tr id="row_1_33_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00130.html" target="_self">scoped_lock</a></td><td class="desc">Represents acquisition of a mutex </td></tr>
+<tr id="row_1_34_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_34_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_34_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00141.html" target="_self">spin_rw_mutex_v3</a></td><td class="desc">Fast, unfair, spinning reader-writer lock with backoff and writer-preference </td></tr>
+<tr id="row_1_34_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00134.html" target="_self">scoped_lock</a></td><td class="desc">The scoped locking pattern </td></tr>
+<tr id="row_1_35_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00148.html" target="_self">task_handle</a></td><td class="desc"></td></tr>
+<tr id="row_1_36_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00145.html" target="_self">task_group</a></td><td class="desc"></td></tr>
+<tr id="row_1_37_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00142.html" target="_self">structured_task_group</a></td><td class="desc"></td></tr>
+<tr id="row_1_38_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00150.html" target="_self">task_scheduler_init</a></td><td class="desc">Class delimiting the scope of task scheduler activity </td></tr>
+<tr id="row_1_39_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_39_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_39_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00153.html" target="_self">tbb_allocator</a></td><td class="desc">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
+<tr id="row_1_39_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00113.html" target="_self">rebind</a></td><td class="desc"></td></tr>
+<tr id="row_1_40_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_40_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_40_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00154.html" target="_self">tbb_allocator< void ></a></td><td class="desc">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
+<tr id="row_1_40_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00114.html" target="_self">rebind</a></td><td class="desc"></td></tr>
+<tr id="row_1_41_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_41_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_41_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00169.html" target="_self">zero_allocator</a></td><td class="desc">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
+<tr id="row_1_41_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00110.html" target="_self">rebind</a></td><td class="desc"></td></tr>
+<tr id="row_1_42_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_42_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_42_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00170.html" target="_self">zero_allocator< void, Allocator ></a></td><td class="desc">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
 <tr id="row_1_42_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00117.html" target="_self">rebind</a></td><td class="desc"></td></tr>
-<tr id="row_1_43_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_43_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_43_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00160.html" target="_self">tbb_allocator< void ></a></td><td class="desc">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
-<tr id="row_1_43_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00118.html" target="_self">rebind</a></td><td class="desc"></td></tr>
-<tr id="row_1_44_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_44_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_44_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00177.html" target="_self">zero_allocator</a></td><td class="desc">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
-<tr id="row_1_44_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00119.html" target="_self">rebind</a></td><td class="desc"></td></tr>
-<tr id="row_1_45_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_45_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_45_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00178.html" target="_self">zero_allocator< void, Allocator ></a></td><td class="desc">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
-<tr id="row_1_45_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00120.html" target="_self">rebind</a></td><td class="desc"></td></tr>
-<tr id="row_1_46_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00020.html" target="_self">bad_last_alloc</a></td><td class="desc">Exception for concurrent containers </td></tr>
-<tr id="row_1_47_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00074.html" target="_self">improper_lock</a></td><td class="desc">Exception for PPL locks </td></tr>
-<tr id="row_1_48_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00173.html" target="_self">user_abort</a></td><td class="desc">Exception for user-initiated abort </td></tr>
-<tr id="row_1_49_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00096.html" target="_self">missing_wait</a></td><td class="desc">Exception for missing wait on <a class="el" href="a00148.html">structured_task_group</a> </td></tr>
-<tr id="row_1_50_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00086.html" target="_self">invalid_multiple_scheduling</a></td><td class="desc">Exception for repeated scheduling of the same <a class="el" href="a00154.html">task_handle</a> </td></tr>
-<tr id="row_1_51_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00161.html" target="_self">tbb_exception</a></td><td class="desc">Interface to be implemented by all exceptions TBB recognizes and propagates across the threads </td></tr>
-<tr id="row_1_52_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00035.html" target="_self">captured_exception</a></td><td class="desc">This class is used by TBB to propagate information about unhandled exceptions into the root thread </td></tr>
-<tr id="row_1_53_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00097.html" target="_self">movable_exception</a></td><td class="desc">Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread </td></tr>
-<tr id="row_1_54_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_54_" src="ftv2plastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('1_54_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00170.html" target="_self">tick_count</a></td><td class="desc">Absolute timestamp </td></tr>
-<tr id="row_1_54_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00085.html" target="_self">interval_t</a></td><td class="desc">Relative time interval </td></tr>
-<tr id="row_2_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00009.html" target="_self">__TBB_malloc_proxy_caller</a></td><td class="desc"></td></tr>
+<tr id="row_1_43_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00018.html" target="_self">bad_last_alloc</a></td><td class="desc">Exception for concurrent containers </td></tr>
+<tr id="row_1_44_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00071.html" target="_self">improper_lock</a></td><td class="desc">Exception for PPL locks </td></tr>
+<tr id="row_1_45_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00168.html" target="_self">user_abort</a></td><td class="desc">Exception for user-initiated abort </td></tr>
+<tr id="row_1_46_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00080.html" target="_self">missing_wait</a></td><td class="desc">Exception for missing wait on <a class="el" href="a00142.html">structured_task_group</a> </td></tr>
+<tr id="row_1_47_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00073.html" target="_self">invalid_multiple_scheduling</a></td><td class="desc">Exception for repeated scheduling of the same <a class="el" href="a00148.html">task_handle</a> </td></tr>
+<tr id="row_1_48_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00155.html" target="_self">tbb_exception</a></td><td class="desc">Interface to be implemented by all exceptions TBB recognizes and propagates across the threads </td></tr>
+<tr id="row_1_49_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00032.html" target="_self">captured_exception</a></td><td class="desc">This class is used by TBB to propagate information about unhandled exceptions into the root thread </td></tr>
+<tr id="row_1_50_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00081.html" target="_self">movable_exception</a></td><td class="desc">Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread </td></tr>
+<tr id="row_1_51_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_51_" src="ftv2plastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('1_51_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00163.html" target="_self">tick_count</a></td><td class="desc">Absolute timestamp </td></tr>
+<tr id="row_1_51_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00072.html" target="_self">interval_t</a></td><td class="desc">Relative time interval </td></tr>
+<tr id="row_2_"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00008.html" target="_self">__TBB_malloc_proxy_caller</a></td><td class="desc"></td></tr>
 </table>
 </div><!-- directory -->
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/classes.html b/doc/html/classes.html
index 8111f5f..4128ee0 100644
--- a/doc/html/classes.html
+++ b/doc/html/classes.html
@@ -37,80 +37,79 @@
 <div class="title">Class Index</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="qindex"><a class="qindex" href="#letter_A">A</a> | <a class="qindex" href="#letter_B">B</a> | <a class="qindex" href="#letter_C">C</a> | <a class="qindex" href="#letter_E">E</a> | <a class="qindex" href="#letter_F">F</a> | <a class="qindex" href="#letter_G">G</a> | <a class="qindex" href="#letter_I">I</a> | <a class="qindex" href="#letter_J">J</a> | <a class="qindex" href="#letter_L">L</a> |& [...]
+<div class="qindex"><a class="qindex" href="#letter_A">A</a> | <a class="qindex" href="#letter_B">B</a> | <a class="qindex" href="#letter_C">C</a> | <a class="qindex" href="#letter_D">D</a> | <a class="qindex" href="#letter_E">E</a> | <a class="qindex" href="#letter_F">F</a> | <a class="qindex" href="#letter_G">G</a> | <a class="qindex" href="#letter_I">I</a> | <a class="qindex" href="#letter_K">K</a> |& [...]
 <table style="margin: 10px; white-space: nowrap;" align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
 <tr><td rowspan="2" valign="bottom"><a name="letter_A"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  A  </div></td></tr></table>
-</td><td valign="top"><a class="el" href="a00047.html">concurrent_unordered_map</a> (tbb::interface5)   </td><td valign="top"><a class="el" href="a00082.html">indexer_node< T0, T1, T2, T3, T4, T5, T6 ></a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00111.html">queuing_mutex</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td rowspan="2" valign="bottom"><a name="letter_T"></a><table border="0" cellspacing=" [...]
+</td><td valign="top"><a class="el" href="a00044.html">concurrent_unordered_set</a> (tbb::interface5)   </td><td rowspan="2" valign="bottom"><a name="letter_L"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  L  </div></td></tr></table>
+</td><td rowspan="2" valign="bottom"><a name="letter_Q"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  Q  </div></td></tr></table>
+</td><td valign="top"><a class="el" href="a00141.html">spin_rw_mutex_v3</a> (<a class="el" href="a00233.html">tbb</a>)   </td></tr>
+<tr><td valign="top"><a class="el" href="a00045.html">concurrent_unordered_set_traits</a> (tbb::interface5)   </td><td valign="top"><a class="el" href="a00142.html">structured_task_group</a> (<a class="el" href="a00233.html">tbb</a>)   </td></tr>
+<tr><td valign="top"><a class="el" href="a00009.html">concurrent_hash_map::accessor</a> (tbb::interface5)   </td><td valign="top"><a class="el" href="a00046.html">concurrent_vector</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00075.html">limiter_node</a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00106.html">queuing_mutex</a> (<a class="el" href="a00233.html">tbb</a>)&#16 [...]
+<tr><td valign="top"><a class="el" href="a00010.html">concurrent_hash_map::accessor_not_used</a> (tbb::interface5)   </td><td valign="top"><a class="el" href="a00047.html">concurrent_hash_map::const_accessor</a> (tbb::interface5)   </td><td rowspan="2" valign="bottom"><a name="letter_M"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  M  </div></td></tr></table>
+</td><td valign="top"><a class="el" href="a00107.html">queuing_rw_mutex</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td rowspan="2" valign="bottom"><a name="letter_T"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  T  </div></td></tr></table>
 </td></tr>
-<tr><td valign="top"><a class="el" href="a00048.html">concurrent_unordered_map_traits</a> (tbb::interface5)   </td><td valign="top"><a class="el" href="a00083.html">indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 ></a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00112.html">queuing_rw_mutex</a> (<a class="el" href="a00240.html">tbb</a>)   </td></tr>
-<tr><td valign="top"><a class="el" href="a00010.html">concurrent_hash_map::accessor</a> (tbb::interface5)   </td><td valign="top"><a class="el" href="a00049.html">concurrent_unordered_multimap</a> (tbb::interface5)   </td><td valign="top"><a class="el" href="a00084.html">indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 ></a> (tbb::flow::interface7)   </td><td rowspan="2" valign="bottom"><a name="letter_R"></a><table border="0" cellspacin [...]
-</td><td valign="top"><a class="el" href="a00150.html">task_arena</a> (tbb::interface7)   </td></tr>
-<tr><td valign="top"><a class="el" href="a00011.html">concurrent_hash_map::accessor_not_used</a> (tbb::interface5)   </td><td valign="top"><a class="el" href="a00050.html">concurrent_unordered_multiset</a> (tbb::interface5)   </td><td valign="top"><a class="el" href="a00085.html">tick_count::interval_t</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00151.html">task_group</a> (<a class="el" href="a00 [...]
-<tr><td valign="top"><a class="el" href="a00012.html">aggregator</a> (tbb::interface6)   </td><td valign="top"><a class="el" href="a00051.html">concurrent_unordered_set</a> (tbb::interface5)   </td><td valign="top"><a class="el" href="a00086.html">invalid_multiple_scheduling</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00113.html">reader_writer_lock</a> (tbb::interface5)   </td><td  [...]
-<tr><td valign="top"><a class="el" href="a00013.html">aggregator_ext</a> (tbb::interface6)   </td><td valign="top"><a class="el" href="a00052.html">concurrent_unordered_set_traits</a> (tbb::interface5)   </td><td rowspan="2" valign="bottom"><a name="letter_J"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  J  </div></td></tr></table>
-</td><td valign="top"><a class="el" href="a00123.html">memory_pool_allocator< void, P >::rebind</a> (tbb::interface6)   </td><td valign="top"><a class="el" href="a00153.html">task_group_context</a> (<a class="el" href="a00240.html">tbb</a>)   </td></tr>
-<tr><td valign="top"><a class="el" href="a00014.html">aggregator_operation</a> (tbb::interface6)   </td><td valign="top"><a class="el" href="a00053.html">concurrent_vector</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00122.html">memory_pool_allocator::rebind</a> (tbb::interface6)   </td><td valign="top"><a class="el" href="a00154.html">task_handle</a> (<a class="el" href="a00240.html">tbb</a>)&#16 [...]
-<tr><td valign="top"><a class="el" href="a00015.html">aligned_space</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00054.html">concurrent_hash_map::const_accessor</a> (tbb::interface5)   </td><td valign="top"><a class="el" href="a00087.html">join_node</a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00121.html">cache_aligned_allocator::rebind</a> (<a class="el" href="a00240.h [...]
-<tr><td valign="top"><a class="el" href="a00016.html">async_gateway</a> (tbb::flow::interface7::internal)   </td><td valign="top"><a class="el" href="a00055.html">continue_msg</a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00088.html">join_node< OutputTuple, queueing ></a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00120.html">zero_allocator< void, Allocator >::rebind</a> (<a clas [...]
-<tr><td valign="top"><a class="el" href="a00017.html">async_node</a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00056.html">continue_node</a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00089.html">join_node< OutputTuple, reserving ></a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00119.html">zero_allocator::rebind</a> (<a class="el" href="a00240.html">tbb</a>)&# [...]
-<tr><td valign="top"><a class="el" href="a00018.html">atomic</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00057.html">continue_receiver</a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00090.html">join_node< OutputTuple, tag_matching ></a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00118.html">tbb_allocator< void >::rebind</a> (<a class [...]
-<tr><td valign="top"><a class="el" href="a00019.html">atomic< void * ></a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00058.html">critical_section_v4</a> (tbb::internal)   </td><td rowspan="2" valign="bottom"><a name="letter_L"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  L  </div></td></tr></table>
-</td><td valign="top"><a class="el" href="a00117.html">tbb_allocator::rebind</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00159.html">tbb_allocator</a> (<a class="el" href="a00240.html">tbb</a>)   </td></tr>
-<tr><td rowspan="2" valign="bottom"><a name="letter_B"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  B  </div></td></tr></table>
-</td><td rowspan="2" valign="bottom"><a name="letter_E"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  E  </div></td></tr></table>
-</td><td valign="top"><a class="el" href="a00116.html">scalable_allocator< void >::rebind</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00160.html">tbb_allocator< void ></a> (<a class="el" href="a00240.html">tbb</a>)   </td></tr>
-<tr><td valign="top"><a class="el" href="a00091.html">limiter_node</a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00115.html">scalable_allocator::rebind</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00161.html">tbb_exception</a> (<a class="el" href="a00240.html">tbb</a>)   </td></tr>
-<tr><td valign="top"><a class="el" href="a00020.html">bad_last_alloc</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00059.html">edge_container</a> (tbb::flow::interface7::internal)   </td><td rowspan="2" valign="bottom"><a name="letter_M"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  M  </div></td></tr></table>
-</td><td valign="top"><a class="el" href="a00114.html">cache_aligned_allocator< void >::rebind</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00162.html">tbb_exception_ptr</a> (tbb::internal)   </td></tr>
-<tr><td valign="top"><a class="el" href="a00021.html">basic_handler</a> (tbb::interface6::internal)   </td><td valign="top"><a class="el" href="a00060.html">concurrent_vector::push_back_helper::element_construction_guard</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00124.html">receiver</a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00163.html">tbb_hash_compare</a> (<a cla [...]
-<tr><td valign="top"><a class="el" href="a00022.html">basic_operation</a> (tbb::interface6::internal)   </td><td valign="top"><a class="el" href="a00061.html">enumerable_thread_specific</a> (tbb::interface6)   </td><td valign="top"><a class="el" href="a00092.html">memory_pool</a> (tbb::interface6)   </td><td valign="top"><a class="el" href="a00125.html">recursive_mutex</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td va [...]
-<tr><td valign="top"><a class="el" href="a00023.html">basic_operation_base</a> (tbb::interface6::internal)   </td><td rowspan="2" valign="bottom"><a name="letter_F"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  F  </div></td></tr></table>
-</td><td valign="top"><a class="el" href="a00093.html">memory_pool_allocator</a> (tbb::interface6)   </td><td valign="top"><a class="el" href="a00126.html">round_robin_cache</a> (tbb::flow::interface7::internal)   </td><td valign="top"><a class="el" href="a00165.html">thread_bound_filter</a> (<a class="el" href="a00240.html">tbb</a>)   </td></tr>
-<tr><td valign="top"><a class="el" href="a00024.html">blocked_range</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00094.html">memory_pool_allocator< void, P ></a> (tbb::interface6)   </td><td valign="top"><a class="el" href="a00127.html">run_and_put_task</a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00166.html">thread_closure_0</a> (tbb::internal)   < [...]
-<tr><td valign="top"><a class="el" href="a00025.html">blocked_range2d</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00062.html">filter</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00095.html">MemPoolPolicy</a> (<a class="el" href="a00237.html">rml</a>)   </td><td valign="top"><a class="el" href="a00128.html">runtime_loader</a> (tbb::interface6) &# [...]
-<tr><td valign="top"><a class="el" href="a00026.html">blocked_range3d</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00063.html">filter_t</a> (tbb::interface6)   </td><td valign="top"><a class="el" href="a00096.html">missing_wait</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td rowspan="2" valign="bottom"><a name="letter_S"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div  [...]
-</td><td valign="top"><a class="el" href="a00168.html">thread_closure_2</a> (tbb::internal)   </td></tr>
-<tr><td valign="top"><a class="el" href="a00027.html">broadcast_cache</a> (tbb::flow::interface7::internal)   </td><td valign="top"><a class="el" href="a00064.html">final_scan_tag</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00097.html">movable_exception</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00169.html">thread_closure_base</a> (tbb::internal)&# [...]
-<tr><td valign="top"><a class="el" href="a00028.html">broadcast_node</a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00065.html">fixed_pool</a> (tbb::interface6)   </td><td valign="top"><a class="el" href="a00098.html">multifunction_node</a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00129.html">scalable_allocator</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign= [...]
-<tr><td valign="top"><a class="el" href="a00029.html">concurrent_hash_map::bucket_accessor</a> (tbb::interface5)   </td><td valign="top"><a class="el" href="a00066.html">flattened2d</a> (tbb::interface6)   </td><td valign="top"><a class="el" href="a00099.html">mutex</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00130.html">scalable_allocator< void ></a> (<a class="el" href="a00240.html">tbb</ [...]
+<tr><td valign="top"><a class="el" href="a00011.html">aggregator</a> (tbb::interface6)   </td><td valign="top"><a class="el" href="a00048.html">continue_msg</a> (tbb::flow::interface9)   </td><td rowspan="2" valign="bottom"><a name="letter_R"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  R  </div></td></tr></table>
 </td></tr>
-<tr><td valign="top"><a class="el" href="a00030.html">buffer_node</a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00067.html">flow_control</a> (tbb::interface6)   </td><td rowspan="2" valign="bottom"><a name="letter_N"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  N  </div></td></tr></table>
-</td><td valign="top"><a class="el" href="a00140.html">mutex::scoped_lock</a> (<a class="el" href="a00240.html">tbb</a>)   </td></tr>
-<tr><td valign="top"><a class="el" href="a00031.html">buffer_node::buffer_operation</a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00068.html">function_node</a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00139.html">recursive_mutex::scoped_lock</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00171.html">use_element_copy_constructor</a> (tbb::interfa [...]
+<tr><td valign="top"><a class="el" href="a00012.html">aggregator_ext</a> (tbb::interface6)   </td><td valign="top"><a class="el" href="a00049.html">continue_receiver</a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00076.html">memory_pool</a> (tbb::interface6)   </td><td valign="top"><a class="el" href="a00144.html">task_arena</a> (tbb::interface7)   </td></tr>
+<tr><td valign="top"><a class="el" href="a00013.html">aggregator_operation</a> (tbb::interface6)   </td><td valign="top"><a class="el" href="a00050.html">critical_section_v4</a> (tbb::internal)   </td><td valign="top"><a class="el" href="a00077.html">memory_pool_allocator</a> (tbb::interface6)   </td><td valign="top"><a class="el" href="a00108.html">reader_writer_lock</a> (tbb::interface5)   </td><td valign="top"><a class="el" h [...]
+<tr><td valign="top"><a class="el" href="a00014.html">aligned_space</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td rowspan="2" valign="bottom"><a name="letter_D"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  D  </div></td></tr></table>
+</td><td valign="top"><a class="el" href="a00078.html">memory_pool_allocator< void, P ></a> (tbb::interface6)   </td><td valign="top"><a class="el" href="a00118.html">memory_pool_allocator< void, P >::rebind</a> (tbb::interface6)   </td><td valign="top"><a class="el" href="a00146.html">task_group_base</a> (tbb::internal)   </td></tr>
+<tr><td valign="top"><a class="el" href="a00015.html">atomic</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00079.html">MemPoolPolicy</a> (<a class="el" href="a00230.html">rml</a>)   </td><td valign="top"><a class="el" href="a00117.html">zero_allocator< void, Allocator >::rebind</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00147.html">task_group_c [...]
+<tr><td valign="top"><a class="el" href="a00016.html">atomic< void * ></a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00051.html">default_opencl_factory</a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00080.html">missing_wait</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00116.html">memory_pool_allocator::rebind</a> (tbb::i [...]
+<tr><td valign="top"><a class="el" href="a00017.html">task_arena::attach</a> (tbb::interface7)   </td><td valign="top"><a class="el" href="a00052.html">default_opencl_factory_device_filter</a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00081.html">movable_exception</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00115.html">scalable_allocator< void >::rebind</a> (<a cl [...]
+<tr><td rowspan="2" valign="bottom"><a name="letter_B"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  B  </div></td></tr></table>
+</td><td valign="top"><a class="el" href="a00053.html">dependency_msg</a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00082.html">mutex</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00114.html">tbb_allocator< void >::rebind</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00150.html">task_scheduler_init</a> (<a class="el" hre [...]
+<tr><td valign="top"><a class="el" href="a00054.html">gfx_factory::device_type</a> (tbb::flow::interface9)   </td><td rowspan="2" valign="bottom"><a name="letter_N"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  N  </div></td></tr></table>
+</td><td valign="top"><a class="el" href="a00113.html">tbb_allocator::rebind</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00151.html">task_scheduler_observer</a> (tbb::interface6)   </td></tr>
+<tr><td valign="top"><a class="el" href="a00018.html">bad_last_alloc</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00055.html">gfx_factory::dummy_device_selector</a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00112.html">cache_aligned_allocator::rebind</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00152.html">task_scheduler_obs [...]
+<tr><td valign="top"><a class="el" href="a00019.html">basic_handler</a> (tbb::interface6::internal)   </td><td rowspan="2" valign="bottom"><a name="letter_E"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  E  </div></td></tr></table>
+</td><td valign="top"><a class="el" href="a00083.html">concurrent_hash_map::node</a> (tbb::interface5)   </td><td valign="top"><a class="el" href="a00111.html">scalable_allocator::rebind</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00153.html">tbb_allocator</a> (<a class="el" href="a00233.html">tbb</a>)   </td></tr>
+<tr><td valign="top"><a class="el" href="a00020.html">basic_operation</a> (tbb::interface6::internal)   </td><td valign="top"><a class="el" href="a00084.html">null_mutex</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00110.html">zero_allocator::rebind</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00154.html">tbb_allocator< void ></a> (<a class="el" [...]
+<tr><td valign="top"><a class="el" href="a00021.html">basic_operation_base</a> (tbb::interface6::internal)   </td><td valign="top"><a class="el" href="a00056.html">edge_container</a> (tbb::flow::interface9::internal)   </td><td valign="top"><a class="el" href="a00085.html">null_rw_mutex</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00109.html">cache_aligned_allocator< void >::rebind</a> (<a c [...]
+<tr><td valign="top"><a class="el" href="a00022.html">blocked_range</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00057.html">concurrent_vector::push_back_helper::element_construction_guard</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00086.html">null_type</a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00119.html">receiver</a> [...]
+<tr><td valign="top"><a class="el" href="a00023.html">blocked_range2d</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00058.html">enumerable_thread_specific</a> (tbb::interface6)   </td><td rowspan="2" valign="bottom"><a name="letter_O"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  O  </div></td></tr></table>
+</td><td valign="top"><a class="el" href="a00120.html">receiver_gateway</a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00157.html">tbb_thread_v3</a> (tbb::internal)   </td></tr>
+<tr><td valign="top"><a class="el" href="a00024.html">blocked_range3d</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td rowspan="2" valign="bottom"><a name="letter_F"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  F  </div></td></tr></table>
+</td><td valign="top"><a class="el" href="a00121.html">recursive_mutex</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00158.html">thread_bound_filter</a> (<a class="el" href="a00233.html">tbb</a>)   </td></tr>
+<tr><td valign="top"><a class="el" href="a00025.html">broadcast_cache</a> (tbb::flow::interface9::internal)   </td><td valign="top"><a class="el" href="a00087.html">opencl_buffer</a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00122.html">reservable_predecessor_cache</a> (tbb::flow::interface9::internal)   </td><td valign="top"><a class="el" href="a00159.html">thread_closure_0</a> (tbb::internal)   </td></tr>
+<tr><td valign="top"><a class="el" href="a00026.html">concurrent_hash_map::bucket_accessor</a> (tbb::interface5)   </td><td valign="top"><a class="el" href="a00059.html">filter</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00088.html">opencl_buffer_impl</a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00123.html">round_robin_cache</a> (tbb::flow::interface9::internal) & [...]
 <tr><td rowspan="2" valign="bottom"><a name="letter_C"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  C  </div></td></tr></table>
-</td><td rowspan="2" valign="bottom"><a name="letter_G"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  G  </div></td></tr></table>
-</td><td valign="top"><a class="el" href="a00100.html">concurrent_hash_map::node</a> (tbb::interface5)   </td><td valign="top"><a class="el" href="a00138.html">null_rw_mutex::scoped_lock</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00172.html">use_element_copy_constructor< T, false ></a> (tbb::interface5::internal)   </td></tr>
-<tr><td valign="top"><a class="el" href="a00101.html">null_mutex</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00137.html">null_mutex::scoped_lock</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00173.html">user_abort</a> (<a class="el" href="a00240.html">tbb</a>)   </td></tr>
-<tr><td valign="top"><a class="el" href="a00032.html">cache_aligned_allocator</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00069.html">global_control</a> (tbb::interface9)   </td><td valign="top"><a class="el" href="a00102.html">null_rw_mutex</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00136.html">critical_section_v4::scoped_lock</a> (tbb::internal)& [...]
-</td></tr>
-<tr><td valign="top"><a class="el" href="a00033.html">cache_aligned_allocator< void ></a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00070.html">graph</a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00103.html">null_type</a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00135.html">spin_rw_mutex_v3::scoped_lock</a> (<a class="el" href="a00240.htm [...]
-<tr><td valign="top"><a class="el" href="a00034.html">concurrent_hash_map::call_clear_on_leave</a> (tbb::interface5)   </td><td valign="top"><a class="el" href="a00071.html">graph_iterator</a> (tbb::flow::interface7)   </td><td rowspan="2" valign="bottom"><a name="letter_O"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  O  </div></td></tr></table>
-</td><td valign="top"><a class="el" href="a00134.html">spin_mutex::scoped_lock</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00174.html">concurrent_unordered_map_traits::value_compare</a> (tbb::interface5)   </td></tr>
-<tr><td valign="top"><a class="el" href="a00035.html">captured_exception</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00072.html">graph_node</a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00133.html">reader_writer_lock::scoped_lock</a> (tbb::interface5)   </td><td valign="top"><a class="el" href="a00175.html">vector_iterator</a> (<a class="el" href="a00240.html">tbb</a>)& [...]
-<tr><td valign="top"><a class="el" href="a00036.html">combinable</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td rowspan="2" valign="bottom"><a name="letter_I"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  I  </div></td></tr></table>
-</td><td valign="top"><a class="el" href="a00104.html">overwrite_node</a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00132.html">queuing_mutex::scoped_lock</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td rowspan="2" valign="bottom"><a name="letter_W"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  W  </div></td></tr></table>
+</td><td valign="top"><a class="el" href="a00060.html">filter_t</a> (tbb::interface6)   </td><td valign="top"><a class="el" href="a00089.html">opencl_device</a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00124.html">run_and_put_task</a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00161.html">thread_closure_2</a> (tbb::internal)   </td></tr>
+<tr><td valign="top"><a class="el" href="a00061.html">final_scan_tag</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00090.html">opencl_device_list</a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00125.html">runtime_loader</a> (tbb::interface6)   </td><td valign="top"><a class="el" href="a00162.html">thread_closure_base</a> (tbb::internal)   </td></tr>
+<tr><td valign="top"><a class="el" href="a00027.html">cache_aligned_allocator</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00062.html">fixed_pool</a> (tbb::interface6)   </td><td valign="top"><a class="el" href="a00091.html">opencl_factory</a> (tbb::flow::interface9)   </td><td rowspan="2" valign="bottom"><a name="letter_S"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class=" [...]
+</td><td valign="top"><a class="el" href="a00163.html">tick_count</a> (<a class="el" href="a00233.html">tbb</a>)   </td></tr>
+<tr><td valign="top"><a class="el" href="a00028.html">cache_aligned_allocator< void ></a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00063.html">flattened2d</a> (tbb::interface6)   </td><td valign="top"><a class="el" href="a00092.html">opencl_foundation</a> (tbb::flow::interface9)   </td><td rowspan="2" valign="bottom"><a name="letter_U"></a><table border="0" cellspacing="0" cellpadding="0"><t [...]
 </td></tr>
-<tr><td valign="top"><a class="el" href="a00037.html">composite_node</a> (tbb::flow::interface7)   </td><td rowspan="2" valign="bottom"><a name="letter_P"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  P  </div></td></tr></table>
-</td><td valign="top"><a class="el" href="a00131.html">queuing_rw_mutex::scoped_lock</a> (<a class="el" href="a00240.html">tbb</a>)   </td></tr>
-<tr><td valign="top"><a class="el" href="a00038.html">composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00073.html">tbb_thread_v3::id</a> (tbb::internal)   </td><td valign="top"><a class="el" href="a00141.html">reader_writer_lock::scoped_lock_read</a> (tbb::interface5)   </td><td valign="top"><a class="el" href="a00176 [...]
-<tr><td valign="top"><a class="el" href="a00039.html">composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00074.html">improper_lock</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00105.html">parallel_do_feeder</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="e [...]
+<tr><td valign="top"><a class="el" href="a00029.html">concurrent_hash_map::call_clear_on_leave</a> (tbb::interface5)   </td><td valign="top"><a class="el" href="a00064.html">flow_control</a> (tbb::interface6)   </td><td valign="top"><a class="el" href="a00093.html">opencl_graph</a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00126.html">scalable_allocator</a> (<a class="el" href="a00233.html">tbb</a>)    [...]
+<tr><td valign="top"><a class="el" href="a00030.html">callback</a> (tbb::flow::interface9)   </td><td rowspan="2" valign="bottom"><a name="letter_G"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  G  </div></td></tr></table>
+</td><td valign="top"><a class="el" href="a00094.html">opencl_memory</a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00127.html">scalable_allocator< void ></a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00164.html">untyped_receiver</a> (tbb::flow::interface9::internal)   </td></tr>
+<tr><td valign="top"><a class="el" href="a00031.html">callback_base</a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00095.html">opencl_node</a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00137.html">null_mutex::scoped_lock</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00165.html">untyped_sender</a> (tbb::flow::interface9::internal)  &#160 [...]
+<tr><td valign="top"><a class="el" href="a00032.html">captured_exception</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00065.html">gfx_async_msg</a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00096.html">opencl_node< tuple< Ports...> ></a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00136.html">critical_section_v4::scoped_lock</a> (tbb: [...]
+<tr><td valign="top"><a class="el" href="a00033.html">combinable</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00066.html">gfx_buffer</a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00097.html">opencl_node< tuple< Ports...>, JP ></a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00135.html">mutex::scoped_lock</a> (<a class="el" href="a0023 [...]
+<tr><td valign="top"><a class="el" href="a00034.html">concrete_filter</a> (tbb::interface6::internal)   </td><td valign="top"><a class="el" href="a00067.html">gfx_factory</a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00098.html">opencl_node< tuple< Ports...>, JP, Factory ></a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00134.html">spin_rw_mutex_v3::scoped_lock</a> (<a class="el"  [...]
+<tr><td valign="top"><a class="el" href="a00035.html">concurrent_bounded_queue</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00068.html">global_control</a> (tbb::interface9)   </td><td valign="top"><a class="el" href="a00099.html">opencl_program</a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00133.html">recursive_mutex::scoped_lock</a> (<a class="el" href="a00233.html">tbb [...]
 </td></tr>
-<tr><td valign="top"><a class="el" href="a00040.html">composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00075.html">indexer_node</a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00106.html">parallel_while</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00143.html">s [...]
-<tr><td valign="top"><a class="el" href="a00041.html">concrete_filter</a> (tbb::interface6::internal)   </td><td valign="top"><a class="el" href="a00076.html">indexer_node< T0 ></a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00107.html">pipeline</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00144.html">source_node</a> (tbb::flow::interface7)   </td><td [...]
-<tr><td valign="top"><a class="el" href="a00042.html">concurrent_bounded_queue</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00077.html">indexer_node< T0, T1 ></a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00108.html">pre_scan_tag</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00145.html">spin_mutex</a> (<a class="el" hre [...]
-<tr><td valign="top"><a class="el" href="a00043.html">concurrent_hash_map</a> (tbb::interface5)   </td><td valign="top"><a class="el" href="a00078.html">indexer_node< T0, T1, T2 ></a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00109.html">priority_queue_node</a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00146.html">spin_rw_mutex_v3</a> (<a class="el" href="a00240.html">tbb</a>) &# [...]
+<tr><td valign="top"><a class="el" href="a00036.html">concurrent_hash_map</a> (tbb::interface5)   </td><td valign="top"><a class="el" href="a00069.html">graph_proxy</a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00100.html">opencl_range</a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00132.html">reader_writer_lock::scoped_lock</a> (tbb::interface5)   </td></tr>
+<tr><td valign="top"><a class="el" href="a00037.html">concurrent_lru_cache</a> (tbb::interface6)   </td><td rowspan="2" valign="bottom"><a name="letter_I"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  I  </div></td></tr></table>
+</td><td valign="top"><a class="el" href="a00101.html">opencl_subbuffer</a> (tbb::flow::interface9)   </td><td valign="top"><a class="el" href="a00131.html">queuing_rw_mutex::scoped_lock</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00169.html">zero_allocator</a> (<a class="el" href="a00233.html">tbb</a>)   </td></tr>
+<tr><td valign="top"><a class="el" href="a00038.html">concurrent_priority_queue</a> (tbb::interface5)   </td><td rowspan="2" valign="bottom"><a name="letter_P"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  P  </div></td></tr></table>
+</td><td valign="top"><a class="el" href="a00130.html">spin_mutex::scoped_lock</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00170.html">zero_allocator< void, Allocator ></a> (<a class="el" href="a00233.html">tbb</a>)   </td></tr>
+<tr><td valign="top"><a class="el" href="a00039.html">concurrent_queue</a> (tbb::strict_ppl)   </td><td valign="top"><a class="el" href="a00070.html">tbb_thread_v3::id</a> (tbb::internal)   </td><td valign="top"><a class="el" href="a00129.html">null_rw_mutex::scoped_lock</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td rowspan="2" valign="bottom"><a name="letter__"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div cla [...]
 </td></tr>
-<tr><td valign="top"><a class="el" href="a00044.html">concurrent_lru_cache</a> (tbb::interface6)   </td><td valign="top"><a class="el" href="a00079.html">indexer_node< T0, T1, T2, T3 ></a> (tbb::flow::interface7)   </td><td rowspan="2" valign="bottom"><a name="letter_Q"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  Q  </div></td></tr></table>
-</td><td valign="top"><a class="el" href="a00147.html">split_node</a> (tbb::flow::interface7)   </td></tr>
-<tr><td valign="top"><a class="el" href="a00045.html">concurrent_priority_queue</a> (tbb::interface5)   </td><td valign="top"><a class="el" href="a00080.html">indexer_node< T0, T1, T2, T3, T4 ></a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00148.html">structured_task_group</a> (<a class="el" href="a00240.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00009.html">__TBB_malloc_proxy_caller</a> & [...]
-<tr><td valign="top"><a class="el" href="a00046.html">concurrent_queue</a> (tbb::strict_ppl)   </td><td valign="top"><a class="el" href="a00081.html">indexer_node< T0, T1, T2, T3, T4, T5 ></a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00110.html">queue_node</a> (tbb::flow::interface7)   </td><td valign="top"><a class="el" href="a00149.html">successor_cache</a> (tbb::flow::interface7::internal)    [...]
+<tr><td valign="top"><a class="el" href="a00040.html">concurrent_unordered_map</a> (tbb::interface5)   </td><td valign="top"><a class="el" href="a00071.html">improper_lock</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00102.html">parallel_while</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00128.html">queuing_mutex::scoped_lock</a> (<a class="el" href=" [...]
+<tr><td valign="top"><a class="el" href="a00041.html">concurrent_unordered_map_traits</a> (tbb::interface5)   </td><td valign="top"><a class="el" href="a00072.html">tick_count::interval_t</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00103.html">pipeline</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00138.html">reader_writer_lock::scoped_lock_read</a> ( [...]
+<tr><td valign="top"><a class="el" href="a00042.html">concurrent_unordered_multimap</a> (tbb::interface5)   </td><td valign="top"><a class="el" href="a00073.html">invalid_multiple_scheduling</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00104.html">pre_scan_tag</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td valign="top"><a class="el" href="a00139.html">sender</a> (tbb::flow::interface9)& [...]
+<tr><td valign="top"><a class="el" href="a00043.html">concurrent_unordered_multiset</a> (tbb::interface5)   </td><td rowspan="2" valign="bottom"><a name="letter_K"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  K  </div></td></tr></table>
+</td><td valign="top"><a class="el" href="a00105.html">predecessor_cache</a> (tbb::flow::interface9::internal)   </td><td valign="top"><a class="el" href="a00140.html">spin_mutex</a> (<a class="el" href="a00233.html">tbb</a>)   </td><td></td></tr>
+<tr><td></td><td></td><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a class="el" href="a00074.html">opencl_factory::kernel</a> (tbb::flow::interface9)   </td><td></td><td></td><td></td></tr>
 <tr><td></td><td></td><td></td><td></td><td></td></tr>
 </table>
-<div class="qindex"><a class="qindex" href="#letter_A">A</a> | <a class="qindex" href="#letter_B">B</a> | <a class="qindex" href="#letter_C">C</a> | <a class="qindex" href="#letter_E">E</a> | <a class="qindex" href="#letter_F">F</a> | <a class="qindex" href="#letter_G">G</a> | <a class="qindex" href="#letter_I">I</a> | <a class="qindex" href="#letter_J">J</a> | <a class="qindex" href="#letter_L">L</a> |& [...]
+<div class="qindex"><a class="qindex" href="#letter_A">A</a> | <a class="qindex" href="#letter_B">B</a> | <a class="qindex" href="#letter_C">C</a> | <a class="qindex" href="#letter_D">D</a> | <a class="qindex" href="#letter_E">E</a> | <a class="qindex" href="#letter_F">F</a> | <a class="qindex" href="#letter_G">G</a> | <a class="qindex" href="#letter_I">I</a> | <a class="qindex" href="#letter_K">K</a> |& [...]
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/dir_525f2cc589630bacbdc3bb450847427e.html b/doc/html/dir_525f2cc589630bacbdc3bb450847427e.html
index 7a81a72..d1510c1 100644
--- a/doc/html/dir_525f2cc589630bacbdc3bb450847427e.html
+++ b/doc/html/dir_525f2cc589630bacbdc3bb450847427e.html
@@ -43,7 +43,7 @@ Directories</h2></td></tr>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/dir_63fb2cc293d133785b96e521fa051167.html b/doc/html/dir_63fb2cc293d133785b96e521fa051167.html
index 6e4b5a0..27fa590 100644
--- a/doc/html/dir_63fb2cc293d133785b96e521fa051167.html
+++ b/doc/html/dir_63fb2cc293d133785b96e521fa051167.html
@@ -43,7 +43,7 @@ Directories</h2></td></tr>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/dir_87119f26c7695cbc270003e99bc7f49f.html b/doc/html/dir_87119f26c7695cbc270003e99bc7f49f.html
index 05e2a81..a221c8a 100644
--- a/doc/html/dir_87119f26c7695cbc270003e99bc7f49f.html
+++ b/doc/html/dir_87119f26c7695cbc270003e99bc7f49f.html
@@ -37,124 +37,130 @@
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
 Files</h2></td></tr>
-<tr class="memitem:a00179"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>aggregator.h</b></td></tr>
+<tr class="memitem:a00171"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>aggregator.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00180"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>aligned_space.h</b></td></tr>
+<tr class="memitem:a00172"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>aligned_space.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00181"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>atomic.h</b></td></tr>
+<tr class="memitem:a00173"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>atomic.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00182"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>blocked_range.h</b></td></tr>
+<tr class="memitem:a00174"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>blocked_range.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00183"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>blocked_range2d.h</b></td></tr>
+<tr class="memitem:a00175"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>blocked_range2d.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00184"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>blocked_range3d.h</b></td></tr>
+<tr class="memitem:a00176"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>blocked_range3d.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00185"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>cache_aligned_allocator.h</b></td></tr>
+<tr class="memitem:a00177"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>cache_aligned_allocator.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00186"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>combinable.h</b></td></tr>
+<tr class="memitem:a00178"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>combinable.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00187"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>concurrent_hash_map.h</b></td></tr>
+<tr class="memitem:a00179"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>concurrent_hash_map.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00188"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>concurrent_lru_cache.h</b></td></tr>
+<tr class="memitem:a00180"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>concurrent_lru_cache.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00189"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>concurrent_priority_queue.h</b></td></tr>
+<tr class="memitem:a00181"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>concurrent_priority_queue.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00190"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>concurrent_queue.h</b></td></tr>
+<tr class="memitem:a00182"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>concurrent_queue.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00191"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_map.h</b></td></tr>
+<tr class="memitem:a00183"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_map.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00192"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_set.h</b></td></tr>
+<tr class="memitem:a00184"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>concurrent_unordered_set.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00193"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>concurrent_vector.h</b></td></tr>
+<tr class="memitem:a00185"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>concurrent_vector.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00194"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>critical_section.h</b></td></tr>
+<tr class="memitem:a00186"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>critical_section.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00195"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>enumerable_thread_specific.h</b></td></tr>
+<tr class="memitem:a00187"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>enumerable_thread_specific.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00196"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html">flow_graph.h</a></td></tr>
-<tr class="memdesc:a00196"><td class="mdescLeft"> </td><td class="mdescRight">The graph related classes and functions. <br/></td></tr>
+<tr class="memitem:a00188"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00188.html">flow_graph.h</a></td></tr>
+<tr class="memdesc:a00188"><td class="mdescLeft"> </td><td class="mdescRight">The graph related classes and functions. <br/></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00197"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>global_control.h</b></td></tr>
+<tr class="memitem:a00189"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>flow_graph_abstractions.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00198"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html">memory_pool.h</a></td></tr>
+<tr class="memitem:a00190"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>flow_graph_opencl_node.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00199"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>mutex.h</b></td></tr>
+<tr class="memitem:a00191"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>gfx_factory.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00200"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>null_mutex.h</b></td></tr>
+<tr class="memitem:a00192"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>global_control.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00201"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>null_rw_mutex.h</b></td></tr>
+<tr class="memitem:a00193"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html">memory_pool.h</a></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00202"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>parallel_do.h</b></td></tr>
+<tr class="memitem:a00194"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>mutex.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00203"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>parallel_for.h</b></td></tr>
+<tr class="memitem:a00195"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>null_mutex.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00204"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>parallel_for_each.h</b></td></tr>
+<tr class="memitem:a00196"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>null_rw_mutex.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00205"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>parallel_invoke.h</b></td></tr>
+<tr class="memitem:a00197"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>parallel_do.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00206"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>parallel_reduce.h</b></td></tr>
+<tr class="memitem:a00198"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>parallel_for.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00207"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>parallel_scan.h</b></td></tr>
+<tr class="memitem:a00199"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>parallel_for_each.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00208"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>parallel_sort.h</b></td></tr>
+<tr class="memitem:a00200"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>parallel_invoke.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00209"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>parallel_while.h</b></td></tr>
+<tr class="memitem:a00201"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>parallel_reduce.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00210"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>partitioner.h</b></td></tr>
+<tr class="memitem:a00202"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>parallel_scan.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00211"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>pipeline.h</b></td></tr>
+<tr class="memitem:a00203"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>parallel_sort.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00212"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>queuing_mutex.h</b></td></tr>
+<tr class="memitem:a00204"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>parallel_while.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00213"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>queuing_rw_mutex.h</b></td></tr>
+<tr class="memitem:a00205"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>partitioner.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00214"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>reader_writer_lock.h</b></td></tr>
+<tr class="memitem:a00206"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>pipeline.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00215"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>recursive_mutex.h</b></td></tr>
+<tr class="memitem:a00207"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>queuing_mutex.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00216"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>runtime_loader.h</b></td></tr>
+<tr class="memitem:a00208"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>queuing_rw_mutex.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00217"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html">scalable_allocator.h</a></td></tr>
+<tr class="memitem:a00209"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>reader_writer_lock.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00218"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>spin_mutex.h</b></td></tr>
+<tr class="memitem:a00210"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>recursive_mutex.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00219"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>spin_rw_mutex.h</b></td></tr>
+<tr class="memitem:a00211"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>runtime_loader.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00220"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>task.h</b></td></tr>
+<tr class="memitem:a00212"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00212.html">scalable_allocator.h</a></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00221"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>task_arena.h</b></td></tr>
+<tr class="memitem:a00213"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>spin_mutex.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00222"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>task_group.h</b></td></tr>
+<tr class="memitem:a00214"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>spin_rw_mutex.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00223"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>task_scheduler_init.h</b></td></tr>
+<tr class="memitem:a00215"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>task.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00224"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>task_scheduler_observer.h</b></td></tr>
+<tr class="memitem:a00216"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>task_arena.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00225"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>tbb.h</b></td></tr>
+<tr class="memitem:a00217"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>task_group.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00226"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>tbb_allocator.h</b></td></tr>
+<tr class="memitem:a00218"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>task_scheduler_init.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00227"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>tbb_config.h</b></td></tr>
+<tr class="memitem:a00219"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>task_scheduler_observer.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00228"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>tbb_exception.h</b></td></tr>
+<tr class="memitem:a00220"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>tbb.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00229"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>tbb_machine.h</b></td></tr>
+<tr class="memitem:a00221"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>tbb_allocator.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00230"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>tbb_profiling.h</b></td></tr>
+<tr class="memitem:a00222"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>tbb_config.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00231"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>tbb_stddef.h</b></td></tr>
+<tr class="memitem:a00223"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>tbb_exception.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00232"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>tbb_thread.h</b></td></tr>
+<tr class="memitem:a00224"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>tbb_machine.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00233"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>tbbmalloc_proxy.h</b></td></tr>
+<tr class="memitem:a00225"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>tbb_profiling.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a00234"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>tick_count.h</b></td></tr>
+<tr class="memitem:a00226"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>tbb_stddef.h</b></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00227"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>tbb_thread.h</b></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00228"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>tbbmalloc_proxy.h</b></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00229"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>tick_count.h</b></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
 </table>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/dir_b9976680b2be72d2d0b8fca1c31202a2.html b/doc/html/dir_b9976680b2be72d2d0b8fca1c31202a2.html
index b2e1fe0..d66dd89 100644
--- a/doc/html/dir_b9976680b2be72d2d0b8fca1c31202a2.html
+++ b/doc/html/dir_b9976680b2be72d2d0b8fca1c31202a2.html
@@ -43,7 +43,7 @@ Directories</h2></td></tr>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/files.html b/doc/html/files.html
index c7e3678..2009950 100644
--- a/doc/html/files.html
+++ b/doc/html/files.html
@@ -38,15 +38,15 @@
 <div class="contents">
 <div class="textblock">Here is a list of all documented files with brief descriptions:</div><div class="directory">
 <table class="directory">
-<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="a00196.html" target="_self">flow_graph.h</a></td><td class="desc">The graph related classes and functions </td></tr>
-<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="a00198.html" target="_self">memory_pool.h</a></td><td class="desc"></td></tr>
-<tr id="row_2_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="a00217.html" target="_self">scalable_allocator.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="a00188.html" target="_self">flow_graph.h</a></td><td class="desc">The graph related classes and functions </td></tr>
+<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="a00193.html" target="_self">memory_pool.h</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="a00212.html" target="_self">scalable_allocator.h</a></td><td class="desc"></td></tr>
 </table>
 </div><!-- directory -->
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions.html b/doc/html/functions.html
index 104b81e..0947fc2 100644
--- a/doc/html/functions.html
+++ b/doc/html/functions.html
@@ -75,63 +75,56 @@
 
 <h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
 <li>abort()
-: <a class="el" href="a00042.html#a77a755d94cabf5208905d10d5b57419c">tbb::concurrent_bounded_queue< T, A ></a>
+: <a class="el" href="a00035.html#a77a755d94cabf5208905d10d5b57419c">tbb::concurrent_bounded_queue< T, A ></a>
 </li>
 <li>acquire()
-: <a class="el" href="a00029.html#a0d7d8f3d101bb18056b8e5d4d2c8b079">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a>
-, <a class="el" href="a00132.html#abf8aa7ccd48d54dcb53665700a17d02a">tbb::queuing_mutex::scoped_lock</a>
-, <a class="el" href="a00135.html#a6d49df365396ab314e78ba07c6b96433">tbb::spin_rw_mutex_v3::scoped_lock</a>
+: <a class="el" href="a00026.html#a0d7d8f3d101bb18056b8e5d4d2c8b079">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a>
+, <a class="el" href="a00128.html#abf8aa7ccd48d54dcb53665700a17d02a">tbb::queuing_mutex::scoped_lock</a>
+, <a class="el" href="a00134.html#a6d49df365396ab314e78ba07c6b96433">tbb::spin_rw_mutex_v3::scoped_lock</a>
 , <a class="el" href="a00131.html#ab4bf2fb86d6a418f9ea36474eb8893f9">tbb::queuing_rw_mutex::scoped_lock</a>
-, <a class="el" href="a00140.html#a9fce3e2e9f592315dc9c1ada72ae5e3c">tbb::mutex::scoped_lock</a>
-, <a class="el" href="a00139.html#ac5450ce6a5813f395afaa434384c6539">tbb::recursive_mutex::scoped_lock</a>
-, <a class="el" href="a00134.html#a7c702117f08ae82d034a98b3d5510ffc">tbb::spin_mutex::scoped_lock</a>
-</li>
-<li>activate()
-: <a class="el" href="a00144.html#a67264c4564abefbf14c0d587c6fe2857">tbb::flow::interface7::source_node< Output ></a>
+, <a class="el" href="a00135.html#a9fce3e2e9f592315dc9c1ada72ae5e3c">tbb::mutex::scoped_lock</a>
+, <a class="el" href="a00133.html#ac5450ce6a5813f395afaa434384c6539">tbb::recursive_mutex::scoped_lock</a>
+, <a class="el" href="a00130.html#a7c702117f08ae82d034a98b3d5510ffc">tbb::spin_mutex::scoped_lock</a>
 </li>
 <li>add()
-: <a class="el" href="a00105.html#ac095c6b1a32e9c0be010aa32875d7a63">tbb::parallel_do_feeder< Item ></a>
-, <a class="el" href="a00106.html#a4861989d7f5e3111d264d4d6013e8fe1">tbb::parallel_while< Body ></a>
+: <a class="el" href="a00102.html#a4861989d7f5e3111d264d4d6013e8fe1">tbb::parallel_while< Body ></a>
 </li>
 <li>add_filter()
-: <a class="el" href="a00107.html#a8eb83014bd53b184e0ed50f120ca310b">tbb::pipeline</a>
+: <a class="el" href="a00103.html#a8eb83014bd53b184e0ed50f120ca310b">tbb::pipeline</a>
 </li>
 <li>allocate()
-: <a class="el" href="a00159.html#afedd8a64eed9692083c708f419338e0c">tbb::tbb_allocator< T ></a>
-, <a class="el" href="a00162.html#abfbea91401d2594deb04ea331734171c">tbb::internal::tbb_exception_ptr</a>
-, <a class="el" href="a00032.html#a99d05096f80877849cb31d80247e0f85">tbb::cache_aligned_allocator< T ></a>
-, <a class="el" href="a00093.html#a10b9888883a3dbd66e87c4a7f874ef28">tbb::interface6::memory_pool_allocator< T, P ></a>
-, <a class="el" href="a00129.html#acf24945c12dc0586dfb1f8638daf7838">tbb::scalable_allocator< T ></a>
+: <a class="el" href="a00027.html#a99d05096f80877849cb31d80247e0f85">tbb::cache_aligned_allocator< T ></a>
+, <a class="el" href="a00077.html#a10b9888883a3dbd66e87c4a7f874ef28">tbb::interface6::memory_pool_allocator< T, P ></a>
+, <a class="el" href="a00126.html#acf24945c12dc0586dfb1f8638daf7838">tbb::scalable_allocator< T ></a>
+, <a class="el" href="a00153.html#afedd8a64eed9692083c708f419338e0c">tbb::tbb_allocator< T ></a>
+, <a class="el" href="a00156.html#abfbea91401d2594deb04ea331734171c">tbb::internal::tbb_exception_ptr</a>
 </li>
 <li>allocator_type
-: <a class="el" href="a00045.html#a1d2cebf242fa83d88eebdc3ad6891fb1">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00046.html#acbdd1a5bd034358fb0774b322a66b1ed">tbb::strict_ppl::concurrent_queue< T, A ></a>
-, <a class="el" href="a00042.html#acbfceb845de1c770e2b56409f09b0364">tbb::concurrent_bounded_queue< T, A ></a>
-, <a class="el" href="a00061.html#ad50ceae1b0e91d0fd31fe506e690692b">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
-, <a class="el" href="a00159.html#aa4606cff0156ec4237c1571204851bfb">tbb::tbb_allocator< T ></a>
+: <a class="el" href="a00038.html#a1d2cebf242fa83d88eebdc3ad6891fb1">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00039.html#acbdd1a5bd034358fb0774b322a66b1ed">tbb::strict_ppl::concurrent_queue< T, A ></a>
+, <a class="el" href="a00035.html#acbfceb845de1c770e2b56409f09b0364">tbb::concurrent_bounded_queue< T, A ></a>
+, <a class="el" href="a00153.html#aa4606cff0156ec4237c1571204851bfb">tbb::tbb_allocator< T ></a>
+, <a class="el" href="a00058.html#ad50ceae1b0e91d0fd31fe506e690692b">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
 </li>
 <li>assign()
-: <a class="el" href="a00053.html#a7bb5399a8499f88cf859eab39f0ed9e0">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00045.html#ac64c7b627708f0d6b2e5421fb0d49150">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-</li>
-<li>async_node()
-: <a class="el" href="a00017.html#aea2575eeaf4b1cc483d4d9854b47e823">tbb::flow::interface7::async_node< Input, Output, Allocator ></a>
-</li>
-<li>async_try_put()
-: <a class="el" href="a00017.html#a565f12fc3ce62a14156398c94f401d9c">tbb::flow::interface7::async_node< Input, Output, Allocator ></a>
-, <a class="el" href="a00016.html#a308f7feb8ac2fc3b7cbcf4e5246e78a2">tbb::flow::interface7::internal::async_gateway< Output ></a>
+: <a class="el" href="a00046.html#a87355dce93d0882aa73333a35c9b367c">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00038.html#ac64c7b627708f0d6b2e5421fb0d49150">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00046.html#a7bb5399a8499f88cf859eab39f0ed9e0">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>at()
-: <a class="el" href="a00053.html#a629a29eb21e528414b9d5c9becfe05cd">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#a629a29eb21e528414b9d5c9becfe05cd">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>automatic
-: <a class="el" href="a00156.html#a945886f5ef48300a8ebff2d077c166b1">tbb::task_scheduler_init</a>
+: <a class="el" href="a00150.html#a945886f5ef48300a8ebff2d077c166b1">tbb::task_scheduler_init</a>
+</li>
+<li>available_devices()
+: <a class="el" href="a00093.html#ab61ac804963875b343626891cef00c7b">tbb::flow::interface9::opencl_graph</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x62.html b/doc/html/functions_0x62.html
index 8e25696..822bee6 100644
--- a/doc/html/functions_0x62.html
+++ b/doc/html/functions_0x62.html
@@ -75,35 +75,34 @@
 
 <h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
 <li>back()
-: <a class="el" href="a00053.html#aaee3ddf1d05238a8a6887f6d824b76f8">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#aaee3ddf1d05238a8a6887f6d824b76f8">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>begin()
-: <a class="el" href="a00024.html#ae225fa10454b0fa33533dfb56f5060a2">tbb::blocked_range< Value ></a>
-, <a class="el" href="a00061.html#aa097383eb6f90e4a551830fc00b60b3a">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
-, <a class="el" href="a00070.html#a91d2f9921342a504668b2cdc3064a846">tbb::flow::interface7::graph</a>
-, <a class="el" href="a00053.html#ab55636c80368ad7d400f3200313fcf5f">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00070.html#ac404d2e08620aca079532124551a646a">tbb::flow::interface7::graph</a>
-, <a class="el" href="a00015.html#a3525dbbac0d4eaedfe18bc57b7760857">tbb::aligned_space< T, N ></a>
-, <a class="el" href="a00053.html#ad3eb33d1b10a988a87cc708ceb08f3a9">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00061.html#a070d26debf1f65c83de13f64f91aefdc">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
+: <a class="el" href="a00022.html#ae225fa10454b0fa33533dfb56f5060a2">tbb::blocked_range< Value ></a>
+, <a class="el" href="a00058.html#aa097383eb6f90e4a551830fc00b60b3a">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
+, <a class="el" href="a00046.html#ab55636c80368ad7d400f3200313fcf5f">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00014.html#a3525dbbac0d4eaedfe18bc57b7760857">tbb::aligned_space< T, N ></a>
+, <a class="el" href="a00046.html#ad3eb33d1b10a988a87cc708ceb08f3a9">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00058.html#a070d26debf1f65c83de13f64f91aefdc">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
 </li>
 <li>blocked_range()
-: <a class="el" href="a00024.html#a75cae12286f4d5492970ea630a9783b9">tbb::blocked_range< Value ></a>
+: <a class="el" href="a00022.html#aad176ab2cbd0bd73c3c2065761af3ccc">tbb::blocked_range< Value ></a>
 </li>
-<li>bucket_count()
-: <a class="el" href="a00043.html#aa067a2a4db1d96f38555369a89deee64">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+<li>blocking_terminate()
+: <a class="el" href="a00150.html#a2721ff874fb21f97b470d14a5ec151f3">tbb::task_scheduler_init</a>
 </li>
-<li>buffer_node()
-: <a class="el" href="a00030.html#a152f7bb9ab1f033ec56caa451327634c">tbb::flow::interface7::buffer_node< T, A ></a>
+<li>bucket_count()
+: <a class="el" href="a00036.html#aa067a2a4db1d96f38555369a89deee64">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 <li>built_successors_type
-: <a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">tbb::flow::interface7::sender< T ></a>
+: <a class="el" href="a00139.html#a437ea39be02895899af68a1a91f6c1e5">tbb::flow::interface9::sender< T ></a>
+, <a class="el" href="a00165.html#a0d674709d3783ec5b42eb243069fed73">tbb::flow::interface9::internal::untyped_sender</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x63.html b/doc/html/functions_0x63.html
index bf394f7..5b99401 100644
--- a/doc/html/functions_0x63.html
+++ b/doc/html/functions_0x63.html
@@ -75,96 +75,91 @@
 
 <h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
 <li>capacity()
-: <a class="el" href="a00042.html#a526487063242569685af8c8d778d39e0">tbb::concurrent_bounded_queue< T, A ></a>
-, <a class="el" href="a00053.html#a96c2ae9dfedc24d62554feb627df76c3">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00035.html#a526487063242569685af8c8d778d39e0">tbb::concurrent_bounded_queue< T, A ></a>
+, <a class="el" href="a00046.html#a96c2ae9dfedc24d62554feb627df76c3">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>cbegin()
-: <a class="el" href="a00070.html#a2af8f195917817ce2b77ff7b6463c344">tbb::flow::interface7::graph</a>
-, <a class="el" href="a00053.html#a7a1c5441fa480c07ef37d9206b6260cc">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#a7a1c5441fa480c07ef37d9206b6260cc">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>cend()
-: <a class="el" href="a00053.html#a9ea80faf139feb54d6576c036e4ba898">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00070.html#acf6d3f610c2675eaf8bf2a40853081aa">tbb::flow::interface7::graph</a>
+: <a class="el" href="a00046.html#a9ea80faf139feb54d6576c036e4ba898">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>clear()
-: <a class="el" href="a00045.html#a2459166998a4103880d603b237c429e6">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00046.html#ad3384818fb6350a494d5ec62445e59ee">tbb::strict_ppl::concurrent_queue< T, A ></a>
-, <a class="el" href="a00042.html#a246be3920e079ea4847933f106baa98f">tbb::concurrent_bounded_queue< T, A ></a>
-, <a class="el" href="a00053.html#a526ba408fb3064ef846940d633b8f365">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00061.html#a85a0d8f088ef1ee07aeb2c0e944a4a5e">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
-, <a class="el" href="a00107.html#ae53edbda1771eeaa254d78ae6100a762">tbb::pipeline</a>
-, <a class="el" href="a00043.html#ab8295bc260b5e4df883fef11574b84c6">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00035.html#a246be3920e079ea4847933f106baa98f">tbb::concurrent_bounded_queue< T, A ></a>
+, <a class="el" href="a00046.html#a526ba408fb3064ef846940d633b8f365">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00036.html#ab8295bc260b5e4df883fef11574b84c6">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+, <a class="el" href="a00058.html#a85a0d8f088ef1ee07aeb2c0e944a4a5e">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
+, <a class="el" href="a00103.html#ae53edbda1771eeaa254d78ae6100a762">tbb::pipeline</a>
+, <a class="el" href="a00038.html#a2459166998a4103880d603b237c429e6">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00039.html#ad3384818fb6350a494d5ec62445e59ee">tbb::strict_ppl::concurrent_queue< T, A ></a>
 </li>
 <li>cols()
-: <a class="el" href="a00025.html#af3bccfaf90126b285491096f78ca9473">tbb::blocked_range2d< RowValue, ColValue ></a>
-, <a class="el" href="a00026.html#a308d7089a1d53ff26770a7040ed817cd">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
+: <a class="el" href="a00023.html#af3bccfaf90126b285491096f78ca9473">tbb::blocked_range2d< RowValue, ColValue ></a>
+, <a class="el" href="a00024.html#a308d7089a1d53ff26770a7040ed817cd">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
 </li>
 <li>concurrent_bounded_queue()
-: <a class="el" href="a00042.html#a85f8a800cae02b601f36ad7a655a0126">tbb::concurrent_bounded_queue< T, A ></a>
+: <a class="el" href="a00035.html#a228b9d3bf3158a9379748894a93fbe55">tbb::concurrent_bounded_queue< T, A ></a>
 </li>
 <li>concurrent_hash_map()
-: <a class="el" href="a00043.html#aa3a9767b525144a2afb69ed125714c53">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00036.html#aa3a9767b525144a2afb69ed125714c53">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 <li>concurrent_priority_queue()
-: <a class="el" href="a00045.html#aa52cea369b6630699ee78cc42622be9d">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+: <a class="el" href="a00038.html#a14dd20a4673f77cff3eb6f269a888016">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
 </li>
 <li>concurrent_queue()
-: <a class="el" href="a00046.html#a49b2e16902577cd3174355be0fa684e5">tbb::strict_ppl::concurrent_queue< T, A ></a>
+: <a class="el" href="a00039.html#a49b2e16902577cd3174355be0fa684e5">tbb::strict_ppl::concurrent_queue< T, A ></a>
 </li>
 <li>concurrent_unordered_map()
-: <a class="el" href="a00047.html#a788a7225915574c1a349abc0f1f653c7">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>
+: <a class="el" href="a00040.html#a788a7225915574c1a349abc0f1f653c7">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>
 </li>
 <li>concurrent_unordered_multimap()
-: <a class="el" href="a00049.html#a5957d29e5fa9f8c53538de3f7a41ebc9">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>
+: <a class="el" href="a00042.html#a5957d29e5fa9f8c53538de3f7a41ebc9">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>
 </li>
 <li>concurrent_unordered_multiset()
-: <a class="el" href="a00050.html#a15631f048043195863c66bad6533bccb">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>
+: <a class="el" href="a00043.html#a15631f048043195863c66bad6533bccb">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>
 </li>
 <li>concurrent_unordered_set()
-: <a class="el" href="a00051.html#a6f6d5ecff239ff13000848e925904fe7">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>
+: <a class="el" href="a00044.html#a6f6d5ecff239ff13000848e925904fe7">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>
 </li>
 <li>concurrent_vector()
-: <a class="el" href="a00053.html#abb0e376a31c3fdb91beaaa98441735f5">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#aa898a39aad73711ceca70cd465dc0b4f">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>const_accessor()
-: <a class="el" href="a00054.html#a7b26d22d228cf0d8678c9b346c63752c">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
+: <a class="el" href="a00047.html#a7b26d22d228cf0d8678c9b346c63752c">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
 </li>
 <li>const_iterator
-: <a class="el" href="a00024.html#ad56ca70af46acf8870b4970d8a809791">tbb::blocked_range< Value ></a>
+: <a class="el" href="a00022.html#ad56ca70af46acf8870b4970d8a809791">tbb::blocked_range< Value ></a>
 </li>
 <li>const_reference
-: <a class="el" href="a00046.html#a478c2b7f763b2e821e01cc14e13baf4c">tbb::strict_ppl::concurrent_queue< T, A ></a>
-, <a class="el" href="a00042.html#af838e520ce0db2c22369748c019b11cb">tbb::concurrent_bounded_queue< T, A ></a>
-, <a class="el" href="a00045.html#a0bd617fe8e4657777e86f0ae15d8094f">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+: <a class="el" href="a00035.html#af838e520ce0db2c22369748c019b11cb">tbb::concurrent_bounded_queue< T, A ></a>
+, <a class="el" href="a00039.html#a478c2b7f763b2e821e01cc14e13baf4c">tbb::strict_ppl::concurrent_queue< T, A ></a>
+, <a class="el" href="a00038.html#a0bd617fe8e4657777e86f0ae15d8094f">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
 </li>
 <li>construct()
-: <a class="el" href="a00159.html#af54fa3029e33cebe5ba64a8538306fdf">tbb::tbb_allocator< T ></a>
-, <a class="el" href="a00032.html#ab316f80a66b991801b4ec4ea88b852d9">tbb::cache_aligned_allocator< T ></a>
-, <a class="el" href="a00093.html#ac51b34ef90ecabdd2e0483e25603a15b">tbb::interface6::memory_pool_allocator< T, P ></a>
-</li>
-<li>continue_node()
-: <a class="el" href="a00056.html#a7b96b9eb41772ff1d7a52329ac56b8f0">tbb::flow::interface7::continue_node< Output ></a>
+: <a class="el" href="a00027.html#ab316f80a66b991801b4ec4ea88b852d9">tbb::cache_aligned_allocator< T ></a>
+, <a class="el" href="a00153.html#af54fa3029e33cebe5ba64a8538306fdf">tbb::tbb_allocator< T ></a>
+, <a class="el" href="a00077.html#ac51b34ef90ecabdd2e0483e25603a15b">tbb::interface6::memory_pool_allocator< T, P ></a>
 </li>
 <li>continue_receiver()
-: <a class="el" href="a00057.html#a3055f8a570f7558b6eb9e210feb91b90">tbb::flow::interface7::continue_receiver</a>
+: <a class="el" href="a00049.html#a3483cef04880be4c4c3907936af9afae">tbb::flow::interface9::continue_receiver</a>
 </li>
 <li>count()
-: <a class="el" href="a00043.html#ac375d3884bf9c80efe56117757c822e7">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00036.html#ac375d3884bf9c80efe56117757c822e7">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 <li>crbegin()
-: <a class="el" href="a00053.html#a2627db4a7949522ea4727320b23a6348">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#a2627db4a7949522ea4727320b23a6348">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>crend()
-: <a class="el" href="a00053.html#ad097225c529dbb24cc0e13a444ab4752">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#ad097225c529dbb24cc0e13a444ab4752">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>current_thread_index()
-: <a class="el" href="a00150.html#af695a8aa3d2a4f498067c662e287dd8f">tbb::interface7::task_arena</a>
+: <a class="el" href="a00144.html#af695a8aa3d2a4f498067c662e287dd8f">tbb::interface7::task_arena</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x64.html b/doc/html/functions_0x64.html
index 2fda154..df63eb3 100644
--- a/doc/html/functions_0x64.html
+++ b/doc/html/functions_0x64.html
@@ -75,52 +75,46 @@
 
 <h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
 <li>deallocate()
-: <a class="el" href="a00032.html#a7f7310e046c4b6b8618864de8e27a471">tbb::cache_aligned_allocator< T ></a>
-, <a class="el" href="a00093.html#a9fcf288f2d653972d1bdc0c65abebed4">tbb::interface6::memory_pool_allocator< T, P ></a>
-, <a class="el" href="a00159.html#a28e333e0fff56dd53c20b82cfee430ab">tbb::tbb_allocator< T ></a>
-, <a class="el" href="a00129.html#a0632b19f25e5d5f86f18b3101925f488">tbb::scalable_allocator< T ></a>
+: <a class="el" href="a00027.html#a7f7310e046c4b6b8618864de8e27a471">tbb::cache_aligned_allocator< T ></a>
+, <a class="el" href="a00077.html#a9fcf288f2d653972d1bdc0c65abebed4">tbb::interface6::memory_pool_allocator< T, P ></a>
+, <a class="el" href="a00153.html#a28e333e0fff56dd53c20b82cfee430ab">tbb::tbb_allocator< T ></a>
+, <a class="el" href="a00126.html#a0632b19f25e5d5f86f18b3101925f488">tbb::scalable_allocator< T ></a>
 </li>
 <li>debug_wait_until_empty()
-: <a class="el" href="a00150.html#a07d87dff8c6116ee349684e10f754aeb">tbb::interface7::task_arena</a>
-</li>
-<li>decrement
-: <a class="el" href="a00091.html#ac313b6586bf183a33c3196037964547d">tbb::flow::interface7::limiter_node< T ></a>
-</li>
-<li>decrement_wait_count()
-: <a class="el" href="a00070.html#af16d14eaed1355ae376bb78dde7762c3">tbb::flow::interface7::graph</a>
+: <a class="el" href="a00144.html#a07d87dff8c6116ee349684e10f754aeb">tbb::interface7::task_arena</a>
 </li>
 <li>default_num_threads()
-: <a class="el" href="a00156.html#aa0c0d46ec09bedc1ee876aa8aa87c3d1">tbb::task_scheduler_init</a>
+: <a class="el" href="a00150.html#aa0c0d46ec09bedc1ee876aa8aa87c3d1">tbb::task_scheduler_init</a>
 </li>
 <li>deferred
-: <a class="el" href="a00156.html#af0e49ff2f59a4e53c9c07897b57f084d">tbb::task_scheduler_init</a>
+: <a class="el" href="a00150.html#af0e49ff2f59a4e53c9c07897b57f084d">tbb::task_scheduler_init</a>
 </li>
 <li>destroy()
-: <a class="el" href="a00097.html#a02f0401b465690de797face2432d9421">tbb::movable_exception< ExceptionData ></a>
-, <a class="el" href="a00162.html#a38d3ca480e2758a67bcd7427b156daae">tbb::internal::tbb_exception_ptr</a>
-, <a class="el" href="a00032.html#af2fd054d055403d4ea669fd3af661cc8">tbb::cache_aligned_allocator< T ></a>
-, <a class="el" href="a00093.html#a2223b6469f88aadc432a4b3f88728d0f">tbb::interface6::memory_pool_allocator< T, P ></a>
-, <a class="el" href="a00159.html#ac7b1b393a8ff3399079328c0971c1996">tbb::tbb_allocator< T ></a>
-, <a class="el" href="a00161.html#ad3bc09bf78c33f19a0bcdf882fdf9d41">tbb::tbb_exception</a>
-, <a class="el" href="a00035.html#a3006b6825dda6c746d28fb748f5675de">tbb::captured_exception</a>
+: <a class="el" href="a00027.html#af2fd054d055403d4ea669fd3af661cc8">tbb::cache_aligned_allocator< T ></a>
+, <a class="el" href="a00077.html#a2223b6469f88aadc432a4b3f88728d0f">tbb::interface6::memory_pool_allocator< T, P ></a>
+, <a class="el" href="a00153.html#ac7b1b393a8ff3399079328c0971c1996">tbb::tbb_allocator< T ></a>
+, <a class="el" href="a00155.html#ad3bc09bf78c33f19a0bcdf882fdf9d41">tbb::tbb_exception</a>
+, <a class="el" href="a00032.html#abfc1220a6f9da0361082a3f3ad80cdc9">tbb::captured_exception</a>
+, <a class="el" href="a00081.html#aa4be7e2bf375edcb218fb5d7ed8e279b">tbb::movable_exception< ExceptionData ></a>
+, <a class="el" href="a00156.html#a38d3ca480e2758a67bcd7427b156daae">tbb::internal::tbb_exception_ptr</a>
 </li>
 <li>detach()
-: <a class="el" href="a00164.html#a80a31a41708872af5557b907f129b19b">tbb::internal::tbb_thread_v3</a>
+: <a class="el" href="a00157.html#a80a31a41708872af5557b907f129b19b">tbb::internal::tbb_thread_v3</a>
 </li>
 <li>difference_type
-: <a class="el" href="a00045.html#ae010b1fa9c0942504737228474b51a0b">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00042.html#a72725361e050c5a981035a20ef1b773e">tbb::concurrent_bounded_queue< T, A ></a>
-, <a class="el" href="a00046.html#a63b42d83a9ed13fc6741e0b4388b0e96">tbb::strict_ppl::concurrent_queue< T, A ></a>
+: <a class="el" href="a00038.html#ae010b1fa9c0942504737228474b51a0b">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00035.html#a72725361e050c5a981035a20ef1b773e">tbb::concurrent_bounded_queue< T, A ></a>
+, <a class="el" href="a00039.html#a63b42d83a9ed13fc6741e0b4388b0e96">tbb::strict_ppl::concurrent_queue< T, A ></a>
 </li>
 <li>downgrade_to_reader()
-: <a class="el" href="a00135.html#aa693c05221d977856a98270a255fe5df">tbb::spin_rw_mutex_v3::scoped_lock</a>
+: <a class="el" href="a00134.html#aa693c05221d977856a98270a255fe5df">tbb::spin_rw_mutex_v3::scoped_lock</a>
 , <a class="el" href="a00131.html#af0af63035147a3d8422f8c8d7b8d2629">tbb::queuing_rw_mutex::scoped_lock</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x65.html b/doc/html/functions_0x65.html
index 49a83bf..6aefbbd 100644
--- a/doc/html/functions_0x65.html
+++ b/doc/html/functions_0x65.html
@@ -75,94 +75,93 @@
 
 <h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
 <li>ec_bad_arg
-: <a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7afd928f63eb3da0980e746d58374b07c3">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7afd928f63eb3da0980e746d58374b07c3">tbb::interface6::runtime_loader</a>
 </li>
 <li>ec_bad_call
-: <a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7a670e4d0a5a3c1bbcdff9e5ee16dc9c01">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7a670e4d0a5a3c1bbcdff9e5ee16dc9c01">tbb::interface6::runtime_loader</a>
 </li>
 <li>ec_bad_lib
-: <a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7a71f874957c0322f499ba764dd0bb8732">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7a71f874957c0322f499ba764dd0bb8732">tbb::interface6::runtime_loader</a>
 </li>
 <li>ec_bad_ver
-: <a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7aae7497a49ceae69d06d6ab9fef636064">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7aae7497a49ceae69d06d6ab9fef636064">tbb::interface6::runtime_loader</a>
 </li>
 <li>ec_no_lib
-: <a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7a5e694560f3ada80d2cc25881b5ae43dd">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7a5e694560f3ada80d2cc25881b5ae43dd">tbb::interface6::runtime_loader</a>
 </li>
 <li>ec_ok
-: <a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7afc7eba28f2fc936312f041cf85276434">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7afc7eba28f2fc936312f041cf85276434">tbb::interface6::runtime_loader</a>
 </li>
 <li>em_abort
-: <a class="el" href="a00128.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35">tbb::interface6::runtime_loader</a>
 </li>
 <li>em_status
-: <a class="el" href="a00128.html#ab85c82f9c0ccd91905f2795a79ac1295af9c9137d6acdb0fd37f1a92b5cdaeb36">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#ab85c82f9c0ccd91905f2795a79ac1295af9c9137d6acdb0fd37f1a92b5cdaeb36">tbb::interface6::runtime_loader</a>
 </li>
 <li>em_throw
-: <a class="el" href="a00128.html#ab85c82f9c0ccd91905f2795a79ac1295a17ec1019cffa635146eaefb042e28a2c">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#ab85c82f9c0ccd91905f2795a79ac1295a17ec1019cffa635146eaefb042e28a2c">tbb::interface6::runtime_loader</a>
 </li>
 <li>emplace()
-: <a class="el" href="a00043.html#a382178ea2f00f69096c91bcf76ae7913">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
-, <a class="el" href="a00045.html#a278d208cd92e5aeccc9c7f6fc192e3ce">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+: <a class="el" href="a00036.html#a382178ea2f00f69096c91bcf76ae7913">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+, <a class="el" href="a00038.html#a278d208cd92e5aeccc9c7f6fc192e3ce">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
 </li>
 <li>emplace_back()
-: <a class="el" href="a00053.html#afae4c378515b89cc2b0a11c8cf1bcc50">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#afae4c378515b89cc2b0a11c8cf1bcc50">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>empty()
-: <a class="el" href="a00025.html#a5805972c8c41b2681d286f9c9771cf52">tbb::blocked_range2d< RowValue, ColValue ></a>
-, <a class="el" href="a00026.html#aea992e0cd3d105f964a633b1a0a1a05f">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
-, <a class="el" href="a00054.html#a6299b523d2ae8e2613f1bc160ca99b85">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
-, <a class="el" href="a00043.html#a5e05f2a1ca3accfb4252d7ee82d1e990">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
-, <a class="el" href="a00045.html#a8dec2dd0e8b22af14f1753eaef1bf5eb">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00046.html#aeda3156929d0c250faed7b807ca6ab0e">tbb::strict_ppl::concurrent_queue< T, A ></a>
-, <a class="el" href="a00042.html#a8c59578f28c5fb4718b0eff43776e879">tbb::concurrent_bounded_queue< T, A ></a>
-, <a class="el" href="a00053.html#aa3f6774107e65642f73c0dcc9a962fe7">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00061.html#adfa4b2e13e47ab825dc40c4f195d2bc5">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
-, <a class="el" href="a00024.html#a59dec03416b3fefbf69600f798177710">tbb::blocked_range< Value ></a>
+: <a class="el" href="a00023.html#a5805972c8c41b2681d286f9c9771cf52">tbb::blocked_range2d< RowValue, ColValue ></a>
+, <a class="el" href="a00024.html#aea992e0cd3d105f964a633b1a0a1a05f">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
+, <a class="el" href="a00047.html#a6299b523d2ae8e2613f1bc160ca99b85">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
+, <a class="el" href="a00036.html#a5e05f2a1ca3accfb4252d7ee82d1e990">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+, <a class="el" href="a00038.html#a8dec2dd0e8b22af14f1753eaef1bf5eb">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00039.html#aeda3156929d0c250faed7b807ca6ab0e">tbb::strict_ppl::concurrent_queue< T, A ></a>
+, <a class="el" href="a00035.html#a8c59578f28c5fb4718b0eff43776e879">tbb::concurrent_bounded_queue< T, A ></a>
+, <a class="el" href="a00046.html#aa3f6774107e65642f73c0dcc9a962fe7">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00058.html#adfa4b2e13e47ab825dc40c4f195d2bc5">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
+, <a class="el" href="a00022.html#a59dec03416b3fefbf69600f798177710">tbb::blocked_range< Value ></a>
 </li>
 <li>end()
-: <a class="el" href="a00070.html#a599e6a885a76db84928b039063c299e4">tbb::flow::interface7::graph</a>
-, <a class="el" href="a00015.html#ae95620e1159984a2670bd418ed4748d0">tbb::aligned_space< T, N ></a>
-, <a class="el" href="a00024.html#a99f829599d3e51b181a30b4cd57b06c6">tbb::blocked_range< Value ></a>
-, <a class="el" href="a00053.html#aad2c07653375e4a5f89c33b375eda610">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00061.html#ad225e2e8a968b131bf05d72f5686b924">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
-, <a class="el" href="a00053.html#a6a4ad0795a19d94df24595e748f0b193">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00061.html#a5ed0248f10a7aa5045d2cda77dad9588">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
+: <a class="el" href="a00058.html#ad225e2e8a968b131bf05d72f5686b924">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
+, <a class="el" href="a00014.html#ae95620e1159984a2670bd418ed4748d0">tbb::aligned_space< T, N ></a>
+, <a class="el" href="a00022.html#a99f829599d3e51b181a30b4cd57b06c6">tbb::blocked_range< Value ></a>
+, <a class="el" href="a00046.html#aad2c07653375e4a5f89c33b375eda610">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00058.html#a5ed0248f10a7aa5045d2cda77dad9588">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
 </li>
 <li>enqueue()
-: <a class="el" href="a00150.html#a8034275ed2fffa68f70484043b90d406">tbb::interface7::task_arena</a>
+: <a class="el" href="a00144.html#a9a04ab4afb2d74b0317618f59ab49be7">tbb::interface7::task_arena</a>
 </li>
 <li>enumerable_thread_specific()
-: <a class="el" href="a00061.html#a6f0249ee95fa56665da4b6984f3a685a">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
+: <a class="el" href="a00058.html#ad95ccef01367c0b6d75f6f91f5bf5315">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
 </li>
 <li>erase()
-: <a class="el" href="a00043.html#a5144122dbb946d933b94a92117543b33">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00036.html#a3ed0fbcc6cfd4db8242e100355ac1fa5">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 <li>error_code
-: <a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7">tbb::interface6::runtime_loader</a>
 </li>
 <li>error_mode
-: <a class="el" href="a00128.html#ab85c82f9c0ccd91905f2795a79ac1295">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#ab85c82f9c0ccd91905f2795a79ac1295">tbb::interface6::runtime_loader</a>
 </li>
 <li>exact_exception_propagation
-: <a class="el" href="a00062.html#aab9689e23a96c6c9bf1c8caae74d92ee">tbb::filter</a>
+: <a class="el" href="a00059.html#aab9689e23a96c6c9bf1c8caae74d92ee">tbb::filter</a>
 </li>
 <li>exclude()
-: <a class="el" href="a00043.html#a6fec452b31b8f0e185dc2de64b7128b2">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00036.html#a6fec452b31b8f0e185dc2de64b7128b2">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 <li>execute()
-: <a class="el" href="a00057.html#adf70ce80d67a565d04e029da461bbe72">tbb::flow::interface7::continue_receiver</a>
-, <a class="el" href="a00150.html#af0c96f325b59d567b4c720f2830adde8">tbb::interface7::task_arena</a>
-, <a class="el" href="a00012.html#aa7cc924b6f0d17578d61fd9002f59f84">tbb::interface6::aggregator</a>
+: <a class="el" href="a00049.html#ace97f82507453a8f3bc234d8de9f960d">tbb::flow::interface9::continue_receiver</a>
+, <a class="el" href="a00144.html#ab8442c8e9e3e678349409e08cabc7ae2">tbb::interface7::task_arena</a>
+, <a class="el" href="a00011.html#aa7cc924b6f0d17578d61fd9002f59f84">tbb::interface6::aggregator</a>
+, <a class="el" href="a00144.html#af0c96f325b59d567b4c720f2830adde8">tbb::interface7::task_arena</a>
 </li>
 <li>execute_impl()
-: <a class="el" href="a00013.html#ad376e5c31d10e885f33964592aa629d4">tbb::interface6::aggregator_ext< handler_type ></a>
+: <a class="el" href="a00012.html#ad376e5c31d10e885f33964592aa629d4">tbb::interface6::aggregator_ext< handler_type ></a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x66.html b/doc/html/functions_0x66.html
index f799366..5038a16 100644
--- a/doc/html/functions_0x66.html
+++ b/doc/html/functions_0x66.html
@@ -75,40 +75,34 @@
 
 <h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
 <li>filter_is_bound
-: <a class="el" href="a00062.html#a1382f216bd094064a18eb48ecc43c86b">tbb::filter</a>
+: <a class="el" href="a00059.html#a1382f216bd094064a18eb48ecc43c86b">tbb::filter</a>
 </li>
 <li>filter_is_out_of_order
-: <a class="el" href="a00062.html#a091fcf6abc79edfa5c8bf01f742e2392">tbb::filter</a>
+: <a class="el" href="a00059.html#a091fcf6abc79edfa5c8bf01f742e2392">tbb::filter</a>
 </li>
 <li>filter_is_serial
-: <a class="el" href="a00062.html#ae9dab2e01b0963b341ab04b59eec1475">tbb::filter</a>
+: <a class="el" href="a00059.html#ae9dab2e01b0963b341ab04b59eec1475">tbb::filter</a>
 </li>
 <li>filter_may_emit_null
-: <a class="el" href="a00062.html#a6645ec56872b6ba2056dcaa467e292f7">tbb::filter</a>
+: <a class="el" href="a00059.html#a6645ec56872b6ba2056dcaa467e292f7">tbb::filter</a>
 </li>
 <li>find()
-: <a class="el" href="a00043.html#a27a3f296dc170ae25f8e3fd9efa93cff">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00036.html#a27a3f296dc170ae25f8e3fd9efa93cff">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 <li>finish()
-: <a class="el" href="a00014.html#ac7edadfe74f475783f3b429904e7010a">tbb::interface6::aggregator_operation</a>
+: <a class="el" href="a00013.html#ac7edadfe74f475783f3b429904e7010a">tbb::interface6::aggregator_operation</a>
 </li>
 <li>fixed_pool()
-: <a class="el" href="a00065.html#aa3811fe3d437ba2eefa926d52732491a">tbb::interface6::fixed_pool</a>
-</li>
-<li>forward_task()
-: <a class="el" href="a00030.html#a8910a497040a4c6f1a6a1fb7a33a8888">tbb::flow::interface7::buffer_node< T, A ></a>
+: <a class="el" href="a00062.html#aa3811fe3d437ba2eefa926d52732491a">tbb::interface6::fixed_pool</a>
 </li>
 <li>front()
-: <a class="el" href="a00053.html#a9067259572c2c41d014840d0f9d3cdce">tbb::concurrent_vector< T, A ></a>
-</li>
-<li>function_node()
-: <a class="el" href="a00068.html#a1bb4915f2b6d6fbfbe6bfacece5639c6">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a>
+: <a class="el" href="a00046.html#a9bfc6d733cf543280b691ed8d7b7908a">tbb::concurrent_vector< T, A ></a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x67.html b/doc/html/functions_0x67.html
index 6c00e2e..afbb195 100644
--- a/doc/html/functions_0x67.html
+++ b/doc/html/functions_0x67.html
@@ -75,32 +75,26 @@
 
 <h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
 <li>get_allocator()
-: <a class="el" href="a00043.html#a121865c574f8ae5cae69ed3d6b7e0511">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
-, <a class="el" href="a00045.html#a312e88e51246da4c516d35abbb30721a">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00042.html#aaeba11bbcd368a7a3a6e6e2dd3082c9c">tbb::concurrent_bounded_queue< T, A ></a>
-, <a class="el" href="a00053.html#a88b62a9614d3f2b59c9c7c1a2143fb1e">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00046.html#a7f2b39f350281590b86db906eca6c480">tbb::strict_ppl::concurrent_queue< T, A ></a>
+: <a class="el" href="a00036.html#a121865c574f8ae5cae69ed3d6b7e0511">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+, <a class="el" href="a00038.html#a312e88e51246da4c516d35abbb30721a">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00035.html#aaeba11bbcd368a7a3a6e6e2dd3082c9c">tbb::concurrent_bounded_queue< T, A ></a>
+, <a class="el" href="a00046.html#a88b62a9614d3f2b59c9c7c1a2143fb1e">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00039.html#a7f2b39f350281590b86db906eca6c480">tbb::strict_ppl::concurrent_queue< T, A ></a>
 </li>
 <li>grainsize()
-: <a class="el" href="a00024.html#ab408f3cf90c85fa9203df5641a2f9bb1">tbb::blocked_range< Value ></a>
-</li>
-<li>graph()
-: <a class="el" href="a00070.html#a656cee3d0240a3f142a450800e6b17c7">tbb::flow::interface7::graph</a>
-</li>
-<li>graph_iterator()
-: <a class="el" href="a00071.html#a5082b1f425ffbd4a93533230d6ff99c0">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a>
+: <a class="el" href="a00022.html#ab408f3cf90c85fa9203df5641a2f9bb1">tbb::blocked_range< Value ></a>
 </li>
 <li>grow_by()
-: <a class="el" href="a00053.html#aa11fc991cda82cf93789fce31b37a16c">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#aa11fc991cda82cf93789fce31b37a16c">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>grow_to_at_least()
-: <a class="el" href="a00053.html#a422d9689ed72a5ef2b6b72f28e4143a2">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#a422d9689ed72a5ef2b6b72f28e4143a2">tbb::concurrent_vector< T, A ></a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x68.html b/doc/html/functions_0x68.html
index c24f7fb..80e220a 100644
--- a/doc/html/functions_0x68.html
+++ b/doc/html/functions_0x68.html
@@ -75,13 +75,13 @@
 
 <h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
 <li>hardware_concurrency()
-: <a class="el" href="a00164.html#a23d7a420709b2e2b29b42dea897bd8bc">tbb::internal::tbb_thread_v3</a>
+: <a class="el" href="a00157.html#a23d7a420709b2e2b29b42dea897bd8bc">tbb::internal::tbb_thread_v3</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x69.html b/doc/html/functions_0x69.html
index 4daab93..11c5bb5 100644
--- a/doc/html/functions_0x69.html
+++ b/doc/html/functions_0x69.html
@@ -74,76 +74,60 @@
 <div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
 
 <h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
-<li>increment_wait_count()
-: <a class="el" href="a00070.html#ad96c910ae45e6c5d2433bb1d9e910891">tbb::flow::interface7::graph</a>
-</li>
 <li>initialize()
-: <a class="el" href="a00150.html#a955131a79f8dc5a0a5c9ffa66a7e7140">tbb::interface7::task_arena</a>
-, <a class="el" href="a00156.html#a485028b867bffef5829209330e79e64c">tbb::task_scheduler_init</a>
-, <a class="el" href="a00150.html#a754d60ba6981461eb7c86afd14d3da2a">tbb::interface7::task_arena</a>
+: <a class="el" href="a00144.html#a955131a79f8dc5a0a5c9ffa66a7e7140">tbb::interface7::task_arena</a>
+, <a class="el" href="a00150.html#a485028b867bffef5829209330e79e64c">tbb::task_scheduler_init</a>
+, <a class="el" href="a00144.html#aace9ac1366eb3e0ec921da11699ba236">tbb::interface7::task_arena</a>
 </li>
 <li>input_type
-: <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">tbb::flow::interface7::receiver< T ></a>
-, <a class="el" href="a00057.html#a7474ed0edad2bb26d9f86065ecf2c93d">tbb::flow::interface7::continue_receiver</a>
+: <a class="el" href="a00049.html#a9b5c2950832344121fcc9e83ce569786">tbb::flow::interface9::continue_receiver</a>
+, <a class="el" href="a00120.html#a67a0833e5e6520286423a5f04969dcd4">tbb::flow::interface9::receiver_gateway< Input ></a>
+, <a class="el" href="a00119.html#ac7e1e823c3a7d6e491e336ff832a2495">tbb::flow::interface9::receiver< T ></a>
 </li>
 <li>insert()
-: <a class="el" href="a00043.html#aaebb10a9e9dcb24e63860caa745a281d">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00036.html#a50c929e78ecfa36986c8821287665a70">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 <li>internal_construct()
-: <a class="el" href="a00145.html#a4ec484f4df6ec5595ec821ef20bd6cd7">tbb::spin_mutex</a>
+: <a class="el" href="a00140.html#a4ec484f4df6ec5595ec821ef20bd6cd7">tbb::spin_mutex</a>
 </li>
 <li>internal_copy()
-: <a class="el" href="a00043.html#a0bc3593f82b3b4f9839fc051780212ab">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00036.html#a0bc3593f82b3b4f9839fc051780212ab">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 <li>internal_equal_range()
-: <a class="el" href="a00043.html#a8603f5288db63ec35a16844427e97e42">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00036.html#a8603f5288db63ec35a16844427e97e42">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 <li>internal_fast_find()
-: <a class="el" href="a00043.html#acbb5b18c097fb32f264b7b5fe8d9fdd4">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
-</li>
-<li>internal_forward_task()
-: <a class="el" href="a00110.html#a1ab7e37f537acb75175844bd34132b99">tbb::flow::interface7::queue_node< T, A ></a>
-, <a class="el" href="a00030.html#a3aa7578ccbd3d5f986869ab8698c037c">tbb::flow::interface7::buffer_node< T, A ></a>
-, <a class="el" href="a00109.html#a4e6d43ca8748046098fd27ca97e58f3d">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a>
-</li>
-<li>internal_reg_succ()
-: <a class="el" href="a00030.html#afa2dd93a1b42e77ccf7e1de0fddf3158">tbb::flow::interface7::buffer_node< T, A ></a>
-</li>
-<li>internal_rem_succ()
-: <a class="el" href="a00030.html#a46c7f9cd9130036244d4ea8efd74bf22">tbb::flow::interface7::buffer_node< T, A ></a>
+: <a class="el" href="a00036.html#acbb5b18c097fb32f264b7b5fe8d9fdd4">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 <li>interval_t()
-: <a class="el" href="a00085.html#a73b462297173f6bffa15bc5a86c30ef4">tbb::tick_count::interval_t</a>
+: <a class="el" href="a00072.html#a73b462297173f6bffa15bc5a86c30ef4">tbb::tick_count::interval_t</a>
 </li>
 <li>is_active()
-: <a class="el" href="a00150.html#ad85856cefa30d42155a2b122b03efd8c">tbb::interface7::task_arena</a>
-, <a class="el" href="a00156.html#aed5505d7fed9d5493676aa15c176512c">tbb::task_scheduler_init</a>
-</li>
-<li>is_cancelled()
-: <a class="el" href="a00070.html#a9e26f4f5d608e39c8adc9dc6d06a7a01">tbb::flow::interface7::graph</a>
+: <a class="el" href="a00150.html#aed5505d7fed9d5493676aa15c176512c">tbb::task_scheduler_init</a>
+, <a class="el" href="a00144.html#ad85856cefa30d42155a2b122b03efd8c">tbb::interface7::task_arena</a>
 </li>
 <li>is_divisible()
-: <a class="el" href="a00024.html#ad90ad1db0d4d9a301ef1c9e17712e8a0">tbb::blocked_range< Value ></a>
-, <a class="el" href="a00025.html#ac84c6cc2ff8b0974ffa719fed804f586">tbb::blocked_range2d< RowValue, ColValue ></a>
-, <a class="el" href="a00026.html#a0fce6bcae6269c37623c3a2cdbb8bcf0">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
+: <a class="el" href="a00023.html#ac84c6cc2ff8b0974ffa719fed804f586">tbb::blocked_range2d< RowValue, ColValue ></a>
+, <a class="el" href="a00022.html#ad90ad1db0d4d9a301ef1c9e17712e8a0">tbb::blocked_range< Value ></a>
+, <a class="el" href="a00024.html#a0fce6bcae6269c37623c3a2cdbb8bcf0">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
 </li>
 <li>is_observing()
-: <a class="el" href="a00158.html#a31abaf256f7172f010cfb2259c7787bb">tbb::internal::task_scheduler_observer_v3</a>
+: <a class="el" href="a00152.html#a31abaf256f7172f010cfb2259c7787bb">tbb::internal::task_scheduler_observer_v3</a>
 </li>
 <li>is_splittable_in_proportion
-: <a class="el" href="a00025.html#aa0519760654368000f7ebc87d9bfe898">tbb::blocked_range2d< RowValue, ColValue ></a>
-, <a class="el" href="a00026.html#a5940c1bd6ba0e8184ef83dea0ae56884">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
-, <a class="el" href="a00024.html#ae2b0210e2468092b408123adeb54b01c">tbb::blocked_range< Value ></a>
+: <a class="el" href="a00023.html#aa0519760654368000f7ebc87d9bfe898">tbb::blocked_range2d< RowValue, ColValue ></a>
+, <a class="el" href="a00022.html#ae2b0210e2468092b408123adeb54b01c">tbb::blocked_range< Value ></a>
+, <a class="el" href="a00024.html#a5940c1bd6ba0e8184ef83dea0ae56884">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
 </li>
-<li>is_writer
-: <a class="el" href="a00135.html#acfd129dc5106ad1129ba803e67311050">tbb::spin_rw_mutex_v3::scoped_lock</a>
-, <a class="el" href="a00029.html#aaa8167e2961330435fd23eb92127805c">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a>
+<li>is_writer()
+: <a class="el" href="a00026.html#aaa8167e2961330435fd23eb92127805c">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a>
+, <a class="el" href="a00134.html#acfd129dc5106ad1129ba803e67311050">tbb::spin_rw_mutex_v3::scoped_lock</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x6a.html b/doc/html/functions_0x6a.html
index c90be15..855ef40 100644
--- a/doc/html/functions_0x6a.html
+++ b/doc/html/functions_0x6a.html
@@ -75,13 +75,13 @@
 
 <h3><a class="anchor" id="index_j"></a>- j -</h3><ul>
 <li>join()
-: <a class="el" href="a00164.html#a044c8727c51e921b0cc43a6b057eb559">tbb::internal::tbb_thread_v3</a>
+: <a class="el" href="a00157.html#a044c8727c51e921b0cc43a6b057eb559">tbb::internal::tbb_thread_v3</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x6c.html b/doc/html/functions_0x6c.html
index c8ced37..ac43665 100644
--- a/doc/html/functions_0x6c.html
+++ b/doc/html/functions_0x6c.html
@@ -75,34 +75,33 @@
 
 <h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
 <li>limiter_node
-: <a class="el" href="a00124.html#a05ec930a348f7eed564236d00edbda24">tbb::flow::interface7::receiver< T ></a>
-, <a class="el" href="a00091.html#af1c8daee8d1fd31e63f78dbb8d0ec87d">tbb::flow::interface7::limiter_node< T ></a>
+: <a class="el" href="a00119.html#a05ec930a348f7eed564236d00edbda24">tbb::flow::interface9::receiver< T ></a>
 </li>
 <li>load()
-: <a class="el" href="a00128.html#ae2949e9adcac56a2cb9864437be8e22e">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#ae2949e9adcac56a2cb9864437be8e22e">tbb::interface6::runtime_loader</a>
 </li>
 <li>local()
-: <a class="el" href="a00061.html#aea846c6cbafbe2ff6bde6e8c2a2ee97e">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
+: <a class="el" href="a00058.html#abbbc24a5816dc163d5df057c5e7f379d">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
 </li>
 <li>lock()
-: <a class="el" href="a00125.html#adea997b45dc4a360f38d14bde9c991f2">tbb::recursive_mutex</a>
-, <a class="el" href="a00146.html#a51e207646300a4c242bb4aaa4e04e9b8">tbb::spin_rw_mutex_v3</a>
-, <a class="el" href="a00113.html#af92eb949fc491af8f7e350869ea0a0d1">tbb::interface5::reader_writer_lock</a>
-, <a class="el" href="a00145.html#a8957e40b0781192419d01d28e5205ec4">tbb::spin_mutex</a>
-, <a class="el" href="a00099.html#a95ff02ee699b34696001db4003c11a3a">tbb::mutex</a>
+: <a class="el" href="a00140.html#a8957e40b0781192419d01d28e5205ec4">tbb::spin_mutex</a>
+, <a class="el" href="a00141.html#a51e207646300a4c242bb4aaa4e04e9b8">tbb::spin_rw_mutex_v3</a>
+, <a class="el" href="a00121.html#adea997b45dc4a360f38d14bde9c991f2">tbb::recursive_mutex</a>
+, <a class="el" href="a00082.html#a95ff02ee699b34696001db4003c11a3a">tbb::mutex</a>
+, <a class="el" href="a00108.html#af92eb949fc491af8f7e350869ea0a0d1">tbb::interface5::reader_writer_lock</a>
 </li>
 <li>lock_read()
-: <a class="el" href="a00146.html#aa0e3bb644e9021d0f80ee36b03f228e4">tbb::spin_rw_mutex_v3</a>
-, <a class="el" href="a00113.html#a6fd4fcdf0e5c0425d1cc736d644f234f">tbb::interface5::reader_writer_lock</a>
+: <a class="el" href="a00141.html#aa0e3bb644e9021d0f80ee36b03f228e4">tbb::spin_rw_mutex_v3</a>
+, <a class="el" href="a00108.html#a6fd4fcdf0e5c0425d1cc736d644f234f">tbb::interface5::reader_writer_lock</a>
 </li>
 <li>lookup()
-: <a class="el" href="a00043.html#a2a319cf46fb9cf9a88aab6c0a20c98b3">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00036.html#a2a319cf46fb9cf9a88aab6c0a20c98b3">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x6d.html b/doc/html/functions_0x6d.html
index 8472e46..7f2763e 100644
--- a/doc/html/functions_0x6d.html
+++ b/doc/html/functions_0x6d.html
@@ -75,42 +75,45 @@
 
 <h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
 <li>make_filter
-: <a class="el" href="a00063.html#a21460fde704da22caa222778f5abb140">tbb::interface6::filter_t< T, U ></a>
+: <a class="el" href="a00060.html#a21460fde704da22caa222778f5abb140">tbb::interface6::filter_t< T, U ></a>
 </li>
 <li>malloc_type
-: <a class="el" href="a00159.html#a60463a571d5c20f7762112367261ad94">tbb::tbb_allocator< T ></a>
+: <a class="el" href="a00153.html#a60463a571d5c20f7762112367261ad94">tbb::tbb_allocator< T ></a>
+</li>
+<li>max_concurrency()
+: <a class="el" href="a00144.html#a2977b0fba9253e6cab31570f4992c998">tbb::interface7::task_arena</a>
 </li>
 <li>max_size()
-: <a class="el" href="a00043.html#aea0a0e5220a0dcb67da57d0280d36005">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
-, <a class="el" href="a00159.html#a0a2676fb8a2f931961d373b88848c93e">tbb::tbb_allocator< T ></a>
-, <a class="el" href="a00053.html#a0ec9c3ab3360e04bdaa5174956a3206d">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00032.html#a4b945b3180ea3dfe16dfa048f4591c6d">tbb::cache_aligned_allocator< T ></a>
-, <a class="el" href="a00093.html#a2bded8e3fb2cec32b48771e7a1bbb838">tbb::interface6::memory_pool_allocator< T, P ></a>
-, <a class="el" href="a00129.html#afaa85d739b466699cf669116fd10d175">tbb::scalable_allocator< T ></a>
+: <a class="el" href="a00027.html#a4b945b3180ea3dfe16dfa048f4591c6d">tbb::cache_aligned_allocator< T ></a>
+, <a class="el" href="a00126.html#afaa85d739b466699cf669116fd10d175">tbb::scalable_allocator< T ></a>
+, <a class="el" href="a00153.html#a0a2676fb8a2f931961d373b88848c93e">tbb::tbb_allocator< T ></a>
+, <a class="el" href="a00036.html#aea0a0e5220a0dcb67da57d0280d36005">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+, <a class="el" href="a00046.html#a0ec9c3ab3360e04bdaa5174956a3206d">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00077.html#a2bded8e3fb2cec32b48771e7a1bbb838">tbb::interface6::memory_pool_allocator< T, P ></a>
 </li>
 <li>may_sleep()
-: <a class="el" href="a00157.html#a2390325945912ee7ce58cd9700664ea4">tbb::interface6::task_scheduler_observer</a>
+: <a class="el" href="a00151.html#a2390325945912ee7ce58cd9700664ea4">tbb::interface6::task_scheduler_observer</a>
 </li>
 <li>memory_pool()
-: <a class="el" href="a00092.html#af4c36829a159eac04d630ac5a99b9354">tbb::interface6::memory_pool< Alloc ></a>
+: <a class="el" href="a00076.html#af4c36829a159eac04d630ac5a99b9354">tbb::interface6::memory_pool< Alloc ></a>
 </li>
 <li>move()
-: <a class="el" href="a00161.html#a4bd4ba0d501021013d1473d21b020b69">tbb::tbb_exception</a>
-, <a class="el" href="a00097.html#aeb47d3ac90a1f01fe642b572f6ac519d">tbb::movable_exception< ExceptionData ></a>
-, <a class="el" href="a00035.html#abb221485cd260349efdef681f633a6a4">tbb::captured_exception</a>
+: <a class="el" href="a00081.html#a46eee42a3279007f48c9e8f11d074d16">tbb::movable_exception< ExceptionData ></a>
+, <a class="el" href="a00155.html#a4bd4ba0d501021013d1473d21b020b69">tbb::tbb_exception</a>
+, <a class="el" href="a00032.html#a3b75205c631b51a00faf98c9e107f78a">tbb::captured_exception</a>
 </li>
-<li>mutex
-: <a class="el" href="a00135.html#a8d70c5a2348e30a6979bfbf677328dc4">tbb::spin_rw_mutex_v3::scoped_lock</a>
-, <a class="el" href="a00099.html#ad1b280c954ffc8b8b3e63e4ee4144035">tbb::mutex</a>
+<li>mutex()
+: <a class="el" href="a00082.html#ad1b280c954ffc8b8b3e63e4ee4144035">tbb::mutex</a>
+, <a class="el" href="a00134.html#a8d70c5a2348e30a6979bfbf677328dc4">tbb::spin_rw_mutex_v3::scoped_lock</a>
 </li>
 <li>my_exception_data
-: <a class="el" href="a00097.html#adba063da80054afe64d5268711084d9b">tbb::movable_exception< ExceptionData ></a>
+: <a class="el" href="a00081.html#adba063da80054afe64d5268711084d9b">tbb::movable_exception< ExceptionData ></a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x6e.html b/doc/html/functions_0x6e.html
index 00eced7..d1fdb3b 100644
--- a/doc/html/functions_0x6e.html
+++ b/doc/html/functions_0x6e.html
@@ -75,22 +75,22 @@
 
 <h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
 <li>name()
-: <a class="el" href="a00161.html#a282bb7dce5f157d044d14d50cd6ff35c">tbb::tbb_exception</a>
-, <a class="el" href="a00035.html#a23426113851b78d3f0069956afd21976">tbb::captured_exception</a>
-, <a class="el" href="a00097.html#a65dd805ed2424f1d2d0998f5567a9690">tbb::movable_exception< ExceptionData ></a>
+: <a class="el" href="a00155.html#a282bb7dce5f157d044d14d50cd6ff35c">tbb::tbb_exception</a>
+, <a class="el" href="a00032.html#a543e1a18c9a3f3b093c8c2bd927a6d12">tbb::captured_exception</a>
+, <a class="el" href="a00081.html#ae74fdea1aac39197bc1f5026dfd0a840">tbb::movable_exception< ExceptionData ></a>
 </li>
 <li>native_handle_type
-: <a class="el" href="a00099.html#abbe0cd12246121753ace00a5a12a90b0">tbb::mutex</a>
-, <a class="el" href="a00125.html#a3d40334b0e26d5addfde5596e7f9aaec">tbb::recursive_mutex</a>
+: <a class="el" href="a00082.html#abbe0cd12246121753ace00a5a12a90b0">tbb::mutex</a>
+, <a class="el" href="a00121.html#a3d40334b0e26d5addfde5596e7f9aaec">tbb::recursive_mutex</a>
 </li>
 <li>now()
-: <a class="el" href="a00170.html#a74dcecde7431ff4591d7c46fc1d50d7e">tbb::tick_count</a>
+: <a class="el" href="a00163.html#a74dcecde7431ff4591d7c46fc1d50d7e">tbb::tick_count</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x6f.html b/doc/html/functions_0x6f.html
index 4f5b664..8bd1aea 100644
--- a/doc/html/functions_0x6f.html
+++ b/doc/html/functions_0x6f.html
@@ -75,76 +75,66 @@
 
 <h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
 <li>observe()
-: <a class="el" href="a00158.html#a40209b347e3c82bb5bfda05941304309">tbb::internal::task_scheduler_observer_v3</a>
-, <a class="el" href="a00157.html#ad5b33790cea52c61e1fb004a8ed26365">tbb::interface6::task_scheduler_observer</a>
+: <a class="el" href="a00152.html#a40209b347e3c82bb5bfda05941304309">tbb::internal::task_scheduler_observer_v3</a>
+, <a class="el" href="a00151.html#ad5b33790cea52c61e1fb004a8ed26365">tbb::interface6::task_scheduler_observer</a>
 </li>
 <li>on_scheduler_entry()
-: <a class="el" href="a00158.html#af4282a27725fbe86052bb785bdd9c5d3">tbb::internal::task_scheduler_observer_v3</a>
+: <a class="el" href="a00152.html#af4282a27725fbe86052bb785bdd9c5d3">tbb::internal::task_scheduler_observer_v3</a>
 </li>
 <li>on_scheduler_exit()
-: <a class="el" href="a00158.html#a657e90f833568e217b807d0122fa7668">tbb::internal::task_scheduler_observer_v3</a>
+: <a class="el" href="a00152.html#a657e90f833568e217b807d0122fa7668">tbb::internal::task_scheduler_observer_v3</a>
 </li>
-<li>operator delete()
-: <a class="el" href="a00161.html#a6a973c37078afedf7d457ff4704bf8cd">tbb::tbb_exception</a>
+<li>opencl_graph()
+: <a class="el" href="a00093.html#a9ba7a7b2c5fe477941ce580da97f5444">tbb::flow::interface9::opencl_graph</a>
 </li>
-<li>operator!=()
-: <a class="el" href="a00071.html#af3f6d2cc6cbec2dc1194f7d5f4091a73">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a>
+<li>operator delete()
+: <a class="el" href="a00155.html#a6a973c37078afedf7d457ff4704bf8cd">tbb::tbb_exception</a>
 </li>
 <li>operator()()
-: <a class="el" href="a00029.html#a16e714a5e77dbf8daf81973df30722d4">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a>
+: <a class="el" href="a00026.html#a16e714a5e77dbf8daf81973df30722d4">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a>
 </li>
 <li>operator*()
-: <a class="el" href="a00054.html#a8adf04e33e7c8c876ba849f26807713a">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
-, <a class="el" href="a00010.html#a4e03905a33fbdafdb99113cc68d2bd4b">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>
-, <a class="el" href="a00071.html#a1daffd203bebae367ed0f32917048f22">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a>
+: <a class="el" href="a00047.html#a8adf04e33e7c8c876ba849f26807713a">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
+, <a class="el" href="a00009.html#a4e03905a33fbdafdb99113cc68d2bd4b">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>
 </li>
 <li>operator+
-: <a class="el" href="a00085.html#ac8910ee3b69f68eb905af787c273e9a8">tbb::tick_count::interval_t</a>
-</li>
-<li>operator++()
-: <a class="el" href="a00071.html#ab84587ed134f01886f6a0d64d5a6ccef">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a>
+: <a class="el" href="a00072.html#ac8910ee3b69f68eb905af787c273e9a8">tbb::tick_count::interval_t</a>
 </li>
 <li>operator+=()
-: <a class="el" href="a00085.html#a19bf32f4541252daaa6b09fd33fa9177">tbb::tick_count::interval_t</a>
+: <a class="el" href="a00072.html#a19bf32f4541252daaa6b09fd33fa9177">tbb::tick_count::interval_t</a>
 </li>
 <li>operator-
-: <a class="el" href="a00085.html#a3d11133daa9a7d3c903d070293278f8f">tbb::tick_count::interval_t</a>
-, <a class="el" href="a00170.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653">tbb::tick_count</a>
-, <a class="el" href="a00085.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653">tbb::tick_count::interval_t</a>
+: <a class="el" href="a00072.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653">tbb::tick_count::interval_t</a>
+, <a class="el" href="a00163.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653">tbb::tick_count</a>
 </li>
 <li>operator-=()
-: <a class="el" href="a00085.html#a3394d9f3678e6a4c3d6e1be840fe2ff2">tbb::tick_count::interval_t</a>
+: <a class="el" href="a00072.html#a3394d9f3678e6a4c3d6e1be840fe2ff2">tbb::tick_count::interval_t</a>
 </li>
 <li>operator->()
-: <a class="el" href="a00054.html#a28fa9b9e6c35d7e80217e69a7afe1ee5">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
-, <a class="el" href="a00010.html#ab04f73bd4a4ca7df0dc91a7b4d66f987">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>
-, <a class="el" href="a00071.html#abfb28c989f76822e26b47211febe3d72">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a>
+: <a class="el" href="a00047.html#a28fa9b9e6c35d7e80217e69a7afe1ee5">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
+, <a class="el" href="a00009.html#ab04f73bd4a4ca7df0dc91a7b4d66f987">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>
 </li>
 <li>operator=()
-: <a class="el" href="a00053.html#a0d26889a94203cdb5f5460fade7497c7">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00071.html#ada73cea77a417f0df629eeaf4c1e2002">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a>
-, <a class="el" href="a00053.html#a8498a1335a3bbac2f4925a4e8d70cdb8">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00045.html#a9b21bd56aff8c412c5fcdd0d88b48c98">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00043.html#aac73665b1a55e3de7332f36598488252">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
-, <a class="el" href="a00053.html#a1fe7f0b60bbf304890a9293a35e6819d">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00043.html#a63e01b1f79c287ae0257ccfd483fd90a">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
-, <a class="el" href="a00045.html#a7eaa05dcb74604e45e0e2c55e1e456e9">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-</li>
-<li>operator==()
-: <a class="el" href="a00071.html#a3b0d834dffd2a99a596e9541b7a96d2a">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a>
+: <a class="el" href="a00046.html#a0d26889a94203cdb5f5460fade7497c7">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00038.html#a9b21bd56aff8c412c5fcdd0d88b48c98">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00046.html#a1fe7f0b60bbf304890a9293a35e6819d">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00038.html#a7eaa05dcb74604e45e0e2c55e1e456e9">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00046.html#a920384aece0eb8beea3049956320ec91">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00036.html#a92b506ceed93d1c25979948961054380">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+, <a class="el" href="a00046.html#a8498a1335a3bbac2f4925a4e8d70cdb8">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00038.html#ac0c3f41b10f04547f3438517c40cf8a5">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
 </li>
 <li>operator[]()
-: <a class="el" href="a00053.html#abd6ca67f2f97fafca48395af2e693e73">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#abd6ca67f2f97fafca48395af2e693e73">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>output_type
-: <a class="el" href="a00144.html#a0308ffc2e5c24739cd85e769ec8a8f5f">tbb::flow::interface7::source_node< Output ></a>
-, <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">tbb::flow::interface7::sender< T ></a>
+: <a class="el" href="a00139.html#a7824890d85a80842e2c9b2258cd7c484">tbb::flow::interface9::sender< T ></a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x70.html b/doc/html/functions_0x70.html
index 1bf9a20..607a111 100644
--- a/doc/html/functions_0x70.html
+++ b/doc/html/functions_0x70.html
@@ -75,48 +75,46 @@
 
 <h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
 <li>page_range_type
-: <a class="el" href="a00026.html#a8cdc866378a12ce198da870d0439676f">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
+: <a class="el" href="a00024.html#a8cdc866378a12ce198da870d0439676f">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
 </li>
 <li>pages()
-: <a class="el" href="a00026.html#a5b794fd53ba92106aeafa4eed85731d4">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
+: <a class="el" href="a00024.html#a5b794fd53ba92106aeafa4eed85731d4">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
 </li>
 <li>parallel_while()
-: <a class="el" href="a00106.html#a220a7307358aa36802c8754ea45ca385">tbb::parallel_while< Body ></a>
+: <a class="el" href="a00102.html#a220a7307358aa36802c8754ea45ca385">tbb::parallel_while< Body ></a>
 </li>
 <li>pipeline()
-: <a class="el" href="a00107.html#afe7b7bd9b2617c2b69170675a478b2bd">tbb::pipeline</a>
+: <a class="el" href="a00103.html#afe7b7bd9b2617c2b69170675a478b2bd">tbb::pipeline</a>
 </li>
 <li>pop()
-: <a class="el" href="a00042.html#a87926c31967a918ce80690a9ed5d6fa8">tbb::concurrent_bounded_queue< T, A ></a>
+: <a class="el" href="a00035.html#a87926c31967a918ce80690a9ed5d6fa8">tbb::concurrent_bounded_queue< T, A ></a>
 </li>
 <li>predecessor_type
-: <a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">tbb::flow::interface7::receiver< T ></a>
-, <a class="el" href="a00057.html#a86d210b5614d47aaa43731b7e303751f">tbb::flow::interface7::continue_receiver</a>
-</li>
-<li>priority_queue_node()
-: <a class="el" href="a00109.html#ab295c7b50ff804f7276609a25016e7ca">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a>
+: <a class="el" href="a00049.html#a2c67857ee60501f3a3e0afeeaf06b957">tbb::flow::interface9::continue_receiver</a>
+, <a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">tbb::flow::interface9::internal::untyped_receiver</a>
+, <a class="el" href="a00119.html#a97b14fcd2a562cf47a9548764c4e5abc">tbb::flow::interface9::receiver< T ></a>
 </li>
 <li>process()
-: <a class="el" href="a00013.html#ae55b16ec6af204aa00d6a716fccec9f7">tbb::interface6::aggregator_ext< handler_type ></a>
+: <a class="el" href="a00012.html#ae55b16ec6af204aa00d6a716fccec9f7">tbb::interface6::aggregator_ext< handler_type ></a>
 </li>
 <li>process_item()
-: <a class="el" href="a00165.html#ac99258407f382d84568a510075074fc7">tbb::thread_bound_filter</a>
+: <a class="el" href="a00158.html#ac99258407f382d84568a510075074fc7">tbb::thread_bound_filter</a>
 </li>
 <li>push()
-: <a class="el" href="a00042.html#ae5e9051772bbc93b2ccb8fd0a98a21f5">tbb::concurrent_bounded_queue< T, A ></a>
-, <a class="el" href="a00046.html#a9330ca6590980d80ef7b1ea3613a699a">tbb::strict_ppl::concurrent_queue< T, A ></a>
-, <a class="el" href="a00045.html#a1bfa0e7269b3407d6bb5c706264d2406">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00042.html#a62a03e9c185562254ecb4104f38c106d">tbb::concurrent_bounded_queue< T, A ></a>
-, <a class="el" href="a00045.html#a72ff26945c61b4ce3ce7ca0f9b9aaa48">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+: <a class="el" href="a00035.html#ae5e9051772bbc93b2ccb8fd0a98a21f5">tbb::concurrent_bounded_queue< T, A ></a>
+, <a class="el" href="a00039.html#a9330ca6590980d80ef7b1ea3613a699a">tbb::strict_ppl::concurrent_queue< T, A ></a>
+, <a class="el" href="a00038.html#a72ff26945c61b4ce3ce7ca0f9b9aaa48">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00035.html#a62a03e9c185562254ecb4104f38c106d">tbb::concurrent_bounded_queue< T, A ></a>
+, <a class="el" href="a00038.html#a1bfa0e7269b3407d6bb5c706264d2406">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
 </li>
 <li>push_back()
-: <a class="el" href="a00053.html#ad68d1675fedef232bfae35f200ba007d">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#ac29a9f08c0fac7c20786c7b8f4f0321a">tbb::concurrent_vector< T, A ></a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x71.html b/doc/html/functions_0x71.html
index 0526c6f..9a1f088 100644
--- a/doc/html/functions_0x71.html
+++ b/doc/html/functions_0x71.html
@@ -74,20 +74,17 @@
 <div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
 
 <h3><a class="anchor" id="index_q"></a>- q -</h3><ul>
-<li>queue_node()
-: <a class="el" href="a00110.html#a503d3fe4f98302549e36f74633de5716">tbb::flow::interface7::queue_node< T, A ></a>
-</li>
 <li>queuing_mutex()
-: <a class="el" href="a00111.html#a0e58fce2062ae349a30b320b7fdc9155">tbb::queuing_mutex</a>
+: <a class="el" href="a00106.html#a0e58fce2062ae349a30b320b7fdc9155">tbb::queuing_mutex</a>
 </li>
 <li>queuing_rw_mutex()
-: <a class="el" href="a00112.html#a23de1ac415b6f54b778c8fd6ec6073e0">tbb::queuing_rw_mutex</a>
+: <a class="el" href="a00107.html#a23de1ac415b6f54b778c8fd6ec6073e0">tbb::queuing_rw_mutex</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x72.html b/doc/html/functions_0x72.html
index 102d7c5..664e3f0 100644
--- a/doc/html/functions_0x72.html
+++ b/doc/html/functions_0x72.html
@@ -75,104 +75,98 @@
 
 <h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
 <li>range()
-: <a class="el" href="a00053.html#a8201f65735edcc28aeec95b6e73d75b6">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00061.html#a25b9153dfe994c8122a7f0227cffe793">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
+: <a class="el" href="a00046.html#a8201f65735edcc28aeec95b6e73d75b6">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00058.html#a25b9153dfe994c8122a7f0227cffe793">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
 </li>
 <li>rbegin()
-: <a class="el" href="a00053.html#a9a2f8dce0adcbef8e29273c23723a78e">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#a9a2f8dce0adcbef8e29273c23723a78e">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>reader_writer_lock()
-: <a class="el" href="a00113.html#abceda6c50b0c36eacbef51f4682742f3">tbb::interface5::reader_writer_lock</a>
+: <a class="el" href="a00108.html#abceda6c50b0c36eacbef51f4682742f3">tbb::interface5::reader_writer_lock</a>
 </li>
 <li>recursive_mutex()
-: <a class="el" href="a00125.html#a47eb6e7e7ffa5d35341125792b17236b">tbb::recursive_mutex</a>
+: <a class="el" href="a00121.html#a47eb6e7e7ffa5d35341125792b17236b">tbb::recursive_mutex</a>
 </li>
 <li>reference
-: <a class="el" href="a00045.html#ae4b7ed2ddc8ec6cc910f935c9d299c7a">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00046.html#ab26ddf11b15d61ac87e6c1ae67af92a2">tbb::strict_ppl::concurrent_queue< T, A ></a>
-, <a class="el" href="a00042.html#a5fa4002bcd265d9d3ed305e3b686f1da">tbb::concurrent_bounded_queue< T, A ></a>
+: <a class="el" href="a00038.html#ae4b7ed2ddc8ec6cc910f935c9d299c7a">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00039.html#ab26ddf11b15d61ac87e6c1ae67af92a2">tbb::strict_ppl::concurrent_queue< T, A ></a>
+, <a class="el" href="a00035.html#a5fa4002bcd265d9d3ed305e3b686f1da">tbb::concurrent_bounded_queue< T, A ></a>
 </li>
 <li>register_predecessor()
-: <a class="el" href="a00124.html#a16427aa709505de93ffe0d79136e4251">tbb::flow::interface7::receiver< T ></a>
-, <a class="el" href="a00057.html#a9ff043995b7b4d39ab0ec41c9e3628bf">tbb::flow::interface7::continue_receiver</a>
-, <a class="el" href="a00091.html#aca5ef5cec3b26227d71686d99ee04f7e">tbb::flow::interface7::limiter_node< T ></a>
+: <a class="el" href="a00164.html#ae1c186c47aace8ad385c6bb6fdf3a14d">tbb::flow::interface9::internal::untyped_receiver</a>
+, <a class="el" href="a00119.html#a272b4aa85424e7e96371868403fe3c54">tbb::flow::interface9::receiver< T ></a>
+, <a class="el" href="a00049.html#a3921e10cb2c5666d4541259d47713754">tbb::flow::interface9::continue_receiver</a>
 </li>
 <li>register_successor()
-: <a class="el" href="a00144.html#a27aa895c54d59f570f267c26f14f0cf1">tbb::flow::interface7::source_node< Output ></a>
-, <a class="el" href="a00104.html#aed811ce5f59a555396c7bcd56316b4da">tbb::flow::interface7::overwrite_node< T ></a>
-, <a class="el" href="a00028.html#a36b5c86faa58a264d899b7c26286c80e">tbb::flow::interface7::broadcast_node< T ></a>
-, <a class="el" href="a00030.html#a5e87f7e8fd8698f62f2cad8b52b6e565">tbb::flow::interface7::buffer_node< T, A ></a>
-, <a class="el" href="a00091.html#ad2cfd954eb06732f7bae8f2c8fe28735">tbb::flow::interface7::limiter_node< T ></a>
-, <a class="el" href="a00142.html#a4dac8f53a1f8373c1f3a874b9617e4ec">tbb::flow::interface7::sender< T ></a>
+: <a class="el" href="a00139.html#af481e8df87d085c3054bd7c76d7f50ef">tbb::flow::interface9::sender< T ></a>
+, <a class="el" href="a00165.html#a2298076f4c5e52a6c9c8a8e6fbfbd9de">tbb::flow::interface9::internal::untyped_sender</a>
 </li>
 <li>rehash()
-: <a class="el" href="a00043.html#adf1fa9470c605731063e5949f0418eb7">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00036.html#adf1fa9470c605731063e5949f0418eb7">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 <li>release()
-: <a class="el" href="a00054.html#a18390cb369369d72bdf7c867755b5190">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
-, <a class="el" href="a00140.html#a1a1590281ccca912229a689d920fd78a">tbb::mutex::scoped_lock</a>
-, <a class="el" href="a00132.html#aaa065e48b428b8d43e9bb931ba9e6f6c">tbb::queuing_mutex::scoped_lock</a>
+: <a class="el" href="a00047.html#a18390cb369369d72bdf7c867755b5190">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
+, <a class="el" href="a00135.html#a1a1590281ccca912229a689d920fd78a">tbb::mutex::scoped_lock</a>
+, <a class="el" href="a00128.html#aaa065e48b428b8d43e9bb931ba9e6f6c">tbb::queuing_mutex::scoped_lock</a>
 , <a class="el" href="a00131.html#a50fb02b77f02a01c74754d163157ec77">tbb::queuing_rw_mutex::scoped_lock</a>
-, <a class="el" href="a00139.html#a2fe3246ffc26bdb5a58f33ca513b6c0f">tbb::recursive_mutex::scoped_lock</a>
-, <a class="el" href="a00134.html#a7e801b0c28fd8395fec400b96acc5c34">tbb::spin_mutex::scoped_lock</a>
-, <a class="el" href="a00135.html#a99e279a995a51abfb87b865e886949f8">tbb::spin_rw_mutex_v3::scoped_lock</a>
+, <a class="el" href="a00133.html#a2fe3246ffc26bdb5a58f33ca513b6c0f">tbb::recursive_mutex::scoped_lock</a>
+, <a class="el" href="a00130.html#a7e801b0c28fd8395fec400b96acc5c34">tbb::spin_mutex::scoped_lock</a>
+, <a class="el" href="a00134.html#a99e279a995a51abfb87b865e886949f8">tbb::spin_rw_mutex_v3::scoped_lock</a>
+</li>
+<li>release_wait()
+: <a class="el" href="a00069.html#a5f751c4f3a0b5be4f97b2b857aaecea0">tbb::flow::interface9::graph_proxy</a>
 </li>
 <li>remove_predecessor()
-: <a class="el" href="a00091.html#a8aca7b4bd4ee13faf713021eb0d86735">tbb::flow::interface7::limiter_node< T ></a>
-, <a class="el" href="a00124.html#a55adae6228bbdc1539695e1ec20e9762">tbb::flow::interface7::receiver< T ></a>
-, <a class="el" href="a00057.html#aea58a2200f20acd9cda829ba6958b22a">tbb::flow::interface7::continue_receiver</a>
+: <a class="el" href="a00119.html#ae8f45b84f3179964dd77f32835ece6c0">tbb::flow::interface9::receiver< T ></a>
+, <a class="el" href="a00164.html#a18c7050e86d482a8aed57611e40d3c6f">tbb::flow::interface9::internal::untyped_receiver</a>
+, <a class="el" href="a00049.html#aa0c679a297c71fba43380b07ef69563b">tbb::flow::interface9::continue_receiver</a>
 </li>
 <li>remove_successor()
-: <a class="el" href="a00028.html#a22d463b071df6e0b7ca11df27bb2637e">tbb::flow::interface7::broadcast_node< T ></a>
-, <a class="el" href="a00142.html#ac1ae19f49e31c6ca94dcf14732eb7a64">tbb::flow::interface7::sender< T ></a>
-, <a class="el" href="a00144.html#a313af00af7584f4b9aee1e1bacff4041">tbb::flow::interface7::source_node< Output ></a>
-, <a class="el" href="a00104.html#ab5ff89d56e2e3c3848d84a09c88b1d52">tbb::flow::interface7::overwrite_node< T ></a>
-, <a class="el" href="a00030.html#a3c31300c060bffbbad7798219e702aba">tbb::flow::interface7::buffer_node< T, A ></a>
-, <a class="el" href="a00091.html#ac7b092dcc2808abf02816d4ac9c86e66">tbb::flow::interface7::limiter_node< T ></a>
+: <a class="el" href="a00165.html#a32affec91647eba02f826f18f43e02e5">tbb::flow::interface9::internal::untyped_sender</a>
+, <a class="el" href="a00139.html#a7b94781eff02591069fd8afdfd7f01d7">tbb::flow::interface9::sender< T ></a>
 </li>
 <li>rend()
-: <a class="el" href="a00053.html#a618f38279a370c18f73ea2c29ded9cb9">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#abdb98e17cb65d9c445d7fd1e662c2699">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>reserve()
-: <a class="el" href="a00053.html#a0b3284684328c58c0228c9a697ef3594">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#a0b3284684328c58c0228c9a697ef3594">tbb::concurrent_vector< T, A ></a>
+</li>
+<li>reserve_wait()
+: <a class="el" href="a00069.html#a89db56a08929f4d3e45d27838cec3272">tbb::flow::interface9::graph_proxy</a>
 </li>
-<li>reset_node()
-: <a class="el" href="a00144.html#aed1fa277170d6cee6d1437f1258ac544">tbb::flow::interface7::source_node< Output ></a>
+<li>reset_receiver()
+: <a class="el" href="a00119.html#a4b0f31d3bc03ce4cb1b00819aeb1d37e">tbb::flow::interface9::receiver< T ></a>
+, <a class="el" href="a00049.html#a7074cdcd8437cde18780f7dcca69e349">tbb::flow::interface9::continue_receiver</a>
+, <a class="el" href="a00164.html#a2ddcd11694b38141f369af99498971ca">tbb::flow::interface9::internal::untyped_receiver</a>
 </li>
 <li>resize()
-: <a class="el" href="a00053.html#a65e53a98a1e1fdb515fdc2b84e2314e8">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#a941917a8a840ff08ce8810ca9476ff46">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>resolution()
-: <a class="el" href="a00170.html#aaf6a0d91e7d40f7d68e0ad6b79350e58">tbb::tick_count</a>
-</li>
-<li>root_task()
-: <a class="el" href="a00070.html#ae5f59627a7d130cf289f105a849ad3f0">tbb::flow::interface7::graph</a>
+: <a class="el" href="a00163.html#aaf6a0d91e7d40f7d68e0ad6b79350e58">tbb::tick_count</a>
 </li>
 <li>row_range_type
-: <a class="el" href="a00025.html#ada609b296a9af0591cc34761b8538100">tbb::blocked_range2d< RowValue, ColValue ></a>
+: <a class="el" href="a00023.html#ada609b296a9af0591cc34761b8538100">tbb::blocked_range2d< RowValue, ColValue ></a>
 </li>
 <li>rows()
-: <a class="el" href="a00026.html#aeac1def585af81467573f30ebb42cb4f">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
-, <a class="el" href="a00025.html#a4f7299e74c40df57dee2433c07ce65ae">tbb::blocked_range2d< RowValue, ColValue ></a>
+: <a class="el" href="a00024.html#aeac1def585af81467573f30ebb42cb4f">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
+, <a class="el" href="a00023.html#a4f7299e74c40df57dee2433c07ce65ae">tbb::blocked_range2d< RowValue, ColValue ></a>
 </li>
 <li>run()
-: <a class="el" href="a00107.html#a270dba81f7dd9935be7f3d69db907ff4">tbb::pipeline</a>
-, <a class="el" href="a00070.html#a6e428c2d7c8780f3c2587a71c4d92466">tbb::flow::interface7::graph</a>
-, <a class="el" href="a00107.html#ac9ee9080cfc080c40a7ee7cb03a62637">tbb::pipeline</a>
-, <a class="el" href="a00106.html#a20607ba5faa958144787d980aa850c16">tbb::parallel_while< Body ></a>
-, <a class="el" href="a00070.html#ac0a03f1d59dc2ccb9526995599c2c83c">tbb::flow::interface7::graph</a>
+: <a class="el" href="a00103.html#a270dba81f7dd9935be7f3d69db907ff4">tbb::pipeline</a>
+, <a class="el" href="a00102.html#a20607ba5faa958144787d980aa850c16">tbb::parallel_while< Body ></a>
 </li>
 <li>run_and_put_task
-: <a class="el" href="a00124.html#abaf9bf74ca5f2854d09f5f07337280eb">tbb::flow::interface7::receiver< T ></a>
+: <a class="el" href="a00119.html#abaf9bf74ca5f2854d09f5f07337280eb">tbb::flow::interface9::receiver< T ></a>
 </li>
 <li>runtime_loader()
-: <a class="el" href="a00128.html#a3e0932074d2f3ad04605e7e5da88c561">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#a2f87eaf99564c705aa140f2eb8848eaa">tbb::interface6::runtime_loader</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x73.html b/doc/html/functions_0x73.html
index bff3529..e0946e3 100644
--- a/doc/html/functions_0x73.html
+++ b/doc/html/functions_0x73.html
@@ -75,88 +75,82 @@
 
 <h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
 <li>scoped_lock()
-: <a class="el" href="a00140.html#a23122745ccd5fc2498fcbbd5ced09e06">tbb::mutex::scoped_lock</a>
-, <a class="el" href="a00132.html#aa82d9da0dcfe5b21f1c08473f8223105">tbb::queuing_mutex::scoped_lock</a>
-, <a class="el" href="a00139.html#a0a9962a3932cfbd0d12cb197494f951b">tbb::recursive_mutex::scoped_lock</a>
+: <a class="el" href="a00135.html#a23122745ccd5fc2498fcbbd5ced09e06">tbb::mutex::scoped_lock</a>
+, <a class="el" href="a00128.html#aa82d9da0dcfe5b21f1c08473f8223105">tbb::queuing_mutex::scoped_lock</a>
+, <a class="el" href="a00133.html#a0a9962a3932cfbd0d12cb197494f951b">tbb::recursive_mutex::scoped_lock</a>
 , <a class="el" href="a00131.html#a1ae3792726dcff8da1f2c5366fb2b754">tbb::queuing_rw_mutex::scoped_lock</a>
-, <a class="el" href="a00134.html#a4287be975cf2448c95f068b065c45107">tbb::spin_mutex::scoped_lock</a>
-, <a class="el" href="a00132.html#a0afe0107eb0aae613e726f67624d2fca">tbb::queuing_mutex::scoped_lock</a>
+, <a class="el" href="a00130.html#a4287be975cf2448c95f068b065c45107">tbb::spin_mutex::scoped_lock</a>
+, <a class="el" href="a00128.html#a0afe0107eb0aae613e726f67624d2fca">tbb::queuing_mutex::scoped_lock</a>
 , <a class="el" href="a00131.html#af1b55ca1839c9c7c2cd779cd2dd9c474">tbb::queuing_rw_mutex::scoped_lock</a>
-, <a class="el" href="a00135.html#a285b355121772c874a7ecaaf4d347224">tbb::spin_rw_mutex_v3::scoped_lock</a>
-, <a class="el" href="a00133.html#aaed982d8c3f1e84298f9842063694f3c">tbb::interface5::reader_writer_lock::scoped_lock</a>
+, <a class="el" href="a00134.html#a285b355121772c874a7ecaaf4d347224">tbb::spin_rw_mutex_v3::scoped_lock</a>
+, <a class="el" href="a00132.html#aaed982d8c3f1e84298f9842063694f3c">tbb::interface5::reader_writer_lock::scoped_lock</a>
 </li>
 <li>scoped_lock_read()
-: <a class="el" href="a00141.html#a9d3120a23016dabd4cc2683fa561ee5a">tbb::interface5::reader_writer_lock::scoped_lock_read</a>
+: <a class="el" href="a00138.html#a9d3120a23016dabd4cc2683fa561ee5a">tbb::interface5::reader_writer_lock::scoped_lock_read</a>
 </li>
 <li>seconds()
-: <a class="el" href="a00085.html#abe81446bbbb6b6e98d854b91acf47809">tbb::tick_count::interval_t</a>
-</li>
-<li>sequencer_node()
-: <a class="el" href="a00143.html#a0e8d3d486edc7f70c81b36ce9421c11a">tbb::flow::interface7::sequencer_node< T, A ></a>
+: <a class="el" href="a00072.html#abe81446bbbb6b6e98d854b91acf47809">tbb::tick_count::interval_t</a>
 </li>
 <li>set_capacity()
-: <a class="el" href="a00042.html#a768699675813575eec08c1f43afda395">tbb::concurrent_bounded_queue< T, A ></a>
+: <a class="el" href="a00035.html#a768699675813575eec08c1f43afda395">tbb::concurrent_bounded_queue< T, A ></a>
 </li>
 <li>set_state()
-: <a class="el" href="a00099.html#a0857c4596d7d5de09fe402ccd41d3e42">tbb::mutex</a>
+: <a class="el" href="a00082.html#a0857c4596d7d5de09fe402ccd41d3e42">tbb::mutex</a>
 </li>
 <li>shrink_to_fit()
-: <a class="el" href="a00053.html#aba805b5225ad3399550f78ea15e51e93">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#aba805b5225ad3399550f78ea15e51e93">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>size()
-: <a class="el" href="a00024.html#a347ef8caa40edca3b7f475f182281140">tbb::blocked_range< Value ></a>
-, <a class="el" href="a00043.html#ad2ce6da7cd62bc7425f0a29498332ab4">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
-, <a class="el" href="a00045.html#a7d86ba200474b51ec99a6b917429c6bb">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00042.html#a9d6c20fd8c193c12b6a7b0c3101fd966">tbb::concurrent_bounded_queue< T, A ></a>
-, <a class="el" href="a00053.html#a803268c16e3688ff4681251947d257c7">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00061.html#a4c33c5390783e17daf2b25d53ae919fb">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
+: <a class="el" href="a00022.html#a347ef8caa40edca3b7f475f182281140">tbb::blocked_range< Value ></a>
+, <a class="el" href="a00036.html#ad2ce6da7cd62bc7425f0a29498332ab4">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+, <a class="el" href="a00038.html#a7d86ba200474b51ec99a6b917429c6bb">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00035.html#a9d6c20fd8c193c12b6a7b0c3101fd966">tbb::concurrent_bounded_queue< T, A ></a>
+, <a class="el" href="a00046.html#a803268c16e3688ff4681251947d257c7">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00058.html#a4c33c5390783e17daf2b25d53ae919fb">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
 </li>
 <li>size_type
-: <a class="el" href="a00066.html#a8b84f8f2cc4499f49d17141eaedc99c0">tbb::interface6::flattened2d< Container ></a>
-, <a class="el" href="a00024.html#a89b300cecd9d617e4ee801c786756e55">tbb::blocked_range< Value ></a>
-, <a class="el" href="a00045.html#a7d3da9b47ec58e1c09e3550f702edcfc">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00046.html#a9f883e49afea16293ba92da779981bb8">tbb::strict_ppl::concurrent_queue< T, A ></a>
-, <a class="el" href="a00042.html#ae73fa352d781bdb9d01bfb77f2a8bc28">tbb::concurrent_bounded_queue< T, A ></a>
-</li>
-<li>source_node()
-: <a class="el" href="a00144.html#a5730a4677f5bfdf6ff6e45e31a249d37">tbb::flow::interface7::source_node< Output ></a>
+: <a class="el" href="a00039.html#a9f883e49afea16293ba92da779981bb8">tbb::strict_ppl::concurrent_queue< T, A ></a>
+, <a class="el" href="a00022.html#a89b300cecd9d617e4ee801c786756e55">tbb::blocked_range< Value ></a>
+, <a class="el" href="a00038.html#a7d3da9b47ec58e1c09e3550f702edcfc">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00035.html#ae73fa352d781bdb9d01bfb77f2a8bc28">tbb::concurrent_bounded_queue< T, A ></a>
+, <a class="el" href="a00063.html#a8b84f8f2cc4499f49d17141eaedc99c0">tbb::interface6::flattened2d< Container ></a>
 </li>
 <li>spin_mutex()
-: <a class="el" href="a00145.html#a6c96196965bf7df426311d282ad3c378">tbb::spin_mutex</a>
+: <a class="el" href="a00140.html#a6c96196965bf7df426311d282ad3c378">tbb::spin_mutex</a>
 </li>
 <li>spin_rw_mutex_v3()
-: <a class="el" href="a00146.html#ad30fc1ffa0a2b8134e177e02c5821d7f">tbb::spin_rw_mutex_v3</a>
+: <a class="el" href="a00141.html#ad30fc1ffa0a2b8134e177e02c5821d7f">tbb::spin_rw_mutex_v3</a>
 </li>
 <li>start()
-: <a class="el" href="a00014.html#adc0e032aa604f1da85ffc7ec269b157f">tbb::interface6::aggregator_operation</a>
+: <a class="el" href="a00013.html#adc0e032aa604f1da85ffc7ec269b157f">tbb::interface6::aggregator_operation</a>
 </li>
 <li>start_routine()
-: <a class="el" href="a00168.html#a29003179f98d768622c72b9ab5cfe8f6">tbb::internal::thread_closure_2< F, X, Y ></a>
-, <a class="el" href="a00167.html#a33d533b3301c45708c6252d040f855a6">tbb::internal::thread_closure_1< F, X ></a>
+: <a class="el" href="a00160.html#a33d533b3301c45708c6252d040f855a6">tbb::internal::thread_closure_1< F, X ></a>
+, <a class="el" href="a00161.html#a29003179f98d768622c72b9ab5cfe8f6">tbb::internal::thread_closure_2< F, X, Y ></a>
 </li>
 <li>state
-: <a class="el" href="a00146.html#aa28625051072472ccd8a2b19405d6fb3">tbb::spin_rw_mutex_v3</a>
+: <a class="el" href="a00141.html#aa28625051072472ccd8a2b19405d6fb3">tbb::spin_rw_mutex_v3</a>
 </li>
 <li>status()
-: <a class="el" href="a00128.html#a85bf9ee021a2076a3ac7cfd70aae7345">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#a85bf9ee021a2076a3ac7cfd70aae7345">tbb::interface6::runtime_loader</a>
 </li>
 <li>status_t
-: <a class="el" href="a00113.html#a29bbf9ca21c12b313d9fa5326feaf3ed">tbb::interface5::reader_writer_lock</a>
+: <a class="el" href="a00108.html#a29bbf9ca21c12b313d9fa5326feaf3ed">tbb::interface5::reader_writer_lock</a>
 </li>
 <li>successor_type
-: <a class="el" href="a00144.html#ae354d135ba9aceb6ca41464fff027666">tbb::flow::interface7::source_node< Output ></a>
-, <a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">tbb::flow::interface7::sender< T ></a>
+: <a class="el" href="a00165.html#a7b4e68e6917207283f5c621e7053c7ea">tbb::flow::interface9::internal::untyped_sender</a>
+, <a class="el" href="a00139.html#a2e54e49c21aed85603dd1f0ed5ca8e2e">tbb::flow::interface9::sender< T ></a>
 </li>
 <li>swap()
-: <a class="el" href="a00043.html#a4c8edf603bc776a6c84c007702c1808e">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
-, <a class="el" href="a00053.html#a8603bd57324fb6b60ba006884c95279d">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00045.html#aa6ee6d356e538b67a7cb4e242e6e36c9">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+: <a class="el" href="a00038.html#aa6ee6d356e538b67a7cb4e242e6e36c9">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00036.html#a4c8edf603bc776a6c84c007702c1808e">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+, <a class="el" href="a00046.html#a8603bd57324fb6b60ba006884c95279d">tbb::concurrent_vector< T, A ></a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x74.html b/doc/html/functions_0x74.html
index 538db27..334cb3b 100644
--- a/doc/html/functions_0x74.html
+++ b/doc/html/functions_0x74.html
@@ -75,97 +75,94 @@
 
 <h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
 <li>task_arena()
-: <a class="el" href="a00150.html#a6035737ce1a8db376d06880dae9d0c40">tbb::interface7::task_arena</a>
+: <a class="el" href="a00144.html#abe92eac81ca849b110de69e6efd0e5aa">tbb::interface7::task_arena</a>
+</li>
+<li>task_scheduler_init()
+: <a class="el" href="a00150.html#a8b2657d9b7c39fede2d19507d0e94688">tbb::task_scheduler_init</a>
 </li>
 <li>task_scheduler_observer()
-: <a class="el" href="a00157.html#a36e7e0c466320029d5a3e50a573e04c1">tbb::interface6::task_scheduler_observer</a>
+: <a class="el" href="a00151.html#a89025b1e1d42e97d6fe114c0c331f730">tbb::interface6::task_scheduler_observer</a>
 </li>
 <li>task_scheduler_observer_v3()
-: <a class="el" href="a00158.html#a25bffb05efaaab36bc58590969e29745">tbb::internal::task_scheduler_observer_v3</a>
+: <a class="el" href="a00152.html#a25bffb05efaaab36bc58590969e29745">tbb::internal::task_scheduler_observer_v3</a>
 </li>
 <li>tbb_thread_v3()
-: <a class="el" href="a00164.html#a672a5367e687635c869926bf8a986296">tbb::internal::tbb_thread_v3</a>
+: <a class="el" href="a00157.html#a15b84e454eb0179e010b90a88baa0933">tbb::internal::tbb_thread_v3</a>
 </li>
 <li>terminate()
-: <a class="el" href="a00150.html#aecb3eedeacfe8469a91c17525dae7fc9">tbb::interface7::task_arena</a>
-, <a class="el" href="a00156.html#a15d5dca7f79c5769bb96f674e4da0c04">tbb::task_scheduler_init</a>
-</li>
-<li>thread_stack_size
-: <a class="el" href="a00156.html#a8310e807e1199d0f23b3a57aeb4fde51">tbb::task_scheduler_init</a>
+: <a class="el" href="a00144.html#aecb3eedeacfe8469a91c17525dae7fc9">tbb::interface7::task_arena</a>
+, <a class="el" href="a00150.html#a15d5dca7f79c5769bb96f674e4da0c04">tbb::task_scheduler_init</a>
 </li>
 <li>throw_self()
-: <a class="el" href="a00162.html#a1713aa9a6a3850049d34358397a8ed81">tbb::internal::tbb_exception_ptr</a>
-, <a class="el" href="a00161.html#ae45c08d36c7ec7ae91785da3515a8828">tbb::tbb_exception</a>
-, <a class="el" href="a00035.html#ac9ae925678fcc0cc02a74df7d06b8d63">tbb::captured_exception</a>
-, <a class="el" href="a00097.html#a3d1570b53220fbcb45eb81552b57827a">tbb::movable_exception< ExceptionData ></a>
+: <a class="el" href="a00081.html#a0e9ac8a4468eb0ff3b2bb246b806a10e">tbb::movable_exception< ExceptionData ></a>
+, <a class="el" href="a00156.html#a1713aa9a6a3850049d34358397a8ed81">tbb::internal::tbb_exception_ptr</a>
+, <a class="el" href="a00155.html#ae45c08d36c7ec7ae91785da3515a8828">tbb::tbb_exception</a>
+, <a class="el" href="a00032.html#a6df0d3a1943ca6f84a9a9aca25e9633d">tbb::captured_exception</a>
 </li>
 <li>tick_count()
-: <a class="el" href="a00170.html#a9f1daa0b7a4feb800f802b4be1f1e497">tbb::tick_count</a>
+: <a class="el" href="a00163.html#a9f1daa0b7a4feb800f802b4be1f1e497">tbb::tick_count</a>
 </li>
 <li>try_acquire()
-: <a class="el" href="a00140.html#a46f983371aa852d2427ce69f9a571f78">tbb::mutex::scoped_lock</a>
-, <a class="el" href="a00132.html#ab4800ba9e743cd91f152036a6689b0e9">tbb::queuing_mutex::scoped_lock</a>
+: <a class="el" href="a00135.html#a46f983371aa852d2427ce69f9a571f78">tbb::mutex::scoped_lock</a>
+, <a class="el" href="a00128.html#ab4800ba9e743cd91f152036a6689b0e9">tbb::queuing_mutex::scoped_lock</a>
 , <a class="el" href="a00131.html#a4843d40dddc37c1aa3444e27d35d2433">tbb::queuing_rw_mutex::scoped_lock</a>
-, <a class="el" href="a00139.html#a160bba506f4033980ddb69ab7a02c4fb">tbb::recursive_mutex::scoped_lock</a>
-, <a class="el" href="a00134.html#a76acbd67c74906f6ea33a1de6fd443ce">tbb::spin_mutex::scoped_lock</a>
-, <a class="el" href="a00135.html#abf17ada91882fd70f139c503c0220f16">tbb::spin_rw_mutex_v3::scoped_lock</a>
+, <a class="el" href="a00133.html#a160bba506f4033980ddb69ab7a02c4fb">tbb::recursive_mutex::scoped_lock</a>
+, <a class="el" href="a00130.html#a76acbd67c74906f6ea33a1de6fd443ce">tbb::spin_mutex::scoped_lock</a>
+, <a class="el" href="a00134.html#abf17ada91882fd70f139c503c0220f16">tbb::spin_rw_mutex_v3::scoped_lock</a>
 </li>
 <li>try_consume()
-: <a class="el" href="a00142.html#ad404d5218c7ae2556261ffa880cdf804">tbb::flow::interface7::sender< T ></a>
-, <a class="el" href="a00144.html#ad38a58c2f8f74f4c5cf72a2625ac26bf">tbb::flow::interface7::source_node< Output ></a>
-, <a class="el" href="a00030.html#a335072bc547c5e9b40f58dfeab525953">tbb::flow::interface7::buffer_node< T, A ></a>
+: <a class="el" href="a00165.html#acfb8e3669932e5866fb6afa603ff8250">tbb::flow::interface9::internal::untyped_sender</a>
+, <a class="el" href="a00139.html#a0d0fa0cabcbbc4b1ba219ab806b85aa1">tbb::flow::interface9::sender< T ></a>
 </li>
 <li>try_get()
-: <a class="el" href="a00142.html#ad50b8ac93e79cbdcd2bba11d35432f2c">tbb::flow::interface7::sender< T ></a>
-, <a class="el" href="a00144.html#a038c6b2b406d496244617a2d6dc01581">tbb::flow::interface7::source_node< Output ></a>
-, <a class="el" href="a00104.html#aa655eef6671b35f99dfbddd0f3cf2309">tbb::flow::interface7::overwrite_node< T ></a>
-, <a class="el" href="a00030.html#a175cb77dfbdd0e322097a833a2271c1e">tbb::flow::interface7::buffer_node< T, A ></a>
+: <a class="el" href="a00165.html#a3c422ea58b7f11b6cc536539000a556e">tbb::flow::interface9::internal::untyped_sender</a>
+, <a class="el" href="a00139.html#a1cd7d47cd6ac5db05c0868ca43231633">tbb::flow::interface9::sender< T ></a>
 </li>
 <li>try_lock()
-: <a class="el" href="a00113.html#a1739e842af52925a2d4a7e821b9b3b8d">tbb::interface5::reader_writer_lock</a>
-, <a class="el" href="a00125.html#a8b181d9aaa95444145222cfe206e8094">tbb::recursive_mutex</a>
-, <a class="el" href="a00145.html#a003ffb196d22bf22ca22142338b7eeab">tbb::spin_mutex</a>
-, <a class="el" href="a00146.html#ab6ec20b1ec43a49c8c2908984e35b5e8">tbb::spin_rw_mutex_v3</a>
-, <a class="el" href="a00099.html#a480283933106941125717499f9c5ad42">tbb::mutex</a>
+: <a class="el" href="a00121.html#a8b181d9aaa95444145222cfe206e8094">tbb::recursive_mutex</a>
+, <a class="el" href="a00140.html#a003ffb196d22bf22ca22142338b7eeab">tbb::spin_mutex</a>
+, <a class="el" href="a00141.html#ab6ec20b1ec43a49c8c2908984e35b5e8">tbb::spin_rw_mutex_v3</a>
+, <a class="el" href="a00108.html#a1739e842af52925a2d4a7e821b9b3b8d">tbb::interface5::reader_writer_lock</a>
+, <a class="el" href="a00082.html#a480283933106941125717499f9c5ad42">tbb::mutex</a>
 </li>
 <li>try_lock_read()
-: <a class="el" href="a00113.html#a9c7aa04e00202c9a1197cb6d870cabb4">tbb::interface5::reader_writer_lock</a>
-, <a class="el" href="a00146.html#ac932f65b0b66320688e7957ce9c3e2c1">tbb::spin_rw_mutex_v3</a>
+: <a class="el" href="a00141.html#ac932f65b0b66320688e7957ce9c3e2c1">tbb::spin_rw_mutex_v3</a>
+, <a class="el" href="a00108.html#a9c7aa04e00202c9a1197cb6d870cabb4">tbb::interface5::reader_writer_lock</a>
 </li>
 <li>try_pop()
-: <a class="el" href="a00045.html#a954177b09e184cf3db47f1b180a7ef5e">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00042.html#a3086cb4dcdeee245ef5cf34f72fb3e10">tbb::concurrent_bounded_queue< T, A ></a>
-, <a class="el" href="a00046.html#aabb1acef18196fa11ed7db8e046c3943">tbb::strict_ppl::concurrent_queue< T, A ></a>
+: <a class="el" href="a00038.html#a954177b09e184cf3db47f1b180a7ef5e">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00039.html#aabb1acef18196fa11ed7db8e046c3943">tbb::strict_ppl::concurrent_queue< T, A ></a>
+, <a class="el" href="a00035.html#a3086cb4dcdeee245ef5cf34f72fb3e10">tbb::concurrent_bounded_queue< T, A ></a>
 </li>
 <li>try_process_item()
-: <a class="el" href="a00165.html#a12cfa43c620066a8783529cc8519c6f9">tbb::thread_bound_filter</a>
+: <a class="el" href="a00158.html#a12cfa43c620066a8783529cc8519c6f9">tbb::thread_bound_filter</a>
 </li>
 <li>try_push()
-: <a class="el" href="a00042.html#a03d93a240841a21788396bebd71c51bd">tbb::concurrent_bounded_queue< T, A ></a>
+: <a class="el" href="a00035.html#a93f35e9d9381629e0a2993f9fdd96d92">tbb::concurrent_bounded_queue< T, A ></a>
 </li>
 <li>try_put()
-: <a class="el" href="a00124.html#aee5067bb4f4b71ffa786c1b33cb9aa6a">tbb::flow::interface7::receiver< T ></a>
+: <a class="el" href="a00164.html#a84f8406cd5e3252965d9e238575eaede">tbb::flow::interface9::internal::untyped_receiver</a>
+, <a class="el" href="a00119.html#a6ac09b1571cea3efd1fdbdaf4e6ce71a">tbb::flow::interface9::receiver< T ></a>
+, <a class="el" href="a00120.html#a382797f42de522b37205415703cb32bd">tbb::flow::interface9::receiver_gateway< Input ></a>
+, <a class="el" href="a00119.html#a7f58c8ec0f790193be2e477b2546ead2">tbb::flow::interface9::receiver< T ></a>
 </li>
 <li>try_put_task()
-: <a class="el" href="a00028.html#a07d030b43c6e2d9169a7e58db30a547b">tbb::flow::interface7::broadcast_node< T ></a>
-, <a class="el" href="a00091.html#a0551cf104b35669b5f5153c1d03d5d2d">tbb::flow::interface7::limiter_node< T ></a>
-, <a class="el" href="a00030.html#aa4517c0a58649ea5eb140ab4b786e1ec">tbb::flow::interface7::buffer_node< T, A ></a>
+: <a class="el" href="a00119.html#aaff8d049a1209b14e6e871768c82a629">tbb::flow::interface9::receiver< T ></a>
+, <a class="el" href="a00049.html#a83b0bfae936dac53172d62a6dab4062e">tbb::flow::interface9::continue_receiver</a>
 </li>
 <li>try_release()
-: <a class="el" href="a00142.html#a97ac316ddfb6bd7c7f2f56e3e819a30a">tbb::flow::interface7::sender< T ></a>
-, <a class="el" href="a00144.html#a309c65a2d0208a1072f7e852198d461d">tbb::flow::interface7::source_node< Output ></a>
-, <a class="el" href="a00030.html#aaa3745fd4705345df16fb33954d93e30">tbb::flow::interface7::buffer_node< T, A ></a>
+: <a class="el" href="a00165.html#ac81ea252a8397324c865b035f67903ee">tbb::flow::interface9::internal::untyped_sender</a>
+, <a class="el" href="a00139.html#a554f795789a3902760847a1e83a2f0ad">tbb::flow::interface9::sender< T ></a>
 </li>
 <li>try_reserve()
-: <a class="el" href="a00030.html#a3b12cdebf8cef15b90e3c9cd9e51019f">tbb::flow::interface7::buffer_node< T, A ></a>
-, <a class="el" href="a00142.html#aa1b9dcf77ab558530ff93a706b4c4b5d">tbb::flow::interface7::sender< T ></a>
-, <a class="el" href="a00144.html#aabb0d505d684d173b1a2c976bf0781a6">tbb::flow::interface7::source_node< Output ></a>
+: <a class="el" href="a00165.html#ad48b26c7dec4845e1cb374e9f1c59fea">tbb::flow::interface9::internal::untyped_sender</a>
+, <a class="el" href="a00139.html#a82caccf2fcbbad3f255380260c39d02c">tbb::flow::interface9::sender< T ></a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x75.html b/doc/html/functions_0x75.html
index a3095b0..12f6897 100644
--- a/doc/html/functions_0x75.html
+++ b/doc/html/functions_0x75.html
@@ -75,24 +75,24 @@
 
 <h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
 <li>unlock()
-: <a class="el" href="a00099.html#a721eeae7ba16f8b92535f4534b583874">tbb::mutex</a>
-, <a class="el" href="a00113.html#a4c55c4dbde63e950fdc843c9b01a174f">tbb::interface5::reader_writer_lock</a>
-, <a class="el" href="a00145.html#adfcf8fe840aa73c08c2cadd570fd48fd">tbb::spin_mutex</a>
-, <a class="el" href="a00146.html#ab04321ed2cdf12ac5825c54591028fc0">tbb::spin_rw_mutex_v3</a>
-, <a class="el" href="a00125.html#af57e8d25e0e7614e98bcfa50bc9416c8">tbb::recursive_mutex</a>
+: <a class="el" href="a00082.html#a721eeae7ba16f8b92535f4534b583874">tbb::mutex</a>
+, <a class="el" href="a00108.html#a4c55c4dbde63e950fdc843c9b01a174f">tbb::interface5::reader_writer_lock</a>
+, <a class="el" href="a00140.html#adfcf8fe840aa73c08c2cadd570fd48fd">tbb::spin_mutex</a>
+, <a class="el" href="a00141.html#ab04321ed2cdf12ac5825c54591028fc0">tbb::spin_rw_mutex_v3</a>
+, <a class="el" href="a00121.html#af57e8d25e0e7614e98bcfa50bc9416c8">tbb::recursive_mutex</a>
 </li>
 <li>unsafe_size()
-: <a class="el" href="a00046.html#aad4b253ba595637b0b146eb6565556f2">tbb::strict_ppl::concurrent_queue< T, A ></a>
+: <a class="el" href="a00039.html#aad4b253ba595637b0b146eb6565556f2">tbb::strict_ppl::concurrent_queue< T, A ></a>
 </li>
 <li>upgrade_to_writer()
 : <a class="el" href="a00131.html#ae0f28ecfbbc5f8b3024cd47048b72b5b">tbb::queuing_rw_mutex::scoped_lock</a>
-, <a class="el" href="a00135.html#afbe5de57eadc457518df7a1bb0d30c00">tbb::spin_rw_mutex_v3::scoped_lock</a>
+, <a class="el" href="a00134.html#afbe5de57eadc457518df7a1bb0d30c00">tbb::spin_rw_mutex_v3::scoped_lock</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x76.html b/doc/html/functions_0x76.html
index 6ac33bf..e298b92 100644
--- a/doc/html/functions_0x76.html
+++ b/doc/html/functions_0x76.html
@@ -75,18 +75,18 @@
 
 <h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
 <li>value_type
-: <a class="el" href="a00054.html#aa8ca5aef4ee14b7eddb64767b8cd5fda">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
-, <a class="el" href="a00106.html#a2442f019427e608d46801376267e44a8">tbb::parallel_while< Body ></a>
-, <a class="el" href="a00042.html#a6eb564625fef03dd9a5881d5d4e52f9f">tbb::concurrent_bounded_queue< T, A ></a>
-, <a class="el" href="a00046.html#aeeee93a7ac2eecc80bbf3e857e900538">tbb::strict_ppl::concurrent_queue< T, A ></a>
-, <a class="el" href="a00045.html#a2c75d97ae429019363ab6fd1a872512e">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00010.html#a850178bbdcdbc4cf5955cab37eb8c42c">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>
+: <a class="el" href="a00047.html#aa8ca5aef4ee14b7eddb64767b8cd5fda">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
+, <a class="el" href="a00102.html#a2442f019427e608d46801376267e44a8">tbb::parallel_while< Body ></a>
+, <a class="el" href="a00035.html#a6eb564625fef03dd9a5881d5d4e52f9f">tbb::concurrent_bounded_queue< T, A ></a>
+, <a class="el" href="a00039.html#aeeee93a7ac2eecc80bbf3e857e900538">tbb::strict_ppl::concurrent_queue< T, A ></a>
+, <a class="el" href="a00038.html#a2c75d97ae429019363ab6fd1a872512e">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00009.html#a850178bbdcdbc4cf5955cab37eb8c42c">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x77.html b/doc/html/functions_0x77.html
index ad0495e..9f7ec27 100644
--- a/doc/html/functions_0x77.html
+++ b/doc/html/functions_0x77.html
@@ -74,22 +74,16 @@
 <div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
 
 <h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
-<li>wait_for_all()
-: <a class="el" href="a00070.html#a397208ce3b432c83cd24f416b082e8db">tbb::flow::interface7::graph</a>
-</li>
 <li>what()
-: <a class="el" href="a00161.html#ae0ad81121d4b722ecc466b5d3cc4e919">tbb::tbb_exception</a>
-, <a class="el" href="a00097.html#a41a2a7b61537ecd684bae760366f611c">tbb::movable_exception< ExceptionData ></a>
-, <a class="el" href="a00035.html#ac97ee315d8613c803dae2f6d3e0b91a7">tbb::captured_exception</a>
-</li>
-<li>write_once_node()
-: <a class="el" href="a00176.html#a68b94bb09b608522462080fe99125e07">tbb::flow::interface7::write_once_node< T ></a>
+: <a class="el" href="a00155.html#aa6739787c42d80943e18913cce47f42f">tbb::tbb_exception</a>
+, <a class="el" href="a00081.html#a59040b31c3147f7c77232a6cbc76ba05">tbb::movable_exception< ExceptionData ></a>
+, <a class="el" href="a00032.html#a1e9d36a304dd7e49906754a0cb72da2e">tbb::captured_exception</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x7e.html b/doc/html/functions_0x7e.html
index 37f646f..eeece8c 100644
--- a/doc/html/functions_0x7e.html
+++ b/doc/html/functions_0x7e.html
@@ -75,94 +75,88 @@
 
 <h3><a class="anchor" id="index_0x7e"></a>- ~ -</h3><ul>
 <li>~combinable()
-: <a class="el" href="a00036.html#a52f00cf262d768048db72ab73c8f3ca4">tbb::combinable< T ></a>
+: <a class="el" href="a00033.html#a52f00cf262d768048db72ab73c8f3ca4">tbb::combinable< T ></a>
 </li>
 <li>~concurrent_bounded_queue()
-: <a class="el" href="a00042.html#ab1291bf6837ecfb8836c24dde5dd80b5">tbb::concurrent_bounded_queue< T, A ></a>
+: <a class="el" href="a00035.html#ab1291bf6837ecfb8836c24dde5dd80b5">tbb::concurrent_bounded_queue< T, A ></a>
 </li>
 <li>~concurrent_hash_map()
-: <a class="el" href="a00043.html#a9ce9ab8c954bf6979c2c57d10fd8a8ed">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00036.html#a9ce9ab8c954bf6979c2c57d10fd8a8ed">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 <li>~concurrent_queue()
-: <a class="el" href="a00046.html#aa0056b242f280f5e25332ce998f9f670">tbb::strict_ppl::concurrent_queue< T, A ></a>
+: <a class="el" href="a00039.html#aa0056b242f280f5e25332ce998f9f670">tbb::strict_ppl::concurrent_queue< T, A ></a>
 </li>
 <li>~concurrent_vector()
-: <a class="el" href="a00053.html#ab5bcaededc9a00e7aaecd6c262fd0b38">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#ab5bcaededc9a00e7aaecd6c262fd0b38">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>~const_accessor()
-: <a class="el" href="a00054.html#afbc0c85a146c912b9a0f94a7695957c7">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
-</li>
-<li>~continue_receiver()
-: <a class="el" href="a00057.html#a2ca2de23e1e1eeb7071a838a457a50b2">tbb::flow::interface7::continue_receiver</a>
+: <a class="el" href="a00047.html#afbc0c85a146c912b9a0f94a7695957c7">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
 </li>
 <li>~enumerable_thread_specific()
-: <a class="el" href="a00061.html#a6ea8d717f770acb63efc406df52d4585">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
+: <a class="el" href="a00058.html#a6ea8d717f770acb63efc406df52d4585">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
 </li>
 <li>~fixed_pool()
-: <a class="el" href="a00065.html#ab854a85575e5c1e9c9f4d3eafcc28044">tbb::interface6::fixed_pool</a>
-</li>
-<li>~graph()
-: <a class="el" href="a00070.html#a3412df4d4bf0113aed93c958bbb49ec4">tbb::flow::interface7::graph</a>
+: <a class="el" href="a00062.html#ab854a85575e5c1e9c9f4d3eafcc28044">tbb::interface6::fixed_pool</a>
 </li>
 <li>~memory_pool()
-: <a class="el" href="a00092.html#ad2c7645b39b7280b1b3cf393d05fbaf7">tbb::interface6::memory_pool< Alloc ></a>
+: <a class="el" href="a00076.html#ad2c7645b39b7280b1b3cf393d05fbaf7">tbb::interface6::memory_pool< Alloc ></a>
+</li>
+<li>~opencl_graph()
+: <a class="el" href="a00093.html#aa2887522d89a7d1deff76002f398d905">tbb::flow::interface9::opencl_graph</a>
 </li>
 <li>~parallel_while()
-: <a class="el" href="a00106.html#ac2fd559c8a38639fa1ba97a0d5639ca8">tbb::parallel_while< Body ></a>
+: <a class="el" href="a00102.html#ac2fd559c8a38639fa1ba97a0d5639ca8">tbb::parallel_while< Body ></a>
 </li>
 <li>~pipeline()
-: <a class="el" href="a00107.html#ac3a7b33217b3f3bb0682ec3a40fd2c39">tbb::pipeline</a>
+: <a class="el" href="a00103.html#ac3a7b33217b3f3bb0682ec3a40fd2c39">tbb::pipeline</a>
 </li>
 <li>~queuing_rw_mutex()
-: <a class="el" href="a00112.html#ae67fe828d7e07222e7876ef9fd780fcc">tbb::queuing_rw_mutex</a>
+: <a class="el" href="a00107.html#ae67fe828d7e07222e7876ef9fd780fcc">tbb::queuing_rw_mutex</a>
 </li>
 <li>~reader_writer_lock()
-: <a class="el" href="a00113.html#aeee96b648c7b5ff6126c8a2e13ec7241">tbb::interface5::reader_writer_lock</a>
+: <a class="el" href="a00108.html#aeee96b648c7b5ff6126c8a2e13ec7241">tbb::interface5::reader_writer_lock</a>
 </li>
 <li>~receiver()
-: <a class="el" href="a00124.html#a733889a9053478ef2fb2528e2205bf07">tbb::flow::interface7::receiver< T ></a>
+: <a class="el" href="a00119.html#a33c66d3eb36a9e95db44fce5efeb65b4">tbb::flow::interface9::receiver< T ></a>
 </li>
 <li>~runtime_loader()
-: <a class="el" href="a00128.html#aa3b96f53e165e3d692c3c36292ba0737">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#aa3b96f53e165e3d692c3c36292ba0737">tbb::interface6::runtime_loader</a>
 </li>
 <li>~scoped_lock()
-: <a class="el" href="a00134.html#a9940d6e494466d9c53846ed347d79d83">tbb::spin_mutex::scoped_lock</a>
-, <a class="el" href="a00140.html#a08c399ee0bb9762039b29e570ec46fe9">tbb::mutex::scoped_lock</a>
+: <a class="el" href="a00133.html#a90a966e19120aac99b36a3d6d04af1a2">tbb::recursive_mutex::scoped_lock</a>
+, <a class="el" href="a00135.html#a08c399ee0bb9762039b29e570ec46fe9">tbb::mutex::scoped_lock</a>
+, <a class="el" href="a00128.html#a469ec43836a8dd250ce0a22b02945630">tbb::queuing_mutex::scoped_lock</a>
+, <a class="el" href="a00130.html#a9940d6e494466d9c53846ed347d79d83">tbb::spin_mutex::scoped_lock</a>
+, <a class="el" href="a00132.html#a41e77cf094ed30b0a9a39ee217c3653b">tbb::interface5::reader_writer_lock::scoped_lock</a>
+, <a class="el" href="a00134.html#a5c27ca2e0c9db960a9a7430082ff7edd">tbb::spin_rw_mutex_v3::scoped_lock</a>
 , <a class="el" href="a00131.html#a6cb16cc55f884bbbd5a69430c47b288f">tbb::queuing_rw_mutex::scoped_lock</a>
-, <a class="el" href="a00133.html#a41e77cf094ed30b0a9a39ee217c3653b">tbb::interface5::reader_writer_lock::scoped_lock</a>
-, <a class="el" href="a00139.html#a90a966e19120aac99b36a3d6d04af1a2">tbb::recursive_mutex::scoped_lock</a>
-, <a class="el" href="a00132.html#a469ec43836a8dd250ce0a22b02945630">tbb::queuing_mutex::scoped_lock</a>
-, <a class="el" href="a00135.html#a5c27ca2e0c9db960a9a7430082ff7edd">tbb::spin_rw_mutex_v3::scoped_lock</a>
 </li>
 <li>~scoped_lock_read()
-: <a class="el" href="a00141.html#acf0e23fb4d3aeb6bde18d5d1236bd9d5">tbb::interface5::reader_writer_lock::scoped_lock_read</a>
-</li>
-<li>~sequencer_node()
-: <a class="el" href="a00143.html#a01fd0321c7bd0f2112458cec2a636d7d">tbb::flow::interface7::sequencer_node< T, A ></a>
-</li>
-<li>~source_node()
-: <a class="el" href="a00144.html#a5ce12e348e121b9f4dffda9d1035c490">tbb::flow::interface7::source_node< Output ></a>
+: <a class="el" href="a00138.html#acf0e23fb4d3aeb6bde18d5d1236bd9d5">tbb::interface5::reader_writer_lock::scoped_lock_read</a>
 </li>
 <li>~spin_rw_mutex_v3()
-: <a class="el" href="a00146.html#acc7cf2e4b14d3a2a591a3552d74ba99d">tbb::spin_rw_mutex_v3</a>
+: <a class="el" href="a00141.html#acc7cf2e4b14d3a2a591a3552d74ba99d">tbb::spin_rw_mutex_v3</a>
 </li>
 <li>~task_arena()
-: <a class="el" href="a00150.html#a9ff5a35a219953a4f3d99b833fa5f683">tbb::interface7::task_arena</a>
+: <a class="el" href="a00144.html#a9ff5a35a219953a4f3d99b833fa5f683">tbb::interface7::task_arena</a>
 </li>
 <li>~task_scheduler_init()
-: <a class="el" href="a00156.html#a20b121334ec39c1d91bd4fe9a51892b0">tbb::task_scheduler_init</a>
+: <a class="el" href="a00150.html#a20b121334ec39c1d91bd4fe9a51892b0">tbb::task_scheduler_init</a>
 </li>
 <li>~task_scheduler_observer()
-: <a class="el" href="a00157.html#a9ef3f1853439b46e5a9db7fd1c0f9116">tbb::interface6::task_scheduler_observer</a>
+: <a class="el" href="a00151.html#a9ef3f1853439b46e5a9db7fd1c0f9116">tbb::interface6::task_scheduler_observer</a>
 </li>
 <li>~task_scheduler_observer_v3()
-: <a class="el" href="a00158.html#a151e475ebba39172fcc13f43bed426cc">tbb::internal::task_scheduler_observer_v3</a>
+: <a class="el" href="a00152.html#a151e475ebba39172fcc13f43bed426cc">tbb::internal::task_scheduler_observer_v3</a>
+</li>
+<li>~untyped_receiver()
+: <a class="el" href="a00164.html#a632631c8a370c1dd1fa8815cbc5e18ec">tbb::flow::interface9::internal::untyped_receiver</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_enum.html b/doc/html/functions_enum.html
index f70ed4e..46b0662 100644
--- a/doc/html/functions_enum.html
+++ b/doc/html/functions_enum.html
@@ -46,22 +46,22 @@
 <div class="contents">
  <ul>
 <li>error_code
-: <a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7">tbb::interface6::runtime_loader</a>
 </li>
 <li>error_mode
-: <a class="el" href="a00128.html#ab85c82f9c0ccd91905f2795a79ac1295">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#ab85c82f9c0ccd91905f2795a79ac1295">tbb::interface6::runtime_loader</a>
 </li>
 <li>malloc_type
-: <a class="el" href="a00159.html#a60463a571d5c20f7762112367261ad94">tbb::tbb_allocator< T ></a>
+: <a class="el" href="a00153.html#a60463a571d5c20f7762112367261ad94">tbb::tbb_allocator< T ></a>
 </li>
 <li>status_t
-: <a class="el" href="a00113.html#a29bbf9ca21c12b313d9fa5326feaf3ed">tbb::interface5::reader_writer_lock</a>
+: <a class="el" href="a00108.html#a29bbf9ca21c12b313d9fa5326feaf3ed">tbb::interface5::reader_writer_lock</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_eval.html b/doc/html/functions_eval.html
index 8d4fc9b..2e2675c 100644
--- a/doc/html/functions_eval.html
+++ b/doc/html/functions_eval.html
@@ -46,37 +46,37 @@
 <div class="contents">
  <ul>
 <li>ec_bad_arg
-: <a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7afd928f63eb3da0980e746d58374b07c3">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7afd928f63eb3da0980e746d58374b07c3">tbb::interface6::runtime_loader</a>
 </li>
 <li>ec_bad_call
-: <a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7a670e4d0a5a3c1bbcdff9e5ee16dc9c01">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7a670e4d0a5a3c1bbcdff9e5ee16dc9c01">tbb::interface6::runtime_loader</a>
 </li>
 <li>ec_bad_lib
-: <a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7a71f874957c0322f499ba764dd0bb8732">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7a71f874957c0322f499ba764dd0bb8732">tbb::interface6::runtime_loader</a>
 </li>
 <li>ec_bad_ver
-: <a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7aae7497a49ceae69d06d6ab9fef636064">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7aae7497a49ceae69d06d6ab9fef636064">tbb::interface6::runtime_loader</a>
 </li>
 <li>ec_no_lib
-: <a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7a5e694560f3ada80d2cc25881b5ae43dd">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7a5e694560f3ada80d2cc25881b5ae43dd">tbb::interface6::runtime_loader</a>
 </li>
 <li>ec_ok
-: <a class="el" href="a00128.html#a264674772d9f4240d89aa9d939c1eef7afc7eba28f2fc936312f041cf85276434">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#a264674772d9f4240d89aa9d939c1eef7afc7eba28f2fc936312f041cf85276434">tbb::interface6::runtime_loader</a>
 </li>
 <li>em_abort
-: <a class="el" href="a00128.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35">tbb::interface6::runtime_loader</a>
 </li>
 <li>em_status
-: <a class="el" href="a00128.html#ab85c82f9c0ccd91905f2795a79ac1295af9c9137d6acdb0fd37f1a92b5cdaeb36">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#ab85c82f9c0ccd91905f2795a79ac1295af9c9137d6acdb0fd37f1a92b5cdaeb36">tbb::interface6::runtime_loader</a>
 </li>
 <li>em_throw
-: <a class="el" href="a00128.html#ab85c82f9c0ccd91905f2795a79ac1295a17ec1019cffa635146eaefb042e28a2c">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#ab85c82f9c0ccd91905f2795a79ac1295a17ec1019cffa635146eaefb042e28a2c">tbb::interface6::runtime_loader</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func.html b/doc/html/functions_func.html
index b4b0586..470c38e 100644
--- a/doc/html/functions_func.html
+++ b/doc/html/functions_func.html
@@ -74,59 +74,49 @@
 
 <h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
 <li>abort()
-: <a class="el" href="a00042.html#a77a755d94cabf5208905d10d5b57419c">tbb::concurrent_bounded_queue< T, A ></a>
+: <a class="el" href="a00035.html#a77a755d94cabf5208905d10d5b57419c">tbb::concurrent_bounded_queue< T, A ></a>
 </li>
 <li>acquire()
-: <a class="el" href="a00029.html#a0d7d8f3d101bb18056b8e5d4d2c8b079">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a>
-, <a class="el" href="a00132.html#abf8aa7ccd48d54dcb53665700a17d02a">tbb::queuing_mutex::scoped_lock</a>
-, <a class="el" href="a00135.html#a6d49df365396ab314e78ba07c6b96433">tbb::spin_rw_mutex_v3::scoped_lock</a>
+: <a class="el" href="a00026.html#a0d7d8f3d101bb18056b8e5d4d2c8b079">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a>
+, <a class="el" href="a00128.html#abf8aa7ccd48d54dcb53665700a17d02a">tbb::queuing_mutex::scoped_lock</a>
+, <a class="el" href="a00134.html#a6d49df365396ab314e78ba07c6b96433">tbb::spin_rw_mutex_v3::scoped_lock</a>
 , <a class="el" href="a00131.html#ab4bf2fb86d6a418f9ea36474eb8893f9">tbb::queuing_rw_mutex::scoped_lock</a>
-, <a class="el" href="a00140.html#a9fce3e2e9f592315dc9c1ada72ae5e3c">tbb::mutex::scoped_lock</a>
-, <a class="el" href="a00139.html#ac5450ce6a5813f395afaa434384c6539">tbb::recursive_mutex::scoped_lock</a>
-, <a class="el" href="a00134.html#a7c702117f08ae82d034a98b3d5510ffc">tbb::spin_mutex::scoped_lock</a>
-</li>
-<li>activate()
-: <a class="el" href="a00144.html#a67264c4564abefbf14c0d587c6fe2857">tbb::flow::interface7::source_node< Output ></a>
+, <a class="el" href="a00135.html#a9fce3e2e9f592315dc9c1ada72ae5e3c">tbb::mutex::scoped_lock</a>
+, <a class="el" href="a00133.html#ac5450ce6a5813f395afaa434384c6539">tbb::recursive_mutex::scoped_lock</a>
+, <a class="el" href="a00130.html#a7c702117f08ae82d034a98b3d5510ffc">tbb::spin_mutex::scoped_lock</a>
 </li>
 <li>add()
-: <a class="el" href="a00105.html#ac095c6b1a32e9c0be010aa32875d7a63">tbb::parallel_do_feeder< Item ></a>
-, <a class="el" href="a00106.html#a4861989d7f5e3111d264d4d6013e8fe1">tbb::parallel_while< Body ></a>
+: <a class="el" href="a00102.html#a4861989d7f5e3111d264d4d6013e8fe1">tbb::parallel_while< Body ></a>
 </li>
 <li>add_filter()
-: <a class="el" href="a00107.html#a8eb83014bd53b184e0ed50f120ca310b">tbb::pipeline</a>
+: <a class="el" href="a00103.html#a8eb83014bd53b184e0ed50f120ca310b">tbb::pipeline</a>
 </li>
 <li>allocate()
-: <a class="el" href="a00159.html#afedd8a64eed9692083c708f419338e0c">tbb::tbb_allocator< T ></a>
-, <a class="el" href="a00162.html#abfbea91401d2594deb04ea331734171c">tbb::internal::tbb_exception_ptr</a>
-, <a class="el" href="a00032.html#a99d05096f80877849cb31d80247e0f85">tbb::cache_aligned_allocator< T ></a>
-, <a class="el" href="a00093.html#a10b9888883a3dbd66e87c4a7f874ef28">tbb::interface6::memory_pool_allocator< T, P ></a>
-, <a class="el" href="a00129.html#acf24945c12dc0586dfb1f8638daf7838">tbb::scalable_allocator< T ></a>
+: <a class="el" href="a00156.html#abfbea91401d2594deb04ea331734171c">tbb::internal::tbb_exception_ptr</a>
+, <a class="el" href="a00027.html#a99d05096f80877849cb31d80247e0f85">tbb::cache_aligned_allocator< T ></a>
+, <a class="el" href="a00077.html#a10b9888883a3dbd66e87c4a7f874ef28">tbb::interface6::memory_pool_allocator< T, P ></a>
+, <a class="el" href="a00126.html#acf24945c12dc0586dfb1f8638daf7838">tbb::scalable_allocator< T ></a>
+, <a class="el" href="a00153.html#afedd8a64eed9692083c708f419338e0c">tbb::tbb_allocator< T ></a>
 </li>
 <li>allocator_type()
-: <a class="el" href="a00159.html#aa4606cff0156ec4237c1571204851bfb">tbb::tbb_allocator< T ></a>
+: <a class="el" href="a00153.html#aa4606cff0156ec4237c1571204851bfb">tbb::tbb_allocator< T ></a>
 </li>
 <li>assign()
-: <a class="el" href="a00053.html#a87355dce93d0882aa73333a35c9b367c">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00045.html#ac1b3a945aac5a17c85d56756cc6aa3d1">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00053.html#a7bb5399a8499f88cf859eab39f0ed9e0">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00045.html#ac64c7b627708f0d6b2e5421fb0d49150">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00053.html#a584d6cda5794441b19d4f02bde399dff">tbb::concurrent_vector< T, A ></a>
-</li>
-<li>async_node()
-: <a class="el" href="a00017.html#a941e58ff009aa492f1f011947f7b04ac">tbb::flow::interface7::async_node< Input, Output, Allocator ></a>
-</li>
-<li>async_try_put()
-: <a class="el" href="a00017.html#a565f12fc3ce62a14156398c94f401d9c">tbb::flow::interface7::async_node< Input, Output, Allocator ></a>
-, <a class="el" href="a00016.html#a308f7feb8ac2fc3b7cbcf4e5246e78a2">tbb::flow::interface7::internal::async_gateway< Output ></a>
+: <a class="el" href="a00038.html#ac1b3a945aac5a17c85d56756cc6aa3d1">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00046.html#a87355dce93d0882aa73333a35c9b367c">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00038.html#ac64c7b627708f0d6b2e5421fb0d49150">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
 </li>
 <li>at()
-: <a class="el" href="a00053.html#a629a29eb21e528414b9d5c9becfe05cd">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#ae4dc6c1b55c0e0b73f0a8675ef2b60a4">tbb::concurrent_vector< T, A ></a>
+</li>
+<li>available_devices()
+: <a class="el" href="a00093.html#ab61ac804963875b343626891cef00c7b">tbb::flow::interface9::opencl_graph</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x62.html b/doc/html/functions_func_0x62.html
index 9a4a14c..efc40f2 100644
--- a/doc/html/functions_func_0x62.html
+++ b/doc/html/functions_func_0x62.html
@@ -74,32 +74,30 @@
 
 <h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
 <li>back()
-: <a class="el" href="a00053.html#aaee3ddf1d05238a8a6887f6d824b76f8">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#aaee3ddf1d05238a8a6887f6d824b76f8">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>begin()
-: <a class="el" href="a00024.html#ae225fa10454b0fa33533dfb56f5060a2">tbb::blocked_range< Value ></a>
-, <a class="el" href="a00061.html#aa097383eb6f90e4a551830fc00b60b3a">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
-, <a class="el" href="a00070.html#a91d2f9921342a504668b2cdc3064a846">tbb::flow::interface7::graph</a>
-, <a class="el" href="a00053.html#ab55636c80368ad7d400f3200313fcf5f">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00070.html#ac404d2e08620aca079532124551a646a">tbb::flow::interface7::graph</a>
-, <a class="el" href="a00015.html#a3525dbbac0d4eaedfe18bc57b7760857">tbb::aligned_space< T, N ></a>
-, <a class="el" href="a00053.html#ad3eb33d1b10a988a87cc708ceb08f3a9">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00061.html#a070d26debf1f65c83de13f64f91aefdc">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
+: <a class="el" href="a00022.html#ae225fa10454b0fa33533dfb56f5060a2">tbb::blocked_range< Value ></a>
+, <a class="el" href="a00058.html#aa097383eb6f90e4a551830fc00b60b3a">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
+, <a class="el" href="a00046.html#ab55636c80368ad7d400f3200313fcf5f">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00014.html#a3525dbbac0d4eaedfe18bc57b7760857">tbb::aligned_space< T, N ></a>
+, <a class="el" href="a00046.html#ad3eb33d1b10a988a87cc708ceb08f3a9">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00058.html#a070d26debf1f65c83de13f64f91aefdc">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
 </li>
 <li>blocked_range()
-: <a class="el" href="a00024.html#a49a97576004711b7159170fcaf488e4e">tbb::blocked_range< Value ></a>
+: <a class="el" href="a00022.html#a1f53fbb10b8b04a515f382704b00ed14">tbb::blocked_range< Value ></a>
 </li>
-<li>bucket_count()
-: <a class="el" href="a00043.html#aa067a2a4db1d96f38555369a89deee64">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+<li>blocking_terminate()
+: <a class="el" href="a00150.html#a2721ff874fb21f97b470d14a5ec151f3">tbb::task_scheduler_init</a>
 </li>
-<li>buffer_node()
-: <a class="el" href="a00030.html#a739635c43d1150f2c8dd3f455d698d36">tbb::flow::interface7::buffer_node< T, A ></a>
+<li>bucket_count()
+: <a class="el" href="a00036.html#aa067a2a4db1d96f38555369a89deee64">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x63.html b/doc/html/functions_func_0x63.html
index 5bb406c..a9cd941 100644
--- a/doc/html/functions_func_0x63.html
+++ b/doc/html/functions_func_0x63.html
@@ -74,88 +74,83 @@
 
 <h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
 <li>capacity()
-: <a class="el" href="a00042.html#a526487063242569685af8c8d778d39e0">tbb::concurrent_bounded_queue< T, A ></a>
-, <a class="el" href="a00053.html#a96c2ae9dfedc24d62554feb627df76c3">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00035.html#a526487063242569685af8c8d778d39e0">tbb::concurrent_bounded_queue< T, A ></a>
+, <a class="el" href="a00046.html#a96c2ae9dfedc24d62554feb627df76c3">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>cbegin()
-: <a class="el" href="a00070.html#a2af8f195917817ce2b77ff7b6463c344">tbb::flow::interface7::graph</a>
-, <a class="el" href="a00053.html#a7a1c5441fa480c07ef37d9206b6260cc">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#a7a1c5441fa480c07ef37d9206b6260cc">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>cend()
-: <a class="el" href="a00053.html#a9ea80faf139feb54d6576c036e4ba898">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00070.html#acf6d3f610c2675eaf8bf2a40853081aa">tbb::flow::interface7::graph</a>
+: <a class="el" href="a00046.html#a9ea80faf139feb54d6576c036e4ba898">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>clear()
-: <a class="el" href="a00045.html#a2459166998a4103880d603b237c429e6">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00046.html#ad3384818fb6350a494d5ec62445e59ee">tbb::strict_ppl::concurrent_queue< T, A ></a>
-, <a class="el" href="a00042.html#a246be3920e079ea4847933f106baa98f">tbb::concurrent_bounded_queue< T, A ></a>
-, <a class="el" href="a00053.html#a526ba408fb3064ef846940d633b8f365">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00061.html#a85a0d8f088ef1ee07aeb2c0e944a4a5e">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
-, <a class="el" href="a00107.html#ae53edbda1771eeaa254d78ae6100a762">tbb::pipeline</a>
-, <a class="el" href="a00043.html#ab8295bc260b5e4df883fef11574b84c6">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00035.html#a246be3920e079ea4847933f106baa98f">tbb::concurrent_bounded_queue< T, A ></a>
+, <a class="el" href="a00046.html#a526ba408fb3064ef846940d633b8f365">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00036.html#ab8295bc260b5e4df883fef11574b84c6">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+, <a class="el" href="a00058.html#a85a0d8f088ef1ee07aeb2c0e944a4a5e">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
+, <a class="el" href="a00103.html#ae53edbda1771eeaa254d78ae6100a762">tbb::pipeline</a>
+, <a class="el" href="a00038.html#a2459166998a4103880d603b237c429e6">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00039.html#ad3384818fb6350a494d5ec62445e59ee">tbb::strict_ppl::concurrent_queue< T, A ></a>
 </li>
 <li>cols()
-: <a class="el" href="a00025.html#af3bccfaf90126b285491096f78ca9473">tbb::blocked_range2d< RowValue, ColValue ></a>
-, <a class="el" href="a00026.html#a308d7089a1d53ff26770a7040ed817cd">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
+: <a class="el" href="a00023.html#af3bccfaf90126b285491096f78ca9473">tbb::blocked_range2d< RowValue, ColValue ></a>
+, <a class="el" href="a00024.html#a308d7089a1d53ff26770a7040ed817cd">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
 </li>
 <li>concurrent_bounded_queue()
-: <a class="el" href="a00042.html#a85f8a800cae02b601f36ad7a655a0126">tbb::concurrent_bounded_queue< T, A ></a>
+: <a class="el" href="a00035.html#a228b9d3bf3158a9379748894a93fbe55">tbb::concurrent_bounded_queue< T, A ></a>
 </li>
 <li>concurrent_hash_map()
-: <a class="el" href="a00043.html#aa3a9767b525144a2afb69ed125714c53">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00036.html#aa3a9767b525144a2afb69ed125714c53">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 <li>concurrent_priority_queue()
-: <a class="el" href="a00045.html#aa52cea369b6630699ee78cc42622be9d">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+: <a class="el" href="a00038.html#a14dd20a4673f77cff3eb6f269a888016">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
 </li>
 <li>concurrent_queue()
-: <a class="el" href="a00046.html#a49b2e16902577cd3174355be0fa684e5">tbb::strict_ppl::concurrent_queue< T, A ></a>
+: <a class="el" href="a00039.html#a49b2e16902577cd3174355be0fa684e5">tbb::strict_ppl::concurrent_queue< T, A ></a>
 </li>
 <li>concurrent_unordered_map()
-: <a class="el" href="a00047.html#a788a7225915574c1a349abc0f1f653c7">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>
+: <a class="el" href="a00040.html#a788a7225915574c1a349abc0f1f653c7">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a>
 </li>
 <li>concurrent_unordered_multimap()
-: <a class="el" href="a00049.html#a5957d29e5fa9f8c53538de3f7a41ebc9">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>
+: <a class="el" href="a00042.html#a5957d29e5fa9f8c53538de3f7a41ebc9">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a>
 </li>
 <li>concurrent_unordered_multiset()
-: <a class="el" href="a00050.html#a15631f048043195863c66bad6533bccb">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>
+: <a class="el" href="a00043.html#a15631f048043195863c66bad6533bccb">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a>
 </li>
 <li>concurrent_unordered_set()
-: <a class="el" href="a00051.html#a6f6d5ecff239ff13000848e925904fe7">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>
+: <a class="el" href="a00044.html#a6f6d5ecff239ff13000848e925904fe7">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a>
 </li>
 <li>concurrent_vector()
-: <a class="el" href="a00053.html#a03b5a0e9069b30dc4e2e5fc2f191ccb6">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#a5bd95c2241653c760704a92b2c887a48">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>const_accessor()
-: <a class="el" href="a00054.html#a7b26d22d228cf0d8678c9b346c63752c">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
+: <a class="el" href="a00047.html#a7b26d22d228cf0d8678c9b346c63752c">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
 </li>
 <li>construct()
-: <a class="el" href="a00159.html#af54fa3029e33cebe5ba64a8538306fdf">tbb::tbb_allocator< T ></a>
-, <a class="el" href="a00032.html#ab316f80a66b991801b4ec4ea88b852d9">tbb::cache_aligned_allocator< T ></a>
-, <a class="el" href="a00093.html#ac51b34ef90ecabdd2e0483e25603a15b">tbb::interface6::memory_pool_allocator< T, P ></a>
-</li>
-<li>continue_node()
-: <a class="el" href="a00056.html#a8ab0750127a7ead08e14b8910a21cf50">tbb::flow::interface7::continue_node< Output ></a>
+: <a class="el" href="a00153.html#af54fa3029e33cebe5ba64a8538306fdf">tbb::tbb_allocator< T ></a>
+, <a class="el" href="a00077.html#ac51b34ef90ecabdd2e0483e25603a15b">tbb::interface6::memory_pool_allocator< T, P ></a>
+, <a class="el" href="a00027.html#ab316f80a66b991801b4ec4ea88b852d9">tbb::cache_aligned_allocator< T ></a>
 </li>
 <li>continue_receiver()
-: <a class="el" href="a00057.html#a1ac173b0a739731b0b1db5a1e91d9326">tbb::flow::interface7::continue_receiver</a>
+: <a class="el" href="a00049.html#a1e72842b80f083994dd44bdb53e2284b">tbb::flow::interface9::continue_receiver</a>
 </li>
 <li>count()
-: <a class="el" href="a00043.html#ac375d3884bf9c80efe56117757c822e7">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00036.html#ac375d3884bf9c80efe56117757c822e7">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 <li>crbegin()
-: <a class="el" href="a00053.html#a2627db4a7949522ea4727320b23a6348">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#a2627db4a7949522ea4727320b23a6348">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>crend()
-: <a class="el" href="a00053.html#ad097225c529dbb24cc0e13a444ab4752">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#ad097225c529dbb24cc0e13a444ab4752">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>current_thread_index()
-: <a class="el" href="a00150.html#af695a8aa3d2a4f498067c662e287dd8f">tbb::interface7::task_arena</a>
+: <a class="el" href="a00144.html#af695a8aa3d2a4f498067c662e287dd8f">tbb::interface7::task_arena</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x64.html b/doc/html/functions_func_0x64.html
index e2b1ddb..4bed9ca 100644
--- a/doc/html/functions_func_0x64.html
+++ b/doc/html/functions_func_0x64.html
@@ -74,41 +74,38 @@
 
 <h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
 <li>deallocate()
-: <a class="el" href="a00032.html#a7f7310e046c4b6b8618864de8e27a471">tbb::cache_aligned_allocator< T ></a>
-, <a class="el" href="a00093.html#a9fcf288f2d653972d1bdc0c65abebed4">tbb::interface6::memory_pool_allocator< T, P ></a>
-, <a class="el" href="a00159.html#a28e333e0fff56dd53c20b82cfee430ab">tbb::tbb_allocator< T ></a>
-, <a class="el" href="a00129.html#a0632b19f25e5d5f86f18b3101925f488">tbb::scalable_allocator< T ></a>
+: <a class="el" href="a00027.html#a7f7310e046c4b6b8618864de8e27a471">tbb::cache_aligned_allocator< T ></a>
+, <a class="el" href="a00077.html#a9fcf288f2d653972d1bdc0c65abebed4">tbb::interface6::memory_pool_allocator< T, P ></a>
+, <a class="el" href="a00153.html#a28e333e0fff56dd53c20b82cfee430ab">tbb::tbb_allocator< T ></a>
+, <a class="el" href="a00126.html#a0632b19f25e5d5f86f18b3101925f488">tbb::scalable_allocator< T ></a>
 </li>
 <li>debug_wait_until_empty()
-: <a class="el" href="a00150.html#a07d87dff8c6116ee349684e10f754aeb">tbb::interface7::task_arena</a>
-</li>
-<li>decrement_wait_count()
-: <a class="el" href="a00070.html#af16d14eaed1355ae376bb78dde7762c3">tbb::flow::interface7::graph</a>
+: <a class="el" href="a00144.html#a07d87dff8c6116ee349684e10f754aeb">tbb::interface7::task_arena</a>
 </li>
 <li>default_num_threads()
-: <a class="el" href="a00156.html#aa0c0d46ec09bedc1ee876aa8aa87c3d1">tbb::task_scheduler_init</a>
+: <a class="el" href="a00150.html#aa0c0d46ec09bedc1ee876aa8aa87c3d1">tbb::task_scheduler_init</a>
 </li>
 <li>destroy()
-: <a class="el" href="a00161.html#ad3bc09bf78c33f19a0bcdf882fdf9d41">tbb::tbb_exception</a>
-, <a class="el" href="a00162.html#a38d3ca480e2758a67bcd7427b156daae">tbb::internal::tbb_exception_ptr</a>
-, <a class="el" href="a00032.html#af2fd054d055403d4ea669fd3af661cc8">tbb::cache_aligned_allocator< T ></a>
-, <a class="el" href="a00093.html#a2223b6469f88aadc432a4b3f88728d0f">tbb::interface6::memory_pool_allocator< T, P ></a>
-, <a class="el" href="a00097.html#a02f0401b465690de797face2432d9421">tbb::movable_exception< ExceptionData ></a>
-, <a class="el" href="a00159.html#ac7b1b393a8ff3399079328c0971c1996">tbb::tbb_allocator< T ></a>
-, <a class="el" href="a00035.html#a3006b6825dda6c746d28fb748f5675de">tbb::captured_exception</a>
+: <a class="el" href="a00032.html#abfc1220a6f9da0361082a3f3ad80cdc9">tbb::captured_exception</a>
+, <a class="el" href="a00156.html#a38d3ca480e2758a67bcd7427b156daae">tbb::internal::tbb_exception_ptr</a>
+, <a class="el" href="a00077.html#a2223b6469f88aadc432a4b3f88728d0f">tbb::interface6::memory_pool_allocator< T, P ></a>
+, <a class="el" href="a00153.html#ac7b1b393a8ff3399079328c0971c1996">tbb::tbb_allocator< T ></a>
+, <a class="el" href="a00027.html#af2fd054d055403d4ea669fd3af661cc8">tbb::cache_aligned_allocator< T ></a>
+, <a class="el" href="a00155.html#ad3bc09bf78c33f19a0bcdf882fdf9d41">tbb::tbb_exception</a>
+, <a class="el" href="a00081.html#aa4be7e2bf375edcb218fb5d7ed8e279b">tbb::movable_exception< ExceptionData ></a>
 </li>
 <li>detach()
-: <a class="el" href="a00164.html#a80a31a41708872af5557b907f129b19b">tbb::internal::tbb_thread_v3</a>
+: <a class="el" href="a00157.html#a80a31a41708872af5557b907f129b19b">tbb::internal::tbb_thread_v3</a>
 </li>
 <li>downgrade_to_reader()
-: <a class="el" href="a00135.html#aa693c05221d977856a98270a255fe5df">tbb::spin_rw_mutex_v3::scoped_lock</a>
+: <a class="el" href="a00134.html#aa693c05221d977856a98270a255fe5df">tbb::spin_rw_mutex_v3::scoped_lock</a>
 , <a class="el" href="a00131.html#af0af63035147a3d8422f8c8d7b8d2629">tbb::queuing_rw_mutex::scoped_lock</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x65.html b/doc/html/functions_func_0x65.html
index 892805f..399a889 100644
--- a/doc/html/functions_func_0x65.html
+++ b/doc/html/functions_func_0x65.html
@@ -74,59 +74,57 @@
 
 <h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
 <li>emplace()
-: <a class="el" href="a00043.html#a382178ea2f00f69096c91bcf76ae7913">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
-, <a class="el" href="a00045.html#a278d208cd92e5aeccc9c7f6fc192e3ce">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00043.html#acbe1d0f3a87786a83a7021af2ef52ee0">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00036.html#a382178ea2f00f69096c91bcf76ae7913">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+, <a class="el" href="a00038.html#a278d208cd92e5aeccc9c7f6fc192e3ce">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00036.html#acbe1d0f3a87786a83a7021af2ef52ee0">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 <li>emplace_back()
-: <a class="el" href="a00053.html#afae4c378515b89cc2b0a11c8cf1bcc50">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#afae4c378515b89cc2b0a11c8cf1bcc50">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>empty()
-: <a class="el" href="a00026.html#aea992e0cd3d105f964a633b1a0a1a05f">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
-, <a class="el" href="a00054.html#a6299b523d2ae8e2613f1bc160ca99b85">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
-, <a class="el" href="a00043.html#a5e05f2a1ca3accfb4252d7ee82d1e990">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
-, <a class="el" href="a00045.html#a8dec2dd0e8b22af14f1753eaef1bf5eb">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00024.html#a59dec03416b3fefbf69600f798177710">tbb::blocked_range< Value ></a>
-, <a class="el" href="a00046.html#aeda3156929d0c250faed7b807ca6ab0e">tbb::strict_ppl::concurrent_queue< T, A ></a>
-, <a class="el" href="a00042.html#a8c59578f28c5fb4718b0eff43776e879">tbb::concurrent_bounded_queue< T, A ></a>
-, <a class="el" href="a00025.html#a5805972c8c41b2681d286f9c9771cf52">tbb::blocked_range2d< RowValue, ColValue ></a>
-, <a class="el" href="a00053.html#aa3f6774107e65642f73c0dcc9a962fe7">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00061.html#adfa4b2e13e47ab825dc40c4f195d2bc5">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
+: <a class="el" href="a00024.html#aea992e0cd3d105f964a633b1a0a1a05f">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
+, <a class="el" href="a00047.html#a6299b523d2ae8e2613f1bc160ca99b85">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
+, <a class="el" href="a00036.html#a5e05f2a1ca3accfb4252d7ee82d1e990">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+, <a class="el" href="a00038.html#a8dec2dd0e8b22af14f1753eaef1bf5eb">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00022.html#a59dec03416b3fefbf69600f798177710">tbb::blocked_range< Value ></a>
+, <a class="el" href="a00039.html#aeda3156929d0c250faed7b807ca6ab0e">tbb::strict_ppl::concurrent_queue< T, A ></a>
+, <a class="el" href="a00035.html#a8c59578f28c5fb4718b0eff43776e879">tbb::concurrent_bounded_queue< T, A ></a>
+, <a class="el" href="a00023.html#a5805972c8c41b2681d286f9c9771cf52">tbb::blocked_range2d< RowValue, ColValue ></a>
+, <a class="el" href="a00046.html#aa3f6774107e65642f73c0dcc9a962fe7">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00058.html#adfa4b2e13e47ab825dc40c4f195d2bc5">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
 </li>
 <li>end()
-: <a class="el" href="a00015.html#ae95620e1159984a2670bd418ed4748d0">tbb::aligned_space< T, N ></a>
-, <a class="el" href="a00070.html#a599e6a885a76db84928b039063c299e4">tbb::flow::interface7::graph</a>
-, <a class="el" href="a00024.html#a99f829599d3e51b181a30b4cd57b06c6">tbb::blocked_range< Value ></a>
-, <a class="el" href="a00053.html#aad2c07653375e4a5f89c33b375eda610">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00061.html#ad225e2e8a968b131bf05d72f5686b924">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
-, <a class="el" href="a00070.html#a221a7ee0a1f0e69a01add5c1dda43be7">tbb::flow::interface7::graph</a>
+: <a class="el" href="a00014.html#ae95620e1159984a2670bd418ed4748d0">tbb::aligned_space< T, N ></a>
+, <a class="el" href="a00022.html#a99f829599d3e51b181a30b4cd57b06c6">tbb::blocked_range< Value ></a>
+, <a class="el" href="a00046.html#aad2c07653375e4a5f89c33b375eda610">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00058.html#ad225e2e8a968b131bf05d72f5686b924">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
 </li>
 <li>enqueue()
-: <a class="el" href="a00150.html#a8034275ed2fffa68f70484043b90d406">tbb::interface7::task_arena</a>
+: <a class="el" href="a00144.html#a8034275ed2fffa68f70484043b90d406">tbb::interface7::task_arena</a>
 </li>
 <li>enumerable_thread_specific()
-: <a class="el" href="a00061.html#aafd6049aa255826c712aaba778524a7c">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
+: <a class="el" href="a00058.html#aa636348d57b1fc5127c7d642af51f6da">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
 </li>
 <li>erase()
-: <a class="el" href="a00043.html#a2ec6f95ed9beda9d32df56cdd45c1842">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00036.html#a2ec6f95ed9beda9d32df56cdd45c1842">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 <li>exclude()
-: <a class="el" href="a00043.html#a6fec452b31b8f0e185dc2de64b7128b2">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00036.html#a6fec452b31b8f0e185dc2de64b7128b2">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 <li>execute()
-: <a class="el" href="a00150.html#af0c96f325b59d567b4c720f2830adde8">tbb::interface7::task_arena</a>
-, <a class="el" href="a00057.html#adf70ce80d67a565d04e029da461bbe72">tbb::flow::interface7::continue_receiver</a>
-, <a class="el" href="a00150.html#ab8442c8e9e3e678349409e08cabc7ae2">tbb::interface7::task_arena</a>
-, <a class="el" href="a00012.html#aa7cc924b6f0d17578d61fd9002f59f84">tbb::interface6::aggregator</a>
+: <a class="el" href="a00144.html#af0c96f325b59d567b4c720f2830adde8">tbb::interface7::task_arena</a>
+, <a class="el" href="a00011.html#aa7cc924b6f0d17578d61fd9002f59f84">tbb::interface6::aggregator</a>
+, <a class="el" href="a00144.html#ab8442c8e9e3e678349409e08cabc7ae2">tbb::interface7::task_arena</a>
+, <a class="el" href="a00049.html#ace97f82507453a8f3bc234d8de9f960d">tbb::flow::interface9::continue_receiver</a>
 </li>
 <li>execute_impl()
-: <a class="el" href="a00013.html#ad376e5c31d10e885f33964592aa629d4">tbb::interface6::aggregator_ext< handler_type ></a>
+: <a class="el" href="a00012.html#ad376e5c31d10e885f33964592aa629d4">tbb::interface6::aggregator_ext< handler_type ></a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x66.html b/doc/html/functions_func_0x66.html
index 3be30b4..767bd0e 100644
--- a/doc/html/functions_func_0x66.html
+++ b/doc/html/functions_func_0x66.html
@@ -74,28 +74,22 @@
 
 <h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
 <li>find()
-: <a class="el" href="a00043.html#a27a3f296dc170ae25f8e3fd9efa93cff">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00036.html#a27a3f296dc170ae25f8e3fd9efa93cff">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 <li>finish()
-: <a class="el" href="a00014.html#ac7edadfe74f475783f3b429904e7010a">tbb::interface6::aggregator_operation</a>
+: <a class="el" href="a00013.html#ac7edadfe74f475783f3b429904e7010a">tbb::interface6::aggregator_operation</a>
 </li>
 <li>fixed_pool()
-: <a class="el" href="a00065.html#aa3811fe3d437ba2eefa926d52732491a">tbb::interface6::fixed_pool</a>
-</li>
-<li>forward_task()
-: <a class="el" href="a00030.html#a8910a497040a4c6f1a6a1fb7a33a8888">tbb::flow::interface7::buffer_node< T, A ></a>
+: <a class="el" href="a00062.html#aa3811fe3d437ba2eefa926d52732491a">tbb::interface6::fixed_pool</a>
 </li>
 <li>front()
-: <a class="el" href="a00053.html#a9067259572c2c41d014840d0f9d3cdce">tbb::concurrent_vector< T, A ></a>
-</li>
-<li>function_node()
-: <a class="el" href="a00068.html#a1bb4915f2b6d6fbfbe6bfacece5639c6">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a>
+: <a class="el" href="a00046.html#a9bfc6d733cf543280b691ed8d7b7908a">tbb::concurrent_vector< T, A ></a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x67.html b/doc/html/functions_func_0x67.html
index 24f5ded..522aaf9 100644
--- a/doc/html/functions_func_0x67.html
+++ b/doc/html/functions_func_0x67.html
@@ -74,32 +74,26 @@
 
 <h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
 <li>get_allocator()
-: <a class="el" href="a00043.html#a121865c574f8ae5cae69ed3d6b7e0511">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
-, <a class="el" href="a00045.html#a312e88e51246da4c516d35abbb30721a">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00042.html#aaeba11bbcd368a7a3a6e6e2dd3082c9c">tbb::concurrent_bounded_queue< T, A ></a>
-, <a class="el" href="a00053.html#a88b62a9614d3f2b59c9c7c1a2143fb1e">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00046.html#a7f2b39f350281590b86db906eca6c480">tbb::strict_ppl::concurrent_queue< T, A ></a>
+: <a class="el" href="a00036.html#a121865c574f8ae5cae69ed3d6b7e0511">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+, <a class="el" href="a00038.html#a312e88e51246da4c516d35abbb30721a">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00035.html#aaeba11bbcd368a7a3a6e6e2dd3082c9c">tbb::concurrent_bounded_queue< T, A ></a>
+, <a class="el" href="a00046.html#a88b62a9614d3f2b59c9c7c1a2143fb1e">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00039.html#a7f2b39f350281590b86db906eca6c480">tbb::strict_ppl::concurrent_queue< T, A ></a>
 </li>
 <li>grainsize()
-: <a class="el" href="a00024.html#ab408f3cf90c85fa9203df5641a2f9bb1">tbb::blocked_range< Value ></a>
-</li>
-<li>graph()
-: <a class="el" href="a00070.html#a656cee3d0240a3f142a450800e6b17c7">tbb::flow::interface7::graph</a>
-</li>
-<li>graph_iterator()
-: <a class="el" href="a00071.html#a5082b1f425ffbd4a93533230d6ff99c0">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a>
+: <a class="el" href="a00022.html#ab408f3cf90c85fa9203df5641a2f9bb1">tbb::blocked_range< Value ></a>
 </li>
 <li>grow_by()
-: <a class="el" href="a00053.html#aa11fc991cda82cf93789fce31b37a16c">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#aa11fc991cda82cf93789fce31b37a16c">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>grow_to_at_least()
-: <a class="el" href="a00053.html#a422d9689ed72a5ef2b6b72f28e4143a2">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#a422d9689ed72a5ef2b6b72f28e4143a2">tbb::concurrent_vector< T, A ></a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x68.html b/doc/html/functions_func_0x68.html
index 7648862..6bee13d 100644
--- a/doc/html/functions_func_0x68.html
+++ b/doc/html/functions_func_0x68.html
@@ -74,13 +74,13 @@
 
 <h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
 <li>hardware_concurrency()
-: <a class="el" href="a00164.html#a23d7a420709b2e2b29b42dea897bd8bc">tbb::internal::tbb_thread_v3</a>
+: <a class="el" href="a00157.html#a23d7a420709b2e2b29b42dea897bd8bc">tbb::internal::tbb_thread_v3</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x69.html b/doc/html/functions_func_0x69.html
index 3e1f7bb..7c75c39 100644
--- a/doc/html/functions_func_0x69.html
+++ b/doc/html/functions_func_0x69.html
@@ -73,66 +73,49 @@
  
 
 <h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
-<li>increment_wait_count()
-: <a class="el" href="a00070.html#ad96c910ae45e6c5d2433bb1d9e910891">tbb::flow::interface7::graph</a>
-</li>
 <li>initialize()
-: <a class="el" href="a00150.html#a955131a79f8dc5a0a5c9ffa66a7e7140">tbb::interface7::task_arena</a>
-, <a class="el" href="a00156.html#a485028b867bffef5829209330e79e64c">tbb::task_scheduler_init</a>
-, <a class="el" href="a00150.html#a754d60ba6981461eb7c86afd14d3da2a">tbb::interface7::task_arena</a>
+: <a class="el" href="a00144.html#a955131a79f8dc5a0a5c9ffa66a7e7140">tbb::interface7::task_arena</a>
+, <a class="el" href="a00150.html#a485028b867bffef5829209330e79e64c">tbb::task_scheduler_init</a>
+, <a class="el" href="a00144.html#aace9ac1366eb3e0ec921da11699ba236">tbb::interface7::task_arena</a>
 </li>
 <li>insert()
-: <a class="el" href="a00043.html#ae0b420cdb752e749790c8a7daa15c3c2">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00036.html#ae0b420cdb752e749790c8a7daa15c3c2">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 <li>internal_construct()
-: <a class="el" href="a00145.html#a4ec484f4df6ec5595ec821ef20bd6cd7">tbb::spin_mutex</a>
+: <a class="el" href="a00140.html#a4ec484f4df6ec5595ec821ef20bd6cd7">tbb::spin_mutex</a>
 </li>
 <li>internal_copy()
-: <a class="el" href="a00043.html#a0bc3593f82b3b4f9839fc051780212ab">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00036.html#a0bc3593f82b3b4f9839fc051780212ab">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 <li>internal_equal_range()
-: <a class="el" href="a00043.html#a8603f5288db63ec35a16844427e97e42">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00036.html#a8603f5288db63ec35a16844427e97e42">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 <li>internal_fast_find()
-: <a class="el" href="a00043.html#acbb5b18c097fb32f264b7b5fe8d9fdd4">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
-</li>
-<li>internal_forward_task()
-: <a class="el" href="a00030.html#a3aa7578ccbd3d5f986869ab8698c037c">tbb::flow::interface7::buffer_node< T, A ></a>
-, <a class="el" href="a00110.html#a1ab7e37f537acb75175844bd34132b99">tbb::flow::interface7::queue_node< T, A ></a>
-, <a class="el" href="a00109.html#a4e6d43ca8748046098fd27ca97e58f3d">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a>
-</li>
-<li>internal_reg_succ()
-: <a class="el" href="a00030.html#afa2dd93a1b42e77ccf7e1de0fddf3158">tbb::flow::interface7::buffer_node< T, A ></a>
-</li>
-<li>internal_rem_succ()
-: <a class="el" href="a00030.html#a46c7f9cd9130036244d4ea8efd74bf22">tbb::flow::interface7::buffer_node< T, A ></a>
+: <a class="el" href="a00036.html#acbb5b18c097fb32f264b7b5fe8d9fdd4">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 <li>interval_t()
-: <a class="el" href="a00085.html#a95e3e14750bebafe719856176e2737db">tbb::tick_count::interval_t</a>
+: <a class="el" href="a00072.html#a95e3e14750bebafe719856176e2737db">tbb::tick_count::interval_t</a>
 </li>
 <li>is_active()
-: <a class="el" href="a00150.html#ad85856cefa30d42155a2b122b03efd8c">tbb::interface7::task_arena</a>
-, <a class="el" href="a00156.html#aed5505d7fed9d5493676aa15c176512c">tbb::task_scheduler_init</a>
-</li>
-<li>is_cancelled()
-: <a class="el" href="a00070.html#a9e26f4f5d608e39c8adc9dc6d06a7a01">tbb::flow::interface7::graph</a>
+: <a class="el" href="a00144.html#ad85856cefa30d42155a2b122b03efd8c">tbb::interface7::task_arena</a>
+, <a class="el" href="a00150.html#aed5505d7fed9d5493676aa15c176512c">tbb::task_scheduler_init</a>
 </li>
 <li>is_divisible()
-: <a class="el" href="a00024.html#ad90ad1db0d4d9a301ef1c9e17712e8a0">tbb::blocked_range< Value ></a>
-, <a class="el" href="a00025.html#ac84c6cc2ff8b0974ffa719fed804f586">tbb::blocked_range2d< RowValue, ColValue ></a>
-, <a class="el" href="a00026.html#a0fce6bcae6269c37623c3a2cdbb8bcf0">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
+: <a class="el" href="a00022.html#ad90ad1db0d4d9a301ef1c9e17712e8a0">tbb::blocked_range< Value ></a>
+, <a class="el" href="a00023.html#ac84c6cc2ff8b0974ffa719fed804f586">tbb::blocked_range2d< RowValue, ColValue ></a>
+, <a class="el" href="a00024.html#a0fce6bcae6269c37623c3a2cdbb8bcf0">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
 </li>
 <li>is_observing()
-: <a class="el" href="a00158.html#a31abaf256f7172f010cfb2259c7787bb">tbb::internal::task_scheduler_observer_v3</a>
+: <a class="el" href="a00152.html#a31abaf256f7172f010cfb2259c7787bb">tbb::internal::task_scheduler_observer_v3</a>
 </li>
 <li>is_writer()
-: <a class="el" href="a00029.html#aaa8167e2961330435fd23eb92127805c">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a>
+: <a class="el" href="a00026.html#aaa8167e2961330435fd23eb92127805c">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x6a.html b/doc/html/functions_func_0x6a.html
index d0fd28b..ed9ec1d 100644
--- a/doc/html/functions_func_0x6a.html
+++ b/doc/html/functions_func_0x6a.html
@@ -74,13 +74,13 @@
 
 <h3><a class="anchor" id="index_j"></a>- j -</h3><ul>
 <li>join()
-: <a class="el" href="a00164.html#a044c8727c51e921b0cc43a6b057eb559">tbb::internal::tbb_thread_v3</a>
+: <a class="el" href="a00157.html#a044c8727c51e921b0cc43a6b057eb559">tbb::internal::tbb_thread_v3</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x6c.html b/doc/html/functions_func_0x6c.html
index e2fd589..0c2066f 100644
--- a/doc/html/functions_func_0x6c.html
+++ b/doc/html/functions_func_0x6c.html
@@ -73,34 +73,31 @@
  
 
 <h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
-<li>limiter_node()
-: <a class="el" href="a00091.html#af1c8daee8d1fd31e63f78dbb8d0ec87d">tbb::flow::interface7::limiter_node< T ></a>
-</li>
 <li>load()
-: <a class="el" href="a00128.html#ae2949e9adcac56a2cb9864437be8e22e">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#ae2949e9adcac56a2cb9864437be8e22e">tbb::interface6::runtime_loader</a>
 </li>
 <li>local()
-: <a class="el" href="a00061.html#aea846c6cbafbe2ff6bde6e8c2a2ee97e">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
+: <a class="el" href="a00058.html#aea846c6cbafbe2ff6bde6e8c2a2ee97e">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
 </li>
 <li>lock()
-: <a class="el" href="a00125.html#adea997b45dc4a360f38d14bde9c991f2">tbb::recursive_mutex</a>
-, <a class="el" href="a00145.html#a8957e40b0781192419d01d28e5205ec4">tbb::spin_mutex</a>
-, <a class="el" href="a00113.html#af92eb949fc491af8f7e350869ea0a0d1">tbb::interface5::reader_writer_lock</a>
-, <a class="el" href="a00146.html#a51e207646300a4c242bb4aaa4e04e9b8">tbb::spin_rw_mutex_v3</a>
-, <a class="el" href="a00099.html#a95ff02ee699b34696001db4003c11a3a">tbb::mutex</a>
+: <a class="el" href="a00082.html#a95ff02ee699b34696001db4003c11a3a">tbb::mutex</a>
+, <a class="el" href="a00141.html#a51e207646300a4c242bb4aaa4e04e9b8">tbb::spin_rw_mutex_v3</a>
+, <a class="el" href="a00140.html#a8957e40b0781192419d01d28e5205ec4">tbb::spin_mutex</a>
+, <a class="el" href="a00108.html#af92eb949fc491af8f7e350869ea0a0d1">tbb::interface5::reader_writer_lock</a>
+, <a class="el" href="a00121.html#adea997b45dc4a360f38d14bde9c991f2">tbb::recursive_mutex</a>
 </li>
 <li>lock_read()
-: <a class="el" href="a00113.html#a6fd4fcdf0e5c0425d1cc736d644f234f">tbb::interface5::reader_writer_lock</a>
-, <a class="el" href="a00146.html#aa0e3bb644e9021d0f80ee36b03f228e4">tbb::spin_rw_mutex_v3</a>
+: <a class="el" href="a00108.html#a6fd4fcdf0e5c0425d1cc736d644f234f">tbb::interface5::reader_writer_lock</a>
+, <a class="el" href="a00141.html#aa0e3bb644e9021d0f80ee36b03f228e4">tbb::spin_rw_mutex_v3</a>
 </li>
 <li>lookup()
-: <a class="el" href="a00043.html#a2a319cf46fb9cf9a88aab6c0a20c98b3">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00036.html#a2a319cf46fb9cf9a88aab6c0a20c98b3">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x6d.html b/doc/html/functions_func_0x6d.html
index 292fdb7..374d4fe 100644
--- a/doc/html/functions_func_0x6d.html
+++ b/doc/html/functions_func_0x6d.html
@@ -73,33 +73,36 @@
  
 
 <h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>max_concurrency()
+: <a class="el" href="a00144.html#a2977b0fba9253e6cab31570f4992c998">tbb::interface7::task_arena</a>
+</li>
 <li>max_size()
-: <a class="el" href="a00032.html#a4b945b3180ea3dfe16dfa048f4591c6d">tbb::cache_aligned_allocator< T ></a>
-, <a class="el" href="a00043.html#aea0a0e5220a0dcb67da57d0280d36005">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
-, <a class="el" href="a00093.html#a2bded8e3fb2cec32b48771e7a1bbb838">tbb::interface6::memory_pool_allocator< T, P ></a>
-, <a class="el" href="a00129.html#afaa85d739b466699cf669116fd10d175">tbb::scalable_allocator< T ></a>
-, <a class="el" href="a00053.html#a0ec9c3ab3360e04bdaa5174956a3206d">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00159.html#a0a2676fb8a2f931961d373b88848c93e">tbb::tbb_allocator< T ></a>
+: <a class="el" href="a00027.html#a4b945b3180ea3dfe16dfa048f4591c6d">tbb::cache_aligned_allocator< T ></a>
+, <a class="el" href="a00046.html#a0ec9c3ab3360e04bdaa5174956a3206d">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00077.html#a2bded8e3fb2cec32b48771e7a1bbb838">tbb::interface6::memory_pool_allocator< T, P ></a>
+, <a class="el" href="a00036.html#aea0a0e5220a0dcb67da57d0280d36005">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+, <a class="el" href="a00126.html#afaa85d739b466699cf669116fd10d175">tbb::scalable_allocator< T ></a>
+, <a class="el" href="a00153.html#a0a2676fb8a2f931961d373b88848c93e">tbb::tbb_allocator< T ></a>
 </li>
 <li>may_sleep()
-: <a class="el" href="a00157.html#a2390325945912ee7ce58cd9700664ea4">tbb::interface6::task_scheduler_observer</a>
+: <a class="el" href="a00151.html#a2390325945912ee7ce58cd9700664ea4">tbb::interface6::task_scheduler_observer</a>
 </li>
 <li>memory_pool()
-: <a class="el" href="a00092.html#af4c36829a159eac04d630ac5a99b9354">tbb::interface6::memory_pool< Alloc ></a>
+: <a class="el" href="a00076.html#af4c36829a159eac04d630ac5a99b9354">tbb::interface6::memory_pool< Alloc ></a>
 </li>
 <li>move()
-: <a class="el" href="a00097.html#aeb47d3ac90a1f01fe642b572f6ac519d">tbb::movable_exception< ExceptionData ></a>
-, <a class="el" href="a00035.html#abb221485cd260349efdef681f633a6a4">tbb::captured_exception</a>
-, <a class="el" href="a00161.html#a4bd4ba0d501021013d1473d21b020b69">tbb::tbb_exception</a>
+: <a class="el" href="a00081.html#a46eee42a3279007f48c9e8f11d074d16">tbb::movable_exception< ExceptionData ></a>
+, <a class="el" href="a00032.html#a3b75205c631b51a00faf98c9e107f78a">tbb::captured_exception</a>
+, <a class="el" href="a00155.html#a4bd4ba0d501021013d1473d21b020b69">tbb::tbb_exception</a>
 </li>
 <li>mutex()
-: <a class="el" href="a00099.html#ad1b280c954ffc8b8b3e63e4ee4144035">tbb::mutex</a>
+: <a class="el" href="a00082.html#ad1b280c954ffc8b8b3e63e4ee4144035">tbb::mutex</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x6e.html b/doc/html/functions_func_0x6e.html
index da211cf..286aaa4 100644
--- a/doc/html/functions_func_0x6e.html
+++ b/doc/html/functions_func_0x6e.html
@@ -74,18 +74,18 @@
 
 <h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
 <li>name()
-: <a class="el" href="a00161.html#a282bb7dce5f157d044d14d50cd6ff35c">tbb::tbb_exception</a>
-, <a class="el" href="a00035.html#a23426113851b78d3f0069956afd21976">tbb::captured_exception</a>
-, <a class="el" href="a00097.html#a65dd805ed2424f1d2d0998f5567a9690">tbb::movable_exception< ExceptionData ></a>
+: <a class="el" href="a00155.html#a282bb7dce5f157d044d14d50cd6ff35c">tbb::tbb_exception</a>
+, <a class="el" href="a00032.html#a543e1a18c9a3f3b093c8c2bd927a6d12">tbb::captured_exception</a>
+, <a class="el" href="a00081.html#ae74fdea1aac39197bc1f5026dfd0a840">tbb::movable_exception< ExceptionData ></a>
 </li>
 <li>now()
-: <a class="el" href="a00170.html#a74dcecde7431ff4591d7c46fc1d50d7e">tbb::tick_count</a>
+: <a class="el" href="a00163.html#a74dcecde7431ff4591d7c46fc1d50d7e">tbb::tick_count</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x6f.html b/doc/html/functions_func_0x6f.html
index 829855f..2009e14 100644
--- a/doc/html/functions_func_0x6f.html
+++ b/doc/html/functions_func_0x6f.html
@@ -74,65 +74,57 @@
 
 <h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
 <li>observe()
-: <a class="el" href="a00158.html#a40209b347e3c82bb5bfda05941304309">tbb::internal::task_scheduler_observer_v3</a>
-, <a class="el" href="a00157.html#ad5b33790cea52c61e1fb004a8ed26365">tbb::interface6::task_scheduler_observer</a>
+: <a class="el" href="a00152.html#a40209b347e3c82bb5bfda05941304309">tbb::internal::task_scheduler_observer_v3</a>
+, <a class="el" href="a00151.html#ad5b33790cea52c61e1fb004a8ed26365">tbb::interface6::task_scheduler_observer</a>
 </li>
 <li>on_scheduler_entry()
-: <a class="el" href="a00158.html#af4282a27725fbe86052bb785bdd9c5d3">tbb::internal::task_scheduler_observer_v3</a>
+: <a class="el" href="a00152.html#af4282a27725fbe86052bb785bdd9c5d3">tbb::internal::task_scheduler_observer_v3</a>
 </li>
 <li>on_scheduler_exit()
-: <a class="el" href="a00158.html#a657e90f833568e217b807d0122fa7668">tbb::internal::task_scheduler_observer_v3</a>
+: <a class="el" href="a00152.html#a657e90f833568e217b807d0122fa7668">tbb::internal::task_scheduler_observer_v3</a>
 </li>
-<li>operator delete()
-: <a class="el" href="a00161.html#a6a973c37078afedf7d457ff4704bf8cd">tbb::tbb_exception</a>
+<li>opencl_graph()
+: <a class="el" href="a00093.html#a9ba7a7b2c5fe477941ce580da97f5444">tbb::flow::interface9::opencl_graph</a>
 </li>
-<li>operator!=()
-: <a class="el" href="a00071.html#af3f6d2cc6cbec2dc1194f7d5f4091a73">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a>
+<li>operator delete()
+: <a class="el" href="a00155.html#a6a973c37078afedf7d457ff4704bf8cd">tbb::tbb_exception</a>
 </li>
 <li>operator()()
-: <a class="el" href="a00029.html#a16e714a5e77dbf8daf81973df30722d4">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a>
+: <a class="el" href="a00026.html#a16e714a5e77dbf8daf81973df30722d4">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a>
 </li>
 <li>operator*()
-: <a class="el" href="a00054.html#a8adf04e33e7c8c876ba849f26807713a">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
-, <a class="el" href="a00010.html#a4e03905a33fbdafdb99113cc68d2bd4b">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>
-, <a class="el" href="a00071.html#a1daffd203bebae367ed0f32917048f22">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a>
-</li>
-<li>operator++()
-: <a class="el" href="a00071.html#ab84587ed134f01886f6a0d64d5a6ccef">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a>
+: <a class="el" href="a00047.html#a8adf04e33e7c8c876ba849f26807713a">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
+, <a class="el" href="a00009.html#a4e03905a33fbdafdb99113cc68d2bd4b">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>
 </li>
 <li>operator+=()
-: <a class="el" href="a00085.html#a19bf32f4541252daaa6b09fd33fa9177">tbb::tick_count::interval_t</a>
+: <a class="el" href="a00072.html#a19bf32f4541252daaa6b09fd33fa9177">tbb::tick_count::interval_t</a>
 </li>
 <li>operator-=()
-: <a class="el" href="a00085.html#a3394d9f3678e6a4c3d6e1be840fe2ff2">tbb::tick_count::interval_t</a>
+: <a class="el" href="a00072.html#a3394d9f3678e6a4c3d6e1be840fe2ff2">tbb::tick_count::interval_t</a>
 </li>
 <li>operator->()
-: <a class="el" href="a00010.html#ab04f73bd4a4ca7df0dc91a7b4d66f987">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>
-, <a class="el" href="a00071.html#abfb28c989f76822e26b47211febe3d72">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a>
-, <a class="el" href="a00054.html#a28fa9b9e6c35d7e80217e69a7afe1ee5">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
+: <a class="el" href="a00047.html#a28fa9b9e6c35d7e80217e69a7afe1ee5">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
+, <a class="el" href="a00009.html#ab04f73bd4a4ca7df0dc91a7b4d66f987">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>
 </li>
 <li>operator=()
-: <a class="el" href="a00043.html#a63e01b1f79c287ae0257ccfd483fd90a">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
-, <a class="el" href="a00053.html#a8498a1335a3bbac2f4925a4e8d70cdb8">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00045.html#a9b21bd56aff8c412c5fcdd0d88b48c98">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00043.html#aac73665b1a55e3de7332f36598488252">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
-, <a class="el" href="a00071.html#ada73cea77a417f0df629eeaf4c1e2002">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a>
-, <a class="el" href="a00045.html#a7eaa05dcb74604e45e0e2c55e1e456e9">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00043.html#a92b506ceed93d1c25979948961054380">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
-, <a class="el" href="a00053.html#a920384aece0eb8beea3049956320ec91">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00045.html#ac0c3f41b10f04547f3438517c40cf8a5">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-</li>
-<li>operator==()
-: <a class="el" href="a00071.html#a3b0d834dffd2a99a596e9541b7a96d2a">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a>
+: <a class="el" href="a00046.html#a920384aece0eb8beea3049956320ec91">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00036.html#a92b506ceed93d1c25979948961054380">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+, <a class="el" href="a00038.html#a9b21bd56aff8c412c5fcdd0d88b48c98">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00036.html#aac73665b1a55e3de7332f36598488252">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+, <a class="el" href="a00046.html#a1fe7f0b60bbf304890a9293a35e6819d">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00036.html#a63e01b1f79c287ae0257ccfd483fd90a">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+, <a class="el" href="a00046.html#a8498a1335a3bbac2f4925a4e8d70cdb8">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00038.html#ac0c3f41b10f04547f3438517c40cf8a5">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00046.html#a0d26889a94203cdb5f5460fade7497c7">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>operator[]()
-: <a class="el" href="a00053.html#abd6ca67f2f97fafca48395af2e693e73">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#abd6ca67f2f97fafca48395af2e693e73">tbb::concurrent_vector< T, A ></a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x70.html b/doc/html/functions_func_0x70.html
index 53b986c..fcd2c93 100644
--- a/doc/html/functions_func_0x70.html
+++ b/doc/html/functions_func_0x70.html
@@ -74,40 +74,37 @@
 
 <h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
 <li>pages()
-: <a class="el" href="a00026.html#a5b794fd53ba92106aeafa4eed85731d4">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
+: <a class="el" href="a00024.html#a5b794fd53ba92106aeafa4eed85731d4">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
 </li>
 <li>parallel_while()
-: <a class="el" href="a00106.html#a220a7307358aa36802c8754ea45ca385">tbb::parallel_while< Body ></a>
+: <a class="el" href="a00102.html#a220a7307358aa36802c8754ea45ca385">tbb::parallel_while< Body ></a>
 </li>
 <li>pipeline()
-: <a class="el" href="a00107.html#afe7b7bd9b2617c2b69170675a478b2bd">tbb::pipeline</a>
+: <a class="el" href="a00103.html#afe7b7bd9b2617c2b69170675a478b2bd">tbb::pipeline</a>
 </li>
 <li>pop()
-: <a class="el" href="a00042.html#a87926c31967a918ce80690a9ed5d6fa8">tbb::concurrent_bounded_queue< T, A ></a>
-</li>
-<li>priority_queue_node()
-: <a class="el" href="a00109.html#ab295c7b50ff804f7276609a25016e7ca">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a>
+: <a class="el" href="a00035.html#a87926c31967a918ce80690a9ed5d6fa8">tbb::concurrent_bounded_queue< T, A ></a>
 </li>
 <li>process()
-: <a class="el" href="a00013.html#ae55b16ec6af204aa00d6a716fccec9f7">tbb::interface6::aggregator_ext< handler_type ></a>
+: <a class="el" href="a00012.html#ae55b16ec6af204aa00d6a716fccec9f7">tbb::interface6::aggregator_ext< handler_type ></a>
 </li>
 <li>process_item()
-: <a class="el" href="a00165.html#ac99258407f382d84568a510075074fc7">tbb::thread_bound_filter</a>
+: <a class="el" href="a00158.html#ac99258407f382d84568a510075074fc7">tbb::thread_bound_filter</a>
 </li>
 <li>push()
-: <a class="el" href="a00045.html#a1bfa0e7269b3407d6bb5c706264d2406">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00046.html#a9330ca6590980d80ef7b1ea3613a699a">tbb::strict_ppl::concurrent_queue< T, A ></a>
-, <a class="el" href="a00042.html#ae5e9051772bbc93b2ccb8fd0a98a21f5">tbb::concurrent_bounded_queue< T, A ></a>
-, <a class="el" href="a00045.html#a72ff26945c61b4ce3ce7ca0f9b9aaa48">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+: <a class="el" href="a00035.html#ae5e9051772bbc93b2ccb8fd0a98a21f5">tbb::concurrent_bounded_queue< T, A ></a>
+, <a class="el" href="a00038.html#a1bfa0e7269b3407d6bb5c706264d2406">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00035.html#a62a03e9c185562254ecb4104f38c106d">tbb::concurrent_bounded_queue< T, A ></a>
+, <a class="el" href="a00039.html#a9330ca6590980d80ef7b1ea3613a699a">tbb::strict_ppl::concurrent_queue< T, A ></a>
 </li>
 <li>push_back()
-: <a class="el" href="a00053.html#ad68d1675fedef232bfae35f200ba007d">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#ac29a9f08c0fac7c20786c7b8f4f0321a">tbb::concurrent_vector< T, A ></a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x71.html b/doc/html/functions_func_0x71.html
index bd608be..f9e6ab3 100644
--- a/doc/html/functions_func_0x71.html
+++ b/doc/html/functions_func_0x71.html
@@ -73,20 +73,17 @@
  
 
 <h3><a class="anchor" id="index_q"></a>- q -</h3><ul>
-<li>queue_node()
-: <a class="el" href="a00110.html#a503d3fe4f98302549e36f74633de5716">tbb::flow::interface7::queue_node< T, A ></a>
-</li>
 <li>queuing_mutex()
-: <a class="el" href="a00111.html#a0e58fce2062ae349a30b320b7fdc9155">tbb::queuing_mutex</a>
+: <a class="el" href="a00106.html#a0e58fce2062ae349a30b320b7fdc9155">tbb::queuing_mutex</a>
 </li>
 <li>queuing_rw_mutex()
-: <a class="el" href="a00112.html#a23de1ac415b6f54b778c8fd6ec6073e0">tbb::queuing_rw_mutex</a>
+: <a class="el" href="a00107.html#a23de1ac415b6f54b778c8fd6ec6073e0">tbb::queuing_rw_mutex</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x72.html b/doc/html/functions_func_0x72.html
index cc49ac7..e552485 100644
--- a/doc/html/functions_func_0x72.html
+++ b/doc/html/functions_func_0x72.html
@@ -74,93 +74,87 @@
 
 <h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
 <li>range()
-: <a class="el" href="a00053.html#a8201f65735edcc28aeec95b6e73d75b6">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00061.html#a25b9153dfe994c8122a7f0227cffe793">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
+: <a class="el" href="a00046.html#a8201f65735edcc28aeec95b6e73d75b6">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00058.html#a25b9153dfe994c8122a7f0227cffe793">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
 </li>
 <li>rbegin()
-: <a class="el" href="a00053.html#a9a2f8dce0adcbef8e29273c23723a78e">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#a9a2f8dce0adcbef8e29273c23723a78e">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>reader_writer_lock()
-: <a class="el" href="a00113.html#abceda6c50b0c36eacbef51f4682742f3">tbb::interface5::reader_writer_lock</a>
+: <a class="el" href="a00108.html#abceda6c50b0c36eacbef51f4682742f3">tbb::interface5::reader_writer_lock</a>
 </li>
 <li>recursive_mutex()
-: <a class="el" href="a00125.html#a47eb6e7e7ffa5d35341125792b17236b">tbb::recursive_mutex</a>
+: <a class="el" href="a00121.html#a47eb6e7e7ffa5d35341125792b17236b">tbb::recursive_mutex</a>
 </li>
 <li>register_predecessor()
-: <a class="el" href="a00124.html#a16427aa709505de93ffe0d79136e4251">tbb::flow::interface7::receiver< T ></a>
-, <a class="el" href="a00057.html#a9ff043995b7b4d39ab0ec41c9e3628bf">tbb::flow::interface7::continue_receiver</a>
-, <a class="el" href="a00091.html#aca5ef5cec3b26227d71686d99ee04f7e">tbb::flow::interface7::limiter_node< T ></a>
+: <a class="el" href="a00164.html#ae1c186c47aace8ad385c6bb6fdf3a14d">tbb::flow::interface9::internal::untyped_receiver</a>
+, <a class="el" href="a00119.html#a272b4aa85424e7e96371868403fe3c54">tbb::flow::interface9::receiver< T ></a>
+, <a class="el" href="a00049.html#a3921e10cb2c5666d4541259d47713754">tbb::flow::interface9::continue_receiver</a>
 </li>
 <li>register_successor()
-: <a class="el" href="a00030.html#a5e87f7e8fd8698f62f2cad8b52b6e565">tbb::flow::interface7::buffer_node< T, A ></a>
-, <a class="el" href="a00091.html#ad2cfd954eb06732f7bae8f2c8fe28735">tbb::flow::interface7::limiter_node< T ></a>
-, <a class="el" href="a00142.html#a4dac8f53a1f8373c1f3a874b9617e4ec">tbb::flow::interface7::sender< T ></a>
-, <a class="el" href="a00144.html#a27aa895c54d59f570f267c26f14f0cf1">tbb::flow::interface7::source_node< Output ></a>
-, <a class="el" href="a00104.html#aed811ce5f59a555396c7bcd56316b4da">tbb::flow::interface7::overwrite_node< T ></a>
-, <a class="el" href="a00028.html#a36b5c86faa58a264d899b7c26286c80e">tbb::flow::interface7::broadcast_node< T ></a>
+: <a class="el" href="a00165.html#a2298076f4c5e52a6c9c8a8e6fbfbd9de">tbb::flow::interface9::internal::untyped_sender</a>
+, <a class="el" href="a00139.html#af481e8df87d085c3054bd7c76d7f50ef">tbb::flow::interface9::sender< T ></a>
 </li>
 <li>rehash()
-: <a class="el" href="a00043.html#adf1fa9470c605731063e5949f0418eb7">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00036.html#adf1fa9470c605731063e5949f0418eb7">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 <li>release()
-: <a class="el" href="a00054.html#a18390cb369369d72bdf7c867755b5190">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
-, <a class="el" href="a00140.html#a1a1590281ccca912229a689d920fd78a">tbb::mutex::scoped_lock</a>
-, <a class="el" href="a00132.html#aaa065e48b428b8d43e9bb931ba9e6f6c">tbb::queuing_mutex::scoped_lock</a>
+: <a class="el" href="a00135.html#a1a1590281ccca912229a689d920fd78a">tbb::mutex::scoped_lock</a>
+, <a class="el" href="a00128.html#aaa065e48b428b8d43e9bb931ba9e6f6c">tbb::queuing_mutex::scoped_lock</a>
 , <a class="el" href="a00131.html#a50fb02b77f02a01c74754d163157ec77">tbb::queuing_rw_mutex::scoped_lock</a>
-, <a class="el" href="a00139.html#a2fe3246ffc26bdb5a58f33ca513b6c0f">tbb::recursive_mutex::scoped_lock</a>
-, <a class="el" href="a00134.html#a7e801b0c28fd8395fec400b96acc5c34">tbb::spin_mutex::scoped_lock</a>
-, <a class="el" href="a00135.html#a99e279a995a51abfb87b865e886949f8">tbb::spin_rw_mutex_v3::scoped_lock</a>
+, <a class="el" href="a00133.html#a2fe3246ffc26bdb5a58f33ca513b6c0f">tbb::recursive_mutex::scoped_lock</a>
+, <a class="el" href="a00130.html#a7e801b0c28fd8395fec400b96acc5c34">tbb::spin_mutex::scoped_lock</a>
+, <a class="el" href="a00134.html#a99e279a995a51abfb87b865e886949f8">tbb::spin_rw_mutex_v3::scoped_lock</a>
+, <a class="el" href="a00047.html#a18390cb369369d72bdf7c867755b5190">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
+</li>
+<li>release_wait()
+: <a class="el" href="a00069.html#a5f751c4f3a0b5be4f97b2b857aaecea0">tbb::flow::interface9::graph_proxy</a>
 </li>
 <li>remove_predecessor()
-: <a class="el" href="a00124.html#a55adae6228bbdc1539695e1ec20e9762">tbb::flow::interface7::receiver< T ></a>
-, <a class="el" href="a00057.html#aea58a2200f20acd9cda829ba6958b22a">tbb::flow::interface7::continue_receiver</a>
-, <a class="el" href="a00091.html#a8aca7b4bd4ee13faf713021eb0d86735">tbb::flow::interface7::limiter_node< T ></a>
+: <a class="el" href="a00164.html#a18c7050e86d482a8aed57611e40d3c6f">tbb::flow::interface9::internal::untyped_receiver</a>
+, <a class="el" href="a00119.html#ae8f45b84f3179964dd77f32835ece6c0">tbb::flow::interface9::receiver< T ></a>
+, <a class="el" href="a00049.html#aa0c679a297c71fba43380b07ef69563b">tbb::flow::interface9::continue_receiver</a>
 </li>
 <li>remove_successor()
-: <a class="el" href="a00028.html#a22d463b071df6e0b7ca11df27bb2637e">tbb::flow::interface7::broadcast_node< T ></a>
-, <a class="el" href="a00030.html#a3c31300c060bffbbad7798219e702aba">tbb::flow::interface7::buffer_node< T, A ></a>
-, <a class="el" href="a00091.html#ac7b092dcc2808abf02816d4ac9c86e66">tbb::flow::interface7::limiter_node< T ></a>
-, <a class="el" href="a00104.html#ab5ff89d56e2e3c3848d84a09c88b1d52">tbb::flow::interface7::overwrite_node< T ></a>
-, <a class="el" href="a00142.html#ac1ae19f49e31c6ca94dcf14732eb7a64">tbb::flow::interface7::sender< T ></a>
-, <a class="el" href="a00144.html#a313af00af7584f4b9aee1e1bacff4041">tbb::flow::interface7::source_node< Output ></a>
+: <a class="el" href="a00139.html#a7b94781eff02591069fd8afdfd7f01d7">tbb::flow::interface9::sender< T ></a>
+, <a class="el" href="a00165.html#a32affec91647eba02f826f18f43e02e5">tbb::flow::interface9::internal::untyped_sender</a>
 </li>
 <li>rend()
-: <a class="el" href="a00053.html#a618f38279a370c18f73ea2c29ded9cb9">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#a618f38279a370c18f73ea2c29ded9cb9">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>reserve()
-: <a class="el" href="a00053.html#a0b3284684328c58c0228c9a697ef3594">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#a0b3284684328c58c0228c9a697ef3594">tbb::concurrent_vector< T, A ></a>
+</li>
+<li>reserve_wait()
+: <a class="el" href="a00069.html#a89db56a08929f4d3e45d27838cec3272">tbb::flow::interface9::graph_proxy</a>
 </li>
-<li>reset_node()
-: <a class="el" href="a00144.html#aed1fa277170d6cee6d1437f1258ac544">tbb::flow::interface7::source_node< Output ></a>
+<li>reset_receiver()
+: <a class="el" href="a00164.html#a2ddcd11694b38141f369af99498971ca">tbb::flow::interface9::internal::untyped_receiver</a>
+, <a class="el" href="a00119.html#a4b0f31d3bc03ce4cb1b00819aeb1d37e">tbb::flow::interface9::receiver< T ></a>
+, <a class="el" href="a00049.html#a7074cdcd8437cde18780f7dcca69e349">tbb::flow::interface9::continue_receiver</a>
 </li>
 <li>resize()
-: <a class="el" href="a00053.html#a941917a8a840ff08ce8810ca9476ff46">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#a941917a8a840ff08ce8810ca9476ff46">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>resolution()
-: <a class="el" href="a00170.html#aaf6a0d91e7d40f7d68e0ad6b79350e58">tbb::tick_count</a>
-</li>
-<li>root_task()
-: <a class="el" href="a00070.html#ae5f59627a7d130cf289f105a849ad3f0">tbb::flow::interface7::graph</a>
+: <a class="el" href="a00163.html#aaf6a0d91e7d40f7d68e0ad6b79350e58">tbb::tick_count</a>
 </li>
 <li>rows()
-: <a class="el" href="a00025.html#a4f7299e74c40df57dee2433c07ce65ae">tbb::blocked_range2d< RowValue, ColValue ></a>
-, <a class="el" href="a00026.html#aeac1def585af81467573f30ebb42cb4f">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
+: <a class="el" href="a00024.html#aeac1def585af81467573f30ebb42cb4f">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
+, <a class="el" href="a00023.html#a4f7299e74c40df57dee2433c07ce65ae">tbb::blocked_range2d< RowValue, ColValue ></a>
 </li>
 <li>run()
-: <a class="el" href="a00107.html#a270dba81f7dd9935be7f3d69db907ff4">tbb::pipeline</a>
-, <a class="el" href="a00070.html#ac0a03f1d59dc2ccb9526995599c2c83c">tbb::flow::interface7::graph</a>
-, <a class="el" href="a00107.html#ac9ee9080cfc080c40a7ee7cb03a62637">tbb::pipeline</a>
-, <a class="el" href="a00070.html#a6e428c2d7c8780f3c2587a71c4d92466">tbb::flow::interface7::graph</a>
-, <a class="el" href="a00106.html#a20607ba5faa958144787d980aa850c16">tbb::parallel_while< Body ></a>
+: <a class="el" href="a00102.html#a20607ba5faa958144787d980aa850c16">tbb::parallel_while< Body ></a>
+, <a class="el" href="a00103.html#a270dba81f7dd9935be7f3d69db907ff4">tbb::pipeline</a>
 </li>
 <li>runtime_loader()
-: <a class="el" href="a00128.html#a3e0932074d2f3ad04605e7e5da88c561">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#a3e0932074d2f3ad04605e7e5da88c561">tbb::interface6::runtime_loader</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x73.html b/doc/html/functions_func_0x73.html
index a140f8b..4881ba5 100644
--- a/doc/html/functions_func_0x73.html
+++ b/doc/html/functions_func_0x73.html
@@ -74,71 +74,65 @@
 
 <h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
 <li>scoped_lock()
-: <a class="el" href="a00140.html#a23122745ccd5fc2498fcbbd5ced09e06">tbb::mutex::scoped_lock</a>
-, <a class="el" href="a00132.html#aa82d9da0dcfe5b21f1c08473f8223105">tbb::queuing_mutex::scoped_lock</a>
-, <a class="el" href="a00139.html#a0a9962a3932cfbd0d12cb197494f951b">tbb::recursive_mutex::scoped_lock</a>
+: <a class="el" href="a00135.html#a23122745ccd5fc2498fcbbd5ced09e06">tbb::mutex::scoped_lock</a>
+, <a class="el" href="a00128.html#aa82d9da0dcfe5b21f1c08473f8223105">tbb::queuing_mutex::scoped_lock</a>
+, <a class="el" href="a00133.html#a0a9962a3932cfbd0d12cb197494f951b">tbb::recursive_mutex::scoped_lock</a>
 , <a class="el" href="a00131.html#a1ae3792726dcff8da1f2c5366fb2b754">tbb::queuing_rw_mutex::scoped_lock</a>
-, <a class="el" href="a00134.html#a4287be975cf2448c95f068b065c45107">tbb::spin_mutex::scoped_lock</a>
-, <a class="el" href="a00132.html#a0afe0107eb0aae613e726f67624d2fca">tbb::queuing_mutex::scoped_lock</a>
+, <a class="el" href="a00130.html#a4287be975cf2448c95f068b065c45107">tbb::spin_mutex::scoped_lock</a>
+, <a class="el" href="a00128.html#a0afe0107eb0aae613e726f67624d2fca">tbb::queuing_mutex::scoped_lock</a>
 , <a class="el" href="a00131.html#af1b55ca1839c9c7c2cd779cd2dd9c474">tbb::queuing_rw_mutex::scoped_lock</a>
-, <a class="el" href="a00135.html#a285b355121772c874a7ecaaf4d347224">tbb::spin_rw_mutex_v3::scoped_lock</a>
-, <a class="el" href="a00133.html#aaed982d8c3f1e84298f9842063694f3c">tbb::interface5::reader_writer_lock::scoped_lock</a>
+, <a class="el" href="a00134.html#a285b355121772c874a7ecaaf4d347224">tbb::spin_rw_mutex_v3::scoped_lock</a>
+, <a class="el" href="a00132.html#aaed982d8c3f1e84298f9842063694f3c">tbb::interface5::reader_writer_lock::scoped_lock</a>
 </li>
 <li>scoped_lock_read()
-: <a class="el" href="a00141.html#a9d3120a23016dabd4cc2683fa561ee5a">tbb::interface5::reader_writer_lock::scoped_lock_read</a>
+: <a class="el" href="a00138.html#a9d3120a23016dabd4cc2683fa561ee5a">tbb::interface5::reader_writer_lock::scoped_lock_read</a>
 </li>
 <li>seconds()
-: <a class="el" href="a00085.html#abe81446bbbb6b6e98d854b91acf47809">tbb::tick_count::interval_t</a>
-</li>
-<li>sequencer_node()
-: <a class="el" href="a00143.html#a0e8d3d486edc7f70c81b36ce9421c11a">tbb::flow::interface7::sequencer_node< T, A ></a>
+: <a class="el" href="a00072.html#abe81446bbbb6b6e98d854b91acf47809">tbb::tick_count::interval_t</a>
 </li>
 <li>set_capacity()
-: <a class="el" href="a00042.html#a768699675813575eec08c1f43afda395">tbb::concurrent_bounded_queue< T, A ></a>
+: <a class="el" href="a00035.html#a768699675813575eec08c1f43afda395">tbb::concurrent_bounded_queue< T, A ></a>
 </li>
 <li>set_state()
-: <a class="el" href="a00099.html#a0857c4596d7d5de09fe402ccd41d3e42">tbb::mutex</a>
+: <a class="el" href="a00082.html#a0857c4596d7d5de09fe402ccd41d3e42">tbb::mutex</a>
 </li>
 <li>shrink_to_fit()
-: <a class="el" href="a00053.html#aba805b5225ad3399550f78ea15e51e93">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#aba805b5225ad3399550f78ea15e51e93">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>size()
-: <a class="el" href="a00045.html#a7d86ba200474b51ec99a6b917429c6bb">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00024.html#a347ef8caa40edca3b7f475f182281140">tbb::blocked_range< Value ></a>
-, <a class="el" href="a00043.html#ad2ce6da7cd62bc7425f0a29498332ab4">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
-, <a class="el" href="a00042.html#a9d6c20fd8c193c12b6a7b0c3101fd966">tbb::concurrent_bounded_queue< T, A ></a>
-, <a class="el" href="a00053.html#a803268c16e3688ff4681251947d257c7">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00061.html#a4c33c5390783e17daf2b25d53ae919fb">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
-</li>
-<li>source_node()
-: <a class="el" href="a00144.html#a5730a4677f5bfdf6ff6e45e31a249d37">tbb::flow::interface7::source_node< Output ></a>
+: <a class="el" href="a00022.html#a347ef8caa40edca3b7f475f182281140">tbb::blocked_range< Value ></a>
+, <a class="el" href="a00036.html#ad2ce6da7cd62bc7425f0a29498332ab4">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+, <a class="el" href="a00038.html#a7d86ba200474b51ec99a6b917429c6bb">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00035.html#a9d6c20fd8c193c12b6a7b0c3101fd966">tbb::concurrent_bounded_queue< T, A ></a>
+, <a class="el" href="a00058.html#a4c33c5390783e17daf2b25d53ae919fb">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
+, <a class="el" href="a00046.html#a803268c16e3688ff4681251947d257c7">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>spin_mutex()
-: <a class="el" href="a00145.html#a6c96196965bf7df426311d282ad3c378">tbb::spin_mutex</a>
+: <a class="el" href="a00140.html#a6c96196965bf7df426311d282ad3c378">tbb::spin_mutex</a>
 </li>
 <li>spin_rw_mutex_v3()
-: <a class="el" href="a00146.html#ad30fc1ffa0a2b8134e177e02c5821d7f">tbb::spin_rw_mutex_v3</a>
+: <a class="el" href="a00141.html#ad30fc1ffa0a2b8134e177e02c5821d7f">tbb::spin_rw_mutex_v3</a>
 </li>
 <li>start()
-: <a class="el" href="a00014.html#adc0e032aa604f1da85ffc7ec269b157f">tbb::interface6::aggregator_operation</a>
+: <a class="el" href="a00013.html#adc0e032aa604f1da85ffc7ec269b157f">tbb::interface6::aggregator_operation</a>
 </li>
 <li>start_routine()
-: <a class="el" href="a00167.html#a33d533b3301c45708c6252d040f855a6">tbb::internal::thread_closure_1< F, X ></a>
-, <a class="el" href="a00168.html#a29003179f98d768622c72b9ab5cfe8f6">tbb::internal::thread_closure_2< F, X, Y ></a>
+: <a class="el" href="a00160.html#a33d533b3301c45708c6252d040f855a6">tbb::internal::thread_closure_1< F, X ></a>
+, <a class="el" href="a00161.html#a29003179f98d768622c72b9ab5cfe8f6">tbb::internal::thread_closure_2< F, X, Y ></a>
 </li>
 <li>status()
-: <a class="el" href="a00128.html#a85bf9ee021a2076a3ac7cfd70aae7345">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#a85bf9ee021a2076a3ac7cfd70aae7345">tbb::interface6::runtime_loader</a>
 </li>
 <li>swap()
-: <a class="el" href="a00053.html#a8603bd57324fb6b60ba006884c95279d">tbb::concurrent_vector< T, A ></a>
-, <a class="el" href="a00045.html#aa6ee6d356e538b67a7cb4e242e6e36c9">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00043.html#a4c8edf603bc776a6c84c007702c1808e">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00046.html#a8603bd57324fb6b60ba006884c95279d">tbb::concurrent_vector< T, A ></a>
+, <a class="el" href="a00038.html#aa6ee6d356e538b67a7cb4e242e6e36c9">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00036.html#a4c8edf603bc776a6c84c007702c1808e">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x74.html b/doc/html/functions_func_0x74.html
index c6a82df..f065e95 100644
--- a/doc/html/functions_func_0x74.html
+++ b/doc/html/functions_func_0x74.html
@@ -74,94 +74,94 @@
 
 <h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
 <li>task_arena()
-: <a class="el" href="a00150.html#a6035737ce1a8db376d06880dae9d0c40">tbb::interface7::task_arena</a>
+: <a class="el" href="a00144.html#abe92eac81ca849b110de69e6efd0e5aa">tbb::interface7::task_arena</a>
+</li>
+<li>task_scheduler_init()
+: <a class="el" href="a00150.html#a8b2657d9b7c39fede2d19507d0e94688">tbb::task_scheduler_init</a>
 </li>
 <li>task_scheduler_observer()
-: <a class="el" href="a00157.html#a36e7e0c466320029d5a3e50a573e04c1">tbb::interface6::task_scheduler_observer</a>
+: <a class="el" href="a00151.html#a89025b1e1d42e97d6fe114c0c331f730">tbb::interface6::task_scheduler_observer</a>
 </li>
 <li>task_scheduler_observer_v3()
-: <a class="el" href="a00158.html#a25bffb05efaaab36bc58590969e29745">tbb::internal::task_scheduler_observer_v3</a>
+: <a class="el" href="a00152.html#a25bffb05efaaab36bc58590969e29745">tbb::internal::task_scheduler_observer_v3</a>
 </li>
 <li>tbb_thread_v3()
-: <a class="el" href="a00164.html#a672a5367e687635c869926bf8a986296">tbb::internal::tbb_thread_v3</a>
+: <a class="el" href="a00157.html#a15b84e454eb0179e010b90a88baa0933">tbb::internal::tbb_thread_v3</a>
 </li>
 <li>terminate()
-: <a class="el" href="a00150.html#aecb3eedeacfe8469a91c17525dae7fc9">tbb::interface7::task_arena</a>
-, <a class="el" href="a00156.html#a15d5dca7f79c5769bb96f674e4da0c04">tbb::task_scheduler_init</a>
+: <a class="el" href="a00144.html#aecb3eedeacfe8469a91c17525dae7fc9">tbb::interface7::task_arena</a>
+, <a class="el" href="a00150.html#a15d5dca7f79c5769bb96f674e4da0c04">tbb::task_scheduler_init</a>
 </li>
 <li>throw_self()
-: <a class="el" href="a00161.html#ae45c08d36c7ec7ae91785da3515a8828">tbb::tbb_exception</a>
-, <a class="el" href="a00035.html#ac9ae925678fcc0cc02a74df7d06b8d63">tbb::captured_exception</a>
-, <a class="el" href="a00097.html#a3d1570b53220fbcb45eb81552b57827a">tbb::movable_exception< ExceptionData ></a>
-, <a class="el" href="a00162.html#a1713aa9a6a3850049d34358397a8ed81">tbb::internal::tbb_exception_ptr</a>
+: <a class="el" href="a00081.html#a0e9ac8a4468eb0ff3b2bb246b806a10e">tbb::movable_exception< ExceptionData ></a>
+, <a class="el" href="a00156.html#a1713aa9a6a3850049d34358397a8ed81">tbb::internal::tbb_exception_ptr</a>
+, <a class="el" href="a00155.html#ae45c08d36c7ec7ae91785da3515a8828">tbb::tbb_exception</a>
+, <a class="el" href="a00032.html#a6df0d3a1943ca6f84a9a9aca25e9633d">tbb::captured_exception</a>
 </li>
 <li>tick_count()
-: <a class="el" href="a00170.html#a9f1daa0b7a4feb800f802b4be1f1e497">tbb::tick_count</a>
+: <a class="el" href="a00163.html#a9f1daa0b7a4feb800f802b4be1f1e497">tbb::tick_count</a>
 </li>
 <li>try_acquire()
-: <a class="el" href="a00140.html#a46f983371aa852d2427ce69f9a571f78">tbb::mutex::scoped_lock</a>
-, <a class="el" href="a00132.html#ab4800ba9e743cd91f152036a6689b0e9">tbb::queuing_mutex::scoped_lock</a>
+: <a class="el" href="a00135.html#a46f983371aa852d2427ce69f9a571f78">tbb::mutex::scoped_lock</a>
+, <a class="el" href="a00128.html#ab4800ba9e743cd91f152036a6689b0e9">tbb::queuing_mutex::scoped_lock</a>
 , <a class="el" href="a00131.html#a4843d40dddc37c1aa3444e27d35d2433">tbb::queuing_rw_mutex::scoped_lock</a>
-, <a class="el" href="a00139.html#a160bba506f4033980ddb69ab7a02c4fb">tbb::recursive_mutex::scoped_lock</a>
-, <a class="el" href="a00134.html#a76acbd67c74906f6ea33a1de6fd443ce">tbb::spin_mutex::scoped_lock</a>
-, <a class="el" href="a00135.html#abf17ada91882fd70f139c503c0220f16">tbb::spin_rw_mutex_v3::scoped_lock</a>
+, <a class="el" href="a00133.html#a160bba506f4033980ddb69ab7a02c4fb">tbb::recursive_mutex::scoped_lock</a>
+, <a class="el" href="a00130.html#a76acbd67c74906f6ea33a1de6fd443ce">tbb::spin_mutex::scoped_lock</a>
+, <a class="el" href="a00134.html#abf17ada91882fd70f139c503c0220f16">tbb::spin_rw_mutex_v3::scoped_lock</a>
 </li>
 <li>try_consume()
-: <a class="el" href="a00142.html#ad404d5218c7ae2556261ffa880cdf804">tbb::flow::interface7::sender< T ></a>
-, <a class="el" href="a00144.html#ad38a58c2f8f74f4c5cf72a2625ac26bf">tbb::flow::interface7::source_node< Output ></a>
-, <a class="el" href="a00030.html#a335072bc547c5e9b40f58dfeab525953">tbb::flow::interface7::buffer_node< T, A ></a>
+: <a class="el" href="a00165.html#acfb8e3669932e5866fb6afa603ff8250">tbb::flow::interface9::internal::untyped_sender</a>
+, <a class="el" href="a00139.html#a0d0fa0cabcbbc4b1ba219ab806b85aa1">tbb::flow::interface9::sender< T ></a>
 </li>
 <li>try_get()
-: <a class="el" href="a00142.html#ad50b8ac93e79cbdcd2bba11d35432f2c">tbb::flow::interface7::sender< T ></a>
-, <a class="el" href="a00144.html#a038c6b2b406d496244617a2d6dc01581">tbb::flow::interface7::source_node< Output ></a>
-, <a class="el" href="a00104.html#aa655eef6671b35f99dfbddd0f3cf2309">tbb::flow::interface7::overwrite_node< T ></a>
-, <a class="el" href="a00030.html#a175cb77dfbdd0e322097a833a2271c1e">tbb::flow::interface7::buffer_node< T, A ></a>
+: <a class="el" href="a00165.html#a3c422ea58b7f11b6cc536539000a556e">tbb::flow::interface9::internal::untyped_sender</a>
+, <a class="el" href="a00139.html#a1cd7d47cd6ac5db05c0868ca43231633">tbb::flow::interface9::sender< T ></a>
 </li>
 <li>try_lock()
-: <a class="el" href="a00113.html#a1739e842af52925a2d4a7e821b9b3b8d">tbb::interface5::reader_writer_lock</a>
-, <a class="el" href="a00125.html#a8b181d9aaa95444145222cfe206e8094">tbb::recursive_mutex</a>
-, <a class="el" href="a00145.html#a003ffb196d22bf22ca22142338b7eeab">tbb::spin_mutex</a>
-, <a class="el" href="a00146.html#ab6ec20b1ec43a49c8c2908984e35b5e8">tbb::spin_rw_mutex_v3</a>
-, <a class="el" href="a00099.html#a480283933106941125717499f9c5ad42">tbb::mutex</a>
+: <a class="el" href="a00121.html#a8b181d9aaa95444145222cfe206e8094">tbb::recursive_mutex</a>
+, <a class="el" href="a00140.html#a003ffb196d22bf22ca22142338b7eeab">tbb::spin_mutex</a>
+, <a class="el" href="a00141.html#ab6ec20b1ec43a49c8c2908984e35b5e8">tbb::spin_rw_mutex_v3</a>
+, <a class="el" href="a00108.html#a1739e842af52925a2d4a7e821b9b3b8d">tbb::interface5::reader_writer_lock</a>
+, <a class="el" href="a00082.html#a480283933106941125717499f9c5ad42">tbb::mutex</a>
 </li>
 <li>try_lock_read()
-: <a class="el" href="a00146.html#ac932f65b0b66320688e7957ce9c3e2c1">tbb::spin_rw_mutex_v3</a>
-, <a class="el" href="a00113.html#a9c7aa04e00202c9a1197cb6d870cabb4">tbb::interface5::reader_writer_lock</a>
+: <a class="el" href="a00141.html#ac932f65b0b66320688e7957ce9c3e2c1">tbb::spin_rw_mutex_v3</a>
+, <a class="el" href="a00108.html#a9c7aa04e00202c9a1197cb6d870cabb4">tbb::interface5::reader_writer_lock</a>
 </li>
 <li>try_pop()
-: <a class="el" href="a00045.html#a954177b09e184cf3db47f1b180a7ef5e">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00046.html#aabb1acef18196fa11ed7db8e046c3943">tbb::strict_ppl::concurrent_queue< T, A ></a>
-, <a class="el" href="a00042.html#a3086cb4dcdeee245ef5cf34f72fb3e10">tbb::concurrent_bounded_queue< T, A ></a>
+: <a class="el" href="a00038.html#a954177b09e184cf3db47f1b180a7ef5e">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00039.html#aabb1acef18196fa11ed7db8e046c3943">tbb::strict_ppl::concurrent_queue< T, A ></a>
+, <a class="el" href="a00035.html#a3086cb4dcdeee245ef5cf34f72fb3e10">tbb::concurrent_bounded_queue< T, A ></a>
 </li>
 <li>try_process_item()
-: <a class="el" href="a00165.html#a12cfa43c620066a8783529cc8519c6f9">tbb::thread_bound_filter</a>
+: <a class="el" href="a00158.html#a12cfa43c620066a8783529cc8519c6f9">tbb::thread_bound_filter</a>
 </li>
 <li>try_push()
-: <a class="el" href="a00042.html#a93f35e9d9381629e0a2993f9fdd96d92">tbb::concurrent_bounded_queue< T, A ></a>
+: <a class="el" href="a00035.html#a93f35e9d9381629e0a2993f9fdd96d92">tbb::concurrent_bounded_queue< T, A ></a>
 </li>
 <li>try_put()
-: <a class="el" href="a00124.html#aee5067bb4f4b71ffa786c1b33cb9aa6a">tbb::flow::interface7::receiver< T ></a>
+: <a class="el" href="a00164.html#a84f8406cd5e3252965d9e238575eaede">tbb::flow::interface9::internal::untyped_receiver</a>
+, <a class="el" href="a00119.html#a6ac09b1571cea3efd1fdbdaf4e6ce71a">tbb::flow::interface9::receiver< T ></a>
+, <a class="el" href="a00120.html#a382797f42de522b37205415703cb32bd">tbb::flow::interface9::receiver_gateway< Input ></a>
+, <a class="el" href="a00119.html#a7f58c8ec0f790193be2e477b2546ead2">tbb::flow::interface9::receiver< T ></a>
 </li>
 <li>try_put_task()
-: <a class="el" href="a00028.html#a07d030b43c6e2d9169a7e58db30a547b">tbb::flow::interface7::broadcast_node< T ></a>
-, <a class="el" href="a00091.html#a0551cf104b35669b5f5153c1d03d5d2d">tbb::flow::interface7::limiter_node< T ></a>
-, <a class="el" href="a00030.html#aa4517c0a58649ea5eb140ab4b786e1ec">tbb::flow::interface7::buffer_node< T, A ></a>
+: <a class="el" href="a00119.html#aaff8d049a1209b14e6e871768c82a629">tbb::flow::interface9::receiver< T ></a>
+, <a class="el" href="a00049.html#a83b0bfae936dac53172d62a6dab4062e">tbb::flow::interface9::continue_receiver</a>
 </li>
 <li>try_release()
-: <a class="el" href="a00144.html#a309c65a2d0208a1072f7e852198d461d">tbb::flow::interface7::source_node< Output ></a>
-, <a class="el" href="a00030.html#aaa3745fd4705345df16fb33954d93e30">tbb::flow::interface7::buffer_node< T, A ></a>
-, <a class="el" href="a00142.html#a97ac316ddfb6bd7c7f2f56e3e819a30a">tbb::flow::interface7::sender< T ></a>
+: <a class="el" href="a00165.html#ac81ea252a8397324c865b035f67903ee">tbb::flow::interface9::internal::untyped_sender</a>
+, <a class="el" href="a00139.html#a554f795789a3902760847a1e83a2f0ad">tbb::flow::interface9::sender< T ></a>
 </li>
 <li>try_reserve()
-: <a class="el" href="a00142.html#aa1b9dcf77ab558530ff93a706b4c4b5d">tbb::flow::interface7::sender< T ></a>
-, <a class="el" href="a00144.html#aabb0d505d684d173b1a2c976bf0781a6">tbb::flow::interface7::source_node< Output ></a>
-, <a class="el" href="a00030.html#a3b12cdebf8cef15b90e3c9cd9e51019f">tbb::flow::interface7::buffer_node< T, A ></a>
+: <a class="el" href="a00165.html#ad48b26c7dec4845e1cb374e9f1c59fea">tbb::flow::interface9::internal::untyped_sender</a>
+, <a class="el" href="a00139.html#a82caccf2fcbbad3f255380260c39d02c">tbb::flow::interface9::sender< T ></a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x75.html b/doc/html/functions_func_0x75.html
index 3130ed8..0d6766b 100644
--- a/doc/html/functions_func_0x75.html
+++ b/doc/html/functions_func_0x75.html
@@ -74,24 +74,24 @@
 
 <h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
 <li>unlock()
-: <a class="el" href="a00099.html#a721eeae7ba16f8b92535f4534b583874">tbb::mutex</a>
-, <a class="el" href="a00113.html#a4c55c4dbde63e950fdc843c9b01a174f">tbb::interface5::reader_writer_lock</a>
-, <a class="el" href="a00145.html#adfcf8fe840aa73c08c2cadd570fd48fd">tbb::spin_mutex</a>
-, <a class="el" href="a00146.html#ab04321ed2cdf12ac5825c54591028fc0">tbb::spin_rw_mutex_v3</a>
-, <a class="el" href="a00125.html#af57e8d25e0e7614e98bcfa50bc9416c8">tbb::recursive_mutex</a>
+: <a class="el" href="a00082.html#a721eeae7ba16f8b92535f4534b583874">tbb::mutex</a>
+, <a class="el" href="a00108.html#a4c55c4dbde63e950fdc843c9b01a174f">tbb::interface5::reader_writer_lock</a>
+, <a class="el" href="a00140.html#adfcf8fe840aa73c08c2cadd570fd48fd">tbb::spin_mutex</a>
+, <a class="el" href="a00141.html#ab04321ed2cdf12ac5825c54591028fc0">tbb::spin_rw_mutex_v3</a>
+, <a class="el" href="a00121.html#af57e8d25e0e7614e98bcfa50bc9416c8">tbb::recursive_mutex</a>
 </li>
 <li>unsafe_size()
-: <a class="el" href="a00046.html#aad4b253ba595637b0b146eb6565556f2">tbb::strict_ppl::concurrent_queue< T, A ></a>
+: <a class="el" href="a00039.html#aad4b253ba595637b0b146eb6565556f2">tbb::strict_ppl::concurrent_queue< T, A ></a>
 </li>
 <li>upgrade_to_writer()
 : <a class="el" href="a00131.html#ae0f28ecfbbc5f8b3024cd47048b72b5b">tbb::queuing_rw_mutex::scoped_lock</a>
-, <a class="el" href="a00135.html#afbe5de57eadc457518df7a1bb0d30c00">tbb::spin_rw_mutex_v3::scoped_lock</a>
+, <a class="el" href="a00134.html#afbe5de57eadc457518df7a1bb0d30c00">tbb::spin_rw_mutex_v3::scoped_lock</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x77.html b/doc/html/functions_func_0x77.html
index df834bd..a39157a 100644
--- a/doc/html/functions_func_0x77.html
+++ b/doc/html/functions_func_0x77.html
@@ -73,22 +73,16 @@
  
 
 <h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
-<li>wait_for_all()
-: <a class="el" href="a00070.html#a397208ce3b432c83cd24f416b082e8db">tbb::flow::interface7::graph</a>
-</li>
 <li>what()
-: <a class="el" href="a00161.html#ae0ad81121d4b722ecc466b5d3cc4e919">tbb::tbb_exception</a>
-, <a class="el" href="a00097.html#a41a2a7b61537ecd684bae760366f611c">tbb::movable_exception< ExceptionData ></a>
-, <a class="el" href="a00035.html#ac97ee315d8613c803dae2f6d3e0b91a7">tbb::captured_exception</a>
-</li>
-<li>write_once_node()
-: <a class="el" href="a00176.html#a68b94bb09b608522462080fe99125e07">tbb::flow::interface7::write_once_node< T ></a>
+: <a class="el" href="a00155.html#aa6739787c42d80943e18913cce47f42f">tbb::tbb_exception</a>
+, <a class="el" href="a00081.html#a59040b31c3147f7c77232a6cbc76ba05">tbb::movable_exception< ExceptionData ></a>
+, <a class="el" href="a00032.html#a1e9d36a304dd7e49906754a0cb72da2e">tbb::captured_exception</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x7e.html b/doc/html/functions_func_0x7e.html
index b7f9d02..d270129 100644
--- a/doc/html/functions_func_0x7e.html
+++ b/doc/html/functions_func_0x7e.html
@@ -74,94 +74,88 @@
 
 <h3><a class="anchor" id="index_0x7e"></a>- ~ -</h3><ul>
 <li>~combinable()
-: <a class="el" href="a00036.html#a52f00cf262d768048db72ab73c8f3ca4">tbb::combinable< T ></a>
+: <a class="el" href="a00033.html#a52f00cf262d768048db72ab73c8f3ca4">tbb::combinable< T ></a>
 </li>
 <li>~concurrent_bounded_queue()
-: <a class="el" href="a00042.html#ab1291bf6837ecfb8836c24dde5dd80b5">tbb::concurrent_bounded_queue< T, A ></a>
+: <a class="el" href="a00035.html#ab1291bf6837ecfb8836c24dde5dd80b5">tbb::concurrent_bounded_queue< T, A ></a>
 </li>
 <li>~concurrent_hash_map()
-: <a class="el" href="a00043.html#a9ce9ab8c954bf6979c2c57d10fd8a8ed">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
+: <a class="el" href="a00036.html#a9ce9ab8c954bf6979c2c57d10fd8a8ed">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a>
 </li>
 <li>~concurrent_queue()
-: <a class="el" href="a00046.html#aa0056b242f280f5e25332ce998f9f670">tbb::strict_ppl::concurrent_queue< T, A ></a>
+: <a class="el" href="a00039.html#aa0056b242f280f5e25332ce998f9f670">tbb::strict_ppl::concurrent_queue< T, A ></a>
 </li>
 <li>~concurrent_vector()
-: <a class="el" href="a00053.html#ab5bcaededc9a00e7aaecd6c262fd0b38">tbb::concurrent_vector< T, A ></a>
+: <a class="el" href="a00046.html#ab5bcaededc9a00e7aaecd6c262fd0b38">tbb::concurrent_vector< T, A ></a>
 </li>
 <li>~const_accessor()
-: <a class="el" href="a00054.html#afbc0c85a146c912b9a0f94a7695957c7">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
-</li>
-<li>~continue_receiver()
-: <a class="el" href="a00057.html#a2ca2de23e1e1eeb7071a838a457a50b2">tbb::flow::interface7::continue_receiver</a>
+: <a class="el" href="a00047.html#afbc0c85a146c912b9a0f94a7695957c7">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
 </li>
 <li>~enumerable_thread_specific()
-: <a class="el" href="a00061.html#a6ea8d717f770acb63efc406df52d4585">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
+: <a class="el" href="a00058.html#a6ea8d717f770acb63efc406df52d4585">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
 </li>
 <li>~fixed_pool()
-: <a class="el" href="a00065.html#ab854a85575e5c1e9c9f4d3eafcc28044">tbb::interface6::fixed_pool</a>
-</li>
-<li>~graph()
-: <a class="el" href="a00070.html#a3412df4d4bf0113aed93c958bbb49ec4">tbb::flow::interface7::graph</a>
+: <a class="el" href="a00062.html#ab854a85575e5c1e9c9f4d3eafcc28044">tbb::interface6::fixed_pool</a>
 </li>
 <li>~memory_pool()
-: <a class="el" href="a00092.html#ad2c7645b39b7280b1b3cf393d05fbaf7">tbb::interface6::memory_pool< Alloc ></a>
+: <a class="el" href="a00076.html#ad2c7645b39b7280b1b3cf393d05fbaf7">tbb::interface6::memory_pool< Alloc ></a>
+</li>
+<li>~opencl_graph()
+: <a class="el" href="a00093.html#aa2887522d89a7d1deff76002f398d905">tbb::flow::interface9::opencl_graph</a>
 </li>
 <li>~parallel_while()
-: <a class="el" href="a00106.html#ac2fd559c8a38639fa1ba97a0d5639ca8">tbb::parallel_while< Body ></a>
+: <a class="el" href="a00102.html#ac2fd559c8a38639fa1ba97a0d5639ca8">tbb::parallel_while< Body ></a>
 </li>
 <li>~pipeline()
-: <a class="el" href="a00107.html#ac3a7b33217b3f3bb0682ec3a40fd2c39">tbb::pipeline</a>
+: <a class="el" href="a00103.html#ac3a7b33217b3f3bb0682ec3a40fd2c39">tbb::pipeline</a>
 </li>
 <li>~queuing_rw_mutex()
-: <a class="el" href="a00112.html#ae67fe828d7e07222e7876ef9fd780fcc">tbb::queuing_rw_mutex</a>
+: <a class="el" href="a00107.html#ae67fe828d7e07222e7876ef9fd780fcc">tbb::queuing_rw_mutex</a>
 </li>
 <li>~reader_writer_lock()
-: <a class="el" href="a00113.html#aeee96b648c7b5ff6126c8a2e13ec7241">tbb::interface5::reader_writer_lock</a>
+: <a class="el" href="a00108.html#aeee96b648c7b5ff6126c8a2e13ec7241">tbb::interface5::reader_writer_lock</a>
 </li>
 <li>~receiver()
-: <a class="el" href="a00124.html#a733889a9053478ef2fb2528e2205bf07">tbb::flow::interface7::receiver< T ></a>
+: <a class="el" href="a00119.html#a33c66d3eb36a9e95db44fce5efeb65b4">tbb::flow::interface9::receiver< T ></a>
 </li>
 <li>~runtime_loader()
-: <a class="el" href="a00128.html#aa3b96f53e165e3d692c3c36292ba0737">tbb::interface6::runtime_loader</a>
+: <a class="el" href="a00125.html#aa3b96f53e165e3d692c3c36292ba0737">tbb::interface6::runtime_loader</a>
 </li>
 <li>~scoped_lock()
-: <a class="el" href="a00134.html#a9940d6e494466d9c53846ed347d79d83">tbb::spin_mutex::scoped_lock</a>
-, <a class="el" href="a00140.html#a08c399ee0bb9762039b29e570ec46fe9">tbb::mutex::scoped_lock</a>
+: <a class="el" href="a00133.html#a90a966e19120aac99b36a3d6d04af1a2">tbb::recursive_mutex::scoped_lock</a>
+, <a class="el" href="a00135.html#a08c399ee0bb9762039b29e570ec46fe9">tbb::mutex::scoped_lock</a>
+, <a class="el" href="a00128.html#a469ec43836a8dd250ce0a22b02945630">tbb::queuing_mutex::scoped_lock</a>
+, <a class="el" href="a00130.html#a9940d6e494466d9c53846ed347d79d83">tbb::spin_mutex::scoped_lock</a>
+, <a class="el" href="a00132.html#a41e77cf094ed30b0a9a39ee217c3653b">tbb::interface5::reader_writer_lock::scoped_lock</a>
+, <a class="el" href="a00134.html#a5c27ca2e0c9db960a9a7430082ff7edd">tbb::spin_rw_mutex_v3::scoped_lock</a>
 , <a class="el" href="a00131.html#a6cb16cc55f884bbbd5a69430c47b288f">tbb::queuing_rw_mutex::scoped_lock</a>
-, <a class="el" href="a00133.html#a41e77cf094ed30b0a9a39ee217c3653b">tbb::interface5::reader_writer_lock::scoped_lock</a>
-, <a class="el" href="a00139.html#a90a966e19120aac99b36a3d6d04af1a2">tbb::recursive_mutex::scoped_lock</a>
-, <a class="el" href="a00132.html#a469ec43836a8dd250ce0a22b02945630">tbb::queuing_mutex::scoped_lock</a>
-, <a class="el" href="a00135.html#a5c27ca2e0c9db960a9a7430082ff7edd">tbb::spin_rw_mutex_v3::scoped_lock</a>
 </li>
 <li>~scoped_lock_read()
-: <a class="el" href="a00141.html#acf0e23fb4d3aeb6bde18d5d1236bd9d5">tbb::interface5::reader_writer_lock::scoped_lock_read</a>
-</li>
-<li>~sequencer_node()
-: <a class="el" href="a00143.html#a01fd0321c7bd0f2112458cec2a636d7d">tbb::flow::interface7::sequencer_node< T, A ></a>
-</li>
-<li>~source_node()
-: <a class="el" href="a00144.html#a5ce12e348e121b9f4dffda9d1035c490">tbb::flow::interface7::source_node< Output ></a>
+: <a class="el" href="a00138.html#acf0e23fb4d3aeb6bde18d5d1236bd9d5">tbb::interface5::reader_writer_lock::scoped_lock_read</a>
 </li>
 <li>~spin_rw_mutex_v3()
-: <a class="el" href="a00146.html#acc7cf2e4b14d3a2a591a3552d74ba99d">tbb::spin_rw_mutex_v3</a>
+: <a class="el" href="a00141.html#acc7cf2e4b14d3a2a591a3552d74ba99d">tbb::spin_rw_mutex_v3</a>
 </li>
 <li>~task_arena()
-: <a class="el" href="a00150.html#a9ff5a35a219953a4f3d99b833fa5f683">tbb::interface7::task_arena</a>
+: <a class="el" href="a00144.html#a9ff5a35a219953a4f3d99b833fa5f683">tbb::interface7::task_arena</a>
 </li>
 <li>~task_scheduler_init()
-: <a class="el" href="a00156.html#a20b121334ec39c1d91bd4fe9a51892b0">tbb::task_scheduler_init</a>
+: <a class="el" href="a00150.html#a20b121334ec39c1d91bd4fe9a51892b0">tbb::task_scheduler_init</a>
 </li>
 <li>~task_scheduler_observer()
-: <a class="el" href="a00157.html#a9ef3f1853439b46e5a9db7fd1c0f9116">tbb::interface6::task_scheduler_observer</a>
+: <a class="el" href="a00151.html#a9ef3f1853439b46e5a9db7fd1c0f9116">tbb::interface6::task_scheduler_observer</a>
 </li>
 <li>~task_scheduler_observer_v3()
-: <a class="el" href="a00158.html#a151e475ebba39172fcc13f43bed426cc">tbb::internal::task_scheduler_observer_v3</a>
+: <a class="el" href="a00152.html#a151e475ebba39172fcc13f43bed426cc">tbb::internal::task_scheduler_observer_v3</a>
+</li>
+<li>~untyped_receiver()
+: <a class="el" href="a00164.html#a632631c8a370c1dd1fa8815cbc5e18ec">tbb::flow::interface9::internal::untyped_receiver</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_rela.html b/doc/html/functions_rela.html
index b06e5f5..1fd228e 100644
--- a/doc/html/functions_rela.html
+++ b/doc/html/functions_rela.html
@@ -46,26 +46,26 @@
 <div class="contents">
  <ul>
 <li>limiter_node
-: <a class="el" href="a00124.html#a05ec930a348f7eed564236d00edbda24">tbb::flow::interface7::receiver< T ></a>
+: <a class="el" href="a00119.html#a05ec930a348f7eed564236d00edbda24">tbb::flow::interface9::receiver< T ></a>
 </li>
 <li>make_filter
-: <a class="el" href="a00063.html#a21460fde704da22caa222778f5abb140">tbb::interface6::filter_t< T, U ></a>
+: <a class="el" href="a00060.html#a21460fde704da22caa222778f5abb140">tbb::interface6::filter_t< T, U ></a>
 </li>
 <li>operator+
-: <a class="el" href="a00085.html#ac8910ee3b69f68eb905af787c273e9a8">tbb::tick_count::interval_t</a>
+: <a class="el" href="a00072.html#ac8910ee3b69f68eb905af787c273e9a8">tbb::tick_count::interval_t</a>
 </li>
 <li>operator-
-: <a class="el" href="a00170.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653">tbb::tick_count</a>
-, <a class="el" href="a00085.html#a3d11133daa9a7d3c903d070293278f8f">tbb::tick_count::interval_t</a>
+: <a class="el" href="a00163.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653">tbb::tick_count</a>
+, <a class="el" href="a00072.html#a3d11133daa9a7d3c903d070293278f8f">tbb::tick_count::interval_t</a>
 </li>
 <li>run_and_put_task
-: <a class="el" href="a00124.html#abaf9bf74ca5f2854d09f5f07337280eb">tbb::flow::interface7::receiver< T ></a>
+: <a class="el" href="a00119.html#abaf9bf74ca5f2854d09f5f07337280eb">tbb::flow::interface9::receiver< T ></a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_type.html b/doc/html/functions_type.html
index cbe0ebd..2610645 100644
--- a/doc/html/functions_type.html
+++ b/doc/html/functions_type.html
@@ -63,118 +63,121 @@
 
 <h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
 <li>allocator_type
-: <a class="el" href="a00045.html#a1d2cebf242fa83d88eebdc3ad6891fb1">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00061.html#ad50ceae1b0e91d0fd31fe506e690692b">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
-, <a class="el" href="a00042.html#acbfceb845de1c770e2b56409f09b0364">tbb::concurrent_bounded_queue< T, A ></a>
-, <a class="el" href="a00046.html#acbdd1a5bd034358fb0774b322a66b1ed">tbb::strict_ppl::concurrent_queue< T, A ></a>
+: <a class="el" href="a00038.html#a1d2cebf242fa83d88eebdc3ad6891fb1">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00058.html#ad50ceae1b0e91d0fd31fe506e690692b">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
+, <a class="el" href="a00035.html#acbfceb845de1c770e2b56409f09b0364">tbb::concurrent_bounded_queue< T, A ></a>
+, <a class="el" href="a00039.html#acbdd1a5bd034358fb0774b322a66b1ed">tbb::strict_ppl::concurrent_queue< T, A ></a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
 <li>built_successors_type
-: <a class="el" href="a00142.html#a8aba8b2c5950f113a88f43a97c2207f5">tbb::flow::interface7::sender< T ></a>
+: <a class="el" href="a00165.html#a0d674709d3783ec5b42eb243069fed73">tbb::flow::interface9::internal::untyped_sender</a>
+, <a class="el" href="a00139.html#a437ea39be02895899af68a1a91f6c1e5">tbb::flow::interface9::sender< T ></a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
 <li>const_iterator
-: <a class="el" href="a00024.html#ad56ca70af46acf8870b4970d8a809791">tbb::blocked_range< Value ></a>
+: <a class="el" href="a00022.html#ad56ca70af46acf8870b4970d8a809791">tbb::blocked_range< Value ></a>
 </li>
 <li>const_reference
-: <a class="el" href="a00042.html#af838e520ce0db2c22369748c019b11cb">tbb::concurrent_bounded_queue< T, A ></a>
-, <a class="el" href="a00046.html#a478c2b7f763b2e821e01cc14e13baf4c">tbb::strict_ppl::concurrent_queue< T, A ></a>
-, <a class="el" href="a00045.html#a0bd617fe8e4657777e86f0ae15d8094f">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+: <a class="el" href="a00035.html#af838e520ce0db2c22369748c019b11cb">tbb::concurrent_bounded_queue< T, A ></a>
+, <a class="el" href="a00039.html#a478c2b7f763b2e821e01cc14e13baf4c">tbb::strict_ppl::concurrent_queue< T, A ></a>
+, <a class="el" href="a00038.html#a0bd617fe8e4657777e86f0ae15d8094f">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
 <li>difference_type
-: <a class="el" href="a00045.html#ae010b1fa9c0942504737228474b51a0b">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00042.html#a72725361e050c5a981035a20ef1b773e">tbb::concurrent_bounded_queue< T, A ></a>
-, <a class="el" href="a00046.html#a63b42d83a9ed13fc6741e0b4388b0e96">tbb::strict_ppl::concurrent_queue< T, A ></a>
+: <a class="el" href="a00038.html#ae010b1fa9c0942504737228474b51a0b">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00035.html#a72725361e050c5a981035a20ef1b773e">tbb::concurrent_bounded_queue< T, A ></a>
+, <a class="el" href="a00039.html#a63b42d83a9ed13fc6741e0b4388b0e96">tbb::strict_ppl::concurrent_queue< T, A ></a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
 <li>input_type
-: <a class="el" href="a00124.html#a16eccc851b858604344bb8f1bb9eedc8">tbb::flow::interface7::receiver< T ></a>
-, <a class="el" href="a00057.html#a7474ed0edad2bb26d9f86065ecf2c93d">tbb::flow::interface7::continue_receiver</a>
+: <a class="el" href="a00119.html#ac7e1e823c3a7d6e491e336ff832a2495">tbb::flow::interface9::receiver< T ></a>
+, <a class="el" href="a00120.html#a67a0833e5e6520286423a5f04969dcd4">tbb::flow::interface9::receiver_gateway< Input ></a>
+, <a class="el" href="a00049.html#a9b5c2950832344121fcc9e83ce569786">tbb::flow::interface9::continue_receiver</a>
+, <a class="el" href="a00119.html#ac7e1e823c3a7d6e491e336ff832a2495">tbb::flow::interface9::receiver< T ></a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
 <li>native_handle_type
-: <a class="el" href="a00099.html#abbe0cd12246121753ace00a5a12a90b0">tbb::mutex</a>
-, <a class="el" href="a00125.html#a3d40334b0e26d5addfde5596e7f9aaec">tbb::recursive_mutex</a>
+: <a class="el" href="a00082.html#abbe0cd12246121753ace00a5a12a90b0">tbb::mutex</a>
+, <a class="el" href="a00121.html#a3d40334b0e26d5addfde5596e7f9aaec">tbb::recursive_mutex</a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
 <li>output_type
-: <a class="el" href="a00142.html#add86fddf72758d8e5b05b07650c6eeed">tbb::flow::interface7::sender< T ></a>
-, <a class="el" href="a00144.html#a0308ffc2e5c24739cd85e769ec8a8f5f">tbb::flow::interface7::source_node< Output ></a>
+: <a class="el" href="a00139.html#a7824890d85a80842e2c9b2258cd7c484">tbb::flow::interface9::sender< T ></a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
 <li>page_range_type
-: <a class="el" href="a00026.html#a8cdc866378a12ce198da870d0439676f">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
+: <a class="el" href="a00024.html#a8cdc866378a12ce198da870d0439676f">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
 </li>
 <li>predecessor_type
-: <a class="el" href="a00057.html#a86d210b5614d47aaa43731b7e303751f">tbb::flow::interface7::continue_receiver</a>
-, <a class="el" href="a00124.html#afbadf5511bd568d283040cd88bd4e81e">tbb::flow::interface7::receiver< T ></a>
+: <a class="el" href="a00049.html#a2c67857ee60501f3a3e0afeeaf06b957">tbb::flow::interface9::continue_receiver</a>
+, <a class="el" href="a00119.html#a97b14fcd2a562cf47a9548764c4e5abc">tbb::flow::interface9::receiver< T ></a>
+, <a class="el" href="a00164.html#a18472c96f8466de089aa2287460b606e">tbb::flow::interface9::internal::untyped_receiver</a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
 <li>reference
-: <a class="el" href="a00045.html#ae4b7ed2ddc8ec6cc910f935c9d299c7a">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00046.html#ab26ddf11b15d61ac87e6c1ae67af92a2">tbb::strict_ppl::concurrent_queue< T, A ></a>
-, <a class="el" href="a00042.html#a5fa4002bcd265d9d3ed305e3b686f1da">tbb::concurrent_bounded_queue< T, A ></a>
+: <a class="el" href="a00038.html#ae4b7ed2ddc8ec6cc910f935c9d299c7a">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00039.html#ab26ddf11b15d61ac87e6c1ae67af92a2">tbb::strict_ppl::concurrent_queue< T, A ></a>
+, <a class="el" href="a00035.html#a5fa4002bcd265d9d3ed305e3b686f1da">tbb::concurrent_bounded_queue< T, A ></a>
 </li>
 <li>row_range_type
-: <a class="el" href="a00025.html#ada609b296a9af0591cc34761b8538100">tbb::blocked_range2d< RowValue, ColValue ></a>
+: <a class="el" href="a00023.html#ada609b296a9af0591cc34761b8538100">tbb::blocked_range2d< RowValue, ColValue ></a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
 <li>size_type
-: <a class="el" href="a00024.html#a89b300cecd9d617e4ee801c786756e55">tbb::blocked_range< Value ></a>
-, <a class="el" href="a00045.html#a7d3da9b47ec58e1c09e3550f702edcfc">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00042.html#ae73fa352d781bdb9d01bfb77f2a8bc28">tbb::concurrent_bounded_queue< T, A ></a>
-, <a class="el" href="a00066.html#a8b84f8f2cc4499f49d17141eaedc99c0">tbb::interface6::flattened2d< Container ></a>
-, <a class="el" href="a00046.html#a9f883e49afea16293ba92da779981bb8">tbb::strict_ppl::concurrent_queue< T, A ></a>
+: <a class="el" href="a00022.html#a89b300cecd9d617e4ee801c786756e55">tbb::blocked_range< Value ></a>
+, <a class="el" href="a00038.html#a7d3da9b47ec58e1c09e3550f702edcfc">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00035.html#ae73fa352d781bdb9d01bfb77f2a8bc28">tbb::concurrent_bounded_queue< T, A ></a>
+, <a class="el" href="a00063.html#a8b84f8f2cc4499f49d17141eaedc99c0">tbb::interface6::flattened2d< Container ></a>
+, <a class="el" href="a00039.html#a9f883e49afea16293ba92da779981bb8">tbb::strict_ppl::concurrent_queue< T, A ></a>
 </li>
 <li>successor_type
-: <a class="el" href="a00144.html#ae354d135ba9aceb6ca41464fff027666">tbb::flow::interface7::source_node< Output ></a>
-, <a class="el" href="a00142.html#a7779627063a29d4d2a1fc905a5cae8db">tbb::flow::interface7::sender< T ></a>
+: <a class="el" href="a00139.html#a2e54e49c21aed85603dd1f0ed5ca8e2e">tbb::flow::interface9::sender< T ></a>
+, <a class="el" href="a00165.html#a7b4e68e6917207283f5c621e7053c7ea">tbb::flow::interface9::internal::untyped_sender</a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
 <li>value_type
-: <a class="el" href="a00054.html#aa8ca5aef4ee14b7eddb64767b8cd5fda">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
-, <a class="el" href="a00106.html#a2442f019427e608d46801376267e44a8">tbb::parallel_while< Body ></a>
-, <a class="el" href="a00042.html#a6eb564625fef03dd9a5881d5d4e52f9f">tbb::concurrent_bounded_queue< T, A ></a>
-, <a class="el" href="a00046.html#aeeee93a7ac2eecc80bbf3e857e900538">tbb::strict_ppl::concurrent_queue< T, A ></a>
-, <a class="el" href="a00045.html#a2c75d97ae429019363ab6fd1a872512e">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-, <a class="el" href="a00010.html#a850178bbdcdbc4cf5955cab37eb8c42c">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>
+: <a class="el" href="a00047.html#aa8ca5aef4ee14b7eddb64767b8cd5fda">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
+, <a class="el" href="a00102.html#a2442f019427e608d46801376267e44a8">tbb::parallel_while< Body ></a>
+, <a class="el" href="a00035.html#a6eb564625fef03dd9a5881d5d4e52f9f">tbb::concurrent_bounded_queue< T, A ></a>
+, <a class="el" href="a00039.html#aeeee93a7ac2eecc80bbf3e857e900538">tbb::strict_ppl::concurrent_queue< T, A ></a>
+, <a class="el" href="a00038.html#a2c75d97ae429019363ab6fd1a872512e">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+, <a class="el" href="a00009.html#a850178bbdcdbc4cf5955cab37eb8c42c">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_vars.html b/doc/html/functions_vars.html
index dd729e3..71f157a 100644
--- a/doc/html/functions_vars.html
+++ b/doc/html/functions_vars.html
@@ -46,54 +46,48 @@
 <div class="contents">
  <ul>
 <li>automatic
-: <a class="el" href="a00156.html#a945886f5ef48300a8ebff2d077c166b1">tbb::task_scheduler_init</a>
-</li>
-<li>decrement
-: <a class="el" href="a00091.html#ac313b6586bf183a33c3196037964547d">tbb::flow::interface7::limiter_node< T ></a>
+: <a class="el" href="a00150.html#a945886f5ef48300a8ebff2d077c166b1">tbb::task_scheduler_init</a>
 </li>
 <li>deferred
-: <a class="el" href="a00156.html#af0e49ff2f59a4e53c9c07897b57f084d">tbb::task_scheduler_init</a>
+: <a class="el" href="a00150.html#af0e49ff2f59a4e53c9c07897b57f084d">tbb::task_scheduler_init</a>
 </li>
 <li>exact_exception_propagation
-: <a class="el" href="a00062.html#aab9689e23a96c6c9bf1c8caae74d92ee">tbb::filter</a>
+: <a class="el" href="a00059.html#aab9689e23a96c6c9bf1c8caae74d92ee">tbb::filter</a>
 </li>
 <li>filter_is_bound
-: <a class="el" href="a00062.html#a1382f216bd094064a18eb48ecc43c86b">tbb::filter</a>
+: <a class="el" href="a00059.html#a1382f216bd094064a18eb48ecc43c86b">tbb::filter</a>
 </li>
 <li>filter_is_out_of_order
-: <a class="el" href="a00062.html#a091fcf6abc79edfa5c8bf01f742e2392">tbb::filter</a>
+: <a class="el" href="a00059.html#a091fcf6abc79edfa5c8bf01f742e2392">tbb::filter</a>
 </li>
 <li>filter_is_serial
-: <a class="el" href="a00062.html#ae9dab2e01b0963b341ab04b59eec1475">tbb::filter</a>
+: <a class="el" href="a00059.html#ae9dab2e01b0963b341ab04b59eec1475">tbb::filter</a>
 </li>
 <li>filter_may_emit_null
-: <a class="el" href="a00062.html#a6645ec56872b6ba2056dcaa467e292f7">tbb::filter</a>
+: <a class="el" href="a00059.html#a6645ec56872b6ba2056dcaa467e292f7">tbb::filter</a>
 </li>
 <li>is_splittable_in_proportion
-: <a class="el" href="a00024.html#ae2b0210e2468092b408123adeb54b01c">tbb::blocked_range< Value ></a>
-, <a class="el" href="a00025.html#aa0519760654368000f7ebc87d9bfe898">tbb::blocked_range2d< RowValue, ColValue ></a>
-, <a class="el" href="a00026.html#a5940c1bd6ba0e8184ef83dea0ae56884">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
+: <a class="el" href="a00022.html#ae2b0210e2468092b408123adeb54b01c">tbb::blocked_range< Value ></a>
+, <a class="el" href="a00023.html#aa0519760654368000f7ebc87d9bfe898">tbb::blocked_range2d< RowValue, ColValue ></a>
+, <a class="el" href="a00024.html#a5940c1bd6ba0e8184ef83dea0ae56884">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
 </li>
 <li>is_writer
-: <a class="el" href="a00135.html#acfd129dc5106ad1129ba803e67311050">tbb::spin_rw_mutex_v3::scoped_lock</a>
+: <a class="el" href="a00134.html#acfd129dc5106ad1129ba803e67311050">tbb::spin_rw_mutex_v3::scoped_lock</a>
 </li>
 <li>mutex
-: <a class="el" href="a00135.html#a8d70c5a2348e30a6979bfbf677328dc4">tbb::spin_rw_mutex_v3::scoped_lock</a>
+: <a class="el" href="a00134.html#a8d70c5a2348e30a6979bfbf677328dc4">tbb::spin_rw_mutex_v3::scoped_lock</a>
 </li>
 <li>my_exception_data
-: <a class="el" href="a00097.html#adba063da80054afe64d5268711084d9b">tbb::movable_exception< ExceptionData ></a>
+: <a class="el" href="a00081.html#adba063da80054afe64d5268711084d9b">tbb::movable_exception< ExceptionData ></a>
 </li>
 <li>state
-: <a class="el" href="a00146.html#aa28625051072472ccd8a2b19405d6fb3">tbb::spin_rw_mutex_v3</a>
-</li>
-<li>thread_stack_size
-: <a class="el" href="a00156.html#a8310e807e1199d0f23b3a57aeb4fde51">tbb::task_scheduler_init</a>
+: <a class="el" href="a00141.html#aa28625051072472ccd8a2b19405d6fb3">tbb::spin_rw_mutex_v3</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/globals.html b/doc/html/globals.html
index 47afb0c..02b152e 100644
--- a/doc/html/globals.html
+++ b/doc/html/globals.html
@@ -40,43 +40,43 @@
 <div class="contents">
 <div class="textblock">Here is a list of all documented file members with links to the documentation:</div><ul>
 <li>scalable_aligned_free()
-: <a class="el" href="a00257.html#gad9aa7595581a7bc5be193d7e034c8f61">scalable_allocator.h</a>
+: <a class="el" href="a00254.html#gad9aa7595581a7bc5be193d7e034c8f61">scalable_allocator.h</a>
 </li>
 <li>scalable_aligned_malloc()
-: <a class="el" href="a00257.html#ga903307de17bc1611515f8e6ae782a3d6">scalable_allocator.h</a>
+: <a class="el" href="a00254.html#ga903307de17bc1611515f8e6ae782a3d6">scalable_allocator.h</a>
 </li>
 <li>scalable_aligned_realloc()
-: <a class="el" href="a00257.html#gaa07391c54330b2e4dd1743ae9c9c4f2d">scalable_allocator.h</a>
+: <a class="el" href="a00254.html#gaa07391c54330b2e4dd1743ae9c9c4f2d">scalable_allocator.h</a>
 </li>
 <li>scalable_allocation_command()
-: <a class="el" href="a00257.html#gabe5acd876b4d89bf89787c4e779c2518">scalable_allocator.h</a>
+: <a class="el" href="a00254.html#gabe5acd876b4d89bf89787c4e779c2518">scalable_allocator.h</a>
 </li>
 <li>scalable_allocation_mode()
-: <a class="el" href="a00257.html#ga7f5029970f72ebbffee896c46a23958e">scalable_allocator.h</a>
+: <a class="el" href="a00254.html#ga7f5029970f72ebbffee896c46a23958e">scalable_allocator.h</a>
 </li>
 <li>scalable_calloc()
-: <a class="el" href="a00257.html#ga3b4ff39555cd9e929fce2958325cd8ea">scalable_allocator.h</a>
+: <a class="el" href="a00254.html#ga3b4ff39555cd9e929fce2958325cd8ea">scalable_allocator.h</a>
 </li>
 <li>scalable_free()
-: <a class="el" href="a00257.html#ga2ad3952b8c4dd7d293e02ae18fc37b84">scalable_allocator.h</a>
+: <a class="el" href="a00254.html#ga2ad3952b8c4dd7d293e02ae18fc37b84">scalable_allocator.h</a>
 </li>
 <li>scalable_malloc()
-: <a class="el" href="a00257.html#ga2a5bdc71439a70b20f2eadf6e1a489e1">scalable_allocator.h</a>
+: <a class="el" href="a00254.html#ga2a5bdc71439a70b20f2eadf6e1a489e1">scalable_allocator.h</a>
 </li>
 <li>scalable_msize()
-: <a class="el" href="a00257.html#ga2b718206e50acb6392b86e4877d98213">scalable_allocator.h</a>
+: <a class="el" href="a00254.html#ga2b718206e50acb6392b86e4877d98213">scalable_allocator.h</a>
 </li>
 <li>scalable_posix_memalign()
-: <a class="el" href="a00257.html#gaf117b4994f719d539804da8dd115e28c">scalable_allocator.h</a>
+: <a class="el" href="a00254.html#gaf117b4994f719d539804da8dd115e28c">scalable_allocator.h</a>
 </li>
 <li>scalable_realloc()
-: <a class="el" href="a00257.html#ga40d6e0bc19cdfa3005b2b935c62077a1">scalable_allocator.h</a>
+: <a class="el" href="a00254.html#ga40d6e0bc19cdfa3005b2b935c62077a1">scalable_allocator.h</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/globals_func.html b/doc/html/globals_func.html
index 0f3dbc7..223db0c 100644
--- a/doc/html/globals_func.html
+++ b/doc/html/globals_func.html
@@ -40,43 +40,43 @@
 <div class="contents">
  <ul>
 <li>scalable_aligned_free()
-: <a class="el" href="a00257.html#gad9aa7595581a7bc5be193d7e034c8f61">scalable_allocator.h</a>
+: <a class="el" href="a00254.html#gad9aa7595581a7bc5be193d7e034c8f61">scalable_allocator.h</a>
 </li>
 <li>scalable_aligned_malloc()
-: <a class="el" href="a00257.html#ga903307de17bc1611515f8e6ae782a3d6">scalable_allocator.h</a>
+: <a class="el" href="a00254.html#ga903307de17bc1611515f8e6ae782a3d6">scalable_allocator.h</a>
 </li>
 <li>scalable_aligned_realloc()
-: <a class="el" href="a00257.html#gaa07391c54330b2e4dd1743ae9c9c4f2d">scalable_allocator.h</a>
+: <a class="el" href="a00254.html#gaa07391c54330b2e4dd1743ae9c9c4f2d">scalable_allocator.h</a>
 </li>
 <li>scalable_allocation_command()
-: <a class="el" href="a00257.html#gabe5acd876b4d89bf89787c4e779c2518">scalable_allocator.h</a>
+: <a class="el" href="a00254.html#gabe5acd876b4d89bf89787c4e779c2518">scalable_allocator.h</a>
 </li>
 <li>scalable_allocation_mode()
-: <a class="el" href="a00257.html#ga7f5029970f72ebbffee896c46a23958e">scalable_allocator.h</a>
+: <a class="el" href="a00254.html#ga7f5029970f72ebbffee896c46a23958e">scalable_allocator.h</a>
 </li>
 <li>scalable_calloc()
-: <a class="el" href="a00257.html#ga3b4ff39555cd9e929fce2958325cd8ea">scalable_allocator.h</a>
+: <a class="el" href="a00254.html#ga3b4ff39555cd9e929fce2958325cd8ea">scalable_allocator.h</a>
 </li>
 <li>scalable_free()
-: <a class="el" href="a00257.html#ga2ad3952b8c4dd7d293e02ae18fc37b84">scalable_allocator.h</a>
+: <a class="el" href="a00254.html#ga2ad3952b8c4dd7d293e02ae18fc37b84">scalable_allocator.h</a>
 </li>
 <li>scalable_malloc()
-: <a class="el" href="a00257.html#ga2a5bdc71439a70b20f2eadf6e1a489e1">scalable_allocator.h</a>
+: <a class="el" href="a00254.html#ga2a5bdc71439a70b20f2eadf6e1a489e1">scalable_allocator.h</a>
 </li>
 <li>scalable_msize()
-: <a class="el" href="a00257.html#ga2b718206e50acb6392b86e4877d98213">scalable_allocator.h</a>
+: <a class="el" href="a00254.html#ga2b718206e50acb6392b86e4877d98213">scalable_allocator.h</a>
 </li>
 <li>scalable_posix_memalign()
-: <a class="el" href="a00257.html#gaf117b4994f719d539804da8dd115e28c">scalable_allocator.h</a>
+: <a class="el" href="a00254.html#gaf117b4994f719d539804da8dd115e28c">scalable_allocator.h</a>
 </li>
 <li>scalable_realloc()
-: <a class="el" href="a00257.html#ga40d6e0bc19cdfa3005b2b935c62077a1">scalable_allocator.h</a>
+: <a class="el" href="a00254.html#ga40d6e0bc19cdfa3005b2b935c62077a1">scalable_allocator.h</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/hierarchy.html b/doc/html/hierarchy.html
index ee73559..13f5edb 100644
--- a/doc/html/hierarchy.html
+++ b/doc/html/hierarchy.html
@@ -38,262 +38,225 @@
 </div><!--header-->
 <div class="contents">
 <div class="textblock">This inheritance list is sorted roughly, but not completely, alphabetically:</div><div class="directory">
-<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span><span onclick="javascript:toggleLevel(4);">4</span><span onclick="javascript:toggleLevel(5);">5</span>]</div><table class="directory">
-<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00009.html" target="_self">__TBB_malloc_proxy_caller</a></td><td class="desc"></td></tr>
-<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00011.html" target="_self">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor_not_used</a></td><td class="desc"></td></tr>
-<tr id="row_2_" class="even"><td class="entry"><img id="arr_2_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>aggregated_operation</b></td><td class="desc"></td></tr>
-<tr id="row_2_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00031.html" target="_self">tbb::flow::interface7::buffer_node< T, A >::buffer_operation</a></td><td class="desc"></td></tr>
-<tr id="row_3_"><td class="entry"><img id="arr_3_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('3_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00014.html" target="_self">tbb::interface6::aggregator_operation</a></td><td class="desc"></td></tr>
-<tr id="row_3_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_3_0_" src="ftv2plastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('3_0_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00023.html" target="_self">tbb::interface6::internal::basic_operation_base</a></td><td class="desc"></td></tr>
-<tr id="row_3_0_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00022.html" target="_self">tbb::interface6::internal::basic_operation< Body ></a></td><td class="desc"></td></tr>
-<tr id="row_4_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00015.html" target="_self">tbb::aligned_space< T, N ></a></td><td class="desc">Block of space aligned sufficiently to construct an array T with N elements </td></tr>
-<tr id="row_5_"><td class="entry"><img id="arr_5_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('5_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>Allocator</b></td><td class="desc"></td></tr>
-<tr id="row_5_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00177.html" target="_self">tbb::zero_allocator< T, Allocator ></a></td><td class="desc">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
-<tr id="row_5_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00178.html" target="_self">tbb::zero_allocator< void, Allocator ></a></td><td class="desc">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
-<tr id="row_6_" class="even"><td class="entry"><img id="arr_6_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('6_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>allocator_base</b></td><td class="desc"></td></tr>
-<tr id="row_6_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00053.html" target="_self">tbb::concurrent_vector< padded_element, padded_allocator_type ></a></td><td class="desc"></td></tr>
-<tr id="row_6_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00053.html" target="_self">tbb::concurrent_vector< T, A ></a></td><td class="desc">Concurrent vector container </td></tr>
-<tr id="row_7_"><td class="entry"><img id="arr_7_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('7_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00016.html" target="_self">tbb::flow::interface7::internal::async_gateway< Output ></a></td><td class="desc">Pure virtual template class that defines interface for async communication </td></tr>
-<tr id="row_7_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00017.html" target="_self">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td><td class="desc">Implements a async node </td></tr>
-<tr id="row_8_" class="even"><td class="entry"><img id="arr_8_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('8_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>async_input</b></td><td class="desc"></td></tr>
-<tr id="row_8_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00017.html" target="_self">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td><td class="desc">Implements a async node </td></tr>
-<tr id="row_9_"><td class="entry"><img id="arr_9_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('9_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>atomic_impl</b></td><td class="desc"></td></tr>
-<tr id="row_9_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00018.html" target="_self">tbb::atomic< internal::Token ></a></td><td class="desc"></td></tr>
-<tr id="row_9_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00018.html" target="_self">tbb::atomic< intptr_t ></a></td><td class="desc"></td></tr>
-<tr id="row_9_2_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00018.html" target="_self">tbb::atomic< state_t ></a></td><td class="desc"></td></tr>
-<tr id="row_9_3_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00018.html" target="_self">tbb::atomic< status_t ></a></td><td class="desc"></td></tr>
-<tr id="row_9_4_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00018.html" target="_self">tbb::atomic< tbb::interface5::reader_writer_lock::scoped_lock * ></a></td><td class="desc"></td></tr>
-<tr id="row_9_5_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00018.html" target="_self">tbb::atomic< tbb::interface5::reader_writer_lock::scoped_lock_read * ></a></td><td class="desc"></td></tr>
-<tr id="row_9_6_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00018.html" target="_self">tbb::atomic< tbb::interface6::aggregator_operation * ></a></td><td class="desc"></td></tr>
-<tr id="row_9_7_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00018.html" target="_self">tbb::atomic< tbb::queuing_mutex::scoped_lock * ></a></td><td class="desc"></td></tr>
-<tr id="row_9_8_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00018.html" target="_self">tbb::atomic< tbb::queuing_rw_mutex::scoped_lock * ></a></td><td class="desc"></td></tr>
-<tr id="row_9_9_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00018.html" target="_self">tbb::atomic< uintptr_t ></a></td><td class="desc"></td></tr>
-<tr id="row_9_10_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00018.html" target="_self">tbb::atomic< T ></a></td><td class="desc">Primary template for atomic </td></tr>
-<tr id="row_9_11_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00019.html" target="_self">tbb::atomic< void * ></a></td><td class="desc">Specialization for <a class="el" href="a00019.html" title="Specialization for atomic<void*>, for sake of not allowing arithmetic or oper [...]
-<tr id="row_10_" class="even"><td class="entry"><img id="arr_10_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('10_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>bad_alloc</b></td><td class="desc"></td></tr>
-<tr id="row_10_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00020.html" target="_self">tbb::bad_last_alloc</a></td><td class="desc">Exception for concurrent containers </td></tr>
-<tr id="row_11_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00021.html" target="_self">tbb::interface6::internal::basic_handler</a></td><td class="desc"></td></tr>
-<tr id="row_12_" class="even"><td class="entry"><img id="arr_12_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('12_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>binary_function</b></td><td class="desc"></td></tr>
-<tr id="row_12_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00174.html" target="_self">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >::value_compare</a></td><td class="desc"></td></tr>
-<tr id="row_13_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00024.html" target="_self">tbb::blocked_range< Value ></a></td><td class="desc">A range over which to iterate </td></tr>
-<tr id="row_14_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00025.html" target="_self">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="desc">A 2-dimensional range that models the Range concept </td></tr>
-<tr id="row_15_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00026.html" target="_self">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="desc">A 3-dimensional range that models the Range concept </td></tr>
-<tr id="row_16_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00024.html" target="_self">tbb::blocked_range< ColValue ></a></td><td class="desc"></td></tr>
-<tr id="row_17_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00024.html" target="_self">tbb::blocked_range< I ></a></td><td class="desc"></td></tr>
-<tr id="row_18_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00024.html" target="_self">tbb::blocked_range< PageValue ></a></td><td class="desc"></td></tr>
-<tr id="row_19_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00024.html" target="_self">tbb::blocked_range< RowValue ></a></td><td class="desc"></td></tr>
-<tr id="row_20_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00027.html" target="_self">tbb::flow::interface7::internal::broadcast_cache< T, M ></a></td><td class="desc"></td></tr>
-<tr id="row_21_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00027.html" target="_self">tbb::flow::interface7::internal::broadcast_cache< input_type ></a></td><td class="desc"></td></tr>
-<tr id="row_22_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00027.html" target="_self">tbb::flow::interface7::internal::broadcast_cache< input_type, tbb::null_rw_mutex ></a></td><td class="desc"></td></tr>
-<tr id="row_23_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00027.html" target="_self">tbb::flow::interface7::internal::broadcast_cache< output_type ></a></td><td class="desc"></td></tr>
-<tr id="row_24_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00027.html" target="_self">tbb::flow::interface7::internal::broadcast_cache< T ></a></td><td class="desc"></td></tr>
-<tr id="row_25_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00032.html" target="_self">tbb::cache_aligned_allocator< T ></a></td><td class="desc">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
-<tr id="row_26_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00033.html" target="_self">tbb::cache_aligned_allocator< void ></a></td><td class="desc">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
-<tr id="row_27_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00034.html" target="_self">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave</a></td><td class="desc"></td></tr>
-<tr id="row_28_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00036.html" target="_self">tbb::combinable< T ></a></td><td class="desc">Thread-local storage with optional reduction </td></tr>
-<tr id="row_29_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00037.html" target="_self">tbb::flow::interface7::composite_node< InputTuple, OutputTuple ></a></td><td class="desc"></td></tr>
-<tr id="row_30_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00041.html" target="_self">tbb::interface6::internal::concrete_filter< T, U, Body ></a></td><td class="desc"></td></tr>
-<tr id="row_31_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00045.html" target="_self">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="desc">Concurrent priority queue </td></tr>
-<tr id="row_32_" class="even"><td class="entry"><img id="arr_32_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('32_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>concurrent_queue_base_v3</b></td><td class="desc"></td></tr>
-<tr id="row_32_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00046.html" target="_self">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="desc">A high-performance thread-safe non-blocking concurrent queue </td></tr>
-<tr id="row_33_"><td class="entry"><img id="arr_33_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('33_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>concurrent_queue_base_v8</b></td><td class="desc"></td></tr>
-<tr id="row_33_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00042.html" target="_self">tbb::concurrent_bounded_queue< T, A ></a></td><td class="desc">A high-performance thread-safe blocking concurrent bounded queue </td></tr>
-<tr id="row_34_" class="even"><td class="entry"><img id="arr_34_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('34_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>concurrent_unordered_base</b></td><td class="desc"></td></tr>
-<tr id="row_34_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00047.html" target="_self">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="desc"></td></tr>
-<tr id="row_34_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00049.html" target="_self">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="desc"></td></tr>
-<tr id="row_34_2_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00050.html" target="_self">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="desc"></td></tr>
-<tr id="row_34_3_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00051.html" target="_self">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="desc"></td></tr>
-<tr id="row_35_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00048.html" target="_self">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="desc"></td></tr>
-<tr id="row_36_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00052.html" target="_self">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="desc"></td></tr>
-<tr id="row_37_"><td class="entry"><img id="arr_37_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('37_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>concurrent_vector_base</b></td><td class="desc"></td></tr>
-<tr id="row_37_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00053.html" target="_self">tbb::concurrent_vector< padded_element, padded_allocator_type ></a></td><td class="desc"></td></tr>
-<tr id="row_37_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00053.html" target="_self">tbb::concurrent_vector< T, A ></a></td><td class="desc">Concurrent vector container </td></tr>
-<tr id="row_38_" class="even"><td class="entry"><img id="arr_38_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('38_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>continue_input</b></td><td class="desc"></td></tr>
-<tr id="row_38_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00056.html" target="_self">tbb::flow::interface7::continue_node< Output ></a></td><td class="desc">Implements an executable node that supports <a class="el" href="a00055.html" title="An empty class used for messages that mean &qu [...]
-<tr id="row_39_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00055.html" target="_self">tbb::flow::interface7::continue_msg</a></td><td class="desc">An empty class used for messages that mean "I'm done" </td></tr>
-<tr id="row_40_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00059.html" target="_self">tbb::flow::interface7::internal::edge_container< C ></a></td><td class="desc"></td></tr>
-<tr id="row_41_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00059.html" target="_self">tbb::flow::interface7::internal::edge_container< predecessor_type ></a></td><td class="desc"></td></tr>
-<tr id="row_42_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00059.html" target="_self">tbb::flow::interface7::internal::edge_container< tbb::flow::interface7::sender ></a></td><td class="desc"></td></tr>
-<tr id="row_43_"><td class="entry"><img id="arr_43_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('43_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>ets_base</b></td><td class="desc"></td></tr>
-<tr id="row_43_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00061.html" target="_self">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="desc">The <a class="el" href="a00061.html" title="The enumerable_thread_specific container. ">en [...]
-<tr id="row_44_" class="even"><td class="entry"><img id="arr_44_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('44_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>exception</b></td><td class="desc"></td></tr>
-<tr id="row_44_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00074.html" target="_self">tbb::improper_lock</a></td><td class="desc">Exception for PPL locks </td></tr>
-<tr id="row_44_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00086.html" target="_self">tbb::invalid_multiple_scheduling</a></td><td class="desc">Exception for repeated scheduling of the same <a class="el" href="a00154.html">task_handle</a> </td></tr>
-<tr id="row_44_2_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00096.html" target="_self">tbb::missing_wait</a></td><td class="desc">Exception for missing wait on <a class="el" href="a00148.html">structured_task_group</a> </td></tr>
-<tr id="row_44_3_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_44_3_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('44_3_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00161.html" target="_self">tbb::tbb_exception</a></td><td class="desc">Interface to be implemented by all exceptions TBB recognizes and propagates across the threads </td></tr>
-<tr id="row_44_3_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00035.html" target="_self">tbb::captured_exception</a></td><td class="desc">This class is used by TBB to propagate information about unhandled exceptions into the root thread < [...]
-<tr id="row_44_3_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00097.html" target="_self">tbb::movable_exception< ExceptionData ></a></td><td class="desc">Template that can be used to implement exception that transfers arbitrary  [...]
-<tr id="row_44_4_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00173.html" target="_self">tbb::user_abort</a></td><td class="desc">Exception for user-initiated abort </td></tr>
-<tr id="row_45_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00063.html" target="_self">tbb::interface6::filter_t< T, U ></a></td><td class="desc">Class representing a chain of type-safe pipeline filters </td></tr>
-<tr id="row_46_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00064.html" target="_self">tbb::final_scan_tag</a></td><td class="desc">Used to indicate that the final scan is being performed </td></tr>
-<tr id="row_47_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00066.html" target="_self">tbb::interface6::flattened2d< Container ></a></td><td class="desc"></td></tr>
-<tr id="row_48_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00067.html" target="_self">tbb::interface6::flow_control</a></td><td class="desc">Input_filter control to signal end-of-input for parallel_pipeline </td></tr>
-<tr id="row_49_"><td class="entry"><img id="arr_49_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('49_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>function_input</b></td><td class="desc"></td></tr>
-<tr id="row_49_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00068.html" target="_self">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a></td><td class="desc">Implements a function node that supports Input -> Output </td></tr>
-<tr id="row_50_" class="even"><td class="entry"><img id="arr_50_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('50_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>function_output</b></td><td class="desc"></td></tr>
-<tr id="row_50_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00017.html" target="_self">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td><td class="desc">Implements a async node </td></tr>
-<tr id="row_50_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00056.html" target="_self">tbb::flow::interface7::continue_node< Output ></a></td><td class="desc">Implements an executable node that supports <a class="el" href="a00055.html" title="An empty class used for messages that mean "I [...]
-<tr id="row_50_2_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00068.html" target="_self">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a></td><td class="desc">Implements a function node that supports Input -> Output </td></tr>
-<tr id="row_51_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00069.html" target="_self">tbb::interface9::global_control</a></td><td class="desc"></td></tr>
-<tr id="row_52_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00071.html" target="_self">tbb::flow::interface7::graph_iterator< GraphContainerType, GraphNodeType ></a></td><td class="desc"></td></tr>
-<tr id="row_53_"><td class="entry"><img id="arr_53_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('53_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>hash_map_base</b></td><td class="desc"></td></tr>
-<tr id="row_53_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00043.html" target="_self">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="desc">Unordered map from Key to T </td></tr>
-<tr id="row_54_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00073.html" target="_self">tbb::internal::tbb_thread_v3::id</a></td><td class="desc"></td></tr>
-<tr id="row_55_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00085.html" target="_self">tbb::tick_count::interval_t</a></td><td class="desc">Relative time interval </td></tr>
-<tr id="row_56_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00087.html" target="_self">tbb::flow::interface7::join_node< OutputTuple, JP ></a></td><td class="desc"></td></tr>
-<tr id="row_57_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00093.html" target="_self">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="desc">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
-<tr id="row_58_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00094.html" target="_self">tbb::interface6::memory_pool_allocator< void, P ></a></td><td class="desc">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
-<tr id="row_59_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00095.html" target="_self">rml::MemPoolPolicy</a></td><td class="desc"></td></tr>
-<tr id="row_60_" class="even"><td class="entry"><img id="arr_60_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('60_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>multifunction_input</b></td><td class="desc"></td></tr>
-<tr id="row_60_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_60_0_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('60_0_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00098.html" target="_self">tbb::flow::interface7::multifunction_node< TupleType, TupleType, rejecting, Allocator ></a></td><td class="desc"></td></tr>
-<tr id="row_60_0_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00147.html" target="_self">tbb::flow::interface7::split_node< TupleType, Allocator ></a></td><td class="desc">Split_node: accepts a tuple as input, forwards each elem [...]
-<tr id="row_60_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00098.html" target="_self">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a></td><td class="desc">Implements a function node that supports Input -> (set of outputs) </td></tr>
-<tr id="row_61_"><td class="entry"><img id="arr_61_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('61_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>mutex_copy_deprecated_and_disabled</b></td><td class="desc"></td></tr>
-<tr id="row_61_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00099.html" target="_self">tbb::mutex</a></td><td class="desc">Wrapper around the platform's native reader-writer lock </td></tr>
-<tr id="row_61_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00101.html" target="_self">tbb::null_mutex</a></td><td class="desc">A mutex which does nothing </td></tr>
-<tr id="row_61_2_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00102.html" target="_self">tbb::null_rw_mutex</a></td><td class="desc">A rw mutex which does nothing </td></tr>
-<tr id="row_61_3_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00111.html" target="_self">tbb::queuing_mutex</a></td><td class="desc">Queuing mutex with local-only spinning </td></tr>
-<tr id="row_61_4_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00112.html" target="_self">tbb::queuing_rw_mutex</a></td><td class="desc">Queuing reader-writer mutex with local-only spinning </td></tr>
-<tr id="row_61_5_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00125.html" target="_self">tbb::recursive_mutex</a></td><td class="desc"></td></tr>
-<tr id="row_61_6_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00145.html" target="_self">tbb::spin_mutex</a></td><td class="desc">A lock that occupies a single byte </td></tr>
-<tr id="row_61_7_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00146.html" target="_self">tbb::spin_rw_mutex_v3</a></td><td class="desc">Fast, unfair, spinning reader-writer lock with backoff and writer-preference </td></tr>
-<tr id="row_62_" class="even"><td class="entry"><img id="arr_62_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('62_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>no_assign</b></td><td class="desc"></td></tr>
-<tr id="row_62_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_62_0_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('62_0_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00072.html" target="_self">tbb::flow::interface7::graph_node</a></td><td class="desc">The base of all graph nodes </td></tr>
-<tr id="row_62_0_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00098.html" target="_self">tbb::flow::interface7::multifunction_node< TupleType, TupleType, rejecting, Allocator ></a></td><td class="desc"></td></tr>
-<tr id="row_62_0_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00017.html" target="_self">tbb::flow::interface7::async_node< Input, Output, Allocator ></a></td><td class="desc">Implements a async node </td></tr>
-<tr id="row_62_0_2_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00028.html" target="_self">tbb::flow::interface7::broadcast_node< T ></a></td><td class="desc">Forwards messages of type T to all successors </td></tr>
-<tr id="row_62_0_3_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_62_0_3_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('62_0_3_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00030.html" target="_self">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="desc">Forwards messages in arb [...]
-<tr id="row_62_0_3_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00109.html" target="_self">tbb::flow::interface7::priority_queue_node< T, Compare, A ></a></td><td class="d [...]
-<tr id="row_62_0_3_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_62_0_3_1_" src="ftv2plastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('62_0_3_1_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00110.html" target="_self">tbb::flow::interface7::queu [...]
-<tr id="row_62_0_3_1_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00143.html" target="_self">tbb::flow::interf [...]
-<tr id="row_62_0_4_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00038.html" target="_self">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="des [...]
-<tr id="row_62_0_5_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00039.html" target="_self">tbb::flow::interface7::composite_node< tbb::flow::tuple< InputTypes...>, tbb::flow::tuple<> ></a></td><td class="desc"></td></tr>
-<tr id="row_62_0_6_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00040.html" target="_self">tbb::flow::interface7::composite_node< tbb::flow::tuple<>, tbb::flow::tuple< OutputTypes...> ></a></td><td class="desc"></td></tr>
-<tr id="row_62_0_7_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00056.html" target="_self">tbb::flow::interface7::continue_node< Output ></a></td><td class="desc">Implements an executable node that supports <a class="el" href="a00055. [...]
-<tr id="row_62_0_8_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00068.html" target="_self">tbb::flow::interface7::function_node< Input, Output, G, Allocator ></a></td><td class="desc">Implements a function node that supports Input -&g [...]
-<tr id="row_62_0_9_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00091.html" target="_self">tbb::flow::interface7::limiter_node< T ></a></td><td class="desc">Forwards messages only if the threshold has not been reached </td></tr>
-<tr id="row_62_0_10_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00098.html" target="_self">tbb::flow::interface7::multifunction_node< Input, Output, G, Allocator ></a></td><td class="desc">Implements a function node that supports Inp [...]
-<tr id="row_62_0_11_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_62_0_11_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('62_0_11_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00104.html" target="_self">tbb::flow::interface7::overwrite_node< T ></a></td><td class="desc"></td></tr>
-<tr id="row_62_0_11_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00176.html" target="_self">tbb::flow::interface7::write_once_node< T ></a></td><td class="desc"></td></tr>
-<tr id="row_62_0_12_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00144.html" target="_self">tbb::flow::interface7::source_node< Output ></a></td><td class="desc">An executable node that acts as a source, i.e. it has no predecessor [...]
-<tr id="row_62_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00044.html" target="_self">tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type ></a></td><td class="desc"></td></tr>
-<tr id="row_62_2_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00154.html" target="_self">tbb::task_handle< F ></a></td><td class="desc"></td></tr>
-<tr id="row_63_"><td class="entry"><img id="arr_63_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('63_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>no_assign</b></td><td class="desc"></td></tr>
-<tr id="row_63_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00022.html" target="_self">tbb::interface6::internal::basic_operation< Body ></a></td><td class="desc"></td></tr>
-<tr id="row_64_" class="even"><td class="entry"><img id="arr_64_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('64_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>no_copy</b></td><td class="desc"></td></tr>
-<tr id="row_64_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_64_0_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('64_0_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00013.html" target="_self">tbb::interface6::aggregator_ext< internal::basic_handler ></a></td><td class="desc"></td></tr>
-<tr id="row_64_0_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00012.html" target="_self">tbb::interface6::aggregator</a></td><td class="desc">Basic aggregator interface </td></tr>
-<tr id="row_64_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00060.html" target="_self">tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard</a></td><td class="desc"></td></tr>
-<tr id="row_64_2_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_64_2_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('64_2_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00062.html" target="_self">tbb::filter</a></td><td class="desc">A stage in a pipeline </td></tr>
-<tr id="row_64_2_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00165.html" target="_self">tbb::thread_bound_filter</a></td><td class="desc">A stage in a pipeline served by a user thread </td></tr>
-<tr id="row_64_3_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00070.html" target="_self">tbb::flow::interface7::graph</a></td><td class="desc">The graph class </td></tr>
-<tr id="row_64_4_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00113.html" target="_self">tbb::interface5::reader_writer_lock</a></td><td class="desc">Writer-preference reader-writer lock with local-only spinning on readers </td></tr>
-<tr id="row_64_5_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00133.html" target="_self">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class="desc">The scoped lock pattern for write locks </td></tr>
-<tr id="row_64_6_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00141.html" target="_self">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class="desc">The scoped lock pattern for read locks </td></tr>
-<tr id="row_64_7_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00013.html" target="_self">tbb::interface6::aggregator_ext< handler_type ></a></td><td class="desc">Aggregator base class and expert interface </td></tr>
-<tr id="row_64_8_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00128.html" target="_self">tbb::interface6::runtime_loader</a></td><td class="desc">Load TBB at runtime </td></tr>
-<tr id="row_64_9_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00058.html" target="_self">tbb::internal::critical_section_v4</a></td><td class="desc"></td></tr>
-<tr id="row_64_10_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00136.html" target="_self">tbb::internal::critical_section_v4::scoped_lock</a></td><td class="desc"></td></tr>
-<tr id="row_64_11_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_64_11_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('64_11_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00152.html" target="_self">tbb::internal::task_group_base</a></td><td class="desc"></td></tr>
-<tr id="row_64_11_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00148.html" target="_self">tbb::structured_task_group</a></td><td class="desc"></td></tr>
-<tr id="row_64_11_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00151.html" target="_self">tbb::task_group</a></td><td class="desc"></td></tr>
-<tr id="row_64_12_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00140.html" target="_self">tbb::mutex::scoped_lock</a></td><td class="desc">The scoped locking pattern </td></tr>
-<tr id="row_64_13_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00137.html" target="_self">tbb::null_mutex::scoped_lock</a></td><td class="desc">Represents acquisition of a mutex </td></tr>
-<tr id="row_64_14_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00138.html" target="_self">tbb::null_rw_mutex::scoped_lock</a></td><td class="desc">Represents acquisition of a mutex </td></tr>
-<tr id="row_64_15_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00105.html" target="_self">tbb::parallel_do_feeder< Item ></a></td><td class="desc">Class the user supplied algorithm body uses to add new tasks </td></tr>
-<tr id="row_64_16_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00106.html" target="_self">tbb::parallel_while< Body ></a></td><td class="desc">Parallel iteration over a stream, with optional addition of more work </td></tr>
-<tr id="row_64_17_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00132.html" target="_self">tbb::queuing_mutex::scoped_lock</a></td><td class="desc">The scoped locking pattern </td></tr>
-<tr id="row_64_18_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00131.html" target="_self">tbb::queuing_rw_mutex::scoped_lock</a></td><td class="desc">The scoped locking pattern </td></tr>
-<tr id="row_64_19_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00139.html" target="_self">tbb::recursive_mutex::scoped_lock</a></td><td class="desc">The scoped locking pattern </td></tr>
-<tr id="row_64_20_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00134.html" target="_self">tbb::spin_mutex::scoped_lock</a></td><td class="desc">Represents acquisition of a mutex </td></tr>
-<tr id="row_64_21_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00135.html" target="_self">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="desc">The scoped locking pattern </td></tr>
-<tr id="row_64_22_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00156.html" target="_self">tbb::task_scheduler_init</a></td><td class="desc">Class delimiting the scope of task scheduler activity </td></tr>
-<tr id="row_65_"><td class="entry"><img id="arr_65_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('65_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>node_base</b></td><td class="desc"></td></tr>
-<tr id="row_65_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00100.html" target="_self">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a></td><td class="desc"></td></tr>
-<tr id="row_66_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00103.html" target="_self">tbb::flow::interface7::null_type</a></td><td class="desc"></td></tr>
-<tr id="row_67_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00107.html" target="_self">tbb::pipeline</a></td><td class="desc">A processing pipeline that applies filters to items </td></tr>
-<tr id="row_68_" class="even"><td class="entry"><img id="arr_68_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('68_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>pool_base</b></td><td class="desc"></td></tr>
-<tr id="row_68_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00065.html" target="_self">tbb::interface6::fixed_pool</a></td><td class="desc"></td></tr>
-<tr id="row_68_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00092.html" target="_self">tbb::interface6::memory_pool< Alloc ></a></td><td class="desc">Thread-safe growable pool allocator for variable-size requests </td></tr>
-<tr id="row_69_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00108.html" target="_self">tbb::pre_scan_tag</a></td><td class="desc">Used to indicate that the initial scan is being performed </td></tr>
-<tr id="row_70_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00114.html" target="_self">tbb::cache_aligned_allocator< void >::rebind< U ></a></td><td class="desc"></td></tr>
-<tr id="row_71_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00115.html" target="_self">tbb::scalable_allocator< T >::rebind< U ></a></td><td class="desc"></td></tr>
-<tr id="row_72_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00116.html" target="_self">tbb::scalable_allocator< void >::rebind< U ></a></td><td class="desc"></td></tr>
-<tr id="row_73_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00117.html" target="_self">tbb::tbb_allocator< T >::rebind< U ></a></td><td class="desc"></td></tr>
-<tr id="row_74_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00118.html" target="_self">tbb::tbb_allocator< void >::rebind< U ></a></td><td class="desc"></td></tr>
-<tr id="row_75_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00119.html" target="_self">tbb::zero_allocator< T, Allocator >::rebind< U ></a></td><td class="desc"></td></tr>
-<tr id="row_76_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00120.html" target="_self">tbb::zero_allocator< void, Allocator >::rebind< U ></a></td><td class="desc"></td></tr>
-<tr id="row_77_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00121.html" target="_self">tbb::cache_aligned_allocator< T >::rebind< U ></a></td><td class="desc"></td></tr>
-<tr id="row_78_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00122.html" target="_self">tbb::interface6::memory_pool_allocator< T, P >::rebind< U ></a></td><td class="desc"></td></tr>
-<tr id="row_79_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00123.html" target="_self">tbb::interface6::memory_pool_allocator< void, P >::rebind< U ></a></td><td class="desc"></td></tr>
-<tr id="row_80_" class="even"><td class="entry"><img id="arr_80_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('80_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00124.html" target="_self">tbb::flow::interface7::receiver< T ></a></td><td class="desc">Pure virtual template class that defines a receiver of messages of type T </td></tr>
-<tr id="row_80_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00028.html" target="_self">tbb::flow::interface7::broadcast_node< T ></a></td><td class="desc">Forwards messages of type T to all successors </td></tr>
-<tr id="row_80_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00030.html" target="_self">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="desc">Forwards messages in arbitrary order </td></tr>
-<tr id="row_80_2_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00091.html" target="_self">tbb::flow::interface7::limiter_node< T ></a></td><td class="desc">Forwards messages only if the threshold has not been reached </td></tr>
-<tr id="row_80_3_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00104.html" target="_self">tbb::flow::interface7::overwrite_node< T ></a></td><td class="desc"></td></tr>
-<tr id="row_81_"><td class="entry"><img id="arr_81_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('81_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00124.html" target="_self">tbb::flow::interface7::receiver< continue_msg ></a></td><td class="desc"></td></tr>
-<tr id="row_81_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00057.html" target="_self">tbb::flow::interface7::continue_receiver</a></td><td class="desc">Base class for receivers of completion messages </td></tr>
-<tr id="row_82_" class="even"><td class="entry"><img id="arr_82_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('82_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>reservable_item_buffer</b></td><td class="desc"></td></tr>
-<tr id="row_82_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00030.html" target="_self">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="desc">Forwards messages in arbitrary order </td></tr>
-<tr id="row_83_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00126.html" target="_self">tbb::flow::interface7::internal::round_robin_cache< T, M ></a></td><td class="desc"></td></tr>
-<tr id="row_84_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00126.html" target="_self">tbb::flow::interface7::internal::round_robin_cache< T, tbb::null_rw_mutex ></a></td><td class="desc"></td></tr>
-<tr id="row_85_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00127.html" target="_self">tbb::flow::interface7::run_and_put_task< R, B ></a></td><td class="desc"></td></tr>
-<tr id="row_86_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00129.html" target="_self">tbb::scalable_allocator< T ></a></td><td class="desc">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
-<tr id="row_87_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00130.html" target="_self">tbb::scalable_allocator< void ></a></td><td class="desc">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
-<tr id="row_88_" class="even"><td class="entry"><img id="arr_88_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('88_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>scoped_t</b></td><td class="desc"></td></tr>
-<tr id="row_88_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00029.html" target="_self">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a></td><td class="desc">Bucket accessor is to find, rehash, acquire a lock, and access a bucket </td></tr>
-<tr id="row_89_"><td class="entry"><img id="arr_89_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('89_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>scoped_t</b></td><td class="desc"></td></tr>
-<tr id="row_89_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_89_0_" src="ftv2plastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('89_0_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00054.html" target="_self">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="desc">Combines data access, locking, and gar [...]
-<tr id="row_89_0_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00010.html" target="_self">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a></td><td class="desc">Allows write access to ele [...]
-<tr id="row_90_" class="even"><td class="entry"><img id="arr_90_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('90_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00142.html" target="_self">tbb::flow::interface7::sender< T ></a></td><td class="desc">Pure virtual template class that defines a sender of messages of type T </td></tr>
-<tr id="row_90_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00028.html" target="_self">tbb::flow::interface7::broadcast_node< T ></a></td><td class="desc">Forwards messages of type T to all successors </td></tr>
-<tr id="row_90_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00030.html" target="_self">tbb::flow::interface7::buffer_node< T, A ></a></td><td class="desc">Forwards messages in arbitrary order </td></tr>
-<tr id="row_90_2_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00091.html" target="_self">tbb::flow::interface7::limiter_node< T ></a></td><td class="desc">Forwards messages only if the threshold has not been reached </td></tr>
-<tr id="row_90_3_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00104.html" target="_self">tbb::flow::interface7::overwrite_node< T ></a></td><td class="desc"></td></tr>
-<tr id="row_91_"><td class="entry"><img id="arr_91_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('91_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00142.html" target="_self">tbb::flow::interface7::sender< Output ></a></td><td class="desc"></td></tr>
-<tr id="row_91_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00144.html" target="_self">tbb::flow::interface7::source_node< Output ></a></td><td class="desc">An executable node that acts as a source, i.e. it has no predecessors </td></tr>
-<tr id="row_92_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00149.html" target="_self">tbb::flow::interface7::internal::successor_cache< T, M ></a></td><td class="desc"></td></tr>
-<tr id="row_93_"><td class="entry"><img id="arr_93_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('93_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>task</b></td><td class="desc"></td></tr>
-<tr id="row_93_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00155.html" target="_self">tbb::internal::task_handle_task< F ></a></td><td class="desc"></td></tr>
-<tr id="row_94_" class="even"><td class="entry"><img id="arr_94_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('94_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>task_arena_base</b></td><td class="desc"></td></tr>
-<tr id="row_94_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00150.html" target="_self">tbb::interface7::task_arena</a></td><td class="desc"></td></tr>
-<tr id="row_95_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00153.html" target="_self">tbb::task_group_context</a></td><td class="desc"></td></tr>
-<tr id="row_96_" class="even"><td class="entry"><img id="arr_96_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('96_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00158.html" target="_self">tbb::internal::task_scheduler_observer_v3</a></td><td class="desc"></td></tr>
-<tr id="row_96_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00157.html" target="_self">tbb::interface6::task_scheduler_observer</a></td><td class="desc"></td></tr>
-<tr id="row_97_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00159.html" target="_self">tbb::tbb_allocator< T ></a></td><td class="desc">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
-<tr id="row_98_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00160.html" target="_self">tbb::tbb_allocator< void ></a></td><td class="desc">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
-<tr id="row_99_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00162.html" target="_self">tbb::internal::tbb_exception_ptr</a></td><td class="desc">Exception container that preserves the exact copy of the original exception </td></tr>
-<tr id="row_100_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00163.html" target="_self">tbb::tbb_hash_compare< Key ></a></td><td class="desc">Hash_compare that is default argument for concurrent_hash_map </td></tr>
-<tr id="row_101_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00164.html" target="_self">tbb::internal::tbb_thread_v3</a></td><td class="desc">Versioned thread class </td></tr>
-<tr id="row_102_" class="even"><td class="entry"><img id="arr_102_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('102_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00169.html" target="_self">tbb::internal::thread_closure_base</a></td><td class="desc"></td></tr>
-<tr id="row_102_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00166.html" target="_self">tbb::internal::thread_closure_0< F ></a></td><td class="desc"></td></tr>
-<tr id="row_102_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00167.html" target="_self">tbb::internal::thread_closure_1< F, X ></a></td><td class="desc">Structure used to pass user function with 1 argument to thread </td></tr>
-<tr id="row_102_2_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00168.html" target="_self">tbb::internal::thread_closure_2< F, X, Y ></a></td><td class="desc"></td></tr>
-<tr id="row_103_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00170.html" target="_self">tbb::tick_count</a></td><td class="desc">Absolute timestamp </td></tr>
-<tr id="row_104_" class="even"><td class="entry"><img id="arr_104_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('104_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>unfolded_indexer_node</b></td><td class="desc"></td></tr>
-<tr id="row_104_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00075.html" target="_self">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 ></a></td><td class="desc"></td></tr>
-<tr id="row_104_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00076.html" target="_self">tbb::flow::interface7::indexer_node< T0 ></a></td><td class="desc"></td></tr>
-<tr id="row_104_2_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00077.html" target="_self">tbb::flow::interface7::indexer_node< T0, T1 ></a></td><td class="desc"></td></tr>
-<tr id="row_104_3_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00078.html" target="_self">tbb::flow::interface7::indexer_node< T0, T1, T2 ></a></td><td class="desc"></td></tr>
-<tr id="row_104_4_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00079.html" target="_self">tbb::flow::interface7::indexer_node< T0, T1, T2, T3 ></a></td><td class="desc"></td></tr>
-<tr id="row_104_5_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00080.html" target="_self">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4 ></a></td><td class="desc"></td></tr>
-<tr id="row_104_6_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00081.html" target="_self">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5 ></a></td><td class="desc"></td></tr>
-<tr id="row_104_7_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00082.html" target="_self">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6 ></a></td><td class="desc"></td></tr>
-<tr id="row_104_8_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00083.html" target="_self">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7 ></a></td><td class="desc"></td></tr>
-<tr id="row_104_9_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00084.html" target="_self">tbb::flow::interface7::indexer_node< T0, T1, T2, T3, T4, T5, T6, T7, T8 ></a></td><td class="desc"></td></tr>
-<tr id="row_105_"><td class="entry"><img id="arr_105_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('105_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>unfolded_join_node</b></td><td class="desc"></td></tr>
-<tr id="row_105_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00088.html" target="_self">tbb::flow::interface7::join_node< OutputTuple, queueing ></a></td><td class="desc"></td></tr>
-<tr id="row_105_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00089.html" target="_self">tbb::flow::interface7::join_node< OutputTuple, reserving ></a></td><td class="desc"></td></tr>
-<tr id="row_105_2_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00090.html" target="_self">tbb::flow::interface7::join_node< OutputTuple, tag_matching ></a></td><td class="desc"></td></tr>
-<tr id="row_106_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00171.html" target="_self">tbb::interface5::internal::use_element_copy_constructor< T, C ></a></td><td class="desc"></td></tr>
-<tr id="row_107_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00172.html" target="_self">tbb::interface5::internal::use_element_copy_constructor< T, false ></a></td><td class="desc"></td></tr>
-<tr id="row_108_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00175.html" target="_self">tbb::vector_iterator< Container, Value ></a></td><td class="desc"></td></tr>
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00008.html" target="_self">__TBB_malloc_proxy_caller</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00010.html" target="_self">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor_not_used</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><img id="arr_2_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00013.html" target="_self">tbb::interface6::aggregator_operation</a></td><td class="desc"></td></tr>
+<tr id="row_2_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_2_0_" src="ftv2plastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('2_0_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00021.html" target="_self">tbb::interface6::internal::basic_operation_base</a></td><td class="desc"></td></tr>
+<tr id="row_2_0_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00020.html" target="_self">tbb::interface6::internal::basic_operation< Body ></a></td><td class="desc"></td></tr>
+<tr id="row_3_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00014.html" target="_self">tbb::aligned_space< T, N ></a></td><td class="desc">Block of space aligned sufficiently to construct an array T with N elements </td></tr>
+<tr id="row_4_" class="even"><td class="entry"><img id="arr_4_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('4_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>Allocator</b></td><td class="desc"></td></tr>
+<tr id="row_4_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00169.html" target="_self">tbb::zero_allocator< T, Allocator ></a></td><td class="desc">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
+<tr id="row_4_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00170.html" target="_self">tbb::zero_allocator< void, Allocator ></a></td><td class="desc">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
+<tr id="row_5_"><td class="entry"><img id="arr_5_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('5_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>allocator_base</b></td><td class="desc"></td></tr>
+<tr id="row_5_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00046.html" target="_self">tbb::concurrent_vector< padded_element, padded_allocator_type ></a></td><td class="desc"></td></tr>
+<tr id="row_5_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00046.html" target="_self">tbb::concurrent_vector< T, A ></a></td><td class="desc">Concurrent vector container </td></tr>
+<tr id="row_6_" class="even"><td class="entry"><img id="arr_6_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('6_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>async_msg</b></td><td class="desc"></td></tr>
+<tr id="row_6_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00053.html" target="_self">tbb::flow::interface9::dependency_msg< T, Factory ></a></td><td class="desc"></td></tr>
+<tr id="row_6_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00065.html" target="_self">tbb::flow::interface9::gfx_async_msg< T ></a></td><td class="desc"></td></tr>
+<tr id="row_7_"><td class="entry"><img id="arr_7_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('7_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>atomic_impl</b></td><td class="desc"></td></tr>
+<tr id="row_7_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00015.html" target="_self">tbb::atomic< internal::Token ></a></td><td class="desc"></td></tr>
+<tr id="row_7_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00015.html" target="_self">tbb::atomic< intptr_t ></a></td><td class="desc"></td></tr>
+<tr id="row_7_2_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00015.html" target="_self">tbb::atomic< state_t ></a></td><td class="desc"></td></tr>
+<tr id="row_7_3_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00015.html" target="_self">tbb::atomic< status_t ></a></td><td class="desc"></td></tr>
+<tr id="row_7_4_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00015.html" target="_self">tbb::atomic< tbb::flow::interface9::opencl_device::device_id_type ></a></td><td class="desc"></td></tr>
+<tr id="row_7_5_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00015.html" target="_self">tbb::atomic< tbb::interface5::reader_writer_lock::scoped_lock * ></a></td><td class="desc"></td></tr>
+<tr id="row_7_6_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00015.html" target="_self">tbb::atomic< tbb::interface5::reader_writer_lock::scoped_lock_read * ></a></td><td class="desc"></td></tr>
+<tr id="row_7_7_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00015.html" target="_self">tbb::atomic< tbb::interface6::aggregator_operation * ></a></td><td class="desc"></td></tr>
+<tr id="row_7_8_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00015.html" target="_self">tbb::atomic< tbb::queuing_mutex::scoped_lock * ></a></td><td class="desc"></td></tr>
+<tr id="row_7_9_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00015.html" target="_self">tbb::atomic< tbb::queuing_rw_mutex::scoped_lock * ></a></td><td class="desc"></td></tr>
+<tr id="row_7_10_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00015.html" target="_self">tbb::atomic< uintptr_t ></a></td><td class="desc"></td></tr>
+<tr id="row_7_11_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00015.html" target="_self">tbb::atomic< T ></a></td><td class="desc">Primary template for atomic </td></tr>
+<tr id="row_7_12_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00016.html" target="_self">tbb::atomic< void * ></a></td><td class="desc">Specialization for <a class="el" href="a00016.html" title="Specialization for atomic<void*>, for sake of not allowing arithmetic or oper [...]
+<tr id="row_8_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00017.html" target="_self">tbb::interface7::task_arena::attach</a></td><td class="desc">Tag class used to indicate the "attaching" constructor </td></tr>
+<tr id="row_9_"><td class="entry"><img id="arr_9_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('9_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>bad_alloc</b></td><td class="desc"></td></tr>
+<tr id="row_9_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00018.html" target="_self">tbb::bad_last_alloc</a></td><td class="desc">Exception for concurrent containers </td></tr>
+<tr id="row_10_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00019.html" target="_self">tbb::interface6::internal::basic_handler</a></td><td class="desc"></td></tr>
+<tr id="row_11_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00022.html" target="_self">tbb::blocked_range< Value ></a></td><td class="desc">A range over which to iterate </td></tr>
+<tr id="row_12_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00023.html" target="_self">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="desc">A 2-dimensional range that models the Range concept </td></tr>
+<tr id="row_13_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00024.html" target="_self">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="desc">A 3-dimensional range that models the Range concept </td></tr>
+<tr id="row_14_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00022.html" target="_self">tbb::blocked_range< ColValue ></a></td><td class="desc"></td></tr>
+<tr id="row_15_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00022.html" target="_self">tbb::blocked_range< I ></a></td><td class="desc"></td></tr>
+<tr id="row_16_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00022.html" target="_self">tbb::blocked_range< PageValue ></a></td><td class="desc"></td></tr>
+<tr id="row_17_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00022.html" target="_self">tbb::blocked_range< RowValue ></a></td><td class="desc"></td></tr>
+<tr id="row_18_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00025.html" target="_self">tbb::flow::interface9::internal::broadcast_cache< T, M ></a></td><td class="desc"></td></tr>
+<tr id="row_19_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00027.html" target="_self">tbb::cache_aligned_allocator< T ></a></td><td class="desc">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
+<tr id="row_20_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00028.html" target="_self">tbb::cache_aligned_allocator< void ></a></td><td class="desc">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
+<tr id="row_21_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00029.html" target="_self">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave</a></td><td class="desc"></td></tr>
+<tr id="row_22_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00033.html" target="_self">tbb::combinable< T ></a></td><td class="desc">Thread-local storage with optional reduction </td></tr>
+<tr id="row_23_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00034.html" target="_self">tbb::interface6::internal::concrete_filter< T, U, Body ></a></td><td class="desc"></td></tr>
+<tr id="row_24_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00038.html" target="_self">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="desc">Concurrent priority queue </td></tr>
+<tr id="row_25_"><td class="entry"><img id="arr_25_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('25_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>concurrent_queue_base_v3</b></td><td class="desc"></td></tr>
+<tr id="row_25_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00039.html" target="_self">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="desc">A high-performance thread-safe non-blocking concurrent queue </td></tr>
+<tr id="row_26_" class="even"><td class="entry"><img id="arr_26_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('26_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>concurrent_queue_base_v8</b></td><td class="desc"></td></tr>
+<tr id="row_26_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00035.html" target="_self">tbb::concurrent_bounded_queue< T, A ></a></td><td class="desc">A high-performance thread-safe blocking concurrent bounded queue </td></tr>
+<tr id="row_27_"><td class="entry"><img id="arr_27_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('27_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>concurrent_unordered_base</b></td><td class="desc"></td></tr>
+<tr id="row_27_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00040.html" target="_self">tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="desc"></td></tr>
+<tr id="row_27_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00042.html" target="_self">tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator ></a></td><td class="desc"></td></tr>
+<tr id="row_27_2_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00043.html" target="_self">tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator ></a></td><td class="desc"></td></tr>
+<tr id="row_27_3_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00044.html" target="_self">tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator ></a></td><td class="desc"></td></tr>
+<tr id="row_28_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00041.html" target="_self">tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="desc"></td></tr>
+<tr id="row_29_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00045.html" target="_self">tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping ></a></td><td class="desc"></td></tr>
+<tr id="row_30_" class="even"><td class="entry"><img id="arr_30_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('30_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>concurrent_vector_base</b></td><td class="desc"></td></tr>
+<tr id="row_30_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00046.html" target="_self">tbb::concurrent_vector< padded_element, padded_allocator_type ></a></td><td class="desc"></td></tr>
+<tr id="row_30_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00046.html" target="_self">tbb::concurrent_vector< T, A ></a></td><td class="desc">Concurrent vector container </td></tr>
+<tr id="row_31_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00048.html" target="_self">tbb::flow::interface9::continue_msg</a></td><td class="desc">An empty class used for messages that mean "I'm done" </td></tr>
+<tr id="row_32_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00052.html" target="_self">tbb::flow::interface9::default_opencl_factory_device_filter</a></td><td class="desc"></td></tr>
+<tr id="row_33_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00054.html" target="_self">tbb::flow::interface9::gfx_factory::device_type</a></td><td class="desc"></td></tr>
+<tr id="row_34_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00055.html" target="_self">tbb::flow::interface9::gfx_factory::dummy_device_selector</a></td><td class="desc"></td></tr>
+<tr id="row_35_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00056.html" target="_self">tbb::flow::interface9::internal::edge_container< C ></a></td><td class="desc"></td></tr>
+<tr id="row_36_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00056.html" target="_self">tbb::flow::interface9::internal::edge_container< predecessor_type ></a></td><td class="desc"></td></tr>
+<tr id="row_37_"><td class="entry"><img id="arr_37_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('37_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>ets_base</b></td><td class="desc"></td></tr>
+<tr id="row_37_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00058.html" target="_self">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="desc">The <a class="el" href="a00058.html" title="The enumerable_thread_specific container. ">en [...]
+<tr id="row_38_" class="even"><td class="entry"><img id="arr_38_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('38_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>exception</b></td><td class="desc"></td></tr>
+<tr id="row_38_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00071.html" target="_self">tbb::improper_lock</a></td><td class="desc">Exception for PPL locks </td></tr>
+<tr id="row_38_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00073.html" target="_self">tbb::invalid_multiple_scheduling</a></td><td class="desc">Exception for repeated scheduling of the same <a class="el" href="a00148.html">task_handle</a> </td></tr>
+<tr id="row_38_2_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00080.html" target="_self">tbb::missing_wait</a></td><td class="desc">Exception for missing wait on <a class="el" href="a00142.html">structured_task_group</a> </td></tr>
+<tr id="row_38_3_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_38_3_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('38_3_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00155.html" target="_self">tbb::tbb_exception</a></td><td class="desc">Interface to be implemented by all exceptions TBB recognizes and propagates across the threads </td></tr>
+<tr id="row_38_3_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00032.html" target="_self">tbb::captured_exception</a></td><td class="desc">This class is used by TBB to propagate information about unhandled exceptions into the root thread < [...]
+<tr id="row_38_3_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00081.html" target="_self">tbb::movable_exception< ExceptionData ></a></td><td class="desc">Template that can be used to implement exception that transfers arbitrary  [...]
+<tr id="row_38_4_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00168.html" target="_self">tbb::user_abort</a></td><td class="desc">Exception for user-initiated abort </td></tr>
+<tr id="row_39_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00060.html" target="_self">tbb::interface6::filter_t< T, U ></a></td><td class="desc">Class representing a chain of type-safe pipeline filters </td></tr>
+<tr id="row_40_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00061.html" target="_self">tbb::final_scan_tag</a></td><td class="desc">Used to indicate that the final scan is being performed </td></tr>
+<tr id="row_41_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00063.html" target="_self">tbb::interface6::flattened2d< Container ></a></td><td class="desc"></td></tr>
+<tr id="row_42_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00064.html" target="_self">tbb::interface6::flow_control</a></td><td class="desc">Input_filter control to signal end-of-input for parallel_pipeline </td></tr>
+<tr id="row_43_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00066.html" target="_self">tbb::flow::interface9::gfx_buffer< T ></a></td><td class="desc"></td></tr>
+<tr id="row_44_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00067.html" target="_self">tbb::flow::interface9::gfx_factory</a></td><td class="desc"></td></tr>
+<tr id="row_45_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00068.html" target="_self">tbb::interface9::global_control</a></td><td class="desc"></td></tr>
+<tr id="row_46_" class="even"><td class="entry"><img id="arr_46_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('46_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>graph</b></td><td class="desc"></td></tr>
+<tr id="row_46_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00093.html" target="_self">tbb::flow::interface9::opencl_graph</a></td><td class="desc"></td></tr>
+<tr id="row_47_"><td class="entry"><img id="arr_47_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('47_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00069.html" target="_self">tbb::flow::interface9::graph_proxy</a></td><td class="desc">Pure virtual template classes that define interfaces for async communication </td></tr>
+<tr id="row_47_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00120.html" target="_self">tbb::flow::interface9::receiver_gateway< Input ></a></td><td class="desc"></td></tr>
+<tr id="row_48_" class="even"><td class="entry"><img id="arr_48_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('48_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>hash_map_base</b></td><td class="desc"></td></tr>
+<tr id="row_48_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00036.html" target="_self">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="desc">Unordered map from Key to T </td></tr>
+<tr id="row_49_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00070.html" target="_self">tbb::internal::tbb_thread_v3::id</a></td><td class="desc"></td></tr>
+<tr id="row_50_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00072.html" target="_self">tbb::tick_count::interval_t</a></td><td class="desc">Relative time interval </td></tr>
+<tr id="row_51_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00075.html" target="_self">tbb::flow::interface9::limiter_node< T ></a></td><td class="desc"></td></tr>
+<tr id="row_52_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00077.html" target="_self">tbb::interface6::memory_pool_allocator< T, P ></a></td><td class="desc">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
+<tr id="row_53_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00078.html" target="_self">tbb::interface6::memory_pool_allocator< void, P ></a></td><td class="desc">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
+<tr id="row_54_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00079.html" target="_self">rml::MemPoolPolicy</a></td><td class="desc"></td></tr>
+<tr id="row_55_"><td class="entry"><img id="arr_55_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('55_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>mutex_copy_deprecated_and_disabled</b></td><td class="desc"></td></tr>
+<tr id="row_55_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00082.html" target="_self">tbb::mutex</a></td><td class="desc">Wrapper around the platform's native lock </td></tr>
+<tr id="row_55_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00084.html" target="_self">tbb::null_mutex</a></td><td class="desc">A mutex which does nothing </td></tr>
+<tr id="row_55_2_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00085.html" target="_self">tbb::null_rw_mutex</a></td><td class="desc">A rw mutex which does nothing </td></tr>
+<tr id="row_55_3_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00106.html" target="_self">tbb::queuing_mutex</a></td><td class="desc">Queuing mutex with local-only spinning </td></tr>
+<tr id="row_55_4_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00107.html" target="_self">tbb::queuing_rw_mutex</a></td><td class="desc">Queuing reader-writer mutex with local-only spinning </td></tr>
+<tr id="row_55_5_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00121.html" target="_self">tbb::recursive_mutex</a></td><td class="desc"></td></tr>
+<tr id="row_55_6_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00140.html" target="_self">tbb::spin_mutex</a></td><td class="desc">A lock that occupies a single byte </td></tr>
+<tr id="row_55_7_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00141.html" target="_self">tbb::spin_rw_mutex_v3</a></td><td class="desc">Fast, unfair, spinning reader-writer lock with backoff and writer-preference </td></tr>
+<tr id="row_56_" class="even"><td class="entry"><img id="arr_56_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('56_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>no_assign</b></td><td class="desc"></td></tr>
+<tr id="row_56_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00074.html" target="_self">tbb::flow::interface9::opencl_factory< DeviceFilter >::kernel</a></td><td class="desc"></td></tr>
+<tr id="row_56_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00092.html" target="_self">tbb::flow::interface9::opencl_foundation</a></td><td class="desc"></td></tr>
+<tr id="row_56_2_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00099.html" target="_self">tbb::flow::interface9::opencl_program< Factory ></a></td><td class="desc"></td></tr>
+<tr id="row_56_3_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00037.html" target="_self">tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type ></a></td><td class="desc"></td></tr>
+<tr id="row_56_4_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00148.html" target="_self">tbb::task_handle< F ></a></td><td class="desc"></td></tr>
+<tr id="row_57_"><td class="entry"><img id="arr_57_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('57_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>no_assign</b></td><td class="desc"></td></tr>
+<tr id="row_57_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00020.html" target="_self">tbb::interface6::internal::basic_operation< Body ></a></td><td class="desc"></td></tr>
+<tr id="row_58_" class="even"><td class="entry"><img id="arr_58_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('58_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>no_copy</b></td><td class="desc"></td></tr>
+<tr id="row_58_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_58_0_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('58_0_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00012.html" target="_self">tbb::interface6::aggregator_ext< internal::basic_handler ></a></td><td class="desc"></td></tr>
+<tr id="row_58_0_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00011.html" target="_self">tbb::interface6::aggregator</a></td><td class="desc">Basic aggregator interface </td></tr>
+<tr id="row_58_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00057.html" target="_self">tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard</a></td><td class="desc"></td></tr>
+<tr id="row_58_2_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_58_2_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('58_2_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00059.html" target="_self">tbb::filter</a></td><td class="desc">A stage in a pipeline </td></tr>
+<tr id="row_58_2_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00158.html" target="_self">tbb::thread_bound_filter</a></td><td class="desc">A stage in a pipeline served by a user thread </td></tr>
+<tr id="row_58_3_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_58_3_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('58_3_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00031.html" target="_self">tbb::flow::interface9::callback_base</a></td><td class="desc"></td></tr>
+<tr id="row_58_3_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00030.html" target="_self">tbb::flow::interface9::callback< Callback, T ></a></td><td class="desc"></td></tr>
+<tr id="row_58_4_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00108.html" target="_self">tbb::interface5::reader_writer_lock</a></td><td class="desc">Writer-preference reader-writer lock with local-only spinning on readers </td></tr>
+<tr id="row_58_5_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00132.html" target="_self">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class="desc">The scoped lock pattern for write locks </td></tr>
+<tr id="row_58_6_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00138.html" target="_self">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class="desc">The scoped lock pattern for read locks </td></tr>
+<tr id="row_58_7_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00012.html" target="_self">tbb::interface6::aggregator_ext< handler_type ></a></td><td class="desc">Aggregator base class and expert interface </td></tr>
+<tr id="row_58_8_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00125.html" target="_self">tbb::interface6::runtime_loader</a></td><td class="desc">Load TBB at runtime </td></tr>
+<tr id="row_58_9_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00050.html" target="_self">tbb::internal::critical_section_v4</a></td><td class="desc"></td></tr>
+<tr id="row_58_10_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00136.html" target="_self">tbb::internal::critical_section_v4::scoped_lock</a></td><td class="desc"></td></tr>
+<tr id="row_58_11_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_58_11_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('58_11_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00146.html" target="_self">tbb::internal::task_group_base</a></td><td class="desc"></td></tr>
+<tr id="row_58_11_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00142.html" target="_self">tbb::structured_task_group</a></td><td class="desc"></td></tr>
+<tr id="row_58_11_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00145.html" target="_self">tbb::task_group</a></td><td class="desc"></td></tr>
+<tr id="row_58_12_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00135.html" target="_self">tbb::mutex::scoped_lock</a></td><td class="desc">The scoped locking pattern </td></tr>
+<tr id="row_58_13_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00137.html" target="_self">tbb::null_mutex::scoped_lock</a></td><td class="desc">Represents acquisition of a mutex </td></tr>
+<tr id="row_58_14_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00129.html" target="_self">tbb::null_rw_mutex::scoped_lock</a></td><td class="desc">Represents acquisition of a mutex </td></tr>
+<tr id="row_58_15_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00102.html" target="_self">tbb::parallel_while< Body ></a></td><td class="desc">Parallel iteration over a stream, with optional addition of more work </td></tr>
+<tr id="row_58_16_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00128.html" target="_self">tbb::queuing_mutex::scoped_lock</a></td><td class="desc">The scoped locking pattern </td></tr>
+<tr id="row_58_17_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00131.html" target="_self">tbb::queuing_rw_mutex::scoped_lock</a></td><td class="desc">The scoped locking pattern </td></tr>
+<tr id="row_58_18_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00133.html" target="_self">tbb::recursive_mutex::scoped_lock</a></td><td class="desc">The scoped locking pattern </td></tr>
+<tr id="row_58_19_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00130.html" target="_self">tbb::spin_mutex::scoped_lock</a></td><td class="desc">Represents acquisition of a mutex </td></tr>
+<tr id="row_58_20_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00134.html" target="_self">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="desc">The scoped locking pattern </td></tr>
+<tr id="row_58_21_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00150.html" target="_self">tbb::task_scheduler_init</a></td><td class="desc">Class delimiting the scope of task scheduler activity </td></tr>
+<tr id="row_59_"><td class="entry"><img id="arr_59_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('59_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>node_base</b></td><td class="desc"></td></tr>
+<tr id="row_59_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00083.html" target="_self">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node</a></td><td class="desc"></td></tr>
+<tr id="row_60_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00086.html" target="_self">tbb::flow::interface9::null_type</a></td><td class="desc"></td></tr>
+<tr id="row_61_"><td class="entry"><img id="arr_61_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('61_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00087.html" target="_self">tbb::flow::interface9::opencl_buffer< T, Factory ></a></td><td class="desc"></td></tr>
+<tr id="row_61_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00101.html" target="_self">tbb::flow::interface9::opencl_subbuffer< T, Factory ></a></td><td class="desc"></td></tr>
+<tr id="row_62_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00089.html" target="_self">tbb::flow::interface9::opencl_device</a></td><td class="desc"></td></tr>
+<tr id="row_63_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00090.html" target="_self">tbb::flow::interface9::opencl_device_list</a></td><td class="desc"></td></tr>
+<tr id="row_64_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00091.html" target="_self">tbb::flow::interface9::opencl_factory< DeviceFilter ></a></td><td class="desc"></td></tr>
+<tr id="row_65_"><td class="entry"><img id="arr_65_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('65_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00091.html" target="_self">tbb::flow::interface9::opencl_factory< default_opencl_factory_device_filter ></a></td><td class="desc"></td></tr>
+<tr id="row_65_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00051.html" target="_self">tbb::flow::interface9::default_opencl_factory</a></td><td class="desc"></td></tr>
+<tr id="row_66_" class="even"><td class="entry"><img id="arr_66_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('66_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00094.html" target="_self">tbb::flow::interface9::opencl_memory< Factory ></a></td><td class="desc"></td></tr>
+<tr id="row_66_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00088.html" target="_self">tbb::flow::interface9::opencl_buffer_impl< Factory ></a></td><td class="desc"></td></tr>
+<tr id="row_67_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00095.html" target="_self">tbb::flow::interface9::opencl_node< Args ></a></td><td class="desc"></td></tr>
+<tr id="row_68_" class="even"><td class="entry"><img id="arr_68_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('68_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00095.html" target="_self">tbb::flow::interface9::opencl_node< tuple< Ports...>, JP, default_opencl_factory ></a></td><td class="desc"></td></tr>
+<tr id="row_68_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00097.html" target="_self">tbb::flow::interface9::opencl_node< tuple< Ports...>, JP ></a></td><td class="desc"></td></tr>
+<tr id="row_69_"><td class="entry"><img id="arr_69_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('69_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00095.html" target="_self">tbb::flow::interface9::opencl_node< tuple< Ports...>, queueing, default_opencl_factory ></a></td><td class="desc"></td></tr>
+<tr id="row_69_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00096.html" target="_self">tbb::flow::interface9::opencl_node< tuple< Ports...> ></a></td><td class="desc"></td></tr>
+<tr id="row_70_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00100.html" target="_self">tbb::flow::interface9::opencl_range</a></td><td class="desc"></td></tr>
+<tr id="row_71_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00103.html" target="_self">tbb::pipeline</a></td><td class="desc">A processing pipeline that applies filters to items </td></tr>
+<tr id="row_72_" class="even"><td class="entry"><img id="arr_72_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('72_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>pool_base</b></td><td class="desc"></td></tr>
+<tr id="row_72_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00062.html" target="_self">tbb::interface6::fixed_pool</a></td><td class="desc"></td></tr>
+<tr id="row_72_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00076.html" target="_self">tbb::interface6::memory_pool< Alloc ></a></td><td class="desc">Thread-safe growable pool allocator for variable-size requests </td></tr>
+<tr id="row_73_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00104.html" target="_self">tbb::pre_scan_tag</a></td><td class="desc">Used to indicate that the initial scan is being performed </td></tr>
+<tr id="row_74_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00105.html" target="_self">tbb::flow::interface9::internal::predecessor_cache< T, M ></a></td><td class="desc"></td></tr>
+<tr id="row_75_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00109.html" target="_self">tbb::cache_aligned_allocator< void >::rebind< U ></a></td><td class="desc"></td></tr>
+<tr id="row_76_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00110.html" target="_self">tbb::zero_allocator< T, Allocator >::rebind< U ></a></td><td class="desc"></td></tr>
+<tr id="row_77_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00111.html" target="_self">tbb::scalable_allocator< T >::rebind< U ></a></td><td class="desc"></td></tr>
+<tr id="row_78_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00112.html" target="_self">tbb::cache_aligned_allocator< T >::rebind< U ></a></td><td class="desc"></td></tr>
+<tr id="row_79_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00113.html" target="_self">tbb::tbb_allocator< T >::rebind< U ></a></td><td class="desc"></td></tr>
+<tr id="row_80_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00114.html" target="_self">tbb::tbb_allocator< void >::rebind< U ></a></td><td class="desc"></td></tr>
+<tr id="row_81_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00115.html" target="_self">tbb::scalable_allocator< void >::rebind< U ></a></td><td class="desc"></td></tr>
+<tr id="row_82_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00116.html" target="_self">tbb::interface6::memory_pool_allocator< T, P >::rebind< U ></a></td><td class="desc"></td></tr>
+<tr id="row_83_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00117.html" target="_self">tbb::zero_allocator< void, Allocator >::rebind< U ></a></td><td class="desc"></td></tr>
+<tr id="row_84_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00118.html" target="_self">tbb::interface6::memory_pool_allocator< void, P >::rebind< U ></a></td><td class="desc"></td></tr>
+<tr id="row_85_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00122.html" target="_self">tbb::flow::interface9::internal::reservable_predecessor_cache< T, M ></a></td><td class="desc"></td></tr>
+<tr id="row_86_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00123.html" target="_self">tbb::flow::interface9::internal::round_robin_cache< T, M ></a></td><td class="desc"></td></tr>
+<tr id="row_87_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00124.html" target="_self">tbb::flow::interface9::run_and_put_task< R, B ></a></td><td class="desc"></td></tr>
+<tr id="row_88_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00126.html" target="_self">tbb::scalable_allocator< T ></a></td><td class="desc">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
+<tr id="row_89_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00127.html" target="_self">tbb::scalable_allocator< void ></a></td><td class="desc">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
+<tr id="row_90_" class="even"><td class="entry"><img id="arr_90_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('90_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>scoped_t</b></td><td class="desc"></td></tr>
+<tr id="row_90_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_90_0_" src="ftv2plastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('90_0_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00047.html" target="_self">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="desc">Combines data access, locking, and garbage collecti [...]
+<tr id="row_90_0_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00009.html" target="_self">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a></td><td class="desc">Allows write access to elements and com [...]
+<tr id="row_91_"><td class="entry"><img id="arr_91_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('91_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>scoped_t</b></td><td class="desc"></td></tr>
+<tr id="row_91_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00026.html" target="_self">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor</a></td><td class="desc">Bucket accessor is to find, rehash, acquire a lock, and access a bucket </td></tr>
+<tr id="row_92_" class="even"><td class="entry"><img id="arr_92_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('92_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>streaming_node</b></td><td class="desc"></td></tr>
+<tr id="row_92_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00098.html" target="_self">tbb::flow::interface9::opencl_node< tuple< Ports...>, JP, Factory ></a></td><td class="desc"></td></tr>
+<tr id="row_93_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00143.html" target="_self">tbb::flow::interface9::internal::successor_cache< T, M ></a></td><td class="desc"></td></tr>
+<tr id="row_94_" class="even"><td class="entry"><img id="arr_94_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('94_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>task</b></td><td class="desc"></td></tr>
+<tr id="row_94_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00149.html" target="_self">tbb::internal::task_handle_task< F ></a></td><td class="desc"></td></tr>
+<tr id="row_95_"><td class="entry"><img id="arr_95_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('95_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><b>task_arena_base</b></td><td class="desc"></td></tr>
+<tr id="row_95_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00144.html" target="_self">tbb::interface7::task_arena</a></td><td class="desc"></td></tr>
+<tr id="row_96_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00147.html" target="_self">tbb::task_group_context</a></td><td class="desc"></td></tr>
+<tr id="row_97_"><td class="entry"><img id="arr_97_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('97_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00152.html" target="_self">tbb::internal::task_scheduler_observer_v3</a></td><td class="desc"></td></tr>
+<tr id="row_97_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00151.html" target="_self">tbb::interface6::task_scheduler_observer</a></td><td class="desc"></td></tr>
+<tr id="row_98_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00153.html" target="_self">tbb::tbb_allocator< T ></a></td><td class="desc">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
+<tr id="row_99_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00154.html" target="_self">tbb::tbb_allocator< void ></a></td><td class="desc">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
+<tr id="row_100_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00156.html" target="_self">tbb::internal::tbb_exception_ptr</a></td><td class="desc">Exception container that preserves the exact copy of the original exception </td></tr>
+<tr id="row_101_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00157.html" target="_self">tbb::internal::tbb_thread_v3</a></td><td class="desc">Versioned thread class </td></tr>
+<tr id="row_102_" class="even"><td class="entry"><img id="arr_102_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('102_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00162.html" target="_self">tbb::internal::thread_closure_base</a></td><td class="desc"></td></tr>
+<tr id="row_102_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00159.html" target="_self">tbb::internal::thread_closure_0< F ></a></td><td class="desc"></td></tr>
+<tr id="row_102_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00160.html" target="_self">tbb::internal::thread_closure_1< F, X ></a></td><td class="desc">Structure used to pass user function with 1 argument to thread </td></tr>
+<tr id="row_102_2_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00161.html" target="_self">tbb::internal::thread_closure_2< F, X, Y ></a></td><td class="desc"></td></tr>
+<tr id="row_103_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00163.html" target="_self">tbb::tick_count</a></td><td class="desc">Absolute timestamp </td></tr>
+<tr id="row_104_" class="even"><td class="entry"><img id="arr_104_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('104_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00164.html" target="_self">tbb::flow::interface9::internal::untyped_receiver</a></td><td class="desc"></td></tr>
+<tr id="row_104_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_104_0_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('104_0_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00119.html" target="_self">tbb::flow::interface9::receiver< continue_msg ></a></td><td class="desc"></td></tr>
+<tr id="row_104_0_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00049.html" target="_self">tbb::flow::interface9::continue_receiver</a></td><td class="desc">Base class for receivers of completion messages </td></tr>
+<tr id="row_104_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00119.html" target="_self">tbb::flow::interface9::receiver< T ></a></td><td class="desc">Pure virtual template class that defines a receiver of messages of type T </td></tr>
+<tr id="row_105_"><td class="entry"><img id="arr_105_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('105_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00165.html" target="_self">tbb::flow::interface9::internal::untyped_sender</a></td><td class="desc"></td></tr>
+<tr id="row_105_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00139.html" target="_self">tbb::flow::interface9::sender< T ></a></td><td class="desc">Pure virtual template class that defines a sender of messages of type T </td></tr>
+<tr id="row_106_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00166.html" target="_self">tbb::interface5::internal::use_element_copy_constructor< T, C ></a></td><td class="desc"></td></tr>
+<tr id="row_107_"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="a00167.html" target="_self">tbb::interface5::internal::use_element_copy_constructor< T, false ></a></td><td class="desc"></td></tr>
 </table>
 </div><!-- directory -->
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/index.html b/doc/html/index.html
index 7ca7590..8bd9b09 100644
--- a/doc/html/index.html
+++ b/doc/html/index.html
@@ -39,12 +39,12 @@
 <p>Please note that significant part of TBB functionality is implemented in the form of template functions, descriptions of which are not accessible on the <a href="./annotated.html">Classes</a> tab. Use <a href="./modules.html">Modules</a> or <a href="./namespacemembers.html">Namespace/Namespace Members</a> tabs to find them.</p>
 <p>Additional pieces of information can be found here</p>
 <ul>
-<li><a class="el" href="a00008.html">TBB concepts</a></li>
+<li><a class="el" href="a00007.html">TBB concepts</a></li>
 </ul>
 </div></div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/modules.html b/doc/html/modules.html
index f2da163..da1a790 100644
--- a/doc/html/modules.html
+++ b/doc/html/modules.html
@@ -32,18 +32,18 @@
 <div class="contents">
 <div class="textblock">Here is a list of all modules:</div><div class="directory">
 <table class="directory">
-<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="a00255.html" target="_self">Algorithms</a></td><td class="desc"></td></tr>
-<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="a00256.html" target="_self">Containers</a></td><td class="desc"></td></tr>
-<tr id="row_2_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="a00257.html" target="_self">Memory Allocation</a></td><td class="desc"></td></tr>
-<tr id="row_3_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="a00258.html" target="_self">Synchronization</a></td><td class="desc"></td></tr>
-<tr id="row_4_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="a00259.html" target="_self">Timing</a></td><td class="desc"></td></tr>
-<tr id="row_5_"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="a00260.html" target="_self">Task Scheduling</a></td><td class="desc"></td></tr>
+<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="a00252.html" target="_self">Algorithms</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="a00253.html" target="_self">Containers</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="a00254.html" target="_self">Memory Allocation</a></td><td class="desc"></td></tr>
+<tr id="row_3_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="a00255.html" target="_self">Synchronization</a></td><td class="desc"></td></tr>
+<tr id="row_4_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="a00256.html" target="_self">Timing</a></td><td class="desc"></td></tr>
+<tr id="row_5_"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="a00257.html" target="_self">Task Scheduling</a></td><td class="desc"></td></tr>
 </table>
 </div><!-- directory -->
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/namespacemembers.html b/doc/html/namespacemembers.html
index 9104177..b2aff4c 100644
--- a/doc/html/namespacemembers.html
+++ b/doc/html/namespacemembers.html
@@ -58,96 +58,93 @@
 
 <h3><a class="anchor" id="index__"></a>- _ -</h3><ul>
 <li>__TBB_DECL_ATOMIC_ALT()
-: <a class="el" href="a00240.html#a59425abdcb421136e9f5954cfb975e5f">tbb</a>
+: <a class="el" href="a00233.html#a59425abdcb421136e9f5954cfb975e5f">tbb</a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
 <li>acquire
-: <a class="el" href="a00240.html#adb86d08473679d6fe0eabcdc766ffe3aaa92646b4dc7618530d3a9f51dd10a418">tbb</a>
+: <a class="el" href="a00233.html#adb86d08473679d6fe0eabcdc766ffe3aaa92646b4dc7618530d3a9f51dd10a418">tbb</a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
 <li>ets_key_usage_type
-: <a class="el" href="a00240.html#ac5bcb6154c8307fa9f97806afddf2288">tbb</a>
+: <a class="el" href="a00233.html#ac5bcb6154c8307fa9f97806afddf2288">tbb</a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
 <li>full_fence
-: <a class="el" href="a00240.html#adb86d08473679d6fe0eabcdc766ffe3aa6a315190cf4509ec388ecb423432f36a">tbb</a>
+: <a class="el" href="a00233.html#adb86d08473679d6fe0eabcdc766ffe3aa6a315190cf4509ec388ecb423432f36a">tbb</a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
 <li>memory_semantics
-: <a class="el" href="a00240.html#adb86d08473679d6fe0eabcdc766ffe3a">tbb</a>
+: <a class="el" href="a00233.html#adb86d08473679d6fe0eabcdc766ffe3a">tbb</a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
 <li>parallel_deterministic_reduce()
-: <a class="el" href="a00255.html#ga1fd7e3c43592dfe1ae3e3572bd80d4f6">tbb</a>
-</li>
-<li>parallel_do()
-: <a class="el" href="a00255.html#ga533f6732498ade8634a9470cbf89192d">tbb</a>
+: <a class="el" href="a00252.html#ga1fd7e3c43592dfe1ae3e3572bd80d4f6">tbb</a>
 </li>
 <li>parallel_for()
-: <a class="el" href="a00255.html#ga9722d2bc7e5edb4fae9f3b55268a1ecc">tbb</a>
+: <a class="el" href="a00252.html#ga14ae8670bd55620f906aa06e073bd225">tbb</a>
 </li>
 <li>parallel_for_each()
-: <a class="el" href="a00255.html#ga72131543fd218b67dbb048b768d534e4">tbb</a>
+: <a class="el" href="a00252.html#ga72131543fd218b67dbb048b768d534e4">tbb</a>
 </li>
 <li>parallel_invoke()
-: <a class="el" href="a00255.html#ga3c6fe4bf1076c82132e666fb545451cd">tbb</a>
+: <a class="el" href="a00252.html#ga3c6fe4bf1076c82132e666fb545451cd">tbb</a>
 </li>
 <li>parallel_reduce()
-: <a class="el" href="a00255.html#gac26c35d1983e7ac2ab003cc8e49dd7e6">tbb</a>
+: <a class="el" href="a00252.html#gaf049e6d185c38c2d9e153b0edd3a9015">tbb</a>
 </li>
 <li>parallel_scan()
-: <a class="el" href="a00255.html#ga3548041731b7fa14f30f155541ceebb9">tbb</a>
+: <a class="el" href="a00252.html#ga3548041731b7fa14f30f155541ceebb9">tbb</a>
 </li>
 <li>parallel_sort()
-: <a class="el" href="a00255.html#ga541b2fd91e88842a7b823161107779e9">tbb</a>
+: <a class="el" href="a00252.html#ga73b58ac9249f49587d0b081c152af551">tbb</a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
 <li>relaxed
-: <a class="el" href="a00240.html#adb86d08473679d6fe0eabcdc766ffe3aa73cb2e2bcb94442b8b2b72e93a76f2e5">tbb</a>
+: <a class="el" href="a00233.html#adb86d08473679d6fe0eabcdc766ffe3aa73cb2e2bcb94442b8b2b72e93a76f2e5">tbb</a>
 </li>
 <li>release
-: <a class="el" href="a00240.html#adb86d08473679d6fe0eabcdc766ffe3aa412563418e657114a102db610f726632">tbb</a>
+: <a class="el" href="a00233.html#adb86d08473679d6fe0eabcdc766ffe3aa412563418e657114a102db610f726632">tbb</a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
 <li>speculative_spin_mutex
-: <a class="el" href="a00258.html#ga69722571e9e4406693c4a1379f0b47eb">tbb</a>
+: <a class="el" href="a00255.html#ga69722571e9e4406693c4a1379f0b47eb">tbb</a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
 <li>TBB_runtime_interface_version()
-: <a class="el" href="a00240.html#ade8a8bc300d5ef09d38cbfb8baff5cd2">tbb</a>
+: <a class="el" href="a00233.html#ade8a8bc300d5ef09d38cbfb8baff5cd2">tbb</a>
 </li>
 <li>tbb_thread
-: <a class="el" href="a00240.html#a7805ca254302ff88b566f7dcde7e56b0">tbb</a>
+: <a class="el" href="a00233.html#a7805ca254302ff88b566f7dcde7e56b0">tbb</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/namespacemembers_enum.html b/doc/html/namespacemembers_enum.html
index 3ec2d2e..1c30206 100644
--- a/doc/html/namespacemembers_enum.html
+++ b/doc/html/namespacemembers_enum.html
@@ -43,16 +43,16 @@
 <div class="contents">
  <ul>
 <li>ets_key_usage_type
-: <a class="el" href="a00240.html#ac5bcb6154c8307fa9f97806afddf2288">tbb</a>
+: <a class="el" href="a00233.html#ac5bcb6154c8307fa9f97806afddf2288">tbb</a>
 </li>
 <li>memory_semantics
-: <a class="el" href="a00240.html#adb86d08473679d6fe0eabcdc766ffe3a">tbb</a>
+: <a class="el" href="a00233.html#adb86d08473679d6fe0eabcdc766ffe3a">tbb</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/namespacemembers_eval.html b/doc/html/namespacemembers_eval.html
index 7cfc43f..c880d9f 100644
--- a/doc/html/namespacemembers_eval.html
+++ b/doc/html/namespacemembers_eval.html
@@ -43,22 +43,22 @@
 <div class="contents">
  <ul>
 <li>acquire
-: <a class="el" href="a00240.html#adb86d08473679d6fe0eabcdc766ffe3aaa92646b4dc7618530d3a9f51dd10a418">tbb</a>
+: <a class="el" href="a00233.html#adb86d08473679d6fe0eabcdc766ffe3aaa92646b4dc7618530d3a9f51dd10a418">tbb</a>
 </li>
 <li>full_fence
-: <a class="el" href="a00240.html#adb86d08473679d6fe0eabcdc766ffe3aa6a315190cf4509ec388ecb423432f36a">tbb</a>
+: <a class="el" href="a00233.html#adb86d08473679d6fe0eabcdc766ffe3aa6a315190cf4509ec388ecb423432f36a">tbb</a>
 </li>
 <li>relaxed
-: <a class="el" href="a00240.html#adb86d08473679d6fe0eabcdc766ffe3aa73cb2e2bcb94442b8b2b72e93a76f2e5">tbb</a>
+: <a class="el" href="a00233.html#adb86d08473679d6fe0eabcdc766ffe3aa73cb2e2bcb94442b8b2b72e93a76f2e5">tbb</a>
 </li>
 <li>release
-: <a class="el" href="a00240.html#adb86d08473679d6fe0eabcdc766ffe3aa412563418e657114a102db610f726632">tbb</a>
+: <a class="el" href="a00233.html#adb86d08473679d6fe0eabcdc766ffe3aa412563418e657114a102db610f726632">tbb</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/namespacemembers_func.html b/doc/html/namespacemembers_func.html
index d5cecfa..7ad5b9b 100644
--- a/doc/html/namespacemembers_func.html
+++ b/doc/html/namespacemembers_func.html
@@ -52,48 +52,45 @@
 
 <h3><a class="anchor" id="index__"></a>- _ -</h3><ul>
 <li>__TBB_DECL_ATOMIC_ALT()
-: <a class="el" href="a00240.html#a59425abdcb421136e9f5954cfb975e5f">tbb</a>
+: <a class="el" href="a00233.html#a59425abdcb421136e9f5954cfb975e5f">tbb</a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
 <li>parallel_deterministic_reduce()
-: <a class="el" href="a00255.html#ga1fd7e3c43592dfe1ae3e3572bd80d4f6">tbb</a>
-</li>
-<li>parallel_do()
-: <a class="el" href="a00255.html#ga533f6732498ade8634a9470cbf89192d">tbb</a>
+: <a class="el" href="a00252.html#ga1fd7e3c43592dfe1ae3e3572bd80d4f6">tbb</a>
 </li>
 <li>parallel_for()
-: <a class="el" href="a00255.html#ga9722d2bc7e5edb4fae9f3b55268a1ecc">tbb</a>
+: <a class="el" href="a00252.html#ga14ae8670bd55620f906aa06e073bd225">tbb</a>
 </li>
 <li>parallel_for_each()
-: <a class="el" href="a00255.html#ga72131543fd218b67dbb048b768d534e4">tbb</a>
+: <a class="el" href="a00252.html#ga72131543fd218b67dbb048b768d534e4">tbb</a>
 </li>
 <li>parallel_invoke()
-: <a class="el" href="a00255.html#ga3c6fe4bf1076c82132e666fb545451cd">tbb</a>
+: <a class="el" href="a00252.html#ga3c6fe4bf1076c82132e666fb545451cd">tbb</a>
 </li>
 <li>parallel_reduce()
-: <a class="el" href="a00255.html#gac26c35d1983e7ac2ab003cc8e49dd7e6">tbb</a>
+: <a class="el" href="a00252.html#gaf049e6d185c38c2d9e153b0edd3a9015">tbb</a>
 </li>
 <li>parallel_scan()
-: <a class="el" href="a00255.html#ga3548041731b7fa14f30f155541ceebb9">tbb</a>
+: <a class="el" href="a00252.html#ga3548041731b7fa14f30f155541ceebb9">tbb</a>
 </li>
 <li>parallel_sort()
-: <a class="el" href="a00255.html#ga541b2fd91e88842a7b823161107779e9">tbb</a>
+: <a class="el" href="a00252.html#ga73b58ac9249f49587d0b081c152af551">tbb</a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
 <li>TBB_runtime_interface_version()
-: <a class="el" href="a00240.html#ade8a8bc300d5ef09d38cbfb8baff5cd2">tbb</a>
+: <a class="el" href="a00233.html#ade8a8bc300d5ef09d38cbfb8baff5cd2">tbb</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/namespacemembers_type.html b/doc/html/namespacemembers_type.html
index d26566a..3b287d0 100644
--- a/doc/html/namespacemembers_type.html
+++ b/doc/html/namespacemembers_type.html
@@ -43,16 +43,16 @@
 <div class="contents">
  <ul>
 <li>speculative_spin_mutex
-: <a class="el" href="a00258.html#ga69722571e9e4406693c4a1379f0b47eb">tbb</a>
+: <a class="el" href="a00255.html#ga69722571e9e4406693c4a1379f0b47eb">tbb</a>
 </li>
 <li>tbb_thread
-: <a class="el" href="a00240.html#a7805ca254302ff88b566f7dcde7e56b0">tbb</a>
+: <a class="el" href="a00233.html#a7805ca254302ff88b566f7dcde7e56b0">tbb</a>
 </li>
 </ul>
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/namespaces.html b/doc/html/namespaces.html
index 592e176..e02ff93 100644
--- a/doc/html/namespaces.html
+++ b/doc/html/namespaces.html
@@ -38,14 +38,14 @@
 <div class="contents">
 <div class="textblock">Here is a list of all documented namespaces with brief descriptions:</div><div class="directory">
 <table class="directory">
-<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2ns.png" alt="N" width="24" height="22" /><a class="el" href="a00237.html" target="_self">rml</a></td><td class="desc">The namespace rml contains components of low-level memory pool interface </td></tr>
-<tr id="row_1_"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2ns.png" alt="N" width="24" height="22" /><a class="el" href="a00240.html" target="_self">tbb</a></td><td class="desc">The namespace tbb contains all components of the library </td></tr>
+<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2ns.png" alt="N" width="24" height="22" /><a class="el" href="a00230.html" target="_self">rml</a></td><td class="desc">The namespace rml contains components of low-level memory pool interface </td></tr>
+<tr id="row_1_"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2ns.png" alt="N" width="24" height="22" /><a class="el" href="a00233.html" target="_self">tbb</a></td><td class="desc">The namespace tbb contains all components of the library </td></tr>
 </table>
 </div><!-- directory -->
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/pages.html b/doc/html/pages.html
index 843ac8b..f8d6fa5 100644
--- a/doc/html/pages.html
+++ b/doc/html/pages.html
@@ -32,13 +32,13 @@
 <div class="contents">
 <div class="textblock">Here is a list of all related documentation pages:</div><div class="directory">
 <table class="directory">
-<tr id="row_0_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="a00005.html" target="_self">Requirements on parallel_reduce anonymous function objects (lambda functions)</a></td><td class="desc"></td></tr>
+<tr id="row_0_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="a00004.html" target="_self">Requirements on parallel_reduce anonymous function objects (lambda functions)</a></td><td class="desc"></td></tr>
 </table>
 </div><!-- directory -->
 </div><!-- contents -->
 <hr>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/GettingStarted/index.html b/examples/GettingStarted/index.html
index 2aaeaba..c3f882b 100644
--- a/examples/GettingStarted/index.html
+++ b/examples/GettingStarted/index.html
@@ -1,24 +1,344 @@
-<HTML>
-<BODY>
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
 
-<H2>Overview</H2>
-This directory contains the examples referenced by the Intel® Threading Building Blocks Getting Started Guide. 
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
 
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="sub_string_finder/index.html">sub_string_finder</A>
-<DD>Finds largest matching substrings.
-</DL>
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Getting Started Samples</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Getting Started Samples</h1>
+	</div>
+	
+	<p>
+		This directory contains the examples referenced by the Intel® Threading Building Blocks <a href="http://software.intel.com/en-us/tbb-tutorial">Getting Started Guide</a>.
+	</p>
 
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="sub_string_finder/readme.html">sub_string_finder</a>
+				<dd>Finds largest matching substrings.
+			</dl>
+		</div>
+	</div>
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information:</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>
+</body>
+</html>
 
diff --git a/examples/GettingStarted/sub_string_finder/Makefile b/examples/GettingStarted/sub_string_finder/Makefile
index c1a91e2..6baf3b8 100644
--- a/examples/GettingStarted/sub_string_finder/Makefile
+++ b/examples/GettingStarted/sub_string_finder/Makefile
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # GNU Makefile that builds and runs example.
 run_cmd=
@@ -30,11 +30,11 @@ endif # icc
 TBBLIB = -ltbb
 TBBLIB_DEBUG = -ltbb_debug
 
-ifeq ($(offload), mic)
-override CXXFLAGS += -opt-report-phase:offload -D__TBB_MIC_OFFLOAD=1
+ifneq (,$(findstring mic, $(offload)))
+override CXXFLAGS += -qoffload-arch=$(offload) -qopt-report-phase:offload -D__TBB_MIC_OFFLOAD=1
 # Replace -ltbb with -tbb in the offload mode
 TBBLIB = -tbb
-TBBLIB_DEBUG += -offload-option,mic,ld,"-ltbb_debug"
+TBBLIB_DEBUG += -qoffload-option,mic,ld,"-ltbb_debug"
 endif
 
 ifeq ($(shell uname), Linux)
@@ -44,6 +44,8 @@ run_cmd=../../common/android.linux.launcher.sh
 else
 LIBS+= -lrt 
 endif
+else ifeq ($(shell uname), Darwin)
+override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib
 endif
 
 all:	release test
diff --git a/examples/GettingStarted/sub_string_finder/Makefile.windows b/examples/GettingStarted/sub_string_finder/Makefile.windows
index b3bc58b..d5e1a0e 100644
--- a/examples/GettingStarted/sub_string_finder/Makefile.windows
+++ b/examples/GettingStarted/sub_string_finder/Makefile.windows
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # Common Makefile that builds and runs examples.
 PROG=sub_string_finder_extended
@@ -27,11 +27,17 @@ CXX1 = $(TBB_CXX)-
 CXX2 = $(CXX1:icl.exe-=icl.exe)
 CXX  = $(CXX2:-=cl.exe)
 
-MYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 $(offload:mic=/D__TBB_MIC_OFFLOAD /Qdiag-disable:3335,3440,3441) $(CXXFLAGS)
+offload1 = $(offload)+
+OFFLOADFLAGS1 = $(offload1:mic+=/Qoffload-arch=mic)
+OFFLOADFLAGS2 = $(OFFLOADFLAGS1:mic-avx512+=/Qoffload-arch=mic-avx512)
+offload2 = $(offload:mic-avx512=mic)
+OFFLOADFLAGS = $(OFFLOADFLAGS2:+=) $(offload2:mic=/D__TBB_MIC_OFFLOAD /Qdiag-disable:3335,3440,3441)
+
+MYCXXFLAGS = /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 $(OFFLOADFLAGS) $(CXXFLAGS)
 MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
 
-TBB_MIC_LIB = $(offload:mic=/Qtbb)
-TBB_DEBUG_MIC_LIB = $(offload:mic=/Qoffload-option,mic,link,"-ltbb_debug")
+TBB_MIC_LIB = $(offload2:mic=/Qtbb)
+TBB_DEBUG_MIC_LIB = $(offload2:mic=/Qoffload-option,mic,link,"-ltbb_debug")
 
 all: release test
 release: compiler_check
diff --git a/examples/GettingStarted/sub_string_finder/index.html b/examples/GettingStarted/sub_string_finder/index.html
deleted file mode 100644
index f33a41f..0000000
--- a/examples/GettingStarted/sub_string_finder/index.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<HTML>
-<BODY>
-
-<H2>Overview</H2>
-<DL>
-<DT>A simple example that uses the parallel_for template in a substring matching program. For each position 
-in a string, the program displays the length of the largest matching substring elsewhere in the string. 
-The program also displays the location of a largest match for each position.  Consider the string "babba" 
-as an example. Starting at position 0, "ba" is the largest substring with a match elsewhere in the 
-string (position 3). 
-<DT>The code located in the <A HREF="sub_string_finder_extended.cpp">sub_string_finder_extended.cpp</A> file 
-demonstrates offload programming for Intel&reg Many Integrated Core (Intel&reg MIC) Architecture (see <A HREF=../../index.html#build_4>build instructions</A>).
-</DL>
-
-<H2>Files</H2>
-<DL>
-<DT><A HREF="sub_string_finder.cpp">sub_string_finder.cpp</A>
-<DD>The example as it appears in the Getting Started Guide.
-<DT><A HREF="sub_string_finder_extended.cpp">sub_string_finder_extended.cpp</A>
-<DD>An example similar to the one in the Getting Started Guide, but with an added sequential
-    implementation, and with an offload region added that can be executed on Intel&reg MIC Architecture based coprocessor.
-    The three implementations are timed, by using tick_count,
-    and the speedup of the parallel version and 
-    the speedup of the parallel version and, if applicable, the offload version is calculated and displayed.
-<DT><A HREF="sub_string_finder_pretty.cpp">sub_string_finder_pretty.cpp</A>
-<DD>An example similar to the one in the Getting Started Guide, but with more attractive printing of the results.
-<DT><A HREF="Makefile">Makefile</A>
-<DD>Makefile for building example.
-</DL>
-
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2010 workspace for building and running the example (Windows* systems only).
-<DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example (OS X* systems only).
-</DL>
-
-<H2>To Build</H2>
-General build directions can be found <A HREF=../../index.html#build>here</A>.
-
-<H2>Usage</H2>
-<DL>
-<DT><TT>sub_string_finder</TT>
-<DD>Runs the example as it appears in the Getting Started Guide.
-<DT><TT>sub_string_finder_pretty</TT>
-<DD>Runs the similar example with more attractive printing of the results.
-<DT><TT>sub_string_finder_extended</TT>
-<DD>Runs the example extended with a sequential implementation and an offload region that can be executed on Intel&reg MIC Architecture based coprocessor.
-<DT>To run a short version of this example, e.g., for use with Intel® Threading Tools:
-<DD>Build a <I>debug</I> version of the <TT>sub_string_finder_pretty</TT> example
-    (see the <A HREF=../../index.html#build>build directions</A>).
-    <BR>Run it, e.g., <TT>sub_string_finder_pretty</TT>.
-</DL>
-
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
-
diff --git a/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder.sln b/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder.sln
index 9120fb6..b70cffa 100644
--- a/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder.sln
+++ b/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder.sln
@@ -1,46 +1,46 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sub_string_finder", "sub_string_finder.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A2525}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sub_string_finder_extended", "sub_string_finder_extended.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A2526}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sub_string_finder_pretty", "sub_string_finder_pretty.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A2524}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
-		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|Win32.ActiveCfg = Debug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|Win32.Build.0 = Debug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|x64.ActiveCfg = Debug|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|x64.Build.0 = Debug|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|Win32.ActiveCfg = Release|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|Win32.Build.0 = Release|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|x64.ActiveCfg = Release|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|x64.Build.0 = Release|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|Win32.ActiveCfg = Debug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|Win32.Build.0 = Debug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|x64.ActiveCfg = Debug|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|x64.Build.0 = Debug|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|Win32.ActiveCfg = Release|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|Win32.Build.0 = Release|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|x64.ActiveCfg = Release|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|x64.Build.0 = Release|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|Win32.ActiveCfg = Debug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|Win32.Build.0 = Debug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|x64.ActiveCfg = Debug|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|x64.Build.0 = Debug|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|Win32.ActiveCfg = Release|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|Win32.Build.0 = Release|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|x64.ActiveCfg = Release|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|x64.Build.0 = Release|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sub_string_finder", "sub_string_finder.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A2525}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sub_string_finder_extended", "sub_string_finder_extended.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A2526}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sub_string_finder_pretty", "sub_string_finder_pretty.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A2524}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|Win32.ActiveCfg = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|Win32.Build.0 = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|x64.ActiveCfg = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|x64.Build.0 = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|Win32.ActiveCfg = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|Win32.Build.0 = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|x64.ActiveCfg = Release|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|x64.Build.0 = Release|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|Win32.ActiveCfg = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|Win32.Build.0 = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|x64.ActiveCfg = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|x64.Build.0 = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|Win32.ActiveCfg = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|Win32.Build.0 = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|x64.ActiveCfg = Release|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|x64.Build.0 = Release|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|Win32.ActiveCfg = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|Win32.Build.0 = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|x64.ActiveCfg = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|x64.Build.0 = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|Win32.ActiveCfg = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|Win32.Build.0 = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|x64.ActiveCfg = Release|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder.vcxproj b/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder.vcxproj
index 4a5f943..f6b8201 100644
--- a/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder.vcxproj
+++ b/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder.vcxproj
@@ -1,194 +1,198 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>sub_string_finder</ProjectName>
-    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A2525}</ProjectGuid>
-    <RootNamespace>sub_string_finder</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <Import Project="..\..\..\common\toolset.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\sub_string_finder.cpp" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>sub_string_finder</ProjectName>
+    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A2525}</ProjectGuid>
+    <RootNamespace>sub_string_finder</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\sub_string_finder.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder_extended.vcxproj b/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder_extended.vcxproj
index 3324d7c..b0047a2 100644
--- a/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder_extended.vcxproj
+++ b/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder_extended.vcxproj
@@ -1,194 +1,198 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>sub_string_finder_extended</ProjectName>
-    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A2526}</ProjectGuid>
-    <RootNamespace>sub_string_finder_extended</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <Import Project="..\..\..\common\toolset.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\sub_string_finder_extended.cpp" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>sub_string_finder_extended</ProjectName>
+    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A2526}</ProjectGuid>
+    <RootNamespace>sub_string_finder_extended</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\sub_string_finder_extended.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder_pretty.vcxproj b/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder_pretty.vcxproj
index d599556..4a18d8a 100644
--- a/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder_pretty.vcxproj
+++ b/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder_pretty.vcxproj
@@ -1,194 +1,198 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>sub_string_finder_pretty</ProjectName>
-    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A2524}</ProjectGuid>
-    <RootNamespace>sub_string_finder_pretty</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <Import Project="..\..\..\common\toolset.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\sub_string_finder_pretty.cpp" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>sub_string_finder_pretty</ProjectName>
+    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A2524}</ProjectGuid>
+    <RootNamespace>sub_string_finder_pretty</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\sub_string_finder_pretty.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/examples/GettingStarted/sub_string_finder/readme.html b/examples/GettingStarted/sub_string_finder/readme.html
new file mode 100644
index 0000000..c726ab5
--- /dev/null
+++ b/examples/GettingStarted/sub_string_finder/readme.html
@@ -0,0 +1,416 @@
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
+
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
+
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Sub_string_finder sample</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Sub_string_finder sample</h1>
+	</div>
+
+	<p>
+		A simple example that uses the parallel_for template in a substring matching program.
+		The Intel® Threading Building Blocks <a href="http://software.intel.com/en-us/tbb-tutorial">Getting Started Guide</a> describes this example.
+	<br><br>
+		For each position 
+		in a string, the program displays the length of the largest matching substring elsewhere in the string. 
+		The program also displays the location of a largest match for each position.  Consider the string "babba" 
+		as an example. Starting at position 0, "ba" is the largest substring with a match elsewhere in the 
+		string (position 3). 
+	<br><br>
+		The code located in the <a href="sub_string_finder_extended.cpp">sub_string_finder_extended.cpp</a> file 
+		demonstrates offload programming for Intel® Many Integrated Core (Intel® MIC) Architecture (see <a href="../../index.html">build instructions</a>).
+	</p>
+
+	<div class="changes">
+		<div class="h3-alike">System Requirements</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				For the most up to date system requirements, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
+			</p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Files</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="sub_string_finder.cpp">sub_string_finder.cpp</a>
+				<dd>The example as it appears in the Getting Started Guide.
+				<dt><a href="sub_string_finder_extended.cpp">sub_string_finder_extended.cpp</a>
+				<dd>An example similar to the one in the Getting Started Guide, but with an added sequential
+					implementation, and with an offload region added that can be executed on Intel® MIC Architecture based coprocessor.
+					The three implementations are timed, by using tick_count,
+					and the speedup of the parallel version and 
+					the speedup of the parallel version and, if applicable, the offload version is calculated and displayed.
+				<dt><a href="sub_string_finder_pretty.cpp">sub_string_finder_pretty.cpp</a>
+				<dd>An example similar to the one in the Getting Started Guide, but with more attractive printing of the results.
+				<dt><a href="Makefile">Makefile</a>
+				<dd>Makefile for building the example.
+			</dl>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+			<dt><a href="msvs/">msvs</a>
+			<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).
+			<dt><a href="xcode/">xcode</a>
+			<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).
+			</dl>
+			<p>For information about the minimum supported version of IDE, see <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a></p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Build instructions</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>General build directions can be found <a href="../../index.html">here</a>.</p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Usage</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><tt>sub_string_finder</tt>
+				<dd>Runs the example as it appears in the Getting Started Guide.
+				<dt><tt>sub_string_finder_pretty</tt>
+				<dd>Runs the similar example with more attractive printing of the results.
+				<dt><tt>sub_string_finder_extended</tt>
+				<dd>Runs the example extended with a sequential implementation and an offload region that can be executed on Intel® MIC Architecture based coprocessor.
+				<dt>To run a short version of this example, e.g., for use with Intel® Threading Tools:
+				<dd>Build a <i>debug</i> version of the <tt>sub_string_finder_pretty</tt> example
+					(see the <a href="../../index.html">build instructions</a>).
+					<br>Run it, e.g., <tt>sub_string_finder_pretty</tt>.
+			</dl>
+		</div>
+	</div>
+	
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>	
+	
+</body>
+</html>
diff --git a/examples/GettingStarted/sub_string_finder/sub_string_finder.cpp b/examples/GettingStarted/sub_string_finder/sub_string_finder.cpp
index f12df41..6d3ffbe 100644
--- a/examples/GettingStarted/sub_string_finder/sub_string_finder.cpp
+++ b/examples/GettingStarted/sub_string_finder/sub_string_finder.cpp
@@ -1,77 +1,78 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include <iostream>
 #include <string>
-#include <algorithm>
+#include <vector>
+#include <algorithm>    //std::max
 #include "tbb/parallel_for.h"
 #include "tbb/blocked_range.h"
 
-using namespace tbb;
-using namespace std;
-static const size_t N = 23;
+static const std::size_t N = 23;
 
 class SubStringFinder {
-  const string str;
-  size_t *max_array;
-  size_t *pos_array;
-public: 
-  void operator() ( const blocked_range<size_t>& r ) const { 
-    for ( size_t i = r.begin(); i != r.end(); ++i ) {
-      size_t max_size = 0, max_pos = 0;
-      for (size_t j = 0; j < str.size(); ++j)
-      if (j != i) {
-        size_t limit = str.size()-max(i,j);
-        for (size_t k = 0; k < limit; ++k) {
-          if (str[i + k] != str[j + k]) break;
-          if (k > max_size) {
-            max_size = k;
-            max_pos = j;
-          }
+    const std::string &str;
+    std::vector<std::size_t> &max_array;
+    std::vector<std::size_t> &pos_array;
+public:
+    void operator() ( const tbb::blocked_range<std::size_t> &r ) const {
+        for (std::size_t i = r.begin(); i != r.end(); ++i) {
+            std::size_t max_size = 0, max_pos = 0;
+            for (std::size_t j = 0; j < str.size(); ++j) {
+                if (j != i) {
+                    std::size_t limit = str.size()-(std::max)(i,j);
+                    for (std::size_t k = 0; k < limit; ++k) {
+                        if (str[i + k] != str[j + k])
+                            break;
+                        if (k > max_size) {
+                            max_size = k;
+                            max_pos = j;
+                        }
+                    }
+                }
+            }
+            max_array[i] = max_size;
+            pos_array[i] = max_pos;
         }
-      }
-      max_array[i] = max_size;
-      pos_array[i] = max_pos;
     }
-  }
-  SubStringFinder(string &s, size_t *m, size_t *p) :
-    str(s), max_array(m), pos_array(p) { }
+
+    SubStringFinder( const std::string &s, std::vector<std::size_t> &m, std::vector<std::size_t> &p ) :
+        str(s), max_array(m), pos_array(p) { }
 };
 
 int main() {
+    std::string str[N] = { std::string("a"), std::string("b") };
+    for (std::size_t i = 2; i < N; ++i)
+        str[i] = str[i-1]+str[i-2];
+    std::string &to_scan = str[N-1];
+    const std::size_t num_elem = to_scan.size();
 
-  string str[N] = { string("a"), string("b") };
-  for (size_t i = 2; i < N; ++i) str[i] = str[i-1]+str[i-2];
-  string &to_scan = str[N-1]; 
-  size_t num_elem = to_scan.size();
+    std::vector<std::size_t> max(num_elem);
+    std::vector<std::size_t> pos(num_elem);
 
-  size_t *max = new size_t[num_elem];
-  size_t *pos = new size_t[num_elem];
+    tbb::parallel_for( tbb::blocked_range<std::size_t>( 0, num_elem ),
+                SubStringFinder( to_scan, max, pos ) );
 
-  parallel_for(blocked_range<size_t>(0, num_elem ),
-               SubStringFinder( to_scan, max, pos ) );
+    for (std::size_t i = 0; i < num_elem; ++i)
+        std::cout << " " << max[i] << "(" << pos[i] << ")" << std::endl;
 
-  for (size_t i = 0; i < num_elem; ++i)
-    cout << " " << max[i] << "(" << pos[i] << ")" << endl;
-  delete[] pos;
-  delete[] max;
-  return 0;
+    return 0;
 }
 
diff --git a/examples/GettingStarted/sub_string_finder/sub_string_finder_extended.cpp b/examples/GettingStarted/sub_string_finder/sub_string_finder_extended.cpp
index a13f9e2..788ba0c 100644
--- a/examples/GettingStarted/sub_string_finder/sub_string_finder_extended.cpp
+++ b/examples/GettingStarted/sub_string_finder/sub_string_finder_extended.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if __TBB_MIC_OFFLOAD
@@ -24,7 +24,8 @@
 
 #include <iostream>
 #include <string>
-#include <algorithm>
+#include <vector>
+#include <algorithm>    //std::max
 
 #include "tbb/parallel_for.h"
 #include "tbb/blocked_range.h"
@@ -36,128 +37,130 @@
 class __declspec(target(mic)) SubStringFinder;
 #endif // __TBB_MIC_OFFLOAD
 
-using namespace tbb;
-using namespace std;
-static const size_t N = 22;
-
-void SerialSubStringFinder ( const string &str, size_t *max_array, size_t *pos_array) {
- for ( size_t i = 0; i < str.size(); ++i ) {
-   size_t max_size = 0, max_pos = 0;
-   for (size_t j = 0; j < str.size(); ++j)
-    if (j != i) {
-     size_t limit = str.size()-( i > j ? i : j );
-     for (size_t k = 0; k < limit; ++k) {
-      if (str[i + k] != str[j + k]) break;
-      if (k > max_size) {
-       max_size = k;
-       max_pos = j;
-      }
-     }
+static const std::size_t N = 22;
+
+void SerialSubStringFinder ( const std::string &str, std::vector<std::size_t> &max_array, std::vector<std::size_t> &pos_array ) {
+    for (std::size_t i = 0; i < str.size(); ++i) {
+        std::size_t max_size = 0, max_pos = 0;
+        for (std::size_t j = 0; j < str.size(); ++j)
+            if (j != i) {
+                std::size_t limit = str.size()-(std::max)(i,j);
+                for (std::size_t k = 0; k < limit; ++k) {
+                    if (str[i + k] != str[j + k])
+                        break;
+                    if (k > max_size) {
+                        max_size = k;
+                        max_pos = j;
+                    }
+                }
+            }
+        max_array[i] = max_size;
+        pos_array[i] = max_pos;
     }
-   max_array[i] = max_size;
-   pos_array[i] = max_pos;
-  }
 }
 
 class SubStringFinder {
- const string str;
- size_t *max_array;
- size_t *pos_array;
- public:
- void operator() ( const blocked_range<size_t>& r ) const {
-  for ( size_t i = r.begin(); i != r.end(); ++i ) {
-   size_t max_size = 0, max_pos = 0;
-   for (size_t j = 0; j < str.size(); ++j) 
-    if (j != i) {
-     size_t limit = str.size()-( i > j ? i : j );
-     for (size_t k = 0; k < limit; ++k) {
-      if (str[i + k] != str[j + k]) break;
-      if (k > max_size) {
-       max_size = k;
-       max_pos = j;
-      }
-     }
+    const char *str;
+    const std::size_t len;
+    std::size_t *max_array;
+    std::size_t *pos_array;
+public:
+    void operator() ( const tbb::blocked_range<std::size_t>& r ) const {
+        for (std::size_t i = r.begin(); i != r.end(); ++i) {
+            std::size_t max_size = 0, max_pos = 0;
+            for (std::size_t j = 0; j < len; ++j) {
+                if (j != i) {
+                    std::size_t limit = len-(std::max)(i,j);
+                    for (std::size_t k = 0; k < limit; ++k) {
+                        if (str[i + k] != str[j + k])
+                            break;
+                        if (k > max_size) {
+                            max_size = k;
+                            max_pos = j;
+                        }
+                    }
+                }
+            }
+            max_array[i] = max_size;
+            pos_array[i] = max_pos;
+        }
     }
-   max_array[i] = max_size;
-   pos_array[i] = max_pos;
-  }
- }
- SubStringFinder(string &s, size_t *m, size_t *p) : 
-  str(s), max_array(m), pos_array(p) { }
+    // We do not use std::vector for compatibility with offload execution
+    SubStringFinder( const char *s, const std::size_t s_len, std::size_t *m, std::size_t *p ) :
+        str(s), len(s_len), max_array(m), pos_array(p) { }
 };
 
-int main(int argc, char *argv[]) {
- 
-
- string str[N] = { string("a"), string("b") };
- for (size_t i = 2; i < N; ++i) str[i] = str[i-1]+str[i-2];
- string &to_scan = str[N-1]; 
- size_t num_elem = to_scan.size();
-
- size_t *max = new size_t[num_elem];
- size_t *max2 = new size_t[num_elem];
- size_t *pos = new size_t[num_elem];
- size_t *pos2 = new size_t[num_elem];
- cout << " Done building string." << endl;
-
- 
- tick_count serial_t0 = tick_count::now();
- SerialSubStringFinder(to_scan, max2, pos2);
- tick_count serial_t1 = tick_count::now();
- cout << " Done with serial version." << endl;
-
- tick_count parallel_t0 = tick_count::now();
- parallel_for(blocked_range<size_t>(0, num_elem, 100),
-       SubStringFinder( to_scan, max, pos ) );
- tick_count parallel_t1 = tick_count::now();
- cout << " Done with parallel version." << endl;
-
- for (size_t i = 0; i < num_elem; ++i) {
-   if (max[i] != max2[i] || pos[i] != pos2[i]) {
-     cout << "ERROR: Serial and Parallel Results are Different!" << endl;
-   }
- }
- cout << " Done validating results." << endl;
-
- cout << "Serial version ran in " << (serial_t1 - serial_t0).seconds() << " seconds" << endl
-           << "Parallel version ran in " <<  (parallel_t1 - parallel_t0).seconds() << " seconds" << endl
-           << "Resulting in a speedup of " << (serial_t1 - serial_t0).seconds() / (parallel_t1 - parallel_t0).seconds() << endl;
+int main() {
+    using namespace tbb;
+
+    std::string str[N] = { std::string("a"), std::string("b") };
+    for (std::size_t i = 2; i < N; ++i)
+        str[i] = str[i-1]+str[i-2];
+    std::string &to_scan = str[N-1];
+    const std::size_t num_elem = to_scan.size();
+
+    std::vector<std::size_t> max1(num_elem);
+    std::vector<std::size_t> pos1(num_elem);
+    std::vector<std::size_t> max2(num_elem);
+    std::vector<std::size_t> pos2(num_elem);
+
+    std::cout << " Done building string." << std::endl;
+
+    tick_count serial_t0 = tick_count::now();
+    SerialSubStringFinder( to_scan, max2, pos2 );
+    tick_count serial_t1 = tick_count::now();
+    std::cout << " Done with serial version." << std::endl;
+
+    tick_count parallel_t0 = tick_count::now();
+    parallel_for(blocked_range<std::size_t>(0, num_elem, 100),
+            SubStringFinder( to_scan.c_str(), num_elem, &max1[0], &pos1[0] ) );
+    tick_count parallel_t1 = tick_count::now();
+    std::cout << " Done with parallel version." << std::endl;
+
+    for (std::size_t i = 0; i < num_elem; ++i) {
+        if (max1[i] != max2[i] || pos1[i] != pos2[i]) {
+            std::cout << "ERROR: Serial and Parallel Results are Different!" << std::endl;
+            break;
+        }
+    }
+    std::cout << " Done validating results." << std::endl;
+
+    std::cout << "Serial version ran in " << (serial_t1 - serial_t0).seconds() << " seconds" << std::endl
+              << "Parallel version ran in " <<  (parallel_t1 - parallel_t0).seconds() << " seconds" << std::endl
+              << "Resulting in a speedup of " << (serial_t1 - serial_t0).seconds() / (parallel_t1 - parallel_t0).seconds() << std::endl;
 
 #if __TBB_MIC_OFFLOAD
- // Do offloadable version. Do the timing on host.
- size_t *max3 = new size_t[num_elem];
- size_t *pos3 = new size_t[num_elem];
- tick_count parallel_tt0 = tick_count::now();
- const char* to_scan_str = to_scan.c_str();  // Offload the string as a char array.
- #pragma offload target(mic) in(num_elem) in(to_scan_str:length(num_elem)) out(max3,pos3:length(num_elem))
- {
- string to_scan(to_scan_str, num_elem);      // Reconstruct the string in offloadable region.
-                                             // Suboptimal performance because of making a copy from to_scan_str at creating to_scan.
- parallel_for(blocked_range<size_t>(0, num_elem, 100),
-       SubStringFinder( to_scan, max3, pos3 ) );
- }
- tick_count parallel_tt1 = tick_count::now();
- cout << " Done with offloadable version." << endl;
-
- // Do validation of offloadable results on host.
- for (size_t i = 0; i < num_elem; ++i) {
-   if (max3[i] != max2[i] || pos3[i] != pos2[i]) {
-     cout << "ERROR: Serial and Offloadable Results are Different!" << endl;
-   }
- }
- cout << " Done validating offloadable results." << endl;
-
- cout << "Offloadable version ran in " <<  (parallel_tt1 - parallel_tt0).seconds() << " seconds" << endl
-           << "Resulting in a speedup of " << (serial_t1 - serial_t0).seconds() / (parallel_tt1 - parallel_tt0).seconds() << " of offloadable version" << endl;
-
- delete[] max3;
- delete[] pos3;
+    // Do offloadable version. Do the timing on host.
+
+    std::vector<std::size_t> max3(num_elem);
+    std::vector<std::size_t> pos3(num_elem);
+
+    std::size_t *max3_array = &max3[0];   // method data() for vector is not available in C++03
+    std::size_t *pos3_array = &pos3[0];
+    tick_count parallel_tt0 = tick_count::now();
+    const char *to_scan_str = to_scan.c_str();  // Offload the string as a char array.
+    #pragma offload target(mic) in(num_elem) in(to_scan_str:length(num_elem)) out(max3_array,pos3_array:length(num_elem))
+    {
+        parallel_for(blocked_range<std::size_t>(0, num_elem, 100),
+                SubStringFinder ( to_scan_str, num_elem, max3_array, pos3_array ) );
+    }
+    tick_count parallel_tt1 = tick_count::now();
+    std::cout << " Done with offloadable version." << std::endl;
+
+    // Do validation of offloadable results on host.
+    for (std::size_t i = 0; i < num_elem; ++i) {
+        if (max1[i] != max3[i] || pos1[i] != pos3[i]) {
+            std::cout << "ERROR: Serial and Offloadable Results are Different!" << std::endl;
+            break;
+        }
+    }
+    std::cout << " Done validating offloadable results." << std::endl;
+
+    std::cout << "Offloadable version ran in " << (parallel_tt1 - parallel_tt0).seconds() << " seconds" << std::endl
+              << "Resulting in a speedup of " << (serial_t1 - serial_t0).seconds() / (parallel_tt1 - parallel_tt0).seconds()
+              << " of offloadable version" << std::endl;
+
 #endif // __TBB_MIC_OFFLOAD
 
- delete[] max;
- delete[] pos;
- delete[] max2;
- delete[] pos2;
- return 0;
+    return 0;
 }
-
diff --git a/examples/GettingStarted/sub_string_finder/sub_string_finder_pretty.cpp b/examples/GettingStarted/sub_string_finder/sub_string_finder_pretty.cpp
index 0cdb988..c795f0b 100644
--- a/examples/GettingStarted/sub_string_finder/sub_string_finder_pretty.cpp
+++ b/examples/GettingStarted/sub_string_finder/sub_string_finder_pretty.cpp
@@ -1,90 +1,98 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include <iostream>
 #include <string>
 #include <algorithm>
+#include <vector>
+#include <algorithm>    //std::max
 
 #include "tbb/parallel_for.h"
 #include "tbb/blocked_range.h"
 
-using namespace tbb;
-static const size_t N = 9;
+static const std::size_t N = 9;
 
 class SubStringFinder {
- const std::string str;
- size_t *max_array;
- size_t *pos_array;
- public:
- void operator() ( const blocked_range<size_t>& r ) const {
-  for ( size_t i = r.begin(); i != r.end(); ++i ) {
-   size_t max_size = 0, max_pos = 0;
-   for (size_t j = 0; j < str.size(); ++j) 
-    if (j != i) {
-     size_t limit = str.size()-( i > j ? i : j );
-     for (size_t k = 0; k < limit; ++k) {
-      if (str[i + k] != str[j + k]) break;
-      if (k+1 > max_size) {
-       max_size = k+1;
-       max_pos = j;
-      }
-     }
+    const std::string &str;
+    std::vector<std::size_t> &max_array;
+    std::vector<std::size_t> &pos_array;
+public:
+    void operator() ( const tbb::blocked_range<std::size_t>& r ) const {
+        for (std::size_t i = r.begin(); i != r.end(); ++i) {
+            std::size_t max_size = 0, max_pos = 0;
+            for (std::size_t j = 0; j < str.size(); ++j) {
+                if (j != i) {
+                    std::size_t limit = str.size()-(std::max)(i,j);
+                    for (std::size_t k = 0; k < limit; ++k) {
+                        if (str[i + k] != str[j + k])
+                            break;
+                        if (k+1 > max_size) {
+                            max_size = k+1;
+                            max_pos = j;
+                        }
+                    }
+                }
+            }
+            max_array[i] = max_size;
+            pos_array[i] = max_pos;
+        }
     }
-   max_array[i] = max_size;
-   pos_array[i] = max_pos;
-  }
- }
- SubStringFinder(std::string &s, size_t *m, size_t *p) :
-  str(s), max_array(m), pos_array(p) { }
+
+    SubStringFinder( const std::string &s, std::vector<std::size_t> &m, std::vector<std::size_t> &p ) :
+        str(s), max_array(m), pos_array(p) { }
 };
 
-int main(int argc, char *argv[]) {
- 
-
- std::string str[N] = { std::string("a"), std::string("b") };
- for (size_t i = 2; i < N; ++i) str[i] = str[i-1]+str[i-2];
- std::string &to_scan = str[N-1]; 
- size_t num_elem = to_scan.size();
- std::cout << "String to scan: " << to_scan << std::endl;
-
- size_t *max = new size_t[num_elem];
- size_t *pos = new size_t[num_elem];
-
- parallel_for(blocked_range<size_t>(0, num_elem, 100),
-       SubStringFinder( to_scan, max, pos ) );
-
- for (size_t i = 0; i < num_elem; ++i) {
-   for (size_t j = 0; j < num_elem; ++j) {
-     if (j >= i && j < i + max[i]) std::cout << "_";
-     else std::cout << " ";
-   } 
-   std::cout << std::endl << to_scan << std::endl;
-
-   for (size_t j = 0; j < num_elem; ++j) {
-     if (j >= pos[i] && j < pos[i] + max[i]) std::cout << "*";
-     else std::cout << " ";
-   }
-   std::cout << std::endl;
- }
- delete[] max;
- delete[] pos;
- return 0;
+int main() {
+    using namespace tbb;
+
+    std::string str[N] = { std::string("a"), std::string("b") };
+    for (std::size_t i = 2; i < N; ++i)
+        str[i] = str[i-1]+str[i-2];
+    std::string &to_scan = str[N-1];
+    const std::size_t num_elem = to_scan.size();
+    std::cout << "String to scan: " << to_scan << std::endl;
+
+    std::vector<std::size_t> max( num_elem );
+    std::vector<std::size_t> pos( num_elem );
+
+    parallel_for( blocked_range<std::size_t>( 0, num_elem, 100 ),
+            SubStringFinder( to_scan, max, pos ) );
+
+    for (std::size_t i = 0; i < num_elem; ++i) {
+        for (std::size_t j = 0; j < num_elem; ++j) {
+            if (j >= i && j < i + max[i])
+                std::cout << "_";
+            else
+                std::cout << " ";
+        }
+        std::cout << std::endl << to_scan << std::endl;
+
+        for (std::size_t j = 0; j < num_elem; ++j) {
+            if (j >= pos[i] && j < pos[i] + max[i])
+                std::cout << "*";
+            else
+                std::cout << " ";
+        }
+        std::cout << std::endl;
+    }
+
+    return 0;
 }
 
diff --git a/examples/Makefile b/examples/Makefile
index 232bf69..b9f530e 100644
--- a/examples/Makefile
+++ b/examples/Makefile
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # This file should be always located and called in $(tbb_root)/examples
 
@@ -36,9 +36,14 @@ ifeq ($(filter /% $(SLASH)%, $(subst :, ,$(tbb_root)) ),)
     export TBBROOT := $(tbb_root)
 endif
 
-ifneq (00,$(lambdas)$(cpp0x))
-	override CXXFLAGS += $(CPP11_FLAGS)
+override CXXFLAGS += $(CXX_STD_FLAGS)
+
+# give stdver priotity over autodetection
+ifneq (,$(stdver))
+    CXX0XFLAGS=-std=$(stdver) -D_TBB_CPP0X
 endif
+# empty CXX0XFLAGS exported as well, to have control over C++ autodetection
+export CXX0XFLAGS
 
 ifeq ($(tbb_os),windows)
     ifeq ($(UNIXMODE),1)
@@ -107,6 +112,7 @@ else
     endif
     ifeq ($(tbb_os),macos)
         export DYLD_LIBRARY_PATH := $(DYLD_LIBRARY_PATH):$(work_dir)_release:$(work_dir)_debug
+        override CXXFLAGS += -Wl,-rpath,$(work_dir)_release -Wl,-rpath,$(work_dir)_debug
     else
         export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH):$(work_dir)_release:$(work_dir)_debug
         ifeq ($(findstring mic,$(offload) $(target)),mic)
diff --git a/examples/common/copy_libraries.bat b/examples/common/copy_libraries.bat
index 9e94e9c..ff80e1a 100644
--- a/examples/common/copy_libraries.bat
+++ b/examples/common/copy_libraries.bat
@@ -1,22 +1,22 @@
 @echo off
 REM
-REM Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+REM Copyright (c) 2005-2017 Intel Corporation
+REM
+REM Licensed under the Apache License, Version 2.0 (the "License");
+REM you may not use this file except in compliance with the License.
+REM You may obtain a copy of the License at
+REM
+REM     http://www.apache.org/licenses/LICENSE-2.0
+REM
+REM Unless required by applicable law or agreed to in writing, software
+REM distributed under the License is distributed on an "AS IS" BASIS,
+REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+REM See the License for the specific language governing permissions and
+REM limitations under the License.
+REM
+REM
 REM
-REM This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-REM you can redistribute it and/or modify it under the terms of the GNU General Public License
-REM version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is
-REM distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
-REM implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-REM See  the GNU General Public License for more details.   You should have received a copy of
-REM the  GNU General Public License along with Threading Building Blocks; if not, write to the
-REM Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 REM
-REM As a special exception,  you may use this file  as part of a free software library without
-REM restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-REM functions from this file, or you compile this file and link it with other files to produce
-REM an executable,  this file does not by itself cause the resulting executable to be covered
-REM by the GNU General Public License. This exception does not however invalidate any other
-REM reasons why the executable file might be covered by the GNU General Public License.
 REM
 
 :: Getting parameters
@@ -34,10 +34,13 @@ if ("%TBBROOT%") == ("") set TBBROOT=%~d0%~p0..\..\
 
 :: Getting vs folders in case vc_mt binaries are not provided
 :: ordered from oldest to newest, so we end with newest available version
-if ("%VS90COMNTOOLS%")  NEQ ("") set vc_dir=vc9
-if ("%VS100COMNTOOLS%") NEQ ("") set vc_dir=vc10
 if ("%VS110COMNTOOLS%") NEQ ("") set vc_dir=vc11
 if ("%VS120COMNTOOLS%") NEQ ("") set vc_dir=vc12
+if ("%VS140COMNTOOLS%") NEQ ("") set vc_dir=vc14
+:: To use Microsoft* Visual Studio* 2017 IDE, make sure the variable VS150COMNTOOLS is set in your IDE instance.
+:: If it is not, try running Microsoft Visual Studio 2017 from Microsoft* Developer Command Prompt* for VS 2017.
+:: For details, see https://developercommunity.visualstudio.com/content/problem/730/vs154-env-var-vs150comntools-missing-from-build-sy.html
+if ("%VS150COMNTOOLS%") NEQ ("") set vc_dir=vc14
 
 :: Are we standalone/oss or inside compiler?
 if exist "%TBBROOT%\bin\%arch%\%vc_dir%\tbb%postfix%.dll" set interim_path=bin\%arch%
diff --git a/examples/common/examples-common.inc b/examples/common/examples-common.inc
new file mode 100644
index 0000000..bb76a96
--- /dev/null
+++ b/examples/common/examples-common.inc
@@ -0,0 +1,38 @@
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+# detect if a compiler can support C++11
+# If CXX0XFLAGS already set, do not change it
+ifneq (,$(findstring $(CXX), icc icpc clang++))
+    # every supported icc or clang is OK
+    CXX0XFLAGS ?= -std=c++0x
+else
+    ifneq (,$(findstring $(CXX), g++ gcc))
+        ifneq (, $(strip $(shell $(CXX) -v 2>&1 | grep "clang-")))
+            # This is clang actually,
+            # every supported clang is OK
+            CXX0XFLAGS ?= -std=c++0x
+        else
+            # support of lambda started GCC 4.5
+            ifneq (, $(strip $(shell g++ -dumpversion | egrep "^(4\.[5-9]|[5-9])")))
+               CXX0XFLAGS ?= -std=c++0x
+            endif
+        endif
+    endif
+endif
+
diff --git a/examples/common/gui/Makefile.gmake b/examples/common/gui/Makefile.gmake
index 8937826..c3591ec 100644
--- a/examples/common/gui/Makefile.gmake
+++ b/examples/common/gui/Makefile.gmake
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # The C++ compiler
 #CXX=g++
@@ -78,13 +78,13 @@ else # ! X
     APPRES = $(NAME)$(SUFFIX).app/Contents/Resources
     EXE = $(NAME)$(SUFFIX).app/Contents/MacOS/$(NAME)$(SUFFIX)
 
-  else # ! OS X*
+  else # ! macOS*
 
     EXE = $(NAME)$(SUFFIX)
     ifeq (,$(strip $(UI)))
        UI = con
        $(warning Note: no graphics output capability detected, building for console output.)
     endif
-  endif # OS X*
+  endif # macOS
 endif # X
 endif # Windows vs. other
diff --git a/examples/common/gui/Makefile.win b/examples/common/gui/Makefile.win
index 42ea77f..21070e9 100644
--- a/examples/common/gui/Makefile.win
+++ b/examples/common/gui/Makefile.win
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # Per-build Makefile rules (for recursive $(MAKE) calls from Makefile)
 
diff --git a/examples/common/gui/convideo.cpp b/examples/common/gui/convideo.cpp
index fd3d76f..c04ffe4 100644
--- a/examples/common/gui/convideo.cpp
+++ b/examples/common/gui/convideo.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "video.h"
@@ -48,8 +48,8 @@ struct timeval g_time;
 
 video::video()
     // OpenGL* RGBA byte order for little-endian CPU
-    : red_mask(0xff), red_shift(0), green_mask(0xff00),
-      green_shift(8), blue_mask(0xff0000), blue_shift(16), depth(24)
+    : depth(24), red_shift(0), green_shift(8), blue_shift(16),
+      red_mask(0xff), green_mask(0xff00), blue_mask(0xff0000)
 {
     assert(g_video == 0);
     g_video = this; title = "Video"; updating = calc_fps = false;
@@ -124,8 +124,8 @@ void video::show_title()
 ///////////////////////////////////////////// public methods of video class ///////////////////////
 
 drawing_area::drawing_area(int x, int y, int sizex, int sizey)
-    : start_x(x), start_y(y), size_x(sizex), size_y(sizey), pixel_depth(24),
-    base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex), ptr32(g_pImg)
+    : base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex),
+      pixel_depth(24), ptr32(g_pImg), start_x(x), start_y(y), size_x(sizex), size_y(sizey)
 {
     assert(x < g_sizex); assert(y < g_sizey);
     assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);
diff --git a/examples/common/gui/d2dvideo.cpp b/examples/common/gui/d2dvideo.cpp
index 64f4cc5..c01d670 100644
--- a/examples/common/gui/d2dvideo.cpp
+++ b/examples/common/gui/d2dvideo.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // common Windows parts
@@ -64,7 +64,7 @@ void DrawBitmap()
     HRESULT hr = S_OK;
     if (m_pRenderTarget) {
         m_pRenderTarget->BeginDraw();
-        if (m_pBitmap) 
+        if (m_pBitmap)
             hr = m_pBitmap->CopyFromMemory(NULL,(BYTE*)g_pImg, 4*g_sizex);
         DisplayError( "DrawBitmap error", hr );
         m_pRenderTarget->DrawBitmap(m_pBitmap);
@@ -172,7 +172,7 @@ bool video::init_window(int sizex, int sizey)
 void video::terminate()
 {
     if (m_pBitmap) m_pBitmap->Release();
-    if (m_pRenderTarget) m_pRenderTarget->Release(); 
+    if (m_pRenderTarget) m_pRenderTarget->Release();
     if (m_pD2DFactory) m_pD2DFactory->Release();
     g_video = 0; running = false;
     if(g_pImg) { delete[] g_pImg; g_pImg = 0; }
@@ -181,8 +181,8 @@ void video::terminate()
 //////////// drawing area constructor & destructor /////////////
 
 drawing_area::drawing_area(int x, int y, int sizex, int sizey)
-: start_x(x), start_y(y), size_x(sizex), size_y(sizey), pixel_depth(24),
-    base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex), ptr32(g_pImg)
+    : base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex),
+    pixel_depth(24), ptr32(g_pImg), start_x(x), start_y(y), size_x(sizex), size_y(sizey)
 {
     assert(x < g_sizex); assert(y < g_sizey);
     assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);
diff --git a/examples/common/gui/dxcheck.bat b/examples/common/gui/dxcheck.bat
index 5c0e282..03b7580 100644
--- a/examples/common/gui/dxcheck.bat
+++ b/examples/common/gui/dxcheck.bat
@@ -1,22 +1,22 @@
 @echo off
 REM
-REM Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-REM
-REM This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-REM you can redistribute it and/or modify it under the terms of the GNU General Public License
-REM version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is
-REM distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
-REM implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-REM See  the GNU General Public License for more details.   You should have received a copy of
-REM the  GNU General Public License along with Threading Building Blocks; if not, write to the
-REM Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-REM
-REM As a special exception,  you may use this file  as part of a free software library without
-REM restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-REM functions from this file, or you compile this file and link it with other files to produce
-REM an executable,  this file does not by itself cause the resulting executable to be covered
-REM by the GNU General Public License. This exception does not however invalidate any other
-REM reasons why the executable file might be covered by the GNU General Public License.
+REM Copyright (c) 2005-2017 Intel Corporation
+REM
+REM Licensed under the Apache License, Version 2.0 (the "License");
+REM you may not use this file except in compliance with the License.
+REM You may obtain a copy of the License at
+REM
+REM     http://www.apache.org/licenses/LICENSE-2.0
+REM
+REM Unless required by applicable law or agreed to in writing, software
+REM distributed under the License is distributed on an "AS IS" BASIS,
+REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+REM See the License for the specific language governing permissions and
+REM limitations under the License.
+REM
+REM
+REM
+REM
 REM
 if "%DXSDK_DIR%"=="" goto error_no_DXSDK
 goto end
diff --git a/examples/common/gui/gdivideo.cpp b/examples/common/gui/gdivideo.cpp
index 64d6a64..17bccc4 100644
--- a/examples/common/gui/gdivideo.cpp
+++ b/examples/common/gui/gdivideo.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // common Windows parts
@@ -126,8 +126,8 @@ void video::terminate()
 //////////// drawing area constructor & destructor /////////////
 
 drawing_area::drawing_area(int x, int y, int sizex, int sizey)
-: start_x(x), start_y(y), size_x(sizex), size_y(sizey), pixel_depth(24),
-    base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex), ptr32(g_pImg)
+    : base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex),
+      pixel_depth(24), ptr32(g_pImg), start_x(x), start_y(y), size_x(sizex), size_y(sizey)
 {
     assert(x < g_sizex); assert(y < g_sizey);
     assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);
diff --git a/examples/common/gui/macvideo.cpp b/examples/common/gui/macvideo.cpp
index e18910e..fd64714 100644
--- a/examples/common/gui/macvideo.cpp
+++ b/examples/common/gui/macvideo.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "video.h"
@@ -37,8 +37,13 @@ int cocoa_update=0;
 struct timeval g_time;
 
 video::video()
-    : red_mask(0xff0000), red_shift(16), green_mask(0xff00),
-      green_shift(8), blue_mask(0xff), blue_shift(0), depth(24)
+#if __TBB_IOS
+    : depth(24), red_shift(0), green_shift(8), blue_shift(16),
+    red_mask(0xff), green_mask(0xff00), blue_mask(0xff0000)
+#else
+    : depth(24), red_shift(16), green_shift(8), blue_shift(0),
+    red_mask(0xff0000), green_mask(0xff00), blue_mask(0xff)
+#endif
 {
     assert(g_video == 0);
     g_video = this; title = "Video"; cocoa_update=1; updating = true; calc_fps = false;
@@ -65,10 +70,10 @@ void video::terminate()
 {
     if(calc_fps) {
         double fps = g_fps;
-		struct timezone tz; struct timeval end_time; gettimeofday(&end_time, &tz);
-		fps /= (end_time.tv_sec+1.0*end_time.tv_usec/1000000.0) - (g_time.tv_sec+1.0*g_time.tv_usec/1000000.0);
+        struct timezone tz; struct timeval end_time; gettimeofday(&end_time, &tz);
+        fps /= (end_time.tv_sec+1.0*end_time.tv_usec/1000000.0) - (g_time.tv_sec+1.0*g_time.tv_usec/1000000.0);
         printf("%s: %.1f fps\n", title, fps);
-  	}
+    }
     g_video = 0; running = false;
     if(g_pImg) { delete[] g_pImg; g_pImg = 0; }
 }
@@ -82,9 +87,9 @@ video::~video()
 bool video::next_frame()
 {
     if(calc_fps){
-	    if(!g_fps) {
-		    struct timezone tz; gettimeofday(&g_time, &tz);
-	    }
+        if(!g_fps) {
+            struct timezone tz; gettimeofday(&g_time, &tz);
+        }
         g_fps++;
     }
     struct timezone tz; struct timeval now_time; gettimeofday(&now_time, &tz);
@@ -92,7 +97,7 @@ bool video::next_frame()
     if( sec>1 ){
         if(calc_fps) {
             memcpy(&g_time, &now_time, sizeof(g_time));
-            int fps; 
+            int fps;
             fps = g_fps/sec;
             cocoa_update = (int)updating;
             snprintf(window_title,WINDOW_TITLE_SIZE, "%s%s: %d fps", title, updating?"":" (no updating)", int(fps));
@@ -114,7 +119,7 @@ extern "C" void on_mouse_func(int x, int y, int k)
     g_video->on_mouse(x, y, k);
     return;
 }
- 
+
 extern "C" void on_key_func(int x)
 {
     g_video->on_key(x);
@@ -136,15 +141,16 @@ void video::main_loop()
 //! Change window title
 void video::show_title()
 {
-    strncpy( window_title, title, WINDOW_TITLE_SIZE );
+    if(title)
+        strncpy( window_title, title, WINDOW_TITLE_SIZE );
     return;
 }
 
 ///////////////////////////////////////////// public methods of video class ///////////////////////
 
 drawing_area::drawing_area(int x, int y, int sizex, int sizey)
-    : start_x(x), start_y(y), size_x(sizex), size_y(sizey), pixel_depth(24),
-    base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex), ptr32(g_pImg)
+    : base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex),
+    pixel_depth(24), ptr32(g_pImg), start_x(x), start_y(y), size_x(sizex), size_y(sizey)
 {
     assert(x < g_sizex); assert(y < g_sizey);
     assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);
@@ -152,7 +158,7 @@ drawing_area::drawing_area(int x, int y, int sizex, int sizey)
     index = base_index; // current index
 }
 
-void drawing_area::update() 
+void drawing_area::update()
 {
-    //nothing to do, updating via timer in cocoa part. 
+    //nothing to do, updating via timer in cocoa part.
 }
diff --git a/examples/common/gui/video.h b/examples/common/gui/video.h
index 35823ca..3e51050 100644
--- a/examples/common/gui/video.h
+++ b/examples/common/gui/video.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __VIDEO_H__
@@ -170,12 +170,12 @@ inline color_t video::get_color(colorcomp_t red, colorcomp_t green, colorcomp_t
 #endif
                 (red<<red_shift) | (green<<green_shift) | (blue<<blue_shift);
     else if(depth > 0) {
-        register depth_t bs = blue_shift, rs = red_shift;
+        depth_t bs = blue_shift, rs = red_shift;
         if(blue_shift < 0) blue >>= -bs, bs = 0;
         else /*red_shift < 0*/ red >>= -rs, rs = 0;
         return ((red<<rs)&red_mask) | ((green<<green_shift)&green_mask) | ((blue<<bs)&blue_mask);
     } else { // UYVY colorspace
-        register unsigned y, u, v;
+        unsigned y, u, v;
         y = red * 77 + green * 150 + blue * 29; // sum(77+150+29=256) * max(=255):  limit->2^16
         u = (2048 + (blue << 3) - (y >> 5)) >> 4; // (limit->2^12)>>4
         v = (2048 + (red << 3) - (y >> 5)) >> 4;
@@ -185,9 +185,9 @@ inline color_t video::get_color(colorcomp_t red, colorcomp_t green, colorcomp_t
 }
 
 inline drawing_area::drawing_area(int x, int y, int sizex, int sizey, const drawing_memory &dmem)
-    : start_x(x), start_y(y), size_x(sizex), size_y(sizey), pixel_depth(dmem.pixel_depth),
-    base_index(y*dmem.sizex + x), max_index(dmem.sizex*dmem.sizey), index_stride(dmem.sizex),
-    ptr32(reinterpret_cast<unsigned int*>(dmem.my_address))
+    : base_index(y*dmem.sizex + x), max_index(dmem.sizex*dmem.sizey), index_stride(dmem.sizex),
+    pixel_depth(dmem.pixel_depth), ptr32(reinterpret_cast<unsigned int*>(dmem.my_address)),
+    start_x(x), start_y(y), size_x(sizex), size_y(sizey)
 {
     assert(x < dmem.sizex); assert(y < dmem.sizey);
     assert(x+sizex <= dmem.sizex); assert(y+sizey <= dmem.sizey);
diff --git a/examples/common/gui/winvideo.h b/examples/common/gui/winvideo.h
index b31cd90..7f35fe9 100644
--- a/examples/common/gui/winvideo.h
+++ b/examples/common/gui/winvideo.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /////// Common internal implementation of Windows-specific stuff //////////////
@@ -151,14 +151,14 @@ static bool RedirectIOToConsole(void)
 
 
 video::video()
-    : red_mask(0xff0000), red_shift(16), green_mask(0xff00),
-      green_shift(8), blue_mask(0xff), blue_shift(0), depth(24)
+    : depth(24), red_shift(16), green_shift(8), blue_shift(0),
+      red_mask(0xff0000), green_mask(0xff00), blue_mask(0xff)
 {
     assert(g_video == 0);
     g_video = this; title = "Video"; running = threaded = calc_fps = false; updating = true;
 }
 
-//! optionally call it just before init() to set own 
+//! optionally call it just before init() to set own
 void video::win_set_class(WNDCLASSEX &wcex)
 {
     gWndClass = &wcex;
diff --git a/examples/common/gui/xcode/tbbExample/Info.plist b/examples/common/gui/xcode/tbbExample/Info.plist
deleted file mode 100644
index db4faae..0000000
--- a/examples/common/gui/xcode/tbbExample/Info.plist
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>BuildMachineOSBuild</key>
-	<string>11D50d</string>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>en</string>
-	<key>CFBundleDisplayName</key>
-	<string></string>
-	<key>CFBundleExecutable</key>
-	<string>tbbExample</string>
-	<key>CFBundleIdentifier</key>
-	<string>Intel.tbbExample</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>tbbExample</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleShortVersionString</key>
-	<string>1.0</string>
-	<key>CFBundleSignature</key>
-	<string>????</string>
-	<key>CFBundleVersion</key>
-	<string>1</string>
-	<key>DTCompiler</key>
-	<string>com.apple.compilers.llvm.clang.1_0</string>
-	<key>DTPlatformBuild</key>
-	<string>4E1019</string>
-	<key>DTPlatformVersion</key>
-	<string>GM</string>
-	<key>DTSDKBuild</key>
-	<string>11D50a</string>
-	<key>DTSDKName</key>
-	<string>macosx10.7</string>
-	<key>DTXcode</key>
-	<string>0431</string>
-	<key>DTXcodeBuild</key>
-	<string>4E1019</string>
-	<key>LSApplicationCategoryType</key>
-	<string>public.app-category.business</string>
-	<key>LSEnvironment</key>
-	<dict>
-		<key>DYLD_LIBRARY_PATH</key>
-		<string>Contents/Resources:.:../Resources:/tmp:$DYLD_LIBRARY_PATH</string>
-		<key>LIBRARY_PATH</key>
-		<string>Contents/Resources:.:../:/tmp:$DYLD_LIBRARY_PATH</string>
-	</dict>
-	<key>LSMinimumSystemVersion</key>
-	<string>10.7</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 2005-2015 Intel Corporation.  All Rights Reserved.</string>
-	<key>NSMainNibFile</key>
-	<string>MainMenu</string>
-	<key>NSPrincipalClass</key>
-	<string>NSApplication</string>
-</dict>
-</plist>
diff --git a/examples/common/gui/xcode/tbbExample/OpenGLView.h b/examples/common/gui/xcode/tbbExample/OpenGLView.h
index 5b47e3d..971abeb 100644
--- a/examples/common/gui/xcode/tbbExample/OpenGLView.h
+++ b/examples/common/gui/xcode/tbbExample/OpenGLView.h
@@ -1,24 +1,46 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #import <Foundation/Foundation.h>
+
+#if TARGET_OS_IPHONE
+
+#import <UIKit/UIKit.h>
+#import "OpenGLES/ES2/gl.h"
+
+ at interface OpenGLView : UIView {
+    NSTimer *timer;
+    CGRect imageRect;
+}
+
+ at property (nonatomic, retain) NSTimer *timer;
+ at property (nonatomic) CGRect imageRect;
+
+- (void) drawRect:(CGRect)rect;
+- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
+
+ at end
+
+#elif TARGET_OS_MAC
+
+#import <Foundation/Foundation.h>
 #import <Cocoa/Cocoa.h>
 
 @interface OpenGLView : NSOpenGLView{
@@ -34,3 +56,5 @@
 - (void) viewDidEndLiveResize;
 
 @end
+
+#endif
diff --git a/examples/common/gui/xcode/tbbExample/OpenGLView.m b/examples/common/gui/xcode/tbbExample/OpenGLView.m
index 19a76d4..9560ea3 100644
--- a/examples/common/gui/xcode/tbbExample/OpenGLView.m
+++ b/examples/common/gui/xcode/tbbExample/OpenGLView.m
@@ -1,26 +1,25 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
+#import <Foundation/Foundation.h>
 #import "OpenGLView.h"
-#import <OpenGL/gl.h>
-#import "tbbAppDelegate.h"
 
 // defined in macvideo.cpp
 extern char* window_title;
@@ -30,23 +29,84 @@ extern unsigned int *g_pImg;
 void on_mouse_func(int x, int y, int k);
 void on_key_func(int x);
 
+bool initilized = false;
+
+#if TARGET_OS_IPHONE
+
+#import "OpenGLES/ES2/gl.h"
+
+ at implementation OpenGLView
+
+ at synthesize timer;
+ at synthesize imageRect;
+
+- (void)drawRect:(CGRect)start
+{
+    if (initilized == false) {
+        NSLog(@"INITIALIZE");
+        timer = [NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(update_window) userInfo:nil repeats:YES];
+        imageRect = [[UIScreen mainScreen] bounds];
+        CGFloat full_height = imageRect.size.height;
+        const float ratio=(float)g_sizex/g_sizey;
+        imageRect.size.height=imageRect.size.width/ratio;
+        imageRect.origin.y=(full_height-imageRect.size.height)/2;
+        initilized = true;
+    }
+    
+    CGColorSpaceRef colourSpace = CGColorSpaceCreateDeviceRGB();
+    CGDataProviderRef dataProvider = CGDataProviderCreateWithData(NULL, g_pImg, 4*g_sizex*g_sizey, NULL);
+    
+    CGImageRef inputImage = CGImageCreate(g_sizex, g_sizey, 8, 32, g_sizex * 4, colourSpace,(CGBitmapInfo)kCGImageAlphaNoneSkipLast, dataProvider, NULL, NO, kCGRenderingIntentDefault);
+    UIImage *image = [UIImage imageWithCGImage:inputImage];
+    
+    CGDataProviderRelease(dataProvider);
+    CGColorSpaceRelease(colourSpace);
+    CGImageRelease(inputImage);
+    
+    [image drawInRect:imageRect];
+
+}
+
+- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
+{
+    CGPoint point = [[touches anyObject] locationInView:self];
+    const int x = point.x;
+    const int y = point.y;
+    if ( (y-imageRect.origin.y) > 0 && y < (imageRect.origin.y + imageRect.size.height ))
+    on_mouse_func( x*g_sizex/(imageRect.size.width), (y-imageRect.origin.y)*g_sizey/imageRect.size.height,1);
+    [self setNeedsDisplay];
+}
+
+-(void) update_window{
+    if( cocoa_update ) [self setNeedsDisplay];
+}
+
+ at end
+
+#elif TARGET_OS_MAC
+
+#import <OpenGL/gl.h>
+
 @implementation OpenGLView
 
 @synthesize timer;
 
 - (void) drawRect:(NSRect)start
 {
+    if (initilized == false) {
+        NSLog(@"INITIALIZE");
+        timer = [NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(update_window) userInfo:nil repeats:YES];
+        initilized = true;
+    }
     glWindowPos2i(0, (int)self.visibleRect.size.height);
     glPixelZoom( (float)self.visibleRect.size.width /(float)g_sizex,
                 -(float)self.visibleRect.size.height/(float)g_sizey);
     glDrawPixels(g_sizex, g_sizey, GL_BGRA_EXT, GL_UNSIGNED_INT_8_8_8_8_REV, g_pImg);
     glFlush();
-
-    timer = [NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(update_window) userInfo:nil repeats:YES];
 }
 
 -(void) update_window{
-    if( cocoa_update ) [self setNeedsDisplay:YES]; // TODO also clear cocoa_update?
+    if( cocoa_update ) [self setNeedsDisplay:YES]; 
     if( window_title ) [_window setTitle:[NSString stringWithFormat:@"%s", window_title]];
 }
 
@@ -83,3 +143,5 @@ void on_key_func(int x);
 }
 
 @end
+
+#endif
diff --git a/examples/common/gui/xcode/tbbExample/en.lproj/MainMenu.xib b/examples/common/gui/xcode/tbbExample/en.lproj/MainMenu.xib
index 14faab3..975382c 100644
--- a/examples/common/gui/xcode/tbbExample/en.lproj/MainMenu.xib
+++ b/examples/common/gui/xcode/tbbExample/en.lproj/MainMenu.xib
@@ -1,291 +1,48 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
-	<data>
-		<int key="IBDocument.SystemTarget">1070</int>
-		<string key="IBDocument.SystemVersion">11D50d</string>
-		<string key="IBDocument.InterfaceBuilderVersion">2182</string>
-		<string key="IBDocument.AppKitVersion">1138.32</string>
-		<string key="IBDocument.HIToolboxVersion">568.00</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
-			<string key="NS.object.0">2182</string>
-		</object>
-		<array key="IBDocument.IntegratedClassDependencies">
-			<string>NSWindowTemplate</string>
-			<string>NSView</string>
-			<string>NSMenu</string>
-			<string>NSMenuItem</string>
-			<string>NSCustomObject</string>
-		</array>
-		<array key="IBDocument.PluginDependencies">
-			<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-		</array>
-		<object class="NSMutableDictionary" key="IBDocument.Metadata">
-			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
-			<integer value="1" key="NS.object.0"/>
-		</object>
-		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
-			<object class="NSCustomObject" id="1021">
-				<string key="NSClassName">NSApplication</string>
-			</object>
-			<object class="NSCustomObject" id="1014">
-				<string key="NSClassName">FirstResponder</string>
-			</object>
-			<object class="NSCustomObject" id="1050">
-				<string key="NSClassName">NSApplication</string>
-			</object>
-			<object class="NSMenu" id="649796088">
-				<string key="NSTitle">AMainMenu</string>
-				<array class="NSMutableArray" key="NSMenuItems">
-					<object class="NSMenuItem" id="694149608">
-						<reference key="NSMenu" ref="649796088"/>
-						<string key="NSTitle">tbbExample</string>
-						<string key="NSKeyEquiv"/>
-						<int key="NSKeyEquivModMask">1048576</int>
-						<int key="NSMnemonicLoc">2147483647</int>
-						<object class="NSCustomResource" key="NSOnImage" id="35465992">
-							<string key="NSClassName">NSImage</string>
-							<string key="NSResourceName">NSMenuCheckmark</string>
-						</object>
-						<object class="NSCustomResource" key="NSMixedImage" id="502551668">
-							<string key="NSClassName">NSImage</string>
-							<string key="NSResourceName">NSMenuMixedState</string>
-						</object>
-						<string key="NSAction">submenuAction:</string>
-						<object class="NSMenu" key="NSSubmenu" id="110575045">
-							<string key="NSTitle">tbbExample</string>
-							<array class="NSMutableArray" key="NSMenuItems">
-								<object class="NSMenuItem" id="632727374">
-									<reference key="NSMenu" ref="110575045"/>
-									<string key="NSTitle">Quit tbbExample</string>
-									<string key="NSKeyEquiv">q</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-							</array>
-							<string key="NSName">_NSAppleMenu</string>
-						</object>
-					</object>
-				</array>
-				<string key="NSName">_NSMainMenu</string>
-			</object>
-			<object class="NSWindowTemplate" id="972006081">
-				<int key="NSWindowStyleMask">15</int>
-				<int key="NSWindowBacking">2</int>
-				<string key="NSWindowRect">{{100, 100}, {480, 360}}</string>
-				<int key="NSWTFlags">1148718080</int>
-				<string key="NSWindowTitle">tbbExample</string>
-				<string key="NSWindowClass">NSWindow</string>
-				<nil key="NSViewClass"/>
-				<nil key="NSUserInterfaceItemIdentifier"/>
-				<object class="NSView" key="NSWindowView" id="439893737">
-					<reference key="NSNextResponder"/>
-					<int key="NSvFlags">4352</int>
-					<string key="NSFrameSize">{480, 360}</string>
-					<reference key="NSSuperview"/>
-					<reference key="NSWindow"/>
-					<int key="NSViewLayerContentsRedrawPolicy">2</int>
-					<string key="NSHuggingPriority">{1, 9}</string>
-					<string key="NSAntiCompressionPriority">{1, 1}</string>
-				</object>
-				<string key="NSScreenRect">{{0, 0}, {1280, 1002}}</string>
-				<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
-				<bool key="NSWindowIsRestorable">YES</bool>
-			</object>
-			<object class="NSCustomObject" id="976324537">
-				<string key="NSClassName">tbbAppDelegate</string>
-			</object>
-			<object class="NSCustomObject" id="755631768">
-				<string key="NSClassName">NSFontManager</string>
-			</object>
-		</array>
-		<object class="IBObjectContainer" key="IBDocument.Objects">
-			<array class="NSMutableArray" key="connectionRecords">
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">terminate:</string>
-						<reference key="source" ref="1050"/>
-						<reference key="destination" ref="632727374"/>
-					</object>
-					<int key="connectionID">449</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBOutletConnection" key="connection">
-						<string key="label">delegate</string>
-						<reference key="source" ref="1021"/>
-						<reference key="destination" ref="976324537"/>
-					</object>
-					<int key="connectionID">495</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBOutletConnection" key="connection">
-						<string key="label">window</string>
-						<reference key="source" ref="976324537"/>
-						<reference key="destination" ref="972006081"/>
-					</object>
-					<int key="connectionID">532</int>
-				</object>
-			</array>
-			<object class="IBMutableOrderedSet" key="objectRecords">
-				<array key="orderedObjects">
-					<object class="IBObjectRecord">
-						<int key="objectID">0</int>
-						<array key="object" id="0"/>
-						<reference key="children" ref="1048"/>
-						<nil key="parent"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-2</int>
-						<reference key="object" ref="1021"/>
-						<reference key="parent" ref="0"/>
-						<string key="objectName">File's Owner</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-1</int>
-						<reference key="object" ref="1014"/>
-						<reference key="parent" ref="0"/>
-						<string key="objectName">First Responder</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-3</int>
-						<reference key="object" ref="1050"/>
-						<reference key="parent" ref="0"/>
-						<string key="objectName">Application</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">29</int>
-						<reference key="object" ref="649796088"/>
-						<array class="NSMutableArray" key="children">
-							<reference ref="694149608"/>
-						</array>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">56</int>
-						<reference key="object" ref="694149608"/>
-						<array class="NSMutableArray" key="children">
-							<reference ref="110575045"/>
-						</array>
-						<reference key="parent" ref="649796088"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">57</int>
-						<reference key="object" ref="110575045"/>
-						<array class="NSMutableArray" key="children">
-							<reference ref="632727374"/>
-						</array>
-						<reference key="parent" ref="694149608"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">136</int>
-						<reference key="object" ref="632727374"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">371</int>
-						<reference key="object" ref="972006081"/>
-						<array class="NSMutableArray" key="children">
-							<reference ref="439893737"/>
-						</array>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">372</int>
-						<reference key="object" ref="439893737"/>
-						<reference key="parent" ref="972006081"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">420</int>
-						<reference key="object" ref="755631768"/>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">494</int>
-						<reference key="object" ref="976324537"/>
-						<reference key="parent" ref="0"/>
-					</object>
-				</array>
-			</object>
-			<dictionary class="NSMutableDictionary" key="flattenedProperties">
-				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="136.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="29.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<boolean value="NO" key="371.IBNSWindowAutoPositionCentersHorizontal"/>
-				<boolean value="NO" key="371.IBNSWindowAutoPositionCentersVertical"/>
-				<string key="371.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="371.IBWindowTemplateEditedContentRect">{{380, 496}, {480, 360}}</string>
-				<integer value="1" key="371.NSWindowTemplate.visibleAtLaunch"/>
-				<string key="372.CustomClassName">OpenGLView</string>
-				<dictionary class="NSMutableDictionary" key="372.IBAttributePlaceholdersKey"/>
-				<string key="372.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="420.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="494.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="56.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="57.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-			</dictionary>
-			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
-			<nil key="activeLocalization"/>
-			<dictionary class="NSMutableDictionary" key="localizations"/>
-			<nil key="sourceID"/>
-			<int key="maxID">539</int>
-		</object>
-		<object class="IBClassDescriber" key="IBDocument.Classes">
-			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
-				<object class="IBPartialClassDescription">
-					<string key="className">OpenGLView</string>
-					<string key="superclassName">NSOpenGLView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">./Classes/OpenGLView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">tbbAppDelegate</string>
-					<string key="superclassName">NSObject</string>
-					<object class="NSMutableDictionary" key="actions">
-						<string key="NS.key.0">saveAction:</string>
-						<string key="NS.object.0">id</string>
-					</object>
-					<object class="NSMutableDictionary" key="actionInfosByName">
-						<string key="NS.key.0">saveAction:</string>
-						<object class="IBActionInfo" key="NS.object.0">
-							<string key="name">saveAction:</string>
-							<string key="candidateClassName">id</string>
-						</object>
-					</object>
-					<object class="NSMutableDictionary" key="outlets">
-						<string key="NS.key.0">window</string>
-						<string key="NS.object.0">NSWindow</string>
-					</object>
-					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<string key="NS.key.0">window</string>
-						<object class="IBToOneOutletInfo" key="NS.object.0">
-							<string key="name">window</string>
-							<string key="candidateClassName">NSWindow</string>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">./Classes/tbbAppDelegate.h</string>
-					</object>
-				</object>
-			</array>
-		</object>
-		<int key="IBDocument.localizationMode">0</int>
-		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
-			<integer value="1070" key="NS.object.0"/>
-		</object>
-		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
-		<int key="IBDocument.defaultPropertyAccessControl">3</int>
-		<dictionary class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
-			<string key="NSMenuCheckmark">{11, 11}</string>
-			<string key="NSMenuMixedState">{10, 3}</string>
-		</dictionary>
-	</data>
-</archive>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9060" systemVersion="15B42" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9060"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
+            <connections>
+                <outlet property="delegate" destination="494" id="495"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application"/>
+        <menu title="AMainMenu" systemMenu="main" id="29">
+            <items>
+                <menuItem title="tbbExample" id="56">
+                    <menu key="submenu" title="tbbExample" systemMenu="apple" id="57">
+                        <items>
+                            <menuItem title="Quit tbbExample" keyEquivalent="q" id="136">
+                                <connections>
+                                    <action selector="terminate:" target="-3" id="449"/>
+                                </connections>
+                            </menuItem>
+                        </items>
+                    </menu>
+                </menuItem>
+            </items>
+        </menu>
+        <window title="tbbExample" allowsToolTipsWhenApplicationIsInactive="NO" deferred="NO" oneShot="NO" releasedWhenClosed="NO" showsToolbarButton="NO" animationBehavior="default" id="371">
+            <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
+            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
+            <rect key="contentRect" x="100" y="100" width="480" height="360"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="1280" height="1002"/>
+            <view key="contentView" focusRingType="none" horizontalHuggingPriority="1" verticalHuggingPriority="9" horizontalCompressionResistancePriority="1" verticalCompressionResistancePriority="1" id="372" customClass="OpenGLView">
+                <rect key="frame" x="0.0" y="0.0" width="480" height="360"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <animations/>
+            </view>
+        </window>
+        <customObject id="494" customClass="tbbAppDelegate">
+            <connections>
+                <outlet property="window" destination="371" id="532"/>
+            </connections>
+        </customObject>
+        <customObject id="420" customClass="NSFontManager"/>
+    </objects>
+</document>
diff --git a/examples/common/gui/xcode/tbbExample/iOS.storyboard b/examples/common/gui/xcode/tbbExample/iOS.storyboard
new file mode 100644
index 0000000..9906441
--- /dev/null
+++ b/examples/common/gui/xcode/tbbExample/iOS.storyboard
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="9060" systemVersion="15B42" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="AKo-RD-jUr">
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9051"/>
+    </dependencies>
+    <scenes>
+        <!--View Controller-->
+        <scene sceneID="aF8-QV-POo">
+            <objects>
+                <viewController id="AKo-RD-jUr" sceneMemberID="viewController">
+                    <layoutGuides>
+                        <viewControllerLayoutGuide type="top" id="SEe-ff-xUc"/>
+                        <viewControllerLayoutGuide type="bottom" id="Cp9-IV-SKb"/>
+                    </layoutGuides>
+                    <view key="view" contentMode="scaleToFill" id="1aY-my-944" customClass="OpenGLView">
+                        <rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <animations/>
+                        <color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+                    </view>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="wcZ-9q-FxX" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="90" y="88"/>
+        </scene>
+    </scenes>
+</document>
diff --git a/examples/common/gui/xcode/tbbExample/main.m b/examples/common/gui/xcode/tbbExample/main.m
index 24fea1b..600bdb6 100644
--- a/examples/common/gui/xcode/tbbExample/main.m
+++ b/examples/common/gui/xcode/tbbExample/main.m
@@ -1,26 +1,51 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
+#import <Availability.h>
+#import <Foundation/Foundation.h>
+
+#if TARGET_OS_IPHONE
+
+#import <UIKit/UIKit.h>
+#import "tbbAppDelegate.h"
+
+void get_screen_resolution(int *x, int *y) {
+    // Getting landscape screen resolution in any case
+    CGRect imageRect = [[UIScreen mainScreen] bounds];
+    *x=imageRect.size.width>imageRect.size.height?imageRect.size.width:imageRect.size.height;
+    *y=imageRect.size.width<imageRect.size.height?imageRect.size.width:imageRect.size.height;
+    return;
+}
+
+int cocoa_main(int argc, char * argv[]) {
+    @autoreleasepool {
+        return UIApplicationMain(argc, argv, nil, NSStringFromClass([tbbAppDelegate class]));
+    }
+}
+
+#elif TARGET_OS_MAC
+
 #import <Cocoa/Cocoa.h>
 
 int cocoa_main(int argc, char *argv[])
 {
     return NSApplicationMain(argc, (const char **)argv);
 }
+#endif
diff --git a/examples/common/gui/xcode/tbbExample/tbbAppDelegate.h b/examples/common/gui/xcode/tbbExample/tbbAppDelegate.h
index 7669ef6..22570d8 100644
--- a/examples/common/gui/xcode/tbbExample/tbbAppDelegate.h
+++ b/examples/common/gui/xcode/tbbExample/tbbAppDelegate.h
@@ -1,27 +1,41 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 //
 //  Created by Xcode* 4.3.2
 //
 
+#import <Foundation/Foundation.h>
+
+#if TARGET_OS_IPHONE
+
+#import <UIKit/UIKit.h>
+
+ at interface tbbAppDelegate : UIResponder <UIApplicationDelegate>
+
+ at property (strong, nonatomic) UIWindow *window;
+
+ at end
+
+#elif TARGET_OS_MAC
+
 #import <Cocoa/Cocoa.h>
 
 @interface tbbAppDelegate : NSObject <NSApplicationDelegate>{
@@ -33,3 +47,5 @@
 - (BOOL) applicationShouldTerminateAfterLastWindowClosed:(NSApplication *) sender;
 
 @end
+
+#endif
diff --git a/examples/common/gui/xcode/tbbExample/tbbAppDelegate.m b/examples/common/gui/xcode/tbbExample/tbbAppDelegate.m
index 9338508..125f334 100644
--- a/examples/common/gui/xcode/tbbExample/tbbAppDelegate.m
+++ b/examples/common/gui/xcode/tbbExample/tbbAppDelegate.m
@@ -1,29 +1,42 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
-*/
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-//
-//  Created by Xcode* 4.3.2
-//
+
+*/
 
 #import "tbbAppDelegate.h"
-#import <pthread.h>
+
+#if TARGET_OS_IPHONE
+
+ at implementation tbbAppDelegate
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
+{
+    return YES;
+}
+
+- (void)applicationDidEnterBackground:(UIApplication *)application
+{
+    exit(EXIT_SUCCESS);
+}
+
+ at end
+
+#elif TARGET_OS_MAC
 
 @implementation tbbAppDelegate
 
@@ -49,3 +62,5 @@ extern int g_sizex, g_sizey;
 }
 
 @end
+
+#endif
diff --git a/examples/common/gui/xcode/tbbExample/tbbExample-Info.ios.plist b/examples/common/gui/xcode/tbbExample/tbbExample-Info.ios.plist
new file mode 100644
index 0000000..80bdf4f
--- /dev/null
+++ b/examples/common/gui/xcode/tbbExample/tbbExample-Info.ios.plist
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>en</string>
+	<key>CFBundleExecutable</key>
+	<string>$(EXECUTABLE_NAME)</string>
+	<key>CFBundleIdentifier</key>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>$(PRODUCT_NAME)</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1</string>
+	<key>LSRequiresIPhoneOS</key>
+	<true/>
+	<key>UILaunchStoryboardName</key>
+	<string>iOS</string>
+	<key>UIMainStoryboardFile</key>
+	<string>iOS</string>
+	<key>UIRequiredDeviceCapabilities</key>
+	<array>
+		<string>armv7</string>
+	</array>
+	<key>UISupportedInterfaceOrientations</key>
+	<array>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+	<key>UISupportedInterfaceOrientations~ipad</key>
+	<array>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+</dict>
+</plist>
diff --git a/examples/common/gui/xcode/tbbExample/tbbExample-Info.plist b/examples/common/gui/xcode/tbbExample/tbbExample-Info.plist
index 77ce710..3f8fce4 100644
--- a/examples/common/gui/xcode/tbbExample/tbbExample-Info.plist
+++ b/examples/common/gui/xcode/tbbExample/tbbExample-Info.plist
@@ -4,12 +4,14 @@
 <dict>
 	<key>CFBundleDevelopmentRegion</key>
 	<string>en</string>
+	<key>CFBundleDisplayName</key>
+	<string></string>
 	<key>CFBundleExecutable</key>
 	<string>${EXECUTABLE_NAME}</string>
 	<key>CFBundleIconFile</key>
 	<string></string>
 	<key>CFBundleIdentifier</key>
-	<string>Intel.${PRODUCT_NAME:rfc1034identifier}</string>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
 	<key>CFBundleInfoDictionaryVersion</key>
 	<string>6.0</string>
 	<key>CFBundleName</key>
@@ -20,6 +22,10 @@
 	<string>1.0</string>
 	<key>CFBundleSignature</key>
 	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1</string>
+	<key>LSApplicationCategoryType</key>
+	<string>public.app-category.business</string>
 	<key>LSEnvironment</key>
 	<dict>
 		<key>DYLD_LIBRARY_PATH</key>
@@ -27,16 +33,10 @@
 		<key>LIBRARY_PATH</key>
 		<string>Contents/Resources:.:../:/tmp:$DYLD_LIBRARY_PATH</string>
 	</dict>
-	<key>CFBundleDisplayName</key>
-	<string></string>
-	<key>CFBundleVersion</key>
-	<string>1</string>
-	<key>LSApplicationCategoryType</key>
-	<string>public.app-category.business</string>
 	<key>LSMinimumSystemVersion</key>
 	<string>${MACOSX_DEPLOYMENT_TARGET}</string>
 	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 2005-2015 Intel Corporation.  All Rights Reserved.</string>
+	<string>Copyright 2005-2017 Intel Corporation.  All Rights Reserved.</string>
 	<key>NSMainNibFile</key>
 	<string>MainMenu</string>
 	<key>NSPrincipalClass</key>
diff --git a/examples/common/gui/xcode/tbbExample/tbbExample-Prefix.pch b/examples/common/gui/xcode/tbbExample/tbbExample-Prefix.pch
index 5a809d4..cc4ffcc 100644
--- a/examples/common/gui/xcode/tbbExample/tbbExample-Prefix.pch
+++ b/examples/common/gui/xcode/tbbExample/tbbExample-Prefix.pch
@@ -1,27 +1,36 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 //
 // Prefix header for all source files of the 'tbbExample' target in the 'tbbExample' project
 //
 
+#import <Availability.h>
+
+#if TARGET_OS_IPHONE
+#ifdef __OBJC__
+    #import <UIKit/UIKit.h>
+    #import <Foundation/Foundation.h>
+#endif
+#elif TARGET_OS_MAC
 #ifdef __OBJC__
     #import <Cocoa/Cocoa.h>
 #endif
+#endif
diff --git a/examples/common/gui/xvideo.cpp b/examples/common/gui/xvideo.cpp
index de62123..e7d8c47 100644
--- a/examples/common/gui/xvideo.cpp
+++ b/examples/common/gui/xvideo.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 // Uncomment next line to disable shared memory features if you do not have libXext
@@ -177,7 +177,7 @@ bool video::init_window(int xsize, int ysize)
     XMapRaised(dpy, win);
     XFlush(dpy);
 #ifdef X_FULLSYNC
-	XSynchronize(dpy, true);
+    XSynchronize(dpy, true);
 #endif
     XSetErrorHandler(xerr_handler);
 
@@ -244,12 +244,13 @@ generic:
             goto fail;
         }
     }
-    // Note: It may be more efficient to adopt the server's byte order
-    //       and swap once per get_color() call instead of once per pixel.
-    const uint32_t probe = 0x03020100;
-    const bool big_endian = (((const char*)(&probe))[0]==0x03);
-    ximage->byte_order = big_endian ? MSBFirst : LSBFirst;
-
+    if( ximage ) {
+        // Note: It may be more efficient to adopt the server's byte order
+        //       and swap once per get_color() call instead of once per pixel.
+        const uint32_t probe = 0x03020100;
+        const bool big_endian = (((const char*)(&probe))[0]==0x03);
+        ximage->byte_order = big_endian ? MSBFirst : LSBFirst;
+    }
     printf("Note: using %s with %s visual for %d-bit color depth\n", vidstr, vis==DefaultVisual(dpy, theScreen)?"default":"non-default", dispdepth);
     running = true;
     return true;
@@ -304,7 +305,7 @@ void video::main_loop()
 //! Check for pending events once
 bool video::next_frame()
 {
-	if(!running) return false;
+    if(!running) return false;
     //! try acquire mutex if threaded code, returns on failure
     if(vidtype == 3 || threaded && pthread_mutex_trylock(&g_mutex))
         return running;
@@ -340,8 +341,8 @@ bool video::next_frame()
 #ifndef X_FULLSYNC
         XSync(dpy, false); // It is often better then using XSynchronize(dpy, true)
 #endif//X_FULLSYNC
-  	}
-  	if(threaded) pthread_mutex_unlock(&g_mutex);
+    }
+    if(threaded) pthread_mutex_unlock(&g_mutex);
     return true;
 }
 
@@ -353,8 +354,8 @@ void video::show_title()
 }
 
 drawing_area::drawing_area(int x, int y, int sizex, int sizey)
-    : start_x(x), start_y(y), size_x(sizex), size_y(sizey), pixel_depth(dispdepth),
-    base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex), ptr32(g_pImg)
+    : base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex),
+    pixel_depth(dispdepth), ptr32(g_pImg), start_x(x), start_y(y), size_x(sizex), size_y(sizey)
 {
     assert(x < g_sizex); assert(y < g_sizey);
     assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);
diff --git a/examples/common/index.html b/examples/common/index.html
index 777b98b..e20d0ad 100644
--- a/examples/common/index.html
+++ b/examples/common/index.html
@@ -1,68 +1,397 @@
-<HTML>
-<BODY>
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
 
-<H2>Overview</H2>
-This directory contains common code that is used in the Intel® Threading Building Blocks (Intel® TBB) examples.
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
 
-<P>
-This code is not intended to be used directly.  It is incorporated automatically by the examples that need it.
-</P>
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Common source code for samples</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Common source code for samples</h1>
+	</div>
+	
+	<p>
+		This directory contains common code that is used in the Intel® Threading Building Blocks (Intel® TBB) samples.
+		<br>
+		This code is not intended to be used directly. It is incorporated automatically by the examples that need it.
+	</p>
 
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="gui">gui</A>
-<DD>GUI code for examples that have graphical user interfaces.  Currently supports:
-    <UL>
-    <LI>GDI+*, DirectDraw*, Direct2D* (Windows* systems)
-    <LI>OpenGL* (OS X* systems)
-    <LI>X window (Linux* or OS X* systems)
-    </UL>
-    See the examples that use the GUI
-    (<A HREF=../parallel_for/tachyon/index.html>tachyon</A>, <A HREF=../parallel_for/seismic/index.html>seismic</A>)
-    for more details.
-</DL>
-<DL>
-<DT><A HREF="utility">utility</A>
-<DD>Common driver & utility code for examples. Currently provides:
-    <UL>
-    <LI>class FastRandom - a random number generator that uses linear congruental method
-        (<A HREF="utility/fast_random.h">fast_random.h</A>)
-    <LI>class thread_number_range - a class to specify the numbers of threads an example should use
-        (<A HREF="utility/utility.h">utility.h</A>)
-    <LI>support for command line interface - class cli_argument_pack and function parse_cli_arguments
-        (<A HREF="utility/utility.h">utility.h</A>)
-    </UL>
-</DL>
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="gui/">gui</a>
+				<dd>
+					GUI code for examples that have graphical user interfaces. Currently supports:
+					<ul>
+						<li>GDI+*, DirectDraw*, Direct2D* (Windows* systems)
+						<li>OpenGL* (macOS* systems)
+						<li>X window (Linux* or macOS* systems)
+					</ul>
+					See the examples that use the GUI
+					(<a href="../graph/stereo/readme.html">stereo</a>,
+					<a href="../parallel_for/tachyon/readme.html">tachyon</a>, 
+					<a href="../parallel_for/seismic/readme.html">seismic</a>,
+					<a href="../task_arena/fractal/readme.html">fractal</a>)
+					for more details.
+			</dl>
+			<dl>
+				<dt><a href="utility/">utility</a>
+				<dd>Common driver and utility code for examples. Currently provides:
+					<ul>
+						<li>class FastRandom - a random number generator that uses linear congruental method
+							(<a href="utility/fast_random.h">fast_random.h</a>)
+						<li>class thread_number_range - a class to specify the numbers of threads an example should use
+							(<a href="utility/utility.h">utility.h</a>)
+						<li>support for command line interface - class cli_argument_pack and function parse_cli_arguments
+							(<a href="utility/utility.h">utility.h</a>)
+					</ul>
+			</dl>
+		</div>
+	</div>
+	<div class="changes">
+		<div class="h3-alike">Common information</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+		<br>
+		<div class="h4-alike">Number of threads</div>
+			<p>
+				Most Intel TBB examples allow to specify <i>n-of-threads</i>, the set of thread numbers that should be used to run an example.
+				<br>Usually, it is a range of the form <i>low[:high[:(+|*|#)S]]</i>, where <i>low</i> and optional <i>high</i>
+				are non-negative integers or 'auto' for the default choice, and optional step expression <i>(+|*|#)S</i> 
+				specifies how thread numbers are chosen within the range:
+				<ul>
+					<li>With <i>+/*</i>, the previous number is incremented/multiplied by <i>S</i>.
+					E.g., expression '12:16:+1' means 12,13,14,15,16 threads, and '1:16:*2' means 1,2,4,8,16 threads.
+					<li>With <i>#</i>, <i>S</i> is the desired number of steps between any subsequent powers of 2;
+					it must be a power of 2 on its own, with most meaningful values being 2, 4, and 8. 
+					For a given number of threads, the actual step value is computed as the quotient
+					of the nearest smaller power of 2 divided by the number of steps, but is at least 1.
+					E.g., '1:32:#4' means 1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32 threads;
+					note the step doubling at 8 and 16 to keep 4 steps between powers of 2.
+				</ul>
+				A default value for the number of threads can be customized in an example. If not customized, it is '1:auto:#4'.
+				The 'auto' parameter is substituted with a value returned by a specified function, which typically is
+				<code>tbb::task_scheduler_init::default_num_threads()</code>.
+			</p>
+		</div>
+	</div>
 
-<H2>Common information</H2>
-<H3>Number of threads</H3>
-Most Intel TBB examples allow to specify <I>n-of-threads</I>, the set of thread numbers that should be used to run an example.
-<BR>Usually, it is a range of the form <I>low[:high[:(+|*|#)S]]</I>, where <I>low</I> and optional <I>high</I>
-are non-negative integers or 'auto' for the default choice, and optional step expression <I>(+|*|#)S</I> 
-specifies how thread numbers are chosen within the range:
-    <UL>
-    <LI>With <I>+/*</I>, the previous number is incremented/multiplied by <I>S</I>.
-        E.g., expression '12:16:+1' means 12,13,14,15,16 threads, and '1:16:*2' means 1,2,4,8,16 threads.
-    <LI>With <I>#</I>, <I>S</I> is the desired number of steps between any subsequent powers of 2;
-        it must be a power of 2 on its own, with most meaningful values being 2,4, and 8. 
-        For a given number of threads, the actual step value is computed as the quotient
-        of the nearest smaller power of 2 divided by the number of steps, but is at least 1.
-        E.g., '1:32:#4' means 1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32 threads;
-        note the step doubling at 8 and 16 to keep 4 steps between powers of 2.
-    </UL>
-A default value for the number of threads can be customized in an example; if not customized, it is '1:auto:#4'.
-The 'auto' parameter is substituted with a value returned by a specified function, which typically is
-tbb::task_scheduler_init::default_num_threads().
-<P/>
-
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information:</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>
+</body>
+</html>
diff --git a/examples/common/toolset.props b/examples/common/toolset.props
index a99e238..44388c6 100644
--- a/examples/common/toolset.props
+++ b/examples/common/toolset.props
@@ -1,9 +1,9 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <PlatformToolset Condition="Exists('$(VCTargetsPath)\Platforms\$(Platform)\PlatformToolsets\Intel C++ Compiler XE 14.0')">Intel C++ Compiler XE 14.0</PlatformToolset>
-    <PlatformToolset Condition="Exists('$(VCTargetsPath)\Platforms\$(Platform)\PlatformToolsets\Intel C++ Compiler 15.0 [Intel(R) System Studio]')">Intel C++ Compiler 15.0 [Intel(R) System Studio]</PlatformToolset>
-    <PlatformToolset Condition="Exists('$(VCTargetsPath)\Platforms\$(Platform)\PlatformToolsets\Intel C++ Compiler XE 15.0')">Intel C++ Compiler XE 15.0</PlatformToolset>
-    <UseIntelTBB Condition="'$(UseIntelTBB)' == ''">true</UseIntelTBB>
-  </PropertyGroup>
-</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <PlatformToolset Condition="Exists('$(VCTargetsPath)\Platforms\$(Platform)\PlatformToolsets\Intel C++ Compiler 15.0 [Intel(R) System Studio]')">Intel C++ Compiler 15.0 [Intel(R) System Studio]</PlatformToolset>
+    <PlatformToolset Condition="Exists('$(VCTargetsPath)\Platforms\$(Platform)\PlatformToolsets\Intel C++ Compiler XE 15.0')">Intel C++ Compiler XE 15.0</PlatformToolset>
+    <PlatformToolset Condition="Exists('$(VCTargetsPath)\Platforms\$(Platform)\PlatformToolsets\Intel C++ Compiler 16.0')">Intel C++ Compiler 16.0</PlatformToolset>
+    <UseIntelTBB Condition="'$(UseIntelTBB)' == ''">true</UseIntelTBB>
+  </PropertyGroup>
+</Project>
diff --git a/examples/common/utility/fast_random.h b/examples/common/utility/fast_random.h
index c360ebc..e4bc425 100644
--- a/examples/common/utility/fast_random.h
+++ b/examples/common/utility/fast_random.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 #ifndef FAST_RANDOM_H_
diff --git a/examples/common/utility/utility.h b/examples/common/utility/utility.h
index 3f534be..6f186f0 100644
--- a/examples/common/utility/utility.h
+++ b/examples/common/utility/utility.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef UTILITY_H_
@@ -28,6 +28,7 @@
 #pragma offload_attribute (pop)
 #endif // __TBB_MIC_OFFLOAD
 
+#include <utility>
 #include <string>
 #include <cstring>
 #include <vector>
@@ -46,7 +47,9 @@
 namespace utility{
     namespace internal{
 
-#if ((__GNUC__*100+__GNUC_MINOR__>=404 && __GXX_EXPERIMENTAL_CXX0X__) || _MSC_VER >= 1600) && (!__INTEL_COMPILER || __INTEL_COMPILER >= 1200 )
+#if (_MSC_VER >= 1600 || __cplusplus >= 201103L || __GXX_EXPERIMENTAL_CXX0X__) \
+    && (_CPPLIB_VER || _LIBCPP_VERSION || __GLIBCXX__ && _UNIQUE_PTR_H ) \
+    && (!__INTEL_COMPILER || __INTEL_COMPILER >= 1200 )
     // std::unique_ptr is available, and compiler can use it
     #define smart_ptr std::unique_ptr
     using std::swap;
@@ -92,9 +95,9 @@ namespace utility{
             const std::string description;
 
             type_base (std::string a_name, std::string a_description) : name(a_name), description(a_description) {}
-            virtual void parse_and_store (const std::string & s)=0;
-            virtual std::string value() const =0;
-            virtual smart_ptr<type_base> clone()const =0;
+            virtual void parse_and_store(const std::string & s) = 0;
+            virtual std::string value() const = 0;
+            virtual smart_ptr<type_base> clone() const = 0;
             virtual ~type_base(){}
         };
         template <typename type>
@@ -109,7 +112,7 @@ namespace utility{
             type_impl(std::string a_name, std::string a_description, type & a_target, validating_function_type a_validating_function = NULL)
                 : type_base (a_name,a_description), target(a_target),validating_function(a_validating_function)
             {};
-            void parse_and_store (const std::string & s){
+            void parse_and_store (const std::string & s) /*override*/ {
                 try{
                     const bool is_bool = internal::is_bool<type>::value();
                     if (is_bool && s.empty()){
@@ -134,12 +137,16 @@ namespace utility{
                     }
                 }
             }
-            virtual std::string value()const{
+            template <typename t>
+            static bool is_null_c_str(t&){return false;}
+            static bool is_null_c_str(char* s){return s==NULL;}
+            std::string value() const /*override*/ {
                 std::stringstream str;
-                str<<target;
+                if (!is_null_c_str(target))
+                    str<<target;
                 return str.str();
             }
-            virtual smart_ptr<type_base> clone() const {
+            smart_ptr<type_base> clone() const /*override*/ {
                 return smart_ptr<type_base>(new type_impl(*this));
             }
         };
@@ -484,7 +491,11 @@ namespace utility{
    ;
 
     inline void report_elapsed_time(double seconds){
-        std::cout << "elapsed time : "<<seconds<<" seconds \n";
+        std::cout<<"elapsed time : "<<seconds<<" seconds"<<std::endl;
+    }
+
+    inline void report_skipped(){
+        std::cout<<"skip"<<std::endl;
     }
 
     inline void parse_cli_arguments(int argc, const char* argv[], utility::cli_argument_pack cli_pack){
diff --git a/examples/concurrent_hash_map/count_strings/Makefile b/examples/concurrent_hash_map/count_strings/Makefile
index b5a4a5f..6553233 100644
--- a/examples/concurrent_hash_map/count_strings/Makefile
+++ b/examples/concurrent_hash_map/count_strings/Makefile
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # GNU Makefile that builds and runs example.
 run_cmd=
@@ -34,6 +34,8 @@ run_cmd=../../common/android.linux.launcher.sh
 else
 LIBS+= -lrt 
 endif
+else ifeq ($(shell uname), Darwin)
+override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib
 endif
 
 all:   release test
diff --git a/examples/concurrent_hash_map/count_strings/Makefile.windows b/examples/concurrent_hash_map/count_strings/Makefile.windows
index a2ddf82..3bb0b5f 100644
--- a/examples/concurrent_hash_map/count_strings/Makefile.windows
+++ b/examples/concurrent_hash_map/count_strings/Makefile.windows
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # Common Makefile that builds and runs example.
 
diff --git a/examples/concurrent_hash_map/count_strings/count_strings.cpp b/examples/concurrent_hash_map/count_strings/count_strings.cpp
index 203319d..9ce1000 100644
--- a/examples/concurrent_hash_map/count_strings/count_strings.cpp
+++ b/examples/concurrent_hash_map/count_strings/count_strings.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Workaround for ICC 11.0 not finding __sync_fetch_and_add_4 on some of the Linux platforms.
diff --git a/examples/concurrent_hash_map/count_strings/index.html b/examples/concurrent_hash_map/count_strings/index.html
deleted file mode 100644
index 3ecf322..0000000
--- a/examples/concurrent_hash_map/count_strings/index.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<HTML>
-<BODY>
-
-<H2>Overview</H2>
-The example counts the number of unique words in a text.
-
-
-<H2>Files</H2>
-<DL>
-<DT><A HREF="count_strings.cpp">count_strings.cpp</A>
-<DD>Source code for example.
-<DT><A HREF="Makefile">Makefile</A>
-<DD>Makefile for building example.
-</DL>
-
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2010 workspace for building and running the example (Windows* systems only). 
-<DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example (OS X* systems only). 
-</DL>
-
-<H2>To Build</H2>
-General build directions can be found <A HREF=../../index.html#build>here</A>.
-
-<H2>Usage</H2>
-<DL>
-<DT><TT>count_strings <I>-h</I></TT>
-<DD>Prints the help for command line options
-<DT><TT>count_strings [<I>n-of-threads</I>=value] [<I>n-of-strings</I>=value] [<I>verbose</I>] [<I>silent</I>]</TT>
-<DT><TT>count_strings [<I>n-of-threads</I> [<I>n-of-strings</I>]] [<I>verbose</I>] [<I>silent</I>] </TT> 
-<DD><I>n-of-threads</I> is the number of threads to use; a range of the form <I>low</I>[:<I>high</I>], where low and optional high are non-negative integers or 'auto' for the TBB default.<BR>
-    <I>n-of-strings</I> is a number of strings.<BR>
-    <I>verbose</I> - enables printing of extra information during execution.<BR>
-    <I>silent</I> - no output except elapsed time.<BR>
-
-<DT>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
-<DD>Build a <I>debug</I> version of the example
-    (see the <A HREF=../../index.html#build>build directions</A>).
-    <BR>Run it with a small number of strings and the desired number of threads, e.g., <TT>count_strings 2 10000</TT>.
-</DL>
-
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
-
diff --git a/examples/concurrent_hash_map/count_strings/msvs/count_strings.sln b/examples/concurrent_hash_map/count_strings/msvs/count_strings.sln
index 536455b..2a9bec2 100644
--- a/examples/concurrent_hash_map/count_strings/msvs/count_strings.sln
+++ b/examples/concurrent_hash_map/count_strings/msvs/count_strings.sln
@@ -1,26 +1,26 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "count_strings", "count_strings.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A252C}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
-		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{3AA40693-F93D-4D4B-B32E-068F511A252C}.Debug|Win32.ActiveCfg = Debug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A252C}.Debug|Win32.Build.0 = Debug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A252C}.Debug|x64.ActiveCfg = Debug|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A252C}.Debug|x64.Build.0 = Debug|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A252C}.Release|Win32.ActiveCfg = Release|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A252C}.Release|Win32.Build.0 = Release|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A252C}.Release|x64.ActiveCfg = Release|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A252C}.Release|x64.Build.0 = Release|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "count_strings", "count_strings.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A252C}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{3AA40693-F93D-4D4B-B32E-068F511A252C}.Debug|Win32.ActiveCfg = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252C}.Debug|Win32.Build.0 = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252C}.Debug|x64.ActiveCfg = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A252C}.Debug|x64.Build.0 = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A252C}.Release|Win32.ActiveCfg = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252C}.Release|Win32.Build.0 = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252C}.Release|x64.ActiveCfg = Release|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A252C}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/concurrent_hash_map/count_strings/msvs/count_strings.vcxproj b/examples/concurrent_hash_map/count_strings/msvs/count_strings.vcxproj
index 4929fd5..4761ca0 100644
--- a/examples/concurrent_hash_map/count_strings/msvs/count_strings.vcxproj
+++ b/examples/concurrent_hash_map/count_strings/msvs/count_strings.vcxproj
@@ -1,197 +1,201 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>count_strings</ProjectName>
-    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A252C}</ProjectGuid>
-    <RootNamespace>count_strings</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <Import Project="..\..\..\common\toolset.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\count_strings.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="..\index.html" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>count_strings</ProjectName>
+    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A252C}</ProjectGuid>
+    <RootNamespace>count_strings</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\count_strings.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\readme.html" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/examples/concurrent_hash_map/count_strings/readme.html b/examples/concurrent_hash_map/count_strings/readme.html
new file mode 100644
index 0000000..e6352ac
--- /dev/null
+++ b/examples/concurrent_hash_map/count_strings/readme.html
@@ -0,0 +1,401 @@
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
+
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
+
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Count_strings sample</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Count_strings sample</h1>
+	</div>
+	
+	<p>
+		The example counts the number of unique words in a text.
+	</p>
+
+	<div class="changes">
+		<div class="h3-alike">System Requirements</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				For the most up to date system requirements, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
+			</p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Files</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="count_strings.cpp">count_strings.cpp</a>
+				<dd>Source code for the example.
+				<dt><a href="Makefile">Makefile</a>
+				<dd>Makefile for building the example.
+			</dl>
+		</div>
+	</div>	
+
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="msvs/">msvs</a>
+				<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only). 
+				<dt><a href="xcode/">xcode</a>
+				<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only). 
+			</dl>
+			<p>For information about the minimum supported version of IDE, see <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a></p>
+		</div>
+	</div>	
+
+	<div class="changes">
+		<div class="h3-alike">Build instructions</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>
+				General build directions can be found <a href="../../index.html">here</a>.
+			</p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Usage</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><tt>count_strings <i>-h</i></tt>
+				<dd>Prints the help for command line options
+				<dt><tt>count_strings [<i>n-of-threads</i>=value] [<i>n-of-strings</i>=value] [<i>verbose</i>] [<i>silent</i>]</tt>
+				<dt><tt>count_strings [<i>n-of-threads</i> [<i>n-of-strings</i>]] [<i>verbose</i>] [<i>silent</i>] </tt> 
+				<dd><i>n-of-threads</i> is the number of threads to use; a range of the form <i>low</i>[:<i>high</i>], where low and optional high are non-negative integers or 'auto' for the TBB default.<br>
+					<i>n-of-strings</i> is a number of strings.<br>
+					<i>verbose</i> - enables printing of extra information during execution.<br>
+					<i>silent</i> - no output except elapsed time.<br>
+				<dt>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
+				<dd>Build a <i>debug</i> version of the example.
+					<br>Run it with a small number of strings and the desired number of threads, e.g., <tt>count_strings 2 10000</tt>.
+			</dl>
+		</div>
+	</div>
+	
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>	
+	
+</body>
+</html>
diff --git a/examples/concurrent_hash_map/index.html b/examples/concurrent_hash_map/index.html
index 33b7ca5..e4d77d8 100644
--- a/examples/concurrent_hash_map/index.html
+++ b/examples/concurrent_hash_map/index.html
@@ -1,24 +1,344 @@
-<HTML>
-<BODY>
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
 
-<H2>Overview</H2>
-This directory has examples of the template <code>concurrent_hash_map</code>.
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
 
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="count_strings/index.html">count_strings</A>
-<DD>Concurrently inserts strings into a concurrent_hash_map.
-</DL>
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Samples on concurrent_hash_map container</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Samples on <code>concurrent_hash_map</code> container</h1>
+	</div>
+	
+	<p>
+		This directory has examples of the <code>concurrent_hash_map</code> container.
+	</p>
 
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="count_strings/readme.html">count_strings</a>
+				<dd>Concurrently inserts strings into a <code>concurrent_hash_map</code> container.
+			</dl>
+		</div>
+	</div>
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information:</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>
+</body>
+</html>
 
diff --git a/examples/concurrent_priority_queue/index.html b/examples/concurrent_priority_queue/index.html
new file mode 100644
index 0000000..0525b10
--- /dev/null
+++ b/examples/concurrent_priority_queue/index.html
@@ -0,0 +1,344 @@
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
+
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
+
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Samples on concurrent_priority_queue container</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Samples on <code>concurrent_priority_queue</code> container</h1>
+	</div>
+	
+	<p>
+		This directory has examples of the <code>concurrent_priority_queue</code> container.
+	</p>
+
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="shortpath/readme.html">shortpath</a>
+				<dd>Solves the single source shortest path problem using a <code>concurrent_priority_queue</code> container.
+			</dl>
+		</div>
+	</div>
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information:</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>
+</body>
+</html>
+
diff --git a/examples/concurrent_priority_queue/shortpath/Makefile b/examples/concurrent_priority_queue/shortpath/Makefile
index f5cdbf6..1b2c262 100644
--- a/examples/concurrent_priority_queue/shortpath/Makefile
+++ b/examples/concurrent_priority_queue/shortpath/Makefile
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # GNU Makefile that builds and runs example.
 run_cmd=
@@ -22,15 +22,13 @@ PROG=shortpath
 ARGS=4 N=1000 start=0 end=999 verbose
 PERF_RUN_ARGS=auto N=1000 start=0 end=99 silent
 
-# The C++ compiler
+# icpc by default
 ifneq (,$(shell which icc 2>/dev/null))
-CXX=icc
-endif # which icc
-ifneq (,$(filter icc icpc,$(CXX)))
-ifneq (0,$(cpp0x))
-CXX0XFLAGS?=-std=c++0x -D_TBB_CPP0X
+    CXX=icpc
 endif
-endif # icc
+
+# autodetect C++11 support
+include ../../common/examples-common.inc
 
 ifeq ($(shell uname), Linux)
 ifeq ($(target), android)
@@ -39,6 +37,8 @@ run_cmd=../../common/android.linux.launcher.sh
 else
 LIBS+= -lrt 
 endif
+else ifeq ($(shell uname), Darwin)
+override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib
 endif
 
 all:    release test
diff --git a/examples/concurrent_priority_queue/shortpath/Makefile.windows b/examples/concurrent_priority_queue/shortpath/Makefile.windows
index 0fab8f6..f02416e 100644
--- a/examples/concurrent_priority_queue/shortpath/Makefile.windows
+++ b/examples/concurrent_priority_queue/shortpath/Makefile.windows
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # Common Makefile that builds and runs example.
 
diff --git a/examples/concurrent_priority_queue/shortpath/index.html b/examples/concurrent_priority_queue/shortpath/index.html
deleted file mode 100644
index a3ad551..0000000
--- a/examples/concurrent_priority_queue/shortpath/index.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<HTML>
-<BODY>
-
-<H2>Overview</H2>
-
-This directory contains a simple example that solves the single source
-shortest path problem.  It is parameterized by N, a number of nodes,
-and a start and end node in [0..N).  A graph is generated with N nodes
-and some random number of connections between those nodes.  A parallel
-algorithm based on A* is used to find the shortest path.  This
-algorithm varies from serial A* in that it needs to add nodes back to
-the open set when the g estimate (shortest path from start to the
-node) is improved, even if the node has already been "visited".  This
-is because nodes are added and removed from the open-set in parallel,
-resulting in some less optimal paths being explored.  The open-set is
-implemented with the concurrent_priority_queue.  Note that since we
-re-visit nodes, the f estimate (on which the priority queue is sorted)
-is not technically needed, so we could use this same parallel
-algorithm with just a concurrent_queue.  However, keeping the f
-estimate and using concurrent_priority_queue results in much better
-performance.  Silent mode prints run time only, regular mode prints
-shortest path length, and verbose mode prints out the shortest path.
-The generated graph follows a pattern in which the closer two pairs of
-node ids are together, the fewer hops there are in a typical path
-between those nodes.  So, for example, the path between 5 and 7 likely
-has few hops whereas 14 to 78 has more and 0 to 9999 has even more,
-etc.
-
-
-<H2>Files</H2>
-<DL>
-<DT><A HREF="shortpath.cpp">shortpath.cpp</A>
-<DD>Driver.
-
-<DT><A HREF="Makefile">Makefile</A>
-<DD>Makefile for building example.
-
-</DL>
-
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2010 workspace for building and running the example with the Intel® C++ compiler (Windows* systems only).
-<DT><A HREF="xcode">xcode</A>
-<DD>Contains OS X* Xcode* workspace for building and running the example (OS X* systems only).
-</DL>
-
-<H2>To Build</H2>
-General build directions can be found <A HREF=../../index.html#build>here</A>.
-<P></P>
-
-<H2>Usage</H2>
-<DL>
-
-<DT><TT>shortpath <I>-h</I></TT>
-<DD>Prints the help for command line options
-<DT><TT>shortpath [<I>#threads</I>=value] [<I>verbose</I>] [<I>silent</I>] [<I>N</I>=value] [<I>start</I>=value] [<I>end</I>=value] [<I>#threads</I>]</TT>
-<DD><I>#threads</I> is the number of threads to use; a range of the form <I>low</I>[:<I>high</I>] where low and optional high are non-negative integers, or 'auto' for the TBB default.<BR>
-    <I>verbose</I> print full path to screen<BR>
-    <I>silent</I> limits output to timing info; overrides verbose<BR>
-    <I>N</I> number of nodes in graph<BR>
-    <I>start</I> node to start path at<BR>
-    <I>end</I> node to end path at<BR>
-
-
-<DT>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
-<DD>Build a <I>debug</I> version of the example
-    (see the <A HREF=../../index.html#build>build directions</A>).
-    <BR>Run it with a small problem size and the desired number of threads, e.g., <TT>shortpath 4 N=20 start=0 end=19</TT>.
-</DL>
-
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
diff --git a/examples/concurrent_priority_queue/shortpath/msvs/shortpath.sln b/examples/concurrent_priority_queue/shortpath/msvs/shortpath.sln
index 664ee97..b0f3df7 100644
--- a/examples/concurrent_priority_queue/shortpath/msvs/shortpath.sln
+++ b/examples/concurrent_priority_queue/shortpath/msvs/shortpath.sln
@@ -1,26 +1,26 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shortpath", "shortpath.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A252A}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
-		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.ActiveCfg = Debug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.Build.0 = Debug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.ActiveCfg = Debug|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.Build.0 = Debug|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.ActiveCfg = Release|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.Build.0 = Release|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.ActiveCfg = Release|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.Build.0 = Release|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shortpath", "shortpath.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A252A}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.ActiveCfg = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.Build.0 = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.ActiveCfg = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.Build.0 = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.ActiveCfg = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.Build.0 = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.ActiveCfg = Release|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/concurrent_priority_queue/shortpath/msvs/shortpath.vcxproj b/examples/concurrent_priority_queue/shortpath/msvs/shortpath.vcxproj
index 2935e0e..cb79208 100644
--- a/examples/concurrent_priority_queue/shortpath/msvs/shortpath.vcxproj
+++ b/examples/concurrent_priority_queue/shortpath/msvs/shortpath.vcxproj
@@ -1,197 +1,201 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>shortpath</ProjectName>
-    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A252A}</ProjectGuid>
-    <RootNamespace>shortpath</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <Import Project="..\..\..\common\toolset.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\shortpath.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="..\index.html" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>shortpath</ProjectName>
+    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A252A}</ProjectGuid>
+    <RootNamespace>shortpath</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\shortpath.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\readme.html" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/examples/concurrent_priority_queue/shortpath/readme.html b/examples/concurrent_priority_queue/shortpath/readme.html
new file mode 100644
index 0000000..7f745b2
--- /dev/null
+++ b/examples/concurrent_priority_queue/shortpath/readme.html
@@ -0,0 +1,427 @@
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
+
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
+
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Shortpath sample</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Shortpath sample</h1>
+	</div>
+	
+	<p>
+		This directory contains a simple example that solves the single source
+		shortest path problem.
+	<br><br>
+		It is parameterized by N, a number of nodes, and a start and end node in [0..N). 
+		A graph is generated with N nodes and some random number of connections between those nodes.
+		A parallel algorithm based on A* is used to find the shortest path.
+	<br><br>
+		This algorithm varies from serial A* in that it needs to add nodes back to
+		the open set when the g estimate (shortest path from start to the node) is improved, 
+		even if the node has already been "visited".  This is because nodes are added and removed 
+		from the open-set in parallel, resulting in some less optimal paths being explored.
+		The open-set is implemented with the concurrent_priority_queue.
+	<br><br>
+		Note that since we re-visit nodes, the <i>f</i> estimate (on which the priority queue is sorted)
+		is not technically needed, so we could use this same parallel algorithm with just a concurrent_queue.
+		However, keeping the <i>f</i> estimate and using <code>concurrent_priority_queue</code>
+		results in much better performance.
+	<br><br>
+		Silent mode prints run time only,
+		regular mode prints the shortest path length, 
+		and verbose mode prints out the shortest path.
+	<br><br>
+		The generated graph follows a pattern in which the closer two pairs of
+		node ids are together, the fewer hops there are in a typical path
+		between those nodes. So, for example, the path between 5 and 7 likely
+		has few hops whereas 14 to 78 has more and 0 to 9999 has even more,
+		etc.
+	</p>
+
+	<div class="changes">
+		<div class="h3-alike">System Requirements</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				For the most up to date system requirements, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
+			</p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Files</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="shortpath.cpp">shortpath.cpp</a>
+				<dd>Driver.
+				<dt><a href="Makefile">Makefile</a>
+				<dd>Makefile for building the example.
+			</dl>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="msvs/">msvs</a>
+				<dd>Contains Microsoft* Visual Studio* workspace for building and running the example with the Intel® C++ Compiler (Windows* systems only).
+				<dt><a href="xcode/">xcode</a>
+				<dd>Contains macOS* Xcode* workspace for building and running the example (macOS* systems only).
+			</dl>
+			<p>For information about the minimum supported version of IDE, see <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a></p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Build instructions</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>General build directions can be found <a href="../../index.html">here</a>.</p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Usage</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><tt>shortpath <i>-h</i></tt>
+				<dd>Prints the help for command line options
+				<dt><tt>shortpath [<i>#threads</i>=value] [<i>verbose</i>] [<i>silent</i>] [<i>N</i>=value] [<i>start</i>=value] [<i>end</i>=value] [<i>#threads</i>]</tt>
+				<dd><tt><i>#threads</i></tt> is the number of threads to use; a range of the form <tt><i>low[:high]</i></tt> where <tt><i>low</i></tt> and optional <tt><i>high</i></tt> are non-negative integers, or <tt><i>'auto'</i></tt> for the TBB default.<br>
+					<tt><i>verbose</i></tt> print full path to screen<br>
+					<tt><i>silent</i></tt> limits output to timing info; overrides verbose<br>
+					<tt><i>N</i></tt> number of nodes in graph<br>
+					<tt><i>start</i></tt> node to start path at<br>
+					<tt><i>end</i></tt> node to end path at<br>
+				<dt>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
+				<dd>Build a <i>debug</i> version of the example
+					(see the <a href="../../index.html">build instructions</a>).
+					<br>Run it with a small problem size and the desired number of threads, e.g., <tt>shortpath 4 N=20 start=0 end=19</tt>.
+			</dl>
+		</div>
+	</div>
+	
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>	
+	
+</body>
+</html>
diff --git a/examples/concurrent_priority_queue/shortpath/shortpath.cpp b/examples/concurrent_priority_queue/shortpath/shortpath.cpp
index f90f66e..5c436b8 100644
--- a/examples/concurrent_priority_queue/shortpath/shortpath.cpp
+++ b/examples/concurrent_priority_queue/shortpath/shortpath.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include <cstdio>
@@ -38,14 +38,6 @@
     #pragma warning (disable: 4267)
 #endif /* _MSC_VER && _Wp64 */
 
-#if __INTEL_COMPILER
-#define __TBB_LAMBDAS_PRESENT ( _TBB_CPP0X && __INTEL_COMPILER > 1100 )
-#elif __GNUC__
-#define __TBB_LAMBDAS_PRESENT ( _TBB_CPP0X && __TBB_GCC_VERSION >= 40500 )
-#elif _MSC_VER
-#define __TBB_LAMBDAS_PRESENT ( _MSC_VER>=1600 )
-#endif
-
 using namespace std;
 using namespace tbb;
 
@@ -53,7 +45,7 @@ struct point {
     double x, y;
     point() {}
     point(double _x, double _y) : x(_x), y(_y) {}
-    point(const point& p) : x(p.x), y(p.y) {} 
+    point(const point& p) : x(p.x), y(p.y) {}
 };
 
 double get_distance(const point& p1, const point& p2) {
@@ -116,7 +108,7 @@ concurrent_priority_queue<vertex_rec, compare_f> open_set; // tentative vertices
 
 void shortpath_helper();
 
-#if !__TBB_LAMBDAS_PRESENT
+#if !__TBB_CPP11_LAMBDAS_PRESENT
 class shortpath_helper_functor {
 public:
     shortpath_helper_functor() {};
@@ -129,7 +121,7 @@ void shortpath() {
     g_distance[src] = 0.0; // src's distance from src is zero
     f_distance[src] = get_distance(vertices[src], vertices[dst]); // estimate distance from src to dst
     open_set.push(make_pair(src,f_distance[src])); // push src into open_set
-#if __TBB_LAMBDAS_PRESENT    
+#if __TBB_CPP11_LAMBDAS_PRESENT
     sp_group->run([](){ shortpath_helper(); });
 #else
     sp_group->run( shortpath_helper_functor() );
@@ -169,11 +161,11 @@ void shortpath_helper() {
                 open_set.push(make_pair(v,new_f_v));
                 size_t n_spawn = ++num_spawn;
                 if (n_spawn < max_spawn) {
-#if __TBB_LAMBDAS_PRESENT    
+#if __TBB_CPP11_LAMBDAS_PRESENT
                     sp_group->run([]{ shortpath_helper(); });
 #else
                     sp_group->run( shortpath_helper_functor() );
-#endif                
+#endif
                 }
                 else --num_spawn;
             }
@@ -219,9 +211,9 @@ int get_default_num_threads() {
     return threads;
 }
 
-#if !__TBB_LAMBDAS_PRESENT
+#if !__TBB_CPP11_LAMBDAS_PRESENT
 class gen_vertices {
-public: 
+public:
     gen_vertices() {}
     void operator() (blocked_range<size_t>& r) const {
         utility::FastRandom my_random((unsigned int)r.begin());
@@ -232,7 +224,7 @@ public:
 };
 
 class gen_edges {
-public: 
+public:
     gen_edges() {}
     void operator() (blocked_range<size_t>& r) const {
         utility::FastRandom my_random((unsigned int)r.begin());
@@ -246,7 +238,7 @@ public:
 };
 
 class reset_vertices {
-public: 
+public:
     reset_vertices() {}
     void operator() (blocked_range<size_t>& r) const {
         for (size_t i=r.begin(); i!=r.end(); ++i) {
@@ -266,8 +258,8 @@ void InitializeGraph() {
     f_distance.resize(N);
     locks = new spin_mutex[N];
     if (verbose) printf("Generating vertices...\n");
-#if __TBB_LAMBDAS_PRESENT
-    parallel_for(blocked_range<size_t>(0,N,64), 
+#if __TBB_CPP11_LAMBDAS_PRESENT
+    parallel_for(blocked_range<size_t>(0,N,64),
                  [&](blocked_range<size_t>& r) {
                      utility::FastRandom my_random(r.begin());
                      for (size_t i=r.begin(); i!=r.end(); ++i) {
@@ -278,8 +270,8 @@ void InitializeGraph() {
     parallel_for(blocked_range<size_t>(0,N,64), gen_vertices(), simple_partitioner());
 #endif
     if (verbose) printf("Generating edges...\n");
-#if __TBB_LAMBDAS_PRESENT
-    parallel_for(blocked_range<size_t>(0,N,64), 
+#if __TBB_CPP11_LAMBDAS_PRESENT
+    parallel_for(blocked_range<size_t>(0,N,64),
                  [&](blocked_range<size_t>& r) {
                      utility::FastRandom my_random(r.begin());
                      for (size_t i=r.begin(); i!=r.end(); ++i) {
@@ -307,8 +299,8 @@ void ReleaseGraph() {
 
 void ResetGraph() {
     task_scheduler_init init(get_default_num_threads());
-#if __TBB_LAMBDAS_PRESENT
-    parallel_for(blocked_range<size_t>(0,N), 
+#if __TBB_CPP11_LAMBDAS_PRESENT
+    parallel_for(blocked_range<size_t>(0,N),
                  [&](blocked_range<size_t>& r) {
                      for (size_t i=r.begin(); i!=r.end(); ++i) {
                          f_distance[i] = g_distance[i] = INF;
@@ -336,15 +328,15 @@ int main(int argc, char *argv[]) {
         if (silent) verbose = false;  // make silent override verbose
         else
             printf("shortpath will run with %d vertices to find shortest path between vertices"
-                   " %d and %d using %d:%d threads.\n", 
+                   " %d and %d using %d:%d threads.\n",
                    (int)N, (int)src, (int)dst, (int)threads.first, (int)threads.last);
-  
-        if (dst >= N) { 
-            if (verbose) 
+
+        if (dst >= N) {
+            if (verbose)
                 printf("end value %d is invalid for %d vertices; correcting to %d\n", (int)dst, (int)N, (int)N-1);
             dst = N-1;
         }
-        
+
         num_spawn = 0;
         max_spawn = N/grainsize;
         tick_count t0, t1;
@@ -357,12 +349,12 @@ int main(int argc, char *argv[]) {
             t1 = tick_count::now();
             if (!silent) {
                 if (predecessor[dst] != N) {
-                    printf("%d threads: [%6.6f] The shortest path from vertex %d to vertex %d is:", 
+                    printf("%d threads: [%6.6f] The shortest path from vertex %d to vertex %d is:",
                            (int)n_thr, (t1-t0).seconds(), (int)src, (int)dst);
                     print_path();
                 }
                 else {
-                    printf("%d threads: [%6.6f] There is no path from vertex %d to vertex %d\n", 
+                    printf("%d threads: [%6.6f] There is no path from vertex %d to vertex %d\n",
                            (int)n_thr, (t1-t0).seconds(), (int)src, (int)dst);
                 }
             } else
diff --git a/examples/graph/binpack/Makefile b/examples/graph/binpack/Makefile
index cce987f..12cfb8d 100644
--- a/examples/graph/binpack/Makefile
+++ b/examples/graph/binpack/Makefile
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # GNU Makefile that builds and runs example.
 run_cmd=
@@ -34,15 +34,17 @@ run_cmd=../../common/android.linux.launcher.sh
 else
 LIBS+= -lrt 
 endif
+else ifeq ($(shell uname), Darwin)
+override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib
 endif
 
 all:    release test
 
 release: *.cpp
-	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS) $(CXX0XFLAGS)
+	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)
 
 debug: *.cpp
-	$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS) $(CXX0XFLAGS)
+	$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
 
 clean:
 	$(RM) $(PROG) *.o *.d
diff --git a/examples/graph/binpack/Makefile.windows b/examples/graph/binpack/Makefile.windows
index ee373a2..36beb1a 100644
--- a/examples/graph/binpack/Makefile.windows
+++ b/examples/graph/binpack/Makefile.windows
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # Common Makefile that builds and runs example.
 
diff --git a/examples/graph/binpack/binpack.cpp b/examples/graph/binpack/binpack.cpp
index b1d5e4f..fbc7fad 100644
--- a/examples/graph/binpack/binpack.cpp
+++ b/examples/graph/binpack/binpack.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 
@@ -25,23 +25,24 @@
 #include <string>
 #include <iostream>
 #include <cmath>
+#include <vector>
 #include "tbb/atomic.h"
 #include "tbb/task_scheduler_init.h"
 #include "tbb/tick_count.h"
 #include "tbb/flow_graph.h"
 #include "../../common/utility/utility.h"
 
-using namespace std;
-using namespace tbb;
+using tbb::tick_count;
+using tbb::task_scheduler_init;
 using namespace tbb::flow;
 
-typedef size_t size_type;        // to represent non-zero indices, capacities, etc.
-typedef size_t value_type;       // the type of items we are attempting to pack into bins
-typedef vector<value_type> bin;  // we use a simple vector to represent a bin
+typedef size_t size_type;             // to represent non-zero indices, capacities, etc.
+typedef size_t value_type;            // the type of items we are attempting to pack into bins
+typedef std::vector<value_type> bin;  // we use a simple vector to represent a bin
 // Our bin packers will be function nodes in the graph that take value_type items and
 // return a dummy value.  They will also implicitly send packed bins to the bin_buffer
 // node, and unused items back to the value_pool node:
-typedef function_node<value_type, continue_msg, rejecting> bin_packer;
+typedef multifunction_node<value_type, tuple<value_type, bin>, rejecting> bin_packer;
 // Items are placed into a pool that all bin packers grab from, represent by a queue_node:
 typedef queue_node<value_type> value_pool;
 // Packed bins are placed in this buffer waiting to be serially printed and/or accounted for:
@@ -72,34 +73,33 @@ bin_packer **bins;               // the array of bin packers
 
 // This class is the Body type for bin_packer
 class bin_filler {
+    typedef bin_packer::output_ports_type ports_type;
     bin my_bin;                   // the current bin that this bin_filler is packing
     size_type my_used;            // capacity of bin used by current contents (not to be confused with my_bin.size())
     size_type relax, relax_val;   // relaxation counter for determining when to settle for a non-full bin
     bin_packer* my_bin_packer;    // ptr to the bin packer that this body object is associated with
     size_type bin_index;          // index of the encapsulating bin packer in the global bins array
-    value_pool* the_value_pool;   // ptr to the pool of items to pack
-    bin_buffer* the_bin_buffer;   // ptr to the buffer of resulting bins
     value_type looking_for;       // the minimum size of item this bin_packer will accept
+    value_pool* the_value_pool;   // the queue of incoming values
     bool done;                    // flag to indicate that this binpacker has been deactivated
  public:
-    bin_filler(size_t bidx, value_pool* q, bin_buffer* r) :
-        my_used(0), relax(0), relax_val(0), my_bin_packer(NULL), bin_index(bidx), the_value_pool(q),
-        the_bin_buffer(r), looking_for(V), done(false) {}
-    continue_msg operator()(const value_type& item) {
+    bin_filler(size_t bidx, value_pool* _q) :
+        my_used(0), relax(0), relax_val(0), my_bin_packer(NULL), bin_index(bidx), looking_for(V), the_value_pool(_q), done(false) {}
+    void operator()(const value_type& item, ports_type& p) {
         if (!my_bin_packer) my_bin_packer = bins[bin_index];
-        if (done) the_value_pool->try_put(item); // this bin_packer is done packing items; put item back to pool
+        if (done) get<0>(p).try_put(item); // this bin_packer is done packing items; put item back to pool
         else if (item > V) { // signal that packed_sum has reached item_sum at some point
             size_type remaining = active_bins--;
             if (remaining == 1 && packed_sum == item_sum) { // this is the last bin and it has seen everything
                 // this bin_packer may not have seen everything, so stay active
-                if (my_used>0) the_bin_buffer->try_put(my_bin);
+                if (my_used>0) get<1>(p).try_put(my_bin);
                 my_bin.clear();
                 my_used = 0;
                 looking_for = V;
                 ++active_bins;
             }
             else if (remaining == 1) { // this is the last bin, but there are remaining items
-                the_value_pool->try_put(V+1); // send out signal
+                get<0>(p).try_put(V+1); // send out signal
                 ++active_bins;
             }
             else if (remaining > 1) { // this is not the last bin; deactivate
@@ -107,16 +107,16 @@ class bin_filler {
                     packed_sum -= my_used;
                     packed_items -= my_bin.size();
                     for (size_type i=0; i<my_bin.size(); ++i)
-                        the_value_pool->try_put(my_bin[i]);
+                        get<0>(p).try_put(my_bin[i]);
                     the_value_pool->remove_successor(*my_bin_packer); // deactivate
                     done = true;
-                    the_value_pool->try_put(V+1); // send out signal
+                    get<0>(p).try_put(V+1); // send out signal
                 }
                 else { // this bin is well-utilized; send out bin and deactivate
                     the_value_pool->remove_successor(*my_bin_packer); // build no more bins
                     done = true;
-                    if (my_used>0) the_bin_buffer->try_put(my_bin);
-                    the_value_pool->try_put(V+1); // send out signal
+                    if (my_used>0) get<1>(p).try_put(my_bin);
+                    get<0>(p).try_put(V+1); // send out signal
                 }
             }
         }
@@ -128,10 +128,10 @@ class bin_filler {
             looking_for = V-my_used;
             relax = 0;
             if (packed_sum == item_sum) {
-                the_value_pool->try_put(V+1); // send out signal
+                get<0>(p).try_put(V+1); // send out signal
             }
             if (my_used == V) {
-                the_bin_buffer->try_put(my_bin);
+                get<1>(p).try_put(my_bin);
                 my_bin.clear();
                 my_used = 0;
                 looking_for = V;
@@ -153,21 +153,20 @@ class bin_filler {
                     packed_sum -= my_used;
                     packed_items -= my_bin.size();
                     for (size_type i=0; i<my_bin.size(); ++i)
-                        the_value_pool->try_put(my_bin[i]);
+                        get<0>(p).try_put(my_bin[i]);
                     my_bin.clear();
                     my_used = 0;
                 }
                 else if (looking_for == 0 && (my_used >= V/(1+optimality*.1) || active_bins == 1)) {
                     // this bin_packer can't find items but is well-utilized, so send it out and reset
-                    the_bin_buffer->try_put(my_bin);
+                    get<1>(p).try_put(my_bin);
                     my_bin.clear();
                     my_used = 0;
                     looking_for = V;
                 }
             }
-            the_value_pool->try_put(item); // put unused item back to pool
+            get<0>(p).try_put(item); // put unused item back to pool
         }
-        return continue_msg();  // need to return something
     }
 };
 
@@ -198,10 +197,10 @@ public:
         value_type sum=0;
         ++B;
         if (verbose)
-            cout << "[ ";
+            std::cout << "[ ";
         for (size_type i=0; i<b.size(); ++i) {
             if (verbose)
-                cout << b[i] << " ";
+                std::cout << b[i] << " ";
             sum+=b[i];
             ++item_count;
         }
@@ -210,14 +209,14 @@ public:
         avg += sum;
         running_count += sum;
         if (verbose)
-        cout << "]=" << sum << "; Done/Packed/Total cap: " << running_count << "/" << packed_sum << "/" << item_sum
-             << " items:" << item_count << "/" << packed_items << "/" << N << " B=" << B << endl;
+        std::cout << "]=" << sum << "; Done/Packed/Total cap: " << running_count << "/" << packed_sum << "/" << item_sum
+             << " items:" << item_count << "/" << packed_items << "/" << N << " B=" << B << std::endl;
         if (item_count == N) { // should be the last; print stats
             avg = avg/(double)B;
             if (!silent)
-                cout << "SUMMARY: #Bins used: " << B << "; Avg size: " << avg << "; Max size: " << my_max
+                std::cout << "SUMMARY: #Bins used: " << B << "; Avg size: " << avg << "; Max size: " << my_max
                      << "; Min size: " << my_min << "\n         Lower bound on optimal #bins: " << min_B
-                     << "; Start #bins: " << num_bin_packers << endl;
+                     << "; Start #bins: " << num_bin_packers << std::endl;
         }
         return continue_msg();  // need to return something
     }
@@ -226,7 +225,7 @@ public:
 int get_default_num_threads() {
     static int threads = 0;
     if (threads == 0)
-        threads = tbb::task_scheduler_init::default_num_threads();
+        threads = task_scheduler_init::default_num_threads();
     return threads;
 }
 
@@ -267,7 +266,7 @@ int main(int argc, char *argv[]) {
             if (num_bin_packers == -1) num_bin_packers = p;
             active_bins = num_bin_packers;
             if (!silent)
-                cout << "binpack running with " << item_sum << " capacity over " << N << " items, optimality="
+                std::cout << "binpack running with " << item_sum << " capacity over " << N << " items, optimality="
                      << optimality << ", " << num_bin_packers << " bins of capacity=" << V << " on " << p
                      << " threads.\n";
             graph g;
@@ -277,8 +276,10 @@ int main(int argc, char *argv[]) {
             bin_buffer the_bin_buffer(g);
             bins = new bin_packer*[num_bin_packers];
             for (int i=0; i<num_bin_packers; ++i) {
-                bins[i] = new bin_packer(g, 1, bin_filler(i, &the_value_pool, &the_bin_buffer));
+                bins[i] = new bin_packer(g, 1, bin_filler(i, &the_value_pool));
                 make_edge(the_value_pool, *(bins[i]));
+                make_edge(output_port<0>(*(bins[i])), the_value_pool);
+                make_edge(output_port<1>(*(bins[i])), the_bin_buffer);
             }
             bin_writer the_writer(g, 1, bin_printer());
             make_edge(the_bin_buffer, the_writer);
@@ -289,11 +290,11 @@ int main(int argc, char *argv[]) {
             }
             delete[] bins;
         }
-        utility::report_elapsed_time((tbb::tick_count::now() - start).seconds());
+        utility::report_elapsed_time((tick_count::now() - start).seconds());
         delete[] input_array;
         return 0;
     } catch(std::exception& e) {
-        cerr<<"error occurred. error text is :\"" <<e.what()<<"\"\n";
+        std::cerr<<"error occurred. error text is :\"" <<e.what()<<"\"\n";
         return 1;
     }
 }
diff --git a/examples/graph/binpack/index.html b/examples/graph/binpack/index.html
deleted file mode 100644
index 16e0ab9..0000000
--- a/examples/graph/binpack/index.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<HTML>
-<BODY>
-
-<H2>Overview</H2>
-
-This directory contains a simple tbb::flow example that performs 
-binpacking of N integer values into a near-optimal number of bins
-of capacity V. It features a source_node which passes randomly
-generated integer values of size<=V to a queue_node.  Multiple
-function_nodes set about taking values from this queue_node and 
-packing them into bins according to a best-fit policy.  Items that
-cannot be made to fit are rejected and returned to the queue. When 
-a bin is packed as well as it can be, it is passed to a buffer_node
-where it waits to be picked up by another function_node.  This final
-function nodes gathers stats about the bin and optionally prints its
-contents.  When all bins are accounted for, it optionally prints a 
-summary of the quality of the bin-packing.
-
-<H2>Files</H2>
-<DL>
-<DT><A HREF="binpack.cpp">binpack.cpp</A>
-<DD>Driver.
-
-<DT><A HREF="Makefile">Makefile</A>
-<DD>Makefile for building example.
-
-</DL>
-
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2010 workspace for building and running the example with the Intel® C++ compiler (Windows* systems only).
-<DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example (OS X* systems only).
-</DL>
-
-<H2>To Build</H2>
-General build directions can be found <A HREF=../../index.html#build>here</A>.
-<P></P>
-
-<H2>Usage</H2>
-<DL>
-
-<DT><TT>binpack <I>-h</I></TT>
-<DD>Prints the help for command line options
-<DT><TT>binpack [<I>#threads</I>=value] [<I>verbose</I>] [<I>silent</I>] [<I>N</I>=value] [<I>V</I>=value] [<I>#packers</I>=value] [<I>optimality</I>=value] [<I>#threads</I>]</TT>
-<DD><I>#threads</I> is the number of threads to use; a range of the form <I>low</I>[:<I>high</I>] where low and optional high are non-negative integers, or 'auto' for the TBB default.<BR>
-    <I>verbose</I> print diagnostic output to screen<BR>
-    <I>silent</I> limits output to timing info; overrides verbose<BR>
-    <I>N</I> number of values to pack<BR>
-    <I>V</I> capacity of each bin<BR>
-    <I>#packers</I> number of concurrent bin packers to use (default=#threads)<BR>
-    <I>optimality</I> controls optimality of solution; 1 is highest, use larger numbers for less optimal but faster solution<BR>
-
-
-<DT>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
-<DD>Build a <I>debug</I> version of the example
-    (see the <A HREF=../../index.html#build>build directions</A>).
-    <BR>Run it with a small problem size and the desired number of threads, e.g., <TT>binpack 4 N=100</TT>.
-</DL>
-
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
diff --git a/examples/graph/binpack/msvs/binpack.sln b/examples/graph/binpack/msvs/binpack.sln
index df23fe4..16547f0 100644
--- a/examples/graph/binpack/msvs/binpack.sln
+++ b/examples/graph/binpack/msvs/binpack.sln
@@ -1,26 +1,26 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "binpack", "binpack.vcxproj", "{C931C7A2-074E-4150-9E7A-39A03250411E}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
-		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.ActiveCfg = Debug|Win32
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.Build.0 = Debug|Win32
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.ActiveCfg = Debug|x64
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.Build.0 = Debug|x64
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.ActiveCfg = Release|Win32
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.Build.0 = Release|Win32
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.ActiveCfg = Release|x64
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.Build.0 = Release|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "binpack", "binpack.vcxproj", "{C931C7A2-074E-4150-9E7A-39A03250411E}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.ActiveCfg = Debug|Win32
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.Build.0 = Debug|Win32
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.ActiveCfg = Debug|x64
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.Build.0 = Debug|x64
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.ActiveCfg = Release|Win32
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.Build.0 = Release|Win32
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.ActiveCfg = Release|x64
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/graph/binpack/msvs/binpack.vcxproj b/examples/graph/binpack/msvs/binpack.vcxproj
index 336c27b..b489182 100644
--- a/examples/graph/binpack/msvs/binpack.vcxproj
+++ b/examples/graph/binpack/msvs/binpack.vcxproj
@@ -1,197 +1,201 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>binpack</ProjectName>
-    <ProjectGuid>{C931C7A2-074E-4150-9E7A-39A03250411E}</ProjectGuid>
-    <RootNamespace>binpack</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <Import Project="..\..\..\common\toolset.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\binpack.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="..\index.html" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>binpack</ProjectName>
+    <ProjectGuid>{C931C7A2-074E-4150-9E7A-39A03250411E}</ProjectGuid>
+    <RootNamespace>binpack</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\binpack.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\readme.html" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/examples/graph/binpack/readme.html b/examples/graph/binpack/readme.html
new file mode 100644
index 0000000..d4689da
--- /dev/null
+++ b/examples/graph/binpack/readme.html
@@ -0,0 +1,415 @@
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
+
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
+
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Binpack sample</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Binpack sample</h1>
+	</div>
+	
+	<p>
+		This directory contains a simple tbb::flow example that performs 
+		binpacking of N integer values into a near-optimal number of bins
+		of capacity V.
+	<br><br>
+		It features a source_node which passes randomly
+		generated integer values of size<=V to a queue_node. Multiple
+		function_nodes set about taking values from this queue_node and 
+		packing them into bins according to a best-fit policy. Items that
+		cannot be made to fit are rejected and returned to the queue. When 
+		a bin is packed as well as it can be, it is passed to a buffer_node
+		where it waits to be picked up by another function_node.  This final
+		function nodes gathers stats about the bin and optionally prints its
+		contents. When all bins are accounted for, it optionally prints a 
+		summary of the quality of the bin-packing.
+	</p>
+
+	<div class="changes">
+		<div class="h3-alike">System Requirements</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				For the most up to date system requirements, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
+			</p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Files</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="binpack.cpp">binpack.cpp</a>
+				<dd>Driver.
+				<dt><a href="Makefile">Makefile</a>
+				<dd>Makefile for building the example.
+			</dl>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="msvs/">msvs</a>
+				<dd>Contains Microsoft* Visual Studio* workspace for building and running the example with the Intel® C++ Compiler (Windows* systems only).
+				<dt><a href="xcode/">xcode</a>
+				<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).
+			</dl>
+			<p>For information about the minimum supported version of IDE, see <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a></p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Build instructions</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>General build directions can be found <a href="../../index.html">here</a>.</p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Usage</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><tt>binpack <i>-h</i></tt>
+				<dd>Prints the help for command line options
+				<dt><tt>binpack [<i>#threads</i>=value] [<i>verbose</i>] [<i>silent</i>] [<i>N</i>=value] [<i>V</i>=value] [<i>#packers</i>=value] [<i>optimality</i>=value] [<i>#threads</i>]</tt>
+				<dd><tt><i>#threads</i></tt> is the number of threads to use; a range of the form <i>low</i>[:<i>high</i>] where low and optional high are non-negative integers, or 'auto' for the TBB default.<br>
+					<tt><i>verbose</i></tt> print diagnostic output to screen<br>
+					<tt><i>silent</i></tt> limits output to timing info; overrides verbose<br>
+					<tt><i>N</i></tt> number of values to pack<br>
+					<tt><i>V</i></tt> capacity of each bin<br>
+					<tt><i>#packers</i></tt> number of concurrent bin packers to use (default=#threads)<br>
+					<tt><i>optimality</i></tt> controls optimality of solution; 1 is highest, use larger numbers for less optimal but faster solution<br>
+				<dt>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
+				<dd>Build a <i>debug</i> version of the example
+					(see the <a href="../../index.html">build instructions</a>).
+					<br>Run it with a small problem size and the desired number of threads, e.g., <tt>binpack 4 N=100</tt>.
+			</dl>
+		</div>
+	</div>
+	
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>	
+	
+</body>
+</html>
diff --git a/examples/graph/cholesky/Makefile b/examples/graph/cholesky/Makefile
new file mode 100644
index 0000000..66b7aed
--- /dev/null
+++ b/examples/graph/cholesky/Makefile
@@ -0,0 +1,56 @@
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+# GNU Makefile that builds and runs example.
+run_cmd=
+PROG=cholesky
+ARGS=4 2
+
+# The C++ compiler
+ifneq (,$(shell which icpc 2>/dev/null))
+CXX=icpc
+endif # which icpc
+
+ifeq ($(shell uname), Darwin)
+override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib  -Wl,-rpath,$(MKLROOT)/lib
+# MKL support
+override MKL_LIBS += -lmkl_core -lmkl_sequential -lmkl_intel
+else
+ifeq ($(shell uname), Linux)
+LIBS+= -lrt 
+endif
+# MKL support
+override MKL_LIBS += -lmkl_rt
+endif
+
+# C++0x support
+override CXXFLAGS += -std=c++0x
+
+all:	release test
+
+release: *.cpp
+	$(CXX) -O2  -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(MKL_LIBS) $(LIBS)
+
+debug: *.cpp
+	$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(MKL_LIBS) $(LIBS)
+
+clean:
+	$(RM) $(PROG) *.o *.d
+
+test:
+	$(run_cmd) ./$(PROG) $(ARGS)
diff --git a/examples/graph/cholesky/Makefile.windows b/examples/graph/cholesky/Makefile.windows
new file mode 100644
index 0000000..b34237a
--- /dev/null
+++ b/examples/graph/cholesky/Makefile.windows
@@ -0,0 +1,50 @@
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+PROG=Cholesky
+ARGS=4 2
+
+# Trying to find if icl.exe is set
+CXX1 = $(TBB_CXX)-
+CXX2 = $(CXX1:icl.exe-=icl.exe)
+CXX  = $(CXX2:-=cl.exe)
+
+# The C++ compiler options
+MYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _WIN32_WINNT=0x0501 $(CXXFLAGS)
+MYLDFLAGS = /INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
+
+# MKL support
+MKL_LIBS1 = $(TBB_TARGET_ARCH)
+MKL_LIBS2 = $(MKL_LIBS1:ia32=mkl_core.lib mkl_sequential.lib mkl_intel_c.lib)
+MKL_LIBS  = $(MKL_LIBS2:intel64=mkl_core.lib mkl_sequential.lib mkl_intel_lp64.lib)
+
+all: release test
+release: compiler_check
+	$(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(MKL_LIBS) $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+debug: compiler_check
+	$(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(MKL_LIBS) $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+clean:
+	@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest
+test:
+	$(PROG) $(ARGS)
+compiler_check:
+	@echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1  || echo "$(CXX) command not found. Check if CXX=$(CXX) is set properly"
+	@cmd.exe /C del compiler_test
diff --git a/examples/graph/cholesky/cholesky.cpp b/examples/graph/cholesky/cholesky.cpp
new file mode 100644
index 0000000..20c6d2b
--- /dev/null
+++ b/examples/graph/cholesky/cholesky.cpp
@@ -0,0 +1,715 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+#include <string>
+#include <cstring>
+#include <cstdio>
+#include <cmath>
+#include <vector>
+#include <map>
+
+#include "mkl_lapack.h"
+#include "mkl.h"
+
+#include "tbb/tbb_config.h"
+#include "tbb/flow_graph.h"
+#include "tbb/tick_count.h"
+#include "tbb/task_scheduler_init.h"
+
+// Application command line arguments parsing
+#include "../../common/utility/utility.h"
+
+/************************************************************
+ FORWARD DECLARATIONS
+************************************************************/
+
+/**********************************************
+ Read or generate a positive-definite matrix
+ -- reads from file if fname != NULL
+     -- sets n to matrix size
+     -- allocates and reads values in to A
+ -- otherwise generates a matrix
+     -- uses n to determine size
+     -- allocates and generates values in to A
+**********************************************/
+void matrix_init( double * &A, int &n, const char *fname );
+
+/**********************************************
+ Writes a lower triangular matrix to a file
+ -- first line of file is n 
+ -- subsequently 1 row per line
+**********************************************/
+void matrix_write ( double *A, int n, const char *fname, bool is_triangular = false );
+
+/************************************************************
+ GLOBAL VARIABLES
+************************************************************/
+bool g_benchmark_run = false;
+int g_num_tbb_threads = tbb::task_scheduler_init::default_num_threads();
+int g_n = -1, g_b = -1, g_num_trials = 1;
+char *g_input_file_name = NULL;
+char *g_output_prefix = NULL;
+std::string g_alg_name;
+
+// Creates tiled array
+static double ***create_tile_array( double *A, int n, int b ) {
+    const int p = n/b;
+    double ***tile = (double ***)calloc( sizeof( double ** ), p );
+
+    for ( int j = 0; j < p; ++j ) {
+        tile[j] = (double **)calloc( sizeof( double * ), p );
+    }
+
+    for ( int j = 0; j < p; ++j ) {
+        for ( int i = 0; i < p; ++i ) {
+            double *temp_block = (double *)calloc( sizeof( double ), b*b );
+
+            for ( int A_j = j*b, T_j = 0; T_j < b; ++A_j, ++T_j ) {
+                for ( int A_i = i*b, T_i = 0; T_i < b; ++A_i, ++T_i ) {
+                    temp_block[T_j*b+T_i] = A[A_j*n+A_i];
+                }
+            }
+
+            tile[j][i] = temp_block;
+        }
+    }
+    return tile;
+}
+
+static void collapse_tile_array( double ***tile, double *A, int n, int b ) {
+    const int p = n/b;
+
+    for ( int j = 0; j < p; ++j ) {
+        for ( int i = 0; i < p; ++i ) {
+            double *temp_block = tile[j][i];
+
+            for ( int A_j = j*b, T_j = 0; T_j < b; ++A_j, ++T_j ) {
+                for ( int A_i = i*b, T_i = 0; T_i < b; ++A_i, ++T_i ) {
+                    A[A_j*n+A_i] = temp_block[T_j*b+T_i];
+                }
+            }
+
+            free( temp_block );
+            tile[j][i] = NULL;
+        }
+
+        free( tile[j] );
+    }
+
+    free( tile );
+}
+
+/************************************************************
+ Helper base class: algorithm
+************************************************************/
+class algorithm {
+
+    std::string name;
+    bool is_tiled;
+
+    bool check_if_valid( double *A0, double *C, double *A, int n ) {
+        char transa = 'n', transb = 't';
+        double alpha = 1;
+        double beta = 0;
+
+        for ( int i = 0; i < n; ++i ) {
+            for ( int j = i+1; j < n; ++j ) {
+                A0[j*n+i] = 0.;
+            }
+        }
+
+        dgemm ( &transa, &transb, &n, &n, &n, &alpha, A0, &n, A0, &n, &beta, C, &n );
+
+        for ( int j = 0; j < n; ++j ) {
+            for ( int i = 0; i < n; ++i ) {
+                const double epsilon = std::abs( A[j*n+i]*0.1 );
+
+                if ( std::abs( C[j*n+i] - A[j*n+i] ) > epsilon ) {
+                    printf( "ERROR: %s did not validate at C(%d,%d) = %lf != A(%d,%d) = %lf\n",
+                        name.c_str(), i, j, C[j*n+i], i, j, A[j*n+i] );
+                    printf( "ERROR: %g; %g < %g < %g\n", epsilon, A[j*n+i] - epsilon, C[j*n+i], A[j*n+i] + epsilon );
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+public:
+    algorithm( const std::string& alg_name, bool t ) : name(alg_name), is_tiled(t) {}
+
+    double operator() ( double *A, int n, int b, int trials ) {
+        tbb::tick_count t0, t1;
+        double elapsed_time = 0.0;
+        double *A0 = (double *)calloc( sizeof( double ), n*n );
+        double *C = (double *)calloc( sizeof( double ), n*n );
+
+        for ( int t = 0; t < trials+1; ++t ) {
+            if ( is_tiled ) {
+                double ***tile = create_tile_array( A, n, b );
+                t0 = tbb::tick_count::now();
+                func( tile, n, b );
+                t1 = tbb::tick_count::now();
+
+                collapse_tile_array( tile, A0, n, b );
+            }
+            else {
+                memcpy( A0, A, sizeof( double )*n*n );
+                t0 = tbb::tick_count::now();
+                func( A0, n, b );
+                t1 = tbb::tick_count::now();
+            }
+
+            if ( t ) elapsed_time += (t1-t0).seconds();
+
+            if( !g_benchmark_run && !check_if_valid( A0, C, A, n ) ) {
+                if ( g_output_prefix ) {
+                    std::string s( g_output_prefix );
+                    s += "_" + name + ".txt";
+                    matrix_write( A0, g_n, s.c_str(), true );
+                    free( A0 );
+                    free( C );
+                    return 0.;
+                }
+            }
+        }
+
+        if ( g_output_prefix ) {
+            std::string s( g_output_prefix );
+            s += "_" + name + ".txt";
+            matrix_write( A0, g_n, s.c_str(), true );
+        }
+
+        printf( "%s %d %d %d %d %lf %lf\n", name.c_str(), g_num_tbb_threads, trials, n, b, elapsed_time, elapsed_time/trials );
+        free( A0 );
+        free( C );
+        return elapsed_time;
+    }
+
+protected:
+    // Main algorithm body function must be defined in any direved class
+    virtual void func( void * ptr, int n, int b ) = 0;
+};
+
+/***********************************************************/
+
+static void call_dpotf2( double ***tile, int b, int k ) {
+    double *A_block = tile[k][k];
+    char uplo = 'l';
+    int info = 0;
+    dpotf2( &uplo, &b, A_block, &b, &info ); 
+    return;
+}
+
+static void call_dtrsm( double ***tile, int b, int k, int j ) {
+    double *A_block = tile[k][j];
+    double *L_block = tile[k][k];
+    char uplo = 'l', side = 'r', transa = 't', diag = 'n';
+    double alpha = 1;
+    dtrsm( &side, &uplo, &transa, &diag, &b, &b, &alpha, L_block, &b, A_block, &b );
+    return;
+}
+
+static void call_dsyr2k( double ***tile, int b, int k, int j, int i ) {
+    double *A_block = tile[i][j];
+    char transa = 'n', transb = 't';
+    char uplo = 'l';
+    double alpha = -1;
+    double beta = 1;
+
+    if ( i == j ) {   // Diagonal block
+        double *L_block = tile[k][i];
+        dsyrk( &uplo, &transa, &b, &b, &alpha, L_block, &b, &beta, A_block, &b );
+    } else {   // Non-diagonal block
+        double *L2_block = tile[k][i];
+        double *L1_block = tile[k][j];
+        dgemm( &transa, &transb, &b, &b, &b, &alpha, L1_block, &b, L2_block, &b, &beta, A_block, &b );
+    }
+    return;
+}
+
+class algorithm_crout : public algorithm
+{
+public:
+    algorithm_crout() : algorithm("crout_cholesky", true) {}
+
+protected:
+    virtual void func( void * ptr, int n, int b ) {
+        double ***tile = (double ***)ptr;
+        const int p = n/b;
+
+        for ( int k = 0; k < p; ++k ) {
+            call_dpotf2( tile, b, k );
+
+            for ( int j = k+1; j < p; ++j ) {
+                call_dtrsm( tile, b, k, j );
+
+                for ( int i = k+1; i <= j; ++i ) {
+                    call_dsyr2k( tile, b, k, j, i );
+                }
+            }
+        }
+    }
+};
+
+class algorithm_dpotrf : public algorithm
+{
+public:
+    algorithm_dpotrf() : algorithm("dpotrf_cholesky", false) {}
+
+protected:
+    virtual void func( void * ptr, int n, int /* b */ ) {
+        double *A = (double *)ptr;
+        int lda = n;
+        int info = 0;
+        char uplo = 'l';
+        dpotrf( &uplo, &n, A, &lda, &info );
+    }
+};
+
+/************************************************************
+ Begin data join graph based version of cholesky
+************************************************************/
+
+typedef union {
+    char a[4];
+    size_t tag;
+} tag_t;
+
+typedef double * tile_t;
+
+typedef std::pair< tag_t, tile_t > tagged_tile_t;
+typedef tbb::flow::tuple< tagged_tile_t > t1_t;
+typedef tbb::flow::tuple< tagged_tile_t, tagged_tile_t > t2_t;
+typedef tbb::flow::tuple< tagged_tile_t, tagged_tile_t, tagged_tile_t > t3_t;
+
+typedef tbb::flow::multifunction_node< tagged_tile_t, t1_t > dpotf2_node_t;
+typedef tbb::flow::multifunction_node< t2_t, t2_t > dtrsm_node_t;
+typedef tbb::flow::multifunction_node< t3_t, t3_t > dsyr2k_node_t;
+
+typedef tbb::flow::join_node< t2_t, tbb::flow::tag_matching > dtrsm_join_t;
+typedef tbb::flow::join_node< t3_t, tbb::flow::tag_matching > dsyr2k_join_t;
+
+class dpotf2_body {
+    int p;
+    int b;
+public:
+    dpotf2_body( int p_, int b_ ) : p(p_), b(b_) {}
+
+    void operator()( const tagged_tile_t &in, dpotf2_node_t::output_ports_type &ports ) {
+        int k = in.first.a[0];
+        tile_t A_block = in.second;
+        tag_t t;
+        t.tag = 0;
+        t.a[0] = k;
+        char uplo = 'l';
+        int info = 0;
+        dpotf2( &uplo, &b, A_block, &b, &info );
+
+        // Send to dtrsms in same column
+        // k == k  j == k 
+        t.a[2] = k;
+        for ( int j = k+1; j < p; ++j ) {
+            t.a[1] = j;
+            tbb::flow::get<0>( ports ).try_put( std::make_pair( t, A_block ) );
+        }
+    }
+};
+
+class dtrsm_body {
+    int p;
+    int b;
+public:
+    dtrsm_body( int p_, int b_ ) : p(p_), b(b_) {}
+
+    void operator()( const t2_t &in, dtrsm_node_t::output_ports_type &ports ) {
+        using tbb::flow::get;
+
+        tagged_tile_t in0 = get<0>( in );
+        tagged_tile_t in1 = get<1>( in );
+        int k = in0.first.a[0];
+        int j = in0.first.a[1];
+        tile_t L_block = in0.second;
+        tile_t A_block = in1.second;
+        tag_t t;
+        t.tag = 0;
+        t.a[0] = k;
+        char uplo = 'l', side = 'r', transa = 't', diag = 'n';
+        double alpha = 1;
+        dtrsm( &side, &uplo, &transa, &diag, &b, &b, &alpha, L_block, &b, A_block, &b);
+
+        // Send to rest of my row
+        t.a[1] = j;
+        for ( int i = k+1; i <= j; ++i ) {
+            t.a[2] = i;
+            get<0>( ports ).try_put( std::make_pair( t, A_block ) );
+        }
+
+        // Send to transposed row
+        t.a[2] = j;
+        for ( int i = j; i < p; ++i ) {
+            t.a[1] = i;
+            get<1>( ports ).try_put( std::make_pair( t, A_block ) );
+        }
+    }
+};
+
+class dsyr2k_body {
+    int p;
+    int b;
+public:
+    dsyr2k_body( int p_, int b_ ) : p(p_), b(b_) {}
+
+    void operator()( const t3_t &in, dsyr2k_node_t::output_ports_type &ports ) {
+        using tbb::flow::get;
+
+        tag_t t;
+        t.tag = 0;
+        char transa = 'n', transb = 't';
+        char uplo = 'l';
+        double alpha = -1;
+        double beta = 1;
+
+        tagged_tile_t in0 = get<0>( in );
+        tagged_tile_t in1 = get<1>( in );
+        tagged_tile_t in2 = get<2>( in );
+        int k = in2.first.a[0];
+        int j = in2.first.a[1];
+        int i = in2.first.a[2];
+
+        tile_t A_block = in2.second; 
+        if ( i == j ) {   // Diagonal block
+            tile_t L_block = in0.second;
+            dsyrk( &uplo, &transa, &b, &b, &alpha, L_block, &b, &beta, A_block, &b );
+        } else {   // Non-diagonal block
+            tile_t L1_block = in0.second;
+            tile_t L2_block = in1.second;
+            dgemm( &transa, &transb, &b, &b, &b, &alpha, L1_block, &b, L2_block, &b, &beta, A_block, &b );
+        }
+
+        // All outputs flow to next step
+        t.a[0] = k+1;
+        t.a[1] = j;
+        t.a[2] = i;
+        if ( k != p-1 && j == k+1 && i == k+1 ) {
+            get<0>( ports ).try_put( std::make_pair( t, A_block ) );
+        }
+
+        if ( k < p-2 ) {
+            if ( i == k+1 && j > i ) {
+                t.a[0] = k+1;
+                t.a[1] = j;
+                get<1>( ports ).try_put( std::make_pair( t, A_block ) );
+            }
+
+            if ( j != k+1 && i != k+1 ) {
+                t.a[0] = k+1;
+                t.a[1] = j;
+                t.a[2] = i;
+                get<2>( ports ).try_put( std::make_pair( t, A_block ) );
+            }
+        }
+    }
+};
+
+struct tagged_tile_to_size_t {
+    size_t operator()( const tagged_tile_t &t ) {
+        return t.first.tag;
+    }
+};
+
+class algorithm_join : public algorithm
+{
+public:
+    algorithm_join() : algorithm("data_join_cholesky", true) {}
+
+protected:
+    virtual void func( void * ptr, int n, int b ) {
+        using tbb::flow::unlimited;
+        using tbb::flow::output_port;
+        using tbb::flow::input_port;
+
+        double ***tile = (double ***)ptr;
+        const int p = n/b;
+        tbb::flow::graph g;
+
+        dpotf2_node_t dpotf2_node( g, unlimited, dpotf2_body(p, b) );
+        dtrsm_node_t dtrsm_node( g, unlimited, dtrsm_body(p, b) );
+        dsyr2k_node_t dsyr2k_node( g, unlimited, dsyr2k_body(p, b) );
+        dtrsm_join_t dtrsm_join( g, tagged_tile_to_size_t(), tagged_tile_to_size_t() );
+        dsyr2k_join_t dsyr2k_join( g, tagged_tile_to_size_t(), tagged_tile_to_size_t(), tagged_tile_to_size_t() );
+
+        make_edge( output_port<0>( dsyr2k_node ), dpotf2_node );
+
+        make_edge( output_port<0>( dpotf2_node ), input_port<0>( dtrsm_join ) );
+        make_edge( output_port<1>( dsyr2k_node ), input_port<1>( dtrsm_join ) );
+        make_edge( dtrsm_join, dtrsm_node );
+
+        make_edge( output_port<0>( dtrsm_node ), input_port<0>( dsyr2k_join ) );
+        make_edge( output_port<1>( dtrsm_node ), input_port<1>( dsyr2k_join ) );
+        make_edge( output_port<2>( dsyr2k_node ), input_port<2>( dsyr2k_join ) );
+        make_edge( dsyr2k_join, dsyr2k_node );
+
+        // Now we need to send out the tiles to their first nodes
+        tag_t t;
+        t.tag = 0;
+        t.a[0] = 0;
+        t.a[1] = 0;
+        t.a[2] = 0;
+
+        // Send to feedback input of first dpotf2
+        // k == 0, j == 0, i == 0
+        dpotf2_node.try_put( std::make_pair( t, tile[0][0] ) );
+
+        // Send to feedback input (port 1) of each dtrsm
+        // k == 0, j == 1..p-1
+        for ( int j = 1; j < p; ++j ) {
+            t.a[1] = j;
+            input_port<1>( dtrsm_join ).try_put( std::make_pair( t, tile[0][j] ) );
+        }
+
+        // Send to feedback input (port 2) of each dsyr2k
+        // k == 0
+        for ( int i = 1; i < p; ++i ) {
+            t.a[2] = i;
+
+            for ( int j = i; j < p; ++j ) {
+                t.a[1] = j;
+                input_port<2>( dsyr2k_join ).try_put( std::make_pair( t, tile[i][j] ) );
+            }
+        }
+
+        g.wait_for_all();
+    }
+};
+
+/************************************************************
+ End data join graph based version of cholesky
+************************************************************/
+
+/************************************************************
+ Begin dependence graph based version of cholesky
+************************************************************/
+
+typedef tbb::flow::continue_node< tbb::flow::continue_msg > continue_type;
+typedef continue_type * continue_ptr_type;
+
+#if !__TBB_CPP11_LAMBDAS_PRESENT
+// Using helper functor classes (instead of built-in C++ 11 lambda functions)
+class call_dpotf2_functor
+{
+    double ***tile;
+    int b, k;
+public:
+    call_dpotf2_functor( double ***tile_, int b_, int k_ )
+        : tile(tile_), b(b_), k(k_) {}
+
+    void operator()( const tbb::flow::continue_msg & ) { call_dpotf2( tile, b, k ); }
+};
+
+class call_dtrsm_functor
+{
+    double ***tile;
+    int b, k, j;
+public:
+    call_dtrsm_functor( double ***tile_, int b_, int k_, int j_ )
+        : tile(tile_), b(b_), k(k_), j(j_) {}
+
+    void operator()( const tbb::flow::continue_msg & ) { call_dtrsm( tile, b, k, j ); }
+};
+
+class call_dsyr2k_functor
+{
+    double ***tile;
+    int b, k, j, i;
+public:
+    call_dsyr2k_functor( double ***tile_, int b_, int k_, int j_, int i_ )
+        : tile(tile_), b(b_), k(k_), j(j_), i(i_) {}
+
+    void operator()( const tbb::flow::continue_msg & ) { call_dsyr2k( tile, b, k, j, i ); }
+};
+
+#endif // !__TBB_CPP11_LAMBDAS_PRESENT
+
+class algorithm_depend : public algorithm
+{
+public:
+    algorithm_depend() : algorithm("depend_cholesky", true) {}
+
+protected:
+    virtual void func( void * ptr, int n, int b ) {
+        double ***tile = (double ***)ptr;
+
+        const int p = n/b;
+        continue_ptr_type *c = new continue_ptr_type[p];
+        continue_ptr_type **t = new continue_ptr_type *[p];
+        continue_ptr_type ***u = new continue_ptr_type **[p];
+
+        tbb::flow::graph g;
+        for ( int k = p-1; k >= 0; --k ) {
+            c[k] = new continue_type( g,
+#if __TBB_CPP11_LAMBDAS_PRESENT
+                [=]( const tbb::flow::continue_msg & ) { call_dpotf2( tile, b, k ); } );
+#else
+                call_dpotf2_functor( tile, b, k ) );
+#endif // __TBB_CPP11_LAMBDAS_PRESENT
+            t[k] = new continue_ptr_type[p];
+            u[k] = new continue_ptr_type *[p];
+
+            for ( int j = k+1; j < p; ++j ) {
+                t[k][j] = new continue_type( g,
+#if __TBB_CPP11_LAMBDAS_PRESENT
+                    [=]( const tbb::flow::continue_msg & ) { call_dtrsm( tile, b, k, j ); } );
+#else
+                    call_dtrsm_functor( tile, b, k, j ) );
+#endif // __TBB_CPP11_LAMBDAS_PRESENT
+                make_edge( *c[k], *t[k][j] );
+                u[k][j] = new continue_ptr_type[p];
+
+                for ( int i = k+1; i <= j; ++i ) {
+                    u[k][j][i] = new continue_type( g,
+#if __TBB_CPP11_LAMBDAS_PRESENT
+                        [=]( const tbb::flow::continue_msg & ) { call_dsyr2k( tile, b, k, j, i ); } );
+#else
+                        call_dsyr2k_functor( tile, b, k, j, i ) );
+#endif // __TBB_CPP11_LAMBDAS_PRESENT
+
+                    if ( k < p-2 && k+1 != j && k+1 != i ) {
+                        make_edge( *u[k][j][i], *u[k+1][j][i] );
+                    }
+
+                    make_edge( *t[k][j], *u[k][j][i] );
+
+                    if ( i != j ) {
+                        make_edge( *t[k][i], *u[k][j][i] );
+                    }
+
+                    if ( k < p-2 && j > i && i == k+1 ) {
+                        make_edge( *u[k][j][i], *t[i][j] );
+                    }
+                }
+            }
+
+            if ( k != p-1 ) {
+                make_edge( *u[k][k+1][k+1], *c[k+1] );
+            }
+        }
+
+        c[0]->try_put( tbb::flow::continue_msg() );
+        g.wait_for_all();
+    }
+}; // class algorithm_depend
+
+/************************************************************
+ End dependence graph based version of cholesky
+************************************************************/
+
+bool process_args( int argc, char *argv[] ) {
+    utility::parse_cli_arguments( argc, argv,
+        utility::cli_argument_pack()
+        //"-h" option for displaying help is present implicitly
+        .positional_arg( g_n, "size", "the row/column size of NxN matrix (size <= 46000)" )
+        .positional_arg( g_b, "blocksize", "the block size; size must be a multiple of the blocksize" )
+        .positional_arg( g_num_trials, "num_trials", "the number of times to run each algorithm" )
+        .positional_arg( g_output_prefix, "output_prefix",
+            "if provided the prefix will be preappended to output files:\n"
+            "                     output_prefix_posdef.txt\n"
+            "                     output_prefix_X.txt; where X is the algorithm used\n"
+            "                 if output_prefix is not provided, no output will be written" )
+        .positional_arg( g_alg_name, "algorithm", "name of the used algorithm - can be dpotrf, crout, depend or join" )
+        .positional_arg( g_num_tbb_threads, "num_tbb_threads", "number of started TBB threads" )
+
+        .arg( g_input_file_name, "input_file", "if provided it will be read to get the input matrix" )
+        .arg( g_benchmark_run, "-x", "skips all validation" )
+    );
+
+    if ( g_n > 46000 ) {
+        printf( "ERROR: invalid 'size' value (must be less or equal 46000): %d\n", g_n );
+        return false;
+    }
+
+    if ( g_n%g_b != 0 ) {
+        printf( "ERROR: size %d must be a multiple of the blocksize %d\n", g_n, g_b );
+        return false;
+    }
+
+    if ( g_n/g_b > 256 ) {
+        // Because tile index size is 1 byte only in tag_t type
+        printf( "ERROR: size / blocksize must be less or equal 256, but %d / %d = %d\n", g_n, g_b, g_n/g_b );
+        return false;
+    }
+
+    if ( g_b == -1 || (g_n == -1 && g_input_file_name == NULL) ) {
+        return false;
+    }
+
+    return true;
+}
+
+int main(int argc, char *argv[]) {
+    typedef std::map< std::string, algorithm * > algmap_t;
+    algmap_t algmap;
+
+    // Init algorithms
+    algmap.insert(std::pair<std::string, algorithm *>("dpotrf", new algorithm_dpotrf));
+    algmap.insert(std::pair<std::string, algorithm *>("crout", new algorithm_crout));
+    algmap.insert(std::pair<std::string, algorithm *>("depend", new algorithm_depend));
+    algmap.insert(std::pair<std::string, algorithm *>("join", new algorithm_join));
+
+    if ( !process_args( argc, argv ) ) {
+        printf( "ERROR: Invalid arguments. Run: %s -h\n", argv[0] );
+        exit( 1 );
+    }
+
+    tbb::task_scheduler_init init( g_num_tbb_threads );
+    double *A = NULL;
+
+    // Read input matrix
+    matrix_init( A, g_n, g_input_file_name );
+
+    // Write input matrix if output_prefix is set and we didn't read from a file
+    if ( !g_input_file_name && g_output_prefix ) {
+        std::string s( g_output_prefix );
+        s += "_posdef.txt";
+        matrix_write( A, g_n, s.c_str() );
+    }
+
+    if ( g_alg_name.empty() ) {
+        for ( algmap_t::iterator i = algmap.begin(); i != algmap.end(); ++i ) {
+            algorithm* const alg = i->second;
+            (*alg)( A, g_n, g_b, g_num_trials );
+        }
+    }
+    else {
+        algmap_t::iterator alg_iter = algmap.find(g_alg_name);
+
+        if ( alg_iter != algmap.end() ) {
+            algorithm* const alg = alg_iter->second;
+            (*alg)( A, g_n, g_b, g_num_trials );
+        }
+        else {
+            printf( "ERROR: Invalid algorithm name: %s\n", g_alg_name.c_str() );
+            exit( 2 );
+        }
+    }
+
+    free( A );
+    return 0;
+}
diff --git a/examples/graph/cholesky/init.cpp b/examples/graph/cholesky/init.cpp
new file mode 100644
index 0000000..a09c472
--- /dev/null
+++ b/examples/graph/cholesky/init.cpp
@@ -0,0 +1,138 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+#include <cstdio>
+#include <cassert>
+#include <cstring>
+#include <cstdlib>
+#include <mkl_cblas.h>
+
+static void posdef_gen( double * A, int n )
+{
+    /* Allocate memory for the matrix and its transpose */
+    double *L = (double *)calloc( sizeof( double ), n*n );
+    assert( L );
+
+    double *LT = (double *)calloc( sizeof( double ), n*n) ;
+    assert( LT );
+
+    memset( A, 0, sizeof( double )*n*n );
+
+    /* Generate a conditioned matrix and fill it with random numbers */
+    for ( int j = 0; j < n; ++j ) {
+        for ( int k = 0; k < j; ++k ) {
+            // The initial value has to be between [0,1].
+            L[k*n+j] = ( ( (j*k) / ((double)(j+1)) / ((double)(k+2)) * 2.0) - 1.0 ) / ((double)n);
+        }
+
+        L[j*n+j] = 1;
+    }
+
+    /* Compute transpose of the matrix */
+    for ( int i = 0; i < n; ++i ) {
+        for ( int j = 0; j < n; ++j ) {
+            LT[j*n+i] = L[i*n+j];
+        }
+    }
+    cblas_dgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, n, n, n, 1, L, n, LT, n, 0, A, n );
+
+    free( L );
+    free( LT );
+}
+
+// Read the matrix from the input file
+void matrix_init( double * &A, int &n, const char *fname ) {
+    if( fname ) {
+        int i;
+        int j;
+        FILE *fp;
+
+        fp = fopen( fname, "r" );
+        if ( fp == NULL ) {
+            fprintf( stderr, "\nFile does not exist\n" );
+            exit( 0 );
+        }
+        if ( fscanf( fp, "%d", &n ) <= 0 ) {
+            fprintf( stderr,"\nCouldn't read n from %s\n", fname );
+            exit( 1 );
+        }
+        A = (double *)calloc( sizeof( double ), n*n );
+        for ( i = 0; i < n; ++i ) {
+            for ( j = 0; j <= i; ++j ) {
+                if( fscanf( fp, "%lf ", &A[i*n+j] ) <= 0) {
+                    fprintf( stderr,"\nMatrix size incorrect %i %i\n", i, j );
+                    exit( 1 );
+                }
+                if ( i != j ) {
+                    A[j*n+i] = A[i*n+j];
+                }
+            }
+        }
+        fclose( fp );
+    } else {
+        A = (double *)calloc( sizeof( double ), n*n );
+        posdef_gen( A, n );
+    }
+}
+
+// write matrix to file
+void matrix_write ( double *A, int n, const char *fname, bool is_triangular = false )
+{
+    if( fname ) {
+        int i = 0;
+        int j = 0;
+        FILE *fp = NULL;
+
+        fp = fopen( fname, "w" );
+        if ( fp == NULL ) {
+            fprintf( stderr, "\nCould not open file %s for writing.\n", fname );
+            exit( 0 );
+        }
+        fprintf( fp, "%d\n", n );
+        for ( i = 0; i < n; ++i) {
+            for ( j = 0; j <= i; ++j ) {
+                fprintf( fp, "%lf ", A[j*n+i] );
+            }
+            if ( !is_triangular ) {
+                for ( ; j < n; ++j ) {
+                    fprintf( fp, "%lf ", A[i*n+j] );
+                }
+            } else {
+                for ( ; j < n; ++j ) {
+                    fprintf( fp, "%lf ", 0.0 );
+                }
+            } 
+            fprintf( fp, "\n" );
+        }
+        if ( is_triangular ) {
+            fprintf( fp, "\n" );
+            for ( i = 0; i < n; ++i ) {
+                for ( j = 0; j < i; ++j ) {
+                    fprintf( fp, "%lf ", 0.0 );
+                }
+                for ( ; j < n; ++j ) {
+                    fprintf( fp, "%lf ", A[i*n+j] );
+                }
+                fprintf( fp, "\n" );
+            }
+        }
+        fclose( fp );
+    }
+}
diff --git a/examples/graph/cholesky/msvs/cholesky.sln b/examples/graph/cholesky/msvs/cholesky.sln
new file mode 100644
index 0000000..e02878c
--- /dev/null
+++ b/examples/graph/cholesky/msvs/cholesky.sln
@@ -0,0 +1,26 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cholesky", "cholesky.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A252E}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|Win32.ActiveCfg = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|Win32.Build.0 = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|x64.ActiveCfg = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|x64.Build.0 = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|Win32.ActiveCfg = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|Win32.Build.0 = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|x64.ActiveCfg = Release|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/graph/cholesky/msvs/cholesky.vcxproj b/examples/graph/cholesky/msvs/cholesky.vcxproj
new file mode 100644
index 0000000..2496c90
--- /dev/null
+++ b/examples/graph/cholesky/msvs/cholesky.vcxproj
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>cholesky</ProjectName>
+    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A252E}</ProjectGuid>
+    <RootNamespace>cholesky</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(MKLROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <OpenMP>GenerateParallelCode</OpenMP>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;mkl_rt.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(MKLROOT)\lib\ia32;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(MKLROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <OpenMP>GenerateParallelCode</OpenMP>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;mkl_rt.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(MKLROOT)\lib\intel64;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(MKLROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <OpenMP>GenerateParallelCode</OpenMP>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;mkl_rt.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(MKLROOT)\lib\ia32;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(MKLROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <OpenMP>GenerateParallelCode</OpenMP>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;mkl_rt.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(MKLROOT)\lib\intel64;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\cholesky.cpp" />
+    <ClCompile Include="..\init.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\readme.html" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/examples/graph/cholesky/readme.html b/examples/graph/cholesky/readme.html
new file mode 100644
index 0000000..647ff31
--- /dev/null
+++ b/examples/graph/cholesky/readme.html
@@ -0,0 +1,415 @@
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
+
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
+
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Cholesky sample</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Cholesky sample</h1>
+	</div>
+	
+	<p>
+		This directory contains an example of several versions of Cholesky Factorization algorithm. 
+		<br>
+		<br><b>dpotrf</b>: An implementation that calls the Intel® Math Kernel Library (Intel® MKL) dpotrf function to directly perform the factorization.  This can be a serial implementation or threaded implementation depending on the version of the Intel MKL library that is linked against.
+		<br>
+		<br><b>crout</b>: A serial implementation that uses the Crout-Cholesky algorithm for factorization.  The same approach is parallelized for the other Intel® Threading Building Blocks (Intel® TBB) based approaches below.
+		<br>
+		<br><b>depend</b>: A parallel version of Crout-Cholesky factorization that uses an Intel TBB flow graph.  This version uses a dependence graph made solely of continue_node objects. This an inspector-executor approach, where a loop nest that is similar to the serial implementation is used to create an unrolled version of the computation.  Where the Intel MKL calls would have been made in the original serial implementation of Crout-Cholesky, instead nodes are created and these nodes are  [...]
+		<br>
+		<br><b>join</b>: A parallel version of Crout-Cholesky factorization that uses an Intel TBB flow graph.  This version uses a data flow approach. This is a small, compact graph that passes tiles along its edges.  There is one node per type of Intel MKL call, plus join_nodes that combine the inputs required for each call.  So for example, there is only a single node that applies all calls to dtrsm.  This node is invoked when the tiles that hold the inputs and outputs for an invocation are [...]
+		<br>
+		<br>This sample code requires a recent Intel TBB library (one that supports the flow graph). And also the Intel MKL library.
+	</p>
+
+	<div class="changes">
+		<div class="h3-alike">System Requirements</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				For the most up to date system requirements, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
+			</p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Files</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="cholesky.cpp">cholesky.cpp</a>
+				<dd>Source code for example.
+				<dt><a href="init.cpp">init.cpp</a>
+				<dd>Source code for example.
+				<dt><a href="Makefile">Makefile</a>
+				<dd>Makefile for building the example.
+			</dl>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="msvs/">msvs</a> 
+				<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).
+				<dt><a href="xcode/">xcode</a>
+				<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).
+			</dl>
+			<p>For information about the minimum supported version of IDE, see <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a></p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Build instructions</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>General build directions can be found <a href="../../index.html">here</a>.</p>
+			<p>Also, you need to source Intel MKL environment variables.</p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Usage</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><tt>cholesky [<i>size=value</i>] [<i>blocksize=value</i>] [<i>num_trials=value</i>] [<i>output_prefix=value</i>] [<i>algorithm=value</i>] [<i>num_tbb_threads=value</i>] [<i>input_file=value</i>] [<i>-x</i>] [<i>-h</i>] [<i>size</i> [<i>blocksize</i> [<i>num_trials</i> [<i>output_prefix</i> [<i>algorithm</i> [<i>num_tbb_threads</i>]]]]]]</tt>
+				<dd>where:
+				<br><tt><i>size</i></tt> - the row/column size of NxN matrix (size <= 46000)
+				<br><tt><i>blocksize</i></tt> - the block size; size must be a multiple of the blocksize
+				<br><tt><i>num_trials</i></tt> - the number of times to run each algorithm
+				<br><tt><i>output_prefix</i></tt> - if provided the prefix will be preappended to output files:
+									 <i>output_prefix_posdef.txt</i> and
+									 <i>output_prefix_X.txt</i>; where <i>X</i> is the algorithm used
+				<br>if <tt><i>output_prefix</i></tt> is not provided, no output will be written
+				<br><tt><i>algorithm</i></tt> - name of the used algorithm - can be dpotrf, crout, depend or join
+				<br><tt><i>num_tbb_threads</i></tt> - number of started TBB threads
+				<br><tt><i>input_file</i></tt> - if provided it will be read to get the input matrix
+				<br><tt><i>-x</i></tt> - skips all validation
+				<br><tt><i>-h</i></tt> - show this message
+			</dl>
+		</div>
+	</div>
+	
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>	
+	
+</body>
+</html>
diff --git a/examples/graph/cholesky/xcode/cholesky.xcodeproj/project.pbxproj b/examples/graph/cholesky/xcode/cholesky.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..63a3b2c
--- /dev/null
+++ b/examples/graph/cholesky/xcode/cholesky.xcodeproj/project.pbxproj
@@ -0,0 +1,309 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		A1F593A60B8F042A00073279 /* Cholesky.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* Cholesky.cpp */; };
+		A1F593A60B8F053A00073279 /* init.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F053A00073279 /* init.cpp */; };
+		A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+		A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		8DD76F690486A84900D96B5E /* CopyFiles */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 12;
+			dstPath = "";
+			dstSubfolderSpec = 16;
+			files = (
+				A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		8DD76F6C0486A84900D96B5E /* Cholesky */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Cholesky; sourceTree = BUILT_PRODUCTS_DIR; };
+		A1F593A50B8F042A00073279 /* Cholesky.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Cholesky.cpp; path = ../Cholesky.cpp; sourceTree = SOURCE_ROOT; };
+		A1F593A50B8F053A00073279 /* init.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = init.cpp; path = ../init.cpp; sourceTree = SOURCE_ROOT; };
+		A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		8DD76F660486A84900D96B5E /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		08FB7794FE84155DC02AAC07 /* Cholesky */ = {
+			isa = PBXGroup;
+			children = (
+				08FB7795FE84155DC02AAC07 /* Source */,
+				A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+				1AB674ADFE9D54B511CA2CBB /* Products */,
+			);
+			name = Cholesky;
+			sourceTree = "<group>";
+		};
+		08FB7795FE84155DC02AAC07 /* Source */ = {
+			isa = PBXGroup;
+			children = (
+				A1F593A50B8F042A00073279 /* Cholesky.cpp */,
+				A1F593A50B8F053A00073279 /* init.cpp */,
+			);
+			name = Source;
+			sourceTree = "<group>";
+		};
+		1AB674ADFE9D54B511CA2CBB /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				8DD76F6C0486A84900D96B5E /* Cholesky */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+			isa = PBXGroup;
+			children = (
+				A1F593B30B8F06F900073279 /* libtbb.dylib */,
+			);
+			name = "External Frameworks and Libraries";
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		8DD76F620486A84900D96B5E /* Cholesky */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Cholesky" */;
+			buildPhases = (
+				8DD76F640486A84900D96B5E /* Sources */,
+				8DD76F660486A84900D96B5E /* Frameworks */,
+				8DD76F690486A84900D96B5E /* CopyFiles */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = Cholesky;
+			productInstallPath = "$(HOME)/bin";
+			productName = Cholesky;
+			productReference = 8DD76F6C0486A84900D96B5E /* Cholesky */;
+			productType = "com.apple.product-type.tool";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		08FB7793FE84155DC02AAC07 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0410;
+			};
+			buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "cholesky" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 1;
+			knownRegions = (
+				en,
+			);
+			mainGroup = 08FB7794FE84155DC02AAC07 /* Cholesky */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				8DD76F620486A84900D96B5E /* Cholesky */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+		8DD76F640486A84900D96B5E /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				A1F593A60B8F042A00073279 /* Cholesky.cpp in Sources */,
+				A1F593A60B8F053A00073279 /* init.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+		1DEB923208733DC60010E9CD /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = "";
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					../../../../lib,
+				);
+				PRODUCT_NAME = Cholesky;
+				ZERO_LINK = NO;
+			};
+			name = Debug;
+		};
+		1DEB923308733DC60010E9CD /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = "";
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					../../../../lib,
+				);
+				PRODUCT_NAME = Cholesky;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		1DEB923608733DC60010E9CD /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = i386;
+				GCC_ENABLE_CPP_RTTI = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Debug;
+		};
+		1DEB923708733DC60010E9CD /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = i386;
+				GCC_ENABLE_CPP_RTTI = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Release;
+		};
+		A1F593C60B8F0E6E00073279 /* Debug64 */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = "";
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					../../../../lib,
+				);
+				PRODUCT_NAME = Cholesky;
+				ZERO_LINK = NO;
+			};
+			name = Debug64;
+		};
+		A1F593C70B8F0E6E00073279 /* Release64 */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = "";
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					../../../../lib,
+				);
+				PRODUCT_NAME = Cholesky;
+				ZERO_LINK = NO;
+			};
+			name = Release64;
+		};
+		A1F593C80B8F0E6E00073279 /* Debug64 */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = i386;
+				GCC_ENABLE_CPP_RTTI = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				OTHER_CPLUSPLUSFLAGS = (
+					"$(OTHER_CFLAGS)",
+					"-m64",
+				);
+				OTHER_LDFLAGS = "-m64";
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Debug64;
+		};
+		A1F593C90B8F0E6E00073279 /* Release64 */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = i386;
+				GCC_ENABLE_CPP_RTTI = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				OTHER_CPLUSPLUSFLAGS = (
+					"$(OTHER_CFLAGS)",
+					"-m64",
+				);
+				OTHER_LDFLAGS = "-m64";
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Release64;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Cholesky" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				1DEB923208733DC60010E9CD /* Debug */,
+				A1F593C60B8F0E6E00073279 /* Debug64 */,
+				1DEB923308733DC60010E9CD /* Release */,
+				A1F593C70B8F0E6E00073279 /* Release64 */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "Cholesky" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				1DEB923608733DC60010E9CD /* Debug */,
+				A1F593C80B8F0E6E00073279 /* Debug64 */,
+				1DEB923708733DC60010E9CD /* Release */,
+				A1F593C90B8F0E6E00073279 /* Release64 */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/examples/graph/dining_philosophers/Makefile b/examples/graph/dining_philosophers/Makefile
index 334d381..8ef3a6e 100644
--- a/examples/graph/dining_philosophers/Makefile
+++ b/examples/graph/dining_philosophers/Makefile
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # GNU Makefile that builds and runs example.
 run_cmd=
@@ -33,6 +33,8 @@ run_cmd=../../common/android.linux.launcher.sh
 else
 LIBS+= -lrt 
 endif
+else ifeq ($(shell uname), Darwin)
+override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib
 endif
 
 all:	release test
diff --git a/examples/graph/dining_philosophers/Makefile.windows b/examples/graph/dining_philosophers/Makefile.windows
index 1776ade..170cc4e 100644
--- a/examples/graph/dining_philosophers/Makefile.windows
+++ b/examples/graph/dining_philosophers/Makefile.windows
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # Common Makefile that builds and runs example.
 
diff --git a/examples/graph/dining_philosophers/dining_philosophers.cpp b/examples/graph/dining_philosophers/dining_philosophers.cpp
index c9a3a70..35bc448 100644
--- a/examples/graph/dining_philosophers/dining_philosophers.cpp
+++ b/examples/graph/dining_philosophers/dining_philosophers.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if _MSC_VER
diff --git a/examples/graph/dining_philosophers/index.html b/examples/graph/dining_philosophers/index.html
deleted file mode 100644
index 82e6a8b..0000000
--- a/examples/graph/dining_philosophers/index.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<HTML>
-<BODY>
-
-<H2>Overview</H2>
-The Dining Philosophers problem demonstrates tbb::flow and the use of the reserving join node to
-solve the potential deadlock.
-<br>This program runs some number of philosophers in parallel, each thinking and then waiting for chopsticks
-to be available before eating.  Eating and thinking are implemented with sleep().  The chopstick positions are represented by a queue_node with one item.
-
-<H2>Source Files</H2>
-<DL>
-<DT><A HREF="src/dining_philosophers.cpp">dining_philosophers.cpp</A>
-<DD>Source code for the example.
-<DT><A HREF="Makefile">Makefile</A>, <A HREF=Makefile.windows>Makefile.windows</A>
-<DD>Makefiles for building example.
-</DL>
-
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="src">src</A>
-<DD>Contains source file mentioned above.
-<DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2010 workspace for building and running the 
-    example (Windows* systems only).<DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example (OS X* 
-    systems only).</DL>
-
-<H2>To Build</H2>
-General build directions can be found <A HREF=../../index.html#build>here</A>.
-<P></P>
-
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
-
diff --git a/examples/graph/dining_philosophers/msvs/dining_philosophers.sln b/examples/graph/dining_philosophers/msvs/dining_philosophers.sln
index efcaa6f..10227eb 100644
--- a/examples/graph/dining_philosophers/msvs/dining_philosophers.sln
+++ b/examples/graph/dining_philosophers/msvs/dining_philosophers.sln
@@ -1,26 +1,26 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dining_philosophers", "dining_philosophers.vcxproj", "{3894D1D2-A574-4937-AD56-726758EFE5B7}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
-		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{3894D1D2-A574-4937-AD56-726758EFE5B7}.Debug|Win32.ActiveCfg = Debug|Win32
-		{3894D1D2-A574-4937-AD56-726758EFE5B7}.Debug|Win32.Build.0 = Debug|Win32
-		{3894D1D2-A574-4937-AD56-726758EFE5B7}.Debug|x64.ActiveCfg = Debug|x64
-		{3894D1D2-A574-4937-AD56-726758EFE5B7}.Debug|x64.Build.0 = Debug|x64
-		{3894D1D2-A574-4937-AD56-726758EFE5B7}.Release|Win32.ActiveCfg = Release|Win32
-		{3894D1D2-A574-4937-AD56-726758EFE5B7}.Release|Win32.Build.0 = Release|Win32
-		{3894D1D2-A574-4937-AD56-726758EFE5B7}.Release|x64.ActiveCfg = Release|x64
-		{3894D1D2-A574-4937-AD56-726758EFE5B7}.Release|x64.Build.0 = Release|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dining_philosophers", "dining_philosophers.vcxproj", "{3894D1D2-A574-4937-AD56-726758EFE5B7}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{3894D1D2-A574-4937-AD56-726758EFE5B7}.Debug|Win32.ActiveCfg = Debug|Win32
+		{3894D1D2-A574-4937-AD56-726758EFE5B7}.Debug|Win32.Build.0 = Debug|Win32
+		{3894D1D2-A574-4937-AD56-726758EFE5B7}.Debug|x64.ActiveCfg = Debug|x64
+		{3894D1D2-A574-4937-AD56-726758EFE5B7}.Debug|x64.Build.0 = Debug|x64
+		{3894D1D2-A574-4937-AD56-726758EFE5B7}.Release|Win32.ActiveCfg = Release|Win32
+		{3894D1D2-A574-4937-AD56-726758EFE5B7}.Release|Win32.Build.0 = Release|Win32
+		{3894D1D2-A574-4937-AD56-726758EFE5B7}.Release|x64.ActiveCfg = Release|x64
+		{3894D1D2-A574-4937-AD56-726758EFE5B7}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/graph/dining_philosophers/msvs/dining_philosophers.vcxproj b/examples/graph/dining_philosophers/msvs/dining_philosophers.vcxproj
index ec2968d..4f37f62 100644
--- a/examples/graph/dining_philosophers/msvs/dining_philosophers.vcxproj
+++ b/examples/graph/dining_philosophers/msvs/dining_philosophers.vcxproj
@@ -1,197 +1,201 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>dining_philosophers</ProjectName>
-    <ProjectGuid>{3894d1d2-a574-4937-ad56-726758efe5b7}</ProjectGuid>
-    <RootNamespace>dining_philosophers</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <Import Project="..\..\..\common\toolset.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\dining_philosophers.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="..\index.html" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>dining_philosophers</ProjectName>
+    <ProjectGuid>{3894d1d2-a574-4937-ad56-726758efe5b7}</ProjectGuid>
+    <RootNamespace>dining_philosophers</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\dining_philosophers.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\readme.html" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/examples/graph/dining_philosophers/readme.html b/examples/graph/dining_philosophers/readme.html
new file mode 100644
index 0000000..38e93cb
--- /dev/null
+++ b/examples/graph/dining_philosophers/readme.html
@@ -0,0 +1,383 @@
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
+
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
+
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Dining_philosophers sample</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Dining_philosophers sample</h1>
+	</div>
+	
+	<p>
+		The Dining Philosophers problem demonstrates tbb::flow and the use of the reserving join node to
+		solve the potential deadlock.
+	<br><br>
+		This program runs some number of philosophers in parallel, each thinking and then waiting for chopsticks
+		to be available before eating.  Eating and thinking are implemented with sleep().  The chopstick positions are represented by a queue_node with one item.
+	</p>
+
+	<div class="changes">
+		<div class="h3-alike">System Requirements</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				For the most up to date system requirements, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
+			</p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Files</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="dining_philosophers.cpp">dining_philosophers.cpp</a>
+				<dd>Source code for the example.
+				<dt><a href="Makefile">Makefile</a>
+				<dd>Makefile for building the example.
+			</dl>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+			<dt><a href="msvs/">msvs</a>
+			<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).
+			<dt><a href="xcode/">xcode</a>
+			<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).
+			</dl>
+			<p>For information about the minimum supported version of IDE, see <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a></p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Build instructions</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>General build directions can be found <a href="../../index.html">here</a>.</p>
+		</div>
+	</div>
+	
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>	
+	
+</body>
+</html>
diff --git a/examples/graph/fgbzip2/Makefile b/examples/graph/fgbzip2/Makefile
new file mode 100644
index 0000000..698d44d
--- /dev/null
+++ b/examples/graph/fgbzip2/Makefile
@@ -0,0 +1,57 @@
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+# GNU Makefile that builds and runs example.
+
+run_cmd=
+PROG=fgbzip2
+ARGS=-b=9 -a=async_node $(PROG)
+PERF_RUN_ARGS=-b=9 -a=async_node $(PROG)
+
+# icpc by default
+ifneq (,$(shell which icc 2>/dev/null))
+    CXX=icpc
+endif
+
+# autodetect C++11 support
+include ../../common/examples-common.inc
+
+ifeq ($(shell uname), Linux)
+LIBS+= -lrt -lpthread
+else ifeq ($(shell uname), Darwin)
+override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib
+endif
+
+all: release test
+
+release:
+	$(CXX) -O2 -DNDEBUG *.cpp $(CXXFLAGS) -o $(PROG) -ltbb $(LIBS) $(CXX0XFLAGS)
+
+debug:
+	$(CXX) -O0 -g -DTBB_USE_DEBUG *.cpp $(CXXFLAGS) -o $(PROG) -ltbb_debug $(LIBS)  $(CXX0XFLAGS)
+
+clean:
+	$(RM) $(PROG) *.o *.d *.bz2
+
+test:
+	$(run_cmd) ./$(PROG) $(ARGS)
+
+perf_build: release
+
+perf_run:
+	$(run_cmd) ./$(PROG) $(PERF_RUN_ARGS)
diff --git a/examples/graph/fgbzip2/Makefile.windows b/examples/graph/fgbzip2/Makefile.windows
new file mode 100644
index 0000000..bb5a55a
--- /dev/null
+++ b/examples/graph/fgbzip2/Makefile.windows
@@ -0,0 +1,54 @@
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+run_cmd=
+PROG=fgbzip2
+ARGS=-b=9 -a=async_node $(PROG).exe
+PERF_RUN_ARGS=-b=9 -a=async_node $(PROG).exe
+
+# Trying to find if icl.exe is set
+CXX1 = $(TBB_CXX)-
+CXX2 = $(CXX1:icl.exe-=icl.exe)
+CXX  = $(CXX2:-=cl.exe)
+
+# The C++ compiler options
+MYCXXFLAGS = /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_WARNINGS /D _CRT_NONSTDC_NO_DEPRECATE /wd4267 /wd4244
+MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
+
+all: release test
+
+release:
+	$(CXX) *.cpp /MD /O2 /Zi /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+
+debug:
+	$(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+
+clean:
+	@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest *.bz2
+
+test:
+	$(PROG) $(ARGS)
+
+perf_build: release
+
+perf_run:
+	$(PROG) $(PERF_RUN_ARGS)
+
diff --git a/examples/graph/fgbzip2/blocksort.cpp b/examples/graph/fgbzip2/blocksort.cpp
new file mode 100644
index 0000000..de4d980
--- /dev/null
+++ b/examples/graph/fgbzip2/blocksort.cpp
@@ -0,0 +1,1146 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+/*-------------------------------------------------------------*/
+/*--- Block sorting machinery                               ---*/
+/*---                                         blocksort.cpp ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+    The original source for this example:
+    This file is part of bzip2/libbzip2, a program and library for
+    lossless, block-sorting data compression.
+
+    bzip2/libbzip2 version 1.0.6 of 6 September 2010
+    Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+    This program, "bzip2", the associated library "libbzip2", and all
+    documentation, are copyright (C) 1996-2010 Julian R Seward.  All
+    rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+
+    2. The origin of this software must not be misrepresented; you must 
+    not claim that you wrote the original software.  If you use this 
+    software in a product, an acknowledgment in the product 
+    documentation would be appreciated but is not required.
+
+    3. Altered source versions must be plainly marked as such, and must
+    not be misrepresented as being the original software.
+
+    4. The name of the author may not be used to endorse or promote 
+    products derived from this software without specific prior written 
+    permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+    GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+    WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+    Julian Seward, jseward at bzip.org
+    bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   ------------------------------------------------------------------ */
+
+
+#include "bzlib_private.h"
+
+/*---------------------------------------------*/
+/*--- Fallback O(N log(N)^2) sorting        ---*/
+/*--- algorithm, for repetitive blocks      ---*/
+/*---------------------------------------------*/
+
+/*---------------------------------------------*/
+static 
+__inline__
+void fallbackSimpleSort ( UInt32* fmap, 
+                          UInt32* eclass, 
+                          Int32   lo, 
+                          Int32   hi )
+{
+   Int32 i, j, tmp;
+   UInt32 ec_tmp;
+
+   if (lo == hi) return;
+
+   if (hi - lo > 3) {
+      for ( i = hi-4; i >= lo; i-- ) {
+         tmp = fmap[i];
+         ec_tmp = eclass[tmp];
+         for ( j = i+4; j <= hi && ec_tmp > eclass[fmap[j]]; j += 4 )
+            fmap[j-4] = fmap[j];
+         fmap[j-4] = tmp;
+      }
+   }
+
+   for ( i = hi-1; i >= lo; i-- ) {
+      tmp = fmap[i];
+      ec_tmp = eclass[tmp];
+      for ( j = i+1; j <= hi && ec_tmp > eclass[fmap[j]]; j++ )
+         fmap[j-1] = fmap[j];
+      fmap[j-1] = tmp;
+   }
+}
+
+
+/*---------------------------------------------*/
+#define fswap(zz1, zz2) \
+   { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; }
+
+#define fvswap(zzp1, zzp2, zzn)       \
+{                                     \
+   Int32 yyp1 = (zzp1);               \
+   Int32 yyp2 = (zzp2);               \
+   Int32 yyn  = (zzn);                \
+   while (yyn > 0) {                  \
+      fswap(fmap[yyp1], fmap[yyp2]);  \
+      yyp1++; yyp2++; yyn--;          \
+   }                                  \
+}
+
+
+#define fmin(a,b) ((a) < (b)) ? (a) : (b)
+
+#define fpush(lz,hz) { stackLo[sp] = lz; \
+                       stackHi[sp] = hz; \
+                       sp++; }
+
+#define fpop(lz,hz) { sp--;              \
+                      lz = stackLo[sp];  \
+                      hz = stackHi[sp]; }
+
+#define FALLBACK_QSORT_SMALL_THRESH 10
+#define FALLBACK_QSORT_STACK_SIZE   100
+
+
+static
+void fallbackQSort3 ( UInt32* fmap, 
+                      UInt32* eclass,
+                      Int32   loSt, 
+                      Int32   hiSt )
+{
+   Int32 unLo, unHi, ltLo, gtHi, n, m;
+   Int32 sp, lo, hi;
+   UInt32 med, r, r3;
+   Int32 stackLo[FALLBACK_QSORT_STACK_SIZE];
+   Int32 stackHi[FALLBACK_QSORT_STACK_SIZE];
+
+   r = 0;
+
+   sp = 0;
+   fpush ( loSt, hiSt );
+
+   while (sp > 0) {
+
+      AssertH ( sp < FALLBACK_QSORT_STACK_SIZE - 1, 1004 );
+
+      fpop ( lo, hi );
+      if (hi - lo < FALLBACK_QSORT_SMALL_THRESH) {
+         fallbackSimpleSort ( fmap, eclass, lo, hi );
+         continue;
+      }
+
+      /* Random partitioning.  Median of 3 sometimes fails to
+         avoid bad cases.  Median of 9 seems to help but 
+         looks rather expensive.  This too seems to work but
+         is cheaper.  Guidance for the magic constants 
+         7621 and 32768 is taken from Sedgewick's algorithms
+         book, chapter 35.
+      */
+      r = ((r * 7621) + 1) % 32768;
+      r3 = r % 3;
+      if (r3 == 0) med = eclass[fmap[lo]]; else
+      if (r3 == 1) med = eclass[fmap[(lo+hi)>>1]]; else
+                   med = eclass[fmap[hi]];
+
+      unLo = ltLo = lo;
+      unHi = gtHi = hi;
+
+      while (1) {
+         while (1) {
+            if (unLo > unHi) break;
+            n = (Int32)eclass[fmap[unLo]] - (Int32)med;
+            if (n == 0) { 
+               fswap(fmap[unLo], fmap[ltLo]); 
+               ltLo++; unLo++; 
+               continue; 
+            };
+            if (n > 0) break;
+            unLo++;
+         }
+         while (1) {
+            if (unLo > unHi) break;
+            n = (Int32)eclass[fmap[unHi]] - (Int32)med;
+            if (n == 0) { 
+               fswap(fmap[unHi], fmap[gtHi]); 
+               gtHi--; unHi--; 
+               continue; 
+            };
+            if (n < 0) break;
+            unHi--;
+         }
+         if (unLo > unHi) break;
+         fswap(fmap[unLo], fmap[unHi]); unLo++; unHi--;
+      }
+
+      AssertD ( unHi == unLo-1, "fallbackQSort3(2)" );
+
+      if (gtHi < ltLo) continue;
+
+      n = fmin(ltLo-lo, unLo-ltLo); fvswap(lo, unLo-n, n);
+      m = fmin(hi-gtHi, gtHi-unHi); fvswap(unLo, hi-m+1, m);
+
+      n = lo + unLo - ltLo - 1;
+      m = hi - (gtHi - unHi) + 1;
+
+      if (n - lo > hi - m) {
+         fpush ( lo, n );
+         fpush ( m, hi );
+      } else {
+         fpush ( m, hi );
+         fpush ( lo, n );
+      }
+   }
+}
+
+#undef fmin
+#undef fpush
+#undef fpop
+#undef fswap
+#undef fvswap
+#undef FALLBACK_QSORT_SMALL_THRESH
+#undef FALLBACK_QSORT_STACK_SIZE
+
+
+/*---------------------------------------------*/
+/* Pre:
+      nblock > 0
+      eclass exists for [0 .. nblock-1]
+      ((UChar*)eclass) [0 .. nblock-1] holds block
+      ptr exists for [0 .. nblock-1]
+
+   Post:
+      ((UChar*)eclass) [0 .. nblock-1] holds block
+      All other areas of eclass destroyed
+      fmap [0 .. nblock-1] holds sorted order
+      bhtab [ 0 .. 2+(nblock/32) ] destroyed
+*/
+
+#define       SET_BH(zz)  bhtab[(zz) >> 5] |= (1 << ((zz) & 31))
+#define     CLEAR_BH(zz)  bhtab[(zz) >> 5] &= ~(1 << ((zz) & 31))
+#define     ISSET_BH(zz)  (bhtab[(zz) >> 5] & (1 << ((zz) & 31)))
+#define      WORD_BH(zz)  bhtab[(zz) >> 5]
+#define UNALIGNED_BH(zz)  ((zz) & 0x01f)
+
+static
+void fallbackSort ( UInt32* fmap, 
+                    UInt32* eclass, 
+                    UInt32* bhtab,
+                    Int32   nblock,
+                    Int32   verb )
+{
+   Int32 ftab[257];
+   Int32 ftabCopy[256];
+   Int32 H, i, j, k, l, r, cc, cc1;
+   Int32 nNotDone;
+   Int32 nBhtab;
+   UChar* eclass8 = (UChar*)eclass;
+
+   /*--
+      Initial 1-char radix sort to generate
+      initial fmap and initial BH bits.
+   --*/
+   if (verb >= 4)
+      VPrintf0 ( "        bucket sorting ...\n" );
+   for (i = 0; i < 257;    i++) ftab[i] = 0;
+   for (i = 0; i < nblock; i++) ftab[eclass8[i]]++;
+   for (i = 0; i < 256;    i++) ftabCopy[i] = ftab[i];
+   for (i = 1; i < 257;    i++) ftab[i] += ftab[i-1];
+
+   for (i = 0; i < nblock; i++) {
+      j = eclass8[i];
+      k = ftab[j] - 1;
+      ftab[j] = k;
+      fmap[k] = i;
+   }
+
+   nBhtab = 2 + (nblock / 32);
+   for (i = 0; i < nBhtab; i++) bhtab[i] = 0;
+   for (i = 0; i < 256; i++) SET_BH(ftab[i]);
+
+   /*--
+      Inductively refine the buckets.  Kind-of an
+      "exponential radix sort" (!), inspired by the
+      Manber-Myers suffix array construction algorithm.
+   --*/
+
+   /*-- set sentinel bits for block-end detection --*/
+   for (i = 0; i < 32; i++) { 
+      SET_BH(nblock + 2*i);
+      CLEAR_BH(nblock + 2*i + 1);
+   }
+
+   /*-- the log(N) loop --*/
+   H = 1;
+   while (1) {
+
+      if (verb >= 4) 
+         VPrintf1 ( "        depth %6d has ", H );
+
+      j = 0;
+      for (i = 0; i < nblock; i++) {
+         if (ISSET_BH(i)) j = i;
+         k = fmap[i] - H; if (k < 0) k += nblock;
+         eclass[k] = j;
+      }
+
+      nNotDone = 0;
+      r = -1;
+      while (1) {
+
+	 /*-- find the next non-singleton bucket --*/
+         k = r + 1;
+         while (ISSET_BH(k) && UNALIGNED_BH(k)) k++;
+         if (ISSET_BH(k)) {
+            while (WORD_BH(k) == 0xffffffff) k += 32;
+            while (ISSET_BH(k)) k++;
+         }
+         l = k - 1;
+         if (l >= nblock) break;
+         while (!ISSET_BH(k) && UNALIGNED_BH(k)) k++;
+         if (!ISSET_BH(k)) {
+            while (WORD_BH(k) == 0x00000000) k += 32;
+            while (!ISSET_BH(k)) k++;
+         }
+         r = k - 1;
+         if (r >= nblock) break;
+
+         /*-- now [l, r] bracket current bucket --*/
+         if (r > l) {
+            nNotDone += (r - l + 1);
+            fallbackQSort3 ( fmap, eclass, l, r );
+
+            /*-- scan bucket and generate header bits-- */
+            cc = -1;
+            for (i = l; i <= r; i++) {
+               cc1 = eclass[fmap[i]];
+               if (cc != cc1) { SET_BH(i); cc = cc1; };
+            }
+         }
+      }
+
+      if (verb >= 4) 
+         VPrintf1 ( "%6d unresolved strings\n", nNotDone );
+
+      H *= 2;
+      if (H > nblock || nNotDone == 0) break;
+   }
+
+   /*-- 
+      Reconstruct the original block in
+      eclass8 [0 .. nblock-1], since the
+      previous phase destroyed it.
+   --*/
+   if (verb >= 4)
+      VPrintf0 ( "        reconstructing block ...\n" );
+   j = 0;
+   for (i = 0; i < nblock; i++) {
+      while (ftabCopy[j] == 0) j++;
+      ftabCopy[j]--;
+      eclass8[fmap[i]] = (UChar)j;
+   }
+   AssertH ( j < 256, 1005 );
+}
+
+#undef       SET_BH
+#undef     CLEAR_BH
+#undef     ISSET_BH
+#undef      WORD_BH
+#undef UNALIGNED_BH
+
+
+/*---------------------------------------------*/
+/*--- The main, O(N^2 log(N)) sorting       ---*/
+/*--- algorithm.  Faster for "normal"       ---*/
+/*--- non-repetitive blocks.                ---*/
+/*---------------------------------------------*/
+
+/*---------------------------------------------*/
+static
+__inline__
+Bool mainGtU ( UInt32  i1, 
+               UInt32  i2,
+               UChar*  block, 
+               UInt16* quadrant,
+               UInt32  nblock,
+               Int32*  budget )
+{
+   Int32  k;
+   UChar  c1, c2;
+   UInt16 s1, s2;
+
+   AssertD ( i1 != i2, "mainGtU" );
+   /* 1 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 2 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 3 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 4 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 5 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 6 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 7 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 8 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 9 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 10 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 11 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 12 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+
+   k = nblock + 8;
+
+   do {
+      /* 1 */
+      c1 = block[i1]; c2 = block[i2];
+      if (c1 != c2) return (c1 > c2);
+      s1 = quadrant[i1]; s2 = quadrant[i2];
+      if (s1 != s2) return (s1 > s2);
+      i1++; i2++;
+      /* 2 */
+      c1 = block[i1]; c2 = block[i2];
+      if (c1 != c2) return (c1 > c2);
+      s1 = quadrant[i1]; s2 = quadrant[i2];
+      if (s1 != s2) return (s1 > s2);
+      i1++; i2++;
+      /* 3 */
+      c1 = block[i1]; c2 = block[i2];
+      if (c1 != c2) return (c1 > c2);
+      s1 = quadrant[i1]; s2 = quadrant[i2];
+      if (s1 != s2) return (s1 > s2);
+      i1++; i2++;
+      /* 4 */
+      c1 = block[i1]; c2 = block[i2];
+      if (c1 != c2) return (c1 > c2);
+      s1 = quadrant[i1]; s2 = quadrant[i2];
+      if (s1 != s2) return (s1 > s2);
+      i1++; i2++;
+      /* 5 */
+      c1 = block[i1]; c2 = block[i2];
+      if (c1 != c2) return (c1 > c2);
+      s1 = quadrant[i1]; s2 = quadrant[i2];
+      if (s1 != s2) return (s1 > s2);
+      i1++; i2++;
+      /* 6 */
+      c1 = block[i1]; c2 = block[i2];
+      if (c1 != c2) return (c1 > c2);
+      s1 = quadrant[i1]; s2 = quadrant[i2];
+      if (s1 != s2) return (s1 > s2);
+      i1++; i2++;
+      /* 7 */
+      c1 = block[i1]; c2 = block[i2];
+      if (c1 != c2) return (c1 > c2);
+      s1 = quadrant[i1]; s2 = quadrant[i2];
+      if (s1 != s2) return (s1 > s2);
+      i1++; i2++;
+      /* 8 */
+      c1 = block[i1]; c2 = block[i2];
+      if (c1 != c2) return (c1 > c2);
+      s1 = quadrant[i1]; s2 = quadrant[i2];
+      if (s1 != s2) return (s1 > s2);
+      i1++; i2++;
+
+      if (i1 >= nblock) i1 -= nblock;
+      if (i2 >= nblock) i2 -= nblock;
+
+      k -= 8;
+      (*budget)--;
+   }
+      while (k >= 0);
+
+   return False;
+}
+
+
+/*---------------------------------------------*/
+/*--
+   Knuth's increments seem to work better
+   than Incerpi-Sedgewick here.  Possibly
+   because the number of elements to sort
+   is usually small, typically <= 20.
+--*/
+static
+Int32 incs[14] = { 1, 4, 13, 40, 121, 364, 1093, 3280,
+                   9841, 29524, 88573, 265720,
+                   797161, 2391484 };
+
+static
+void mainSimpleSort ( UInt32* ptr,
+                      UChar*  block,
+                      UInt16* quadrant,
+                      Int32   nblock,
+                      Int32   lo, 
+                      Int32   hi, 
+                      Int32   d,
+                      Int32*  budget )
+{
+   Int32 i, j, h, bigN, hp;
+   UInt32 v;
+
+   bigN = hi - lo + 1;
+   if (bigN < 2) return;
+
+   hp = 0;
+   while (incs[hp] < bigN) hp++;
+   hp--;
+
+   for (; hp >= 0; hp--) {
+      h = incs[hp];
+
+      i = lo + h;
+      while (True) {
+
+         /*-- copy 1 --*/
+         if (i > hi) break;
+         v = ptr[i];
+         j = i;
+         while ( mainGtU ( 
+                    ptr[j-h]+d, v+d, block, quadrant, nblock, budget 
+                 ) ) {
+            ptr[j] = ptr[j-h];
+            j = j - h;
+            if (j <= (lo + h - 1)) break;
+         }
+         ptr[j] = v;
+         i++;
+
+         /*-- copy 2 --*/
+         if (i > hi) break;
+         v = ptr[i];
+         j = i;
+         while ( mainGtU ( 
+                    ptr[j-h]+d, v+d, block, quadrant, nblock, budget 
+                 ) ) {
+            ptr[j] = ptr[j-h];
+            j = j - h;
+            if (j <= (lo + h - 1)) break;
+         }
+         ptr[j] = v;
+         i++;
+
+         /*-- copy 3 --*/
+         if (i > hi) break;
+         v = ptr[i];
+         j = i;
+         while ( mainGtU ( 
+                    ptr[j-h]+d, v+d, block, quadrant, nblock, budget 
+                 ) ) {
+            ptr[j] = ptr[j-h];
+            j = j - h;
+            if (j <= (lo + h - 1)) break;
+         }
+         ptr[j] = v;
+         i++;
+
+         if (*budget < 0) return;
+      }
+   }
+}
+
+
+/*---------------------------------------------*/
+/*--
+   The following is an implementation of
+   an elegant 3-way quicksort for strings,
+   described in a paper "Fast Algorithms for
+   Sorting and Searching Strings", by Robert
+   Sedgewick and Jon L. Bentley.
+--*/
+
+#define mswap(zz1, zz2) \
+   { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; }
+
+#define mvswap(zzp1, zzp2, zzn)       \
+{                                     \
+   Int32 yyp1 = (zzp1);               \
+   Int32 yyp2 = (zzp2);               \
+   Int32 yyn  = (zzn);                \
+   while (yyn > 0) {                  \
+      mswap(ptr[yyp1], ptr[yyp2]);    \
+      yyp1++; yyp2++; yyn--;          \
+   }                                  \
+}
+
+static 
+__inline__
+UChar mmed3 ( UChar a, UChar b, UChar c )
+{
+   UChar t;
+   if (a > b) { t = a; a = b; b = t; };
+   if (b > c) { 
+      b = c;
+      if (a > b) b = a;
+   }
+   return b;
+}
+
+#define mmin(a,b) ((a) < (b)) ? (a) : (b)
+
+#define mpush(lz,hz,dz) { stackLo[sp] = lz; \
+                          stackHi[sp] = hz; \
+                          stackD [sp] = dz; \
+                          sp++; }
+
+#define mpop(lz,hz,dz) { sp--;             \
+                         lz = stackLo[sp]; \
+                         hz = stackHi[sp]; \
+                         dz = stackD [sp]; }
+
+
+#define mnextsize(az) (nextHi[az]-nextLo[az])
+
+#define mnextswap(az,bz)                                        \
+   { Int32 tz;                                                  \
+     tz = nextLo[az]; nextLo[az] = nextLo[bz]; nextLo[bz] = tz; \
+     tz = nextHi[az]; nextHi[az] = nextHi[bz]; nextHi[bz] = tz; \
+     tz = nextD [az]; nextD [az] = nextD [bz]; nextD [bz] = tz; }
+
+
+#define MAIN_QSORT_SMALL_THRESH 20
+#define MAIN_QSORT_DEPTH_THRESH (BZ_N_RADIX + BZ_N_QSORT)
+#define MAIN_QSORT_STACK_SIZE 100
+
+static
+void mainQSort3 ( UInt32* ptr,
+                  UChar*  block,
+                  UInt16* quadrant,
+                  Int32   nblock,
+                  Int32   loSt, 
+                  Int32   hiSt, 
+                  Int32   dSt,
+                  Int32*  budget )
+{
+   Int32 unLo, unHi, ltLo, gtHi, n, m, med;
+   Int32 sp, lo, hi, d;
+
+   Int32 stackLo[MAIN_QSORT_STACK_SIZE];
+   Int32 stackHi[MAIN_QSORT_STACK_SIZE];
+   Int32 stackD [MAIN_QSORT_STACK_SIZE];
+
+   Int32 nextLo[3];
+   Int32 nextHi[3];
+   Int32 nextD [3];
+
+   sp = 0;
+   mpush ( loSt, hiSt, dSt );
+
+   while (sp > 0) {
+
+      AssertH ( sp < MAIN_QSORT_STACK_SIZE - 2, 1001 );
+
+      mpop ( lo, hi, d );
+      if (hi - lo < MAIN_QSORT_SMALL_THRESH || 
+          d > MAIN_QSORT_DEPTH_THRESH) {
+         mainSimpleSort ( ptr, block, quadrant, nblock, lo, hi, d, budget );
+         if (*budget < 0) return;
+         continue;
+      }
+
+      med = (Int32) 
+            mmed3 ( block[ptr[ lo         ]+d],
+                    block[ptr[ hi         ]+d],
+                    block[ptr[ (lo+hi)>>1 ]+d] );
+
+      unLo = ltLo = lo;
+      unHi = gtHi = hi;
+
+      while (True) {
+         while (True) {
+            if (unLo > unHi) break;
+            n = ((Int32)block[ptr[unLo]+d]) - med;
+            if (n == 0) { 
+               mswap(ptr[unLo], ptr[ltLo]); 
+               ltLo++; unLo++; continue; 
+            };
+            if (n >  0) break;
+            unLo++;
+         }
+         while (True) {
+            if (unLo > unHi) break;
+            n = ((Int32)block[ptr[unHi]+d]) - med;
+            if (n == 0) { 
+               mswap(ptr[unHi], ptr[gtHi]); 
+               gtHi--; unHi--; continue; 
+            };
+            if (n <  0) break;
+            unHi--;
+         }
+         if (unLo > unHi) break;
+         mswap(ptr[unLo], ptr[unHi]); unLo++; unHi--;
+      }
+
+      AssertD ( unHi == unLo-1, "mainQSort3(2)" );
+
+      if (gtHi < ltLo) {
+         mpush(lo, hi, d+1 );
+         continue;
+      }
+
+      n = mmin(ltLo-lo, unLo-ltLo); mvswap(lo, unLo-n, n);
+      m = mmin(hi-gtHi, gtHi-unHi); mvswap(unLo, hi-m+1, m);
+
+      n = lo + unLo - ltLo - 1;
+      m = hi - (gtHi - unHi) + 1;
+
+      nextLo[0] = lo;  nextHi[0] = n;   nextD[0] = d;
+      nextLo[1] = m;   nextHi[1] = hi;  nextD[1] = d;
+      nextLo[2] = n+1; nextHi[2] = m-1; nextD[2] = d+1;
+
+      if (mnextsize(0) < mnextsize(1)) mnextswap(0,1);
+      if (mnextsize(1) < mnextsize(2)) mnextswap(1,2);
+      if (mnextsize(0) < mnextsize(1)) mnextswap(0,1);
+
+      AssertD (mnextsize(0) >= mnextsize(1), "mainQSort3(8)" );
+      AssertD (mnextsize(1) >= mnextsize(2), "mainQSort3(9)" );
+
+      mpush (nextLo[0], nextHi[0], nextD[0]);
+      mpush (nextLo[1], nextHi[1], nextD[1]);
+      mpush (nextLo[2], nextHi[2], nextD[2]);
+   }
+}
+
+#undef mswap
+#undef mvswap
+#undef mpush
+#undef mpop
+#undef mmin
+#undef mnextsize
+#undef mnextswap
+#undef MAIN_QSORT_SMALL_THRESH
+#undef MAIN_QSORT_DEPTH_THRESH
+#undef MAIN_QSORT_STACK_SIZE
+
+
+/*---------------------------------------------*/
+/* Pre:
+      nblock > N_OVERSHOOT
+      block32 exists for [0 .. nblock-1 +N_OVERSHOOT]
+      ((UChar*)block32) [0 .. nblock-1] holds block
+      ptr exists for [0 .. nblock-1]
+
+   Post:
+      ((UChar*)block32) [0 .. nblock-1] holds block
+      All other areas of block32 destroyed
+      ftab [0 .. 65536 ] destroyed
+      ptr [0 .. nblock-1] holds sorted order
+      if (*budget < 0), sorting was abandoned
+*/
+
+#define BIGFREQ(b) (ftab[((b)+1) << 8] - ftab[(b) << 8])
+#define SETMASK (1 << 21)
+#define CLEARMASK (~(SETMASK))
+
+static
+void mainSort ( UInt32* ptr, 
+                UChar*  block,
+                UInt16* quadrant, 
+                UInt32* ftab,
+                Int32   nblock,
+                Int32   verb,
+                Int32*  budget )
+{
+   Int32  i, j, k, ss, sb;
+   Int32  runningOrder[256];
+   Bool   bigDone[256];
+   Int32  copyStart[256];
+   Int32  copyEnd  [256];
+   UChar  c1;
+   Int32  numQSorted;
+   UInt16 s;
+   if (verb >= 4) VPrintf0 ( "        main sort initialise ...\n" );
+
+   /*-- set up the 2-byte frequency table --*/
+   for (i = 65536; i >= 0; i--) ftab[i] = 0;
+
+   j = block[0] << 8;
+   i = nblock-1;
+   for (; i >= 3; i -= 4) {
+      quadrant[i] = 0;
+      j = (j >> 8) | ( ((UInt16)block[i]) << 8);
+      ftab[j]++;
+      quadrant[i-1] = 0;
+      j = (j >> 8) | ( ((UInt16)block[i-1]) << 8);
+      ftab[j]++;
+      quadrant[i-2] = 0;
+      j = (j >> 8) | ( ((UInt16)block[i-2]) << 8);
+      ftab[j]++;
+      quadrant[i-3] = 0;
+      j = (j >> 8) | ( ((UInt16)block[i-3]) << 8);
+      ftab[j]++;
+   }
+   for (; i >= 0; i--) {
+      quadrant[i] = 0;
+      j = (j >> 8) | ( ((UInt16)block[i]) << 8);
+      ftab[j]++;
+   }
+
+   /*-- (emphasises close relationship of block & quadrant) --*/
+   for (i = 0; i < BZ_N_OVERSHOOT; i++) {
+      block   [nblock+i] = block[i];
+      quadrant[nblock+i] = 0;
+   }
+
+   if (verb >= 4) VPrintf0 ( "        bucket sorting ...\n" );
+
+   /*-- Complete the initial radix sort --*/
+   for (i = 1; i <= 65536; i++) ftab[i] += ftab[i-1];
+
+   s = block[0] << 8;
+   i = nblock-1;
+   for (; i >= 3; i -= 4) {
+      s = (s >> 8) | (block[i] << 8);
+      j = ftab[s] -1;
+      ftab[s] = j;
+      ptr[j] = i;
+      s = (s >> 8) | (block[i-1] << 8);
+      j = ftab[s] -1;
+      ftab[s] = j;
+      ptr[j] = i-1;
+      s = (s >> 8) | (block[i-2] << 8);
+      j = ftab[s] -1;
+      ftab[s] = j;
+      ptr[j] = i-2;
+      s = (s >> 8) | (block[i-3] << 8);
+      j = ftab[s] -1;
+      ftab[s] = j;
+      ptr[j] = i-3;
+   }
+   for (; i >= 0; i--) {
+      s = (s >> 8) | (block[i] << 8);
+      j = ftab[s] -1;
+      ftab[s] = j;
+      ptr[j] = i;
+   }
+
+   /*--
+      Now ftab contains the first loc of every small bucket.
+      Calculate the running order, from smallest to largest
+      big bucket.
+   --*/
+   for (i = 0; i <= 255; i++) {
+      bigDone     [i] = False;
+      runningOrder[i] = i;
+   }
+
+   {
+      Int32 vv;
+      Int32 h = 1;
+      do h = 3 * h + 1; while (h <= 256);
+      do {
+         h = h / 3;
+         for (i = h; i <= 255; i++) {
+            vv = runningOrder[i];
+            j = i;
+            while ( BIGFREQ(runningOrder[j-h]) > BIGFREQ(vv) ) {
+               runningOrder[j] = runningOrder[j-h];
+               j = j - h;
+               if (j <= (h - 1)) goto zero;
+            }
+            zero:
+            runningOrder[j] = vv;
+         }
+      } while (h != 1);
+   }
+
+   /*--
+      The main sorting loop.
+   --*/
+
+   numQSorted = 0;
+
+   for (i = 0; i <= 255; i++) {
+
+      /*--
+         Process big buckets, starting with the least full.
+         Basically this is a 3-step process in which we call
+         mainQSort3 to sort the small buckets [ss, j], but
+         also make a big effort to avoid the calls if we can.
+      --*/
+      ss = runningOrder[i];
+
+      /*--
+         Step 1:
+         Complete the big bucket [ss] by quicksorting
+         any unsorted small buckets [ss, j], for j != ss.  
+         Hopefully previous pointer-scanning phases have already
+         completed many of the small buckets [ss, j], so
+         we don't have to sort them at all.
+      --*/
+      for (j = 0; j <= 255; j++) {
+         if (j != ss) {
+            sb = (ss << 8) + j;
+            if ( ! (ftab[sb] & SETMASK) ) {
+               Int32 lo = ftab[sb]   & CLEARMASK;
+               Int32 hi = (ftab[sb+1] & CLEARMASK) - 1;
+               if (hi > lo) {
+                  if (verb >= 4)
+                     VPrintf4 ( "        qsort [0x%x, 0x%x]   "
+                                "done %d   this %d\n",
+                                ss, j, numQSorted, hi - lo + 1 );
+                  mainQSort3 ( 
+                     ptr, block, quadrant, nblock, 
+                     lo, hi, BZ_N_RADIX, budget 
+                  );   
+                  numQSorted += (hi - lo + 1);
+                  if (*budget < 0) return;
+               }
+            }
+            ftab[sb] |= SETMASK;
+         }
+      }
+
+      AssertH ( !bigDone[ss], 1006 );
+
+      /*--
+         Step 2:
+         Now scan this big bucket [ss] so as to synthesise the
+         sorted order for small buckets [t, ss] for all t,
+         including, magically, the bucket [ss,ss] too.
+         This will avoid doing Real Work in subsequent Step 1's.
+      --*/
+      {
+         for (j = 0; j <= 255; j++) {
+            copyStart[j] =  ftab[(j << 8) + ss]     & CLEARMASK;
+            copyEnd  [j] = (ftab[(j << 8) + ss + 1] & CLEARMASK) - 1;
+         }
+         for (j = ftab[ss << 8] & CLEARMASK; j < copyStart[ss]; j++) {
+            k = ptr[j]-1; if (k < 0) k += nblock;
+            c1 = block[k];
+            if (!bigDone[c1])
+               ptr[ copyStart[c1]++ ] = k;
+         }
+         for (j = (ftab[(ss+1) << 8] & CLEARMASK) - 1; j > copyEnd[ss]; j--) {
+            k = ptr[j]-1; if (k < 0) k += nblock;
+            c1 = block[k];
+            if (!bigDone[c1]) 
+               ptr[ copyEnd[c1]-- ] = k;
+         }
+      }
+
+      AssertH ( (copyStart[ss]-1 == copyEnd[ss])
+                || 
+                /* Extremely rare case missing in bzip2-1.0.0 and 1.0.1.
+                   Necessity for this case is demonstrated by compressing 
+                   a sequence of approximately 48.5 million of character 
+                   251; 1.0.0/1.0.1 will then die here. */
+                (copyStart[ss] == 0 && copyEnd[ss] == nblock-1),
+                1007 )
+
+      for (j = 0; j <= 255; j++) ftab[(j << 8) + ss] |= SETMASK;
+
+      /*--
+         Step 3:
+         The [ss] big bucket is now done.  Record this fact,
+         and update the quadrant descriptors.  Remember to
+         update quadrants in the overshoot area too, if
+         necessary.  The "if (i < 255)" test merely skips
+         this updating for the last bucket processed, since
+         updating for the last bucket is pointless.
+
+         The quadrant array provides a way to incrementally
+         cache sort orderings, as they appear, so as to 
+         make subsequent comparisons in fullGtU() complete
+         faster.  For repetitive blocks this makes a big
+         difference (but not big enough to be able to avoid
+         the fallback sorting mechanism, exponential radix sort).
+
+         The precise meaning is: at all times:
+
+            for 0 <= i < nblock and 0 <= j <= nblock
+
+            if block[i] != block[j], 
+
+               then the relative values of quadrant[i] and 
+                    quadrant[j] are meaningless.
+
+               else {
+                  if quadrant[i] < quadrant[j]
+                     then the string starting at i lexicographically
+                     precedes the string starting at j
+
+                  else if quadrant[i] > quadrant[j]
+                     then the string starting at j lexicographically
+                     precedes the string starting at i
+
+                  else
+                     the relative ordering of the strings starting
+                     at i and j has not yet been determined.
+               }
+      --*/
+      bigDone[ss] = True;
+
+      if (i < 255) {
+         Int32 bbStart  = ftab[ss << 8] & CLEARMASK;
+         Int32 bbSize   = (ftab[(ss+1) << 8] & CLEARMASK) - bbStart;
+         Int32 shifts   = 0;
+
+         while ((bbSize >> shifts) > 65534) shifts++;
+
+         for (j = bbSize-1; j >= 0; j--) {
+            Int32 a2update     = ptr[bbStart + j];
+            UInt16 qVal        = (UInt16)(j >> shifts);
+            quadrant[a2update] = qVal;
+            if (a2update < BZ_N_OVERSHOOT)
+               quadrant[a2update + nblock] = qVal;
+         }
+         AssertH ( ((bbSize-1) >> shifts) <= 65535, 1002 );
+      }
+
+   }
+
+   if (verb >= 4)
+      VPrintf3 ( "        %d pointers, %d sorted, %d scanned\n",
+                 nblock, numQSorted, nblock - numQSorted );
+}
+
+#undef BIGFREQ
+#undef SETMASK
+#undef CLEARMASK
+
+
+/*---------------------------------------------*/
+/* Pre:
+      nblock > 0
+      arr2 exists for [0 .. nblock-1 +N_OVERSHOOT]
+      ((UChar*)arr2)  [0 .. nblock-1] holds block
+      arr1 exists for [0 .. nblock-1]
+
+   Post:
+      ((UChar*)arr2) [0 .. nblock-1] holds block
+      All other areas of block destroyed
+      ftab [ 0 .. 65536 ] destroyed
+      arr1 [0 .. nblock-1] holds sorted order
+*/
+void BZ2_blockSort ( EState* s )
+{
+   UInt32* ptr    = s->ptr; 
+   UChar*  block  = s->block;
+   UInt32* ftab   = s->ftab;
+   Int32   nblock = s->nblock;
+   Int32   verb   = s->verbosity;
+   Int32   wfact  = s->workFactor;
+   UInt16* quadrant;
+   Int32   budget;
+   Int32   budgetInit;
+   Int32   i;
+
+   if (nblock < 10000) {
+      fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb );
+   } else {
+      /* Calculate the location for quadrant, remembering to get
+         the alignment right.  Assumes that &(block[0]) is at least
+         2-byte aligned -- this should be ok since block is really
+         the first section of arr2.
+      */
+      i = nblock+BZ_N_OVERSHOOT;
+      if (i & 1) i++;
+      quadrant = (UInt16*)(&(block[i]));
+
+      /* (wfact-1) / 3 puts the default-factor-30
+         transition point at very roughly the same place as 
+         with v0.1 and v0.9.0.  
+         Not that it particularly matters any more, since the
+         resulting compressed stream is now the same regardless
+         of whether or not we use the main sort or fallback sort.
+      */
+      if (wfact < 1  ) wfact = 1;
+      if (wfact > 100) wfact = 100;
+      budgetInit = nblock * ((wfact-1) / 3);
+      budget = budgetInit;
+
+      mainSort ( ptr, block, quadrant, ftab, nblock, verb, &budget );
+      if (verb >= 3) 
+         VPrintf3 ( "      %d work, %d block, ratio %5.2f\n",
+                    budgetInit - budget,
+                    nblock, 
+                    (float)(budgetInit - budget) /
+                    (float)(nblock==0 ? 1 : nblock) ); 
+      if (budget < 0) {
+         if (verb >= 2) 
+            VPrintf0 ( "    too repetitive; using fallback"
+                       " sorting algorithm\n" );
+         fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb );
+      }
+   }
+
+   s->origPtr = -1;
+   for (i = 0; i < s->nblock; i++)
+      if (ptr[i] == 0)
+         { s->origPtr = i; break; };
+
+   AssertH( s->origPtr != -1, 1003 );
+}
+
+
+/*-------------------------------------------------------------*/
+/*--- end                                       blocksort.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/examples/graph/fgbzip2/bzlib.cpp b/examples/graph/fgbzip2/bzlib.cpp
new file mode 100644
index 0000000..4971e8a
--- /dev/null
+++ b/examples/graph/fgbzip2/bzlib.cpp
@@ -0,0 +1,1624 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+/*-------------------------------------------------------------*/
+/*--- Library top-level functions.                          ---*/
+/*---                                             bzlib.cpp ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+   The original source for this example:
+   This file is part of bzip2/libbzip2, a program and library for
+   lossless, block-sorting data compression.
+
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+   This program, "bzip2", the associated library "libbzip2", and all
+   documentation, are copyright (C) 1996-2010 Julian R Seward.  All
+   rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+   1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+   2. The origin of this software must not be misrepresented; you must 
+   not claim that you wrote the original software.  If you use this 
+   software in a product, an acknowledgment in the product 
+   documentation would be appreciated but is not required.
+
+   3. Altered source versions must be plainly marked as such, and must
+   not be misrepresented as being the original software.
+
+   4. The name of the author may not be used to endorse or promote 
+   products derived from this software without specific prior written 
+   permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+   Julian Seward, jseward at bzip.org
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   ------------------------------------------------------------------ */
+
+/* CHANGES
+   0.9.0    -- original version.
+   0.9.0a/b -- no changes in this file.
+   0.9.0c   -- made zero-length BZ_FLUSH work correctly in bzCompress().
+     fixed bzWrite/bzRead to ignore zero-length requests.
+     fixed bzread to correctly handle read requests after EOF.
+     wrong parameter order in call to bzDecompressInit in
+     bzBuffToBuffDecompress.  Fixed.
+*/
+
+#include "bzlib_private.h"
+
+
+/*---------------------------------------------------*/
+/*--- Compression stuff                           ---*/
+/*---------------------------------------------------*/
+
+
+/*---------------------------------------------------*/
+#ifndef BZ_NO_STDIO
+void BZ2_bz__AssertH__fail ( int errcode )
+{
+   fprintf(stderr, 
+      "\n\nbzip2/libbzip2: internal error number %d.\n"
+      "This is a bug in bzip2/libbzip2, %s.\n"
+      "Please report it to me at: jseward at bzip.org.  If this happened\n"
+      "when you were using some program which uses libbzip2 as a\n"
+      "component, you should also report this bug to the author(s)\n"
+      "of that program.  Please make an effort to report this bug;\n"
+      "timely and accurate bug reports eventually lead to higher\n"
+      "quality software.  Thanks.  Julian Seward, 10 December 2007.\n\n",
+      errcode,
+      BZ2_bzlibVersion()
+   );
+
+   if (errcode == 1007) {
+   fprintf(stderr,
+      "\n*** A special note about internal error number 1007 ***\n"
+      "\n"
+      "Experience suggests that a common cause of i.e. 1007\n"
+      "is unreliable memory or other hardware.  The 1007 assertion\n"
+      "just happens to cross-check the results of huge numbers of\n"
+      "memory reads/writes, and so acts (unintendedly) as a stress\n"
+      "test of your memory system.\n"
+      "\n"
+      "I suggest the following: try compressing the file again,\n"
+      "possibly monitoring progress in detail with the -vv flag.\n"
+      "\n"
+      "* If the error cannot be reproduced, and/or happens at different\n"
+      "  points in compression, you may have a flaky memory system.\n"
+      "  Try a memory-test program.  I have used Memtest86\n"
+      "  (www.memtest86.com).  At the time of writing it is free (GPLd).\n"
+      "  Memtest86 tests memory much more thorougly than your BIOSs\n"
+      "  power-on test, and may find failures that the BIOS doesn't.\n"
+      "\n"
+      "* If the error can be repeatably reproduced, this is a bug in\n"
+      "  bzip2, and I would very much like to hear about it.  Please\n"
+      "  let me know, and, ideally, save a copy of the file causing the\n"
+      "  problem -- without which I will be unable to investigate it.\n"
+      "\n"
+   );
+   }
+
+   exit(3);
+}
+#endif
+
+
+/*---------------------------------------------------*/
+static
+int bz_config_ok ( void )
+{
+   if (sizeof(int)   != 4) return 0;
+   if (sizeof(short) != 2) return 0;
+   if (sizeof(char)  != 1) return 0;
+   return 1;
+}
+
+
+/*---------------------------------------------------*/
+static
+void* default_bzalloc ( void* opaque, Int32 items, Int32 size )
+{
+   void* v = malloc ( items * size );
+   return v;
+}
+
+static
+void default_bzfree ( void* opaque, void* addr )
+{
+   if (addr != NULL) free ( addr );
+}
+
+
+/*---------------------------------------------------*/
+static
+void prepare_new_block ( EState* s )
+{
+   Int32 i;
+   s->nblock = 0;
+   s->numZ = 0;
+   s->state_out_pos = 0;
+   BZ_INITIALISE_CRC ( s->blockCRC );
+   for (i = 0; i < 256; i++) s->inUse[i] = False;
+   s->blockNo++;
+}
+
+
+/*---------------------------------------------------*/
+static
+void init_RL ( EState* s )
+{
+   s->state_in_ch  = 256;
+   s->state_in_len = 0;
+}
+
+
+static
+Bool isempty_RL ( EState* s )
+{
+   if (s->state_in_ch < 256 && s->state_in_len > 0)
+      return False; else
+      return True;
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzCompressInit) 
+                    ( bz_stream* strm, 
+                     int        blockSize100k,
+                     int        verbosity,
+                     int        workFactor )
+{
+   Int32   n;
+   EState* s;
+
+   if (!bz_config_ok()) return BZ_CONFIG_ERROR;
+
+   if (strm == NULL || 
+       blockSize100k < 1 || blockSize100k > 9 ||
+       workFactor < 0 || workFactor > 250)
+     return BZ_PARAM_ERROR;
+
+   if (workFactor == 0) workFactor = 30;
+   if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc;
+   if (strm->bzfree == NULL) strm->bzfree = default_bzfree;
+
+   s = (EState*)BZALLOC( sizeof(EState) );
+   if (s == NULL) return BZ_MEM_ERROR;
+   s->strm = strm;
+
+   s->arr1 = NULL;
+   s->arr2 = NULL;
+   s->ftab = NULL;
+
+   n       = 100000 * blockSize100k;
+   s->arr1 = (UInt32*)BZALLOC( n                  * sizeof(UInt32) );
+   s->arr2 = (UInt32*)BZALLOC( (n+BZ_N_OVERSHOOT) * sizeof(UInt32) );
+   s->ftab = (UInt32*)BZALLOC( 65537              * sizeof(UInt32) );
+
+   if (s->arr1 == NULL || s->arr2 == NULL || s->ftab == NULL) {
+      if (s->arr1 != NULL) BZFREE(s->arr1);
+      if (s->arr2 != NULL) BZFREE(s->arr2);
+      if (s->ftab != NULL) BZFREE(s->ftab);
+      if (s       != NULL) BZFREE(s);
+      return BZ_MEM_ERROR;
+   }
+
+   s->blockNo           = 0;
+   s->state             = BZ_S_INPUT;
+   s->mode              = BZ_M_RUNNING;
+   s->combinedCRC       = 0;
+   s->blockSize100k     = blockSize100k;
+   s->nblockMAX         = 100000 * blockSize100k - 19;
+   s->verbosity         = verbosity;
+   s->workFactor        = workFactor;
+
+   s->block             = (UChar*)s->arr2;
+   s->mtfv              = (UInt16*)s->arr1;
+   s->zbits             = NULL;
+   s->ptr               = (UInt32*)s->arr1;
+
+   strm->state          = s;
+   strm->total_in_lo32  = 0;
+   strm->total_in_hi32  = 0;
+   strm->total_out_lo32 = 0;
+   strm->total_out_hi32 = 0;
+   init_RL ( s );
+   prepare_new_block ( s );
+   return BZ_OK;
+}
+
+
+/*---------------------------------------------------*/
+static
+void add_pair_to_block ( EState* s )
+{
+   Int32 i;
+   UChar ch = (UChar)(s->state_in_ch);
+   for (i = 0; i < s->state_in_len; i++) {
+      BZ_UPDATE_CRC( s->blockCRC, ch );
+   }
+   s->inUse[s->state_in_ch] = True;
+   switch (s->state_in_len) {
+      case 1:
+         s->block[s->nblock] = (UChar)ch; s->nblock++;
+         break;
+      case 2:
+         s->block[s->nblock] = (UChar)ch; s->nblock++;
+         s->block[s->nblock] = (UChar)ch; s->nblock++;
+         break;
+      case 3:
+         s->block[s->nblock] = (UChar)ch; s->nblock++;
+         s->block[s->nblock] = (UChar)ch; s->nblock++;
+         s->block[s->nblock] = (UChar)ch; s->nblock++;
+         break;
+      default:
+         s->inUse[s->state_in_len-4] = True;
+         s->block[s->nblock] = (UChar)ch; s->nblock++;
+         s->block[s->nblock] = (UChar)ch; s->nblock++;
+         s->block[s->nblock] = (UChar)ch; s->nblock++;
+         s->block[s->nblock] = (UChar)ch; s->nblock++;
+         s->block[s->nblock] = ((UChar)(s->state_in_len-4));
+         s->nblock++;
+         break;
+   }
+}
+
+
+/*---------------------------------------------------*/
+static
+void flush_RL ( EState* s )
+{
+   if (s->state_in_ch < 256) add_pair_to_block ( s );
+   init_RL ( s );
+}
+
+
+/*---------------------------------------------------*/
+#define ADD_CHAR_TO_BLOCK(zs,zchh0)               \
+{                                                 \
+   UInt32 zchh = (UInt32)(zchh0);                 \
+   /*-- fast track the common case --*/           \
+   if (zchh != zs->state_in_ch &&                 \
+       zs->state_in_len == 1) {                   \
+      UChar ch = (UChar)(zs->state_in_ch);        \
+      BZ_UPDATE_CRC( zs->blockCRC, ch );          \
+      zs->inUse[zs->state_in_ch] = True;          \
+      zs->block[zs->nblock] = (UChar)ch;          \
+      zs->nblock++;                               \
+      zs->state_in_ch = zchh;                     \
+   }                                              \
+   else                                           \
+   /*-- general, uncommon cases --*/              \
+   if (zchh != zs->state_in_ch ||                 \
+      zs->state_in_len == 255) {                  \
+      if (zs->state_in_ch < 256)                  \
+         add_pair_to_block ( zs );                \
+      zs->state_in_ch = zchh;                     \
+      zs->state_in_len = 1;                       \
+   } else {                                       \
+      zs->state_in_len++;                         \
+   }                                              \
+}
+
+
+/*---------------------------------------------------*/
+static
+Bool copy_input_until_stop ( EState* s )
+{
+   Bool progress_in = False;
+
+   if (s->mode == BZ_M_RUNNING) {
+
+      /*-- fast track the common case --*/
+      while (True) {
+         /*-- block full? --*/
+         if (s->nblock >= s->nblockMAX) break;
+         /*-- no input? --*/
+         if (s->strm->avail_in == 0) break;
+         progress_in = True;
+         ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); 
+         s->strm->next_in++;
+         s->strm->avail_in--;
+         s->strm->total_in_lo32++;
+         if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++;
+      }
+
+   } else {
+
+      /*-- general, uncommon case --*/
+      while (True) {
+         /*-- block full? --*/
+         if (s->nblock >= s->nblockMAX) break;
+         /*-- no input? --*/
+         if (s->strm->avail_in == 0) break;
+         /*-- flush/finish end? --*/
+         if (s->avail_in_expect == 0) break;
+         progress_in = True;
+         ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); 
+         s->strm->next_in++;
+         s->strm->avail_in--;
+         s->strm->total_in_lo32++;
+         if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++;
+         s->avail_in_expect--;
+      }
+   }
+   return progress_in;
+}
+
+
+/*---------------------------------------------------*/
+static
+Bool copy_output_until_stop ( EState* s )
+{
+   Bool progress_out = False;
+
+   while (True) {
+
+      /*-- no output space? --*/
+      if (s->strm->avail_out == 0) break;
+
+      /*-- block done? --*/
+      if (s->state_out_pos >= s->numZ) break;
+
+      progress_out = True;
+      *(s->strm->next_out) = s->zbits[s->state_out_pos];
+      s->state_out_pos++;
+      s->strm->avail_out--;
+      s->strm->next_out++;
+      s->strm->total_out_lo32++;
+      if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
+   }
+
+   return progress_out;
+}
+
+
+/*---------------------------------------------------*/
+static
+Bool handle_compress ( bz_stream* strm )
+{
+   Bool progress_in  = False;
+   Bool progress_out = False;
+   EState* s = (EState*)strm->state;
+   
+   while (True) {
+
+      if (s->state == BZ_S_OUTPUT) {
+         progress_out |= copy_output_until_stop ( s );
+         if (s->state_out_pos < s->numZ) break;
+         if (s->mode == BZ_M_FINISHING && 
+             s->avail_in_expect == 0 &&
+             isempty_RL(s)) break;
+         prepare_new_block ( s );
+         s->state = BZ_S_INPUT;
+         if (s->mode == BZ_M_FLUSHING && 
+             s->avail_in_expect == 0 &&
+             isempty_RL(s)) break;
+      }
+
+      if (s->state == BZ_S_INPUT) {
+         progress_in |= copy_input_until_stop ( s );
+         if (s->mode != BZ_M_RUNNING && s->avail_in_expect == 0) {
+            flush_RL ( s );
+            BZ2_compressBlock ( s, (Bool)(s->mode == BZ_M_FINISHING) );
+            s->state = BZ_S_OUTPUT;
+         }
+         else
+         if (s->nblock >= s->nblockMAX) {
+            BZ2_compressBlock ( s, False );
+            s->state = BZ_S_OUTPUT;
+         }
+         else
+         if (s->strm->avail_in == 0) {
+            break;
+         }
+      }
+
+   }
+
+   return progress_in || progress_out;
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzCompress) ( bz_stream *strm, int action )
+{
+   Bool progress;
+   EState* s;
+   if (strm == NULL) return BZ_PARAM_ERROR;
+   s = (EState*)strm->state;
+   if (s == NULL) return BZ_PARAM_ERROR;
+   if (s->strm != strm) return BZ_PARAM_ERROR;
+
+   preswitch:
+   switch (s->mode) {
+
+      case BZ_M_IDLE:
+         return BZ_SEQUENCE_ERROR;
+
+      case BZ_M_RUNNING:
+         if (action == BZ_RUN) {
+            progress = handle_compress ( strm );
+            return progress ? BZ_RUN_OK : BZ_PARAM_ERROR;
+         } 
+         else
+	 if (action == BZ_FLUSH) {
+            s->avail_in_expect = strm->avail_in;
+            s->mode = BZ_M_FLUSHING;
+            goto preswitch;
+         }
+         else
+         if (action == BZ_FINISH) {
+            s->avail_in_expect = strm->avail_in;
+            s->mode = BZ_M_FINISHING;
+            goto preswitch;
+         }
+         else 
+            return BZ_PARAM_ERROR;
+
+      case BZ_M_FLUSHING:
+         if (action != BZ_FLUSH) return BZ_SEQUENCE_ERROR;
+         if (s->avail_in_expect != s->strm->avail_in) 
+            return BZ_SEQUENCE_ERROR;
+         progress = handle_compress ( strm );
+         if (s->avail_in_expect > 0 || !isempty_RL(s) ||
+             s->state_out_pos < s->numZ) return BZ_FLUSH_OK;
+         s->mode = BZ_M_RUNNING;
+         return BZ_RUN_OK;
+
+      case BZ_M_FINISHING:
+         if (action != BZ_FINISH) return BZ_SEQUENCE_ERROR;
+         if (s->avail_in_expect != s->strm->avail_in) 
+            return BZ_SEQUENCE_ERROR;
+         progress = handle_compress ( strm );
+         if (!progress) return BZ_SEQUENCE_ERROR;
+         if (s->avail_in_expect > 0 || !isempty_RL(s) ||
+             s->state_out_pos < s->numZ) return BZ_FINISH_OK;
+         s->mode = BZ_M_IDLE;
+         return BZ_STREAM_END;
+   }
+   return BZ_OK; /*--not reached--*/
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzCompressEnd)  ( bz_stream *strm )
+{
+   EState* s;
+   if (strm == NULL) return BZ_PARAM_ERROR;
+   s = (EState*)strm->state;
+   if (s == NULL) return BZ_PARAM_ERROR;
+   if (s->strm != strm) return BZ_PARAM_ERROR;
+
+   if (s->arr1 != NULL) BZFREE(s->arr1);
+   if (s->arr2 != NULL) BZFREE(s->arr2);
+   if (s->ftab != NULL) BZFREE(s->ftab);
+   BZFREE(strm->state);
+
+   strm->state = NULL;   
+
+   return BZ_OK;
+}
+
+
+/*---------------------------------------------------*/
+/*--- Decompression stuff                         ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzDecompressInit) 
+                     ( bz_stream* strm, 
+                       int        verbosity,
+                       int        small )
+{
+   DState* s;
+
+   if (!bz_config_ok()) return BZ_CONFIG_ERROR;
+
+   if (strm == NULL) return BZ_PARAM_ERROR;
+   if (small != 0 && small != 1) return BZ_PARAM_ERROR;
+   if (verbosity < 0 || verbosity > 4) return BZ_PARAM_ERROR;
+
+   if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc;
+   if (strm->bzfree == NULL) strm->bzfree = default_bzfree;
+
+   s = (DState*)BZALLOC( sizeof(DState) );
+   if (s == NULL) return BZ_MEM_ERROR;
+   s->strm                  = strm;
+   strm->state              = s;
+   s->state                 = BZ_X_MAGIC_1;
+   s->bsLive                = 0;
+   s->bsBuff                = 0;
+   s->calculatedCombinedCRC = 0;
+   strm->total_in_lo32      = 0;
+   strm->total_in_hi32      = 0;
+   strm->total_out_lo32     = 0;
+   strm->total_out_hi32     = 0;
+   s->smallDecompress       = (Bool)small;
+   s->ll4                   = NULL;
+   s->ll16                  = NULL;
+   s->tt                    = NULL;
+   s->currBlockNo           = 0;
+   s->verbosity             = verbosity;
+
+   return BZ_OK;
+}
+
+
+/*---------------------------------------------------*/
+/* Return  True iff data corruption is discovered.
+   Returns False if there is no problem.
+*/
+static
+Bool unRLE_obuf_to_output_FAST ( DState* s )
+{
+   UChar k1;
+
+   if (s->blockRandomised) {
+
+      while (True) {
+         /* try to finish existing run */
+         while (True) {
+            if (s->strm->avail_out == 0) return False;
+            if (s->state_out_len == 0) break;
+            *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
+            BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
+            s->state_out_len--;
+            s->strm->next_out++;
+            s->strm->avail_out--;
+            s->strm->total_out_lo32++;
+            if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
+         }
+
+         /* can a new run be started? */
+         if (s->nblock_used == s->save_nblock+1) return False;
+               
+         /* Only caused by corrupt data stream? */
+         if (s->nblock_used > s->save_nblock+1)
+            return True;
+   
+         s->state_out_len = 1;
+         s->state_out_ch = s->k0;
+         BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; 
+         k1 ^= BZ_RAND_MASK; s->nblock_used++;
+         if (s->nblock_used == s->save_nblock+1) continue;
+         if (k1 != s->k0) { s->k0 = k1; continue; };
+   
+         s->state_out_len = 2;
+         BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; 
+         k1 ^= BZ_RAND_MASK; s->nblock_used++;
+         if (s->nblock_used == s->save_nblock+1) continue;
+         if (k1 != s->k0) { s->k0 = k1; continue; };
+   
+         s->state_out_len = 3;
+         BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; 
+         k1 ^= BZ_RAND_MASK; s->nblock_used++;
+         if (s->nblock_used == s->save_nblock+1) continue;
+         if (k1 != s->k0) { s->k0 = k1; continue; };
+   
+         BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; 
+         k1 ^= BZ_RAND_MASK; s->nblock_used++;
+         s->state_out_len = ((Int32)k1) + 4;
+         BZ_GET_FAST(s->k0); BZ_RAND_UPD_MASK; 
+         s->k0 ^= BZ_RAND_MASK; s->nblock_used++;
+      }
+
+   } else {
+
+      /* restore */
+      UInt32        c_calculatedBlockCRC = s->calculatedBlockCRC;
+      UChar         c_state_out_ch       = s->state_out_ch;
+      Int32         c_state_out_len      = s->state_out_len;
+      Int32         c_nblock_used        = s->nblock_used;
+      Int32         c_k0                 = s->k0;
+      UInt32*       c_tt                 = s->tt;
+      UInt32        c_tPos               = s->tPos;
+      char*         cs_next_out          = s->strm->next_out;
+      unsigned int  cs_avail_out         = s->strm->avail_out;
+      Int32         ro_blockSize100k     = s->blockSize100k;
+      /* end restore */
+
+      UInt32       avail_out_INIT = cs_avail_out;
+      Int32        s_save_nblockPP = s->save_nblock+1;
+      unsigned int total_out_lo32_old;
+
+      while (True) {
+
+         /* try to finish existing run */
+         if (c_state_out_len > 0) {
+            while (True) {
+               if (cs_avail_out == 0) goto return_notr;
+               if (c_state_out_len == 1) break;
+               *( (UChar*)(cs_next_out) ) = c_state_out_ch;
+               BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch );
+               c_state_out_len--;
+               cs_next_out++;
+               cs_avail_out--;
+            }
+            s_state_out_len_eq_one:
+            {
+               if (cs_avail_out == 0) { 
+                  c_state_out_len = 1; goto return_notr;
+               };
+               *( (UChar*)(cs_next_out) ) = c_state_out_ch;
+               BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch );
+               cs_next_out++;
+               cs_avail_out--;
+            }
+         }   
+         /* Only caused by corrupt data stream? */
+         if (c_nblock_used > s_save_nblockPP)
+            return True;
+
+         /* can a new run be started? */
+         if (c_nblock_used == s_save_nblockPP) {
+            c_state_out_len = 0; goto return_notr;
+         };   
+         c_state_out_ch = c_k0;
+         BZ_GET_FAST_C(k1); c_nblock_used++;
+         if (k1 != c_k0) { 
+            c_k0 = k1; goto s_state_out_len_eq_one; 
+         };
+         if (c_nblock_used == s_save_nblockPP) 
+            goto s_state_out_len_eq_one;
+   
+         c_state_out_len = 2;
+         BZ_GET_FAST_C(k1); c_nblock_used++;
+         if (c_nblock_used == s_save_nblockPP) continue;
+         if (k1 != c_k0) { c_k0 = k1; continue; };
+   
+         c_state_out_len = 3;
+         BZ_GET_FAST_C(k1); c_nblock_used++;
+         if (c_nblock_used == s_save_nblockPP) continue;
+         if (k1 != c_k0) { c_k0 = k1; continue; };
+   
+         BZ_GET_FAST_C(k1); c_nblock_used++;
+         c_state_out_len = ((Int32)k1) + 4;
+         BZ_GET_FAST_C(c_k0); c_nblock_used++;
+      }
+
+      return_notr:
+      total_out_lo32_old = s->strm->total_out_lo32;
+      s->strm->total_out_lo32 += (avail_out_INIT - cs_avail_out);
+      if (s->strm->total_out_lo32 < total_out_lo32_old)
+         s->strm->total_out_hi32++;
+
+      /* save */
+      s->calculatedBlockCRC = c_calculatedBlockCRC;
+      s->state_out_ch       = c_state_out_ch;
+      s->state_out_len      = c_state_out_len;
+      s->nblock_used        = c_nblock_used;
+      s->k0                 = c_k0;
+      s->tt                 = c_tt;
+      s->tPos               = c_tPos;
+      s->strm->next_out     = cs_next_out;
+      s->strm->avail_out    = cs_avail_out;
+      /* end save */
+   }
+   return False;
+}
+
+
+
+/*---------------------------------------------------*/
+Int32 BZ2_indexIntoF ( Int32 indx, Int32 *cftab )
+{
+   Int32 nb, na, mid;
+   nb = 0;
+   na = 256;
+   do {
+      mid = (nb + na) >> 1;
+      if (indx >= cftab[mid]) nb = mid; else na = mid;
+   }
+   while (na - nb != 1);
+   return nb;
+}
+
+
+/*---------------------------------------------------*/
+/* Return  True iff data corruption is discovered.
+   Returns False if there is no problem.
+*/
+static
+Bool unRLE_obuf_to_output_SMALL ( DState* s )
+{
+   UChar k1;
+
+   if (s->blockRandomised) {
+
+      while (True) {
+         /* try to finish existing run */
+         while (True) {
+            if (s->strm->avail_out == 0) return False;
+            if (s->state_out_len == 0) break;
+            *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
+            BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
+            s->state_out_len--;
+            s->strm->next_out++;
+            s->strm->avail_out--;
+            s->strm->total_out_lo32++;
+            if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
+         }
+   
+         /* can a new run be started? */
+         if (s->nblock_used == s->save_nblock+1) return False;
+
+         /* Only caused by corrupt data stream? */
+         if (s->nblock_used > s->save_nblock+1)
+            return True;
+   
+         s->state_out_len = 1;
+         s->state_out_ch = s->k0;
+         BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; 
+         k1 ^= BZ_RAND_MASK; s->nblock_used++;
+         if (s->nblock_used == s->save_nblock+1) continue;
+         if (k1 != s->k0) { s->k0 = k1; continue; };
+   
+         s->state_out_len = 2;
+         BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; 
+         k1 ^= BZ_RAND_MASK; s->nblock_used++;
+         if (s->nblock_used == s->save_nblock+1) continue;
+         if (k1 != s->k0) { s->k0 = k1; continue; };
+   
+         s->state_out_len = 3;
+         BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; 
+         k1 ^= BZ_RAND_MASK; s->nblock_used++;
+         if (s->nblock_used == s->save_nblock+1) continue;
+         if (k1 != s->k0) { s->k0 = k1; continue; };
+   
+         BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; 
+         k1 ^= BZ_RAND_MASK; s->nblock_used++;
+         s->state_out_len = ((Int32)k1) + 4;
+         BZ_GET_SMALL(s->k0); BZ_RAND_UPD_MASK; 
+         s->k0 ^= BZ_RAND_MASK; s->nblock_used++;
+      }
+
+   } else {
+
+      while (True) {
+         /* try to finish existing run */
+         while (True) {
+            if (s->strm->avail_out == 0) return False;
+            if (s->state_out_len == 0) break;
+            *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
+            BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
+            s->state_out_len--;
+            s->strm->next_out++;
+            s->strm->avail_out--;
+            s->strm->total_out_lo32++;
+            if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
+         }
+   
+         /* can a new run be started? */
+         if (s->nblock_used == s->save_nblock+1) return False;
+
+         /* Only caused by corrupt data stream? */
+         if (s->nblock_used > s->save_nblock+1)
+            return True;
+   
+         s->state_out_len = 1;
+         s->state_out_ch = s->k0;
+         BZ_GET_SMALL(k1); s->nblock_used++;
+         if (s->nblock_used == s->save_nblock+1) continue;
+         if (k1 != s->k0) { s->k0 = k1; continue; };
+   
+         s->state_out_len = 2;
+         BZ_GET_SMALL(k1); s->nblock_used++;
+         if (s->nblock_used == s->save_nblock+1) continue;
+         if (k1 != s->k0) { s->k0 = k1; continue; };
+   
+         s->state_out_len = 3;
+         BZ_GET_SMALL(k1); s->nblock_used++;
+         if (s->nblock_used == s->save_nblock+1) continue;
+         if (k1 != s->k0) { s->k0 = k1; continue; };
+   
+         BZ_GET_SMALL(k1); s->nblock_used++;
+         s->state_out_len = ((Int32)k1) + 4;
+         BZ_GET_SMALL(s->k0); s->nblock_used++;
+      }
+
+   }
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzDecompress) ( bz_stream *strm )
+{
+   Bool    corrupt;
+   DState* s;
+   if (strm == NULL) return BZ_PARAM_ERROR;
+   s = (DState*)strm->state;
+   if (s == NULL) return BZ_PARAM_ERROR;
+   if (s->strm != strm) return BZ_PARAM_ERROR;
+
+   while (True) {
+      if (s->state == BZ_X_IDLE) return BZ_SEQUENCE_ERROR;
+      if (s->state == BZ_X_OUTPUT) {
+         if (s->smallDecompress)
+            corrupt = unRLE_obuf_to_output_SMALL ( s ); else
+            corrupt = unRLE_obuf_to_output_FAST  ( s );
+         if (corrupt) return BZ_DATA_ERROR;
+         if (s->nblock_used == s->save_nblock+1 && s->state_out_len == 0) {
+            BZ_FINALISE_CRC ( s->calculatedBlockCRC );
+            if (s->verbosity >= 3) 
+               VPrintf2 ( " {0x%08x, 0x%08x}", s->storedBlockCRC, 
+                          s->calculatedBlockCRC );
+            if (s->verbosity >= 2) VPrintf0 ( "]" );
+            if (s->calculatedBlockCRC != s->storedBlockCRC)
+               return BZ_DATA_ERROR;
+            s->calculatedCombinedCRC 
+               = (s->calculatedCombinedCRC << 1) | 
+                    (s->calculatedCombinedCRC >> 31);
+            s->calculatedCombinedCRC ^= s->calculatedBlockCRC;
+            s->state = BZ_X_BLKHDR_1;
+         } else {
+            return BZ_OK;
+         }
+      }
+      if (s->state >= BZ_X_MAGIC_1) {
+         Int32 r = BZ2_decompress ( s );
+         if (r == BZ_STREAM_END) {
+            if (s->verbosity >= 3)
+               VPrintf2 ( "\n    combined CRCs: stored = 0x%08x, computed = 0x%08x", 
+                          s->storedCombinedCRC, s->calculatedCombinedCRC );
+            if (s->calculatedCombinedCRC != s->storedCombinedCRC)
+               return BZ_DATA_ERROR;
+            return r;
+         }
+         if (s->state != BZ_X_OUTPUT) return r;
+      }
+   }
+
+   AssertH ( 0, 6001 );
+
+   return 0;  /*NOTREACHED*/
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzDecompressEnd)  ( bz_stream *strm )
+{
+   DState* s;
+   if (strm == NULL) return BZ_PARAM_ERROR;
+   s = (DState*)strm->state;
+   if (s == NULL) return BZ_PARAM_ERROR;
+   if (s->strm != strm) return BZ_PARAM_ERROR;
+
+   if (s->tt   != NULL) BZFREE(s->tt);
+   if (s->ll16 != NULL) BZFREE(s->ll16);
+   if (s->ll4  != NULL) BZFREE(s->ll4);
+
+   BZFREE(strm->state);
+   strm->state = NULL;
+
+   return BZ_OK;
+}
+
+
+#ifndef BZ_NO_STDIO
+/*---------------------------------------------------*/
+/*--- File I/O stuff                              ---*/
+/*---------------------------------------------------*/
+
+#define BZ_SETERR(eee)                    \
+{                                         \
+   if (bzerror != NULL) *bzerror = eee;   \
+   if (bzf != NULL) bzf->lastErr = eee;   \
+}
+
+typedef 
+   struct {
+      FILE*     handle;
+      Char      buf[BZ_MAX_UNUSED];
+      Int32     bufN;
+      Bool      writing;
+      bz_stream strm;
+      Int32     lastErr;
+      Bool      initialisedOk;
+   }
+   bzFile;
+
+
+/*---------------------------------------------*/
+static Bool myfeof ( FILE* f )
+{
+   Int32 c = fgetc ( f );
+   if (c == EOF) return True;
+   ungetc ( c, f );
+   return False;
+}
+
+
+/*---------------------------------------------------*/
+BZFILE* BZ_API(BZ2_bzWriteOpen) 
+                    ( int*  bzerror,      
+                      FILE* f, 
+                      int   blockSize100k, 
+                      int   verbosity,
+                      int   workFactor )
+{
+   Int32   ret;
+   bzFile* bzf = NULL;
+
+   BZ_SETERR(BZ_OK);
+
+   if (f == NULL ||
+       (blockSize100k < 1 || blockSize100k > 9) ||
+       (workFactor < 0 || workFactor > 250) ||
+       (verbosity < 0 || verbosity > 4))
+      { BZ_SETERR(BZ_PARAM_ERROR); return NULL; };
+
+   if (ferror(f))
+      { BZ_SETERR(BZ_IO_ERROR); return NULL; };
+
+   bzf = (bzFile*)malloc ( sizeof(bzFile) );
+   if (bzf == NULL)
+      { BZ_SETERR(BZ_MEM_ERROR); return NULL; };
+
+   BZ_SETERR(BZ_OK);
+   bzf->initialisedOk = False;
+   bzf->bufN          = 0;
+   bzf->handle        = f;
+   bzf->writing       = True;
+   bzf->strm.bzalloc  = NULL;
+   bzf->strm.bzfree   = NULL;
+   bzf->strm.opaque   = NULL;
+
+   if (workFactor == 0) workFactor = 30;
+   ret = BZ2_bzCompressInit ( &(bzf->strm), blockSize100k, 
+                              verbosity, workFactor );
+   if (ret != BZ_OK)
+      { BZ_SETERR(ret); free(bzf); return NULL; };
+
+   bzf->strm.avail_in = 0;
+   bzf->initialisedOk = True;
+   return bzf;   
+}
+
+
+
+/*---------------------------------------------------*/
+void BZ_API(BZ2_bzWrite)
+             ( int*    bzerror, 
+               BZFILE* b, 
+               void*   buf, 
+               int     len )
+{
+   Int32 n, n2, ret;
+   bzFile* bzf = (bzFile*)b;
+
+   BZ_SETERR(BZ_OK);
+   if (bzf == NULL || buf == NULL || len < 0)
+      { BZ_SETERR(BZ_PARAM_ERROR); return; };
+   if (!(bzf->writing))
+      { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
+   if (ferror(bzf->handle))
+      { BZ_SETERR(BZ_IO_ERROR); return; };
+
+   if (len == 0)
+      { BZ_SETERR(BZ_OK); return; };
+
+   bzf->strm.avail_in = len;
+   bzf->strm.next_in  = (char*)buf;
+
+   while (True) {
+      bzf->strm.avail_out = BZ_MAX_UNUSED;
+      bzf->strm.next_out = bzf->buf;
+      ret = BZ2_bzCompress ( &(bzf->strm), BZ_RUN );
+      if (ret != BZ_RUN_OK)
+         { BZ_SETERR(ret); return; };
+
+      if (bzf->strm.avail_out < BZ_MAX_UNUSED) {
+         n = BZ_MAX_UNUSED - bzf->strm.avail_out;
+         n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), 
+                       n, bzf->handle );
+         if (n != n2 || ferror(bzf->handle))
+            { BZ_SETERR(BZ_IO_ERROR); return; };
+      }
+
+      if (bzf->strm.avail_in == 0)
+         { BZ_SETERR(BZ_OK); return; };
+   }
+}
+
+
+/*---------------------------------------------------*/
+void BZ_API(BZ2_bzWriteClose)
+                  ( int*          bzerror, 
+                    BZFILE*       b, 
+                    int           abandon,
+                    unsigned int* nbytes_in,
+                    unsigned int* nbytes_out )
+{
+   BZ2_bzWriteClose64 ( bzerror, b, abandon, 
+                        nbytes_in, NULL, nbytes_out, NULL );
+}
+
+
+void BZ_API(BZ2_bzWriteClose64)
+                  ( int*          bzerror, 
+                    BZFILE*       b, 
+                    int           abandon,
+                    unsigned int* nbytes_in_lo32,
+                    unsigned int* nbytes_in_hi32,
+                    unsigned int* nbytes_out_lo32,
+                    unsigned int* nbytes_out_hi32 )
+{
+   Int32   n, n2, ret;
+   bzFile* bzf = (bzFile*)b;
+
+   if (bzf == NULL)
+      { BZ_SETERR(BZ_OK); return; };
+   if (!(bzf->writing))
+      { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
+   if (ferror(bzf->handle))
+      { BZ_SETERR(BZ_IO_ERROR); return; };
+
+   if (nbytes_in_lo32 != NULL) *nbytes_in_lo32 = 0;
+   if (nbytes_in_hi32 != NULL) *nbytes_in_hi32 = 0;
+   if (nbytes_out_lo32 != NULL) *nbytes_out_lo32 = 0;
+   if (nbytes_out_hi32 != NULL) *nbytes_out_hi32 = 0;
+
+   if ((!abandon) && bzf->lastErr == BZ_OK) {
+      while (True) {
+         bzf->strm.avail_out = BZ_MAX_UNUSED;
+         bzf->strm.next_out = bzf->buf;
+         ret = BZ2_bzCompress ( &(bzf->strm), BZ_FINISH );
+         if (ret != BZ_FINISH_OK && ret != BZ_STREAM_END)
+            { BZ_SETERR(ret); return; };
+
+         if (bzf->strm.avail_out < BZ_MAX_UNUSED) {
+            n = BZ_MAX_UNUSED - bzf->strm.avail_out;
+            n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), 
+                          n, bzf->handle );
+            if (n != n2 || ferror(bzf->handle))
+               { BZ_SETERR(BZ_IO_ERROR); return; };
+         }
+
+         if (ret == BZ_STREAM_END) break;
+      }
+   }
+
+   if ( !abandon && !ferror ( bzf->handle ) ) {
+      fflush ( bzf->handle );
+      if (ferror(bzf->handle))
+         { BZ_SETERR(BZ_IO_ERROR); return; };
+   }
+
+   if (nbytes_in_lo32 != NULL)
+      *nbytes_in_lo32 = bzf->strm.total_in_lo32;
+   if (nbytes_in_hi32 != NULL)
+      *nbytes_in_hi32 = bzf->strm.total_in_hi32;
+   if (nbytes_out_lo32 != NULL)
+      *nbytes_out_lo32 = bzf->strm.total_out_lo32;
+   if (nbytes_out_hi32 != NULL)
+      *nbytes_out_hi32 = bzf->strm.total_out_hi32;
+
+   BZ_SETERR(BZ_OK);
+   BZ2_bzCompressEnd ( &(bzf->strm) );
+   free ( bzf );
+}
+
+
+/*---------------------------------------------------*/
+BZFILE* BZ_API(BZ2_bzReadOpen) 
+                   ( int*  bzerror, 
+                     FILE* f, 
+                     int   verbosity,
+                     int   small,
+                     void* unused,
+                     int   nUnused )
+{
+   bzFile* bzf = NULL;
+   int     ret;
+
+   BZ_SETERR(BZ_OK);
+
+   if (f == NULL || 
+       (small != 0 && small != 1) ||
+       (verbosity < 0 || verbosity > 4) ||
+       (unused == NULL && nUnused != 0) ||
+       (unused != NULL && (nUnused < 0 || nUnused > BZ_MAX_UNUSED)))
+      { BZ_SETERR(BZ_PARAM_ERROR); return NULL; };
+
+   if (ferror(f))
+      { BZ_SETERR(BZ_IO_ERROR); return NULL; };
+
+   bzf = (bzFile*)malloc ( sizeof(bzFile) );
+   if (bzf == NULL) 
+      { BZ_SETERR(BZ_MEM_ERROR); return NULL; };
+
+   BZ_SETERR(BZ_OK);
+
+   bzf->initialisedOk = False;
+   bzf->handle        = f;
+   bzf->bufN          = 0;
+   bzf->writing       = False;
+   bzf->strm.bzalloc  = NULL;
+   bzf->strm.bzfree   = NULL;
+   bzf->strm.opaque   = NULL;
+   
+   while (nUnused > 0) {
+      bzf->buf[bzf->bufN] = *((UChar*)(unused)); bzf->bufN++;
+      unused = ((void*)( 1 + ((UChar*)(unused))  ));
+      nUnused--;
+   }
+
+   ret = BZ2_bzDecompressInit ( &(bzf->strm), verbosity, small );
+   if (ret != BZ_OK)
+      { BZ_SETERR(ret); free(bzf); return NULL; };
+
+   bzf->strm.avail_in = bzf->bufN;
+   bzf->strm.next_in  = bzf->buf;
+
+   bzf->initialisedOk = True;
+   return bzf;   
+}
+
+
+/*---------------------------------------------------*/
+void BZ_API(BZ2_bzReadClose) ( int *bzerror, BZFILE *b )
+{
+   bzFile* bzf = (bzFile*)b;
+
+   BZ_SETERR(BZ_OK);
+   if (bzf == NULL)
+      { BZ_SETERR(BZ_OK); return; };
+
+   if (bzf->writing)
+      { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
+
+   if (bzf->initialisedOk)
+      (void)BZ2_bzDecompressEnd ( &(bzf->strm) );
+   free ( bzf );
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzRead) 
+           ( int*    bzerror, 
+             BZFILE* b, 
+             void*   buf, 
+             int     len )
+{
+   Int32   n, ret;
+   bzFile* bzf = (bzFile*)b;
+
+   BZ_SETERR(BZ_OK);
+
+   if (bzf == NULL || buf == NULL || len < 0)
+      { BZ_SETERR(BZ_PARAM_ERROR); return 0; };
+
+   if (bzf->writing)
+      { BZ_SETERR(BZ_SEQUENCE_ERROR); return 0; };
+
+   if (len == 0)
+      { BZ_SETERR(BZ_OK); return 0; };
+
+   bzf->strm.avail_out = len;
+   bzf->strm.next_out = (char*)buf;
+
+   while (True) {
+
+      if (ferror(bzf->handle)) 
+         { BZ_SETERR(BZ_IO_ERROR); return 0; };
+
+      if (bzf->strm.avail_in == 0 && !myfeof(bzf->handle)) {
+         n = fread ( bzf->buf, sizeof(UChar), 
+                     BZ_MAX_UNUSED, bzf->handle );
+         if (ferror(bzf->handle))
+            { BZ_SETERR(BZ_IO_ERROR); return 0; };
+         bzf->bufN = n;
+         bzf->strm.avail_in = bzf->bufN;
+         bzf->strm.next_in = bzf->buf;
+      }
+
+      ret = BZ2_bzDecompress ( &(bzf->strm) );
+
+      if (ret != BZ_OK && ret != BZ_STREAM_END)
+         { BZ_SETERR(ret); return 0; };
+
+      if (ret == BZ_OK && myfeof(bzf->handle) && 
+          bzf->strm.avail_in == 0 && bzf->strm.avail_out > 0)
+         { BZ_SETERR(BZ_UNEXPECTED_EOF); return 0; };
+
+      if (ret == BZ_STREAM_END)
+         { BZ_SETERR(BZ_STREAM_END);
+           return len - bzf->strm.avail_out; };
+      if (bzf->strm.avail_out == 0)
+         { BZ_SETERR(BZ_OK); return len; };
+      
+   }
+
+   return 0; /*not reached*/
+}
+
+
+/*---------------------------------------------------*/
+void BZ_API(BZ2_bzReadGetUnused) 
+                     ( int*    bzerror, 
+                       BZFILE* b, 
+                       void**  unused, 
+                       int*    nUnused )
+{
+   bzFile* bzf = (bzFile*)b;
+   if (bzf == NULL)
+      { BZ_SETERR(BZ_PARAM_ERROR); return; };
+   if (bzf->lastErr != BZ_STREAM_END)
+      { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
+   if (unused == NULL || nUnused == NULL)
+      { BZ_SETERR(BZ_PARAM_ERROR); return; };
+
+   BZ_SETERR(BZ_OK);
+   *nUnused = bzf->strm.avail_in;
+   *unused = bzf->strm.next_in;
+}
+#endif
+
+
+/*---------------------------------------------------*/
+/*--- Misc convenience stuff                      ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzBuffToBuffCompress) 
+                         ( char*         dest, 
+                           unsigned int* destLen,
+                           char*         source, 
+                           unsigned int  sourceLen,
+                           int           blockSize100k, 
+                           int           verbosity, 
+                           int           workFactor )
+{
+   bz_stream strm;
+   int ret;
+
+   if (dest == NULL || destLen == NULL || 
+       source == NULL ||
+       blockSize100k < 1 || blockSize100k > 9 ||
+       verbosity < 0 || verbosity > 4 ||
+       workFactor < 0 || workFactor > 250) 
+      return BZ_PARAM_ERROR;
+
+   if (workFactor == 0) workFactor = 30;
+   strm.bzalloc = NULL;
+   strm.bzfree = NULL;
+   strm.opaque = NULL;
+   ret = BZ2_bzCompressInit ( &strm, blockSize100k, 
+                              verbosity, workFactor );
+   if (ret != BZ_OK) return ret;
+
+   strm.next_in = source;
+   strm.next_out = dest;
+   strm.avail_in = sourceLen;
+   strm.avail_out = *destLen;
+
+   ret = BZ2_bzCompress ( &strm, BZ_FINISH );
+   if (ret == BZ_FINISH_OK) goto output_overflow;
+   if (ret != BZ_STREAM_END) goto errhandler;
+
+   /* normal termination */
+   *destLen -= strm.avail_out;   
+   BZ2_bzCompressEnd ( &strm );
+   return BZ_OK;
+
+   output_overflow:
+   BZ2_bzCompressEnd ( &strm );
+   return BZ_OUTBUFF_FULL;
+
+   errhandler:
+   BZ2_bzCompressEnd ( &strm );
+   return ret;
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzBuffToBuffDecompress) 
+                           ( char*         dest, 
+                             unsigned int* destLen,
+                             char*         source, 
+                             unsigned int  sourceLen,
+                             int           small,
+                             int           verbosity )
+{
+   bz_stream strm;
+   int ret;
+
+   if (dest == NULL || destLen == NULL || 
+       source == NULL ||
+       (small != 0 && small != 1) ||
+       verbosity < 0 || verbosity > 4) 
+          return BZ_PARAM_ERROR;
+
+   strm.bzalloc = NULL;
+   strm.bzfree = NULL;
+   strm.opaque = NULL;
+   ret = BZ2_bzDecompressInit ( &strm, verbosity, small );
+   if (ret != BZ_OK) return ret;
+
+   strm.next_in = source;
+   strm.next_out = dest;
+   strm.avail_in = sourceLen;
+   strm.avail_out = *destLen;
+
+   ret = BZ2_bzDecompress ( &strm );
+   if (ret == BZ_OK) goto output_overflow_or_eof;
+   if (ret != BZ_STREAM_END) goto errhandler;
+
+   /* normal termination */
+   *destLen -= strm.avail_out;
+   BZ2_bzDecompressEnd ( &strm );
+   return BZ_OK;
+
+   output_overflow_or_eof:
+   if (strm.avail_out > 0) {
+      BZ2_bzDecompressEnd ( &strm );
+      return BZ_UNEXPECTED_EOF;
+   } else {
+      BZ2_bzDecompressEnd ( &strm );
+      return BZ_OUTBUFF_FULL;
+   };      
+
+   errhandler:
+   BZ2_bzDecompressEnd ( &strm );
+   return ret; 
+}
+
+
+/*---------------------------------------------------*/
+/*--
+   Code contributed by Yoshioka Tsuneo (tsuneo at rr.iij4u.or.jp)
+   to support better zlib compatibility.
+   This code is not _officially_ part of libbzip2 (yet);
+   I haven't tested it, documented it, or considered the
+   threading-safeness of it.
+   If this code breaks, please contact both Yoshioka and me.
+--*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------------*/
+/*--
+   return version like "0.9.5d, 4-Sept-1999".
+--*/
+const char * BZ_API(BZ2_bzlibVersion)(void)
+{
+   return BZ_VERSION;
+}
+
+
+#ifndef BZ_NO_STDIO
+/*---------------------------------------------------*/
+
+#if defined(_WIN32) || defined(OS2) || defined(MSDOS)
+#   include <fcntl.h>
+#   include <io.h>
+#   define SET_BINARY_MODE(file) setmode(fileno(file),O_BINARY)
+#else
+#   define SET_BINARY_MODE(file)
+#endif
+static
+BZFILE * bzopen_or_bzdopen
+               ( const char *path,   /* no use when bzdopen */
+                 int fd,             /* no use when bzdopen */
+                 const char *mode,
+                 int open_mode)      /* bzopen: 0, bzdopen:1 */
+{
+   int    bzerr;
+   char   unused[BZ_MAX_UNUSED];
+   int    blockSize100k = 9;
+   int    writing       = 0;
+   char   mode2[10]     = "";
+   FILE   *fp           = NULL;
+   BZFILE *bzfp         = NULL;
+   int    verbosity     = 0;
+   int    workFactor    = 30;
+   int    smallMode     = 0;
+   int    nUnused       = 0; 
+
+   if (mode == NULL) return NULL;
+   while (*mode) {
+      switch (*mode) {
+      case 'r':
+         writing = 0; break;
+      case 'w':
+         writing = 1; break;
+      case 's':
+         smallMode = 1; break;
+      default:
+         if (isdigit((int)(*mode))) {
+            blockSize100k = *mode-BZ_HDR_0;
+         }
+      }
+      mode++;
+   }
+   strcat(mode2, writing ? "w" : "r" );
+   strcat(mode2,"b");   /* binary mode */
+
+   if (open_mode==0) {
+      if (path==NULL || strcmp(path,"")==0) {
+        fp = (writing ? stdout : stdin);
+        SET_BINARY_MODE(fp);
+      } else {
+        fp = fopen(path,mode2);
+      }
+   } else {
+#ifdef BZ_STRICT_ANSI
+      fp = NULL;
+#else
+      fp = fdopen(fd,mode2);
+#endif
+   }
+   if (fp == NULL) return NULL;
+
+   if (writing) {
+      /* Guard against total chaos and anarchy -- JRS */
+      if (blockSize100k < 1) blockSize100k = 1;
+      if (blockSize100k > 9) blockSize100k = 9; 
+      bzfp = BZ2_bzWriteOpen(&bzerr,fp,blockSize100k,
+                             verbosity,workFactor);
+   } else {
+      bzfp = BZ2_bzReadOpen(&bzerr,fp,verbosity,smallMode,
+                            unused,nUnused);
+   }
+   if (bzfp == NULL) {
+      if (fp != stdin && fp != stdout) fclose(fp);
+      return NULL;
+   }
+   return bzfp;
+}
+
+
+/*---------------------------------------------------*/
+/*--
+   open file for read or write.
+      ex) bzopen("file","w9")
+      case path="" or NULL => use stdin or stdout.
+--*/
+BZFILE * BZ_API(BZ2_bzopen)
+               ( const char *path,
+                 const char *mode )
+{
+   return bzopen_or_bzdopen(path,-1,mode,/*bzopen*/0);
+}
+
+
+/*---------------------------------------------------*/
+BZFILE * BZ_API(BZ2_bzdopen)
+               ( int fd,
+                 const char *mode )
+{
+   return bzopen_or_bzdopen(NULL,fd,mode,/*bzdopen*/1);
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzread) (BZFILE* b, void* buf, int len )
+{
+   int bzerr, nread;
+   if (((bzFile*)b)->lastErr == BZ_STREAM_END) return 0;
+   nread = BZ2_bzRead(&bzerr,b,buf,len);
+   if (bzerr == BZ_OK || bzerr == BZ_STREAM_END) {
+      return nread;
+   } else {
+      return -1;
+   }
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzwrite) (BZFILE* b, void* buf, int len )
+{
+   int bzerr;
+
+   BZ2_bzWrite(&bzerr,b,buf,len);
+   if(bzerr == BZ_OK){
+      return len;
+   }else{
+      return -1;
+   }
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzflush) (BZFILE *b)
+{
+   /* do nothing now... */
+   return 0;
+}
+
+
+/*---------------------------------------------------*/
+void BZ_API(BZ2_bzclose) (BZFILE* b)
+{
+   int bzerr;
+   FILE *fp;
+   
+   if (b==NULL) {return;}
+   fp = ((bzFile *)b)->handle;
+   if(((bzFile*)b)->writing){
+      BZ2_bzWriteClose(&bzerr,b,0,NULL,NULL);
+      if(bzerr != BZ_OK){
+         BZ2_bzWriteClose(NULL,b,1,NULL,NULL);
+      }
+   }else{
+      BZ2_bzReadClose(&bzerr,b);
+   }
+   if(fp!=stdin && fp!=stdout){
+      fclose(fp);
+   }
+}
+
+
+/*---------------------------------------------------*/
+/*--
+   return last error code 
+--*/
+static const char *bzerrorstrings[] = {
+       "OK"
+      ,"SEQUENCE_ERROR"
+      ,"PARAM_ERROR"
+      ,"MEM_ERROR"
+      ,"DATA_ERROR"
+      ,"DATA_ERROR_MAGIC"
+      ,"IO_ERROR"
+      ,"UNEXPECTED_EOF"
+      ,"OUTBUFF_FULL"
+      ,"CONFIG_ERROR"
+      ,"???"   /* for future */
+      ,"???"   /* for future */
+      ,"???"   /* for future */
+      ,"???"   /* for future */
+      ,"???"   /* for future */
+      ,"???"   /* for future */
+};
+
+
+const char * BZ_API(BZ2_bzerror) (BZFILE *b, int *errnum)
+{
+   int err = ((bzFile *)b)->lastErr;
+
+   if(err>0) err = 0;
+   *errnum = err;
+   return bzerrorstrings[err*-1];
+}
+#endif
+
+
+/*-------------------------------------------------------------*/
+/*--- end                                           bzlib.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/examples/graph/fgbzip2/bzlib.h b/examples/graph/fgbzip2/bzlib.h
new file mode 100644
index 0000000..de825ae
--- /dev/null
+++ b/examples/graph/fgbzip2/bzlib.h
@@ -0,0 +1,334 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+/*-------------------------------------------------------------*/
+/*--- Public header file for the library.                   ---*/
+/*---                                               bzlib.h ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+   The original source for this example:
+   This file is part of bzip2/libbzip2, a program and library for
+   lossless, block-sorting data compression.
+
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+   This program, "bzip2", the associated library "libbzip2", and all
+   documentation, are copyright (C) 1996-2010 Julian R Seward.  All
+   rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+   1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+   2. The origin of this software must not be misrepresented; you must 
+   not claim that you wrote the original software.  If you use this 
+   software in a product, an acknowledgment in the product 
+   documentation would be appreciated but is not required.
+
+   3. Altered source versions must be plainly marked as such, and must
+   not be misrepresented as being the original software.
+
+   4. The name of the author may not be used to endorse or promote 
+   products derived from this software without specific prior written 
+   permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+   Julian Seward, jseward at bzip.org
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   ------------------------------------------------------------------ */
+
+
+#ifndef _BZLIB_H
+#define _BZLIB_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define BZ_RUN               0
+#define BZ_FLUSH             1
+#define BZ_FINISH            2
+
+#define BZ_OK                0
+#define BZ_RUN_OK            1
+#define BZ_FLUSH_OK          2
+#define BZ_FINISH_OK         3
+#define BZ_STREAM_END        4
+#define BZ_SEQUENCE_ERROR    (-1)
+#define BZ_PARAM_ERROR       (-2)
+#define BZ_MEM_ERROR         (-3)
+#define BZ_DATA_ERROR        (-4)
+#define BZ_DATA_ERROR_MAGIC  (-5)
+#define BZ_IO_ERROR          (-6)
+#define BZ_UNEXPECTED_EOF    (-7)
+#define BZ_OUTBUFF_FULL      (-8)
+#define BZ_CONFIG_ERROR      (-9)
+
+typedef 
+   struct {
+      char *next_in;
+      unsigned int avail_in;
+      unsigned int total_in_lo32;
+      unsigned int total_in_hi32;
+
+      char *next_out;
+      unsigned int avail_out;
+      unsigned int total_out_lo32;
+      unsigned int total_out_hi32;
+
+      void *state;
+
+      void *(*bzalloc)(void *,int,int);
+      void (*bzfree)(void *,void *);
+      void *opaque;
+   } 
+   bz_stream;
+
+
+#ifndef BZ_IMPORT
+#define BZ_EXPORT
+#endif
+
+#ifndef BZ_NO_STDIO
+/* Need a definitition for FILE */
+#include <stdio.h>
+#endif
+
+#ifdef _WIN32
+#   include <windows.h>
+#   ifdef small
+      /* windows.h define small to char */
+#      undef small
+#   endif
+#   ifdef BZ_EXPORT
+#   define BZ_API(func) WINAPI func
+#   define BZ_EXTERN extern
+#   else
+   /* import windows dll dynamically */
+#   define BZ_API(func) (WINAPI * func)
+#   define BZ_EXTERN
+#   endif
+#else
+#   define BZ_API(func) func
+#   define BZ_EXTERN extern
+#endif
+
+
+/*-- Core (low-level) library functions --*/
+
+BZ_EXTERN int BZ_API(BZ2_bzCompressInit) ( 
+      bz_stream* strm, 
+      int        blockSize100k, 
+      int        verbosity, 
+      int        workFactor 
+   );
+
+BZ_EXTERN int BZ_API(BZ2_bzCompress) ( 
+      bz_stream* strm, 
+      int action 
+   );
+
+BZ_EXTERN int BZ_API(BZ2_bzCompressEnd) ( 
+      bz_stream* strm 
+   );
+
+BZ_EXTERN int BZ_API(BZ2_bzDecompressInit) ( 
+      bz_stream *strm, 
+      int       verbosity, 
+      int       small
+   );
+
+BZ_EXTERN int BZ_API(BZ2_bzDecompress) ( 
+      bz_stream* strm 
+   );
+
+BZ_EXTERN int BZ_API(BZ2_bzDecompressEnd) ( 
+      bz_stream *strm 
+   );
+
+
+
+/*-- High(er) level library functions --*/
+
+#ifndef BZ_NO_STDIO
+#define BZ_MAX_UNUSED 5000
+
+typedef void BZFILE;
+
+BZ_EXTERN BZFILE* BZ_API(BZ2_bzReadOpen) ( 
+      int*  bzerror,   
+      FILE* f, 
+      int   verbosity, 
+      int   small,
+      void* unused,    
+      int   nUnused 
+   );
+
+BZ_EXTERN void BZ_API(BZ2_bzReadClose) ( 
+      int*    bzerror, 
+      BZFILE* b 
+   );
+
+BZ_EXTERN void BZ_API(BZ2_bzReadGetUnused) ( 
+      int*    bzerror, 
+      BZFILE* b, 
+      void**  unused,  
+      int*    nUnused 
+   );
+
+BZ_EXTERN int BZ_API(BZ2_bzRead) ( 
+      int*    bzerror, 
+      BZFILE* b, 
+      void*   buf, 
+      int     len 
+   );
+
+BZ_EXTERN BZFILE* BZ_API(BZ2_bzWriteOpen) ( 
+      int*  bzerror,      
+      FILE* f, 
+      int   blockSize100k, 
+      int   verbosity, 
+      int   workFactor 
+   );
+
+BZ_EXTERN void BZ_API(BZ2_bzWrite) ( 
+      int*    bzerror, 
+      BZFILE* b, 
+      void*   buf, 
+      int     len 
+   );
+
+BZ_EXTERN void BZ_API(BZ2_bzWriteClose) ( 
+      int*          bzerror, 
+      BZFILE*       b, 
+      int           abandon, 
+      unsigned int* nbytes_in, 
+      unsigned int* nbytes_out 
+   );
+
+BZ_EXTERN void BZ_API(BZ2_bzWriteClose64) ( 
+      int*          bzerror, 
+      BZFILE*       b, 
+      int           abandon, 
+      unsigned int* nbytes_in_lo32, 
+      unsigned int* nbytes_in_hi32, 
+      unsigned int* nbytes_out_lo32, 
+      unsigned int* nbytes_out_hi32
+   );
+#endif
+
+
+/*-- Utility functions --*/
+
+BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffCompress) ( 
+      char*         dest, 
+      unsigned int* destLen,
+      char*         source, 
+      unsigned int  sourceLen,
+      int           blockSize100k, 
+      int           verbosity, 
+      int           workFactor 
+   );
+
+BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffDecompress) ( 
+      char*         dest, 
+      unsigned int* destLen,
+      char*         source, 
+      unsigned int  sourceLen,
+      int           small, 
+      int           verbosity 
+   );
+
+
+/*--
+   Code contributed by Yoshioka Tsuneo (tsuneo at rr.iij4u.or.jp)
+   to support better zlib compatibility.
+   This code is not _officially_ part of libbzip2 (yet);
+   I haven't tested it, documented it, or considered the
+   threading-safeness of it.
+   If this code breaks, please contact both Yoshioka and me.
+--*/
+
+BZ_EXTERN const char * BZ_API(BZ2_bzlibVersion) (
+      void
+   );
+
+#ifndef BZ_NO_STDIO
+BZ_EXTERN BZFILE * BZ_API(BZ2_bzopen) (
+      const char *path,
+      const char *mode
+   );
+
+BZ_EXTERN BZFILE * BZ_API(BZ2_bzdopen) (
+      int        fd,
+      const char *mode
+   );
+         
+BZ_EXTERN int BZ_API(BZ2_bzread) (
+      BZFILE* b, 
+      void* buf, 
+      int len 
+   );
+
+BZ_EXTERN int BZ_API(BZ2_bzwrite) (
+      BZFILE* b, 
+      void*   buf, 
+      int     len 
+   );
+
+BZ_EXTERN int BZ_API(BZ2_bzflush) (
+      BZFILE* b
+   );
+
+BZ_EXTERN void BZ_API(BZ2_bzclose) (
+      BZFILE* b
+   );
+
+BZ_EXTERN const char * BZ_API(BZ2_bzerror) (
+      BZFILE *b, 
+      int    *errnum
+   );
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/*-------------------------------------------------------------*/
+/*--- end                                           bzlib.h ---*/
+/*-------------------------------------------------------------*/
diff --git a/examples/graph/fgbzip2/bzlib_private.h b/examples/graph/fgbzip2/bzlib_private.h
new file mode 100644
index 0000000..ae430af
--- /dev/null
+++ b/examples/graph/fgbzip2/bzlib_private.h
@@ -0,0 +1,561 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+/*-------------------------------------------------------------*/
+/*--- Private header file for the library.                  ---*/
+/*---                                       bzlib_private.h ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+   The original source for this example:
+   This file is part of bzip2/libbzip2, a program and library for
+   lossless, block-sorting data compression.
+
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+   This program, "bzip2", the associated library "libbzip2", and all
+   documentation, are copyright (C) 1996-2010 Julian R Seward.  All
+   rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+   1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+   2. The origin of this software must not be misrepresented; you must 
+   not claim that you wrote the original software.  If you use this 
+   software in a product, an acknowledgment in the product 
+   documentation would be appreciated but is not required.
+
+   3. Altered source versions must be plainly marked as such, and must
+   not be misrepresented as being the original software.
+
+   4. The name of the author may not be used to endorse or promote 
+   products derived from this software without specific prior written 
+   permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+   Julian Seward, jseward at bzip.org
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   ------------------------------------------------------------------ */
+
+
+#ifndef _BZLIB_PRIVATE_H
+#define _BZLIB_PRIVATE_H
+
+#include <stdlib.h>
+
+#ifndef BZ_NO_STDIO
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#endif
+
+#include "bzlib.h"
+
+
+
+/*-- General stuff. --*/
+
+#define BZ_VERSION  "1.0.6, 6-Sept-2010"
+
+typedef char            Char;
+typedef unsigned char   Bool;
+typedef unsigned char   UChar;
+typedef int             Int32;
+typedef unsigned int    UInt32;
+typedef short           Int16;
+typedef unsigned short  UInt16;
+
+#define True  ((Bool)1)
+#define False ((Bool)0)
+
+#ifndef __GNUC__
+#define __inline__  /* */
+#endif 
+
+#ifndef BZ_NO_STDIO
+
+extern void BZ2_bz__AssertH__fail ( int errcode );
+#define AssertH(cond,errcode) \
+   { if (!(cond)) BZ2_bz__AssertH__fail ( errcode ); }
+
+#if BZ_DEBUG
+#define AssertD(cond,msg) \
+   { if (!(cond)) {       \
+      fprintf ( stderr,   \
+        "\n\nlibbzip2(debug build): internal error\n\t%s\n", msg );\
+      exit(1); \
+   }}
+#else
+#define AssertD(cond,msg) /* */
+#endif
+
+#define VPrintf0(zf) \
+   fprintf(stderr,zf)
+#define VPrintf1(zf,za1) \
+   fprintf(stderr,zf,za1)
+#define VPrintf2(zf,za1,za2) \
+   fprintf(stderr,zf,za1,za2)
+#define VPrintf3(zf,za1,za2,za3) \
+   fprintf(stderr,zf,za1,za2,za3)
+#define VPrintf4(zf,za1,za2,za3,za4) \
+   fprintf(stderr,zf,za1,za2,za3,za4)
+#define VPrintf5(zf,za1,za2,za3,za4,za5) \
+   fprintf(stderr,zf,za1,za2,za3,za4,za5)
+
+#else
+
+extern void bz_internal_error ( int errcode );
+#define AssertH(cond,errcode) \
+   { if (!(cond)) bz_internal_error ( errcode ); }
+#define AssertD(cond,msg)                do { } while (0)
+#define VPrintf0(zf)                     do { } while (0)
+#define VPrintf1(zf,za1)                 do { } while (0)
+#define VPrintf2(zf,za1,za2)             do { } while (0)
+#define VPrintf3(zf,za1,za2,za3)         do { } while (0)
+#define VPrintf4(zf,za1,za2,za3,za4)     do { } while (0)
+#define VPrintf5(zf,za1,za2,za3,za4,za5) do { } while (0)
+
+#endif
+
+
+#define BZALLOC(nnn) (strm->bzalloc)(strm->opaque,(nnn),1)
+#define BZFREE(ppp)  (strm->bzfree)(strm->opaque,(ppp))
+
+
+/*-- Header bytes. --*/
+
+#define BZ_HDR_B 0x42   /* 'B' */
+#define BZ_HDR_Z 0x5a   /* 'Z' */
+#define BZ_HDR_h 0x68   /* 'h' */
+#define BZ_HDR_0 0x30   /* '0' */
+  
+/*-- Constants for the back end. --*/
+
+#define BZ_MAX_ALPHA_SIZE 258
+#define BZ_MAX_CODE_LEN    23
+
+#define BZ_RUNA 0
+#define BZ_RUNB 1
+
+#define BZ_N_GROUPS 6
+#define BZ_G_SIZE   50
+#define BZ_N_ITERS  4
+
+#define BZ_MAX_SELECTORS (2 + (900000 / BZ_G_SIZE))
+
+
+
+/*-- Stuff for randomising repetitive blocks. --*/
+
+extern Int32 BZ2_rNums[512];
+
+#define BZ_RAND_DECLS                          \
+   Int32 rNToGo;                               \
+   Int32 rTPos                                 \
+
+#define BZ_RAND_INIT_MASK                      \
+   s->rNToGo = 0;                              \
+   s->rTPos  = 0                               \
+
+#define BZ_RAND_MASK ((s->rNToGo == 1) ? 1 : 0)
+
+#define BZ_RAND_UPD_MASK                       \
+   if (s->rNToGo == 0) {                       \
+      s->rNToGo = BZ2_rNums[s->rTPos];         \
+      s->rTPos++;                              \
+      if (s->rTPos == 512) s->rTPos = 0;       \
+   }                                           \
+   s->rNToGo--;
+
+
+
+/*-- Stuff for doing CRCs. --*/
+
+extern UInt32 BZ2_crc32Table[256];
+
+#define BZ_INITIALISE_CRC(crcVar)              \
+{                                              \
+   crcVar = 0xffffffffL;                       \
+}
+
+#define BZ_FINALISE_CRC(crcVar)                \
+{                                              \
+   crcVar = ~(crcVar);                         \
+}
+
+#define BZ_UPDATE_CRC(crcVar,cha)              \
+{                                              \
+   crcVar = (crcVar << 8) ^                    \
+            BZ2_crc32Table[(crcVar >> 24) ^    \
+                           ((UChar)cha)];      \
+}
+
+
+
+/*-- States and modes for compression. --*/
+
+#define BZ_M_IDLE      1
+#define BZ_M_RUNNING   2
+#define BZ_M_FLUSHING  3
+#define BZ_M_FINISHING 4
+
+#define BZ_S_OUTPUT    1
+#define BZ_S_INPUT     2
+
+#define BZ_N_RADIX 2
+#define BZ_N_QSORT 12
+#define BZ_N_SHELL 18
+#define BZ_N_OVERSHOOT (BZ_N_RADIX + BZ_N_QSORT + BZ_N_SHELL + 2)
+
+
+
+
+/*-- Structure holding all the compression-side stuff. --*/
+
+typedef
+   struct {
+      /* pointer back to the struct bz_stream */
+      bz_stream* strm;
+
+      /* mode this stream is in, and whether inputting */
+      /* or outputting data */
+      Int32    mode;
+      Int32    state;
+
+      /* remembers avail_in when flush/finish requested */
+      UInt32   avail_in_expect;
+
+      /* for doing the block sorting */
+      UInt32*  arr1;
+      UInt32*  arr2;
+      UInt32*  ftab;
+      Int32    origPtr;
+
+      /* aliases for arr1 and arr2 */
+      UInt32*  ptr;
+      UChar*   block;
+      UInt16*  mtfv;
+      UChar*   zbits;
+
+      /* for deciding when to use the fallback sorting algorithm */
+      Int32    workFactor;
+
+      /* run-length-encoding of the input */
+      UInt32   state_in_ch;
+      Int32    state_in_len;
+      BZ_RAND_DECLS;
+
+      /* input and output limits and current posns */
+      Int32    nblock;
+      Int32    nblockMAX;
+      Int32    numZ;
+      Int32    state_out_pos;
+
+      /* map of bytes used in block */
+      Int32    nInUse;
+      Bool     inUse[256];
+      UChar    unseqToSeq[256];
+
+      /* the buffer for bit stream creation */
+      UInt32   bsBuff;
+      Int32    bsLive;
+
+      /* block and combined CRCs */
+      UInt32   blockCRC;
+      UInt32   combinedCRC;
+
+      /* misc administratium */
+      Int32    verbosity;
+      Int32    blockNo;
+      Int32    blockSize100k;
+
+      /* stuff for coding the MTF values */
+      Int32    nMTF;
+      Int32    mtfFreq    [BZ_MAX_ALPHA_SIZE];
+      UChar    selector   [BZ_MAX_SELECTORS];
+      UChar    selectorMtf[BZ_MAX_SELECTORS];
+
+      UChar    len     [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+      Int32    code    [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+      Int32    rfreq   [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+      /* second dimension: only 3 needed; 4 makes index calculations faster */
+      UInt32   len_pack[BZ_MAX_ALPHA_SIZE][4];
+
+   }
+   EState;
+
+
+
+/*-- externs for compression. --*/
+
+extern void 
+BZ2_blockSort ( EState* );
+
+extern void 
+BZ2_compressBlock ( EState*, Bool );
+
+extern void 
+BZ2_bsInitWrite ( EState* );
+
+extern void 
+BZ2_hbAssignCodes ( Int32*, UChar*, Int32, Int32, Int32 );
+
+extern void 
+BZ2_hbMakeCodeLengths ( UChar*, Int32*, Int32, Int32 );
+
+
+
+/*-- states for decompression. --*/
+
+#define BZ_X_IDLE        1
+#define BZ_X_OUTPUT      2
+
+#define BZ_X_MAGIC_1     10
+#define BZ_X_MAGIC_2     11
+#define BZ_X_MAGIC_3     12
+#define BZ_X_MAGIC_4     13
+#define BZ_X_BLKHDR_1    14
+#define BZ_X_BLKHDR_2    15
+#define BZ_X_BLKHDR_3    16
+#define BZ_X_BLKHDR_4    17
+#define BZ_X_BLKHDR_5    18
+#define BZ_X_BLKHDR_6    19
+#define BZ_X_BCRC_1      20
+#define BZ_X_BCRC_2      21
+#define BZ_X_BCRC_3      22
+#define BZ_X_BCRC_4      23
+#define BZ_X_RANDBIT     24
+#define BZ_X_ORIGPTR_1   25
+#define BZ_X_ORIGPTR_2   26
+#define BZ_X_ORIGPTR_3   27
+#define BZ_X_MAPPING_1   28
+#define BZ_X_MAPPING_2   29
+#define BZ_X_SELECTOR_1  30
+#define BZ_X_SELECTOR_2  31
+#define BZ_X_SELECTOR_3  32
+#define BZ_X_CODING_1    33
+#define BZ_X_CODING_2    34
+#define BZ_X_CODING_3    35
+#define BZ_X_MTF_1       36
+#define BZ_X_MTF_2       37
+#define BZ_X_MTF_3       38
+#define BZ_X_MTF_4       39
+#define BZ_X_MTF_5       40
+#define BZ_X_MTF_6       41
+#define BZ_X_ENDHDR_2    42
+#define BZ_X_ENDHDR_3    43
+#define BZ_X_ENDHDR_4    44
+#define BZ_X_ENDHDR_5    45
+#define BZ_X_ENDHDR_6    46
+#define BZ_X_CCRC_1      47
+#define BZ_X_CCRC_2      48
+#define BZ_X_CCRC_3      49
+#define BZ_X_CCRC_4      50
+
+
+
+/*-- Constants for the fast MTF decoder. --*/
+
+#define MTFA_SIZE 4096
+#define MTFL_SIZE 16
+
+
+
+/*-- Structure holding all the decompression-side stuff. --*/
+
+typedef
+   struct {
+      /* pointer back to the struct bz_stream */
+      bz_stream* strm;
+
+      /* state indicator for this stream */
+      Int32    state;
+
+      /* for doing the final run-length decoding */
+      UChar    state_out_ch;
+      Int32    state_out_len;
+      Bool     blockRandomised;
+      BZ_RAND_DECLS;
+
+      /* the buffer for bit stream reading */
+      UInt32   bsBuff;
+      Int32    bsLive;
+
+      /* misc administratium */
+      Int32    blockSize100k;
+      Bool     smallDecompress;
+      Int32    currBlockNo;
+      Int32    verbosity;
+
+      /* for undoing the Burrows-Wheeler transform */
+      Int32    origPtr;
+      UInt32   tPos;
+      Int32    k0;
+      Int32    unzftab[256];
+      Int32    nblock_used;
+      Int32    cftab[257];
+      Int32    cftabCopy[257];
+
+      /* for undoing the Burrows-Wheeler transform (FAST) */
+      UInt32   *tt;
+
+      /* for undoing the Burrows-Wheeler transform (SMALL) */
+      UInt16   *ll16;
+      UChar    *ll4;
+
+      /* stored and calculated CRCs */
+      UInt32   storedBlockCRC;
+      UInt32   storedCombinedCRC;
+      UInt32   calculatedBlockCRC;
+      UInt32   calculatedCombinedCRC;
+
+      /* map of bytes used in block */
+      Int32    nInUse;
+      Bool     inUse[256];
+      Bool     inUse16[16];
+      UChar    seqToUnseq[256];
+
+      /* for decoding the MTF values */
+      UChar    mtfa   [MTFA_SIZE];
+      Int32    mtfbase[256 / MTFL_SIZE];
+      UChar    selector   [BZ_MAX_SELECTORS];
+      UChar    selectorMtf[BZ_MAX_SELECTORS];
+      UChar    len  [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+
+      Int32    limit  [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+      Int32    base   [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+      Int32    perm   [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+      Int32    minLens[BZ_N_GROUPS];
+
+      /* save area for scalars in the main decompress code */
+      Int32    save_i;
+      Int32    save_j;
+      Int32    save_t;
+      Int32    save_alphaSize;
+      Int32    save_nGroups;
+      Int32    save_nSelectors;
+      Int32    save_EOB;
+      Int32    save_groupNo;
+      Int32    save_groupPos;
+      Int32    save_nextSym;
+      Int32    save_nblockMAX;
+      Int32    save_nblock;
+      Int32    save_es;
+      Int32    save_N;
+      Int32    save_curr;
+      Int32    save_zt;
+      Int32    save_zn; 
+      Int32    save_zvec;
+      Int32    save_zj;
+      Int32    save_gSel;
+      Int32    save_gMinlen;
+      Int32*   save_gLimit;
+      Int32*   save_gBase;
+      Int32*   save_gPerm;
+
+   }
+   DState;
+
+
+
+/*-- Macros for decompression. --*/
+
+#define BZ_GET_FAST(cccc)                     \
+    /* c_tPos is unsigned, hence test < 0 is pointless. */ \
+    if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \
+    s->tPos = s->tt[s->tPos];                 \
+    cccc = (UChar)(s->tPos & 0xff);           \
+    s->tPos >>= 8;
+
+#define BZ_GET_FAST_C(cccc)                   \
+    /* c_tPos is unsigned, hence test < 0 is pointless. */ \
+    if (c_tPos >= (UInt32)100000 * (UInt32)ro_blockSize100k) return True; \
+    c_tPos = c_tt[c_tPos];                    \
+    cccc = (UChar)(c_tPos & 0xff);            \
+    c_tPos >>= 8;
+
+#define SET_LL4(i,n)                                          \
+   { if (((i) & 0x1) == 0)                                    \
+        s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (n); else    \
+        s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((n) << 4);  \
+   }
+
+#define GET_LL4(i)                             \
+   ((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF)
+
+#define SET_LL(i,n)                          \
+   { s->ll16[i] = (UInt16)(n & 0x0000ffff);  \
+     SET_LL4(i, n >> 16);                    \
+   }
+
+#define GET_LL(i) \
+   (((UInt32)s->ll16[i]) | (GET_LL4(i) << 16))
+
+#define BZ_GET_SMALL(cccc)                            \
+    /* c_tPos is unsigned, hence test < 0 is pointless. */ \
+    if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \
+    cccc = BZ2_indexIntoF ( s->tPos, s->cftab );    \
+    s->tPos = GET_LL(s->tPos);
+
+
+/*-- externs for decompression. --*/
+
+extern Int32 
+BZ2_indexIntoF ( Int32, Int32* );
+
+extern Int32 
+BZ2_decompress ( DState* );
+
+extern void 
+BZ2_hbCreateDecodeTables ( Int32*, Int32*, Int32*, UChar*,
+                           Int32,  Int32, Int32 );
+
+
+#endif
+
+
+/*-- BZ_NO_STDIO seems to make NULL disappear on some platforms. --*/
+
+#ifdef BZ_NO_STDIO
+#ifndef NULL
+#define NULL 0
+#endif
+#endif
+
+
+/*-------------------------------------------------------------*/
+/*--- end                                   bzlib_private.h ---*/
+/*-------------------------------------------------------------*/
diff --git a/examples/graph/fgbzip2/compress.cpp b/examples/graph/fgbzip2/compress.cpp
new file mode 100644
index 0000000..8b125d3
--- /dev/null
+++ b/examples/graph/fgbzip2/compress.cpp
@@ -0,0 +1,724 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+/*-------------------------------------------------------------*/
+/*--- Compression machinery (not incl block sorting)        ---*/
+/*---                                          compress.cpp ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+   The original source for this example:
+   This file is part of bzip2/libbzip2, a program and library for
+   lossless, block-sorting data compression.
+
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+   This program, "bzip2", the associated library "libbzip2", and all
+   documentation, are copyright (C) 1996-2010 Julian R Seward.  All
+   rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+   1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+   2. The origin of this software must not be misrepresented; you must 
+   not claim that you wrote the original software.  If you use this 
+   software in a product, an acknowledgment in the product 
+   documentation would be appreciated but is not required.
+
+   3. Altered source versions must be plainly marked as such, and must
+   not be misrepresented as being the original software.
+
+   4. The name of the author may not be used to endorse or promote 
+   products derived from this software without specific prior written 
+   permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+   Julian Seward, jseward at bzip.org
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   ------------------------------------------------------------------ */
+
+
+/* CHANGES
+    0.9.0    -- original version.
+    0.9.0a/b -- no changes in this file.
+    0.9.0c   -- changed setting of nGroups in sendMTFValues() 
+                so as to do a bit better on small files
+*/
+
+#include "bzlib_private.h"
+
+
+/*---------------------------------------------------*/
+/*--- Bit stream I/O                              ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------------*/
+void BZ2_bsInitWrite ( EState* s )
+{
+   s->bsLive = 0;
+   s->bsBuff = 0;
+}
+
+
+/*---------------------------------------------------*/
+static
+void bsFinishWrite ( EState* s )
+{
+   while (s->bsLive > 0) {
+      s->zbits[s->numZ] = (UChar)(s->bsBuff >> 24);
+      s->numZ++;
+      s->bsBuff <<= 8;
+      s->bsLive -= 8;
+   }
+}
+
+
+/*---------------------------------------------------*/
+#define bsNEEDW(nz)                           \
+{                                             \
+   while (s->bsLive >= 8) {                   \
+      s->zbits[s->numZ]                       \
+         = (UChar)(s->bsBuff >> 24);          \
+      s->numZ++;                              \
+      s->bsBuff <<= 8;                        \
+      s->bsLive -= 8;                         \
+   }                                          \
+}
+
+
+/*---------------------------------------------------*/
+static
+__inline__
+void bsW ( EState* s, Int32 n, UInt32 v )
+{
+   bsNEEDW ( n );
+   s->bsBuff |= (v << (32 - s->bsLive - n));
+   s->bsLive += n;
+}
+
+
+/*---------------------------------------------------*/
+static
+void bsPutUInt32 ( EState* s, UInt32 u )
+{
+   bsW ( s, 8, (u >> 24) & 0xffL );
+   bsW ( s, 8, (u >> 16) & 0xffL );
+   bsW ( s, 8, (u >>  8) & 0xffL );
+   bsW ( s, 8,  u        & 0xffL );
+}
+
+
+/*---------------------------------------------------*/
+static
+void bsPutUChar ( EState* s, UChar c )
+{
+   bsW( s, 8, (UInt32)c );
+}
+
+
+/*---------------------------------------------------*/
+/*--- The back end proper                         ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------------*/
+static
+void makeMaps_e ( EState* s )
+{
+   Int32 i;
+   s->nInUse = 0;
+   for (i = 0; i < 256; i++)
+      if (s->inUse[i]) {
+         s->unseqToSeq[i] = s->nInUse;
+         s->nInUse++;
+      }
+}
+
+
+/*---------------------------------------------------*/
+static
+void generateMTFValues ( EState* s )
+{
+   UChar   yy[256];
+   Int32   i, j;
+   Int32   zPend;
+   Int32   wr;
+   Int32   EOB;
+
+   /* 
+      After sorting (eg, here),
+         s->arr1 [ 0 .. s->nblock-1 ] holds sorted order,
+         and
+         ((UChar*)s->arr2) [ 0 .. s->nblock-1 ] 
+         holds the original block data.
+
+      The first thing to do is generate the MTF values,
+      and put them in
+         ((UInt16*)s->arr1) [ 0 .. s->nblock-1 ].
+      Because there are strictly fewer or equal MTF values
+      than block values, ptr values in this area are overwritten
+      with MTF values only when they are no longer needed.
+
+      The final compressed bitstream is generated into the
+      area starting at
+         (UChar*) (&((UChar*)s->arr2)[s->nblock])
+
+      These storage aliases are set up in bzCompressInit(),
+      except for the last one, which is arranged in 
+      compressBlock().
+   */
+   UInt32* ptr   = s->ptr;
+   UChar* block  = s->block;
+   UInt16* mtfv  = s->mtfv;
+
+   makeMaps_e ( s );
+   EOB = s->nInUse+1;
+
+   for (i = 0; i <= EOB; i++) s->mtfFreq[i] = 0;
+
+   wr = 0;
+   zPend = 0;
+   for (i = 0; i < s->nInUse; i++) yy[i] = (UChar) i;
+
+   for (i = 0; i < s->nblock; i++) {
+      UChar ll_i;
+      AssertD ( wr <= i, "generateMTFValues(1)" );
+      j = ptr[i]-1; if (j < 0) j += s->nblock;
+      ll_i = s->unseqToSeq[block[j]];
+      AssertD ( ll_i < s->nInUse, "generateMTFValues(2a)" );
+
+      if (yy[0] == ll_i) { 
+         zPend++;
+      } else {
+
+         if (zPend > 0) {
+            zPend--;
+            while (True) {
+               if (zPend & 1) {
+                  mtfv[wr] = BZ_RUNB; wr++; 
+                  s->mtfFreq[BZ_RUNB]++; 
+               } else {
+                  mtfv[wr] = BZ_RUNA; wr++; 
+                  s->mtfFreq[BZ_RUNA]++; 
+               }
+               if (zPend < 2) break;
+               zPend = (zPend - 2) / 2;
+            };
+            zPend = 0;
+         }
+         {
+            UChar  rtmp;
+            UChar* ryy_j;
+            UChar  rll_i;
+            rtmp  = yy[1];
+            yy[1] = yy[0];
+            ryy_j = &(yy[1]);
+            rll_i = ll_i;
+            while ( rll_i != rtmp ) {
+               UChar rtmp2;
+               ryy_j++;
+               rtmp2  = rtmp;
+               rtmp   = *ryy_j;
+               *ryy_j = rtmp2;
+            };
+            yy[0] = rtmp;
+            j = ryy_j - &(yy[0]);
+            mtfv[wr] = j+1; wr++; s->mtfFreq[j+1]++;
+         }
+
+      }
+   }
+
+   if (zPend > 0) {
+      zPend--;
+      while (True) {
+         if (zPend & 1) {
+            mtfv[wr] = BZ_RUNB; wr++; 
+            s->mtfFreq[BZ_RUNB]++; 
+         } else {
+            mtfv[wr] = BZ_RUNA; wr++; 
+            s->mtfFreq[BZ_RUNA]++; 
+         }
+         if (zPend < 2) break;
+         zPend = (zPend - 2) / 2;
+      };
+      zPend = 0;
+   }
+
+   mtfv[wr] = EOB; wr++; s->mtfFreq[EOB]++;
+
+   s->nMTF = wr;
+}
+
+
+/*---------------------------------------------------*/
+#define BZ_LESSER_ICOST  0
+#define BZ_GREATER_ICOST 15
+
+static
+void sendMTFValues ( EState* s )
+{
+   Int32 v, t, i, j, gs, ge, totc, bt, bc, iter;
+   Int32 nSelectors, alphaSize, minLen, maxLen, selCtr;
+   Int32 nGroups, nBytes;
+
+   /*--
+   UChar  len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+   is a global since the decoder also needs it.
+
+   Int32  code[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+   Int32  rfreq[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+   are also globals only used in this proc.
+   Made global to keep stack frame size small.
+   --*/
+
+
+   UInt16 cost[BZ_N_GROUPS];
+   Int32  fave[BZ_N_GROUPS];
+
+   UInt16* mtfv = s->mtfv;
+
+   if (s->verbosity >= 3)
+      VPrintf3( "      %d in block, %d after MTF & 1-2 coding, "
+                "%d+2 syms in use\n", 
+                s->nblock, s->nMTF, s->nInUse );
+
+   alphaSize = s->nInUse+2;
+   for (t = 0; t < BZ_N_GROUPS; t++)
+      for (v = 0; v < alphaSize; v++)
+         s->len[t][v] = BZ_GREATER_ICOST;
+
+   /*--- Decide how many coding tables to use ---*/
+   AssertH ( s->nMTF > 0, 3001 );
+   if (s->nMTF < 200)  nGroups = 2; else
+   if (s->nMTF < 600)  nGroups = 3; else
+   if (s->nMTF < 1200) nGroups = 4; else
+   if (s->nMTF < 2400) nGroups = 5; else
+                       nGroups = 6;
+
+   /*--- Generate an initial set of coding tables ---*/
+   { 
+      Int32 nPart, remF, tFreq, aFreq;
+
+      nPart = nGroups;
+      remF  = s->nMTF;
+      gs = 0;
+      while (nPart > 0) {
+         tFreq = remF / nPart;
+         ge = gs-1;
+         aFreq = 0;
+         while (aFreq < tFreq && ge < alphaSize-1) {
+            ge++;
+            aFreq += s->mtfFreq[ge];
+         }
+
+         if (ge > gs 
+             && nPart != nGroups && nPart != 1 
+             && ((nGroups-nPart) % 2 == 1)) {
+            aFreq -= s->mtfFreq[ge];
+            ge--;
+         }
+
+         if (s->verbosity >= 3)
+            VPrintf5( "      initial group %d, [%d .. %d], "
+                      "has %d syms (%4.1f%%)\n",
+                      nPart, gs, ge, aFreq, 
+                      (100.0 * (float)aFreq) / (float)(s->nMTF) );
+ 
+         for (v = 0; v < alphaSize; v++)
+            if (v >= gs && v <= ge) 
+               s->len[nPart-1][v] = BZ_LESSER_ICOST; else
+               s->len[nPart-1][v] = BZ_GREATER_ICOST;
+ 
+         nPart--;
+         gs = ge+1;
+         remF -= aFreq;
+      }
+   }
+
+   /*--- 
+      Iterate up to BZ_N_ITERS times to improve the tables.
+   ---*/
+   for (iter = 0; iter < BZ_N_ITERS; iter++) {
+
+      for (t = 0; t < nGroups; t++) fave[t] = 0;
+
+      for (t = 0; t < nGroups; t++)
+         for (v = 0; v < alphaSize; v++)
+            s->rfreq[t][v] = 0;
+
+      /*---
+        Set up an auxiliary length table which is used to fast-track
+	the common case (nGroups == 6). 
+      ---*/
+      if (nGroups == 6) {
+         for (v = 0; v < alphaSize; v++) {
+            s->len_pack[v][0] = (s->len[1][v] << 16) | s->len[0][v];
+            s->len_pack[v][1] = (s->len[3][v] << 16) | s->len[2][v];
+            s->len_pack[v][2] = (s->len[5][v] << 16) | s->len[4][v];
+	 }
+      }
+
+      nSelectors = 0;
+      totc = 0;
+      gs = 0;
+      while (True) {
+
+         /*--- Set group start & end marks. --*/
+         if (gs >= s->nMTF) break;
+         ge = gs + BZ_G_SIZE - 1; 
+         if (ge >= s->nMTF) ge = s->nMTF-1;
+
+         /*-- 
+            Calculate the cost of this group as coded
+            by each of the coding tables.
+         --*/
+         for (t = 0; t < nGroups; t++) cost[t] = 0;
+
+         if (nGroups == 6 && 50 == ge-gs+1) {
+            /*--- fast track the common case ---*/
+            UInt32 cost01, cost23, cost45;
+            UInt16 icv;
+            cost01 = cost23 = cost45 = 0;
+
+#           define BZ_ITER(nn)                \
+               icv = mtfv[gs+(nn)];           \
+               cost01 += s->len_pack[icv][0]; \
+               cost23 += s->len_pack[icv][1]; \
+               cost45 += s->len_pack[icv][2]; \
+
+            BZ_ITER(0);  BZ_ITER(1);  BZ_ITER(2);  BZ_ITER(3);  BZ_ITER(4);
+            BZ_ITER(5);  BZ_ITER(6);  BZ_ITER(7);  BZ_ITER(8);  BZ_ITER(9);
+            BZ_ITER(10); BZ_ITER(11); BZ_ITER(12); BZ_ITER(13); BZ_ITER(14);
+            BZ_ITER(15); BZ_ITER(16); BZ_ITER(17); BZ_ITER(18); BZ_ITER(19);
+            BZ_ITER(20); BZ_ITER(21); BZ_ITER(22); BZ_ITER(23); BZ_ITER(24);
+            BZ_ITER(25); BZ_ITER(26); BZ_ITER(27); BZ_ITER(28); BZ_ITER(29);
+            BZ_ITER(30); BZ_ITER(31); BZ_ITER(32); BZ_ITER(33); BZ_ITER(34);
+            BZ_ITER(35); BZ_ITER(36); BZ_ITER(37); BZ_ITER(38); BZ_ITER(39);
+            BZ_ITER(40); BZ_ITER(41); BZ_ITER(42); BZ_ITER(43); BZ_ITER(44);
+            BZ_ITER(45); BZ_ITER(46); BZ_ITER(47); BZ_ITER(48); BZ_ITER(49);
+
+#           undef BZ_ITER
+
+            cost[0] = cost01 & 0xffff; cost[1] = cost01 >> 16;
+            cost[2] = cost23 & 0xffff; cost[3] = cost23 >> 16;
+            cost[4] = cost45 & 0xffff; cost[5] = cost45 >> 16;
+
+         } else {
+	    /*--- slow version which correctly handles all situations ---*/
+            for (i = gs; i <= ge; i++) { 
+               UInt16 icv = mtfv[i];
+               for (t = 0; t < nGroups; t++) cost[t] += s->len[t][icv];
+            }
+         }
+ 
+         /*-- 
+            Find the coding table which is best for this group,
+            and record its identity in the selector table.
+         --*/
+         bc = 999999999; bt = -1;
+         for (t = 0; t < nGroups; t++)
+            if (cost[t] < bc) { bc = cost[t]; bt = t; };
+         totc += bc;
+         fave[bt]++;
+         s->selector[nSelectors] = bt;
+         nSelectors++;
+
+         /*-- 
+            Increment the symbol frequencies for the selected table.
+          --*/
+         if (nGroups == 6 && 50 == ge-gs+1) {
+            /*--- fast track the common case ---*/
+
+#           define BZ_ITUR(nn) s->rfreq[bt][ mtfv[gs+(nn)] ]++
+
+            BZ_ITUR(0);  BZ_ITUR(1);  BZ_ITUR(2);  BZ_ITUR(3);  BZ_ITUR(4);
+            BZ_ITUR(5);  BZ_ITUR(6);  BZ_ITUR(7);  BZ_ITUR(8);  BZ_ITUR(9);
+            BZ_ITUR(10); BZ_ITUR(11); BZ_ITUR(12); BZ_ITUR(13); BZ_ITUR(14);
+            BZ_ITUR(15); BZ_ITUR(16); BZ_ITUR(17); BZ_ITUR(18); BZ_ITUR(19);
+            BZ_ITUR(20); BZ_ITUR(21); BZ_ITUR(22); BZ_ITUR(23); BZ_ITUR(24);
+            BZ_ITUR(25); BZ_ITUR(26); BZ_ITUR(27); BZ_ITUR(28); BZ_ITUR(29);
+            BZ_ITUR(30); BZ_ITUR(31); BZ_ITUR(32); BZ_ITUR(33); BZ_ITUR(34);
+            BZ_ITUR(35); BZ_ITUR(36); BZ_ITUR(37); BZ_ITUR(38); BZ_ITUR(39);
+            BZ_ITUR(40); BZ_ITUR(41); BZ_ITUR(42); BZ_ITUR(43); BZ_ITUR(44);
+            BZ_ITUR(45); BZ_ITUR(46); BZ_ITUR(47); BZ_ITUR(48); BZ_ITUR(49);
+
+#           undef BZ_ITUR
+
+         } else {
+	    /*--- slow version which correctly handles all situations ---*/
+            for (i = gs; i <= ge; i++)
+               s->rfreq[bt][ mtfv[i] ]++;
+         }
+
+         gs = ge+1;
+      }
+      if (s->verbosity >= 3) {
+         VPrintf2 ( "      pass %d: size is %d, grp uses are ", 
+                   iter+1, totc/8 );
+         for (t = 0; t < nGroups; t++)
+            VPrintf1 ( "%d ", fave[t] );
+         VPrintf0 ( "\n" );
+      }
+
+      /*--
+        Recompute the tables based on the accumulated frequencies.
+      --*/
+      /* maxLen was changed from 20 to 17 in bzip2-1.0.3.  See 
+         comment in huffman.c for details. */
+      for (t = 0; t < nGroups; t++)
+         BZ2_hbMakeCodeLengths ( &(s->len[t][0]), &(s->rfreq[t][0]), 
+                                 alphaSize, 17 /*20*/ );
+   }
+
+
+   AssertH( nGroups < 8, 3002 );
+   AssertH( nSelectors < 32768 &&
+            nSelectors <= (2 + (900000 / BZ_G_SIZE)),
+            3003 );
+
+
+   /*--- Compute MTF values for the selectors. ---*/
+   {
+      UChar pos[BZ_N_GROUPS], ll_i, tmp2, tmp;
+      for (i = 0; i < nGroups; i++) pos[i] = i;
+      for (i = 0; i < nSelectors; i++) {
+         ll_i = s->selector[i];
+         j = 0;
+         tmp = pos[j];
+         while ( ll_i != tmp ) {
+            j++;
+            tmp2 = tmp;
+            tmp = pos[j];
+            pos[j] = tmp2;
+         };
+         pos[0] = tmp;
+         s->selectorMtf[i] = j;
+      }
+   };
+
+   /*--- Assign actual codes for the tables. --*/
+   for (t = 0; t < nGroups; t++) {
+      minLen = 32;
+      maxLen = 0;
+      for (i = 0; i < alphaSize; i++) {
+         if (s->len[t][i] > maxLen) maxLen = s->len[t][i];
+         if (s->len[t][i] < minLen) minLen = s->len[t][i];
+      }
+      AssertH ( !(maxLen > 17 /*20*/ ), 3004 );
+      AssertH ( !(minLen < 1),  3005 );
+      BZ2_hbAssignCodes ( &(s->code[t][0]), &(s->len[t][0]), 
+                          minLen, maxLen, alphaSize );
+   }
+
+   /*--- Transmit the mapping table. ---*/
+   { 
+      Bool inUse16[16];
+      for (i = 0; i < 16; i++) {
+          inUse16[i] = False;
+          for (j = 0; j < 16; j++)
+             if (s->inUse[i * 16 + j]) inUse16[i] = True;
+      }
+     
+      nBytes = s->numZ;
+      for (i = 0; i < 16; i++)
+         if (inUse16[i]) bsW(s,1,1); else bsW(s,1,0);
+
+      for (i = 0; i < 16; i++)
+         if (inUse16[i])
+            for (j = 0; j < 16; j++) {
+               if (s->inUse[i * 16 + j]) bsW(s,1,1); else bsW(s,1,0);
+            }
+
+      if (s->verbosity >= 3) 
+         VPrintf1( "      bytes: mapping %d, ", s->numZ-nBytes );
+   }
+
+   /*--- Now the selectors. ---*/
+   nBytes = s->numZ;
+   bsW ( s, 3, nGroups );
+   bsW ( s, 15, nSelectors );
+   for (i = 0; i < nSelectors; i++) { 
+      for (j = 0; j < s->selectorMtf[i]; j++) bsW(s,1,1);
+      bsW(s,1,0);
+   }
+   if (s->verbosity >= 3)
+      VPrintf1( "selectors %d, ", s->numZ-nBytes );
+
+   /*--- Now the coding tables. ---*/
+   nBytes = s->numZ;
+
+   for (t = 0; t < nGroups; t++) {
+      Int32 curr = s->len[t][0];
+      bsW ( s, 5, curr );
+      for (i = 0; i < alphaSize; i++) {
+         while (curr < s->len[t][i]) { bsW(s,2,2); curr++; /* 10 */ };
+         while (curr > s->len[t][i]) { bsW(s,2,3); curr--; /* 11 */ };
+         bsW ( s, 1, 0 );
+      }
+   }
+
+   if (s->verbosity >= 3)
+      VPrintf1 ( "code lengths %d, ", s->numZ-nBytes );
+
+   /*--- And finally, the block data proper ---*/
+   nBytes = s->numZ;
+   selCtr = 0;
+   gs = 0;
+   while (True) {
+      if (gs >= s->nMTF) break;
+      ge = gs + BZ_G_SIZE - 1; 
+      if (ge >= s->nMTF) ge = s->nMTF-1;
+      AssertH ( s->selector[selCtr] < nGroups, 3006 );
+
+      if (nGroups == 6 && 50 == ge-gs+1) {
+            /*--- fast track the common case ---*/
+            UInt16 mtfv_i;
+            UChar* s_len_sel_selCtr 
+               = &(s->len[s->selector[selCtr]][0]);
+            Int32* s_code_sel_selCtr
+               = &(s->code[s->selector[selCtr]][0]);
+
+#           define BZ_ITAH(nn)                      \
+               mtfv_i = mtfv[gs+(nn)];              \
+               bsW ( s,                             \
+                     s_len_sel_selCtr[mtfv_i],      \
+                     s_code_sel_selCtr[mtfv_i] )
+
+            BZ_ITAH(0);  BZ_ITAH(1);  BZ_ITAH(2);  BZ_ITAH(3);  BZ_ITAH(4);
+            BZ_ITAH(5);  BZ_ITAH(6);  BZ_ITAH(7);  BZ_ITAH(8);  BZ_ITAH(9);
+            BZ_ITAH(10); BZ_ITAH(11); BZ_ITAH(12); BZ_ITAH(13); BZ_ITAH(14);
+            BZ_ITAH(15); BZ_ITAH(16); BZ_ITAH(17); BZ_ITAH(18); BZ_ITAH(19);
+            BZ_ITAH(20); BZ_ITAH(21); BZ_ITAH(22); BZ_ITAH(23); BZ_ITAH(24);
+            BZ_ITAH(25); BZ_ITAH(26); BZ_ITAH(27); BZ_ITAH(28); BZ_ITAH(29);
+            BZ_ITAH(30); BZ_ITAH(31); BZ_ITAH(32); BZ_ITAH(33); BZ_ITAH(34);
+            BZ_ITAH(35); BZ_ITAH(36); BZ_ITAH(37); BZ_ITAH(38); BZ_ITAH(39);
+            BZ_ITAH(40); BZ_ITAH(41); BZ_ITAH(42); BZ_ITAH(43); BZ_ITAH(44);
+            BZ_ITAH(45); BZ_ITAH(46); BZ_ITAH(47); BZ_ITAH(48); BZ_ITAH(49);
+
+#           undef BZ_ITAH
+
+      } else {
+	 /*--- slow version which correctly handles all situations ---*/
+         for (i = gs; i <= ge; i++) {
+            bsW ( s, 
+                  s->len  [s->selector[selCtr]] [mtfv[i]],
+                  s->code [s->selector[selCtr]] [mtfv[i]] );
+         }
+      }
+
+
+      gs = ge+1;
+      selCtr++;
+   }
+   AssertH( selCtr == nSelectors, 3007 );
+
+   if (s->verbosity >= 3)
+      VPrintf1( "codes %d\n", s->numZ-nBytes );
+}
+
+
+/*---------------------------------------------------*/
+void BZ2_compressBlock ( EState* s, Bool is_last_block )
+{
+   if (s->nblock > 0) {
+
+      BZ_FINALISE_CRC ( s->blockCRC );
+      s->combinedCRC = (s->combinedCRC << 1) | (s->combinedCRC >> 31);
+      s->combinedCRC ^= s->blockCRC;
+      if (s->blockNo > 1) s->numZ = 0;
+
+      if (s->verbosity >= 2)
+         VPrintf4( "    block %d: crc = 0x%08x, "
+                   "combined CRC = 0x%08x, size = %d\n",
+                   s->blockNo, s->blockCRC, s->combinedCRC, s->nblock );
+
+      BZ2_blockSort ( s );
+   }
+
+   s->zbits = (UChar*) (&((UChar*)s->arr2)[s->nblock]);
+
+   /*-- If this is the first block, create the stream header. --*/
+   if (s->blockNo == 1) {
+      BZ2_bsInitWrite ( s );
+      bsPutUChar ( s, BZ_HDR_B );
+      bsPutUChar ( s, BZ_HDR_Z );
+      bsPutUChar ( s, BZ_HDR_h );
+      bsPutUChar ( s, (UChar)(BZ_HDR_0 + s->blockSize100k) );
+   }
+
+   if (s->nblock > 0) {
+
+      bsPutUChar ( s, 0x31 ); bsPutUChar ( s, 0x41 );
+      bsPutUChar ( s, 0x59 ); bsPutUChar ( s, 0x26 );
+      bsPutUChar ( s, 0x53 ); bsPutUChar ( s, 0x59 );
+
+      /*-- Now the block's CRC, so it is in a known place. --*/
+      bsPutUInt32 ( s, s->blockCRC );
+
+      /*-- 
+         Now a single bit indicating (non-)randomisation. 
+         As of version 0.9.5, we use a better sorting algorithm
+         which makes randomisation unnecessary.  So always set
+         the randomised bit to 'no'.  Of course, the decoder
+         still needs to be able to handle randomised blocks
+         so as to maintain backwards compatibility with
+         older versions of bzip2.
+      --*/
+      bsW(s,1,0);
+
+      bsW ( s, 24, s->origPtr );
+      generateMTFValues ( s );
+      sendMTFValues ( s );
+   }
+
+
+   /*-- If this is the last block, add the stream trailer. --*/
+   if (is_last_block) {
+
+      bsPutUChar ( s, 0x17 ); bsPutUChar ( s, 0x72 );
+      bsPutUChar ( s, 0x45 ); bsPutUChar ( s, 0x38 );
+      bsPutUChar ( s, 0x50 ); bsPutUChar ( s, 0x90 );
+      bsPutUInt32 ( s, s->combinedCRC );
+      if (s->verbosity >= 2)
+         VPrintf1( "    final combined CRC = 0x%08x\n   ", s->combinedCRC );
+      bsFinishWrite ( s );
+   }
+}
+
+
+/*-------------------------------------------------------------*/
+/*--- end                                        compress.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/examples/graph/fgbzip2/crctable.cpp b/examples/graph/fgbzip2/crctable.cpp
new file mode 100644
index 0000000..faef501
--- /dev/null
+++ b/examples/graph/fgbzip2/crctable.cpp
@@ -0,0 +1,156 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+/*-------------------------------------------------------------*/
+/*--- Table for doing CRCs                                  ---*/
+/*---                                          crctable.cpp ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+   The original source for this example:
+   This file is part of bzip2/libbzip2, a program and library for
+   lossless, block-sorting data compression.
+
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+   This program, "bzip2", the associated library "libbzip2", and all
+   documentation, are copyright (C) 1996-2010 Julian R Seward.  All
+   rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+   1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+   2. The origin of this software must not be misrepresented; you must 
+   not claim that you wrote the original software.  If you use this 
+   software in a product, an acknowledgment in the product 
+   documentation would be appreciated but is not required.
+
+   3. Altered source versions must be plainly marked as such, and must
+   not be misrepresented as being the original software.
+
+   4. The name of the author may not be used to endorse or promote 
+   products derived from this software without specific prior written 
+   permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+   Julian Seward, jseward at bzip.org
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   ------------------------------------------------------------------ */
+
+
+#include "bzlib_private.h"
+
+/*--
+  I think this is an implementation of the AUTODIN-II,
+  Ethernet & FDDI 32-bit CRC standard.  Vaguely derived
+  from code by Rob Warnock, in Section 51 of the
+  comp.compression FAQ.
+--*/
+
+UInt32 BZ2_crc32Table[256] = {
+
+   /*-- Ugly, innit? --*/
+
+   0x00000000L, 0x04c11db7L, 0x09823b6eL, 0x0d4326d9L,
+   0x130476dcL, 0x17c56b6bL, 0x1a864db2L, 0x1e475005L,
+   0x2608edb8L, 0x22c9f00fL, 0x2f8ad6d6L, 0x2b4bcb61L,
+   0x350c9b64L, 0x31cd86d3L, 0x3c8ea00aL, 0x384fbdbdL,
+   0x4c11db70L, 0x48d0c6c7L, 0x4593e01eL, 0x4152fda9L,
+   0x5f15adacL, 0x5bd4b01bL, 0x569796c2L, 0x52568b75L,
+   0x6a1936c8L, 0x6ed82b7fL, 0x639b0da6L, 0x675a1011L,
+   0x791d4014L, 0x7ddc5da3L, 0x709f7b7aL, 0x745e66cdL,
+   0x9823b6e0L, 0x9ce2ab57L, 0x91a18d8eL, 0x95609039L,
+   0x8b27c03cL, 0x8fe6dd8bL, 0x82a5fb52L, 0x8664e6e5L,
+   0xbe2b5b58L, 0xbaea46efL, 0xb7a96036L, 0xb3687d81L,
+   0xad2f2d84L, 0xa9ee3033L, 0xa4ad16eaL, 0xa06c0b5dL,
+   0xd4326d90L, 0xd0f37027L, 0xddb056feL, 0xd9714b49L,
+   0xc7361b4cL, 0xc3f706fbL, 0xceb42022L, 0xca753d95L,
+   0xf23a8028L, 0xf6fb9d9fL, 0xfbb8bb46L, 0xff79a6f1L,
+   0xe13ef6f4L, 0xe5ffeb43L, 0xe8bccd9aL, 0xec7dd02dL,
+   0x34867077L, 0x30476dc0L, 0x3d044b19L, 0x39c556aeL,
+   0x278206abL, 0x23431b1cL, 0x2e003dc5L, 0x2ac12072L,
+   0x128e9dcfL, 0x164f8078L, 0x1b0ca6a1L, 0x1fcdbb16L,
+   0x018aeb13L, 0x054bf6a4L, 0x0808d07dL, 0x0cc9cdcaL,
+   0x7897ab07L, 0x7c56b6b0L, 0x71159069L, 0x75d48ddeL,
+   0x6b93dddbL, 0x6f52c06cL, 0x6211e6b5L, 0x66d0fb02L,
+   0x5e9f46bfL, 0x5a5e5b08L, 0x571d7dd1L, 0x53dc6066L,
+   0x4d9b3063L, 0x495a2dd4L, 0x44190b0dL, 0x40d816baL,
+   0xaca5c697L, 0xa864db20L, 0xa527fdf9L, 0xa1e6e04eL,
+   0xbfa1b04bL, 0xbb60adfcL, 0xb6238b25L, 0xb2e29692L,
+   0x8aad2b2fL, 0x8e6c3698L, 0x832f1041L, 0x87ee0df6L,
+   0x99a95df3L, 0x9d684044L, 0x902b669dL, 0x94ea7b2aL,
+   0xe0b41de7L, 0xe4750050L, 0xe9362689L, 0xedf73b3eL,
+   0xf3b06b3bL, 0xf771768cL, 0xfa325055L, 0xfef34de2L,
+   0xc6bcf05fL, 0xc27dede8L, 0xcf3ecb31L, 0xcbffd686L,
+   0xd5b88683L, 0xd1799b34L, 0xdc3abdedL, 0xd8fba05aL,
+   0x690ce0eeL, 0x6dcdfd59L, 0x608edb80L, 0x644fc637L,
+   0x7a089632L, 0x7ec98b85L, 0x738aad5cL, 0x774bb0ebL,
+   0x4f040d56L, 0x4bc510e1L, 0x46863638L, 0x42472b8fL,
+   0x5c007b8aL, 0x58c1663dL, 0x558240e4L, 0x51435d53L,
+   0x251d3b9eL, 0x21dc2629L, 0x2c9f00f0L, 0x285e1d47L,
+   0x36194d42L, 0x32d850f5L, 0x3f9b762cL, 0x3b5a6b9bL,
+   0x0315d626L, 0x07d4cb91L, 0x0a97ed48L, 0x0e56f0ffL,
+   0x1011a0faL, 0x14d0bd4dL, 0x19939b94L, 0x1d528623L,
+   0xf12f560eL, 0xf5ee4bb9L, 0xf8ad6d60L, 0xfc6c70d7L,
+   0xe22b20d2L, 0xe6ea3d65L, 0xeba91bbcL, 0xef68060bL,
+   0xd727bbb6L, 0xd3e6a601L, 0xdea580d8L, 0xda649d6fL,
+   0xc423cd6aL, 0xc0e2d0ddL, 0xcda1f604L, 0xc960ebb3L,
+   0xbd3e8d7eL, 0xb9ff90c9L, 0xb4bcb610L, 0xb07daba7L,
+   0xae3afba2L, 0xaafbe615L, 0xa7b8c0ccL, 0xa379dd7bL,
+   0x9b3660c6L, 0x9ff77d71L, 0x92b45ba8L, 0x9675461fL,
+   0x8832161aL, 0x8cf30badL, 0x81b02d74L, 0x857130c3L,
+   0x5d8a9099L, 0x594b8d2eL, 0x5408abf7L, 0x50c9b640L,
+   0x4e8ee645L, 0x4a4ffbf2L, 0x470cdd2bL, 0x43cdc09cL,
+   0x7b827d21L, 0x7f436096L, 0x7200464fL, 0x76c15bf8L,
+   0x68860bfdL, 0x6c47164aL, 0x61043093L, 0x65c52d24L,
+   0x119b4be9L, 0x155a565eL, 0x18197087L, 0x1cd86d30L,
+   0x029f3d35L, 0x065e2082L, 0x0b1d065bL, 0x0fdc1becL,
+   0x3793a651L, 0x3352bbe6L, 0x3e119d3fL, 0x3ad08088L,
+   0x2497d08dL, 0x2056cd3aL, 0x2d15ebe3L, 0x29d4f654L,
+   0xc5a92679L, 0xc1683bceL, 0xcc2b1d17L, 0xc8ea00a0L,
+   0xd6ad50a5L, 0xd26c4d12L, 0xdf2f6bcbL, 0xdbee767cL,
+   0xe3a1cbc1L, 0xe760d676L, 0xea23f0afL, 0xeee2ed18L,
+   0xf0a5bd1dL, 0xf464a0aaL, 0xf9278673L, 0xfde69bc4L,
+   0x89b8fd09L, 0x8d79e0beL, 0x803ac667L, 0x84fbdbd0L,
+   0x9abc8bd5L, 0x9e7d9662L, 0x933eb0bbL, 0x97ffad0cL,
+   0xafb010b1L, 0xab710d06L, 0xa6322bdfL, 0xa2f33668L,
+   0xbcb4666dL, 0xb8757bdaL, 0xb5365d03L, 0xb1f740b4L
+};
+
+
+/*-------------------------------------------------------------*/
+/*--- end                                        crctable.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/examples/graph/fgbzip2/decompress.cpp b/examples/graph/fgbzip2/decompress.cpp
new file mode 100644
index 0000000..a100e61
--- /dev/null
+++ b/examples/graph/fgbzip2/decompress.cpp
@@ -0,0 +1,698 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+/*-------------------------------------------------------------*/
+/*--- Decompression machinery                               ---*/
+/*---                                        decompress.cpp ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+   The original source for this example:
+   This file is part of bzip2/libbzip2, a program and library for
+   lossless, block-sorting data compression.
+
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+   This program, "bzip2", the associated library "libbzip2", and all
+   documentation, are copyright (C) 1996-2010 Julian R Seward.  All
+   rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+   1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+   2. The origin of this software must not be misrepresented; you must 
+   not claim that you wrote the original software.  If you use this 
+   software in a product, an acknowledgment in the product 
+   documentation would be appreciated but is not required.
+
+   3. Altered source versions must be plainly marked as such, and must
+   not be misrepresented as being the original software.
+
+   4. The name of the author may not be used to endorse or promote 
+   products derived from this software without specific prior written 
+   permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+   Julian Seward, jseward at bzip.org
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   ------------------------------------------------------------------ */
+
+
+#include "bzlib_private.h"
+
+
+/*---------------------------------------------------*/
+static
+void makeMaps_d ( DState* s )
+{
+   Int32 i;
+   s->nInUse = 0;
+   for (i = 0; i < 256; i++)
+      if (s->inUse[i]) {
+         s->seqToUnseq[s->nInUse] = i;
+         s->nInUse++;
+      }
+}
+
+
+/*---------------------------------------------------*/
+#define RETURN(rrr)                               \
+   { retVal = rrr; goto save_state_and_return; };
+
+#define GET_BITS(lll,vvv,nnn)                     \
+   case lll: s->state = lll;                      \
+   while (True) {                                 \
+      if (s->bsLive >= nnn) {                     \
+         UInt32 v;                                \
+         v = (s->bsBuff >>                        \
+             (s->bsLive-nnn)) & ((1 << nnn)-1);   \
+         s->bsLive -= nnn;                        \
+         vvv = v;                                 \
+         break;                                   \
+      }                                           \
+      if (s->strm->avail_in == 0) RETURN(BZ_OK);  \
+      s->bsBuff                                   \
+         = (s->bsBuff << 8) |                     \
+           ((UInt32)                              \
+              (*((UChar*)(s->strm->next_in))));   \
+      s->bsLive += 8;                             \
+      s->strm->next_in++;                         \
+      s->strm->avail_in--;                        \
+      s->strm->total_in_lo32++;                   \
+      if (s->strm->total_in_lo32 == 0)            \
+         s->strm->total_in_hi32++;                \
+   }
+
+#define GET_UCHAR(lll,uuu)                        \
+   GET_BITS(lll,uuu,8)
+
+#define GET_BIT(lll,uuu)                          \
+   GET_BITS(lll,uuu,1)
+
+/*---------------------------------------------------*/
+#define GET_MTF_VAL(label1,label2,lval)           \
+{                                                 \
+   if (groupPos == 0) {                           \
+      groupNo++;                                  \
+      if (groupNo >= nSelectors)                  \
+         RETURN(BZ_DATA_ERROR);                   \
+      groupPos = BZ_G_SIZE;                       \
+      gSel = s->selector[groupNo];                \
+      gMinlen = s->minLens[gSel];                 \
+      gLimit = &(s->limit[gSel][0]);              \
+      gPerm = &(s->perm[gSel][0]);                \
+      gBase = &(s->base[gSel][0]);                \
+   }                                              \
+   groupPos--;                                    \
+   zn = gMinlen;                                  \
+   GET_BITS(label1, zvec, zn);                    \
+   while (1) {                                    \
+      if (zn > 20 /* the longest code */)         \
+         RETURN(BZ_DATA_ERROR);                   \
+      if (zvec <= gLimit[zn]) break;              \
+      zn++;                                       \
+      GET_BIT(label2, zj);                        \
+      zvec = (zvec << 1) | zj;                    \
+   };                                             \
+   if (zvec - gBase[zn] < 0                       \
+       || zvec - gBase[zn] >= BZ_MAX_ALPHA_SIZE)  \
+      RETURN(BZ_DATA_ERROR);                      \
+   lval = gPerm[zvec - gBase[zn]];                \
+}
+
+
+/*---------------------------------------------------*/
+Int32 BZ2_decompress ( DState* s )
+{
+   UChar      uc;
+   Int32      retVal;
+   Int32      minLen, maxLen;
+   bz_stream* strm = s->strm;
+
+   /* stuff that needs to be saved/restored */
+   Int32  i;
+   Int32  j;
+   Int32  t;
+   Int32  alphaSize;
+   Int32  nGroups;
+   Int32  nSelectors;
+   Int32  EOB;
+   Int32  groupNo;
+   Int32  groupPos;
+   Int32  nextSym;
+   Int32  nblockMAX;
+   Int32  nblock;
+   Int32  es;
+   Int32  N;
+   Int32  curr;
+   Int32  zt;
+   Int32  zn; 
+   Int32  zvec;
+   Int32  zj;
+   Int32  gSel;
+   Int32  gMinlen;
+   Int32* gLimit;
+   Int32* gBase;
+   Int32* gPerm;
+
+   if (s->state == BZ_X_MAGIC_1) {
+      /*initialise the save area*/
+      s->save_i           = 0;
+      s->save_j           = 0;
+      s->save_t           = 0;
+      s->save_alphaSize   = 0;
+      s->save_nGroups     = 0;
+      s->save_nSelectors  = 0;
+      s->save_EOB         = 0;
+      s->save_groupNo     = 0;
+      s->save_groupPos    = 0;
+      s->save_nextSym     = 0;
+      s->save_nblockMAX   = 0;
+      s->save_nblock      = 0;
+      s->save_es          = 0;
+      s->save_N           = 0;
+      s->save_curr        = 0;
+      s->save_zt          = 0;
+      s->save_zn          = 0;
+      s->save_zvec        = 0;
+      s->save_zj          = 0;
+      s->save_gSel        = 0;
+      s->save_gMinlen     = 0;
+      s->save_gLimit      = NULL;
+      s->save_gBase       = NULL;
+      s->save_gPerm       = NULL;
+   }
+
+   /*restore from the save area*/
+   i           = s->save_i;
+   j           = s->save_j;
+   t           = s->save_t;
+   alphaSize   = s->save_alphaSize;
+   nGroups     = s->save_nGroups;
+   nSelectors  = s->save_nSelectors;
+   EOB         = s->save_EOB;
+   groupNo     = s->save_groupNo;
+   groupPos    = s->save_groupPos;
+   nextSym     = s->save_nextSym;
+   nblockMAX   = s->save_nblockMAX;
+   nblock      = s->save_nblock;
+   es          = s->save_es;
+   N           = s->save_N;
+   curr        = s->save_curr;
+   zt          = s->save_zt;
+   zn          = s->save_zn; 
+   zvec        = s->save_zvec;
+   zj          = s->save_zj;
+   gSel        = s->save_gSel;
+   gMinlen     = s->save_gMinlen;
+   gLimit      = s->save_gLimit;
+   gBase       = s->save_gBase;
+   gPerm       = s->save_gPerm;
+
+   retVal = BZ_OK;
+
+   switch (s->state) {
+
+      GET_UCHAR(BZ_X_MAGIC_1, uc);
+      if (uc != BZ_HDR_B) RETURN(BZ_DATA_ERROR_MAGIC);
+
+      GET_UCHAR(BZ_X_MAGIC_2, uc);
+      if (uc != BZ_HDR_Z) RETURN(BZ_DATA_ERROR_MAGIC);
+
+      GET_UCHAR(BZ_X_MAGIC_3, uc)
+      if (uc != BZ_HDR_h) RETURN(BZ_DATA_ERROR_MAGIC);
+
+      GET_BITS(BZ_X_MAGIC_4, s->blockSize100k, 8)
+      if (s->blockSize100k < (BZ_HDR_0 + 1) || 
+          s->blockSize100k > (BZ_HDR_0 + 9)) RETURN(BZ_DATA_ERROR_MAGIC);
+      s->blockSize100k -= BZ_HDR_0;
+
+      if (s->smallDecompress) {
+         s->ll16 = (UInt16*)BZALLOC( s->blockSize100k * 100000 * sizeof(UInt16) );
+         s->ll4  = (UChar*)BZALLOC( 
+                      ((1 + s->blockSize100k * 100000) >> 1) * sizeof(UChar) 
+                   );
+         if (s->ll16 == NULL || s->ll4 == NULL) RETURN(BZ_MEM_ERROR);
+      } else {
+         s->tt  = (UInt32*)BZALLOC( s->blockSize100k * 100000 * sizeof(Int32) );
+         if (s->tt == NULL) RETURN(BZ_MEM_ERROR);
+      }
+
+      GET_UCHAR(BZ_X_BLKHDR_1, uc);
+
+      if (uc == 0x17) goto endhdr_2;
+      if (uc != 0x31) RETURN(BZ_DATA_ERROR);
+      GET_UCHAR(BZ_X_BLKHDR_2, uc);
+      if (uc != 0x41) RETURN(BZ_DATA_ERROR);
+      GET_UCHAR(BZ_X_BLKHDR_3, uc);
+      if (uc != 0x59) RETURN(BZ_DATA_ERROR);
+      GET_UCHAR(BZ_X_BLKHDR_4, uc);
+      if (uc != 0x26) RETURN(BZ_DATA_ERROR);
+      GET_UCHAR(BZ_X_BLKHDR_5, uc);
+      if (uc != 0x53) RETURN(BZ_DATA_ERROR);
+      GET_UCHAR(BZ_X_BLKHDR_6, uc);
+      if (uc != 0x59) RETURN(BZ_DATA_ERROR);
+
+      s->currBlockNo++;
+      if (s->verbosity >= 2)
+         VPrintf1 ( "\n    [%d: huff+mtf ", s->currBlockNo );
+ 
+      s->storedBlockCRC = 0;
+      GET_UCHAR(BZ_X_BCRC_1, uc);
+      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
+      GET_UCHAR(BZ_X_BCRC_2, uc);
+      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
+      GET_UCHAR(BZ_X_BCRC_3, uc);
+      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
+      GET_UCHAR(BZ_X_BCRC_4, uc);
+      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
+
+      GET_BITS(BZ_X_RANDBIT, s->blockRandomised, 1);
+
+      s->origPtr = 0;
+      GET_UCHAR(BZ_X_ORIGPTR_1, uc);
+      s->origPtr = (s->origPtr << 8) | ((Int32)uc);
+      GET_UCHAR(BZ_X_ORIGPTR_2, uc);
+      s->origPtr = (s->origPtr << 8) | ((Int32)uc);
+      GET_UCHAR(BZ_X_ORIGPTR_3, uc);
+      s->origPtr = (s->origPtr << 8) | ((Int32)uc);
+
+      if (s->origPtr < 0)
+         RETURN(BZ_DATA_ERROR);
+      if (s->origPtr > 10 + 100000*s->blockSize100k) 
+         RETURN(BZ_DATA_ERROR);
+
+      /*--- Receive the mapping table ---*/
+      for (i = 0; i < 16; i++) {
+         GET_BIT(BZ_X_MAPPING_1, uc);
+         if (uc == 1) 
+            s->inUse16[i] = True; else 
+            s->inUse16[i] = False;
+      }
+
+      for (i = 0; i < 256; i++) s->inUse[i] = False;
+
+      for (i = 0; i < 16; i++)
+         if (s->inUse16[i])
+            for (j = 0; j < 16; j++) {
+               GET_BIT(BZ_X_MAPPING_2, uc);
+               if (uc == 1) s->inUse[i * 16 + j] = True;
+            }
+      makeMaps_d ( s );
+      if (s->nInUse == 0) RETURN(BZ_DATA_ERROR);
+      alphaSize = s->nInUse+2;
+
+      /*--- Now the selectors ---*/
+      GET_BITS(BZ_X_SELECTOR_1, nGroups, 3);
+      if (nGroups < 2 || nGroups > 6) RETURN(BZ_DATA_ERROR);
+      GET_BITS(BZ_X_SELECTOR_2, nSelectors, 15);
+      if (nSelectors < 1) RETURN(BZ_DATA_ERROR);
+      for (i = 0; i < nSelectors; i++) {
+         j = 0;
+         while (True) {
+            GET_BIT(BZ_X_SELECTOR_3, uc);
+            if (uc == 0) break;
+            j++;
+            if (j >= nGroups) RETURN(BZ_DATA_ERROR);
+         }
+         s->selectorMtf[i] = j;
+      }
+
+      /*--- Undo the MTF values for the selectors. ---*/
+      {
+         UChar pos[BZ_N_GROUPS], tmp, v;
+         for (v = 0; v < nGroups; v++) pos[v] = v;
+   
+         for (i = 0; i < nSelectors; i++) {
+            v = s->selectorMtf[i];
+            tmp = pos[v];
+            while (v > 0) { pos[v] = pos[v-1]; v--; }
+            pos[0] = tmp;
+            s->selector[i] = tmp;
+         }
+      }
+
+      /*--- Now the coding tables ---*/
+      for (t = 0; t < nGroups; t++) {
+         GET_BITS(BZ_X_CODING_1, curr, 5);
+         for (i = 0; i < alphaSize; i++) {
+            while (True) {
+               if (curr < 1 || curr > 20) RETURN(BZ_DATA_ERROR);
+               GET_BIT(BZ_X_CODING_2, uc);
+               if (uc == 0) break;
+               GET_BIT(BZ_X_CODING_3, uc);
+               if (uc == 0) curr++; else curr--;
+            }
+            s->len[t][i] = curr;
+         }
+      }
+
+      /*--- Create the Huffman decoding tables ---*/
+      for (t = 0; t < nGroups; t++) {
+         minLen = 32;
+         maxLen = 0;
+         for (i = 0; i < alphaSize; i++) {
+            if (s->len[t][i] > maxLen) maxLen = s->len[t][i];
+            if (s->len[t][i] < minLen) minLen = s->len[t][i];
+         }
+         BZ2_hbCreateDecodeTables ( 
+            &(s->limit[t][0]), 
+            &(s->base[t][0]), 
+            &(s->perm[t][0]), 
+            &(s->len[t][0]),
+            minLen, maxLen, alphaSize
+         );
+         s->minLens[t] = minLen;
+      }
+
+      /*--- Now the MTF values ---*/
+
+      EOB      = s->nInUse+1;
+      nblockMAX = 100000 * s->blockSize100k;
+      groupNo  = -1;
+      groupPos = 0;
+
+      for (i = 0; i <= 255; i++) s->unzftab[i] = 0;
+
+      /*-- MTF init --*/
+      {
+         Int32 ii, jj, kk;
+         kk = MTFA_SIZE-1;
+         for (ii = 256 / MTFL_SIZE - 1; ii >= 0; ii--) {
+            for (jj = MTFL_SIZE-1; jj >= 0; jj--) {
+               s->mtfa[kk] = (UChar)(ii * MTFL_SIZE + jj);
+               kk--;
+            }
+            s->mtfbase[ii] = kk + 1;
+         }
+      }
+      /*-- end MTF init --*/
+
+      nblock = 0;
+      GET_MTF_VAL(BZ_X_MTF_1, BZ_X_MTF_2, nextSym);
+
+      while (True) {
+
+         if (nextSym == EOB) break;
+
+         if (nextSym == BZ_RUNA || nextSym == BZ_RUNB) {
+
+            es = -1;
+            N = 1;
+            do {
+               /* Check that N doesn't get too big, so that es doesn't
+                  go negative.  The maximum value that can be
+                  RUNA/RUNB encoded is equal to the block size (post
+                  the initial RLE), viz, 900k, so bounding N at 2
+                  million should guard against overflow without
+                  rejecting any legitimate inputs. */
+               if (N >= 2*1024*1024) RETURN(BZ_DATA_ERROR);
+               if (nextSym == BZ_RUNA) es = es + (0+1) * N; else
+               if (nextSym == BZ_RUNB) es = es + (1+1) * N;
+               N = N * 2;
+               GET_MTF_VAL(BZ_X_MTF_3, BZ_X_MTF_4, nextSym);
+            }
+               while (nextSym == BZ_RUNA || nextSym == BZ_RUNB);
+
+            es++;
+            uc = s->seqToUnseq[ s->mtfa[s->mtfbase[0]] ];
+            s->unzftab[uc] += es;
+
+            if (s->smallDecompress)
+               while (es > 0) {
+                  if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
+                  s->ll16[nblock] = (UInt16)uc;
+                  nblock++;
+                  es--;
+               }
+            else
+               while (es > 0) {
+                  if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
+                  s->tt[nblock] = (UInt32)uc;
+                  nblock++;
+                  es--;
+               };
+
+            continue;
+
+         } else {
+
+            if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
+
+            /*-- uc = MTF ( nextSym-1 ) --*/
+            {
+               Int32 ii, jj, kk, pp, lno, off;
+               UInt32 nn;
+               nn = (UInt32)(nextSym - 1);
+
+               if (nn < MTFL_SIZE) {
+                  /* avoid general-case expense */
+                  pp = s->mtfbase[0];
+                  uc = s->mtfa[pp+nn];
+                  while (nn > 3) {
+                     Int32 z = pp+nn;
+                     s->mtfa[(z)  ] = s->mtfa[(z)-1];
+                     s->mtfa[(z)-1] = s->mtfa[(z)-2];
+                     s->mtfa[(z)-2] = s->mtfa[(z)-3];
+                     s->mtfa[(z)-3] = s->mtfa[(z)-4];
+                     nn -= 4;
+                  }
+                  while (nn > 0) { 
+                     s->mtfa[(pp+nn)] = s->mtfa[(pp+nn)-1]; nn--; 
+                  };
+                  s->mtfa[pp] = uc;
+               } else { 
+                  /* general case */
+                  lno = nn / MTFL_SIZE;
+                  off = nn % MTFL_SIZE;
+                  pp = s->mtfbase[lno] + off;
+                  uc = s->mtfa[pp];
+                  while (pp > s->mtfbase[lno]) { 
+                     s->mtfa[pp] = s->mtfa[pp-1]; pp--; 
+                  };
+                  s->mtfbase[lno]++;
+                  while (lno > 0) {
+                     s->mtfbase[lno]--;
+                     s->mtfa[s->mtfbase[lno]] 
+                        = s->mtfa[s->mtfbase[lno-1] + MTFL_SIZE - 1];
+                     lno--;
+                  }
+                  s->mtfbase[0]--;
+                  s->mtfa[s->mtfbase[0]] = uc;
+                  if (s->mtfbase[0] == 0) {
+                     kk = MTFA_SIZE-1;
+                     for (ii = 256 / MTFL_SIZE-1; ii >= 0; ii--) {
+                        for (jj = MTFL_SIZE-1; jj >= 0; jj--) {
+                           s->mtfa[kk] = s->mtfa[s->mtfbase[ii] + jj];
+                           kk--;
+                        }
+                        s->mtfbase[ii] = kk + 1;
+                     }
+                  }
+               }
+            }
+            /*-- end uc = MTF ( nextSym-1 ) --*/
+
+            s->unzftab[s->seqToUnseq[uc]]++;
+            if (s->smallDecompress)
+               s->ll16[nblock] = (UInt16)(s->seqToUnseq[uc]); else
+               s->tt[nblock]   = (UInt32)(s->seqToUnseq[uc]);
+            nblock++;
+
+            GET_MTF_VAL(BZ_X_MTF_5, BZ_X_MTF_6, nextSym);
+            continue;
+         }
+      }
+
+      /* Now we know what nblock is, we can do a better sanity
+         check on s->origPtr.
+      */
+      if (s->origPtr < 0 || s->origPtr >= nblock)
+         RETURN(BZ_DATA_ERROR);
+
+      /*-- Set up cftab to facilitate generation of T^(-1) --*/
+      /* Check: unzftab entries in range. */
+      for (i = 0; i <= 255; i++) {
+         if (s->unzftab[i] < 0 || s->unzftab[i] > nblock)
+            RETURN(BZ_DATA_ERROR);
+      }
+      /* Actually generate cftab. */
+      s->cftab[0] = 0;
+      for (i = 1; i <= 256; i++) s->cftab[i] = s->unzftab[i-1];
+      for (i = 1; i <= 256; i++) s->cftab[i] += s->cftab[i-1];
+      /* Check: cftab entries in range. */
+      for (i = 0; i <= 256; i++) {
+         if (s->cftab[i] < 0 || s->cftab[i] > nblock) {
+            /* s->cftab[i] can legitimately be == nblock */
+            RETURN(BZ_DATA_ERROR);
+         }
+      }
+      /* Check: cftab entries non-descending. */
+      for (i = 1; i <= 256; i++) {
+         if (s->cftab[i-1] > s->cftab[i]) {
+            RETURN(BZ_DATA_ERROR);
+         }
+      }
+
+      s->state_out_len = 0;
+      s->state_out_ch  = 0;
+      BZ_INITIALISE_CRC ( s->calculatedBlockCRC );
+      s->state = BZ_X_OUTPUT;
+      if (s->verbosity >= 2) VPrintf0 ( "rt+rld" );
+
+      if (s->smallDecompress) {
+
+         /*-- Make a copy of cftab, used in generation of T --*/
+         for (i = 0; i <= 256; i++) s->cftabCopy[i] = s->cftab[i];
+
+         /*-- compute the T vector --*/
+         for (i = 0; i < nblock; i++) {
+            uc = (UChar)(s->ll16[i]);
+            SET_LL(i, s->cftabCopy[uc]);
+            s->cftabCopy[uc]++;
+         }
+
+         /*-- Compute T^(-1) by pointer reversal on T --*/
+         i = s->origPtr;
+         j = GET_LL(i);
+         do {
+            Int32 tmp = GET_LL(j);
+            SET_LL(j, i);
+            i = j;
+            j = tmp;
+         }
+            while (i != s->origPtr);
+
+         s->tPos = s->origPtr;
+         s->nblock_used = 0;
+         if (s->blockRandomised) {
+            BZ_RAND_INIT_MASK;
+            BZ_GET_SMALL(s->k0); s->nblock_used++;
+            BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; 
+         } else {
+            BZ_GET_SMALL(s->k0); s->nblock_used++;
+         }
+
+      } else {
+
+         /*-- compute the T^(-1) vector --*/
+         for (i = 0; i < nblock; i++) {
+            uc = (UChar)(s->tt[i] & 0xff);
+            s->tt[s->cftab[uc]] |= (i << 8);
+            s->cftab[uc]++;
+         }
+
+         s->tPos = s->tt[s->origPtr] >> 8;
+         s->nblock_used = 0;
+         if (s->blockRandomised) {
+            BZ_RAND_INIT_MASK;
+            BZ_GET_FAST(s->k0); s->nblock_used++;
+            BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; 
+         } else {
+            BZ_GET_FAST(s->k0); s->nblock_used++;
+         }
+
+      }
+
+      RETURN(BZ_OK);
+
+
+
+    endhdr_2:
+
+      GET_UCHAR(BZ_X_ENDHDR_2, uc);
+      if (uc != 0x72) RETURN(BZ_DATA_ERROR);
+      GET_UCHAR(BZ_X_ENDHDR_3, uc);
+      if (uc != 0x45) RETURN(BZ_DATA_ERROR);
+      GET_UCHAR(BZ_X_ENDHDR_4, uc);
+      if (uc != 0x38) RETURN(BZ_DATA_ERROR);
+      GET_UCHAR(BZ_X_ENDHDR_5, uc);
+      if (uc != 0x50) RETURN(BZ_DATA_ERROR);
+      GET_UCHAR(BZ_X_ENDHDR_6, uc);
+      if (uc != 0x90) RETURN(BZ_DATA_ERROR);
+
+      s->storedCombinedCRC = 0;
+      GET_UCHAR(BZ_X_CCRC_1, uc);
+      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
+      GET_UCHAR(BZ_X_CCRC_2, uc);
+      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
+      GET_UCHAR(BZ_X_CCRC_3, uc);
+      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
+      GET_UCHAR(BZ_X_CCRC_4, uc);
+      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
+
+      s->state = BZ_X_IDLE;
+      RETURN(BZ_STREAM_END);
+
+      default: AssertH ( False, 4001 );
+   }
+
+   AssertH ( False, 4002 );
+
+   save_state_and_return:
+
+   s->save_i           = i;
+   s->save_j           = j;
+   s->save_t           = t;
+   s->save_alphaSize   = alphaSize;
+   s->save_nGroups     = nGroups;
+   s->save_nSelectors  = nSelectors;
+   s->save_EOB         = EOB;
+   s->save_groupNo     = groupNo;
+   s->save_groupPos    = groupPos;
+   s->save_nextSym     = nextSym;
+   s->save_nblockMAX   = nblockMAX;
+   s->save_nblock      = nblock;
+   s->save_es          = es;
+   s->save_N           = N;
+   s->save_curr        = curr;
+   s->save_zt          = zt;
+   s->save_zn          = zn;
+   s->save_zvec        = zvec;
+   s->save_zj          = zj;
+   s->save_gSel        = gSel;
+   s->save_gMinlen     = gMinlen;
+   s->save_gLimit      = gLimit;
+   s->save_gBase       = gBase;
+   s->save_gPerm       = gPerm;
+
+   return retVal;   
+}
+
+
+/*-------------------------------------------------------------*/
+/*--- end                                      decompress.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/examples/graph/fgbzip2/fgbzip2.cpp b/examples/graph/fgbzip2/fgbzip2.cpp
new file mode 100644
index 0000000..cf1d8ae
--- /dev/null
+++ b/examples/graph/fgbzip2/fgbzip2.cpp
@@ -0,0 +1,501 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+#define TBB_PREVIEW_FLOW_GRAPH_FEATURES 1
+#include "tbb/tbb_config.h"
+#include "../../common/utility/utility.h"
+
+#if __TBB_PREVIEW_ASYNC_MSG && __TBB_CPP11_LAMBDAS_PRESENT
+
+#include <iostream>
+#include <fstream>
+#include <string>
+#include <memory>
+#include <queue>
+
+#include "bzlib.h"
+
+#include "tbb/flow_graph.h"
+#include "tbb/tick_count.h"
+#include "tbb/compat/thread"
+#include "tbb/concurrent_queue.h"
+
+// TODO: change memory allocation/deallocation to be managed in constructor/destructor
+struct Buffer {
+    size_t len;
+    char* b;
+};
+
+struct BufferMsg {
+
+    BufferMsg() {}
+    BufferMsg(Buffer& inputBuffer, Buffer& outputBuffer, size_t seqId, bool isLast = false)
+        : inputBuffer(inputBuffer), outputBuffer(outputBuffer), seqId(seqId), isLast(isLast) {}
+
+    static BufferMsg createBufferMsg(size_t seqId, size_t chunkSize) {
+        Buffer inputBuffer;
+        inputBuffer.b = new char[chunkSize];
+        inputBuffer.len = chunkSize;
+
+        Buffer outputBuffer;
+        size_t compressedChunkSize = chunkSize * 1.01 + 600; // compression overhead
+        outputBuffer.b = new char[compressedChunkSize];
+        outputBuffer.len = compressedChunkSize;
+
+        return BufferMsg(inputBuffer, outputBuffer, seqId);
+    }
+
+    static void destroyBufferMsg(const BufferMsg& destroyMsg) {
+        delete[] destroyMsg.inputBuffer.b;
+        delete[] destroyMsg.outputBuffer.b;
+    }
+
+    void markLast(size_t lastId) {
+        isLast = true;
+        seqId = lastId;
+    }
+
+    size_t seqId;
+    Buffer inputBuffer;
+    Buffer outputBuffer;
+    bool isLast;
+};
+
+class BufferCompressor {
+public:
+
+    BufferCompressor(int blockSizeIn100KB) : m_blockSize(blockSizeIn100KB) {}
+
+    BufferMsg operator()(BufferMsg buffer) const {
+        if (!buffer.isLast) {
+            unsigned int outSize = buffer.outputBuffer.len;
+            BZ2_bzBuffToBuffCompress(buffer.outputBuffer.b, &outSize,
+                buffer.inputBuffer.b, buffer.inputBuffer.len,
+                m_blockSize, 0, 30);
+            buffer.outputBuffer.len = outSize;
+        }
+        return buffer;
+    }
+
+private:
+    int m_blockSize;
+};
+
+class IOOperations {
+public:
+
+    IOOperations(std::ifstream& inputStream, std::ofstream& outputStream, size_t chunkSize)
+        : m_inputStream(inputStream), m_outputStream(outputStream), m_chunkSize(chunkSize), m_chunksRead(0) {}
+
+    void readChunk(Buffer& buffer) {
+        m_inputStream.read(buffer.b, m_chunkSize);
+        buffer.len = static_cast<size_t>(m_inputStream.gcount());
+        m_chunksRead++;
+    }
+
+    void writeChunk(const Buffer& buffer) {
+        m_outputStream.write(buffer.b, buffer.len);
+    }
+
+    size_t chunksRead() const {
+        return m_chunksRead;
+    }
+
+    size_t chunkSize() const {
+        return m_chunkSize;
+    }
+
+    bool hasDataToRead() const {
+        return m_inputStream.is_open() && !m_inputStream.eof();
+    }
+
+private:
+
+    std::ifstream& m_inputStream;
+    std::ofstream& m_outputStream;
+
+    size_t m_chunkSize;
+    size_t m_chunksRead;
+};
+
+//-----------------------------------------------------------------------------------------------------------------------
+//---------------------------------------Compression example based on async_node-----------------------------------------
+//-----------------------------------------------------------------------------------------------------------------------
+
+typedef tbb::flow::async_node< tbb::flow::continue_msg, BufferMsg > async_file_reader_node;
+typedef tbb::flow::async_node< BufferMsg, tbb::flow::continue_msg > async_file_writer_node;
+
+class AsyncNodeActivity {
+public:
+
+    AsyncNodeActivity(IOOperations& io)
+        : m_io(io), m_fileWriterThread(&AsyncNodeActivity::writingLoop, this) {}
+
+    ~AsyncNodeActivity() {
+        m_fileReaderThread.join();
+        m_fileWriterThread.join();
+    }
+
+    void submitRead(async_file_reader_node::gateway_type& gateway) {
+        gateway.reserve_wait();
+        std::thread(&AsyncNodeActivity::readingLoop, this, std::ref(gateway)).swap(m_fileReaderThread);
+    }
+
+    void submitWrite(const BufferMsg& bufferMsg) {
+        m_writeQueue.push(bufferMsg);
+    }
+
+private:
+
+    void readingLoop(async_file_reader_node::gateway_type& gateway) {
+        while (m_io.hasDataToRead()) {
+            BufferMsg bufferMsg = BufferMsg::createBufferMsg(m_io.chunksRead(), m_io.chunkSize());
+            m_io.readChunk(bufferMsg.inputBuffer);
+            gateway.try_put(bufferMsg);
+        }
+        sendLastMessage(gateway);
+        gateway.release_wait();
+    }
+
+    void writingLoop() {
+        BufferMsg buffer;
+        m_writeQueue.pop(buffer);
+        while (!buffer.isLast) {
+            m_io.writeChunk(buffer.outputBuffer);
+            m_writeQueue.pop(buffer);
+        }
+    }
+
+    void sendLastMessage(async_file_reader_node::gateway_type& gateway) {
+        BufferMsg lastMsg;
+        lastMsg.markLast(m_io.chunksRead());
+        gateway.try_put(lastMsg);
+    }
+
+    IOOperations& m_io;
+
+    tbb::concurrent_bounded_queue< BufferMsg > m_writeQueue;
+
+    std::thread m_fileReaderThread;
+    std::thread m_fileWriterThread;
+};
+
+void fgCompressionAsyncNode(IOOperations& io, int blockSizeIn100KB) {
+    tbb::flow::graph g;
+
+    AsyncNodeActivity asyncNodeActivity(io);
+
+    async_file_reader_node file_reader(g, tbb::flow::unlimited, [&asyncNodeActivity](const tbb::flow::continue_msg& msg, async_file_reader_node::gateway_type& gateway) {
+        asyncNodeActivity.submitRead(gateway);
+    });
+
+    tbb::flow::function_node< BufferMsg, BufferMsg > compressor(g, tbb::flow::unlimited, BufferCompressor(blockSizeIn100KB));
+
+    tbb::flow::sequencer_node< BufferMsg > ordering(g, [](const BufferMsg& bufferMsg)->size_t {
+        return bufferMsg.seqId;
+    });
+
+    // The node is serial to preserve the right order of buffers set by the preceding sequencer_node
+    async_file_writer_node output_writer(g, tbb::flow::serial, [&asyncNodeActivity](const BufferMsg& bufferMsg, async_file_writer_node::gateway_type& gateway) {
+        asyncNodeActivity.submitWrite(bufferMsg);
+    });
+
+    make_edge(file_reader, compressor);
+    make_edge(compressor, ordering);
+    make_edge(ordering, output_writer);
+
+    file_reader.try_put(tbb::flow::continue_msg());
+
+    g.wait_for_all();
+}
+
+//-----------------------------------------------------------------------------------------------------------------------
+//------------------------------------------Compression example based on async_msg---------------------------------------
+//-----------------------------------------------------------------------------------------------------------------------
+
+typedef tbb::flow::async_msg< BufferMsg > async_msg_type;
+
+class AsyncMsgActivity {
+public:
+
+    AsyncMsgActivity(tbb::flow::graph& g, IOOperations& io)
+        : m_io(io), m_graph(g), m_fileReaderThread(&AsyncMsgActivity::readingLoop, this),
+          m_fileWriterThread(&AsyncMsgActivity::writingLoop, this)
+    {
+        // Graph synchronization starts here and ends
+        // when the last buffer was written in "writing thread"
+        m_graph.increment_wait_count();
+    }
+
+    ~AsyncMsgActivity() {
+        m_fileReaderThread.join();
+        m_fileWriterThread.join();
+
+        // Lets release resources that async
+        // activity and graph were acquired
+        freeBuffers();
+    }
+
+    async_msg_type submitRead(BufferMsg& bufferMsg) {
+        async_msg_type msg;
+        work_type readWork = { bufferMsg, msg };
+        m_readQueue.push(readWork);
+        return msg;
+    }
+
+    async_msg_type submitWrite(const BufferMsg& bufferMsg) {
+        async_msg_type msg;
+        work_type writeWork = { bufferMsg, msg };
+        m_writeQueue.push(writeWork);
+        return msg;
+    }
+
+private:
+
+    struct work_type {
+        BufferMsg bufferMsg;
+        async_msg_type msg;
+    };
+
+    void readingLoop() {
+        work_type readWork;
+        m_readQueue.pop(readWork);
+
+        // Reading thread waits for buffers to be received
+        // (the graph reuses limitted number of buffers)
+        // and reads the file while there is something to read
+        while (m_io.hasDataToRead()) {
+            readWork.bufferMsg.seqId = m_io.chunksRead();
+            m_io.readChunk(readWork.bufferMsg.inputBuffer);
+            readWork.msg.set(readWork.bufferMsg);
+            m_readQueue.pop(readWork);
+        }
+
+        // Pass message with an end flag to the graph
+        sendLastMessage(readWork);
+    }
+
+    void sendLastMessage(work_type& work) {
+        work.bufferMsg.markLast(m_io.chunksRead());
+        work.msg.set(work.bufferMsg);
+    }
+
+    void writingLoop() {
+        work_type writeWork;
+        m_writeQueue.pop(writeWork);
+
+        // Writing thread writes all buffers that it gets
+        // and reuses them. At the end all reusing buffers
+        // is stored in read queue
+        while (!writeWork.bufferMsg.isLast) {
+            m_io.writeChunk(writeWork.bufferMsg.outputBuffer);
+            writeWork.msg.set(writeWork.bufferMsg);
+            m_writeQueue.pop(writeWork);
+        }
+
+        // Store last message to the reading queue to free resources later
+        writeWork.msg.set(writeWork.bufferMsg);
+
+        // After all buffers have been written
+        // the synchronization ends
+        m_graph.decrement_wait_count();
+    }
+
+    void freeBuffers() {
+        int buffersNumber = m_readQueue.size();
+        for (int i = 0; i < buffersNumber; i++) {
+            work_type workToDelete;
+            m_readQueue.pop(workToDelete);
+            BufferMsg::destroyBufferMsg(workToDelete.bufferMsg);
+        }
+    }
+
+    IOOperations& m_io;
+
+    tbb::flow::graph& m_graph;
+
+    tbb::concurrent_bounded_queue< work_type > m_writeQueue;
+    tbb::concurrent_bounded_queue< work_type > m_readQueue;
+
+    std::thread m_fileReaderThread;
+    std::thread m_fileWriterThread;
+};
+
+void fgCompressionAsyncMsg(IOOperations& io, int blockSizeIn100KB, size_t memoryLimitIn1MB) {
+    // Memory limit sets the number of buffers that can be reused
+    int buffersNumber = memoryLimitIn1MB * 1000 * 1024 / io.chunkSize();
+
+    tbb::flow::graph g;
+
+    AsyncMsgActivity asyncMsgActivity(g, io);
+
+    tbb::flow::function_node< BufferMsg, async_msg_type > file_reader(g, tbb::flow::unlimited, [&asyncMsgActivity](BufferMsg bufferMsg) -> async_msg_type {
+        return asyncMsgActivity.submitRead(bufferMsg);
+    });
+
+    tbb::flow::function_node< BufferMsg, BufferMsg > compressor(g, tbb::flow::unlimited, BufferCompressor(blockSizeIn100KB));
+
+    tbb::flow::sequencer_node< BufferMsg > ordering(g, [](const BufferMsg& bufferMsg) -> size_t {
+        return bufferMsg.seqId;
+    });
+
+    // The node is serial to preserve the right order of buffers set by the preceding sequencer_node
+    tbb::flow::function_node< BufferMsg, async_msg_type > output_writer(g, tbb::flow::serial, [&asyncMsgActivity](const BufferMsg& bufferMsg) -> async_msg_type {
+        return asyncMsgActivity.submitWrite(bufferMsg);
+    });
+
+    make_edge(file_reader, compressor);
+    make_edge(compressor, ordering);
+    make_edge(ordering, output_writer);
+    make_edge(output_writer, file_reader);
+
+    // Creating buffers to be reused in read/compress/write graph loop
+    for (int i = 0; i < buffersNumber; i++) {
+        BufferMsg reuseBufferMsg = BufferMsg::createBufferMsg(0, io.chunkSize());
+        file_reader.try_put(reuseBufferMsg);
+    }
+
+    g.wait_for_all();
+}
+
+//-----------------------------------------------------------------------------------------------------------------------
+//---------------------------------------------Simple compression example------------------------------------------------
+//-----------------------------------------------------------------------------------------------------------------------
+
+void fgCompression(IOOperations& io, int blockSizeIn100KB) {
+    tbb::flow::graph g;
+
+    tbb::flow::source_node< BufferMsg > file_reader(g, [&io](BufferMsg& bufferMsg)->bool {
+        if (io.hasDataToRead()) {
+            bufferMsg = BufferMsg::createBufferMsg(io.chunksRead(), io.chunkSize());
+            io.readChunk(bufferMsg.inputBuffer);
+            return true;
+        }
+        return false;
+    });
+
+    tbb::flow::function_node< BufferMsg, BufferMsg > compressor(g, tbb::flow::unlimited, BufferCompressor(blockSizeIn100KB));
+
+    tbb::flow::sequencer_node< BufferMsg > ordering(g, [](const BufferMsg& buffer)->size_t {
+        return buffer.seqId;
+    });
+
+    tbb::flow::function_node< BufferMsg > output_writer(g, tbb::flow::serial, [&io](const BufferMsg& bufferMsg) {
+        io.writeChunk(bufferMsg.outputBuffer);
+        BufferMsg::destroyBufferMsg(bufferMsg);
+    });
+
+    make_edge(file_reader, compressor);
+    make_edge(compressor, ordering);
+    make_edge(ordering, output_writer);
+
+    g.wait_for_all();
+}
+
+//-----------------------------------------------------------------------------------------------------------------------
+
+bool endsWith(const std::string& str, const std::string& suffix) {
+    return str.find(suffix, str.length() - suffix.length()) != std::string::npos;
+}
+
+//-----------------------------------------------------------------------------------------------------------------------
+
+int main(int argc, char* argv[]) {
+    try {
+        tbb::tick_count mainStartTime = tbb::tick_count::now();
+
+        const std::string archiveExtension = ".bz2";
+        bool verbose = false;
+        std::string asyncType;
+        std::string inputFileName;
+        int blockSizeIn100KB = 1; // block size in 100KB chunks
+        size_t memoryLimitIn1MB = 1; // memory limit for compression in megabytes granularity
+
+        utility::parse_cli_arguments(argc, argv,
+            utility::cli_argument_pack()
+            //"-h" option for displaying help is present implicitly
+            .arg(blockSizeIn100KB, "-b", "\t block size in 100KB chunks, [1 .. 9]")
+            .arg(verbose, "-v", "verbose mode")
+            .arg(memoryLimitIn1MB, "-l", "used memory limit for compression algorithm in 1MB (minimum) granularity")
+            .arg(asyncType, "-a", "name of the used graph async implementation - can be async_node or async_msg")
+            .positional_arg(inputFileName, "filename", "input file name")
+        );
+
+        if (inputFileName.empty()) {
+            throw std::invalid_argument("Input file name is not specified. Try 'fgbzip2 -h' for more information.");
+        }
+
+        if (blockSizeIn100KB < 1 || blockSizeIn100KB > 9) {
+            throw std::invalid_argument("Incorrect block size. Try 'fgbzip2 -h' for more information.");
+        }
+
+        if (memoryLimitIn1MB < 1) {
+            throw std::invalid_argument("Incorrect memory limit size. Try 'fgbzip2 -h' for more information.");
+        }
+
+        if (verbose) std::cout << "Input file name: " << inputFileName << std::endl;
+        if (endsWith(inputFileName, archiveExtension)) {
+            throw std::invalid_argument("Input file already have " + archiveExtension + " extension.");
+        }
+
+        std::ifstream inputStream(inputFileName.c_str(), std::ios::in | std::ios::binary);
+        if (!inputStream.is_open()) {
+            throw std::invalid_argument("Cannot open " + inputFileName + " file.");
+        }
+
+        std::string outputFileName(inputFileName + archiveExtension);
+
+        std::ofstream outputStream(outputFileName.c_str(), std::ios::out | std::ios::binary | std::ios::trunc);
+        if (!outputStream.is_open()) {
+            throw std::invalid_argument("Cannot open " + outputFileName + " file.");
+        }
+
+        // General interface to work with I/O buffers operations
+        size_t chunkSize = blockSizeIn100KB * 100 * 1024;
+        IOOperations io(inputStream, outputStream, chunkSize);
+
+        if (asyncType.empty()) {
+            if (verbose) std::cout << "Running flow graph based compression algorithm." << std::endl;
+            fgCompression(io, blockSizeIn100KB);
+        } else if (asyncType == "async_node") {
+            if (verbose) std::cout << "Running flow graph based compression algorithm with async_node based asynchronious IO operations." << std::endl;
+            fgCompressionAsyncNode(io, blockSizeIn100KB);
+        } else if (asyncType == "async_msg") {
+            if (verbose) std::cout << "Running flow graph based compression algorithm with async_msg based asynchronious IO operations. Using limited memory: " << memoryLimitIn1MB << "MB." << std::endl;
+            fgCompressionAsyncMsg(io, blockSizeIn100KB, memoryLimitIn1MB);
+        }
+
+        inputStream.close();
+        outputStream.close();
+
+        utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds());
+
+        return 0;
+    } catch (std::exception& e) {
+        std::cerr << "Error occurred. Error text is : \"" << e.what() << "\"\n";
+        return -1;
+    }
+}
+#else
+int main() {
+    utility::report_skipped();
+    return 0;
+}
+#endif /* __TBB_PREVIEW_ASYNC_NODE && __TBB_CPP11_LAMBDAS_PRESENT */
diff --git a/examples/graph/fgbzip2/huffman.cpp b/examples/graph/fgbzip2/huffman.cpp
new file mode 100644
index 0000000..b17a559
--- /dev/null
+++ b/examples/graph/fgbzip2/huffman.cpp
@@ -0,0 +1,257 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+/*-------------------------------------------------------------*/
+/*--- Huffman coding low-level stuff                        ---*/
+/*---                                           huffman.cpp ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+   The original source for this example:
+   This file is part of bzip2/libbzip2, a program and library for
+   lossless, block-sorting data compression.
+
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+   This program, "bzip2", the associated library "libbzip2", and all
+   documentation, are copyright (C) 1996-2010 Julian R Seward.  All
+   rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+   1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+   2. The origin of this software must not be misrepresented; you must 
+   not claim that you wrote the original software.  If you use this 
+   software in a product, an acknowledgment in the product 
+   documentation would be appreciated but is not required.
+
+   3. Altered source versions must be plainly marked as such, and must
+   not be misrepresented as being the original software.
+
+   4. The name of the author may not be used to endorse or promote 
+   products derived from this software without specific prior written 
+   permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+   Julian Seward, jseward at bzip.org
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   ------------------------------------------------------------------ */
+
+
+#include "bzlib_private.h"
+
+/*---------------------------------------------------*/
+#define WEIGHTOF(zz0)  ((zz0) & 0xffffff00)
+#define DEPTHOF(zz1)   ((zz1) & 0x000000ff)
+#define MYMAX(zz2,zz3) ((zz2) > (zz3) ? (zz2) : (zz3))
+
+#define ADDWEIGHTS(zw1,zw2)                           \
+   (WEIGHTOF(zw1)+WEIGHTOF(zw2)) |                    \
+   (1 + MYMAX(DEPTHOF(zw1),DEPTHOF(zw2)))
+
+#define UPHEAP(z)                                     \
+{                                                     \
+   Int32 zz, tmp;                                     \
+   zz = z; tmp = heap[zz];                            \
+   while (weight[tmp] < weight[heap[zz >> 1]]) {      \
+      heap[zz] = heap[zz >> 1];                       \
+      zz >>= 1;                                       \
+   }                                                  \
+   heap[zz] = tmp;                                    \
+}
+
+#define DOWNHEAP(z)                                   \
+{                                                     \
+   Int32 zz, yy, tmp;                                 \
+   zz = z; tmp = heap[zz];                            \
+   while (True) {                                     \
+      yy = zz << 1;                                   \
+      if (yy > nHeap) break;                          \
+      if (yy < nHeap &&                               \
+          weight[heap[yy+1]] < weight[heap[yy]])      \
+         yy++;                                        \
+      if (weight[tmp] < weight[heap[yy]]) break;      \
+      heap[zz] = heap[yy];                            \
+      zz = yy;                                        \
+   }                                                  \
+   heap[zz] = tmp;                                    \
+}
+
+
+/*---------------------------------------------------*/
+void BZ2_hbMakeCodeLengths ( UChar *len, 
+                             Int32 *freq,
+                             Int32 alphaSize,
+                             Int32 maxLen )
+{
+   /*--
+      Nodes and heap entries run from 1.  Entry 0
+      for both the heap and nodes is a sentinel.
+   --*/
+   Int32 nNodes, nHeap, n1, n2, i, j, k;
+   Bool  tooLong;
+
+   Int32 heap   [ BZ_MAX_ALPHA_SIZE + 2 ];
+   Int32 weight [ BZ_MAX_ALPHA_SIZE * 2 ];
+   Int32 parent [ BZ_MAX_ALPHA_SIZE * 2 ]; 
+
+   for (i = 0; i < alphaSize; i++)
+      weight[i+1] = (freq[i] == 0 ? 1 : freq[i]) << 8;
+
+   while (True) {
+
+      nNodes = alphaSize;
+      nHeap = 0;
+
+      heap[0] = 0;
+      weight[0] = 0;
+      parent[0] = -2;
+
+      for (i = 1; i <= alphaSize; i++) {
+         parent[i] = -1;
+         nHeap++;
+         heap[nHeap] = i;
+         UPHEAP(nHeap);
+      }
+
+      AssertH( nHeap < (BZ_MAX_ALPHA_SIZE+2), 2001 );
+   
+      while (nHeap > 1) {
+         n1 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1);
+         n2 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1);
+         nNodes++;
+         parent[n1] = parent[n2] = nNodes;
+         weight[nNodes] = ADDWEIGHTS(weight[n1], weight[n2]);
+         parent[nNodes] = -1;
+         nHeap++;
+         heap[nHeap] = nNodes;
+         UPHEAP(nHeap);
+      }
+
+      AssertH( nNodes < (BZ_MAX_ALPHA_SIZE * 2), 2002 );
+
+      tooLong = False;
+      for (i = 1; i <= alphaSize; i++) {
+         j = 0;
+         k = i;
+         while (parent[k] >= 0) { k = parent[k]; j++; }
+         len[i-1] = j;
+         if (j > maxLen) tooLong = True;
+      }
+      
+      if (! tooLong) break;
+
+      /* 17 Oct 04: keep-going condition for the following loop used
+         to be 'i < alphaSize', which missed the last element,
+         theoretically leading to the possibility of the compressor
+         looping.  However, this count-scaling step is only needed if
+         one of the generated Huffman code words is longer than
+         maxLen, which up to and including version 1.0.2 was 20 bits,
+         which is extremely unlikely.  In version 1.0.3 maxLen was
+         changed to 17 bits, which has minimal effect on compression
+         ratio, but does mean this scaling step is used from time to
+         time, enough to verify that it works.
+
+         This means that bzip2-1.0.3 and later will only produce
+         Huffman codes with a maximum length of 17 bits.  However, in
+         order to preserve backwards compatibility with bitstreams
+         produced by versions pre-1.0.3, the decompressor must still
+         handle lengths of up to 20. */
+
+      for (i = 1; i <= alphaSize; i++) {
+         j = weight[i] >> 8;
+         j = 1 + (j / 2);
+         weight[i] = j << 8;
+      }
+   }
+}
+
+
+/*---------------------------------------------------*/
+void BZ2_hbAssignCodes ( Int32 *code,
+                         UChar *length,
+                         Int32 minLen,
+                         Int32 maxLen,
+                         Int32 alphaSize )
+{
+   Int32 n, vec, i;
+
+   vec = 0;
+   for (n = minLen; n <= maxLen; n++) {
+      for (i = 0; i < alphaSize; i++)
+         if (length[i] == n) { code[i] = vec; vec++; };
+      vec <<= 1;
+   }
+}
+
+
+/*---------------------------------------------------*/
+void BZ2_hbCreateDecodeTables ( Int32 *limit,
+                                Int32 *base,
+                                Int32 *perm,
+                                UChar *length,
+                                Int32 minLen,
+                                Int32 maxLen,
+                                Int32 alphaSize )
+{
+   Int32 pp, i, j, vec;
+
+   pp = 0;
+   for (i = minLen; i <= maxLen; i++)
+      for (j = 0; j < alphaSize; j++)
+         if (length[j] == i) { perm[pp] = j; pp++; };
+
+   for (i = 0; i < BZ_MAX_CODE_LEN; i++) base[i] = 0;
+   for (i = 0; i < alphaSize; i++) base[length[i]+1]++;
+
+   for (i = 1; i < BZ_MAX_CODE_LEN; i++) base[i] += base[i-1];
+
+   for (i = 0; i < BZ_MAX_CODE_LEN; i++) limit[i] = 0;
+   vec = 0;
+
+   for (i = minLen; i <= maxLen; i++) {
+      vec += (base[i+1] - base[i]);
+      limit[i] = vec-1;
+      vec <<= 1;
+   }
+   for (i = minLen + 1; i <= maxLen; i++)
+      base[i] = ((limit[i-1] + 1) << 1) - base[i];
+}
+
+
+/*-------------------------------------------------------------*/
+/*--- end                                         huffman.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/examples/graph/fgbzip2/msvs/fgbzip2.sln b/examples/graph/fgbzip2/msvs/fgbzip2.sln
new file mode 100644
index 0000000..dd19394
--- /dev/null
+++ b/examples/graph/fgbzip2/msvs/fgbzip2.sln
@@ -0,0 +1,26 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fgbzip2", "fgbzip2.vcxproj", "{C931C7A2-074E-4150-9E7A-39A03250411E}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.ActiveCfg = Debug|Win32
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.Build.0 = Debug|Win32
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.ActiveCfg = Debug|x64
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.Build.0 = Debug|x64
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.ActiveCfg = Release|Win32
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.Build.0 = Release|Win32
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.ActiveCfg = Release|x64
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/graph/fgbzip2/msvs/fgbzip2.vcxproj b/examples/graph/fgbzip2/msvs/fgbzip2.vcxproj
new file mode 100644
index 0000000..53ae60b
--- /dev/null
+++ b/examples/graph/fgbzip2/msvs/fgbzip2.vcxproj
@@ -0,0 +1,216 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>fgbzip2</ProjectName>
+    <ProjectGuid>{C931C7A2-074E-4150-9E7A-39A03250411E}</ProjectGuid>
+    <RootNamespace>fgbzip2</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>TBB_PREVIEW_FLOW_GRAPH_NODES;WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <Cpp0xSupport>true</Cpp0xSupport>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>TBB_PREVIEW_FLOW_GRAPH_NODES;WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <Cpp0xSupport>true</Cpp0xSupport>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>REM call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>TBB_PREVIEW_FLOW_GRAPH_NODES;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <Cpp0xSupport>true</Cpp0xSupport>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>TBB_PREVIEW_FLOW_GRAPH_NODES;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <Cpp0xSupport>true</Cpp0xSupport>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\blocksort.cpp" />
+    <ClCompile Include="..\bzlib.cpp" />
+    <ClCompile Include="..\compress.cpp" />
+    <ClCompile Include="..\crctable.cpp" />
+    <ClCompile Include="..\decompress.cpp" />
+    <ClCompile Include="..\fgbzip2.cpp" />
+    <ClCompile Include="..\huffman.cpp" />
+    <ClCompile Include="..\randtable.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\readme.html" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\bzlib.h" />
+    <ClInclude Include="..\bzlib_private.h" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/examples/graph/fgbzip2/randtable.cpp b/examples/graph/fgbzip2/randtable.cpp
new file mode 100644
index 0000000..f50e342
--- /dev/null
+++ b/examples/graph/fgbzip2/randtable.cpp
@@ -0,0 +1,136 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+/*-------------------------------------------------------------*/
+/*--- Table for randomising repetitive blocks               ---*/
+/*---                                         randtable.cpp ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+   The original source for this example:
+   This file is part of bzip2/libbzip2, a program and library for
+   lossless, block-sorting data compression.
+
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+   This program, "bzip2", the associated library "libbzip2", and all
+   documentation, are copyright (C) 1996-2010 Julian R Seward.  All
+   rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+   1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+   2. The origin of this software must not be misrepresented; you must 
+   not claim that you wrote the original software.  If you use this 
+   software in a product, an acknowledgment in the product 
+   documentation would be appreciated but is not required.
+
+   3. Altered source versions must be plainly marked as such, and must
+   not be misrepresented as being the original software.
+
+   4. The name of the author may not be used to endorse or promote 
+   products derived from this software without specific prior written 
+   permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+   Julian Seward, jseward at bzip.org
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   ------------------------------------------------------------------ */
+
+
+#include "bzlib_private.h"
+
+
+/*---------------------------------------------*/
+Int32 BZ2_rNums[512] = { 
+   619, 720, 127, 481, 931, 816, 813, 233, 566, 247, 
+   985, 724, 205, 454, 863, 491, 741, 242, 949, 214, 
+   733, 859, 335, 708, 621, 574, 73, 654, 730, 472, 
+   419, 436, 278, 496, 867, 210, 399, 680, 480, 51, 
+   878, 465, 811, 169, 869, 675, 611, 697, 867, 561, 
+   862, 687, 507, 283, 482, 129, 807, 591, 733, 623, 
+   150, 238, 59, 379, 684, 877, 625, 169, 643, 105, 
+   170, 607, 520, 932, 727, 476, 693, 425, 174, 647, 
+   73, 122, 335, 530, 442, 853, 695, 249, 445, 515, 
+   909, 545, 703, 919, 874, 474, 882, 500, 594, 612, 
+   641, 801, 220, 162, 819, 984, 589, 513, 495, 799, 
+   161, 604, 958, 533, 221, 400, 386, 867, 600, 782, 
+   382, 596, 414, 171, 516, 375, 682, 485, 911, 276, 
+   98, 553, 163, 354, 666, 933, 424, 341, 533, 870, 
+   227, 730, 475, 186, 263, 647, 537, 686, 600, 224, 
+   469, 68, 770, 919, 190, 373, 294, 822, 808, 206, 
+   184, 943, 795, 384, 383, 461, 404, 758, 839, 887, 
+   715, 67, 618, 276, 204, 918, 873, 777, 604, 560, 
+   951, 160, 578, 722, 79, 804, 96, 409, 713, 940, 
+   652, 934, 970, 447, 318, 353, 859, 672, 112, 785, 
+   645, 863, 803, 350, 139, 93, 354, 99, 820, 908, 
+   609, 772, 154, 274, 580, 184, 79, 626, 630, 742, 
+   653, 282, 762, 623, 680, 81, 927, 626, 789, 125, 
+   411, 521, 938, 300, 821, 78, 343, 175, 128, 250, 
+   170, 774, 972, 275, 999, 639, 495, 78, 352, 126, 
+   857, 956, 358, 619, 580, 124, 737, 594, 701, 612, 
+   669, 112, 134, 694, 363, 992, 809, 743, 168, 974, 
+   944, 375, 748, 52, 600, 747, 642, 182, 862, 81, 
+   344, 805, 988, 739, 511, 655, 814, 334, 249, 515, 
+   897, 955, 664, 981, 649, 113, 974, 459, 893, 228, 
+   433, 837, 553, 268, 926, 240, 102, 654, 459, 51, 
+   686, 754, 806, 760, 493, 403, 415, 394, 687, 700, 
+   946, 670, 656, 610, 738, 392, 760, 799, 887, 653, 
+   978, 321, 576, 617, 626, 502, 894, 679, 243, 440, 
+   680, 879, 194, 572, 640, 724, 926, 56, 204, 700, 
+   707, 151, 457, 449, 797, 195, 791, 558, 945, 679, 
+   297, 59, 87, 824, 713, 663, 412, 693, 342, 606, 
+   134, 108, 571, 364, 631, 212, 174, 643, 304, 329, 
+   343, 97, 430, 751, 497, 314, 983, 374, 822, 928, 
+   140, 206, 73, 263, 980, 736, 876, 478, 430, 305, 
+   170, 514, 364, 692, 829, 82, 855, 953, 676, 246, 
+   369, 970, 294, 750, 807, 827, 150, 790, 288, 923, 
+   804, 378, 215, 828, 592, 281, 565, 555, 710, 82, 
+   896, 831, 547, 261, 524, 462, 293, 465, 502, 56, 
+   661, 821, 976, 991, 658, 869, 905, 758, 745, 193, 
+   768, 550, 608, 933, 378, 286, 215, 979, 792, 961, 
+   61, 688, 793, 644, 986, 403, 106, 366, 905, 644, 
+   372, 567, 466, 434, 645, 210, 389, 550, 919, 135, 
+   780, 773, 635, 389, 707, 100, 626, 958, 165, 504, 
+   920, 176, 193, 713, 857, 265, 203, 50, 668, 108, 
+   645, 990, 626, 197, 510, 357, 358, 850, 858, 364, 
+   936, 638
+};
+
+
+/*-------------------------------------------------------------*/
+/*--- end                                       randtable.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/examples/graph/fgbzip2/readme.html b/examples/graph/fgbzip2/readme.html
new file mode 100644
index 0000000..557a013
--- /dev/null
+++ b/examples/graph/fgbzip2/readme.html
@@ -0,0 +1,466 @@
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
+
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
+
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. fgbzip2 sample</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>fgbzip2 sample</h1>
+	</div>
+
+	<p>
+		fgbzip2 is a parallel implementation of bzip2 block-sorting file compressor that uses tbb::flow.
+		The output of this application is fully compatible with bzip2 v1.0.6 or newer.
+	<br><br>
+	<i>
+		This example includes software developed by Julian R Seward. See
+		<a href="#copyright">here</a> for copyright information.
+	</i>
+	<br>
+		It exemplifies support for asynchronous capabilities in the flow graph API, in particular async_node and async_msg.
+	<br><br>
+		This example uses C++11 lambda expressions. Specifying a compiler option such as -std=c++11 or similar might be necessary in order to build the example.
+		For more information please refer to the documentation for the compiler you use.
+	</p>
+	<div class="changes">
+		<div class="h3-alike">System Requirements</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				For the most up to date system requirements, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
+			</p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Files</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="fgbzip2.cpp">fgbzip2.cpp</a>
+				<dd>Flow Graph implementation of bzip2 compressor.
+				<dt><a href="blocksort.cpp">blocksort.cpp</a>
+				<dd>Block sorting machinery of libbzip2.
+				<dt><a href="bzlib.cpp">bzlib.cpp</a>
+				<dd>libbzip2 top-level functions.
+				<dt><a href="bzlib.h">bzlib.h</a>
+				<dd>Public header file for the libbzip2.
+				<dt><a href="bzlib_private.h">bzlib_private.h</a>
+				<dd>Private header file for the libbzip2.
+				<dt><a href="compress.cpp">compress.cpp</a>
+				<dd>Compression machinery of libbzip2.
+				<dt><a href="crctable.cpp">crctable.cpp</a>
+				<dd>libbzip2 table for doing CRCs.
+				<dt><a href="decompress.cpp">decompress.cpp</a>
+				<dd>Decompression machinery of libbzip2.
+				<dt><a href="huffman.cpp">huffman.cpp</a>
+				<dd>Huffman coding low-level stuff of libbzip2.
+				<dt><a href="randtable.cpp">randtable.cpp</a>
+				<dd>libbzip2 table for randomising repetitive blocks.
+				<dt><a href="Makefile">Makefile</a>
+				<dd>Makefile for building the example.
+			</dl>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+			<dt><a href="msvs/">msvs</a>
+			<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).
+			<dt><a href="xcode/">xcode</a>
+			<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).
+			</dl>
+			<p>For information about the minimum supported version of IDE, see <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a></p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Build instructions</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>General build directions can be found <a href="../../index.html">here</a>.</p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Usage</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><tt>fgbzip2 <i>-h</i></tt>
+				<dd>Prints the help for command line options
+				<dt><tt>fgbzip2 [<i>-b</i>=value] [<i>-v</i>] [<i>-l</i>=value] [<i>-a</i>=value] [<i>filename</i>]</tt>
+				<dd><i>-b</i> block size in 100 Kb chunks, [1 .. 9]<br>
+					<i>-v</i> print diagnostic output to screen<br>
+					<i>-l</i> used memory limit for compression algorithm with 1MB (minimum) granularity<br>
+					<i>-a</i> name of the used graph async realization - can be async_node or async_msg<br>
+					<i>filename</i> name of the file to compress<br>
+				<dt>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
+				<dd>Build a <i>debug</i> version of the example
+					(see the <a href="../../index.html">build instructions</a>).
+					<br>Run it with a small problem size, e.g., <tt>fgbzip2 -b=1 -a fgbzip2</tt>.
+			</dl>
+		</div>
+	</div>
+
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<a name="copyright"></a>
+	<div class="changes">
+	<div class="h3-alike">Legal Information</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+
+			<p>
+				The "libbzip2" sources for this example is
+				Copyright (c) 1996-2010 Julian R Seward.
+				All rights reserved.
+			</p>
+			<p>
+				Redistribution and use in source and binary forms, with or without
+				modification, are permitted provided that the following conditions
+				are met:
+				<ol>
+					<li>Redistributions of source code must retain the above copyright
+					   notice, this list of conditions and the following disclaimer.
+					<li>The origin of this software must not be misrepresented; you must
+					   not claim that you wrote the original software.  If you use this
+					   software in a product, an acknowledgment in the product
+					   documentation would be appreciated but is not required.
+					<li>Altered source versions must be plainly marked as such, and must
+					   not be misrepresented as being the original software.
+					<li>The name of the author may not be used to endorse or promote
+					   products derived from this software without specific prior written
+					   permission.
+				</ol>
+			</p>
+			<p>
+				THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+				OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+				WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+				ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+				DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+				DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+				GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+				INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+				WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+				NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+				SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+			</p>
+		</div>
+	</div>
+	
+</body>
+</html>
diff --git a/examples/graph/fgbzip2/xcode/fgbzip2.xcodeproj/project.pbxproj b/examples/graph/fgbzip2/xcode/fgbzip2.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..399a4b8
--- /dev/null
+++ b/examples/graph/fgbzip2/xcode/fgbzip2.xcodeproj/project.pbxproj
@@ -0,0 +1,265 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		A1F593A60B8F042A00073279 /* fgbzip2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* fgbzip2.cpp */; };
+		A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+		A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+		EAA00DB11B443FB000A83D1A /* blocksort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA00D931B443FB000A83D1A /* blocksort.cpp */; };
+		EAA00DB31B443FB000A83D1A /* bzlib.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA00D961B443FB000A83D1A /* bzlib.cpp */; };
+		EAA00DB51B443FB000A83D1A /* compress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA00D991B443FB000A83D1A /* compress.cpp */; };
+		EAA00DB71B443FB000A83D1A /* crctable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA00D9B1B443FB000A83D1A /* crctable.cpp */; };
+		EAA00DB91B443FB000A83D1A /* decompress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA00D9D1B443FB000A83D1A /* decompress.cpp */; };
+		EAA00DBB1B443FB000A83D1A /* huffman.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA00DA11B443FB000A83D1A /* huffman.cpp */; };
+		EAA00DBE1B443FB000A83D1A /* randtable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA00DAB1B443FB000A83D1A /* randtable.cpp */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		8DD76F690486A84900D96B5E /* CopyFiles */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 12;
+			dstPath = "";
+			dstSubfolderSpec = 16;
+			files = (
+				A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		8DD76F6C0486A84900D96B5E /* fgbzip2 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = fgbzip2; sourceTree = BUILT_PRODUCTS_DIR; };
+		A1F593A50B8F042A00073279 /* fgbzip2.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = fgbzip2.cpp; path = ../fgbzip2.cpp; sourceTree = SOURCE_ROOT; };
+		A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };
+		EAA00D931B443FB000A83D1A /* blocksort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = blocksort.cpp; path = ../blocksort.cpp; sourceTree = "<group>"; };
+		EAA00D951B443FB000A83D1A /* bzlib_private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = bzlib_private.h; path = ../bzlib_private.h; sourceTree = "<group>"; };
+		EAA00D961B443FB000A83D1A /* bzlib.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bzlib.cpp; path = ../bzlib.cpp; sourceTree = "<group>"; };
+		EAA00D971B443FB000A83D1A /* bzlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = bzlib.h; path = ../bzlib.h; sourceTree = "<group>"; };
+		EAA00D991B443FB000A83D1A /* compress.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = compress.cpp; path = ../compress.cpp; sourceTree = "<group>"; };
+		EAA00D9B1B443FB000A83D1A /* crctable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = crctable.cpp; path = ../crctable.cpp; sourceTree = "<group>"; };
+		EAA00D9D1B443FB000A83D1A /* decompress.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = decompress.cpp; path = ../decompress.cpp; sourceTree = "<group>"; };
+		EAA00DA11B443FB000A83D1A /* huffman.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = huffman.cpp; path = ../huffman.cpp; sourceTree = "<group>"; };
+		EAA00DAB1B443FB000A83D1A /* randtable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = randtable.cpp; path = ../randtable.cpp; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		8DD76F660486A84900D96B5E /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		08FB7794FE84155DC02AAC07 /* fgbzip2 */ = {
+			isa = PBXGroup;
+			children = (
+				08FB7795FE84155DC02AAC07 /* Source */,
+				A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+				1AB674ADFE9D54B511CA2CBB /* Products */,
+			);
+			name = fgbzip2;
+			sourceTree = "<group>";
+		};
+		08FB7795FE84155DC02AAC07 /* Source */ = {
+			isa = PBXGroup;
+			children = (
+				EAA00D931B443FB000A83D1A /* blocksort.cpp */,
+				EAA00D951B443FB000A83D1A /* bzlib_private.h */,
+				EAA00D961B443FB000A83D1A /* bzlib.cpp */,
+				EAA00D971B443FB000A83D1A /* bzlib.h */,
+				EAA00D991B443FB000A83D1A /* compress.cpp */,
+				EAA00D9B1B443FB000A83D1A /* crctable.cpp */,
+				EAA00D9D1B443FB000A83D1A /* decompress.cpp */,
+				EAA00DA11B443FB000A83D1A /* huffman.cpp */,
+				EAA00DAB1B443FB000A83D1A /* randtable.cpp */,
+				A1F593A50B8F042A00073279 /* fgbzip2.cpp */,
+			);
+			name = Source;
+			sourceTree = "<group>";
+		};
+		1AB674ADFE9D54B511CA2CBB /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				8DD76F6C0486A84900D96B5E /* fgbzip2 */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+			isa = PBXGroup;
+			children = (
+				A1F593B30B8F06F900073279 /* libtbb.dylib */,
+			);
+			name = "External Frameworks and Libraries";
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		8DD76F620486A84900D96B5E /* fgbzip2 */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "fgbzip2" */;
+			buildPhases = (
+				8DD76F640486A84900D96B5E /* Sources */,
+				8DD76F660486A84900D96B5E /* Frameworks */,
+				8DD76F690486A84900D96B5E /* CopyFiles */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = fgbzip2;
+			productInstallPath = "$(HOME)/bin";
+			productName = fgbzip2;
+			productReference = 8DD76F6C0486A84900D96B5E /* fgbzip2 */;
+			productType = "com.apple.product-type.tool";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		08FB7793FE84155DC02AAC07 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0610;
+			};
+			buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "fgbzip2" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 1;
+			knownRegions = (
+				en,
+			);
+			mainGroup = 08FB7794FE84155DC02AAC07 /* fgbzip2 */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				8DD76F620486A84900D96B5E /* fgbzip2 */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+		8DD76F640486A84900D96B5E /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				EAA00DB91B443FB000A83D1A /* decompress.cpp in Sources */,
+				EAA00DBB1B443FB000A83D1A /* huffman.cpp in Sources */,
+				EAA00DB31B443FB000A83D1A /* bzlib.cpp in Sources */,
+				EAA00DB71B443FB000A83D1A /* crctable.cpp in Sources */,
+				A1F593A60B8F042A00073279 /* fgbzip2.cpp in Sources */,
+				EAA00DB11B443FB000A83D1A /* blocksort.cpp in Sources */,
+				EAA00DBE1B443FB000A83D1A /* randtable.cpp in Sources */,
+				EAA00DB51B443FB000A83D1A /* compress.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+		1DEB923208733DC60010E9CD /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					../../../../lib,
+				);
+				PRODUCT_NAME = fgbzip2;
+				ZERO_LINK = NO;
+			};
+			name = Debug;
+		};
+		1DEB923308733DC60010E9CD /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					../../../../lib,
+				);
+				PRODUCT_NAME = fgbzip2;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		1DEB923608733DC60010E9CD /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
+				GCC_ENABLE_CPP_RTTI = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_PREPROCESSOR_DEFINITIONS = TBB_PREVIEW_FLOW_GRAPH_NODES;
+				GCC_VERSION = "";
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.9;
+				ONLY_ACTIVE_ARCH = YES;
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Debug;
+		};
+		1DEB923708733DC60010E9CD /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
+				GCC_ENABLE_CPP_RTTI = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_PREPROCESSOR_DEFINITIONS = TBB_PREVIEW_FLOW_GRAPH_NODES;
+				GCC_VERSION = "";
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.9;
+				ONLY_ACTIVE_ARCH = YES;
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "fgbzip2" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				1DEB923208733DC60010E9CD /* Debug */,
+				1DEB923308733DC60010E9CD /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Debug;
+		};
+		1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "fgbzip2" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				1DEB923608733DC60010E9CD /* Debug */,
+				1DEB923708733DC60010E9CD /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Debug;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/examples/graph/index.html b/examples/graph/index.html
index df37e75..5c310a6 100644
--- a/examples/graph/index.html
+++ b/examples/graph/index.html
@@ -1,30 +1,358 @@
-<HTML>
-<BODY>
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
 
-<H2>Overview</H2>
-This directory has examples of <code>tbb::flow</code>.
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
 
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="dining_philosophers/index.html">dining_philosophers</A>
-<DD>An implementation of dining philosophers in graph using the reserving join node.
-<DT><A HREF="binpack/index.html">binpack</A>
-<DD>A solution to the binpacking problem using a queue_node, a buffer_node and function_nodes.
-<DT><A HREF="logic_sim/index.html">logic_sim</A>
-<DD>A simplistic example of a collection of digital logic gates that can be easily composed into larger circuits.
-<DT><A HREF="som/index.html">som</A>
-<DD>A simple example of a Kohonen Self-Organizing Map using cancellation.
-</DL>
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Samples on Intel TBB Flow Graph feature</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks (Intel® TBB).<br>Samples on Intel® TBB Flow Graph feature</h1>
+	</div>
+	
+	<p>
+		This directory has examples of the Intel TBB Flow Graph feature.
+	</p>
 
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="dining_philosophers/readme.html">dining_philosophers</a>
+				<dd>An implementation of dining philosophers in graph using the reserving join node.
+				<dt><a href="binpack/readme.html">binpack</a>
+				<dd>A solution to the binpacking problem using a <code>queue_node</code>, a <code>buffer_node</code> and <code>function_nodes</code>.
+				<dt><a href="logic_sim/readme.html">logic_sim</a>
+				<dd>A simplistic example of a collection of digital logic gates that can be easily composed into larger circuits.
+				<dt><a href="som/readme.html">som</a>
+				<dd>A simple example of a Kohonen Self-Organizing Map using cancellation.
+				<dt><a href="fgbzip2/readme.html">fgbzip2</a>
+				<dd>A parallel implementation of bzip2 block-sorting file compressor.
+				<dt><a href="cholesky/readme.html">cholesky</a>
+				<dd>Several versions of Cholesky Factorization algorithm implementation.
+				<dt><a href="stereo/readme.html">stereo</a>
+				<dd>An implementation of stereo image creation from two images (anaglyph effect).
+				<dt><a href="matmult/readme.html">matmult</a>
+				<dd>Matrix multiplication Gen kernel implementation with the flow graph interface.
+			</dl>
+		</div>
+	</div>
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information:</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>
+</body>
+</html>
 
diff --git a/examples/graph/logic_sim/D_latch.h b/examples/graph/logic_sim/D_latch.h
index bbe056a..76c2352 100644
--- a/examples/graph/logic_sim/D_latch.h
+++ b/examples/graph/logic_sim/D_latch.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBBexample_graph_logicsim_dlatch_H
diff --git a/examples/graph/logic_sim/Makefile b/examples/graph/logic_sim/Makefile
index e5a985a..62d268a 100644
--- a/examples/graph/logic_sim/Makefile
+++ b/examples/graph/logic_sim/Makefile
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # GNU Makefile that builds and runs example.
 run_cmd=
@@ -34,6 +34,8 @@ run_cmd=../../common/android.linux.launcher.sh
 else
 LIBS+= -lrt 
 endif
+else ifeq ($(shell uname), Darwin)
+override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib
 endif
 
 all:    release test
diff --git a/examples/graph/logic_sim/Makefile.windows b/examples/graph/logic_sim/Makefile.windows
index 5c162b6..ae1b879 100644
--- a/examples/graph/logic_sim/Makefile.windows
+++ b/examples/graph/logic_sim/Makefile.windows
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # Common Makefile that builds and runs example.
 PROG=test_all
diff --git a/examples/graph/logic_sim/basics.h b/examples/graph/logic_sim/basics.h
index eeced8e..79182f8 100644
--- a/examples/graph/logic_sim/basics.h
+++ b/examples/graph/logic_sim/basics.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBBexample_graph_logicsim_basics_H
diff --git a/examples/graph/logic_sim/four_bit_adder.h b/examples/graph/logic_sim/four_bit_adder.h
index 026a365..3bd38b0 100644
--- a/examples/graph/logic_sim/four_bit_adder.h
+++ b/examples/graph/logic_sim/four_bit_adder.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBBexample_graph_logicsim_fba_H
@@ -29,6 +29,7 @@ typedef composite_node< tuple< signal_t, signal_t, signal_t, signal_t, signal_t,
 class four_bit_adder : public fba_base_type {
     graph& my_graph;
     std::vector<one_bit_adder> four_adders; 
+
 public:
     four_bit_adder(graph& g) : fba_base_type(g), my_graph(g), four_adders(4, one_bit_adder(g)) {
         make_connections();
diff --git a/examples/graph/logic_sim/index.html b/examples/graph/logic_sim/index.html
deleted file mode 100644
index 56ed19f..0000000
--- a/examples/graph/logic_sim/index.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<HTML>
-<BODY>
-
-<H2>Overview</H2>
-
-This directory contains a simple tbb::flow example that performs
-simplistic digital logic simulations with basic logic gates that can
-be easily composed to create more interesting circuits.  It
-exemplifies the multifunction_node and the indexer_node CPF, among others.
-
-<H2>Files</H2>
-<DL>
-<DT><A HREF="basics.h">basics.h</A>
-<DD>Several I/O devices and basic gates.
-<DT><A HREF="one_bit_adder.h">one_bit_adder.h</A>
-<DD>A one-bit full adder composed of basic gates.
-<DT><A HREF="four_bit_adder.h">four_bit_adder.h</A>
-<DD>A four-bit full adder composed of one-bit adders.
-<DT><A HREF="D_latch.h">D_latch.h</A>
-<DD>A D-latch composed of basic gates.
-<DT><A HREF="test_all.cpp">test_all.cpp</A>
-<DD>A simple test program that exercises the code in the headers.
-
-<DT><A HREF="Makefile">Makefile</A>
-<DD>Makefile for building example.
-
-</DL>
-
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2010 workspace for building and running the example with the Intel® C++ compiler (Windows* systems only).
-<DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example (OS X* systems only).
-</DL>
-
-<H2>To Build</H2>
-General build directions can be found <A HREF=../../index.html#build>here</A>.
-<P></P>
-
-<H2>Usage</H2>
-<DL>
-
-<DT><TT>test_all <I>-h</I></TT>
-<DD>Prints the help for command line options
-<DT><TT>test_all [<I>#threads</I>=value] [<I>verbose</I>] [<I>silent</I>] [<I>#threads</I>]</TT>
-<DD><I>#threads</I> is the number of threads to use; a range of the form <I>low</I>[:<I>high</I>] where low and optional high are non-negative integers, or 'auto' for the TBB default.<BR>
-    <I>verbose</I> print diagnostic output to screen<BR>
-    <I>silent</I> limits output to timing info; overrides verbose<BR>
-
-<DT>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
-<DD>Build a <I>debug</I> version of the example
-    (see the <A HREF=../../index.html#build>build directions</A>).
-    <BR>Run it with the desired number of threads, e.g., <TT>test_all 4</TT>.
-</DL>
-
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
diff --git a/examples/graph/logic_sim/msvs/logic_sim.sln b/examples/graph/logic_sim/msvs/logic_sim.sln
index cb397b1..b0d28d3 100644
--- a/examples/graph/logic_sim/msvs/logic_sim.sln
+++ b/examples/graph/logic_sim/msvs/logic_sim.sln
@@ -1,26 +1,26 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "logic_sim", "logic_sim.vcxproj", "{6E9B1702-78E0-4D64-B771-8B274D963B58}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
-		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.Debug|Win32.ActiveCfg = Debug|Win32
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.Debug|Win32.Build.0 = Debug|Win32
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.Debug|x64.ActiveCfg = Debug|x64
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.Debug|x64.Build.0 = Debug|x64
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.Release|Win32.ActiveCfg = Release|Win32
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.Release|Win32.Build.0 = Release|Win32
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.Release|x64.ActiveCfg = Release|x64
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.Release|x64.Build.0 = Release|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "logic_sim", "logic_sim.vcxproj", "{6E9B1702-78E0-4D64-B771-8B274D963B58}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.Debug|Win32.ActiveCfg = Debug|Win32
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.Debug|Win32.Build.0 = Debug|Win32
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.Debug|x64.ActiveCfg = Debug|x64
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.Debug|x64.Build.0 = Debug|x64
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.Release|Win32.ActiveCfg = Release|Win32
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.Release|Win32.Build.0 = Release|Win32
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.Release|x64.ActiveCfg = Release|x64
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/graph/logic_sim/msvs/logic_sim.vcxproj b/examples/graph/logic_sim/msvs/logic_sim.vcxproj
index e82a581..316eb22 100644
--- a/examples/graph/logic_sim/msvs/logic_sim.vcxproj
+++ b/examples/graph/logic_sim/msvs/logic_sim.vcxproj
@@ -1,197 +1,201 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>logic_sim</ProjectName>
-    <ProjectGuid>{6E9B1702-78E0-4D64-B771-8B274D963B58}</ProjectGuid>
-    <RootNamespace>test_all</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <Import Project="..\..\..\common\toolset.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\test_all.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="..\index.html" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>logic_sim</ProjectName>
+    <ProjectGuid>{6E9B1702-78E0-4D64-B771-8B274D963B58}</ProjectGuid>
+    <RootNamespace>test_all</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\test_all.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\readme.html" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/examples/graph/logic_sim/one_bit_adder.h b/examples/graph/logic_sim/one_bit_adder.h
index 5fc8703..cd92339 100644
--- a/examples/graph/logic_sim/one_bit_adder.h
+++ b/examples/graph/logic_sim/one_bit_adder.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBBexample_graph_logicsim_oba_H
diff --git a/examples/graph/logic_sim/readme.html b/examples/graph/logic_sim/readme.html
new file mode 100644
index 0000000..b1252b0
--- /dev/null
+++ b/examples/graph/logic_sim/readme.html
@@ -0,0 +1,406 @@
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
+
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
+
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. logic_sim sample</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Logic_sim sample</h1>
+	</div>
+	
+	<p>
+		This directory contains a simple tbb::flow example that performs
+		simplistic digital logic simulations with basic logic gates that can
+		be easily composed to create more interesting circuits. It
+		exemplifies the multifunction_node and the indexer_node CPF, among others.	</p>
+
+	<div class="changes">
+		<div class="h3-alike">System Requirements</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				For the most up to date system requirements, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
+			</p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Files</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="basics.h">basics.h</a>
+				<dd>Several I/O devices and basic gates.
+				<dt><a href="one_bit_adder.h">one_bit_adder.h</a>
+				<dd>A one-bit full adder composed of basic gates.
+				<dt><a href="four_bit_adder.h">four_bit_adder.h</a>
+				<dd>A four-bit full adder composed of one-bit adders.
+				<dt><a href="D_latch.h">D_latch.h</a>
+				<dd>A D-latch composed of basic gates.
+				<dt><a href="test_all.cpp">test_all.cpp</a>
+				<dd>A simple test program that exercises the code in the headers.
+				<dt><a href="Makefile">Makefile</a>
+				<dd>Makefile for building the example.
+			</dl>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="msvs/">msvs</a>
+				<dd>Contains Microsoft* Visual Studio* workspace for building and running the example with the Intel® C++ Compiler (Windows* systems only).
+			</dl>
+			<p>For information about the minimum supported version of IDE, see <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a></p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Build instructions</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>General build directions can be found <a href="../../index.html">here</a>.</p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Usage</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><tt>test_all <i>-h</i></tt>
+				<dd>Prints the help for command line options
+				<dt><tt>test_all [<i>#threads</i>=value] [<i>verbose</i>] [<i>silent</i>] [<i>#threads</i>]</tt>
+				<dd><tt><i>#threads</i></tt> is the number of threads to use; a range of the form <tt><i>low[:high]</i></tt> where <tt><i>low</i></tt> and optional <tt><i>high</i></tt> are non-negative integers, or <tt><i>'auto'</i></tt> for the TBB default.<br>
+					<tt><i>verbose</i></tt> print diagnostic output to screen<br>
+					<tt><i>silent</i></tt> limits output to timing info; overrides verbose<br>
+				<dt>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
+				<dd>Build a <i>debug</i> version of the example
+					(see the <a href="../../index.html">build instructions</a>).
+					<br>Run it with the desired number of threads, e.g., <tt>test_all 4</tt>.
+			</dl>
+		</div>
+	</div>
+	
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>
+	
+</body>
+</html>
diff --git a/examples/graph/logic_sim/test_all.cpp b/examples/graph/logic_sim/test_all.cpp
index d689393..9424f76 100644
--- a/examples/graph/logic_sim/test_all.cpp
+++ b/examples/graph/logic_sim/test_all.cpp
@@ -1,29 +1,29 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
-*/
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-#define TBB_PREVIEW_FLOW_GRAPH_NODES 1
+
+*/
 
 #include "tbb/tbb_config.h"
 #include <cstdio>
 
-#if __TBB_PREVIEW_COMPOSITE_NODE
+#include "../../common/utility/utility.h"
+
+#if __TBB_FLOW_GRAPH_CPP11_FEATURES
 
 #if _MSC_VER
 #pragma warning (disable: 4503) // Suppress "decorated name length exceeded, name was truncated" warning
@@ -51,10 +51,11 @@ int get_default_num_threads() {
         threads = tbb::task_scheduler_init::default_num_threads();
     return threads;
 }
-#endif
+
+#endif // __TBB_FLOW_GRAPH_CPP11_FEATURES
 
 int main(int argc, char *argv[]) {
-#if __TBB_PREVIEW_COMPOSITE_NODE
+#if __TBB_FLOW_GRAPH_CPP11_FEATURES
     try {
         utility::thread_number_range threads(get_default_num_threads);
         utility::parse_cli_arguments(argc, argv,
@@ -638,8 +639,8 @@ int main(int argc, char *argv[]) {
         return 1;
     }
 #else
-    printf("skipped\n");
+    utility::report_skipped();
     return 0;
-#endif // __TBB_PREVIEW_COMPOSITE_NODE
+#endif // __TBB_FLOW_GRAPH_CPP11_FEATURES
 }
 
diff --git a/examples/graph/logic_sim/two_bit_adder.h b/examples/graph/logic_sim/two_bit_adder.h
index ae86cd2..467334b 100644
--- a/examples/graph/logic_sim/two_bit_adder.h
+++ b/examples/graph/logic_sim/two_bit_adder.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBBexample_graph_logicsim_tba_H
diff --git a/examples/graph/matmult/Makefile b/examples/graph/matmult/Makefile
new file mode 100644
index 0000000..a2079dd
--- /dev/null
+++ b/examples/graph/matmult/Makefile
@@ -0,0 +1,56 @@
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+# GNU Makefile that builds and runs example.
+
+run_cmd=
+PROG=matmult
+ARGS=
+
+# icpc by default
+ifneq (,$(shell which icc 2>/dev/null))
+    CXX=icpc
+endif
+
+# autodetect C++11 support
+include ../../common/examples-common.inc
+
+ifeq ($(shell uname), Linux)
+LIBS+= -lrt -lpthread -lcilkrts
+else ifeq ($(shell uname), Darwin)
+override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib
+endif
+
+all: release test
+
+release:
+	$(CXX) -O2 -DNDEBUG *.cpp $(CXXFLAGS) -o $(PROG) -ltbb $(LIBS) $(CXX0XFLAGS)
+
+debug:
+	$(CXX) -O0 -g -DTBB_USE_DEBUG *.cpp $(CXXFLAGS) -o $(PROG) -ltbb_debug $(LIBS)  $(CXX0XFLAGS)
+
+clean:
+	$(RM) $(PROG) *.o *.d
+
+test:
+	$(run_cmd) ./$(PROG) $(ARGS)
+
+perf_build: release
+
+perf_run:
+	$(run_cmd) ./$(PROG)
diff --git a/examples/graph/matmult/Makefile.windows b/examples/graph/matmult/Makefile.windows
new file mode 100644
index 0000000..2b2f6ac
--- /dev/null
+++ b/examples/graph/matmult/Makefile.windows
@@ -0,0 +1,53 @@
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+run_cmd=
+PROG=matmult
+ARGS=
+
+# Trying to find if icl.exe is set
+CXX1 = $(TBB_CXX)-
+CXX2 = $(CXX1:icl.exe-=icl.exe)
+CXX  = $(CXX2:-=cl.exe)
+
+# The C++ compiler options
+MYCXXFLAGS = /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_WARNINGS /D _CRT_NONSTDC_NO_DEPRECATE /wd4267 /wd4244
+MYLDFLAGS = /INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
+
+all: release test
+
+release:
+	$(CXX) *.cpp /MD /O2 /Zi /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+
+debug:
+	$(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+
+clean:
+	@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest
+
+test:
+	$(PROG) $(ARGS)
+
+perf_build: release
+
+perf_run:
+	$(PROG) $(PERF_RUN_ARGS)
+
diff --git a/examples/graph/matmult/matmult.cpp b/examples/graph/matmult/matmult.cpp
new file mode 100644
index 0000000..33bb7e0
--- /dev/null
+++ b/examples/graph/matmult/matmult.cpp
@@ -0,0 +1,374 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+// -------------------------------------------------------------------------------------------------
+// This is an example of a matrix multiplication Gen kernel usage with TBB Flow Graph.
+// It exemplifies support for compute offload to Intel(R) Graphics Technology in the flow graph API.
+// -------------------------------------------------------------------------------------------------
+
+#define TBB_PREVIEW_FLOW_GRAPH_NODES 1
+#define TBB_PREVIEW_FLOW_GRAPH_FEATURES 1
+
+#include "tbb/tbb_config.h"
+#include "../../common/utility/utility.h"
+
+#if __TBB_PREVIEW_GFX_FACTORY && __TBB_PREVIEW_STREAMING_NODE
+
+#if _MSC_VER
+#pragma warning(disable : 4503) // suppress warning C4503: decorated name length exceeded, name was truncated 
+#endif
+
+// -------------------------------------------------------------------------------------------------
+
+#include <iostream>
+
+#include <cilk/cilk.h>
+#include <cilk/cilk_api.h>
+
+#include "tbb/tick_count.h"
+#include "tbb/flow_graph.h"
+#include "tbb/gfx_factory.h"
+
+// -------------------------------------------------------------------------------------------------
+
+#define SLM_TILE_X (4*8)
+#define SLM_TILE_Y (4*8)
+#define SLM_TILE_K (4*8)
+
+#define SIZE_X (2*SLM_TILE_X)
+#define SIZE_Y (2*SLM_TILE_Y)
+#define SIZE_K (2*SLM_TILE_X)
+
+#ifdef __GFX__
+#define BARRIER _gfx_gpgpu_thread_barrier()
+#else
+#define BARRIER
+#endif
+
+#define TILE_Y 8
+#define TILE_K 8
+#define TILE_X 8
+
+// The naive straightforward algorithm used to obtain reference results on CPU
+void matmult_naive(const float* A, const float* B, float* C) {
+    for (int y = 0; y < SIZE_Y; y++) {
+        for (int x = 0; x < SIZE_X; x++) {
+            C[y * SIZE_Y + x] = (float)0;
+
+            for (int k = 0; k < SIZE_K; k++) {
+                C[y * SIZE_Y + x] += A[y * SIZE_K + k] * B[k * SIZE_K + x];
+            }
+        }
+    }
+}
+
+// Shared Local Memory based algorithm
+__declspec(target(gfx_kernel))
+void matmult_tiled_slm(const float A[][SIZE_K], const float B[][SIZE_X], float C[][SIZE_X]) {
+    // The parallel loop nest below iterates over "supertiles" in the resulting
+    // matrix C and it is parallelized across thread groups, 1 iteration per
+    // group, which effectively means that the loop nest is peeled off.
+    // This kernel is programmed so that each thread group calculates one
+    // resulting supertile in matrix C.
+    _Cilk_for _Thread_group(int tg_y = 0; tg_y < SIZE_Y; tg_y += SLM_TILE_Y) {
+        _Cilk_for _Thread_group(int tg_x = 0; tg_x < SIZE_X; tg_x += SLM_TILE_X) {
+            // declare "supertiles" of each matrix to be allocated in SLM
+            __thread_group_local float slm_atile[SLM_TILE_Y][SLM_TILE_K];
+            __thread_group_local float slm_btile[SLM_TILE_K][SLM_TILE_X];
+            __thread_group_local float slm_ctile[SLM_TILE_Y][SLM_TILE_X];
+
+            // initialize the result supertile (in parallel)
+            //slm_ctile[:][:] = (float)0;
+            _Cilk_for(int i0 = 0; i0 < SLM_TILE_Y; i0++)
+                _Cilk_for(int i1 = 0; i1 < SLM_TILE_X; i1++)
+                    slm_ctile[i0][i1] = (float)0;
+
+            // calculate the dot product of supertiles:
+            for (int super_k = 0; super_k < SIZE_K; super_k += SLM_TILE_K) {
+                // cache A's and B's "supertiles" in SLM (in parallel)
+                //slm_atile[:][:] = A[tg_y:SLM_TILE_Y][super_k:SLM_TILE_K];
+                _Cilk_for(int i0 = 0; i0 < SLM_TILE_Y; i0++)
+                    _Cilk_for(int i1 = 0; i1 < SLM_TILE_K; i1++)
+                        slm_atile[i0][i1] = A[tg_y + i0][super_k + i1];
+
+                //slm_btile[:][:] = B[super_k:SLM_TILE_K][tg_x:SLM_TILE_X];
+                _Cilk_for(int i0 = 0; i0 < SLM_TILE_K; i0++)
+                    _Cilk_for(int i1 = 0; i1 < SLM_TILE_X; i1++)
+                        slm_btile[i0][i1] = B[super_k + i0][tg_x + i1];
+
+                // need a barrier, since every tile in tiles are used by
+                // multiple threads in the group
+                BARRIER;
+
+                // now multiply the supertiles as usual matrices (in parallel)
+                // ...
+                // ... using the most effective tiled algorithm:
+                _Cilk_for(int t_y = 0; t_y < SLM_TILE_Y; t_y += TILE_Y) {
+                    _Cilk_for(int t_x = 0; t_x < SLM_TILE_X; t_x += TILE_X) {
+                        // allocate tiles in registers
+                        float atile[TILE_Y][TILE_K], btile[TILE_X];
+                        float ctile[TILE_Y][TILE_X];
+
+                        // ... and initialize ctile to zero
+                        ctile[:][:] = (float)0;
+
+                        // calculate the dot product of the tiles
+                        for (int k = 0; k < SLM_TILE_K; k += TILE_K) {
+                            atile[:][:] = slm_atile[t_y:TILE_Y][k:TILE_K];
+
+                            for (int k_ind = 0; k_ind < TILE_K; k_ind++) {
+                                btile[:] = slm_btile[k + k_ind][t_x:TILE_X];
+
+                                // multiply current btile row by atile's
+                                // current element and add up to corresponding
+                                // ctile row
+                                for (int y_ind = 0; y_ind < TILE_Y; y_ind++) {
+                                    ctile[y_ind][:] += atile[y_ind][k_ind] *
+                                        btile[:];
+                                }
+                            }
+                        }
+                        // flush the thread-local ctile (registers) into the
+                        // thread group-local supertile (SLM) adding up
+                        // elements
+                        slm_ctile[t_y:TILE_Y][t_x:TILE_X] += ctile[:][:];
+                    }
+                }
+
+                // barrier to make sure
+                // (1) next iteration of the loop does not overwrite a and b
+                //   SLM tiles used in the above calculation of slm_ctile
+                // (2) on the last iteration of the loop, all threads wait
+                //   for the SLM ctile calculation to be completed before
+                //   writing it back to memory below this loop
+                BARRIER;
+            }
+
+            // write (in parallel) the result supertile back to memory:
+            //C[tg_y:SLM_TILE_Y][tg_x:SLM_TILE_X] = slm_ctile[:][:];
+            _Cilk_for(int i0 = 0; i0 < SLM_TILE_Y; i0++)
+                _Cilk_for(int i1 = 0; i1 < SLM_TILE_X; i1++)
+                    C[tg_y + i0][tg_x + i1] = slm_ctile[i0][i1];
+
+            // next iteration of the loop zeroes out slm_ctile - make sure this
+            // always happens after slm_ctile has been dumped to memory (above
+            // loop nest completes):
+            BARRIER;
+        }
+    }
+}
+
+// Matrix initialization function
+void init_matrix(int width, int height, float* matrix) {
+    for (int j = 0; j < height; j++) {
+        for (int i = 0; i < width; i++) {
+            matrix[j * height + i] = (float)(j * 4 + i);
+        }
+    }
+}
+
+// Validate matrix with reference values
+bool validate_mat(char *title, int size_y, int size_x, const float* mat, const float* ref_mat) {
+    int err_cnt = 0;
+    printf("verifying %s...", title);
+    fflush(stdout);
+
+    for (int y = 0; y < size_y; y++) {
+        for (int x = 0; x < size_x; x++) {
+            float val = mat[y * size_y + x];
+            float gold_val = ref_mat[y * size_y + x];
+
+            if (val != gold_val) {
+                if (err_cnt == 0) {
+                    printf("\n");
+                }
+                if (++err_cnt < 10) {
+                    std::cout <<
+                        "  ERROR at [" << y << "][" << x << "]: " <<
+                        val << "(should be " << gold_val << ")" << std::endl;
+                }
+            }
+        }
+    }
+    if (err_cnt == 0) {
+        printf(" ok\n");
+    } else {
+        printf("FAILED\n");
+    }
+    return err_cnt == 0;
+}
+
+// ----------------------------------------------------------------------------
+// Helper types and functions
+// ----------------------------------------------------------------------------
+
+struct matrix_size {
+    int columns;
+    int rows;
+};
+
+typedef std::tuple< tbb::flow::gfx_buffer<float>,
+                    tbb::flow::gfx_buffer<float>,
+                    tbb::flow::gfx_buffer<float> > kernel_args_type;
+typedef kernel_args_type cpu_args_type;
+typedef kernel_args_type validation_args_type;
+
+// Constructs flow graph with three computation nodes that all make matrixes multiplication
+// - CPU node - obtains reference result on CPU
+// - CPU SLM node - Intel(R) Cilk(TM) based matrixes multiplication implementation on CPU
+// - GPU node - obtains result on GPU using GFX offload API
+void mat_multiplication() {
+
+    //------------------------------------------
+    // TBB Flow Graph nodes declaration section
+    //------------------------------------------
+
+    tbb::flow::graph g;
+    tbb::flow::gfx_factory factory(g);
+
+    // Enqueue task for running on Gen
+    tbb::flow::split_node< kernel_args_type > gpu_slm_split_n(g);
+    tbb::flow::streaming_node< kernel_args_type, tbb::flow::queueing, tbb::flow::gfx_factory > gpu_slm_mat_mult_n(g, matmult_tiled_slm, tbb::flow::gfx_factory::dummy_device_selector(), factory);
+
+    // Obtain SLM algorithm result on CPU
+    tbb::flow::function_node< cpu_args_type, tbb::flow::gfx_buffer<float> > cpu_slm_mat_mult_n(g, tbb::flow::unlimited, [](const cpu_args_type& args) -> tbb::flow::gfx_buffer<float> {
+        // Get references to matrixes
+        const tbb::flow::gfx_buffer<float >& A_MATRIX = std::get<0>(args);
+        const tbb::flow::gfx_buffer<float>& B_MATRIX  = std::get<1>(args);
+        tbb::flow::gfx_buffer<float> CPU_SLM_MATRIX   = std::get<2>(args);
+
+        matmult_tiled_slm((float(*)[SIZE_K])A_MATRIX.data(), (float(*)[SIZE_X])B_MATRIX.data(), (float(*)[SIZE_X])CPU_SLM_MATRIX.data());
+
+        return CPU_SLM_MATRIX;
+    });
+
+    // Obtain reference result on CPU
+    tbb::flow::function_node< cpu_args_type, tbb::flow::gfx_buffer<float> > cpu_naive_mat_mult_n(g, tbb::flow::unlimited, [](const cpu_args_type& args) -> tbb::flow::gfx_buffer<float> {
+        // Get references to matrixes
+        const tbb::flow::gfx_buffer<float>& A_MATRIX  = std::get<0>(args);
+        const tbb::flow::gfx_buffer<float>& B_MATRIX  = std::get<1>(args);
+        tbb::flow::gfx_buffer<float> CPU_NAIVE_MATRIX = std::get<2>(args);
+
+        matmult_naive(A_MATRIX.data(), B_MATRIX.data(), CPU_NAIVE_MATRIX.data());
+
+        return CPU_NAIVE_MATRIX;
+    });
+
+    // Validate computed matrixes
+    tbb::flow::join_node< validation_args_type > validation_join_n(g);
+    tbb::flow::function_node< validation_args_type > mat_validation_n(g, tbb::flow::unlimited, [](const validation_args_type& result) {
+        // Get references to matrixes
+        const tbb::flow::gfx_buffer<float>& GPU_SLM_MAT   = std::get<0>(result);
+        const tbb::flow::gfx_buffer<float>& CPU_SLM_MAT   = std::get<1>(result);
+        const tbb::flow::gfx_buffer<float>& CPU_NAIVE_MAT = std::get<2>(result);
+
+        // Verify results
+        // Check that slm algorithm produces correct results on CPU:
+        validate_mat("matrix multiply: 'SLM' CPU vs. CPU", SIZE_Y, SIZE_X, CPU_SLM_MAT.data(), CPU_NAIVE_MAT.data());
+        // Verify Gen results:
+        validate_mat("matrix multiply: SLM Gen vs. CPU", SIZE_Y, SIZE_X, GPU_SLM_MAT.data(), CPU_NAIVE_MAT.data());
+    });
+
+    //-----------------------------------------
+    // Make edge section - connecting nodes
+    //-----------------------------------------
+
+    // Prepare main graph input ports for data
+    make_edge(tbb::flow::output_port<0>(gpu_slm_split_n), tbb::flow::input_port<0>(gpu_slm_mat_mult_n));
+    make_edge(tbb::flow::output_port<1>(gpu_slm_split_n), tbb::flow::input_port<1>(gpu_slm_mat_mult_n));
+    make_edge(tbb::flow::output_port<2>(gpu_slm_split_n), tbb::flow::input_port<2>(gpu_slm_mat_mult_n));
+
+    // Join results
+    make_edge(tbb::flow::output_port<2>(gpu_slm_mat_mult_n), tbb::flow::input_port<0>(validation_join_n));
+    make_edge(cpu_slm_mat_mult_n, tbb::flow::input_port<1>(validation_join_n));
+    make_edge(cpu_naive_mat_mult_n, tbb::flow::input_port<2>(validation_join_n));
+
+    //Verify correctness
+    make_edge(validation_join_n, mat_validation_n);
+
+    // Set args for GFX kernel.
+    // Default behaviour if not set.
+    gpu_slm_mat_mult_n.set_args(tbb::flow::port_ref<0, 2>);
+
+    //-----------------------------------------
+    // Input sizes and matrixes initialization
+    //-----------------------------------------
+
+    const matrix_size A_MATRIX_SIZE         = { SIZE_Y, SIZE_K };
+    const matrix_size B_MATRIX_SIZE         = { SIZE_K, SIZE_X };
+    const matrix_size GPU_SLM_MATRIX_SIZE   = { SIZE_Y, SIZE_X };
+    const matrix_size CPU_SLM_MATRIX_SIZE   = { SIZE_Y, SIZE_X };
+    const matrix_size CPU_NAIVE_MATRIX_SIZE = { SIZE_Y, SIZE_X };
+
+    tbb::flow::gfx_buffer<float> A_MATRIX(A_MATRIX_SIZE.columns * A_MATRIX_SIZE.rows);
+    tbb::flow::gfx_buffer<float> B_MATRIX(B_MATRIX_SIZE.columns * B_MATRIX_SIZE.rows);
+    tbb::flow::gfx_buffer<float> GPU_SLM_MATRIX(GPU_SLM_MATRIX_SIZE.columns * GPU_SLM_MATRIX_SIZE.rows);
+    tbb::flow::gfx_buffer<float> CPU_SLM_MATRIX(CPU_SLM_MATRIX_SIZE.columns * CPU_SLM_MATRIX_SIZE.rows);
+    tbb::flow::gfx_buffer<float> CPU_NAIVE_MATRIX(CPU_NAIVE_MATRIX_SIZE.columns * CPU_NAIVE_MATRIX_SIZE.rows);
+
+    // Intitialize input matrixes
+    init_matrix(A_MATRIX_SIZE.columns, A_MATRIX_SIZE.rows, A_MATRIX.data());
+    init_matrix(B_MATRIX_SIZE.columns, B_MATRIX_SIZE.rows, B_MATRIX.data());
+
+    // Make tuples with input data for graph
+    kernel_args_type GPU_SLM_INPUT   = std::make_tuple(A_MATRIX, B_MATRIX, GPU_SLM_MATRIX);
+    kernel_args_type CPU_SLM_INPUT   = std::make_tuple(A_MATRIX, B_MATRIX, CPU_SLM_MATRIX);
+    kernel_args_type CPU_NAIVE_INPUT = std::make_tuple(A_MATRIX, B_MATRIX, CPU_NAIVE_MATRIX);
+
+    //-----------------------------------------
+    // Send input to the graph and run it
+    //-----------------------------------------
+
+    gpu_slm_split_n.try_put(GPU_SLM_INPUT);
+    cpu_slm_mat_mult_n.try_put(CPU_SLM_INPUT);
+    cpu_naive_mat_mult_n.try_put(CPU_NAIVE_INPUT);
+
+    // Run graph
+    g.wait_for_all();
+}
+
+//---------------------------------------------------------------------------------
+
+int main(int argc, char* argv[]) {
+    try {
+        tbb::tick_count mainStartTime = tbb::tick_count::now();
+
+        utility::parse_cli_arguments(argc, argv,
+            utility::cli_argument_pack()
+            //"-h" option for displaying help is present implicitly
+        );
+
+        // Compute matrices and verify result
+        mat_multiplication();
+
+        utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds());
+        return 0;
+    } catch (std::exception& e) {
+        std::cerr << "Error occurred. Error text is : \"" << e.what() << "\"\n";
+        return -1;
+    }
+}
+
+#else
+int main() {
+    utility::report_skipped();
+    return 0;
+}
+#endif /* __TBB_PREVIEW_GFX_FACTORY && __TBB_PREVIEW_STREAMING_NODE */
diff --git a/examples/graph/matmult/msvs/matmult.sln b/examples/graph/matmult/msvs/matmult.sln
new file mode 100644
index 0000000..2da97a8
--- /dev/null
+++ b/examples/graph/matmult/msvs/matmult.sln
@@ -0,0 +1,26 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "matmult", "matmult.vcxproj", "{517E31A4-BEED-481A-A5A7-5B37B82A1C16}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{517E31A4-BEED-481A-A5A7-5B37B82A1C16}.Debug|Win32.ActiveCfg = Debug|Win32
+		{517E31A4-BEED-481A-A5A7-5B37B82A1C16}.Debug|Win32.Build.0 = Debug|Win32
+		{517E31A4-BEED-481A-A5A7-5B37B82A1C16}.Debug|x64.ActiveCfg = Debug|x64
+		{517E31A4-BEED-481A-A5A7-5B37B82A1C16}.Debug|x64.Build.0 = Debug|x64
+		{517E31A4-BEED-481A-A5A7-5B37B82A1C16}.Release|Win32.ActiveCfg = Release|Win32
+		{517E31A4-BEED-481A-A5A7-5B37B82A1C16}.Release|Win32.Build.0 = Release|Win32
+		{517E31A4-BEED-481A-A5A7-5B37B82A1C16}.Release|x64.ActiveCfg = Release|x64
+		{517E31A4-BEED-481A-A5A7-5B37B82A1C16}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/graph/matmult/msvs/matmult.vcxproj b/examples/graph/matmult/msvs/matmult.vcxproj
new file mode 100644
index 0000000..5a8b983
--- /dev/null
+++ b/examples/graph/matmult/msvs/matmult.vcxproj
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{517E31A4-BEED-481A-A5A7-5B37B82A1C16}</ProjectGuid>
+    <RootNamespace>matmult</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v110</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v110</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v110</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v110</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <IntDir>$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\matmult.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/examples/graph/matmult/readme.html b/examples/graph/matmult/readme.html
new file mode 100644
index 0000000..f96d9ef
--- /dev/null
+++ b/examples/graph/matmult/readme.html
@@ -0,0 +1,414 @@
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
+
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
+
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. matmult sample</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>matmult sample</h1>
+	</div>
+
+	<p>
+		The Matmult is an example of a Gen kernel implementing matrix multiplication.
+	<br>
+	<br>
+		It exemplifies support for compute offload to Intel® Graphics Technology in the flow graph API.
+	<br><br>
+		This example uses C++11 features. Specifying a compiler option such as -std=c++11 or similar might be necessary in order to build the example.
+		For more information please refer to the documentation for the compiler you use.
+	</p>
+	<div class="changes">
+		<div class="h3-alike">System Requirements</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				For the most up to date system requirements, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
+			</p>
+			<p> For detailed Intel® Graphics Technology requirements, please refer to article <a href="https://software.intel.com/en-us/articles/getting-started-with-compute-offload-to-intelr-graphics-technology">Getting Started With Compute Offload to Intel®  Graphics Technology</a>
+            </p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Files</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="matmult.cpp">matmult.cpp</a>
+				<dd>Matrix multiplication Gen kernel implementation with the flow graph interface.
+				<dt><a href="Makefile">Makefile</a>
+				<dd>Makefile for building the example.
+			</dl>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+			<dt><a href="msvs/">msvs</a>
+			<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).
+			</dl>
+			<p>For information about the minimum supported version of IDE, see <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a></p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Build instructions</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>General build directions can be found <a href="../../index.html">here</a>.</p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Usage</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><tt>matmult <i>-h</i></tt>
+				<dd>Prints the help for command line options
+				<dt><tt>matmult [<i>-v</i>]</tt>
+				<dt>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
+				<dd>Build a <i>debug</i> version of the example
+					(see the <a href="../../index.html">build instructions</a>).
+			</dl>
+		</div>
+	</div>
+
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<a name="copyright"></a>
+	<div class="changes">
+	<div class="h3-alike">Legal Information</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+
+			<p>
+				THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+				OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+				WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+				ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+				DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+				DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+				GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+				INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+				WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+				NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+				SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+			</p>
+		</div>
+	</div>
+	
+</body>
+</html>
diff --git a/examples/graph/som/Makefile b/examples/graph/som/Makefile
index da4954c..0485676 100644
--- a/examples/graph/som/Makefile
+++ b/examples/graph/som/Makefile
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # GNU Makefile that builds and runs example.
 NAME=som
@@ -33,6 +33,8 @@ SRCFILES = som_graph.cpp som.cpp
 
 ifeq ($(shell uname), Linux)
 LIBS+= -lrt 
+else ifeq ($(shell uname), Darwin)
+override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib
 endif
 
 all:	release test
diff --git a/examples/graph/som/Makefile.windows b/examples/graph/som/Makefile.windows
new file mode 100644
index 0000000..c2ab843
--- /dev/null
+++ b/examples/graph/som/Makefile.windows
@@ -0,0 +1,46 @@
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+PROG=som
+ARGS=
+LIGHT_ARGS=4
+
+# Trying to find if icl.exe is set
+CXX1 = $(TBB_CXX)-
+CXX2 = $(CXX1:icl.exe-=icl.exe)
+CXX  = $(CXX2:-=cl.exe)
+
+# The C++ compiler options
+MYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS)
+MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
+
+all: release test
+release: 
+	$(CXX) ./som_graph.cpp ./som.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+debug: 
+	$(CXX) ./som_graph.cpp ./som.cpp /MDd /Od /Zi /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+clean:
+	@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest
+test:
+	$(PROG) $(ARGS)
+light_test:
+	$(PROG) $(LIGHT_ARGS)
+
diff --git a/examples/graph/som/Makefile.windows.windows b/examples/graph/som/Makefile.windows.windows
deleted file mode 100644
index 06c4a64..0000000
--- a/examples/graph/som/Makefile.windows.windows
+++ /dev/null
@@ -1,46 +0,0 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-#
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-#
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
-
-# Common Makefile that builds and runs example.
-
-# Just specify your program basename
-PROG=som
-ARGS=
-LIGHT_ARGS=4
-
-# Trying to find if icl.exe is set
-CXX1 = $(TBB_CXX)-
-CXX2 = $(CXX1:icl.exe-=icl.exe)
-CXX  = $(CXX2:-=cl.exe)
-
-# The C++ compiler options
-MYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS)
-MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
-
-all: release test
-release: 
-	$(CXX) ./som_graph.cpp ./som.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
-debug: 
-	$(CXX) ./som_graph.cpp ./som.cpp /MDd /Od /Zi /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
-clean:
-	@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest
-test:
-	$(PROG) $(ARGS)
-light_test:
-	$(PROG) $(LIGHT_ARGS)
-
diff --git a/examples/graph/som/index.html b/examples/graph/som/index.html
deleted file mode 100644
index 21a0997..0000000
--- a/examples/graph/som/index.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<HTML>
-<BODY>
-
-<H2>Overview</H2>
-The Self-Organizing Map demonstrates tbb::flow and the use of cancellation in scheduling multiple iterations of
-map updates.
-<p>
-For tutorials on Self-organizing Maps, see <a href="http://www.ai-junkie.com/ann/som/som1.html">here</a> and
-<a href="http://davis.wpi.edu/~matt/courses/soms/">here</a>.
-<p>
-The program trains the map with several examples, splitting the map into subsections and looking for best-match
-for multiple examples.  When an example is used to update the map, the graphs examining the sections being
-updated for the next example are cancelled and restarted after the update.
-
-<H2>Source Files</H2>
-<DL>
-<DT><A HREF="som_graph.cpp">som_graph.cpp</A>
-<DD>The main program.
-<DT><A HREF="som.cpp">som.cpp</A>
-<DD>utilities for handling the map.
-<DT><A HREF="som.h">som.h</A>
-<DD>Definitions and utilites.
-<DT><A HREF="Makefile">Makefile</A>, <A HREF=Makefile.windows>Makefile.windows</A>
-<DD>Makefiles for building example.
-</DL>
-
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2010 workspace for building and running the
-    example (Windows* systems only).
-<DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example (OS X*
-    systems only).</DL>
-
-<H2>To Build</H2>
-General build directions can be found <A HREF=../../index.html#build>here</A>.
-<P></P>
-
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
-
diff --git a/examples/graph/som/msvs/som.sln b/examples/graph/som/msvs/som.sln
index 88b536f..17db65f 100644
--- a/examples/graph/som/msvs/som.sln
+++ b/examples/graph/som/msvs/som.sln
@@ -1,26 +1,26 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "som", "som.vcxproj", "{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
-		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Debug|Win32.ActiveCfg = Debug|Win32
-		{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Debug|Win32.Build.0 = Debug|Win32
-		{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Debug|x64.ActiveCfg = Debug|x64
-		{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Debug|x64.Build.0 = Debug|x64
-		{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Release|Win32.ActiveCfg = Release|Win32
-		{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Release|Win32.Build.0 = Release|Win32
-		{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Release|x64.ActiveCfg = Release|x64
-		{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Release|x64.Build.0 = Release|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "som", "som.vcxproj", "{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Debug|Win32.ActiveCfg = Debug|Win32
+		{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Debug|Win32.Build.0 = Debug|Win32
+		{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Debug|x64.ActiveCfg = Debug|x64
+		{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Debug|x64.Build.0 = Debug|x64
+		{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Release|Win32.ActiveCfg = Release|Win32
+		{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Release|Win32.Build.0 = Release|Win32
+		{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Release|x64.ActiveCfg = Release|x64
+		{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/graph/som/msvs/som.vcxproj b/examples/graph/som/msvs/som.vcxproj
index c4b97d2..f7f0d72 100644
--- a/examples/graph/som/msvs/som.vcxproj
+++ b/examples/graph/som/msvs/som.vcxproj
@@ -1,213 +1,217 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>som</ProjectName>
-    <ProjectGuid>{b2ae2edc-697b-4c85-ac0d-e3e523d20d6d}</ProjectGuid>
-    <RootNamespace>som</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <Import Project="..\..\..\common\toolset.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <FixedBaseAddress>false</FixedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <FixedBaseAddress>false</FixedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX64</TargetMachine>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <FixedBaseAddress>false</FixedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <FixedBaseAddress>false</FixedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX64</TargetMachine>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\som.cpp" />
-    <ClCompile Include="..\som_graph.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\som.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="..\index.html" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>som</ProjectName>
+    <ProjectGuid>{b2ae2edc-697b-4c85-ac0d-e3e523d20d6d}</ProjectGuid>
+    <RootNamespace>som</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <FixedBaseAddress>false</FixedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <FixedBaseAddress>false</FixedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <FixedBaseAddress>false</FixedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <FixedBaseAddress>false</FixedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\som.cpp" />
+    <ClCompile Include="..\som_graph.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\som.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\readme.html" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/examples/graph/som/readme.html b/examples/graph/som/readme.html
new file mode 100644
index 0000000..be79d8a
--- /dev/null
+++ b/examples/graph/som/readme.html
@@ -0,0 +1,391 @@
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
+
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
+
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Self-Organizing Map (SOM) sample</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Self-Organizing Map (SOM) sample</h1>
+	</div>
+	
+	<p>
+		The Self-Organizing Map demonstrates tbb::flow and the use of cancellation in scheduling multiple iterations of
+		map updates.
+	<br><br>
+		For tutorials on Self-organizing Maps, see <a href="http://www.ai-junkie.com/ann/som/som1.html">here</a> and
+		<a href="http://davis.wpi.edu/~matt/courses/soms/">here</a>.
+	<br><br>
+		The program trains the map with several examples, splitting the map into subsections and looking for best-match
+		for multiple examples.  When an example is used to update the map, the graphs examining the sections being
+		updated for the next example are cancelled and restarted after the update.
+	</p>
+
+	<div class="changes">
+		<div class="h3-alike">System Requirements</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				For the most up to date system requirements, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
+			</p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Files</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="som_graph.cpp">som_graph.cpp</a>
+				<dd>The main program.
+				<dt><a href="som.cpp">som.cpp</a>
+				<dd>Utilities for handling the map.
+				<dt><a href="som.h">som.h</a>
+				<dd>Definitions and utilities.
+				<dt><a href="Makefile">Makefile</a>
+				<dd>Makefile for building the example.
+			</dl>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="msvs/">msvs</a>
+				<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).
+				<dt><a href="xcode/">xcode</a>
+				<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).
+			</dl>
+			<p>For information about the minimum supported version of IDE, see <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a></p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Build instructions</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>General build directions can be found <a href="../../index.html">here</a>.</p>
+		</div>
+	</div>
+	
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>	
+	
+</body>
+</html>
diff --git a/examples/graph/som/som.cpp b/examples/graph/som/som.cpp
index 895801f..6653d12 100644
--- a/examples/graph/som/som.cpp
+++ b/examples/graph/som/som.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 //
diff --git a/examples/graph/som/som.h b/examples/graph/som/som.h
index 1590db3..8727bcd 100644
--- a/examples/graph/som/som.h
+++ b/examples/graph/som/som.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 //
diff --git a/examples/graph/som/som_graph.cpp b/examples/graph/som/som_graph.cpp
index bf5e13f..a43c439 100644
--- a/examples/graph/som/som_graph.cpp
+++ b/examples/graph/som/som_graph.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 //
@@ -49,7 +49,7 @@
 #include "tbb/flow_graph.h"
 #include "tbb/blocked_range2d.h"
 #include "tbb/tick_count.h"
-#include "../examples/common/utility/utility.h"
+#include "../../common/utility/utility.h"
 
 #define RED 0
 #define GREEN 1
diff --git a/examples/graph/stereo/Makefile b/examples/graph/stereo/Makefile
new file mode 100644
index 0000000..f84c97d
--- /dev/null
+++ b/examples/graph/stereo/Makefile
@@ -0,0 +1,72 @@
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+# GNU Makefile that builds and runs example.
+run_cmd=
+PROG=stereo
+ARGS=
+PERF_RUN_ARGS=
+
+# icpc by default
+ifneq (,$(shell which icc 2>/dev/null))
+CXX=icpc
+endif
+
+# autodetect C++11 support
+include ../../common/examples-common.inc
+
+# TBB libs
+TBBLIB=-ltbb
+TBBLIB_DEBUG=-ltbb_debug
+
+# OpenCL lib
+OPENCL_LIB=-lOpenCL
+
+ifeq ($(shell uname), Linux)
+ifeq ($(target), android)
+LIBS+= --sysroot=$(SYSROOT)
+run_cmd=../../common/android.linux.launcher.sh
+else
+LIBS+= -lrt
+endif
+else
+ifeq ($(shell uname),Darwin)
+override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib
+override OPENCL_LIB=-framework OpenCL
+endif
+endif
+
+all: release test
+
+release: *.cpp
+	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ $(TBBLIB) $(OPENCL_LIB) $(LIBS) $(CXX0XFLAGS)
+
+debug: *.cpp
+	$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ $(TBBLIB_DEBUG) $(OPENCL_LIB) $(LIBS) $(CXX0XFLAGS)
+
+clean:
+	$(RM) $(PROG) *.o *.d
+
+test:
+	$(run_cmd) ./$(PROG) $(ARGS)
+
+perf_build: release
+
+perf_run:
+	$(run_cmd) ./$(PROG) $(PERF_RUN_ARGS)
+
diff --git a/examples/graph/stereo/Makefile.windows b/examples/graph/stereo/Makefile.windows
new file mode 100644
index 0000000..96417a4
--- /dev/null
+++ b/examples/graph/stereo/Makefile.windows
@@ -0,0 +1,57 @@
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+PROG=stereo
+ARGS=
+PERF_RUN_ARGS=
+
+# Trying to find if icl.exe is set
+CXX1 = $(TBB_CXX)-
+CXX2 = $(CXX1:icl.exe-=icl.exe)
+CXX  = $(CXX2:-=cl.exe)
+
+# TBB libs
+TBBLIB=tbb.lib
+TBBLIB_DEBUG=tbb_debug.lib
+
+# OpenCL lib
+OPENCL_LIB=OpenCL.lib
+
+# The C++ compiler options
+MYCXXFLAGS=/TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE /D _CRT_SECURE_NO_WARNINGS /D _SCL_SECURE_NO_WARNINGS $(CXXFLAGS)
+MYLDFLAGS=/INCREMENTAL:NO /NOLOGO /DEBUG $(LDFLAGS)
+
+all: release test
+release:
+	$(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link $(TBBLIB) $(OPENCL_LIB) $(MYLDFLAGS) /OUT:$(PROG).exe
+debug:
+	$(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link $(TBBLIB_DEBUG) $(OPENCL_LIB) $(MYLDFLAGS) /OUT:$(PROG).exe
+clean:
+	@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest
+test:
+	$(PROG) $(ARGS)
+compiler_check:
+	@$(CXX) >nul 2>&1 || echo "$(CXX) command not found. Check if CXX=$(CXX) is set properly"
+
+perf_build: release
+
+perf_run:
+	$(PROG) $(PERF_RUN_ARGS)
diff --git a/examples/graph/stereo/imageEffects.cl b/examples/graph/stereo/imageEffects.cl
new file mode 100644
index 0000000..fb3b6ca
--- /dev/null
+++ b/examples/graph/stereo/imageEffects.cl
@@ -0,0 +1,56 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+__constant int redChannelOffset = 0;
+__constant int greenChannelOffset = 1;
+__constant int blueChannelOffset = 2;
+__constant int channelsPerPixel = 4;
+__constant int channelIncreaseValue = 10;
+
+__kernel void mergeImages( __global uchar* bufferLeft, __global uchar* bufferRight, uint width) {
+    const int indexWidth = get_global_id(0);
+    const int indexHeight = get_global_id(1);
+
+    const int pixelIndex = channelsPerPixel * width * indexHeight + channelsPerPixel * indexWidth;
+    const int pixelGreenChannelIndex = pixelIndex + greenChannelOffset;
+    const int pixelBlueChannelIndex = pixelIndex + blueChannelOffset;
+
+    bufferLeft[pixelGreenChannelIndex] = (bufferRight[pixelGreenChannelIndex] + bufferLeft[pixelGreenChannelIndex]) / 2;
+    bufferLeft[pixelBlueChannelIndex] = bufferRight[pixelBlueChannelIndex];
+}
+
+__kernel void applyLeftImageEffect( __global uchar* bufferLeft, uint width) {
+    const int indexWidth = get_global_id(0);
+    const int indexHeight = get_global_id(1);
+
+    const int pixelRedChannelIndex = channelsPerPixel * width * indexHeight + channelsPerPixel * indexWidth + redChannelOffset;
+
+    bufferLeft[pixelRedChannelIndex] += channelIncreaseValue;
+}
+
+__kernel void applyRightImageEffect( __global uchar* bufferRight, uint width) {
+    const int indexWidth = get_global_id(0);
+    const int indexHeight = get_global_id(1);
+
+    const int pixelBlueChannelIndex = channelsPerPixel * width * indexHeight + channelsPerPixel * indexWidth + blueChannelOffset;
+
+    bufferRight[pixelBlueChannelIndex] += channelIncreaseValue;
+
+}
diff --git a/examples/graph/stereo/lodepng.cpp b/examples/graph/stereo/lodepng.cpp
new file mode 100644
index 0000000..92f1d4b
--- /dev/null
+++ b/examples/graph/stereo/lodepng.cpp
@@ -0,0 +1,6227 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+/*
+LodePNG version 20160409
+
+Copyright (c) 2005-2016 Lode Vandevenne
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+    1. The origin of this software must not be misrepresented; you must not
+    claim that you wrote the original software. If you use this software
+    in a product, an acknowledgment in the product documentation would be
+    appreciated but is not required.
+
+    2. Altered source versions must be plainly marked as such, and must not be
+    misrepresented as being the original software.
+
+    3. This notice may not be removed or altered from any source
+    distribution.
+*/
+
+/*
+The manual and changelog are in the header file "lodepng.h"
+Rename this file to lodepng.cpp to use it for C++, or to lodepng.c to use it for C.
+*/
+
+#include "lodepng.h"
+
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+/*Visual Studio: A few warning types are not desired here.*/
+#if defined(_MSC_VER) && (_MSC_VER >= 1310)
+#pragma warning( disable : 4244 ) /*implicit conversions: not warned by gcc -Wall -Wextra and requires too much casts*/
+#pragma warning( disable : 4996 ) /*VS does not like fopen, but fopen_s is not standard C so unusable here*/
+#endif /*_MSC_VER */
+
+const char* LODEPNG_VERSION_STRING = "20160409";
+
+/*
+This source file is built up in the following large parts. The code sections
+with the "LODEPNG_COMPILE_" #defines divide this up further in an intermixed way.
+-Tools for C and common code for PNG and Zlib
+-C Code for Zlib (huffman, deflate, ...)
+-C Code for PNG (file format chunks, adam7, PNG filters, color conversions, ...)
+-The C++ wrapper around all of the above
+*/
+
+/*The malloc, realloc and free functions defined here with "lodepng_" in front
+of the name, so that you can easily change them to others related to your
+platform if needed. Everything else in the code calls these. Pass
+-DLODEPNG_NO_COMPILE_ALLOCATORS to the compiler, or comment out
+#define LODEPNG_COMPILE_ALLOCATORS in the header, to disable the ones here and
+define them in your own project's source files without needing to change
+lodepng source code. Don't forget to remove "static" if you copypaste them
+from here.*/
+
+#ifdef LODEPNG_COMPILE_ALLOCATORS
+static void* lodepng_malloc(size_t size)
+{
+  return malloc(size);
+}
+
+static void* lodepng_realloc(void* ptr, size_t new_size)
+{
+  return realloc(ptr, new_size);
+}
+
+static void lodepng_free(void* ptr)
+{
+  free(ptr);
+}
+#else /*LODEPNG_COMPILE_ALLOCATORS*/
+void* lodepng_malloc(size_t size);
+void* lodepng_realloc(void* ptr, size_t new_size);
+void lodepng_free(void* ptr);
+#endif /*LODEPNG_COMPILE_ALLOCATORS*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* ////////////////////////////////////////////////////////////////////////// */
+/* // Tools for C, and common code for PNG and Zlib.                       // */
+/* ////////////////////////////////////////////////////////////////////////// */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+/*
+Often in case of an error a value is assigned to a variable and then it breaks
+out of a loop (to go to the cleanup phase of a function). This macro does that.
+It makes the error handling code shorter and more readable.
+
+Example: if(!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(83);
+*/
+#define CERROR_BREAK(errorvar, code)\
+{\
+  errorvar = code;\
+  break;\
+}
+
+/*version of CERROR_BREAK that assumes the common case where the error variable is named "error"*/
+#define ERROR_BREAK(code) CERROR_BREAK(error, code)
+
+/*Set error var to the error code, and return it.*/
+#define CERROR_RETURN_ERROR(errorvar, code)\
+{\
+  errorvar = code;\
+  return code;\
+}
+
+/*Try the code, if it returns error, also return the error.*/
+#define CERROR_TRY_RETURN(call)\
+{\
+  unsigned error = call;\
+  if(error) return error;\
+}
+
+/*Set error var to the error code, and return from the void function.*/
+#define CERROR_RETURN(errorvar, code)\
+{\
+  errorvar = code;\
+  return;\
+}
+
+/*
+About uivector, ucvector and string:
+-All of them wrap dynamic arrays or text strings in a similar way.
+-LodePNG was originally written in C++. The vectors replace the std::vectors that were used in the C++ version.
+-The string tools are made to avoid problems with compilers that declare things like strncat as deprecated.
+-They're not used in the interface, only internally in this file as static functions.
+-As with many other structs in this file, the init and cleanup functions serve as ctor and dtor.
+*/
+
+#ifdef LODEPNG_COMPILE_ZLIB
+/*dynamic vector of unsigned ints*/
+typedef struct uivector
+{
+  unsigned* data;
+  size_t size; /*size in number of unsigned longs*/
+  size_t allocsize; /*allocated size in bytes*/
+} uivector;
+
+static void uivector_cleanup(void* p)
+{
+  ((uivector*)p)->size = ((uivector*)p)->allocsize = 0;
+  lodepng_free(((uivector*)p)->data);
+  ((uivector*)p)->data = NULL;
+}
+
+/*returns 1 if success, 0 if failure ==> nothing done*/
+static unsigned uivector_reserve(uivector* p, size_t allocsize)
+{
+  if(allocsize > p->allocsize)
+  {
+    size_t newsize = (allocsize > p->allocsize * 2) ? allocsize : (allocsize * 3 / 2);
+    void* data = lodepng_realloc(p->data, newsize);
+    if(data)
+    {
+      p->allocsize = newsize;
+      p->data = (unsigned*)data;
+    }
+    else return 0; /*error: not enough memory*/
+  }
+  return 1;
+}
+
+/*returns 1 if success, 0 if failure ==> nothing done*/
+static unsigned uivector_resize(uivector* p, size_t size)
+{
+  if(!uivector_reserve(p, size * sizeof(unsigned))) return 0;
+  p->size = size;
+  return 1; /*success*/
+}
+
+/*resize and give all new elements the value*/
+static unsigned uivector_resizev(uivector* p, size_t size, unsigned value)
+{
+  size_t oldsize = p->size, i;
+  if(!uivector_resize(p, size)) return 0;
+  for(i = oldsize; i < size; ++i) p->data[i] = value;
+  return 1;
+}
+
+static void uivector_init(uivector* p)
+{
+  p->data = NULL;
+  p->size = p->allocsize = 0;
+}
+
+#ifdef LODEPNG_COMPILE_ENCODER
+/*returns 1 if success, 0 if failure ==> nothing done*/
+static unsigned uivector_push_back(uivector* p, unsigned c)
+{
+  if(!uivector_resize(p, p->size + 1)) return 0;
+  p->data[p->size - 1] = c;
+  return 1;
+}
+#endif /*LODEPNG_COMPILE_ENCODER*/
+#endif /*LODEPNG_COMPILE_ZLIB*/
+
+/* /////////////////////////////////////////////////////////////////////////// */
+
+/*dynamic vector of unsigned chars*/
+typedef struct ucvector
+{
+  unsigned char* data;
+  size_t size; /*used size*/
+  size_t allocsize; /*allocated size*/
+} ucvector;
+
+/*returns 1 if success, 0 if failure ==> nothing done*/
+static unsigned ucvector_reserve(ucvector* p, size_t allocsize)
+{
+  if(allocsize > p->allocsize)
+  {
+    size_t newsize = (allocsize > p->allocsize * 2) ? allocsize : (allocsize * 3 / 2);
+    void* data = lodepng_realloc(p->data, newsize);
+    if(data)
+    {
+      p->allocsize = newsize;
+      p->data = (unsigned char*)data;
+    }
+    else return 0; /*error: not enough memory*/
+  }
+  return 1;
+}
+
+/*returns 1 if success, 0 if failure ==> nothing done*/
+static unsigned ucvector_resize(ucvector* p, size_t size)
+{
+  if(!ucvector_reserve(p, size * sizeof(unsigned char))) return 0;
+  p->size = size;
+  return 1; /*success*/
+}
+
+#ifdef LODEPNG_COMPILE_PNG
+
+static void ucvector_cleanup(void* p)
+{
+  ((ucvector*)p)->size = ((ucvector*)p)->allocsize = 0;
+  lodepng_free(((ucvector*)p)->data);
+  ((ucvector*)p)->data = NULL;
+}
+
+static void ucvector_init(ucvector* p)
+{
+  p->data = NULL;
+  p->size = p->allocsize = 0;
+}
+#endif /*LODEPNG_COMPILE_PNG*/
+
+#ifdef LODEPNG_COMPILE_ZLIB
+/*you can both convert from vector to buffer&size and vica versa. If you use
+init_buffer to take over a buffer and size, it is not needed to use cleanup*/
+static void ucvector_init_buffer(ucvector* p, unsigned char* buffer, size_t size)
+{
+  p->data = buffer;
+  p->allocsize = p->size = size;
+}
+#endif /*LODEPNG_COMPILE_ZLIB*/
+
+#if (defined(LODEPNG_COMPILE_PNG) && defined(LODEPNG_COMPILE_ANCILLARY_CHUNKS)) || defined(LODEPNG_COMPILE_ENCODER)
+/*returns 1 if success, 0 if failure ==> nothing done*/
+static unsigned ucvector_push_back(ucvector* p, unsigned char c)
+{
+  if(!ucvector_resize(p, p->size + 1)) return 0;
+  p->data[p->size - 1] = c;
+  return 1;
+}
+#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)*/
+
+
+/* ////////////////////////////////////////////////////////////////////////// */
+
+#ifdef LODEPNG_COMPILE_PNG
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+/*returns 1 if success, 0 if failure ==> nothing done*/
+static unsigned string_resize(char** out, size_t size)
+{
+  char* data = (char*)lodepng_realloc(*out, size + 1);
+  if(data)
+  {
+    data[size] = 0; /*null termination char*/
+    *out = data;
+  }
+  return data != 0;
+}
+
+/*init a {char*, size_t} pair for use as string*/
+static void string_init(char** out)
+{
+  *out = NULL;
+  string_resize(out, 0);
+}
+
+/*free the above pair again*/
+static void string_cleanup(char** out)
+{
+  lodepng_free(*out);
+  *out = NULL;
+}
+
+static void string_set(char** out, const char* in)
+{
+  size_t insize = strlen(in), i;
+  if(string_resize(out, insize))
+  {
+    for(i = 0; i != insize; ++i)
+    {
+      (*out)[i] = in[i];
+    }
+  }
+}
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+#endif /*LODEPNG_COMPILE_PNG*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+
+unsigned lodepng_read32bitInt(const unsigned char* buffer)
+{
+  return (unsigned)((buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3]);
+}
+
+#if defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)
+/*buffer must have at least 4 allocated bytes available*/
+static void lodepng_set32bitInt(unsigned char* buffer, unsigned value)
+{
+  buffer[0] = (unsigned char)((value >> 24) & 0xff);
+  buffer[1] = (unsigned char)((value >> 16) & 0xff);
+  buffer[2] = (unsigned char)((value >>  8) & 0xff);
+  buffer[3] = (unsigned char)((value      ) & 0xff);
+}
+#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)*/
+
+#ifdef LODEPNG_COMPILE_ENCODER
+static void lodepng_add32bitInt(ucvector* buffer, unsigned value)
+{
+  ucvector_resize(buffer, buffer->size + 4); /*todo: give error if resize failed*/
+  lodepng_set32bitInt(&buffer->data[buffer->size - 4], value);
+}
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / File IO                                                                / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+#ifdef LODEPNG_COMPILE_DISK
+
+/* returns negative value on error. This should be pure C compatible, so no fstat. */
+static long lodepng_filesize(const char* filename)
+{
+  FILE* file;
+  long size;
+  file = fopen(filename, "rb");
+  if(!file) return -1;
+
+  if(fseek(file, 0, SEEK_END) != 0)
+  {
+    fclose(file);
+    return -1;
+  }
+
+  size = ftell(file);
+  /* It may give LONG_MAX as directory size, this is invalid for us. */
+  if(size == LONG_MAX) size = -1;
+
+  fclose(file);
+  return size;
+}
+
+/* load file into buffer that already has the correct allocated size. Returns error code.*/
+static unsigned lodepng_buffer_file(unsigned char* out, size_t size, const char* filename)
+{
+  FILE* file;
+  size_t readsize;
+  file = fopen(filename, "rb");
+  if(!file) return 78;
+
+  readsize = fread(out, 1, size, file);
+  fclose(file);
+
+  if (readsize != size) return 78;
+  return 0;
+}
+
+unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename)
+{
+  long size = lodepng_filesize(filename);
+  if (size < 0) return 78;
+  *outsize = (size_t)size;
+
+  *out = (unsigned char*)lodepng_malloc((size_t)size);
+  if(!(*out) && size > 0) return 83; /*the above malloc failed*/
+
+  return lodepng_buffer_file(*out, (size_t)size, filename);
+}
+
+/*write given buffer to the file, overwriting the file, it doesn't append to it.*/
+unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename)
+{
+  FILE* file;
+  file = fopen(filename, "wb" );
+  if(!file) return 79;
+  fwrite((char*)buffer , 1 , buffersize, file);
+  fclose(file);
+  return 0;
+}
+
+#endif /*LODEPNG_COMPILE_DISK*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* ////////////////////////////////////////////////////////////////////////// */
+/* // End of common code and tools. Begin of Zlib related code.            // */
+/* ////////////////////////////////////////////////////////////////////////// */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+#ifdef LODEPNG_COMPILE_ZLIB
+#ifdef LODEPNG_COMPILE_ENCODER
+/*TODO: this ignores potential out of memory errors*/
+#define addBitToStream(/*size_t**/ bitpointer, /*ucvector**/ bitstream, /*unsigned char*/ bit)\
+{\
+  /*add a new byte at the end*/\
+  if(((*bitpointer) & 7) == 0) ucvector_push_back(bitstream, (unsigned char)0);\
+  /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/\
+  (bitstream->data[bitstream->size - 1]) |= (bit << ((*bitpointer) & 0x7));\
+  ++(*bitpointer);\
+}
+
+static void addBitsToStream(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits)
+{
+  size_t i;
+  for(i = 0; i != nbits; ++i) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> i) & 1));
+}
+
+static void addBitsToStreamReversed(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits)
+{
+  size_t i;
+  for(i = 0; i != nbits; ++i) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> (nbits - 1 - i)) & 1));
+}
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+#ifdef LODEPNG_COMPILE_DECODER
+
+#define READBIT(bitpointer, bitstream) ((bitstream[bitpointer >> 3] >> (bitpointer & 0x7)) & (unsigned char)1)
+
+static unsigned char readBitFromStream(size_t* bitpointer, const unsigned char* bitstream)
+{
+  unsigned char result = (unsigned char)(READBIT(*bitpointer, bitstream));
+  ++(*bitpointer);
+  return result;
+}
+
+static unsigned readBitsFromStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits)
+{
+  unsigned result = 0, i;
+  for(i = 0; i != nbits; ++i)
+  {
+    result += ((unsigned)READBIT(*bitpointer, bitstream)) << i;
+    ++(*bitpointer);
+  }
+  return result;
+}
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / Deflate - Huffman                                                      / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+#define FIRST_LENGTH_CODE_INDEX 257
+#define LAST_LENGTH_CODE_INDEX 285
+/*256 literals, the end code, some length codes, and 2 unused codes*/
+#define NUM_DEFLATE_CODE_SYMBOLS 288
+/*the distance codes have their own symbols, 30 used, 2 unused*/
+#define NUM_DISTANCE_SYMBOLS 32
+/*the code length codes. 0-15: code lengths, 16: copy previous 3-6 times, 17: 3-10 zeros, 18: 11-138 zeros*/
+#define NUM_CODE_LENGTH_CODES 19
+
+/*the base lengths represented by codes 257-285*/
+static const unsigned LENGTHBASE[29]
+  = {3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59,
+     67, 83, 99, 115, 131, 163, 195, 227, 258};
+
+/*the extra bits used by codes 257-285 (added to base length)*/
+static const unsigned LENGTHEXTRA[29]
+  = {0, 0, 0, 0, 0, 0, 0,  0,  1,  1,  1,  1,  2,  2,  2,  2,  3,  3,  3,  3,
+      4,  4,  4,   4,   5,   5,   5,   5,   0};
+
+/*the base backwards distances (the bits of distance codes appear after length codes and use their own huffman tree)*/
+static const unsigned DISTANCEBASE[30]
+  = {1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513,
+     769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577};
+
+/*the extra bits of backwards distances (added to base)*/
+static const unsigned DISTANCEEXTRA[30]
+  = {0, 0, 0, 0, 1, 1, 2,  2,  3,  3,  4,  4,  5,  5,   6,   6,   7,   7,   8,
+       8,    9,    9,   10,   10,   11,   11,   12,    12,    13,    13};
+
+/*the order in which "code length alphabet code lengths" are stored, out of this
+the huffman tree of the dynamic huffman tree lengths is generated*/
+static const unsigned CLCL_ORDER[NUM_CODE_LENGTH_CODES]
+  = {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
+
+/* ////////////////////////////////////////////////////////////////////////// */
+
+/*
+Huffman tree struct, containing multiple representations of the tree
+*/
+typedef struct HuffmanTree
+{
+  unsigned* tree2d;
+  unsigned* tree1d;
+  unsigned* lengths; /*the lengths of the codes of the 1d-tree*/
+  unsigned maxbitlen; /*maximum number of bits a single code can get*/
+  unsigned numcodes; /*number of symbols in the alphabet = number of codes*/
+} HuffmanTree;
+
+/*function used for debug purposes to draw the tree in ascii art with C++*/
+/*
+static void HuffmanTree_draw(HuffmanTree* tree)
+{
+  std::cout << "tree. length: " << tree->numcodes << " maxbitlen: " << tree->maxbitlen << std::endl;
+  for(size_t i = 0; i != tree->tree1d.size; ++i)
+  {
+    if(tree->lengths.data[i])
+      std::cout << i << " " << tree->tree1d.data[i] << " " << tree->lengths.data[i] << std::endl;
+  }
+  std::cout << std::endl;
+}*/
+
+static void HuffmanTree_init(HuffmanTree* tree)
+{
+  tree->tree2d = 0;
+  tree->tree1d = 0;
+  tree->lengths = 0;
+}
+
+static void HuffmanTree_cleanup(HuffmanTree* tree)
+{
+  lodepng_free(tree->tree2d);
+  lodepng_free(tree->tree1d);
+  lodepng_free(tree->lengths);
+}
+
+/*the tree representation used by the decoder. return value is error*/
+static unsigned HuffmanTree_make2DTree(HuffmanTree* tree)
+{
+  unsigned nodefilled = 0; /*up to which node it is filled*/
+  unsigned treepos = 0; /*position in the tree (1 of the numcodes columns)*/
+  unsigned n, i;
+
+  tree->tree2d = (unsigned*)lodepng_malloc(tree->numcodes * 2 * sizeof(unsigned));
+  if(!tree->tree2d) return 83; /*alloc fail*/
+
+  /*
+  convert tree1d[] to tree2d[][]. In the 2D array, a value of 32767 means
+  uninited, a value >= numcodes is an address to another bit, a value < numcodes
+  is a code. The 2 rows are the 2 possible bit values (0 or 1), there are as
+  many columns as codes - 1.
+  A good huffman tree has N * 2 - 1 nodes, of which N - 1 are internal nodes.
+  Here, the internal nodes are stored (what their 0 and 1 option point to).
+  There is only memory for such good tree currently, if there are more nodes
+  (due to too long length codes), error 55 will happen
+  */
+  for(n = 0; n < tree->numcodes * 2; ++n)
+  {
+    tree->tree2d[n] = 32767; /*32767 here means the tree2d isn't filled there yet*/
+  }
+
+  for(n = 0; n < tree->numcodes; ++n) /*the codes*/
+  {
+    for(i = 0; i != tree->lengths[n]; ++i) /*the bits for this code*/
+    {
+      unsigned char bit = (unsigned char)((tree->tree1d[n] >> (tree->lengths[n] - i - 1)) & 1);
+      /*oversubscribed, see comment in lodepng_error_text*/
+      if(treepos > 2147483647 || treepos + 2 > tree->numcodes) return 55;
+      if(tree->tree2d[2 * treepos + bit] == 32767) /*not yet filled in*/
+      {
+        if(i + 1 == tree->lengths[n]) /*last bit*/
+        {
+          tree->tree2d[2 * treepos + bit] = n; /*put the current code in it*/
+          treepos = 0;
+        }
+        else
+        {
+          /*put address of the next step in here, first that address has to be found of course
+          (it's just nodefilled + 1)...*/
+          ++nodefilled;
+          /*addresses encoded with numcodes added to it*/
+          tree->tree2d[2 * treepos + bit] = nodefilled + tree->numcodes;
+          treepos = nodefilled;
+        }
+      }
+      else treepos = tree->tree2d[2 * treepos + bit] - tree->numcodes;
+    }
+  }
+
+  for(n = 0; n < tree->numcodes * 2; ++n)
+  {
+    if(tree->tree2d[n] == 32767) tree->tree2d[n] = 0; /*remove possible remaining 32767's*/
+  }
+
+  return 0;
+}
+
+/*
+Second step for the ...makeFromLengths and ...makeFromFrequencies functions.
+numcodes, lengths and maxbitlen must already be filled in correctly. return
+value is error.
+*/
+static unsigned HuffmanTree_makeFromLengths2(HuffmanTree* tree)
+{
+  uivector blcount;
+  uivector nextcode;
+  unsigned error = 0;
+  unsigned bits, n;
+
+  uivector_init(&blcount);
+  uivector_init(&nextcode);
+
+  tree->tree1d = (unsigned*)lodepng_malloc(tree->numcodes * sizeof(unsigned));
+  if(!tree->tree1d) error = 83; /*alloc fail*/
+
+  if(!uivector_resizev(&blcount, tree->maxbitlen + 1, 0)
+  || !uivector_resizev(&nextcode, tree->maxbitlen + 1, 0))
+    error = 83; /*alloc fail*/
+
+  if(!error)
+  {
+    /*step 1: count number of instances of each code length*/
+    for(bits = 0; bits != tree->numcodes; ++bits) ++blcount.data[tree->lengths[bits]];
+    /*step 2: generate the nextcode values*/
+    for(bits = 1; bits <= tree->maxbitlen; ++bits)
+    {
+      nextcode.data[bits] = (nextcode.data[bits - 1] + blcount.data[bits - 1]) << 1;
+    }
+    /*step 3: generate all the codes*/
+    for(n = 0; n != tree->numcodes; ++n)
+    {
+      if(tree->lengths[n] != 0) tree->tree1d[n] = nextcode.data[tree->lengths[n]]++;
+    }
+  }
+
+  uivector_cleanup(&blcount);
+  uivector_cleanup(&nextcode);
+
+  if(!error) return HuffmanTree_make2DTree(tree);
+  else return error;
+}
+
+/*
+given the code lengths (as stored in the PNG file), generate the tree as defined
+by Deflate. maxbitlen is the maximum bits that a code in the tree can have.
+return value is error.
+*/
+static unsigned HuffmanTree_makeFromLengths(HuffmanTree* tree, const unsigned* bitlen,
+                                            size_t numcodes, unsigned maxbitlen)
+{
+  unsigned i;
+  tree->lengths = (unsigned*)lodepng_malloc(numcodes * sizeof(unsigned));
+  if(!tree->lengths) return 83; /*alloc fail*/
+  for(i = 0; i != numcodes; ++i) tree->lengths[i] = bitlen[i];
+  tree->numcodes = (unsigned)numcodes; /*number of symbols*/
+  tree->maxbitlen = maxbitlen;
+  return HuffmanTree_makeFromLengths2(tree);
+}
+
+#ifdef LODEPNG_COMPILE_ENCODER
+
+/*BPM: Boundary Package Merge, see "A Fast and Space-Economical Algorithm for Length-Limited Coding",
+Jyrki Katajainen, Alistair Moffat, Andrew Turpin, 1995.*/
+
+/*chain node for boundary package merge*/
+typedef struct BPMNode
+{
+  int weight; /*the sum of all weights in this chain*/
+  unsigned index; /*index of this leaf node (called "count" in the paper)*/
+  struct BPMNode* tail; /*the next nodes in this chain (null if last)*/
+  int in_use;
+} BPMNode;
+
+/*lists of chains*/
+typedef struct BPMLists
+{
+  /*memory pool*/
+  unsigned memsize;
+  BPMNode* memory;
+  unsigned numfree;
+  unsigned nextfree;
+  BPMNode** freelist;
+  /*two heads of lookahead chains per list*/
+  unsigned listsize;
+  BPMNode** chains0;
+  BPMNode** chains1;
+} BPMLists;
+
+/*creates a new chain node with the given parameters, from the memory in the lists */
+static BPMNode* bpmnode_create(BPMLists* lists, int weight, unsigned index, BPMNode* tail)
+{
+  unsigned i;
+  BPMNode* result;
+
+  /*memory full, so garbage collect*/
+  if(lists->nextfree >= lists->numfree)
+  {
+    /*mark only those that are in use*/
+    for(i = 0; i != lists->memsize; ++i) lists->memory[i].in_use = 0;
+    for(i = 0; i != lists->listsize; ++i)
+    {
+      BPMNode* node;
+      for(node = lists->chains0[i]; node != 0; node = node->tail) node->in_use = 1;
+      for(node = lists->chains1[i]; node != 0; node = node->tail) node->in_use = 1;
+    }
+    /*collect those that are free*/
+    lists->numfree = 0;
+    for(i = 0; i != lists->memsize; ++i)
+    {
+      if(!lists->memory[i].in_use) lists->freelist[lists->numfree++] = &lists->memory[i];
+    }
+    lists->nextfree = 0;
+  }
+
+  result = lists->freelist[lists->nextfree++];
+  result->weight = weight;
+  result->index = index;
+  result->tail = tail;
+  return result;
+}
+
+static int bpmnode_compare(const void* a, const void* b)
+{
+  int wa = ((const BPMNode*)a)->weight;
+  int wb = ((const BPMNode*)b)->weight;
+  if(wa < wb) return -1;
+  if(wa > wb) return 1;
+  /*make the qsort a stable sort*/
+  return ((const BPMNode*)a)->index < ((const BPMNode*)b)->index ? 1 : -1;
+}
+
+/*Boundary Package Merge step, numpresent is the amount of leaves, and c is the current chain.*/
+static void boundaryPM(BPMLists* lists, BPMNode* leaves, size_t numpresent, int c, int num)
+{
+  unsigned lastindex = lists->chains1[c]->index;
+
+  if(c == 0)
+  {
+    if(lastindex >= numpresent) return;
+    lists->chains0[c] = lists->chains1[c];
+    lists->chains1[c] = bpmnode_create(lists, leaves[lastindex].weight, lastindex + 1, 0);
+  }
+  else
+  {
+    /*sum of the weights of the head nodes of the previous lookahead chains.*/
+    int sum = lists->chains0[c - 1]->weight + lists->chains1[c - 1]->weight;
+    lists->chains0[c] = lists->chains1[c];
+    if(lastindex < numpresent && sum > leaves[lastindex].weight)
+    {
+      lists->chains1[c] = bpmnode_create(lists, leaves[lastindex].weight, lastindex + 1, lists->chains1[c]->tail);
+      return;
+    }
+    lists->chains1[c] = bpmnode_create(lists, sum, lastindex, lists->chains1[c - 1]);
+    /*in the end we are only interested in the chain of the last list, so no
+    need to recurse if we're at the last one (this gives measurable speedup)*/
+    if(num + 1 < (int)(2 * numpresent - 2))
+    {
+      boundaryPM(lists, leaves, numpresent, c - 1, num);
+      boundaryPM(lists, leaves, numpresent, c - 1, num);
+    }
+  }
+}
+
+unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies,
+                                      size_t numcodes, unsigned maxbitlen)
+{
+  unsigned error = 0;
+  unsigned i;
+  size_t numpresent = 0; /*number of symbols with non-zero frequency*/
+  BPMNode* leaves; /*the symbols, only those with > 0 frequency*/
+
+  if(numcodes == 0) return 80; /*error: a tree of 0 symbols is not supposed to be made*/
+  if(( (size_t)1 << maxbitlen) < numcodes) return 80; /*error: represent all symbols*/
+
+  leaves = (BPMNode*)lodepng_malloc(numcodes * sizeof(*leaves));
+  if(!leaves) return 83; /*alloc fail*/
+
+  for(i = 0; i != numcodes; ++i)
+  {
+    if(frequencies[i] > 0)
+    {
+      leaves[numpresent].weight = (int)frequencies[i];
+      leaves[numpresent].index = i;
+      ++numpresent;
+    }
+  }
+
+  for(i = 0; i != numcodes; ++i) lengths[i] = 0;
+
+  /*ensure at least two present symbols. There should be at least one symbol
+  according to RFC 1951 section 3.2.7. Some decoders incorrectly require two. To
+  make these work as well ensure there are at least two symbols. The
+  Package-Merge code below also doesn't work correctly if there's only one
+  symbol, it'd give it the theoritical 0 bits but in practice zlib wants 1 bit*/
+  if(numpresent == 0)
+  {
+    lengths[0] = lengths[1] = 1; /*note that for RFC 1951 section 3.2.7, only lengths[0] = 1 is needed*/
+  }
+  else if(numpresent == 1)
+  {
+    lengths[leaves[0].index] = 1;
+    lengths[leaves[0].index == 0 ? 1 : 0] = 1;
+  }
+  else
+  {
+    BPMLists lists;
+    BPMNode* node;
+
+    qsort(leaves, numpresent, sizeof(BPMNode), bpmnode_compare);
+
+    lists.listsize = maxbitlen;
+    lists.memsize = 2 * maxbitlen * (maxbitlen + 1);
+    lists.nextfree = 0;
+    lists.numfree = lists.memsize;
+    lists.memory = (BPMNode*)lodepng_malloc(lists.memsize * sizeof(*lists.memory));
+    lists.freelist = (BPMNode**)lodepng_malloc(lists.memsize * sizeof(BPMNode*));
+    lists.chains0 = (BPMNode**)lodepng_malloc(lists.listsize * sizeof(BPMNode*));
+    lists.chains1 = (BPMNode**)lodepng_malloc(lists.listsize * sizeof(BPMNode*));
+    if(!lists.memory || !lists.freelist || !lists.chains0 || !lists.chains1) error = 83; /*alloc fail*/
+
+    if(!error)
+    {
+      for(i = 0; i != lists.memsize; ++i) lists.freelist[i] = &lists.memory[i];
+
+      bpmnode_create(&lists, leaves[0].weight, 1, 0);
+      bpmnode_create(&lists, leaves[1].weight, 2, 0);
+
+      for(i = 0; i != lists.listsize; ++i)
+      {
+        lists.chains0[i] = &lists.memory[0];
+        lists.chains1[i] = &lists.memory[1];
+      }
+
+      /*each boundaryPM call adds one chain to the last list, and we need 2 * numpresent - 2 chains.*/
+      for(i = 2; i != 2 * numpresent - 2; ++i) boundaryPM(&lists, leaves, numpresent, (int)maxbitlen - 1, (int)i);
+
+      for(node = lists.chains1[maxbitlen - 1]; node; node = node->tail)
+      {
+        for(i = 0; i != node->index; ++i) ++lengths[leaves[i].index];
+      }
+    }
+
+    lodepng_free(lists.memory);
+    lodepng_free(lists.freelist);
+    lodepng_free(lists.chains0);
+    lodepng_free(lists.chains1);
+  }
+
+  lodepng_free(leaves);
+  return error;
+}
+
+/*Create the Huffman tree given the symbol frequencies*/
+static unsigned HuffmanTree_makeFromFrequencies(HuffmanTree* tree, const unsigned* frequencies,
+                                                size_t mincodes, size_t numcodes, unsigned maxbitlen)
+{
+  unsigned error = 0;
+  while(!frequencies[numcodes - 1] && numcodes > mincodes) --numcodes; /*trim zeroes*/
+  tree->maxbitlen = maxbitlen;
+  tree->numcodes = (unsigned)numcodes; /*number of symbols*/
+  tree->lengths = (unsigned*)lodepng_realloc(tree->lengths, numcodes * sizeof(unsigned));
+  if(!tree->lengths) return 83; /*alloc fail*/
+  /*initialize all lengths to 0*/
+  memset(tree->lengths, 0, numcodes * sizeof(unsigned));
+
+  error = lodepng_huffman_code_lengths(tree->lengths, frequencies, numcodes, maxbitlen);
+  if(!error) error = HuffmanTree_makeFromLengths2(tree);
+  return error;
+}
+
+static unsigned HuffmanTree_getCode(const HuffmanTree* tree, unsigned index)
+{
+  return tree->tree1d[index];
+}
+
+static unsigned HuffmanTree_getLength(const HuffmanTree* tree, unsigned index)
+{
+  return tree->lengths[index];
+}
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+/*get the literal and length code tree of a deflated block with fixed tree, as per the deflate specification*/
+static unsigned generateFixedLitLenTree(HuffmanTree* tree)
+{
+  unsigned i, error = 0;
+  unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned));
+  if(!bitlen) return 83; /*alloc fail*/
+
+  /*288 possible codes: 0-255=literals, 256=endcode, 257-285=lengthcodes, 286-287=unused*/
+  for(i =   0; i <= 143; ++i) bitlen[i] = 8;
+  for(i = 144; i <= 255; ++i) bitlen[i] = 9;
+  for(i = 256; i <= 279; ++i) bitlen[i] = 7;
+  for(i = 280; i <= 287; ++i) bitlen[i] = 8;
+
+  error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DEFLATE_CODE_SYMBOLS, 15);
+
+  lodepng_free(bitlen);
+  return error;
+}
+
+/*get the distance code tree of a deflated block with fixed tree, as specified in the deflate specification*/
+static unsigned generateFixedDistanceTree(HuffmanTree* tree)
+{
+  unsigned i, error = 0;
+  unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned));
+  if(!bitlen) return 83; /*alloc fail*/
+
+  /*there are 32 distance codes, but 30-31 are unused*/
+  for(i = 0; i != NUM_DISTANCE_SYMBOLS; ++i) bitlen[i] = 5;
+  error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DISTANCE_SYMBOLS, 15);
+
+  lodepng_free(bitlen);
+  return error;
+}
+
+#ifdef LODEPNG_COMPILE_DECODER
+
+/*
+returns the code, or (unsigned)(-1) if error happened
+inbitlength is the length of the complete buffer, in bits (so its byte length times 8)
+*/
+static unsigned huffmanDecodeSymbol(const unsigned char* in, size_t* bp,
+                                    const HuffmanTree* codetree, size_t inbitlength)
+{
+  unsigned treepos = 0, ct;
+  for(;;)
+  {
+    if(*bp >= inbitlength) return (unsigned)(-1); /*error: end of input memory reached without endcode*/
+    /*
+    decode the symbol from the tree. The "readBitFromStream" code is inlined in
+    the expression below because this is the biggest bottleneck while decoding
+    */
+    ct = codetree->tree2d[(treepos << 1) + READBIT(*bp, in)];
+    ++(*bp);
+    if(ct < codetree->numcodes) return ct; /*the symbol is decoded, return it*/
+    else treepos = ct - codetree->numcodes; /*symbol not yet decoded, instead move tree position*/
+
+    if(treepos >= codetree->numcodes) return (unsigned)(-1); /*error: it appeared outside the codetree*/
+  }
+}
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+#ifdef LODEPNG_COMPILE_DECODER
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / Inflator (Decompressor)                                                / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+/*get the tree of a deflated block with fixed tree, as specified in the deflate specification*/
+static void getTreeInflateFixed(HuffmanTree* tree_ll, HuffmanTree* tree_d)
+{
+  /*TODO: check for out of memory errors*/
+  generateFixedLitLenTree(tree_ll);
+  generateFixedDistanceTree(tree_d);
+}
+
+/*get the tree of a deflated block with dynamic tree, the tree itself is also Huffman compressed with a known tree*/
+static unsigned getTreeInflateDynamic(HuffmanTree* tree_ll, HuffmanTree* tree_d,
+                                      const unsigned char* in, size_t* bp, size_t inlength)
+{
+  /*make sure that length values that aren't filled in will be 0, or a wrong tree will be generated*/
+  unsigned error = 0;
+  unsigned n, HLIT, HDIST, HCLEN, i;
+  size_t inbitlength = inlength * 8;
+
+  /*see comments in deflateDynamic for explanation of the context and these variables, it is analogous*/
+  unsigned* bitlen_ll = 0; /*lit,len code lengths*/
+  unsigned* bitlen_d = 0; /*dist code lengths*/
+  /*code length code lengths ("clcl"), the bit lengths of the huffman tree used to compress bitlen_ll and bitlen_d*/
+  unsigned* bitlen_cl = 0;
+  HuffmanTree tree_cl; /*the code tree for code length codes (the huffman tree for compressed huffman trees)*/
+
+  if((*bp) + 14 > (inlength << 3)) return 49; /*error: the bit pointer is or will go past the memory*/
+
+  /*number of literal/length codes + 257. Unlike the spec, the value 257 is added to it here already*/
+  HLIT =  readBitsFromStream(bp, in, 5) + 257;
+  /*number of distance codes. Unlike the spec, the value 1 is added to it here already*/
+  HDIST = readBitsFromStream(bp, in, 5) + 1;
+  /*number of code length codes. Unlike the spec, the value 4 is added to it here already*/
+  HCLEN = readBitsFromStream(bp, in, 4) + 4;
+
+  if((*bp) + HCLEN * 3 > (inlength << 3)) return 50; /*error: the bit pointer is or will go past the memory*/
+
+  HuffmanTree_init(&tree_cl);
+
+  while(!error)
+  {
+    /*read the code length codes out of 3 * (amount of code length codes) bits*/
+
+    bitlen_cl = (unsigned*)lodepng_malloc(NUM_CODE_LENGTH_CODES * sizeof(unsigned));
+    if(!bitlen_cl) ERROR_BREAK(83 /*alloc fail*/);
+
+    for(i = 0; i != NUM_CODE_LENGTH_CODES; ++i)
+    {
+      if(i < HCLEN) bitlen_cl[CLCL_ORDER[i]] = readBitsFromStream(bp, in, 3);
+      else bitlen_cl[CLCL_ORDER[i]] = 0; /*if not, it must stay 0*/
+    }
+
+    error = HuffmanTree_makeFromLengths(&tree_cl, bitlen_cl, NUM_CODE_LENGTH_CODES, 7);
+    if(error) break;
+
+    /*now we can use this tree to read the lengths for the tree that this function will return*/
+    bitlen_ll = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned));
+    bitlen_d = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned));
+    if(!bitlen_ll || !bitlen_d) ERROR_BREAK(83 /*alloc fail*/);
+    for(i = 0; i != NUM_DEFLATE_CODE_SYMBOLS; ++i) bitlen_ll[i] = 0;
+    for(i = 0; i != NUM_DISTANCE_SYMBOLS; ++i) bitlen_d[i] = 0;
+
+    /*i is the current symbol we're reading in the part that contains the code lengths of lit/len and dist codes*/
+    i = 0;
+    while(i < HLIT + HDIST)
+    {
+      unsigned code = huffmanDecodeSymbol(in, bp, &tree_cl, inbitlength);
+      if(code <= 15) /*a length code*/
+      {
+        if(i < HLIT) bitlen_ll[i] = code;
+        else bitlen_d[i - HLIT] = code;
+        ++i;
+      }
+      else if(code == 16) /*repeat previous*/
+      {
+        unsigned replength = 3; /*read in the 2 bits that indicate repeat length (3-6)*/
+        unsigned value; /*set value to the previous code*/
+
+        if(i == 0) ERROR_BREAK(54); /*can't repeat previous if i is 0*/
+
+        if((*bp + 2) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/
+        replength += readBitsFromStream(bp, in, 2);
+
+        if(i < HLIT + 1) value = bitlen_ll[i - 1];
+        else value = bitlen_d[i - HLIT - 1];
+        /*repeat this value in the next lengths*/
+        for(n = 0; n < replength; ++n)
+        {
+          if(i >= HLIT + HDIST) ERROR_BREAK(13); /*error: i is larger than the amount of codes*/
+          if(i < HLIT) bitlen_ll[i] = value;
+          else bitlen_d[i - HLIT] = value;
+          ++i;
+        }
+      }
+      else if(code == 17) /*repeat "0" 3-10 times*/
+      {
+        unsigned replength = 3; /*read in the bits that indicate repeat length*/
+        if((*bp + 3) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/
+        replength += readBitsFromStream(bp, in, 3);
+
+        /*repeat this value in the next lengths*/
+        for(n = 0; n < replength; ++n)
+        {
+          if(i >= HLIT + HDIST) ERROR_BREAK(14); /*error: i is larger than the amount of codes*/
+
+          if(i < HLIT) bitlen_ll[i] = 0;
+          else bitlen_d[i - HLIT] = 0;
+          ++i;
+        }
+      }
+      else if(code == 18) /*repeat "0" 11-138 times*/
+      {
+        unsigned replength = 11; /*read in the bits that indicate repeat length*/
+        if((*bp + 7) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/
+        replength += readBitsFromStream(bp, in, 7);
+
+        /*repeat this value in the next lengths*/
+        for(n = 0; n < replength; ++n)
+        {
+          if(i >= HLIT + HDIST) ERROR_BREAK(15); /*error: i is larger than the amount of codes*/
+
+          if(i < HLIT) bitlen_ll[i] = 0;
+          else bitlen_d[i - HLIT] = 0;
+          ++i;
+        }
+      }
+      else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/
+      {
+        if(code == (unsigned)(-1))
+        {
+          /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol
+          (10=no endcode, 11=wrong jump outside of tree)*/
+          error = (*bp) > inbitlength ? 10 : 11;
+        }
+        else error = 16; /*unexisting code, this can never happen*/
+        break;
+      }
+    }
+    if(error) break;
+
+    if(bitlen_ll[256] == 0) ERROR_BREAK(64); /*the length of the end code 256 must be larger than 0*/
+
+    /*now we've finally got HLIT and HDIST, so generate the code trees, and the function is done*/
+    error = HuffmanTree_makeFromLengths(tree_ll, bitlen_ll, NUM_DEFLATE_CODE_SYMBOLS, 15);
+    if(error) break;
+    error = HuffmanTree_makeFromLengths(tree_d, bitlen_d, NUM_DISTANCE_SYMBOLS, 15);
+
+    break; /*end of error-while*/
+  }
+
+  lodepng_free(bitlen_cl);
+  lodepng_free(bitlen_ll);
+  lodepng_free(bitlen_d);
+  HuffmanTree_cleanup(&tree_cl);
+
+  return error;
+}
+
+/*inflate a block with dynamic of fixed Huffman tree*/
+static unsigned inflateHuffmanBlock(ucvector* out, const unsigned char* in, size_t* bp,
+                                    size_t* pos, size_t inlength, unsigned btype)
+{
+  unsigned error = 0;
+  HuffmanTree tree_ll; /*the huffman tree for literal and length codes*/
+  HuffmanTree tree_d; /*the huffman tree for distance codes*/
+  size_t inbitlength = inlength * 8;
+
+  HuffmanTree_init(&tree_ll);
+  HuffmanTree_init(&tree_d);
+
+  if(btype == 1) getTreeInflateFixed(&tree_ll, &tree_d);
+  else if(btype == 2) error = getTreeInflateDynamic(&tree_ll, &tree_d, in, bp, inlength);
+
+  while(!error) /*decode all symbols until end reached, breaks at end code*/
+  {
+    /*code_ll is literal, length or end code*/
+    unsigned code_ll = huffmanDecodeSymbol(in, bp, &tree_ll, inbitlength);
+    if(code_ll <= 255) /*literal symbol*/
+    {
+      /*ucvector_push_back would do the same, but for some reason the two lines below run 10% faster*/
+      if(!ucvector_resize(out, (*pos) + 1)) ERROR_BREAK(83 /*alloc fail*/);
+      out->data[*pos] = (unsigned char)code_ll;
+      ++(*pos);
+    }
+    else if(code_ll >= FIRST_LENGTH_CODE_INDEX && code_ll <= LAST_LENGTH_CODE_INDEX) /*length code*/
+    {
+      unsigned code_d, distance;
+      unsigned numextrabits_l, numextrabits_d; /*extra bits for length and distance*/
+      size_t start, forward, backward, length;
+
+      /*part 1: get length base*/
+      length = LENGTHBASE[code_ll - FIRST_LENGTH_CODE_INDEX];
+
+      /*part 2: get extra bits and add the value of that to length*/
+      numextrabits_l = LENGTHEXTRA[code_ll - FIRST_LENGTH_CODE_INDEX];
+      if((*bp + numextrabits_l) > inbitlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/
+      length += readBitsFromStream(bp, in, numextrabits_l);
+
+      /*part 3: get distance code*/
+      code_d = huffmanDecodeSymbol(in, bp, &tree_d, inbitlength);
+      if(code_d > 29)
+      {
+        if(code_ll == (unsigned)(-1)) /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/
+        {
+          /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol
+          (10=no endcode, 11=wrong jump outside of tree)*/
+          error = (*bp) > inlength * 8 ? 10 : 11;
+        }
+        else error = 18; /*error: invalid distance code (30-31 are never used)*/
+        break;
+      }
+      distance = DISTANCEBASE[code_d];
+
+      /*part 4: get extra bits from distance*/
+      numextrabits_d = DISTANCEEXTRA[code_d];
+      if((*bp + numextrabits_d) > inbitlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/
+      distance += readBitsFromStream(bp, in, numextrabits_d);
+
+      /*part 5: fill in all the out[n] values based on the length and dist*/
+      start = (*pos);
+      if(distance > start) ERROR_BREAK(52); /*too long backward distance*/
+      backward = start - distance;
+
+      if(!ucvector_resize(out, (*pos) + length)) ERROR_BREAK(83 /*alloc fail*/);
+      if (distance < length) {
+        for(forward = 0; forward < length; ++forward)
+        {
+          out->data[(*pos)++] = out->data[backward++];
+        }
+      } else {
+        memcpy(out->data + *pos, out->data + backward, length);
+        *pos += length;
+      }
+    }
+    else if(code_ll == 256)
+    {
+      break; /*end code, break the loop*/
+    }
+    else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/
+    {
+      /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol
+      (10=no endcode, 11=wrong jump outside of tree)*/
+      error = ((*bp) > inlength * 8) ? 10 : 11;
+      break;
+    }
+  }
+
+  HuffmanTree_cleanup(&tree_ll);
+  HuffmanTree_cleanup(&tree_d);
+
+  return error;
+}
+
+static unsigned inflateNoCompression(ucvector* out, const unsigned char* in, size_t* bp, size_t* pos, size_t inlength)
+{
+  size_t p;
+  unsigned LEN, NLEN, n, error = 0;
+
+  /*go to first boundary of byte*/
+  while(((*bp) & 0x7) != 0) ++(*bp);
+  p = (*bp) / 8; /*byte position*/
+
+  /*read LEN (2 bytes) and NLEN (2 bytes)*/
+  if(p + 4 >= inlength) return 52; /*error, bit pointer will jump past memory*/
+  LEN = in[p] + 256u * in[p + 1]; p += 2;
+  NLEN = in[p] + 256u * in[p + 1]; p += 2;
+
+  /*check if 16-bit NLEN is really the one's complement of LEN*/
+  if(LEN + NLEN != 65535) return 21; /*error: NLEN is not one's complement of LEN*/
+
+  if(!ucvector_resize(out, (*pos) + LEN)) return 83; /*alloc fail*/
+
+  /*read the literal data: LEN bytes are now stored in the out buffer*/
+  if(p + LEN > inlength) return 23; /*error: reading outside of in buffer*/
+  for(n = 0; n < LEN; ++n) out->data[(*pos)++] = in[p++];
+
+  (*bp) = p * 8;
+
+  return error;
+}
+
+static unsigned lodepng_inflatev(ucvector* out,
+                                 const unsigned char* in, size_t insize,
+                                 const LodePNGDecompressSettings* settings)
+{
+  /*bit pointer in the "in" data, current byte is bp >> 3, current bit is bp & 0x7 (from lsb to msb of the byte)*/
+  size_t bp = 0;
+  unsigned BFINAL = 0;
+  size_t pos = 0; /*byte position in the out buffer*/
+  unsigned error = 0;
+
+  (void)settings;
+
+  while(!BFINAL)
+  {
+    unsigned BTYPE;
+    if(bp + 2 >= insize * 8) return 52; /*error, bit pointer will jump past memory*/
+    BFINAL = readBitFromStream(&bp, in);
+    BTYPE = 1u * readBitFromStream(&bp, in);
+    BTYPE += 2u * readBitFromStream(&bp, in);
+
+    if(BTYPE == 3) return 20; /*error: invalid BTYPE*/
+    else if(BTYPE == 0) error = inflateNoCompression(out, in, &bp, &pos, insize); /*no compression*/
+    else error = inflateHuffmanBlock(out, in, &bp, &pos, insize, BTYPE); /*compression, BTYPE 01 or 10*/
+
+    if(error) return error;
+  }
+
+  return error;
+}
+
+unsigned lodepng_inflate(unsigned char** out, size_t* outsize,
+                         const unsigned char* in, size_t insize,
+                         const LodePNGDecompressSettings* settings)
+{
+  unsigned error;
+  ucvector v;
+  ucvector_init_buffer(&v, *out, *outsize);
+  error = lodepng_inflatev(&v, in, insize, settings);
+  *out = v.data;
+  *outsize = v.size;
+  return error;
+}
+
+static unsigned inflate(unsigned char** out, size_t* outsize,
+                        const unsigned char* in, size_t insize,
+                        const LodePNGDecompressSettings* settings)
+{
+  if(settings->custom_inflate)
+  {
+    return settings->custom_inflate(out, outsize, in, insize, settings);
+  }
+  else
+  {
+    return lodepng_inflate(out, outsize, in, insize, settings);
+  }
+}
+
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+#ifdef LODEPNG_COMPILE_ENCODER
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / Deflator (Compressor)                                                  / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+static const size_t MAX_SUPPORTED_DEFLATE_LENGTH = 258;
+
+/*bitlen is the size in bits of the code*/
+static void addHuffmanSymbol(size_t* bp, ucvector* compressed, unsigned code, unsigned bitlen)
+{
+  addBitsToStreamReversed(bp, compressed, code, bitlen);
+}
+
+/*search the index in the array, that has the largest value smaller than or equal to the given value,
+given array must be sorted (if no value is smaller, it returns the size of the given array)*/
+static size_t searchCodeIndex(const unsigned* array, size_t array_size, size_t value)
+{
+  /*binary search (only small gain over linear). TODO: use CPU log2 instruction for getting symbols instead*/
+  size_t left = 1;
+  size_t right = array_size - 1;
+
+  while(left <= right) {
+    size_t mid = (left + right) >> 1;
+    if (array[mid] >= value) right = mid - 1;
+    else left = mid + 1;
+  }
+  if(left >= array_size || array[left] > value) left--;
+  return left;
+}
+
+static void addLengthDistance(uivector* values, size_t length, size_t distance)
+{
+  /*values in encoded vector are those used by deflate:
+  0-255: literal bytes
+  256: end
+  257-285: length/distance pair (length code, followed by extra length bits, distance code, extra distance bits)
+  286-287: invalid*/
+
+  unsigned length_code = (unsigned)searchCodeIndex(LENGTHBASE, 29, length);
+  unsigned extra_length = (unsigned)(length - LENGTHBASE[length_code]);
+  unsigned dist_code = (unsigned)searchCodeIndex(DISTANCEBASE, 30, distance);
+  unsigned extra_distance = (unsigned)(distance - DISTANCEBASE[dist_code]);
+
+  uivector_push_back(values, length_code + FIRST_LENGTH_CODE_INDEX);
+  uivector_push_back(values, extra_length);
+  uivector_push_back(values, dist_code);
+  uivector_push_back(values, extra_distance);
+}
+
+/*3 bytes of data get encoded into two bytes. The hash cannot use more than 3
+bytes as input because 3 is the minimum match length for deflate*/
+static const unsigned HASH_NUM_VALUES = 65536;
+static const unsigned HASH_BIT_MASK = 65535; /*HASH_NUM_VALUES - 1, but C90 does not like that as initializer*/
+
+typedef struct Hash
+{
+  int* head; /*hash value to head circular pos - can be outdated if went around window*/
+  /*circular pos to prev circular pos*/
+  unsigned short* chain;
+  int* val; /*circular pos to hash value*/
+
+  /*TODO: do this not only for zeros but for any repeated byte. However for PNG
+  it's always going to be the zeros that dominate, so not important for PNG*/
+  int* headz; /*similar to head, but for chainz*/
+  unsigned short* chainz; /*those with same amount of zeros*/
+  unsigned short* zeros; /*length of zeros streak, used as a second hash chain*/
+} Hash;
+
+static unsigned hash_init(Hash* hash, unsigned windowsize)
+{
+  unsigned i;
+  hash->head = (int*)lodepng_malloc(sizeof(int) * HASH_NUM_VALUES);
+  hash->val = (int*)lodepng_malloc(sizeof(int) * windowsize);
+  hash->chain = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize);
+
+  hash->zeros = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize);
+  hash->headz = (int*)lodepng_malloc(sizeof(int) * (MAX_SUPPORTED_DEFLATE_LENGTH + 1));
+  hash->chainz = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize);
+
+  if(!hash->head || !hash->chain || !hash->val  || !hash->headz|| !hash->chainz || !hash->zeros)
+  {
+    return 83; /*alloc fail*/
+  }
+
+  /*initialize hash table*/
+  for(i = 0; i != HASH_NUM_VALUES; ++i) hash->head[i] = -1;
+  for(i = 0; i != windowsize; ++i) hash->val[i] = -1;
+  for(i = 0; i != windowsize; ++i) hash->chain[i] = i; /*same value as index indicates uninitialized*/
+
+  for(i = 0; i <= MAX_SUPPORTED_DEFLATE_LENGTH; ++i) hash->headz[i] = -1;
+  for(i = 0; i != windowsize; ++i) hash->chainz[i] = i; /*same value as index indicates uninitialized*/
+
+  return 0;
+}
+
+static void hash_cleanup(Hash* hash)
+{
+  lodepng_free(hash->head);
+  lodepng_free(hash->val);
+  lodepng_free(hash->chain);
+
+  lodepng_free(hash->zeros);
+  lodepng_free(hash->headz);
+  lodepng_free(hash->chainz);
+}
+
+
+
+static unsigned getHash(const unsigned char* data, size_t size, size_t pos)
+{
+  unsigned result = 0;
+  if(pos + 2 < size)
+  {
+    /*A simple shift and xor hash is used. Since the data of PNGs is dominated
+    by zeroes due to the filters, a better hash does not have a significant
+    effect on speed in traversing the chain, and causes more time spend on
+    calculating the hash.*/
+    result ^= (unsigned)(data[pos + 0] << 0u);
+    result ^= (unsigned)(data[pos + 1] << 4u);
+    result ^= (unsigned)(data[pos + 2] << 8u);
+  } else {
+    size_t amount, i;
+    if(pos >= size) return 0;
+    amount = size - pos;
+    for(i = 0; i != amount; ++i) result ^= (unsigned)(data[pos + i] << (i * 8u));
+  }
+  return result & HASH_BIT_MASK;
+}
+
+static unsigned countZeros(const unsigned char* data, size_t size, size_t pos)
+{
+  const unsigned char* start = data + pos;
+  const unsigned char* end = start + MAX_SUPPORTED_DEFLATE_LENGTH;
+  if(end > data + size) end = data + size;
+  data = start;
+  while(data != end && *data == 0) ++data;
+  /*subtracting two addresses returned as 32-bit number (max value is MAX_SUPPORTED_DEFLATE_LENGTH)*/
+  return (unsigned)(data - start);
+}
+
+/*wpos = pos & (windowsize - 1)*/
+static void updateHashChain(Hash* hash, int wpos, unsigned hashval, unsigned short numzeros)
+{
+  hash->val[wpos] = (int)hashval;
+  if(hash->head[hashval] != -1) hash->chain[wpos] = hash->head[hashval];
+  hash->head[hashval] = wpos;
+
+  hash->zeros[wpos] = numzeros;
+  if(hash->headz[numzeros] != -1) hash->chainz[wpos] = hash->headz[numzeros];
+  hash->headz[numzeros] = wpos;
+}
+
+/*
+LZ77-encode the data. Return value is error code. The input are raw bytes, the output
+is in the form of unsigned integers with codes representing for example literal bytes, or
+length/distance pairs.
+It uses a hash table technique to let it encode faster. When doing LZ77 encoding, a
+sliding window (of windowsize) is used, and all past bytes in that window can be used as
+the "dictionary". A brute force search through all possible distances would be slow, and
+this hash technique is one out of several ways to speed this up.
+*/
+static unsigned encodeLZ77(uivector* out, Hash* hash,
+                           const unsigned char* in, size_t inpos, size_t insize, unsigned windowsize,
+                           unsigned minmatch, unsigned nicematch, unsigned lazymatching)
+{
+  size_t pos;
+  unsigned i, error = 0;
+  /*for large window lengths, assume the user wants no compression loss. Otherwise, max hash chain length speedup.*/
+  unsigned maxchainlength = windowsize >= 8192 ? windowsize : windowsize / 8;
+  unsigned maxlazymatch = windowsize >= 8192 ? MAX_SUPPORTED_DEFLATE_LENGTH : 64;
+
+  unsigned usezeros = 1; /*not sure if setting it to false for windowsize < 8192 is better or worse*/
+  unsigned numzeros = 0;
+
+  unsigned offset; /*the offset represents the distance in LZ77 terminology*/
+  unsigned length;
+  unsigned lazy = 0;
+  unsigned lazylength = 0, lazyoffset = 0;
+  unsigned hashval;
+  unsigned current_offset, current_length;
+  unsigned prev_offset;
+  const unsigned char *lastptr, *foreptr, *backptr;
+  unsigned hashpos;
+
+  if(windowsize == 0 || windowsize > 32768) return 60; /*error: windowsize smaller/larger than allowed*/
+  if((windowsize & (windowsize - 1)) != 0) return 90; /*error: must be power of two*/
+
+  if(nicematch > MAX_SUPPORTED_DEFLATE_LENGTH) nicematch = MAX_SUPPORTED_DEFLATE_LENGTH;
+
+  for(pos = inpos; pos < insize; ++pos)
+  {
+    unsigned int wpos = pos & (windowsize - 1); /*position for in 'circular' hash buffers*/
+    unsigned chainlength = 0;
+
+    hashval = getHash(in, insize, pos);
+
+    if(usezeros && hashval == 0)
+    {
+      if(numzeros == 0) numzeros = countZeros(in, insize, pos);
+      else if(pos + numzeros > insize || in[pos + numzeros - 1] != 0) --numzeros;
+    }
+    else
+    {
+      numzeros = 0;
+    }
+
+    updateHashChain(hash, wpos, hashval, numzeros);
+
+    /*the length and offset found for the current position*/
+    length = 0;
+    offset = 0;
+
+    hashpos = hash->chain[wpos];
+
+    lastptr = &in[insize < pos + MAX_SUPPORTED_DEFLATE_LENGTH ? insize : pos + MAX_SUPPORTED_DEFLATE_LENGTH];
+
+    /*search for the longest string*/
+    prev_offset = 0;
+    for(;;)
+    {
+      if(chainlength++ >= maxchainlength) break;
+      current_offset = hashpos <= wpos ? wpos - hashpos : wpos - hashpos + windowsize;
+
+      if(current_offset < prev_offset) break; /*stop when went completely around the circular buffer*/
+      prev_offset = current_offset;
+      if(current_offset > 0)
+      {
+        /*test the next characters*/
+        foreptr = &in[pos];
+        backptr = &in[pos - current_offset];
+
+        /*common case in PNGs is lots of zeros. Quickly skip over them as a speedup*/
+        if(numzeros >= 3)
+        {
+          unsigned skip = hash->zeros[hashpos];
+          if(skip > numzeros) skip = numzeros;
+          backptr += skip;
+          foreptr += skip;
+        }
+
+        while(foreptr != lastptr && *backptr == *foreptr) /*maximum supported length by deflate is max length*/
+        {
+          ++backptr;
+          ++foreptr;
+        }
+        current_length = (unsigned)(foreptr - &in[pos]);
+
+        if(current_length > length)
+        {
+          length = current_length; /*the longest length*/
+          offset = current_offset; /*the offset that is related to this longest length*/
+          /*jump out once a length of max length is found (speed gain). This also jumps
+          out if length is MAX_SUPPORTED_DEFLATE_LENGTH*/
+          if(current_length >= nicematch) break;
+        }
+      }
+
+      if(hashpos == hash->chain[hashpos]) break;
+
+      if(numzeros >= 3 && length > numzeros)
+      {
+        hashpos = hash->chainz[hashpos];
+        if(hash->zeros[hashpos] != numzeros) break;
+      }
+      else
+      {
+        hashpos = hash->chain[hashpos];
+        /*outdated hash value, happens if particular value was not encountered in whole last window*/
+        if(hash->val[hashpos] != (int)hashval) break;
+      }
+    }
+
+    if(lazymatching)
+    {
+      if(!lazy && length >= 3 && length <= maxlazymatch && length < MAX_SUPPORTED_DEFLATE_LENGTH)
+      {
+        lazy = 1;
+        lazylength = length;
+        lazyoffset = offset;
+        continue; /*try the next byte*/
+      }
+      if(lazy)
+      {
+        lazy = 0;
+        if(pos == 0) ERROR_BREAK(81);
+        if(length > lazylength + 1)
+        {
+          /*push the previous character as literal*/
+          if(!uivector_push_back(out, in[pos - 1])) ERROR_BREAK(83 /*alloc fail*/);
+        }
+        else
+        {
+          length = lazylength;
+          offset = lazyoffset;
+          hash->head[hashval] = -1; /*the same hashchain update will be done, this ensures no wrong alteration*/
+          hash->headz[numzeros] = -1; /*idem*/
+          --pos;
+        }
+      }
+    }
+    if(length >= 3 && offset > windowsize) ERROR_BREAK(86 /*too big (or overflown negative) offset*/);
+
+    /*encode it as length/distance pair or literal value*/
+    if(length < 3) /*only lengths of 3 or higher are supported as length/distance pair*/
+    {
+      if(!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/);
+    }
+    else if(length < minmatch || (length == 3 && offset > 4096))
+    {
+      /*compensate for the fact that longer offsets have more extra bits, a
+      length of only 3 may be not worth it then*/
+      if(!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/);
+    }
+    else
+    {
+      addLengthDistance(out, length, offset);
+      for(i = 1; i < length; ++i)
+      {
+        ++pos;
+        wpos = pos & (windowsize - 1);
+        hashval = getHash(in, insize, pos);
+        if(usezeros && hashval == 0)
+        {
+          if(numzeros == 0) numzeros = countZeros(in, insize, pos);
+          else if(pos + numzeros > insize || in[pos + numzeros - 1] != 0) --numzeros;
+        }
+        else
+        {
+          numzeros = 0;
+        }
+        updateHashChain(hash, wpos, hashval, numzeros);
+      }
+    }
+  } /*end of the loop through each character of input*/
+
+  return error;
+}
+
+/* /////////////////////////////////////////////////////////////////////////// */
+
+static unsigned deflateNoCompression(ucvector* out, const unsigned char* data, size_t datasize)
+{
+  /*non compressed deflate block data: 1 bit BFINAL,2 bits BTYPE,(5 bits): it jumps to start of next byte,
+  2 bytes LEN, 2 bytes NLEN, LEN bytes literal DATA*/
+
+  size_t i, j, numdeflateblocks = (datasize + 65534) / 65535;
+  unsigned datapos = 0;
+  for(i = 0; i != numdeflateblocks; ++i)
+  {
+    unsigned BFINAL, BTYPE, LEN, NLEN;
+    unsigned char firstbyte;
+
+    BFINAL = (i == numdeflateblocks - 1);
+    BTYPE = 0;
+
+    firstbyte = (unsigned char)(BFINAL + ((BTYPE & 1) << 1) + ((BTYPE & 2) << 1));
+    ucvector_push_back(out, firstbyte);
+
+    LEN = 65535;
+    if(datasize - datapos < 65535) LEN = (unsigned)datasize - datapos;
+    NLEN = 65535 - LEN;
+
+    ucvector_push_back(out, (unsigned char)(LEN & 255));
+    ucvector_push_back(out, (unsigned char)(LEN >> 8));
+    ucvector_push_back(out, (unsigned char)(NLEN & 255));
+    ucvector_push_back(out, (unsigned char)(NLEN >> 8));
+
+    /*Decompressed data*/
+    for(j = 0; j < 65535 && datapos < datasize; ++j)
+    {
+      ucvector_push_back(out, data[datapos++]);
+    }
+  }
+
+  return 0;
+}
+
+/*
+write the lz77-encoded data, which has lit, len and dist codes, to compressed stream using huffman trees.
+tree_ll: the tree for lit and len codes.
+tree_d: the tree for distance codes.
+*/
+static void writeLZ77data(size_t* bp, ucvector* out, const uivector* lz77_encoded,
+                          const HuffmanTree* tree_ll, const HuffmanTree* tree_d)
+{
+  size_t i = 0;
+  for(i = 0; i != lz77_encoded->size; ++i)
+  {
+    unsigned val = lz77_encoded->data[i];
+    addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_ll, val), HuffmanTree_getLength(tree_ll, val));
+    if(val > 256) /*for a length code, 3 more things have to be added*/
+    {
+      unsigned length_index = val - FIRST_LENGTH_CODE_INDEX;
+      unsigned n_length_extra_bits = LENGTHEXTRA[length_index];
+      unsigned length_extra_bits = lz77_encoded->data[++i];
+
+      unsigned distance_code = lz77_encoded->data[++i];
+
+      unsigned distance_index = distance_code;
+      unsigned n_distance_extra_bits = DISTANCEEXTRA[distance_index];
+      unsigned distance_extra_bits = lz77_encoded->data[++i];
+
+      addBitsToStream(bp, out, length_extra_bits, n_length_extra_bits);
+      addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_d, distance_code),
+                       HuffmanTree_getLength(tree_d, distance_code));
+      addBitsToStream(bp, out, distance_extra_bits, n_distance_extra_bits);
+    }
+  }
+}
+
+/*Deflate for a block of type "dynamic", that is, with freely, optimally, created huffman trees*/
+static unsigned deflateDynamic(ucvector* out, size_t* bp, Hash* hash,
+                               const unsigned char* data, size_t datapos, size_t dataend,
+                               const LodePNGCompressSettings* settings, unsigned final)
+{
+  unsigned error = 0;
+
+  /*
+  A block is compressed as follows: The PNG data is lz77 encoded, resulting in
+  literal bytes and length/distance pairs. This is then huffman compressed with
+  two huffman trees. One huffman tree is used for the lit and len values ("ll"),
+  another huffman tree is used for the dist values ("d"). These two trees are
+  stored using their code lengths, and to compress even more these code lengths
+  are also run-length encoded and huffman compressed. This gives a huffman tree
+  of code lengths "cl". The code lenghts used to describe this third tree are
+  the code length code lengths ("clcl").
+  */
+
+  /*The lz77 encoded data, represented with integers since there will also be length and distance codes in it*/
+  uivector lz77_encoded;
+  HuffmanTree tree_ll; /*tree for lit,len values*/
+  HuffmanTree tree_d; /*tree for distance codes*/
+  HuffmanTree tree_cl; /*tree for encoding the code lengths representing tree_ll and tree_d*/
+  uivector frequencies_ll; /*frequency of lit,len codes*/
+  uivector frequencies_d; /*frequency of dist codes*/
+  uivector frequencies_cl; /*frequency of code length codes*/
+  uivector bitlen_lld; /*lit,len,dist code lenghts (int bits), literally (without repeat codes).*/
+  uivector bitlen_lld_e; /*bitlen_lld encoded with repeat codes (this is a rudemtary run length compression)*/
+  /*bitlen_cl is the code length code lengths ("clcl"). The bit lengths of codes to represent tree_cl
+  (these are written as is in the file, it would be crazy to compress these using yet another huffman
+  tree that needs to be represented by yet another set of code lengths)*/
+  uivector bitlen_cl;
+  size_t datasize = dataend - datapos;
+
+  /*
+  Due to the huffman compression of huffman tree representations ("two levels"), there are some anologies:
+  bitlen_lld is to tree_cl what data is to tree_ll and tree_d.
+  bitlen_lld_e is to bitlen_lld what lz77_encoded is to data.
+  bitlen_cl is to bitlen_lld_e what bitlen_lld is to lz77_encoded.
+  */
+
+  unsigned BFINAL = final;
+  size_t numcodes_ll, numcodes_d, i;
+  unsigned HLIT, HDIST, HCLEN;
+
+  uivector_init(&lz77_encoded);
+  HuffmanTree_init(&tree_ll);
+  HuffmanTree_init(&tree_d);
+  HuffmanTree_init(&tree_cl);
+  uivector_init(&frequencies_ll);
+  uivector_init(&frequencies_d);
+  uivector_init(&frequencies_cl);
+  uivector_init(&bitlen_lld);
+  uivector_init(&bitlen_lld_e);
+  uivector_init(&bitlen_cl);
+
+  /*This while loop never loops due to a break at the end, it is here to
+  allow breaking out of it to the cleanup phase on error conditions.*/
+  while(!error)
+  {
+    if(settings->use_lz77)
+    {
+      error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize,
+                         settings->minmatch, settings->nicematch, settings->lazymatching);
+      if(error) break;
+    }
+    else
+    {
+      if(!uivector_resize(&lz77_encoded, datasize)) ERROR_BREAK(83 /*alloc fail*/);
+      for(i = datapos; i < dataend; ++i) lz77_encoded.data[i - datapos] = data[i]; /*no LZ77, but still will be Huffman compressed*/
+    }
+
+    if(!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(83 /*alloc fail*/);
+    if(!uivector_resizev(&frequencies_d, 30, 0)) ERROR_BREAK(83 /*alloc fail*/);
+
+    /*Count the frequencies of lit, len and dist codes*/
+    for(i = 0; i != lz77_encoded.size; ++i)
+    {
+      unsigned symbol = lz77_encoded.data[i];
+      ++frequencies_ll.data[symbol];
+      if(symbol > 256)
+      {
+        unsigned dist = lz77_encoded.data[i + 2];
+        ++frequencies_d.data[dist];
+        i += 3;
+      }
+    }
+    frequencies_ll.data[256] = 1; /*there will be exactly 1 end code, at the end of the block*/
+
+    /*Make both huffman trees, one for the lit and len codes, one for the dist codes*/
+    error = HuffmanTree_makeFromFrequencies(&tree_ll, frequencies_ll.data, 257, frequencies_ll.size, 15);
+    if(error) break;
+    /*2, not 1, is chosen for mincodes: some buggy PNG decoders require at least 2 symbols in the dist tree*/
+    error = HuffmanTree_makeFromFrequencies(&tree_d, frequencies_d.data, 2, frequencies_d.size, 15);
+    if(error) break;
+
+    numcodes_ll = tree_ll.numcodes; if(numcodes_ll > 286) numcodes_ll = 286;
+    numcodes_d = tree_d.numcodes; if(numcodes_d > 30) numcodes_d = 30;
+    /*store the code lengths of both generated trees in bitlen_lld*/
+    for(i = 0; i != numcodes_ll; ++i) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_ll, (unsigned)i));
+    for(i = 0; i != numcodes_d; ++i) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_d, (unsigned)i));
+
+    /*run-length compress bitlen_ldd into bitlen_lld_e by using repeat codes 16 (copy length 3-6 times),
+    17 (3-10 zeroes), 18 (11-138 zeroes)*/
+    for(i = 0; i != (unsigned)bitlen_lld.size; ++i)
+    {
+      unsigned j = 0; /*amount of repititions*/
+      while(i + j + 1 < (unsigned)bitlen_lld.size && bitlen_lld.data[i + j + 1] == bitlen_lld.data[i]) ++j;
+
+      if(bitlen_lld.data[i] == 0 && j >= 2) /*repeat code for zeroes*/
+      {
+        ++j; /*include the first zero*/
+        if(j <= 10) /*repeat code 17 supports max 10 zeroes*/
+        {
+          uivector_push_back(&bitlen_lld_e, 17);
+          uivector_push_back(&bitlen_lld_e, j - 3);
+        }
+        else /*repeat code 18 supports max 138 zeroes*/
+        {
+          if(j > 138) j = 138;
+          uivector_push_back(&bitlen_lld_e, 18);
+          uivector_push_back(&bitlen_lld_e, j - 11);
+        }
+        i += (j - 1);
+      }
+      else if(j >= 3) /*repeat code for value other than zero*/
+      {
+        size_t k;
+        unsigned num = j / 6, rest = j % 6;
+        uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]);
+        for(k = 0; k < num; ++k)
+        {
+          uivector_push_back(&bitlen_lld_e, 16);
+          uivector_push_back(&bitlen_lld_e, 6 - 3);
+        }
+        if(rest >= 3)
+        {
+          uivector_push_back(&bitlen_lld_e, 16);
+          uivector_push_back(&bitlen_lld_e, rest - 3);
+        }
+        else j -= rest;
+        i += j;
+      }
+      else /*too short to benefit from repeat code*/
+      {
+        uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]);
+      }
+    }
+
+    /*generate tree_cl, the huffmantree of huffmantrees*/
+
+    if(!uivector_resizev(&frequencies_cl, NUM_CODE_LENGTH_CODES, 0)) ERROR_BREAK(83 /*alloc fail*/);
+    for(i = 0; i != bitlen_lld_e.size; ++i)
+    {
+      ++frequencies_cl.data[bitlen_lld_e.data[i]];
+      /*after a repeat code come the bits that specify the number of repetitions,
+      those don't need to be in the frequencies_cl calculation*/
+      if(bitlen_lld_e.data[i] >= 16) ++i;
+    }
+
+    error = HuffmanTree_makeFromFrequencies(&tree_cl, frequencies_cl.data,
+                                            frequencies_cl.size, frequencies_cl.size, 7);
+    if(error) break;
+
+    if(!uivector_resize(&bitlen_cl, tree_cl.numcodes)) ERROR_BREAK(83 /*alloc fail*/);
+    for(i = 0; i != tree_cl.numcodes; ++i)
+    {
+      /*lenghts of code length tree is in the order as specified by deflate*/
+      bitlen_cl.data[i] = HuffmanTree_getLength(&tree_cl, CLCL_ORDER[i]);
+    }
+    while(bitlen_cl.data[bitlen_cl.size - 1] == 0 && bitlen_cl.size > 4)
+    {
+      /*remove zeros at the end, but minimum size must be 4*/
+      if(!uivector_resize(&bitlen_cl, bitlen_cl.size - 1)) ERROR_BREAK(83 /*alloc fail*/);
+    }
+    if(error) break;
+
+    /*
+    Write everything into the output
+
+    After the BFINAL and BTYPE, the dynamic block consists out of the following:
+    - 5 bits HLIT, 5 bits HDIST, 4 bits HCLEN
+    - (HCLEN+4)*3 bits code lengths of code length alphabet
+    - HLIT + 257 code lenghts of lit/length alphabet (encoded using the code length
+      alphabet, + possible repetition codes 16, 17, 18)
+    - HDIST + 1 code lengths of distance alphabet (encoded using the code length
+      alphabet, + possible repetition codes 16, 17, 18)
+    - compressed data
+    - 256 (end code)
+    */
+
+    /*Write block type*/
+    addBitToStream(bp, out, BFINAL);
+    addBitToStream(bp, out, 0); /*first bit of BTYPE "dynamic"*/
+    addBitToStream(bp, out, 1); /*second bit of BTYPE "dynamic"*/
+
+    /*write the HLIT, HDIST and HCLEN values*/
+    HLIT = (unsigned)(numcodes_ll - 257);
+    HDIST = (unsigned)(numcodes_d - 1);
+    HCLEN = (unsigned)bitlen_cl.size - 4;
+    /*trim zeroes for HCLEN. HLIT and HDIST were already trimmed at tree creation*/
+    while(!bitlen_cl.data[HCLEN + 4 - 1] && HCLEN > 0) --HCLEN;
+    addBitsToStream(bp, out, HLIT, 5);
+    addBitsToStream(bp, out, HDIST, 5);
+    addBitsToStream(bp, out, HCLEN, 4);
+
+    /*write the code lenghts of the code length alphabet*/
+    for(i = 0; i != HCLEN + 4; ++i) addBitsToStream(bp, out, bitlen_cl.data[i], 3);
+
+    /*write the lenghts of the lit/len AND the dist alphabet*/
+    for(i = 0; i != bitlen_lld_e.size; ++i)
+    {
+      addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_cl, bitlen_lld_e.data[i]),
+                       HuffmanTree_getLength(&tree_cl, bitlen_lld_e.data[i]));
+      /*extra bits of repeat codes*/
+      if(bitlen_lld_e.data[i] == 16) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 2);
+      else if(bitlen_lld_e.data[i] == 17) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 3);
+      else if(bitlen_lld_e.data[i] == 18) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 7);
+    }
+
+    /*write the compressed data symbols*/
+    writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d);
+    /*error: the length of the end code 256 must be larger than 0*/
+    if(HuffmanTree_getLength(&tree_ll, 256) == 0) ERROR_BREAK(64);
+
+    /*write the end code*/
+    addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256));
+
+    break; /*end of error-while*/
+  }
+
+  /*cleanup*/
+  uivector_cleanup(&lz77_encoded);
+  HuffmanTree_cleanup(&tree_ll);
+  HuffmanTree_cleanup(&tree_d);
+  HuffmanTree_cleanup(&tree_cl);
+  uivector_cleanup(&frequencies_ll);
+  uivector_cleanup(&frequencies_d);
+  uivector_cleanup(&frequencies_cl);
+  uivector_cleanup(&bitlen_lld_e);
+  uivector_cleanup(&bitlen_lld);
+  uivector_cleanup(&bitlen_cl);
+
+  return error;
+}
+
+static unsigned deflateFixed(ucvector* out, size_t* bp, Hash* hash,
+                             const unsigned char* data,
+                             size_t datapos, size_t dataend,
+                             const LodePNGCompressSettings* settings, unsigned final)
+{
+  HuffmanTree tree_ll; /*tree for literal values and length codes*/
+  HuffmanTree tree_d; /*tree for distance codes*/
+
+  unsigned BFINAL = final;
+  unsigned error = 0;
+  size_t i;
+
+  HuffmanTree_init(&tree_ll);
+  HuffmanTree_init(&tree_d);
+
+  generateFixedLitLenTree(&tree_ll);
+  generateFixedDistanceTree(&tree_d);
+
+  addBitToStream(bp, out, BFINAL);
+  addBitToStream(bp, out, 1); /*first bit of BTYPE*/
+  addBitToStream(bp, out, 0); /*second bit of BTYPE*/
+
+  if(settings->use_lz77) /*LZ77 encoded*/
+  {
+    uivector lz77_encoded;
+    uivector_init(&lz77_encoded);
+    error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize,
+                       settings->minmatch, settings->nicematch, settings->lazymatching);
+    if(!error) writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d);
+    uivector_cleanup(&lz77_encoded);
+  }
+  else /*no LZ77, but still will be Huffman compressed*/
+  {
+    for(i = datapos; i < dataend; ++i)
+    {
+      addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, data[i]), HuffmanTree_getLength(&tree_ll, data[i]));
+    }
+  }
+  /*add END code*/
+  if(!error) addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256));
+
+  /*cleanup*/
+  HuffmanTree_cleanup(&tree_ll);
+  HuffmanTree_cleanup(&tree_d);
+
+  return error;
+}
+
+static unsigned lodepng_deflatev(ucvector* out, const unsigned char* in, size_t insize,
+                                 const LodePNGCompressSettings* settings)
+{
+  unsigned error = 0;
+  size_t i, blocksize, numdeflateblocks;
+  size_t bp = 0; /*the bit pointer*/
+  Hash hash;
+
+  if(settings->btype > 2) return 61;
+  else if(settings->btype == 0) return deflateNoCompression(out, in, insize);
+  else if(settings->btype == 1) blocksize = insize;
+  else /*if(settings->btype == 2)*/
+  {
+    /*on PNGs, deflate blocks of 65-262k seem to give most dense encoding*/
+    blocksize = insize / 8 + 8;
+    if(blocksize < 65536) blocksize = 65536;
+    if(blocksize > 262144) blocksize = 262144;
+  }
+
+  numdeflateblocks = (insize + blocksize - 1) / blocksize;
+  if(numdeflateblocks == 0) numdeflateblocks = 1;
+
+  error = hash_init(&hash, settings->windowsize);
+  if(error) return error;
+
+  for(i = 0; i != numdeflateblocks && !error; ++i)
+  {
+    unsigned final = (i == numdeflateblocks - 1);
+    size_t start = i * blocksize;
+    size_t end = start + blocksize;
+    if(end > insize) end = insize;
+
+    if(settings->btype == 1) error = deflateFixed(out, &bp, &hash, in, start, end, settings, final);
+    else if(settings->btype == 2) error = deflateDynamic(out, &bp, &hash, in, start, end, settings, final);
+  }
+
+  hash_cleanup(&hash);
+
+  return error;
+}
+
+unsigned lodepng_deflate(unsigned char** out, size_t* outsize,
+                         const unsigned char* in, size_t insize,
+                         const LodePNGCompressSettings* settings)
+{
+  unsigned error;
+  ucvector v;
+  ucvector_init_buffer(&v, *out, *outsize);
+  error = lodepng_deflatev(&v, in, insize, settings);
+  *out = v.data;
+  *outsize = v.size;
+  return error;
+}
+
+static unsigned deflate(unsigned char** out, size_t* outsize,
+                        const unsigned char* in, size_t insize,
+                        const LodePNGCompressSettings* settings)
+{
+  if(settings->custom_deflate)
+  {
+    return settings->custom_deflate(out, outsize, in, insize, settings);
+  }
+  else
+  {
+    return lodepng_deflate(out, outsize, in, insize, settings);
+  }
+}
+
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / Adler32                                                                  */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+static unsigned update_adler32(unsigned adler, const unsigned char* data, unsigned len)
+{
+   unsigned s1 = adler & 0xffff;
+   unsigned s2 = (adler >> 16) & 0xffff;
+
+  while(len > 0)
+  {
+    /*at least 5550 sums can be done before the sums overflow, saving a lot of module divisions*/
+    unsigned amount = len > 5550 ? 5550 : len;
+    len -= amount;
+    while(amount > 0)
+    {
+      s1 += (*data++);
+      s2 += s1;
+      --amount;
+    }
+    s1 %= 65521;
+    s2 %= 65521;
+  }
+
+  return (s2 << 16) | s1;
+}
+
+/*Return the adler32 of the bytes data[0..len-1]*/
+static unsigned adler32(const unsigned char* data, unsigned len)
+{
+  return update_adler32(1L, data, len);
+}
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / Zlib                                                                   / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+#ifdef LODEPNG_COMPILE_DECODER
+
+unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in,
+                                 size_t insize, const LodePNGDecompressSettings* settings)
+{
+  unsigned error = 0;
+  unsigned CM, CINFO, FDICT;
+
+  if(insize < 2) return 53; /*error, size of zlib data too small*/
+  /*read information from zlib header*/
+  if((in[0] * 256 + in[1]) % 31 != 0)
+  {
+    /*error: 256 * in[0] + in[1] must be a multiple of 31, the FCHECK value is supposed to be made that way*/
+    return 24;
+  }
+
+  CM = in[0] & 15;
+  CINFO = (in[0] >> 4) & 15;
+  /*FCHECK = in[1] & 31;*/ /*FCHECK is already tested above*/
+  FDICT = (in[1] >> 5) & 1;
+  /*FLEVEL = (in[1] >> 6) & 3;*/ /*FLEVEL is not used here*/
+
+  if(CM != 8 || CINFO > 7)
+  {
+    /*error: only compression method 8: inflate with sliding window of 32k is supported by the PNG spec*/
+    return 25;
+  }
+  if(FDICT != 0)
+  {
+    /*error: the specification of PNG says about the zlib stream:
+      "The additional flags shall not specify a preset dictionary."*/
+    return 26;
+  }
+
+  error = inflate(out, outsize, in + 2, insize - 2, settings);
+  if(error) return error;
+
+  if(!settings->ignore_adler32)
+  {
+    unsigned ADLER32 = lodepng_read32bitInt(&in[insize - 4]);
+    unsigned checksum = adler32(*out, (unsigned)(*outsize));
+    if(checksum != ADLER32) return 58; /*error, adler checksum not correct, data must be corrupted*/
+  }
+
+  return 0; /*no error*/
+}
+
+static unsigned zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in,
+                                size_t insize, const LodePNGDecompressSettings* settings)
+{
+  if(settings->custom_zlib)
+  {
+    return settings->custom_zlib(out, outsize, in, insize, settings);
+  }
+  else
+  {
+    return lodepng_zlib_decompress(out, outsize, in, insize, settings);
+  }
+}
+
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+#ifdef LODEPNG_COMPILE_ENCODER
+
+unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in,
+                               size_t insize, const LodePNGCompressSettings* settings)
+{
+  /*initially, *out must be NULL and outsize 0, if you just give some random *out
+  that's pointing to a non allocated buffer, this'll crash*/
+  ucvector outv;
+  size_t i;
+  unsigned error;
+  unsigned char* deflatedata = 0;
+  size_t deflatesize = 0;
+
+  /*zlib data: 1 byte CMF (CM+CINFO), 1 byte FLG, deflate data, 4 byte ADLER32 checksum of the Decompressed data*/
+  unsigned CMF = 120; /*0b01111000: CM 8, CINFO 7. With CINFO 7, any window size up to 32768 can be used.*/
+  unsigned FLEVEL = 0;
+  unsigned FDICT = 0;
+  unsigned CMFFLG = 256 * CMF + FDICT * 32 + FLEVEL * 64;
+  unsigned FCHECK = 31 - CMFFLG % 31;
+  CMFFLG += FCHECK;
+
+  /*ucvector-controlled version of the output buffer, for dynamic array*/
+  ucvector_init_buffer(&outv, *out, *outsize);
+
+  ucvector_push_back(&outv, (unsigned char)(CMFFLG >> 8));
+  ucvector_push_back(&outv, (unsigned char)(CMFFLG & 255));
+
+  error = deflate(&deflatedata, &deflatesize, in, insize, settings);
+
+  if(!error)
+  {
+    unsigned ADLER32 = adler32(in, (unsigned)insize);
+    for(i = 0; i != deflatesize; ++i) ucvector_push_back(&outv, deflatedata[i]);
+    lodepng_free(deflatedata);
+    lodepng_add32bitInt(&outv, ADLER32);
+  }
+
+  *out = outv.data;
+  *outsize = outv.size;
+
+  return error;
+}
+
+/* compress using the default or custom zlib function */
+static unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in,
+                              size_t insize, const LodePNGCompressSettings* settings)
+{
+  if(settings->custom_zlib)
+  {
+    return settings->custom_zlib(out, outsize, in, insize, settings);
+  }
+  else
+  {
+    return lodepng_zlib_compress(out, outsize, in, insize, settings);
+  }
+}
+
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+#else /*no LODEPNG_COMPILE_ZLIB*/
+
+#ifdef LODEPNG_COMPILE_DECODER
+static unsigned zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in,
+                                size_t insize, const LodePNGDecompressSettings* settings)
+{
+  if(!settings->custom_zlib) return 87; /*no custom zlib function provided */
+  return settings->custom_zlib(out, outsize, in, insize, settings);
+}
+#endif /*LODEPNG_COMPILE_DECODER*/
+#ifdef LODEPNG_COMPILE_ENCODER
+static unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in,
+                              size_t insize, const LodePNGCompressSettings* settings)
+{
+  if(!settings->custom_zlib) return 87; /*no custom zlib function provided */
+  return settings->custom_zlib(out, outsize, in, insize, settings);
+}
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+#endif /*LODEPNG_COMPILE_ZLIB*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+
+#ifdef LODEPNG_COMPILE_ENCODER
+
+/*this is a good tradeoff between speed and compression ratio*/
+#define DEFAULT_WINDOWSIZE 2048
+
+void lodepng_compress_settings_init(LodePNGCompressSettings* settings)
+{
+  /*compress with dynamic huffman tree (not in the mathematical sense, just not the predefined one)*/
+  settings->btype = 2;
+  settings->use_lz77 = 1;
+  settings->windowsize = DEFAULT_WINDOWSIZE;
+  settings->minmatch = 3;
+  settings->nicematch = 128;
+  settings->lazymatching = 1;
+
+  settings->custom_zlib = 0;
+  settings->custom_deflate = 0;
+  settings->custom_context = 0;
+}
+
+const LodePNGCompressSettings lodepng_default_compress_settings = {2, 1, DEFAULT_WINDOWSIZE, 3, 128, 1, 0, 0, 0};
+
+
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+#ifdef LODEPNG_COMPILE_DECODER
+
+void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings)
+{
+  settings->ignore_adler32 = 0;
+
+  settings->custom_zlib = 0;
+  settings->custom_inflate = 0;
+  settings->custom_context = 0;
+}
+
+const LodePNGDecompressSettings lodepng_default_decompress_settings = {0, 0, 0, 0};
+
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* ////////////////////////////////////////////////////////////////////////// */
+/* // End of Zlib related code. Begin of PNG related code.                 // */
+/* ////////////////////////////////////////////////////////////////////////// */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+#ifdef LODEPNG_COMPILE_PNG
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / CRC32                                                                  / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+
+#ifndef LODEPNG_NO_COMPILE_CRC
+/* CRC polynomial: 0xedb88320 */
+static unsigned lodepng_crc32_table[256] = {
+           0u, 1996959894u, 3993919788u, 2567524794u,  124634137u, 1886057615u, 3915621685u, 2657392035u,
+   249268274u, 2044508324u, 3772115230u, 2547177864u,  162941995u, 2125561021u, 3887607047u, 2428444049u,
+   498536548u, 1789927666u, 4089016648u, 2227061214u,  450548861u, 1843258603u, 4107580753u, 2211677639u,
+   325883990u, 1684777152u, 4251122042u, 2321926636u,  335633487u, 1661365465u, 4195302755u, 2366115317u,
+   997073096u, 1281953886u, 3579855332u, 2724688242u, 1006888145u, 1258607687u, 3524101629u, 2768942443u,
+   901097722u, 1119000684u, 3686517206u, 2898065728u,  853044451u, 1172266101u, 3705015759u, 2882616665u,
+   651767980u, 1373503546u, 3369554304u, 3218104598u,  565507253u, 1454621731u, 3485111705u, 3099436303u,
+   671266974u, 1594198024u, 3322730930u, 2970347812u,  795835527u, 1483230225u, 3244367275u, 3060149565u,
+  1994146192u,   31158534u, 2563907772u, 4023717930u, 1907459465u,  112637215u, 2680153253u, 3904427059u,
+  2013776290u,  251722036u, 2517215374u, 3775830040u, 2137656763u,  141376813u, 2439277719u, 3865271297u,
+  1802195444u,  476864866u, 2238001368u, 4066508878u, 1812370925u,  453092731u, 2181625025u, 4111451223u,
+  1706088902u,  314042704u, 2344532202u, 4240017532u, 1658658271u,  366619977u, 2362670323u, 4224994405u,
+  1303535960u,  984961486u, 2747007092u, 3569037538u, 1256170817u, 1037604311u, 2765210733u, 3554079995u,
+  1131014506u,  879679996u, 2909243462u, 3663771856u, 1141124467u,  855842277u, 2852801631u, 3708648649u,
+  1342533948u,  654459306u, 3188396048u, 3373015174u, 1466479909u,  544179635u, 3110523913u, 3462522015u,
+  1591671054u,  702138776u, 2966460450u, 3352799412u, 1504918807u,  783551873u, 3082640443u, 3233442989u,
+  3988292384u, 2596254646u,   62317068u, 1957810842u, 3939845945u, 2647816111u,   81470997u, 1943803523u,
+  3814918930u, 2489596804u,  225274430u, 2053790376u, 3826175755u, 2466906013u,  167816743u, 2097651377u,
+  4027552580u, 2265490386u,  503444072u, 1762050814u, 4150417245u, 2154129355u,  426522225u, 1852507879u,
+  4275313526u, 2312317920u,  282753626u, 1742555852u, 4189708143u, 2394877945u,  397917763u, 1622183637u,
+  3604390888u, 2714866558u,  953729732u, 1340076626u, 3518719985u, 2797360999u, 1068828381u, 1219638859u,
+  3624741850u, 2936675148u,  906185462u, 1090812512u, 3747672003u, 2825379669u,  829329135u, 1181335161u,
+  3412177804u, 3160834842u,  628085408u, 1382605366u, 3423369109u, 3138078467u,  570562233u, 1426400815u,
+  3317316542u, 2998733608u,  733239954u, 1555261956u, 3268935591u, 3050360625u,  752459403u, 1541320221u,
+  2607071920u, 3965973030u, 1969922972u,   40735498u, 2617837225u, 3943577151u, 1913087877u,   83908371u,
+  2512341634u, 3803740692u, 2075208622u,  213261112u, 2463272603u, 3855990285u, 2094854071u,  198958881u,
+  2262029012u, 4057260610u, 1759359992u,  534414190u, 2176718541u, 4139329115u, 1873836001u,  414664567u,
+  2282248934u, 4279200368u, 1711684554u,  285281116u, 2405801727u, 4167216745u, 1634467795u,  376229701u,
+  2685067896u, 3608007406u, 1308918612u,  956543938u, 2808555105u, 3495958263u, 1231636301u, 1047427035u,
+  2932959818u, 3654703836u, 1088359270u,  936918000u, 2847714899u, 3736837829u, 1202900863u,  817233897u,
+  3183342108u, 3401237130u, 1404277552u,  615818150u, 3134207493u, 3453421203u, 1423857449u,  601450431u,
+  3009837614u, 3294710456u, 1567103746u,  711928724u, 3020668471u, 3272380065u, 1510334235u,  755167117u
+};
+
+/*Return the CRC of the bytes buf[0..len-1].*/
+unsigned lodepng_crc32(const unsigned char* data, size_t length)
+{
+  unsigned r = 0xffffffffu;
+  size_t i;
+  for(i = 0; i < length; ++i)
+  {
+    r = lodepng_crc32_table[(r ^ data[i]) & 0xff] ^ (r >> 8);
+  }
+  return r ^ 0xffffffffu;
+}
+#else /* !LODEPNG_NO_COMPILE_CRC */
+unsigned lodepng_crc32(const unsigned char* data, size_t length);
+#endif /* !LODEPNG_NO_COMPILE_CRC */
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / Reading and writing single bits and bytes from/to stream for LodePNG   / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+static unsigned char readBitFromReversedStream(size_t* bitpointer, const unsigned char* bitstream)
+{
+  unsigned char result = (unsigned char)((bitstream[(*bitpointer) >> 3] >> (7 - ((*bitpointer) & 0x7))) & 1);
+  ++(*bitpointer);
+  return result;
+}
+
+static unsigned readBitsFromReversedStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits)
+{
+  unsigned result = 0;
+  size_t i;
+  for(i = nbits - 1; i < nbits; --i)
+  {
+    result += (unsigned)readBitFromReversedStream(bitpointer, bitstream) << i;
+  }
+  return result;
+}
+
+#ifdef LODEPNG_COMPILE_DECODER
+static void setBitOfReversedStream0(size_t* bitpointer, unsigned char* bitstream, unsigned char bit)
+{
+  /*the current bit in bitstream must be 0 for this to work*/
+  if(bit)
+  {
+    /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/
+    bitstream[(*bitpointer) >> 3] |= (bit << (7 - ((*bitpointer) & 0x7)));
+  }
+  ++(*bitpointer);
+}
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+static void setBitOfReversedStream(size_t* bitpointer, unsigned char* bitstream, unsigned char bit)
+{
+  /*the current bit in bitstream may be 0 or 1 for this to work*/
+  if(bit == 0) bitstream[(*bitpointer) >> 3] &=  (unsigned char)(~(1 << (7 - ((*bitpointer) & 0x7))));
+  else         bitstream[(*bitpointer) >> 3] |=  (1 << (7 - ((*bitpointer) & 0x7)));
+  ++(*bitpointer);
+}
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / PNG chunks                                                             / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+unsigned lodepng_chunk_length(const unsigned char* chunk)
+{
+  return lodepng_read32bitInt(&chunk[0]);
+}
+
+void lodepng_chunk_type(char type[5], const unsigned char* chunk)
+{
+  unsigned i;
+  for(i = 0; i != 4; ++i) type[i] = (char)chunk[4 + i];
+  type[4] = 0; /*null termination char*/
+}
+
+unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type)
+{
+  if(strlen(type) != 4) return 0;
+  return (chunk[4] == type[0] && chunk[5] == type[1] && chunk[6] == type[2] && chunk[7] == type[3]);
+}
+
+unsigned char lodepng_chunk_ancillary(const unsigned char* chunk)
+{
+  return((chunk[4] & 32) != 0);
+}
+
+unsigned char lodepng_chunk_private(const unsigned char* chunk)
+{
+  return((chunk[6] & 32) != 0);
+}
+
+unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk)
+{
+  return((chunk[7] & 32) != 0);
+}
+
+unsigned char* lodepng_chunk_data(unsigned char* chunk)
+{
+  return &chunk[8];
+}
+
+const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk)
+{
+  return &chunk[8];
+}
+
+unsigned lodepng_chunk_check_crc(const unsigned char* chunk)
+{
+  unsigned length = lodepng_chunk_length(chunk);
+  unsigned CRC = lodepng_read32bitInt(&chunk[length + 8]);
+  /*the CRC is taken of the data and the 4 chunk type letters, not the length*/
+  unsigned checksum = lodepng_crc32(&chunk[4], length + 4);
+  if(CRC != checksum) return 1;
+  else return 0;
+}
+
+void lodepng_chunk_generate_crc(unsigned char* chunk)
+{
+  unsigned length = lodepng_chunk_length(chunk);
+  unsigned CRC = lodepng_crc32(&chunk[4], length + 4);
+  lodepng_set32bitInt(chunk + 8 + length, CRC);
+}
+
+unsigned char* lodepng_chunk_next(unsigned char* chunk)
+{
+  unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12;
+  return &chunk[total_chunk_length];
+}
+
+const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk)
+{
+  unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12;
+  return &chunk[total_chunk_length];
+}
+
+unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk)
+{
+  unsigned i;
+  unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12;
+  unsigned char *chunk_start, *new_buffer;
+  size_t new_length = (*outlength) + total_chunk_length;
+  if(new_length < total_chunk_length || new_length < (*outlength)) return 77; /*integer overflow happened*/
+
+  new_buffer = (unsigned char*)lodepng_realloc(*out, new_length);
+  if(!new_buffer) return 83; /*alloc fail*/
+  (*out) = new_buffer;
+  (*outlength) = new_length;
+  chunk_start = &(*out)[new_length - total_chunk_length];
+
+  for(i = 0; i != total_chunk_length; ++i) chunk_start[i] = chunk[i];
+
+  return 0;
+}
+
+unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length,
+                              const char* type, const unsigned char* data)
+{
+  unsigned i;
+  unsigned char *chunk, *new_buffer;
+  size_t new_length = (*outlength) + length + 12;
+  if(new_length < length + 12 || new_length < (*outlength)) return 77; /*integer overflow happened*/
+  new_buffer = (unsigned char*)lodepng_realloc(*out, new_length);
+  if(!new_buffer) return 83; /*alloc fail*/
+  (*out) = new_buffer;
+  (*outlength) = new_length;
+  chunk = &(*out)[(*outlength) - length - 12];
+
+  /*1: length*/
+  lodepng_set32bitInt(chunk, (unsigned)length);
+
+  /*2: chunk name (4 letters)*/
+  chunk[4] = (unsigned char)type[0];
+  chunk[5] = (unsigned char)type[1];
+  chunk[6] = (unsigned char)type[2];
+  chunk[7] = (unsigned char)type[3];
+
+  /*3: the data*/
+  for(i = 0; i != length; ++i) chunk[8 + i] = data[i];
+
+  /*4: CRC (of the chunkname characters and the data)*/
+  lodepng_chunk_generate_crc(chunk);
+
+  return 0;
+}
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / Color types and such                                                   / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+/*return type is a LodePNG error code*/
+static unsigned checkColorValidity(LodePNGColorType colortype, unsigned bd) /*bd = bitdepth*/
+{
+  switch(colortype)
+  {
+    case 0: if(!(bd == 1 || bd == 2 || bd == 4 || bd == 8 || bd == 16)) return 37; break; /*grey*/
+    case 2: if(!(                                 bd == 8 || bd == 16)) return 37; break; /*RGB*/
+    case 3: if(!(bd == 1 || bd == 2 || bd == 4 || bd == 8            )) return 37; break; /*palette*/
+    case 4: if(!(                                 bd == 8 || bd == 16)) return 37; break; /*grey + alpha*/
+    case 6: if(!(                                 bd == 8 || bd == 16)) return 37; break; /*RGBA*/
+    default: return 31;
+  }
+  return 0; /*allowed color type / bits combination*/
+}
+
+static unsigned getNumColorChannels(LodePNGColorType colortype)
+{
+  switch(colortype)
+  {
+    case 0: return 1; /*grey*/
+    case 2: return 3; /*RGB*/
+    case 3: return 1; /*palette*/
+    case 4: return 2; /*grey + alpha*/
+    case 6: return 4; /*RGBA*/
+  }
+  return 0; /*unexisting color type*/
+}
+
+static unsigned lodepng_get_bpp_lct(LodePNGColorType colortype, unsigned bitdepth)
+{
+  /*bits per pixel is amount of channels * bits per channel*/
+  return getNumColorChannels(colortype) * bitdepth;
+}
+
+/* ////////////////////////////////////////////////////////////////////////// */
+
+void lodepng_color_mode_init(LodePNGColorMode* info)
+{
+  info->key_defined = 0;
+  info->key_r = info->key_g = info->key_b = 0;
+  info->colortype = LCT_RGBA;
+  info->bitdepth = 8;
+  info->palette = 0;
+  info->palettesize = 0;
+}
+
+void lodepng_color_mode_cleanup(LodePNGColorMode* info)
+{
+  lodepng_palette_clear(info);
+}
+
+unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source)
+{
+  size_t i;
+  lodepng_color_mode_cleanup(dest);
+  *dest = *source;
+  if(source->palette)
+  {
+    dest->palette = (unsigned char*)lodepng_malloc(1024);
+    if(!dest->palette && source->palettesize) return 83; /*alloc fail*/
+    for(i = 0; i != source->palettesize * 4; ++i) dest->palette[i] = source->palette[i];
+  }
+  return 0;
+}
+
+static int lodepng_color_mode_equal(const LodePNGColorMode* a, const LodePNGColorMode* b)
+{
+  size_t i;
+  if(a->colortype != b->colortype) return 0;
+  if(a->bitdepth != b->bitdepth) return 0;
+  if(a->key_defined != b->key_defined) return 0;
+  if(a->key_defined)
+  {
+    if(a->key_r != b->key_r) return 0;
+    if(a->key_g != b->key_g) return 0;
+    if(a->key_b != b->key_b) return 0;
+  }
+  /*if one of the palette sizes is 0, then we consider it to be the same as the
+  other: it means that e.g. the palette was not given by the user and should be
+  considered the same as the palette inside the PNG.*/
+  if(1/*a->palettesize != 0 && b->palettesize != 0*/) {
+    if(a->palettesize != b->palettesize) return 0;
+    for(i = 0; i != a->palettesize * 4; ++i)
+    {
+      if(a->palette[i] != b->palette[i]) return 0;
+    }
+  }
+  return 1;
+}
+
+void lodepng_palette_clear(LodePNGColorMode* info)
+{
+  if(info->palette) lodepng_free(info->palette);
+  info->palette = 0;
+  info->palettesize = 0;
+}
+
+unsigned lodepng_palette_add(LodePNGColorMode* info,
+                             unsigned char r, unsigned char g, unsigned char b, unsigned char a)
+{
+  unsigned char* data;
+  /*the same resize technique as C++ std::vectors is used, and here it's made so that for a palette with
+  the max of 256 colors, it'll have the exact alloc size*/
+  if(!info->palette) /*allocate palette if empty*/
+  {
+    /*room for 256 colors with 4 bytes each*/
+    data = (unsigned char*)lodepng_realloc(info->palette, 1024);
+    if(!data) return 83; /*alloc fail*/
+    else info->palette = data;
+  }
+  info->palette[4 * info->palettesize + 0] = r;
+  info->palette[4 * info->palettesize + 1] = g;
+  info->palette[4 * info->palettesize + 2] = b;
+  info->palette[4 * info->palettesize + 3] = a;
+  ++info->palettesize;
+  return 0;
+}
+
+unsigned lodepng_get_bpp(const LodePNGColorMode* info)
+{
+  /*calculate bits per pixel out of colortype and bitdepth*/
+  return lodepng_get_bpp_lct(info->colortype, info->bitdepth);
+}
+
+unsigned lodepng_get_channels(const LodePNGColorMode* info)
+{
+  return getNumColorChannels(info->colortype);
+}
+
+unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info)
+{
+  return info->colortype == LCT_GREY || info->colortype == LCT_GREY_ALPHA;
+}
+
+unsigned lodepng_is_alpha_type(const LodePNGColorMode* info)
+{
+  return (info->colortype & 4) != 0; /*4 or 6*/
+}
+
+unsigned lodepng_is_palette_type(const LodePNGColorMode* info)
+{
+  return info->colortype == LCT_PALETTE;
+}
+
+unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info)
+{
+  size_t i;
+  for(i = 0; i != info->palettesize; ++i)
+  {
+    if(info->palette[i * 4 + 3] < 255) return 1;
+  }
+  return 0;
+}
+
+unsigned lodepng_can_have_alpha(const LodePNGColorMode* info)
+{
+  return info->key_defined
+      || lodepng_is_alpha_type(info)
+      || lodepng_has_palette_alpha(info);
+}
+
+size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color)
+{
+  /*will not overflow for any color type if roughly w * h < 268435455*/
+  size_t bpp = lodepng_get_bpp(color);
+  size_t n = w * h;
+  return ((n / 8) * bpp) + ((n & 7) * bpp + 7) / 8;
+}
+
+size_t lodepng_get_raw_size_lct(unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth)
+{
+  /*will not overflow for any color type if roughly w * h < 268435455*/
+  size_t bpp = lodepng_get_bpp_lct(colortype, bitdepth);
+  size_t n = w * h;
+  return ((n / 8) * bpp) + ((n & 7) * bpp + 7) / 8;
+}
+
+
+#ifdef LODEPNG_COMPILE_PNG
+#ifdef LODEPNG_COMPILE_DECODER
+/*in an idat chunk, each scanline is a multiple of 8 bits, unlike the lodepng output buffer*/
+static size_t lodepng_get_raw_size_idat(unsigned w, unsigned h, const LodePNGColorMode* color)
+{
+  /*will not overflow for any color type if roughly w * h < 268435455*/
+  size_t bpp = lodepng_get_bpp(color);
+  size_t line = ((w / 8) * bpp) + ((w & 7) * bpp + 7) / 8;
+  return h * line;
+}
+#endif /*LODEPNG_COMPILE_DECODER*/
+#endif /*LODEPNG_COMPILE_PNG*/
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+
+static void LodePNGUnknownChunks_init(LodePNGInfo* info)
+{
+  unsigned i;
+  for(i = 0; i != 3; ++i) info->unknown_chunks_data[i] = 0;
+  for(i = 0; i != 3; ++i) info->unknown_chunks_size[i] = 0;
+}
+
+static void LodePNGUnknownChunks_cleanup(LodePNGInfo* info)
+{
+  unsigned i;
+  for(i = 0; i != 3; ++i) lodepng_free(info->unknown_chunks_data[i]);
+}
+
+static unsigned LodePNGUnknownChunks_copy(LodePNGInfo* dest, const LodePNGInfo* src)
+{
+  unsigned i;
+
+  LodePNGUnknownChunks_cleanup(dest);
+
+  for(i = 0; i != 3; ++i)
+  {
+    size_t j;
+    dest->unknown_chunks_size[i] = src->unknown_chunks_size[i];
+    dest->unknown_chunks_data[i] = (unsigned char*)lodepng_malloc(src->unknown_chunks_size[i]);
+    if(!dest->unknown_chunks_data[i] && dest->unknown_chunks_size[i]) return 83; /*alloc fail*/
+    for(j = 0; j < src->unknown_chunks_size[i]; ++j)
+    {
+      dest->unknown_chunks_data[i][j] = src->unknown_chunks_data[i][j];
+    }
+  }
+
+  return 0;
+}
+
+/******************************************************************************/
+
+static void LodePNGText_init(LodePNGInfo* info)
+{
+  info->text_num = 0;
+  info->text_keys = NULL;
+  info->text_strings = NULL;
+}
+
+static void LodePNGText_cleanup(LodePNGInfo* info)
+{
+  size_t i;
+  for(i = 0; i != info->text_num; ++i)
+  {
+    string_cleanup(&info->text_keys[i]);
+    string_cleanup(&info->text_strings[i]);
+  }
+  lodepng_free(info->text_keys);
+  lodepng_free(info->text_strings);
+}
+
+static unsigned LodePNGText_copy(LodePNGInfo* dest, const LodePNGInfo* source)
+{
+  size_t i = 0;
+  dest->text_keys = 0;
+  dest->text_strings = 0;
+  dest->text_num = 0;
+  for(i = 0; i != source->text_num; ++i)
+  {
+    CERROR_TRY_RETURN(lodepng_add_text(dest, source->text_keys[i], source->text_strings[i]));
+  }
+  return 0;
+}
+
+void lodepng_clear_text(LodePNGInfo* info)
+{
+  LodePNGText_cleanup(info);
+}
+
+unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str)
+{
+  char** new_keys = (char**)(lodepng_realloc(info->text_keys, sizeof(char*) * (info->text_num + 1)));
+  char** new_strings = (char**)(lodepng_realloc(info->text_strings, sizeof(char*) * (info->text_num + 1)));
+  if(!new_keys || !new_strings)
+  {
+    lodepng_free(new_keys);
+    lodepng_free(new_strings);
+    return 83; /*alloc fail*/
+  }
+
+  ++info->text_num;
+  info->text_keys = new_keys;
+  info->text_strings = new_strings;
+
+  string_init(&info->text_keys[info->text_num - 1]);
+  string_set(&info->text_keys[info->text_num - 1], key);
+
+  string_init(&info->text_strings[info->text_num - 1]);
+  string_set(&info->text_strings[info->text_num - 1], str);
+
+  return 0;
+}
+
+/******************************************************************************/
+
+static void LodePNGIText_init(LodePNGInfo* info)
+{
+  info->itext_num = 0;
+  info->itext_keys = NULL;
+  info->itext_langtags = NULL;
+  info->itext_transkeys = NULL;
+  info->itext_strings = NULL;
+}
+
+static void LodePNGIText_cleanup(LodePNGInfo* info)
+{
+  size_t i;
+  for(i = 0; i != info->itext_num; ++i)
+  {
+    string_cleanup(&info->itext_keys[i]);
+    string_cleanup(&info->itext_langtags[i]);
+    string_cleanup(&info->itext_transkeys[i]);
+    string_cleanup(&info->itext_strings[i]);
+  }
+  lodepng_free(info->itext_keys);
+  lodepng_free(info->itext_langtags);
+  lodepng_free(info->itext_transkeys);
+  lodepng_free(info->itext_strings);
+}
+
+static unsigned LodePNGIText_copy(LodePNGInfo* dest, const LodePNGInfo* source)
+{
+  size_t i = 0;
+  dest->itext_keys = 0;
+  dest->itext_langtags = 0;
+  dest->itext_transkeys = 0;
+  dest->itext_strings = 0;
+  dest->itext_num = 0;
+  for(i = 0; i != source->itext_num; ++i)
+  {
+    CERROR_TRY_RETURN(lodepng_add_itext(dest, source->itext_keys[i], source->itext_langtags[i],
+                                        source->itext_transkeys[i], source->itext_strings[i]));
+  }
+  return 0;
+}
+
+void lodepng_clear_itext(LodePNGInfo* info)
+{
+  LodePNGIText_cleanup(info);
+}
+
+unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag,
+                           const char* transkey, const char* str)
+{
+  char** new_keys = (char**)(lodepng_realloc(info->itext_keys, sizeof(char*) * (info->itext_num + 1)));
+  char** new_langtags = (char**)(lodepng_realloc(info->itext_langtags, sizeof(char*) * (info->itext_num + 1)));
+  char** new_transkeys = (char**)(lodepng_realloc(info->itext_transkeys, sizeof(char*) * (info->itext_num + 1)));
+  char** new_strings = (char**)(lodepng_realloc(info->itext_strings, sizeof(char*) * (info->itext_num + 1)));
+  if(!new_keys || !new_langtags || !new_transkeys || !new_strings)
+  {
+    lodepng_free(new_keys);
+    lodepng_free(new_langtags);
+    lodepng_free(new_transkeys);
+    lodepng_free(new_strings);
+    return 83; /*alloc fail*/
+  }
+
+  ++info->itext_num;
+  info->itext_keys = new_keys;
+  info->itext_langtags = new_langtags;
+  info->itext_transkeys = new_transkeys;
+  info->itext_strings = new_strings;
+
+  string_init(&info->itext_keys[info->itext_num - 1]);
+  string_set(&info->itext_keys[info->itext_num - 1], key);
+
+  string_init(&info->itext_langtags[info->itext_num - 1]);
+  string_set(&info->itext_langtags[info->itext_num - 1], langtag);
+
+  string_init(&info->itext_transkeys[info->itext_num - 1]);
+  string_set(&info->itext_transkeys[info->itext_num - 1], transkey);
+
+  string_init(&info->itext_strings[info->itext_num - 1]);
+  string_set(&info->itext_strings[info->itext_num - 1], str);
+
+  return 0;
+}
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+
+void lodepng_info_init(LodePNGInfo* info)
+{
+  lodepng_color_mode_init(&info->color);
+  info->interlace_method = 0;
+  info->compression_method = 0;
+  info->filter_method = 0;
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  info->background_defined = 0;
+  info->background_r = info->background_g = info->background_b = 0;
+
+  LodePNGText_init(info);
+  LodePNGIText_init(info);
+
+  info->time_defined = 0;
+  info->phys_defined = 0;
+
+  LodePNGUnknownChunks_init(info);
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+}
+
+void lodepng_info_cleanup(LodePNGInfo* info)
+{
+  lodepng_color_mode_cleanup(&info->color);
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  LodePNGText_cleanup(info);
+  LodePNGIText_cleanup(info);
+
+  LodePNGUnknownChunks_cleanup(info);
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+}
+
+unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source)
+{
+  lodepng_info_cleanup(dest);
+  *dest = *source;
+  lodepng_color_mode_init(&dest->color);
+  CERROR_TRY_RETURN(lodepng_color_mode_copy(&dest->color, &source->color));
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  CERROR_TRY_RETURN(LodePNGText_copy(dest, source));
+  CERROR_TRY_RETURN(LodePNGIText_copy(dest, source));
+
+  LodePNGUnknownChunks_init(dest);
+  CERROR_TRY_RETURN(LodePNGUnknownChunks_copy(dest, source));
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+  return 0;
+}
+
+void lodepng_info_swap(LodePNGInfo* a, LodePNGInfo* b)
+{
+  LodePNGInfo temp = *a;
+  *a = *b;
+  *b = temp;
+}
+
+/* ////////////////////////////////////////////////////////////////////////// */
+
+/*index: bitgroup index, bits: bitgroup size(1, 2 or 4), in: bitgroup value, out: octet array to add bits to*/
+static void addColorBits(unsigned char* out, size_t index, unsigned bits, unsigned in)
+{
+  unsigned m = bits == 1 ? 7 : bits == 2 ? 3 : 1; /*8 / bits - 1*/
+  /*p = the partial index in the byte, e.g. with 4 palettebits it is 0 for first half or 1 for second half*/
+  unsigned p = index & m;
+  in &= (1u << bits) - 1u; /*filter out any other bits of the input value*/
+  in = in << (bits * (m - p));
+  if(p == 0) out[index * bits / 8] = in;
+  else out[index * bits / 8] |= in;
+}
+
+typedef struct ColorTree ColorTree;
+
+/*
+One node of a color tree
+This is the data structure used to count the number of unique colors and to get a palette
+index for a color. It's like an octree, but because the alpha channel is used too, each
+node has 16 instead of 8 children.
+*/
+struct ColorTree
+{
+  ColorTree* children[16]; /*up to 16 pointers to ColorTree of next level*/
+  int index; /*the payload. Only has a meaningful value if this is in the last level*/
+};
+
+static void color_tree_init(ColorTree* tree)
+{
+  int i;
+  for(i = 0; i != 16; ++i) tree->children[i] = 0;
+  tree->index = -1;
+}
+
+static void color_tree_cleanup(ColorTree* tree)
+{
+  int i;
+  for(i = 0; i != 16; ++i)
+  {
+    if(tree->children[i])
+    {
+      color_tree_cleanup(tree->children[i]);
+      lodepng_free(tree->children[i]);
+    }
+  }
+}
+
+/*returns -1 if color not present, its index otherwise*/
+static int color_tree_get(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a)
+{
+  int bit = 0;
+  for(bit = 0; bit < 8; ++bit)
+  {
+    int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1);
+    if(!tree->children[i]) return -1;
+    else tree = tree->children[i];
+  }
+  return tree ? tree->index : -1;
+}
+
+#ifdef LODEPNG_COMPILE_ENCODER
+static int color_tree_has(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a)
+{
+  return color_tree_get(tree, r, g, b, a) >= 0;
+}
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+/*color is not allowed to already exist.
+Index should be >= 0 (it's signed to be compatible with using -1 for "doesn't exist")*/
+static void color_tree_add(ColorTree* tree,
+                           unsigned char r, unsigned char g, unsigned char b, unsigned char a, unsigned index)
+{
+  int bit;
+  for(bit = 0; bit < 8; ++bit)
+  {
+    int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1);
+    if(!tree->children[i])
+    {
+      tree->children[i] = (ColorTree*)lodepng_malloc(sizeof(ColorTree));
+      color_tree_init(tree->children[i]);
+    }
+    tree = tree->children[i];
+  }
+  tree->index = (int)index;
+}
+
+/*put a pixel, given its RGBA color, into image of any color type*/
+static unsigned rgba8ToPixel(unsigned char* out, size_t i,
+                             const LodePNGColorMode* mode, ColorTree* tree /*for palette*/,
+                             unsigned char r, unsigned char g, unsigned char b, unsigned char a)
+{
+  if(mode->colortype == LCT_GREY)
+  {
+    unsigned char grey = r; /*((unsigned short)r + g + b) / 3*/;
+    if(mode->bitdepth == 8) out[i] = grey;
+    else if(mode->bitdepth == 16) out[i * 2 + 0] = out[i * 2 + 1] = grey;
+    else
+    {
+      /*take the most significant bits of grey*/
+      grey = (grey >> (8 - mode->bitdepth)) & ((1 << mode->bitdepth) - 1);
+      addColorBits(out, i, mode->bitdepth, grey);
+    }
+  }
+  else if(mode->colortype == LCT_RGB)
+  {
+    if(mode->bitdepth == 8)
+    {
+      out[i * 3 + 0] = r;
+      out[i * 3 + 1] = g;
+      out[i * 3 + 2] = b;
+    }
+    else
+    {
+      out[i * 6 + 0] = out[i * 6 + 1] = r;
+      out[i * 6 + 2] = out[i * 6 + 3] = g;
+      out[i * 6 + 4] = out[i * 6 + 5] = b;
+    }
+  }
+  else if(mode->colortype == LCT_PALETTE)
+  {
+    int index = color_tree_get(tree, r, g, b, a);
+    if(index < 0) return 82; /*color not in palette*/
+    if(mode->bitdepth == 8) out[i] = index;
+    else addColorBits(out, i, mode->bitdepth, (unsigned)index);
+  }
+  else if(mode->colortype == LCT_GREY_ALPHA)
+  {
+    unsigned char grey = r; /*((unsigned short)r + g + b) / 3*/;
+    if(mode->bitdepth == 8)
+    {
+      out[i * 2 + 0] = grey;
+      out[i * 2 + 1] = a;
+    }
+    else if(mode->bitdepth == 16)
+    {
+      out[i * 4 + 0] = out[i * 4 + 1] = grey;
+      out[i * 4 + 2] = out[i * 4 + 3] = a;
+    }
+  }
+  else if(mode->colortype == LCT_RGBA)
+  {
+    if(mode->bitdepth == 8)
+    {
+      out[i * 4 + 0] = r;
+      out[i * 4 + 1] = g;
+      out[i * 4 + 2] = b;
+      out[i * 4 + 3] = a;
+    }
+    else
+    {
+      out[i * 8 + 0] = out[i * 8 + 1] = r;
+      out[i * 8 + 2] = out[i * 8 + 3] = g;
+      out[i * 8 + 4] = out[i * 8 + 5] = b;
+      out[i * 8 + 6] = out[i * 8 + 7] = a;
+    }
+  }
+
+  return 0; /*no error*/
+}
+
+/*put a pixel, given its RGBA16 color, into image of any color 16-bitdepth type*/
+static void rgba16ToPixel(unsigned char* out, size_t i,
+                         const LodePNGColorMode* mode,
+                         unsigned short r, unsigned short g, unsigned short b, unsigned short a)
+{
+  if(mode->colortype == LCT_GREY)
+  {
+    unsigned short grey = r; /*((unsigned)r + g + b) / 3*/;
+    out[i * 2 + 0] = (grey >> 8) & 255;
+    out[i * 2 + 1] = grey & 255;
+  }
+  else if(mode->colortype == LCT_RGB)
+  {
+    out[i * 6 + 0] = (r >> 8) & 255;
+    out[i * 6 + 1] = r & 255;
+    out[i * 6 + 2] = (g >> 8) & 255;
+    out[i * 6 + 3] = g & 255;
+    out[i * 6 + 4] = (b >> 8) & 255;
+    out[i * 6 + 5] = b & 255;
+  }
+  else if(mode->colortype == LCT_GREY_ALPHA)
+  {
+    unsigned short grey = r; /*((unsigned)r + g + b) / 3*/;
+    out[i * 4 + 0] = (grey >> 8) & 255;
+    out[i * 4 + 1] = grey & 255;
+    out[i * 4 + 2] = (a >> 8) & 255;
+    out[i * 4 + 3] = a & 255;
+  }
+  else if(mode->colortype == LCT_RGBA)
+  {
+    out[i * 8 + 0] = (r >> 8) & 255;
+    out[i * 8 + 1] = r & 255;
+    out[i * 8 + 2] = (g >> 8) & 255;
+    out[i * 8 + 3] = g & 255;
+    out[i * 8 + 4] = (b >> 8) & 255;
+    out[i * 8 + 5] = b & 255;
+    out[i * 8 + 6] = (a >> 8) & 255;
+    out[i * 8 + 7] = a & 255;
+  }
+}
+
+/*Get RGBA8 color of pixel with index i (y * width + x) from the raw image with given color type.*/
+static void getPixelColorRGBA8(unsigned char* r, unsigned char* g,
+                               unsigned char* b, unsigned char* a,
+                               const unsigned char* in, size_t i,
+                               const LodePNGColorMode* mode)
+{
+  if(mode->colortype == LCT_GREY)
+  {
+    if(mode->bitdepth == 8)
+    {
+      *r = *g = *b = in[i];
+      if(mode->key_defined && *r == mode->key_r) *a = 0;
+      else *a = 255;
+    }
+    else if(mode->bitdepth == 16)
+    {
+      *r = *g = *b = in[i * 2 + 0];
+      if(mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0;
+      else *a = 255;
+    }
+    else
+    {
+      unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/
+      size_t j = i * mode->bitdepth;
+      unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth);
+      *r = *g = *b = (value * 255) / highest;
+      if(mode->key_defined && value == mode->key_r) *a = 0;
+      else *a = 255;
+    }
+  }
+  else if(mode->colortype == LCT_RGB)
+  {
+    if(mode->bitdepth == 8)
+    {
+      *r = in[i * 3 + 0]; *g = in[i * 3 + 1]; *b = in[i * 3 + 2];
+      if(mode->key_defined && *r == mode->key_r && *g == mode->key_g && *b == mode->key_b) *a = 0;
+      else *a = 255;
+    }
+    else
+    {
+      *r = in[i * 6 + 0];
+      *g = in[i * 6 + 2];
+      *b = in[i * 6 + 4];
+      if(mode->key_defined && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r
+         && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g
+         && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0;
+      else *a = 255;
+    }
+  }
+  else if(mode->colortype == LCT_PALETTE)
+  {
+    unsigned index;
+    if(mode->bitdepth == 8) index = in[i];
+    else
+    {
+      size_t j = i * mode->bitdepth;
+      index = readBitsFromReversedStream(&j, in, mode->bitdepth);
+    }
+
+    if(index >= mode->palettesize)
+    {
+      /*This is an error according to the PNG spec, but common PNG decoders make it black instead.
+      Done here too, slightly faster due to no error handling needed.*/
+      *r = *g = *b = 0;
+      *a = 255;
+    }
+    else
+    {
+      *r = mode->palette[index * 4 + 0];
+      *g = mode->palette[index * 4 + 1];
+      *b = mode->palette[index * 4 + 2];
+      *a = mode->palette[index * 4 + 3];
+    }
+  }
+  else if(mode->colortype == LCT_GREY_ALPHA)
+  {
+    if(mode->bitdepth == 8)
+    {
+      *r = *g = *b = in[i * 2 + 0];
+      *a = in[i * 2 + 1];
+    }
+    else
+    {
+      *r = *g = *b = in[i * 4 + 0];
+      *a = in[i * 4 + 2];
+    }
+  }
+  else if(mode->colortype == LCT_RGBA)
+  {
+    if(mode->bitdepth == 8)
+    {
+      *r = in[i * 4 + 0];
+      *g = in[i * 4 + 1];
+      *b = in[i * 4 + 2];
+      *a = in[i * 4 + 3];
+    }
+    else
+    {
+      *r = in[i * 8 + 0];
+      *g = in[i * 8 + 2];
+      *b = in[i * 8 + 4];
+      *a = in[i * 8 + 6];
+    }
+  }
+}
+
+/*Similar to getPixelColorRGBA8, but with all the for loops inside of the color
+mode test cases, optimized to convert the colors much faster, when converting
+to RGBA or RGB with 8 bit per cannel. buffer must be RGBA or RGB output with
+enough memory, if has_alpha is true the output is RGBA. mode has the color mode
+of the input buffer.*/
+static void getPixelColorsRGBA8(unsigned char* buffer, size_t numpixels,
+                                unsigned has_alpha, const unsigned char* in,
+                                const LodePNGColorMode* mode)
+{
+  unsigned num_channels = has_alpha ? 4 : 3;
+  size_t i;
+  if(mode->colortype == LCT_GREY)
+  {
+    if(mode->bitdepth == 8)
+    {
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        buffer[0] = buffer[1] = buffer[2] = in[i];
+        if(has_alpha) buffer[3] = mode->key_defined && in[i] == mode->key_r ? 0 : 255;
+      }
+    }
+    else if(mode->bitdepth == 16)
+    {
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        buffer[0] = buffer[1] = buffer[2] = in[i * 2];
+        if(has_alpha) buffer[3] = mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r ? 0 : 255;
+      }
+    }
+    else
+    {
+      unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/
+      size_t j = 0;
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth);
+        buffer[0] = buffer[1] = buffer[2] = (value * 255) / highest;
+        if(has_alpha) buffer[3] = mode->key_defined && value == mode->key_r ? 0 : 255;
+      }
+    }
+  }
+  else if(mode->colortype == LCT_RGB)
+  {
+    if(mode->bitdepth == 8)
+    {
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        buffer[0] = in[i * 3 + 0];
+        buffer[1] = in[i * 3 + 1];
+        buffer[2] = in[i * 3 + 2];
+        if(has_alpha) buffer[3] = mode->key_defined && buffer[0] == mode->key_r
+           && buffer[1]== mode->key_g && buffer[2] == mode->key_b ? 0 : 255;
+      }
+    }
+    else
+    {
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        buffer[0] = in[i * 6 + 0];
+        buffer[1] = in[i * 6 + 2];
+        buffer[2] = in[i * 6 + 4];
+        if(has_alpha) buffer[3] = mode->key_defined
+           && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r
+           && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g
+           && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b ? 0 : 255;
+      }
+    }
+  }
+  else if(mode->colortype == LCT_PALETTE)
+  {
+    unsigned index;
+    size_t j = 0;
+    for(i = 0; i != numpixels; ++i, buffer += num_channels)
+    {
+      if(mode->bitdepth == 8) index = in[i];
+      else index = readBitsFromReversedStream(&j, in, mode->bitdepth);
+
+      if(index >= mode->palettesize)
+      {
+        /*This is an error according to the PNG spec, but most PNG decoders make it black instead.
+        Done here too, slightly faster due to no error handling needed.*/
+        buffer[0] = buffer[1] = buffer[2] = 0;
+        if(has_alpha) buffer[3] = 255;
+      }
+      else
+      {
+        buffer[0] = mode->palette[index * 4 + 0];
+        buffer[1] = mode->palette[index * 4 + 1];
+        buffer[2] = mode->palette[index * 4 + 2];
+        if(has_alpha) buffer[3] = mode->palette[index * 4 + 3];
+      }
+    }
+  }
+  else if(mode->colortype == LCT_GREY_ALPHA)
+  {
+    if(mode->bitdepth == 8)
+    {
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        buffer[0] = buffer[1] = buffer[2] = in[i * 2 + 0];
+        if(has_alpha) buffer[3] = in[i * 2 + 1];
+      }
+    }
+    else
+    {
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        buffer[0] = buffer[1] = buffer[2] = in[i * 4 + 0];
+        if(has_alpha) buffer[3] = in[i * 4 + 2];
+      }
+    }
+  }
+  else if(mode->colortype == LCT_RGBA)
+  {
+    if(mode->bitdepth == 8)
+    {
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        buffer[0] = in[i * 4 + 0];
+        buffer[1] = in[i * 4 + 1];
+        buffer[2] = in[i * 4 + 2];
+        if(has_alpha) buffer[3] = in[i * 4 + 3];
+      }
+    }
+    else
+    {
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        buffer[0] = in[i * 8 + 0];
+        buffer[1] = in[i * 8 + 2];
+        buffer[2] = in[i * 8 + 4];
+        if(has_alpha) buffer[3] = in[i * 8 + 6];
+      }
+    }
+  }
+}
+
+/*Get RGBA16 color of pixel with index i (y * width + x) from the raw image with
+given color type, but the given color type must be 16-bit itself.*/
+static void getPixelColorRGBA16(unsigned short* r, unsigned short* g, unsigned short* b, unsigned short* a,
+                                const unsigned char* in, size_t i, const LodePNGColorMode* mode)
+{
+  if(mode->colortype == LCT_GREY)
+  {
+    *r = *g = *b = 256 * in[i * 2 + 0] + in[i * 2 + 1];
+    if(mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0;
+    else *a = 65535;
+  }
+  else if(mode->colortype == LCT_RGB)
+  {
+    *r = 256u * in[i * 6 + 0] + in[i * 6 + 1];
+    *g = 256u * in[i * 6 + 2] + in[i * 6 + 3];
+    *b = 256u * in[i * 6 + 4] + in[i * 6 + 5];
+    if(mode->key_defined
+       && 256u * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r
+       && 256u * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g
+       && 256u * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0;
+    else *a = 65535;
+  }
+  else if(mode->colortype == LCT_GREY_ALPHA)
+  {
+    *r = *g = *b = 256u * in[i * 4 + 0] + in[i * 4 + 1];
+    *a = 256u * in[i * 4 + 2] + in[i * 4 + 3];
+  }
+  else if(mode->colortype == LCT_RGBA)
+  {
+    *r = 256u * in[i * 8 + 0] + in[i * 8 + 1];
+    *g = 256u * in[i * 8 + 2] + in[i * 8 + 3];
+    *b = 256u * in[i * 8 + 4] + in[i * 8 + 5];
+    *a = 256u * in[i * 8 + 6] + in[i * 8 + 7];
+  }
+}
+
+unsigned lodepng_convert(unsigned char* out, const unsigned char* in,
+                         const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in,
+                         unsigned w, unsigned h)
+{
+  unsigned int i;
+  ColorTree tree;
+  size_t numpixels = w * h;
+
+  if(lodepng_color_mode_equal(mode_out, mode_in))
+  {
+    size_t numbytes = lodepng_get_raw_size(w, h, mode_in);
+    for(i = 0; i != numbytes; ++i) out[i] = in[i];
+    return 0;
+  }
+
+  if(mode_out->colortype == LCT_PALETTE)
+  {
+    size_t palettesize = mode_out->palettesize;
+    const unsigned char* palette = mode_out->palette;
+    size_t palsize = (size_t)1 << mode_out->bitdepth;
+    /*if the user specified output palette but did not give the values, assume
+    they want the values of the input color type (assuming that one is palette).
+    Note that we never create a new palette ourselves.*/
+    if(palettesize == 0)
+    {
+      palettesize = mode_in->palettesize;
+      palette = mode_in->palette;
+    }
+    if(palettesize < palsize) palsize = palettesize;
+    color_tree_init(&tree);
+    for(i = 0; i != palsize; ++i)
+    {
+      const unsigned char* p = &palette[i * 4];
+      color_tree_add(&tree, p[0], p[1], p[2], p[3], i);
+    }
+  }
+
+  if(mode_in->bitdepth == 16 && mode_out->bitdepth == 16)
+  {
+    for(i = 0; i != numpixels; ++i)
+    {
+      unsigned short r = 0, g = 0, b = 0, a = 0;
+      getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode_in);
+      rgba16ToPixel(out, i, mode_out, r, g, b, a);
+    }
+  }
+  else if(mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGBA)
+  {
+    getPixelColorsRGBA8(out, numpixels, 1, in, mode_in);
+  }
+  else if(mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGB)
+  {
+    getPixelColorsRGBA8(out, numpixels, 0, in, mode_in);
+  }
+  else
+  {
+    unsigned char r = 0, g = 0, b = 0, a = 0;
+    for(i = 0; i != numpixels; ++i)
+    {
+      getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode_in);
+      CERROR_TRY_RETURN(rgba8ToPixel(out, i, mode_out, &tree, r, g, b, a));
+    }
+  }
+
+  if(mode_out->colortype == LCT_PALETTE)
+  {
+    color_tree_cleanup(&tree);
+  }
+
+  return 0; /*no error*/
+}
+
+#ifdef LODEPNG_COMPILE_ENCODER
+
+void lodepng_color_profile_init(LodePNGColorProfile* profile)
+{
+  profile->colored = 0;
+  profile->key = 0;
+  profile->alpha = 0;
+  profile->key_r = profile->key_g = profile->key_b = 0;
+  profile->numcolors = 0;
+  profile->bits = 1;
+}
+
+/*function used for debug purposes with C++*/
+/*void printColorProfile(LodePNGColorProfile* p)
+{
+  std::cout << "colored: " << (int)p->colored << ", ";
+  std::cout << "key: " << (int)p->key << ", ";
+  std::cout << "key_r: " << (int)p->key_r << ", ";
+  std::cout << "key_g: " << (int)p->key_g << ", ";
+  std::cout << "key_b: " << (int)p->key_b << ", ";
+  std::cout << "alpha: " << (int)p->alpha << ", ";
+  std::cout << "numcolors: " << (int)p->numcolors << ", ";
+  std::cout << "bits: " << (int)p->bits << std::endl;
+}*/
+
+/*Returns how many bits needed to represent given value (max 8 bit)*/
+static unsigned getValueRequiredBits(unsigned char value)
+{
+  if(value == 0 || value == 255) return 1;
+  /*The scaling of 2-bit and 4-bit values uses multiples of 85 and 17*/
+  if(value % 17 == 0) return value % 85 == 0 ? 2 : 4;
+  return 8;
+}
+
+/*profile must already have been inited with mode.
+It's ok to set some parameters of profile to done already.*/
+unsigned lodepng_get_color_profile(LodePNGColorProfile* profile,
+                                   const unsigned char* in, unsigned w, unsigned h,
+                                   const LodePNGColorMode* mode)
+{
+  unsigned error = 0;
+  size_t i;
+  ColorTree tree;
+  size_t numpixels = w * h;
+
+  unsigned colored_done = lodepng_is_greyscale_type(mode) ? 1 : 0;
+  unsigned alpha_done = lodepng_can_have_alpha(mode) ? 0 : 1;
+  unsigned numcolors_done = 0;
+  unsigned bpp = lodepng_get_bpp(mode);
+  unsigned bits_done = bpp == 1 ? 1 : 0;
+  unsigned maxnumcolors = 257;
+  unsigned sixteen = 0;
+  if(bpp <= 8) maxnumcolors = bpp == 1 ? 2 : (bpp == 2 ? 4 : (bpp == 4 ? 16 : 256));
+
+  color_tree_init(&tree);
+
+  /*Check if the 16-bit input is truly 16-bit*/
+  if(mode->bitdepth == 16)
+  {
+    unsigned short r, g, b, a;
+    for(i = 0; i != numpixels; ++i)
+    {
+      getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode);
+      if((r & 255) != ((r >> 8) & 255) || (g & 255) != ((g >> 8) & 255) ||
+         (b & 255) != ((b >> 8) & 255) || (a & 255) != ((a >> 8) & 255)) /*first and second byte differ*/
+      {
+        sixteen = 1;
+        break;
+      }
+    }
+  }
+
+  if(sixteen)
+  {
+    unsigned short r = 0, g = 0, b = 0, a = 0;
+    profile->bits = 16;
+    bits_done = numcolors_done = 1; /*counting colors no longer useful, palette doesn't support 16-bit*/
+
+    for(i = 0; i != numpixels; ++i)
+    {
+      getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode);
+
+      if(!colored_done && (r != g || r != b))
+      {
+        profile->colored = 1;
+        colored_done = 1;
+      }
+
+      if(!alpha_done)
+      {
+        unsigned matchkey = (r == profile->key_r && g == profile->key_g && b == profile->key_b);
+        if(a != 65535 && (a != 0 || (profile->key && !matchkey)))
+        {
+          profile->alpha = 1;
+          alpha_done = 1;
+          if(profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/
+        }
+        else if(a == 0 && !profile->alpha && !profile->key)
+        {
+          profile->key = 1;
+          profile->key_r = r;
+          profile->key_g = g;
+          profile->key_b = b;
+        }
+        else if(a == 65535 && profile->key && matchkey)
+        {
+          /* Color key cannot be used if an opaque pixel also has that RGB color. */
+          profile->alpha = 1;
+          alpha_done = 1;
+        }
+      }
+      if(alpha_done && numcolors_done && colored_done && bits_done) break;
+    }
+
+    if(profile->key && !profile->alpha)
+    {
+      for(i = 0; i != numpixels; ++i)
+      {
+        getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode);
+        if(a != 0 && r == profile->key_r && g == profile->key_g && b == profile->key_b)
+        {
+          /* Color key cannot be used if an opaque pixel also has that RGB color. */
+          profile->alpha = 1;
+          alpha_done = 1;
+        }
+      }
+    }
+  }
+  else /* < 16-bit */
+  {
+    unsigned char r = 0, g = 0, b = 0, a = 0;
+    for(i = 0; i != numpixels; ++i)
+    {
+      getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode);
+
+      if(!bits_done && profile->bits < 8)
+      {
+        /*only r is checked, < 8 bits is only relevant for greyscale*/
+        unsigned bits = getValueRequiredBits(r);
+        if(bits > profile->bits) profile->bits = bits;
+      }
+      bits_done = (profile->bits >= bpp);
+
+      if(!colored_done && (r != g || r != b))
+      {
+        profile->colored = 1;
+        colored_done = 1;
+        if(profile->bits < 8) profile->bits = 8; /*PNG has no colored modes with less than 8-bit per channel*/
+      }
+
+      if(!alpha_done)
+      {
+        unsigned matchkey = (r == profile->key_r && g == profile->key_g && b == profile->key_b);
+        if(a != 255 && (a != 0 || (profile->key && !matchkey)))
+        {
+          profile->alpha = 1;
+          alpha_done = 1;
+          if(profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/
+        }
+        else if(a == 0 && !profile->alpha && !profile->key)
+        {
+          profile->key = 1;
+          profile->key_r = r;
+          profile->key_g = g;
+          profile->key_b = b;
+        }
+        else if(a == 255 && profile->key && matchkey)
+        {
+          /* Color key cannot be used if an opaque pixel also has that RGB color. */
+          profile->alpha = 1;
+          alpha_done = 1;
+          if(profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/
+        }
+      }
+
+      if(!numcolors_done)
+      {
+        if(!color_tree_has(&tree, r, g, b, a))
+        {
+          color_tree_add(&tree, r, g, b, a, profile->numcolors);
+          if(profile->numcolors < 256)
+          {
+            unsigned char* p = profile->palette;
+            unsigned n = profile->numcolors;
+            p[n * 4 + 0] = r;
+            p[n * 4 + 1] = g;
+            p[n * 4 + 2] = b;
+            p[n * 4 + 3] = a;
+          }
+          ++profile->numcolors;
+          numcolors_done = profile->numcolors >= maxnumcolors;
+        }
+      }
+
+      if(alpha_done && numcolors_done && colored_done && bits_done) break;
+    }
+
+    if(profile->key && !profile->alpha)
+    {
+      for(i = 0; i != numpixels; ++i)
+      {
+        getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode);
+        if(a != 0 && r == profile->key_r && g == profile->key_g && b == profile->key_b)
+        {
+          /* Color key cannot be used if an opaque pixel also has that RGB color. */
+          profile->alpha = 1;
+          alpha_done = 1;
+        }
+      }
+    }
+
+    /*make the profile's key always 16-bit for consistency - repeat each byte twice*/
+    profile->key_r += (profile->key_r << 8);
+    profile->key_g += (profile->key_g << 8);
+    profile->key_b += (profile->key_b << 8);
+  }
+
+  color_tree_cleanup(&tree);
+  return error;
+}
+
+/*Automatically chooses color type that gives smallest amount of bits in the
+output image, e.g. grey if there are only greyscale pixels, palette if there
+are less than 256 colors, ...
+Updates values of mode with a potentially smaller color model. mode_out should
+contain the user chosen color model, but will be overwritten with the new chosen one.*/
+unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out,
+                                   const unsigned char* image, unsigned w, unsigned h,
+                                   const LodePNGColorMode* mode_in)
+{
+  LodePNGColorProfile prof;
+  unsigned error = 0;
+  unsigned i, n, palettebits, grey_ok, palette_ok;
+
+  lodepng_color_profile_init(&prof);
+  error = lodepng_get_color_profile(&prof, image, w, h, mode_in);
+  if(error) return error;
+  mode_out->key_defined = 0;
+
+  if(prof.key && w * h <= 16)
+  {
+    prof.alpha = 1; /*too few pixels to justify tRNS chunk overhead*/
+    if(prof.bits < 8) prof.bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/
+  }
+  grey_ok = !prof.colored && !prof.alpha; /*grey without alpha, with potentially low bits*/
+  n = prof.numcolors;
+  palettebits = n <= 2 ? 1 : (n <= 4 ? 2 : (n <= 16 ? 4 : 8));
+  palette_ok = n <= 256 && (n * 2 < w * h) && prof.bits <= 8;
+  if(w * h < n * 2) palette_ok = 0; /*don't add palette overhead if image has only a few pixels*/
+  if(grey_ok && prof.bits <= palettebits) palette_ok = 0; /*grey is less overhead*/
+
+  if(palette_ok)
+  {
+    unsigned char* p = prof.palette;
+    lodepng_palette_clear(mode_out); /*remove potential earlier palette*/
+    for(i = 0; i != prof.numcolors; ++i)
+    {
+      error = lodepng_palette_add(mode_out, p[i * 4 + 0], p[i * 4 + 1], p[i * 4 + 2], p[i * 4 + 3]);
+      if(error) break;
+    }
+
+    mode_out->colortype = LCT_PALETTE;
+    mode_out->bitdepth = palettebits;
+
+    if(mode_in->colortype == LCT_PALETTE && mode_in->palettesize >= mode_out->palettesize
+        && mode_in->bitdepth == mode_out->bitdepth)
+    {
+      /*If input should have same palette colors, keep original to preserve its order and prevent conversion*/
+      lodepng_color_mode_cleanup(mode_out);
+      lodepng_color_mode_copy(mode_out, mode_in);
+    }
+  }
+  else /*8-bit or 16-bit per channel*/
+  {
+    mode_out->bitdepth = prof.bits;
+    mode_out->colortype = prof.alpha ? (prof.colored ? LCT_RGBA : LCT_GREY_ALPHA)
+                                     : (prof.colored ? LCT_RGB : LCT_GREY);
+
+    if(prof.key && !prof.alpha)
+    {
+      unsigned mask = (1u << mode_out->bitdepth) - 1u; /*profile always uses 16-bit, mask converts it*/
+      mode_out->key_r = prof.key_r & mask;
+      mode_out->key_g = prof.key_g & mask;
+      mode_out->key_b = prof.key_b & mask;
+      mode_out->key_defined = 1;
+    }
+  }
+
+  return error;
+}
+
+#endif /* #ifdef LODEPNG_COMPILE_ENCODER */
+
+/*
+Paeth predicter, used by PNG filter type 4
+The parameters are of type short, but should come from unsigned chars, the shorts
+are only needed to make the paeth calculation correct.
+*/
+static unsigned char paethPredictor(short a, short b, short c)
+{
+  short pa = abs(b - c);
+  short pb = abs(a - c);
+  short pc = abs(a + b - c - c);
+
+  if(pc < pa && pc < pb) return (unsigned char)c;
+  else if(pb < pa) return (unsigned char)b;
+  else return (unsigned char)a;
+}
+
+/*shared values used by multiple Adam7 related functions*/
+
+static const unsigned ADAM7_IX[7] = { 0, 4, 0, 2, 0, 1, 0 }; /*x start values*/
+static const unsigned ADAM7_IY[7] = { 0, 0, 4, 0, 2, 0, 1 }; /*y start values*/
+static const unsigned ADAM7_DX[7] = { 8, 8, 4, 4, 2, 2, 1 }; /*x delta values*/
+static const unsigned ADAM7_DY[7] = { 8, 8, 8, 4, 4, 2, 2 }; /*y delta values*/
+
+/*
+Outputs various dimensions and positions in the image related to the Adam7 reduced images.
+passw: output containing the width of the 7 passes
+passh: output containing the height of the 7 passes
+filter_passstart: output containing the index of the start and end of each
+ reduced image with filter bytes
+padded_passstart output containing the index of the start and end of each
+ reduced image when without filter bytes but with padded scanlines
+passstart: output containing the index of the start and end of each reduced
+ image without padding between scanlines, but still padding between the images
+w, h: width and height of non-interlaced image
+bpp: bits per pixel
+"padded" is only relevant if bpp is less than 8 and a scanline or image does not
+ end at a full byte
+*/
+static void Adam7_getpassvalues(unsigned passw[7], unsigned passh[7], size_t filter_passstart[8],
+                                size_t padded_passstart[8], size_t passstart[8], unsigned w, unsigned h, unsigned bpp)
+{
+  /*the passstart values have 8 values: the 8th one indicates the byte after the end of the 7th (= last) pass*/
+  unsigned i;
+
+  /*calculate width and height in pixels of each pass*/
+  for(i = 0; i != 7; ++i)
+  {
+    passw[i] = (w + ADAM7_DX[i] - ADAM7_IX[i] - 1) / ADAM7_DX[i];
+    passh[i] = (h + ADAM7_DY[i] - ADAM7_IY[i] - 1) / ADAM7_DY[i];
+    if(passw[i] == 0) passh[i] = 0;
+    if(passh[i] == 0) passw[i] = 0;
+  }
+
+  filter_passstart[0] = padded_passstart[0] = passstart[0] = 0;
+  for(i = 0; i != 7; ++i)
+  {
+    /*if passw[i] is 0, it's 0 bytes, not 1 (no filtertype-byte)*/
+    filter_passstart[i + 1] = filter_passstart[i]
+                            + ((passw[i] && passh[i]) ? passh[i] * (1 + (passw[i] * bpp + 7) / 8) : 0);
+    /*bits padded if needed to fill full byte at end of each scanline*/
+    padded_passstart[i + 1] = padded_passstart[i] + passh[i] * ((passw[i] * bpp + 7) / 8);
+    /*only padded at end of reduced image*/
+    passstart[i + 1] = passstart[i] + (passh[i] * passw[i] * bpp + 7) / 8;
+  }
+}
+
+#ifdef LODEPNG_COMPILE_DECODER
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / PNG Decoder                                                            / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+/*read the information from the header and store it in the LodePNGInfo. return value is error*/
+unsigned lodepng_inspect(unsigned* w, unsigned* h, LodePNGState* state,
+                         const unsigned char* in, size_t insize)
+{
+  LodePNGInfo* info = &state->info_png;
+  if(insize == 0 || in == 0)
+  {
+    CERROR_RETURN_ERROR(state->error, 48); /*error: the given data is empty*/
+  }
+  if(insize < 33)
+  {
+    CERROR_RETURN_ERROR(state->error, 27); /*error: the data length is smaller than the length of a PNG header*/
+  }
+
+  /*when decoding a new PNG image, make sure all parameters created after previous decoding are reset*/
+  lodepng_info_cleanup(info);
+  lodepng_info_init(info);
+
+  if(in[0] != 137 || in[1] != 80 || in[2] != 78 || in[3] != 71
+     || in[4] != 13 || in[5] != 10 || in[6] != 26 || in[7] != 10)
+  {
+    CERROR_RETURN_ERROR(state->error, 28); /*error: the first 8 bytes are not the correct PNG signature*/
+  }
+  if(lodepng_chunk_length(in + 8) != 13)
+  {
+    CERROR_RETURN_ERROR(state->error, 94); /*error: header size must be 13 bytes*/
+  }
+  if(!lodepng_chunk_type_equals(in + 8, "IHDR"))
+  {
+    CERROR_RETURN_ERROR(state->error, 29); /*error: it doesn't start with a IHDR chunk!*/
+  }
+
+  /*read the values given in the header*/
+  *w = lodepng_read32bitInt(&in[16]);
+  *h = lodepng_read32bitInt(&in[20]);
+  info->color.bitdepth = in[24];
+  info->color.colortype = (LodePNGColorType)in[25];
+  info->compression_method = in[26];
+  info->filter_method = in[27];
+  info->interlace_method = in[28];
+
+  if(*w == 0 || *h == 0)
+  {
+    CERROR_RETURN_ERROR(state->error, 93);
+  }
+
+  if(!state->decoder.ignore_crc)
+  {
+    unsigned CRC = lodepng_read32bitInt(&in[29]);
+    unsigned checksum = lodepng_crc32(&in[12], 17);
+    if(CRC != checksum)
+    {
+      CERROR_RETURN_ERROR(state->error, 57); /*invalid CRC*/
+    }
+  }
+
+  /*error: only compression method 0 is allowed in the specification*/
+  if(info->compression_method != 0) CERROR_RETURN_ERROR(state->error, 32);
+  /*error: only filter method 0 is allowed in the specification*/
+  if(info->filter_method != 0) CERROR_RETURN_ERROR(state->error, 33);
+  /*error: only interlace methods 0 and 1 exist in the specification*/
+  if(info->interlace_method > 1) CERROR_RETURN_ERROR(state->error, 34);
+
+  state->error = checkColorValidity(info->color.colortype, info->color.bitdepth);
+  return state->error;
+}
+
+static unsigned unfilterScanline(unsigned char* recon, const unsigned char* scanline, const unsigned char* precon,
+                                 size_t bytewidth, unsigned char filterType, size_t length)
+{
+  /*
+  For PNG filter method 0
+  unfilter a PNG image scanline by scanline. when the pixels are smaller than 1 byte,
+  the filter works byte per byte (bytewidth = 1)
+  precon is the previous unfiltered scanline, recon the result, scanline the current one
+  the incoming scanlines do NOT include the filtertype byte, that one is given in the parameter filterType instead
+  recon and scanline MAY be the same memory address! precon must be disjoint.
+  */
+
+  size_t i;
+  switch(filterType)
+  {
+    case 0:
+      for(i = 0; i != length; ++i) recon[i] = scanline[i];
+      break;
+    case 1:
+      for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i];
+      for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + recon[i - bytewidth];
+      break;
+    case 2:
+      if(precon)
+      {
+        for(i = 0; i != length; ++i) recon[i] = scanline[i] + precon[i];
+      }
+      else
+      {
+        for(i = 0; i != length; ++i) recon[i] = scanline[i];
+      }
+      break;
+    case 3:
+      if(precon)
+      {
+        for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i] + (precon[i] >> 1);
+        for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + ((recon[i - bytewidth] + precon[i]) >> 1);
+      }
+      else
+      {
+        for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i];
+        for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + (recon[i - bytewidth] >> 1);
+      }
+      break;
+    case 4:
+      if(precon)
+      {
+        for(i = 0; i != bytewidth; ++i)
+        {
+          recon[i] = (scanline[i] + precon[i]); /*paethPredictor(0, precon[i], 0) is always precon[i]*/
+        }
+        for(i = bytewidth; i < length; ++i)
+        {
+          recon[i] = (scanline[i] + paethPredictor(recon[i - bytewidth], precon[i], precon[i - bytewidth]));
+        }
+      }
+      else
+      {
+        for(i = 0; i != bytewidth; ++i)
+        {
+          recon[i] = scanline[i];
+        }
+        for(i = bytewidth; i < length; ++i)
+        {
+          /*paethPredictor(recon[i - bytewidth], 0, 0) is always recon[i - bytewidth]*/
+          recon[i] = (scanline[i] + recon[i - bytewidth]);
+        }
+      }
+      break;
+    default: return 36; /*error: unexisting filter type given*/
+  }
+  return 0;
+}
+
+static unsigned unfilter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp)
+{
+  /*
+  For PNG filter method 0
+  this function unfilters a single image (e.g. without interlacing this is called once, with Adam7 seven times)
+  out must have enough bytes allocated already, in must have the scanlines + 1 filtertype byte per scanline
+  w and h are image dimensions or dimensions of reduced image, bpp is bits per pixel
+  in and out are allowed to be the same memory address (but aren't the same size since in has the extra filter bytes)
+  */
+
+  unsigned y;
+  unsigned char* prevline = 0;
+
+  /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/
+  size_t bytewidth = (bpp + 7) / 8;
+  size_t linebytes = (w * bpp + 7) / 8;
+
+  for(y = 0; y < h; ++y)
+  {
+    size_t outindex = linebytes * y;
+    size_t inindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/
+    unsigned char filterType = in[inindex];
+
+    CERROR_TRY_RETURN(unfilterScanline(&out[outindex], &in[inindex + 1], prevline, bytewidth, filterType, linebytes));
+
+    prevline = &out[outindex];
+  }
+
+  return 0;
+}
+
+/*
+in: Adam7 interlaced image, with no padding bits between scanlines, but between
+ reduced images so that each reduced image starts at a byte.
+out: the same pixels, but re-ordered so that they're now a non-interlaced image with size w*h
+bpp: bits per pixel
+out has the following size in bits: w * h * bpp.
+in is possibly bigger due to padding bits between reduced images.
+out must be big enough AND must be 0 everywhere if bpp < 8 in the current implementation
+(because that's likely a little bit faster)
+NOTE: comments about padding bits are only relevant if bpp < 8
+*/
+static void Adam7_deinterlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp)
+{
+  unsigned passw[7], passh[7];
+  size_t filter_passstart[8], padded_passstart[8], passstart[8];
+  unsigned i;
+
+  Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);
+
+  if(bpp >= 8)
+  {
+    for(i = 0; i != 7; ++i)
+    {
+      unsigned x, y, b;
+      size_t bytewidth = bpp / 8;
+      for(y = 0; y < passh[i]; ++y)
+      for(x = 0; x < passw[i]; ++x)
+      {
+        size_t pixelinstart = passstart[i] + (y * passw[i] + x) * bytewidth;
+        size_t pixeloutstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth;
+        for(b = 0; b < bytewidth; ++b)
+        {
+          out[pixeloutstart + b] = in[pixelinstart + b];
+        }
+      }
+    }
+  }
+  else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/
+  {
+    for(i = 0; i != 7; ++i)
+    {
+      unsigned x, y, b;
+      unsigned ilinebits = bpp * passw[i];
+      unsigned olinebits = bpp * w;
+      size_t obp, ibp; /*bit pointers (for out and in buffer)*/
+      for(y = 0; y < passh[i]; ++y)
+      for(x = 0; x < passw[i]; ++x)
+      {
+        ibp = (8 * passstart[i]) + (y * ilinebits + x * bpp);
+        obp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp;
+        for(b = 0; b < bpp; ++b)
+        {
+          unsigned char bit = readBitFromReversedStream(&ibp, in);
+          /*note that this function assumes the out buffer is completely 0, use setBitOfReversedStream otherwise*/
+          setBitOfReversedStream0(&obp, out, bit);
+        }
+      }
+    }
+  }
+}
+
+static void removePaddingBits(unsigned char* out, const unsigned char* in,
+                              size_t olinebits, size_t ilinebits, unsigned h)
+{
+  /*
+  After filtering there are still padding bits if scanlines have non multiple of 8 bit amounts. They need
+  to be removed (except at last scanline of (Adam7-reduced) image) before working with pure image buffers
+  for the Adam7 code, the color convert code and the output to the user.
+  in and out are allowed to be the same buffer, in may also be higher but still overlapping; in must
+  have >= ilinebits*h bits, out must have >= olinebits*h bits, olinebits must be <= ilinebits
+  also used to move bits after earlier such operations happened, e.g. in a sequence of reduced images from Adam7
+  only useful if (ilinebits - olinebits) is a value in the range 1..7
+  */
+  unsigned y;
+  size_t diff = ilinebits - olinebits;
+  size_t ibp = 0, obp = 0; /*input and output bit pointers*/
+  for(y = 0; y < h; ++y)
+  {
+    size_t x;
+    for(x = 0; x < olinebits; ++x)
+    {
+      unsigned char bit = readBitFromReversedStream(&ibp, in);
+      setBitOfReversedStream(&obp, out, bit);
+    }
+    ibp += diff;
+  }
+}
+
+/*out must be buffer big enough to contain full image, and in must contain the full decompressed data from
+the IDAT chunks (with filter index bytes and possible padding bits)
+return value is error*/
+static unsigned postProcessScanlines(unsigned char* out, unsigned char* in,
+                                     unsigned w, unsigned h, const LodePNGInfo* info_png)
+{
+  /*
+  This function converts the filtered-padded-interlaced data into pure 2D image buffer with the PNG's colortype.
+  Steps:
+  *) if no Adam7: 1) unfilter 2) remove padding bits (= posible extra bits per scanline if bpp < 8)
+  *) if adam7: 1) 7x unfilter 2) 7x remove padding bits 3) Adam7_deinterlace
+  NOTE: the in buffer will be overwritten with intermediate data!
+  */
+  unsigned bpp = lodepng_get_bpp(&info_png->color);
+  if(bpp == 0) return 31; /*error: invalid colortype*/
+
+  if(info_png->interlace_method == 0)
+  {
+    if(bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8)
+    {
+      CERROR_TRY_RETURN(unfilter(in, in, w, h, bpp));
+      removePaddingBits(out, in, w * bpp, ((w * bpp + 7) / 8) * 8, h);
+    }
+    /*we can immediately filter into the out buffer, no other steps needed*/
+    else CERROR_TRY_RETURN(unfilter(out, in, w, h, bpp));
+  }
+  else /*interlace_method is 1 (Adam7)*/
+  {
+    unsigned passw[7], passh[7]; size_t filter_passstart[8], padded_passstart[8], passstart[8];
+    unsigned i;
+
+    Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);
+
+    for(i = 0; i != 7; ++i)
+    {
+      CERROR_TRY_RETURN(unfilter(&in[padded_passstart[i]], &in[filter_passstart[i]], passw[i], passh[i], bpp));
+      /*TODO: possible efficiency improvement: if in this reduced image the bits fit nicely in 1 scanline,
+      move bytes instead of bits or move not at all*/
+      if(bpp < 8)
+      {
+        /*remove padding bits in scanlines; after this there still may be padding
+        bits between the different reduced images: each reduced image still starts nicely at a byte*/
+        removePaddingBits(&in[passstart[i]], &in[padded_passstart[i]], passw[i] * bpp,
+                          ((passw[i] * bpp + 7) / 8) * 8, passh[i]);
+      }
+    }
+
+    Adam7_deinterlace(out, in, w, h, bpp);
+  }
+
+  return 0;
+}
+
+static unsigned readChunk_PLTE(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength)
+{
+  unsigned pos = 0, i;
+  if(color->palette) lodepng_free(color->palette);
+  color->palettesize = chunkLength / 3;
+  color->palette = (unsigned char*)lodepng_malloc(4 * color->palettesize);
+  if(!color->palette && color->palettesize)
+  {
+    color->palettesize = 0;
+    return 83; /*alloc fail*/
+  }
+  if(color->palettesize > 256) return 38; /*error: palette too big*/
+
+  for(i = 0; i != color->palettesize; ++i)
+  {
+    color->palette[4 * i + 0] = data[pos++]; /*R*/
+    color->palette[4 * i + 1] = data[pos++]; /*G*/
+    color->palette[4 * i + 2] = data[pos++]; /*B*/
+    color->palette[4 * i + 3] = 255; /*alpha*/
+  }
+
+  return 0; /* OK */
+}
+
+static unsigned readChunk_tRNS(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength)
+{
+  unsigned i;
+  if(color->colortype == LCT_PALETTE)
+  {
+    /*error: more alpha values given than there are palette entries*/
+    if(chunkLength > color->palettesize) return 38;
+
+    for(i = 0; i != chunkLength; ++i) color->palette[4 * i + 3] = data[i];
+  }
+  else if(color->colortype == LCT_GREY)
+  {
+    /*error: this chunk must be 2 bytes for greyscale image*/
+    if(chunkLength != 2) return 30;
+
+    color->key_defined = 1;
+    color->key_r = color->key_g = color->key_b = 256u * data[0] + data[1];
+  }
+  else if(color->colortype == LCT_RGB)
+  {
+    /*error: this chunk must be 6 bytes for RGB image*/
+    if(chunkLength != 6) return 41;
+
+    color->key_defined = 1;
+    color->key_r = 256u * data[0] + data[1];
+    color->key_g = 256u * data[2] + data[3];
+    color->key_b = 256u * data[4] + data[5];
+  }
+  else return 42; /*error: tRNS chunk not allowed for other color models*/
+
+  return 0; /* OK */
+}
+
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+/*background color chunk (bKGD)*/
+static unsigned readChunk_bKGD(LodePNGInfo* info, const unsigned char* data, size_t chunkLength)
+{
+  if(info->color.colortype == LCT_PALETTE)
+  {
+    /*error: this chunk must be 1 byte for indexed color image*/
+    if(chunkLength != 1) return 43;
+
+    info->background_defined = 1;
+    info->background_r = info->background_g = info->background_b = data[0];
+  }
+  else if(info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA)
+  {
+    /*error: this chunk must be 2 bytes for greyscale image*/
+    if(chunkLength != 2) return 44;
+
+    info->background_defined = 1;
+    info->background_r = info->background_g = info->background_b = 256u * data[0] + data[1];
+  }
+  else if(info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA)
+  {
+    /*error: this chunk must be 6 bytes for greyscale image*/
+    if(chunkLength != 6) return 45;
+
+    info->background_defined = 1;
+    info->background_r = 256u * data[0] + data[1];
+    info->background_g = 256u * data[2] + data[3];
+    info->background_b = 256u * data[4] + data[5];
+  }
+
+  return 0; /* OK */
+}
+
+/*text chunk (tEXt)*/
+static unsigned readChunk_tEXt(LodePNGInfo* info, const unsigned char* data, unsigned int chunkLength)
+{
+  unsigned error = 0;
+  char *key = 0, *str = 0;
+  unsigned i;
+
+  while(!error) /*not really a while loop, only used to break on error*/
+  {
+    unsigned length, string2_begin;
+
+    length = 0;
+    while(length < chunkLength && data[length] != 0) ++length;
+    /*even though it's not allowed by the standard, no error is thrown if
+    there's no null termination char, if the text is empty*/
+    if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/
+
+    key = (char*)lodepng_malloc(length + 1);
+    if(!key) CERROR_BREAK(error, 83); /*alloc fail*/
+
+    key[length] = 0;
+    for(i = 0; i != length; ++i) key[i] = (char)data[i];
+
+    string2_begin = length + 1; /*skip keyword null terminator*/
+
+    length = chunkLength < string2_begin ? 0 : chunkLength - string2_begin;
+    str = (char*)lodepng_malloc(length + 1);
+    if(!str) CERROR_BREAK(error, 83); /*alloc fail*/
+
+    str[length] = 0;
+    for(i = 0; i != length; ++i) str[i] = (char)data[string2_begin + i];
+
+    error = lodepng_add_text(info, key, str);
+
+    break;
+  }
+
+  lodepng_free(key);
+  lodepng_free(str);
+
+  return error;
+}
+
+/*compressed text chunk (zTXt)*/
+static unsigned readChunk_zTXt(LodePNGInfo* info, const LodePNGDecompressSettings* zlibsettings,
+                               const unsigned char* data, unsigned int chunkLength)
+{
+  unsigned error = 0;
+  unsigned i;
+
+  unsigned length, string2_begin;
+  char *key = 0;
+  ucvector decoded;
+
+  ucvector_init(&decoded);
+
+  while(!error) /*not really a while loop, only used to break on error*/
+  {
+    for(length = 0; length < chunkLength && data[length] != 0; ++length) ;
+    if(length + 2 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/
+    if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/
+
+    key = (char*)lodepng_malloc(length + 1);
+    if(!key) CERROR_BREAK(error, 83); /*alloc fail*/
+
+    key[length] = 0;
+    for(i = 0; i != length; ++i) key[i] = (char)data[i];
+
+    if(data[length + 1] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/
+
+    string2_begin = length + 2;
+    if(string2_begin > chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/
+
+    length = chunkLength - string2_begin;
+    /*will fail if zlib error, e.g. if length is too small*/
+    error = zlib_decompress(&decoded.data, &decoded.size,
+                            (unsigned char*)(&data[string2_begin]),
+                            length, zlibsettings);
+    if(error) break;
+    ucvector_push_back(&decoded, 0);
+
+    error = lodepng_add_text(info, key, (char*)decoded.data);
+
+    break;
+  }
+
+  lodepng_free(key);
+  ucvector_cleanup(&decoded);
+
+  return error;
+}
+
+/*international text chunk (iTXt)*/
+static unsigned readChunk_iTXt(LodePNGInfo* info, const LodePNGDecompressSettings* zlibsettings,
+                               const unsigned char* data, unsigned int chunkLength)
+{
+  unsigned error = 0;
+  unsigned i;
+
+  unsigned length, begin, compressed;
+  char *key = 0, *langtag = 0, *transkey = 0;
+  ucvector decoded;
+  ucvector_init(&decoded);
+
+  while(!error) /*not really a while loop, only used to break on error*/
+  {
+    /*Quick check if the chunk length isn't too small. Even without check
+    it'd still fail with other error checks below if it's too short. This just gives a different error code.*/
+    if(chunkLength < 5) CERROR_BREAK(error, 30); /*iTXt chunk too short*/
+
+    /*read the key*/
+    for(length = 0; length < chunkLength && data[length] != 0; ++length) ;
+    if(length + 3 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination char, corrupt?*/
+    if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/
+
+    key = (char*)lodepng_malloc(length + 1);
+    if(!key) CERROR_BREAK(error, 83); /*alloc fail*/
+
+    key[length] = 0;
+    for(i = 0; i != length; ++i) key[i] = (char)data[i];
+
+    /*read the compression method*/
+    compressed = data[length + 1];
+    if(data[length + 2] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/
+
+    /*even though it's not allowed by the standard, no error is thrown if
+    there's no null termination char, if the text is empty for the next 3 texts*/
+
+    /*read the langtag*/
+    begin = length + 3;
+    length = 0;
+    for(i = begin; i < chunkLength && data[i] != 0; ++i) ++length;
+
+    langtag = (char*)lodepng_malloc(length + 1);
+    if(!langtag) CERROR_BREAK(error, 83); /*alloc fail*/
+
+    langtag[length] = 0;
+    for(i = 0; i != length; ++i) langtag[i] = (char)data[begin + i];
+
+    /*read the transkey*/
+    begin += length + 1;
+    length = 0;
+    for(i = begin; i < chunkLength && data[i] != 0; ++i) ++length;
+
+    transkey = (char*)lodepng_malloc(length + 1);
+    if(!transkey) CERROR_BREAK(error, 83); /*alloc fail*/
+
+    transkey[length] = 0;
+    for(i = 0; i != length; ++i) transkey[i] = (char)data[begin + i];
+
+    /*read the actual text*/
+    begin += length + 1;
+
+    length = chunkLength < begin ? 0 : chunkLength - begin;
+
+    if(compressed)
+    {
+      /*will fail if zlib error, e.g. if length is too small*/
+      error = zlib_decompress(&decoded.data, &decoded.size,
+                              (unsigned char*)(&data[begin]),
+                              length, zlibsettings);
+      if(error) break;
+      if(decoded.allocsize < decoded.size) decoded.allocsize = decoded.size;
+      ucvector_push_back(&decoded, 0);
+    }
+    else
+    {
+      if(!ucvector_resize(&decoded, length + 1)) CERROR_BREAK(error, 83 /*alloc fail*/);
+
+      decoded.data[length] = 0;
+      for(i = 0; i != length; ++i) decoded.data[i] = data[begin + i];
+    }
+
+    error = lodepng_add_itext(info, key, langtag, transkey, (char*)decoded.data);
+
+    break;
+  }
+
+  lodepng_free(key);
+  lodepng_free(langtag);
+  lodepng_free(transkey);
+  ucvector_cleanup(&decoded);
+
+  return error;
+}
+
+static unsigned readChunk_tIME(LodePNGInfo* info, const unsigned char* data, size_t chunkLength)
+{
+  if(chunkLength != 7) return 73; /*invalid tIME chunk size*/
+
+  info->time_defined = 1;
+  info->time.year = 256u * data[0] + data[1];
+  info->time.month = data[2];
+  info->time.day = data[3];
+  info->time.hour = data[4];
+  info->time.minute = data[5];
+  info->time.second = data[6];
+
+  return 0; /* OK */
+}
+
+static unsigned readChunk_pHYs(LodePNGInfo* info, const unsigned char* data, size_t chunkLength)
+{
+  if(chunkLength != 9) return 74; /*invalid pHYs chunk size*/
+
+  info->phys_defined = 1;
+  info->phys_x = 16777216u * data[0] + 65536u * data[1] + 256u * data[2] + data[3];
+  info->phys_y = 16777216u * data[4] + 65536u * data[5] + 256u * data[6] + data[7];
+  info->phys_unit = data[8];
+
+  return 0; /* OK */
+}
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+
+/*read a PNG, the result will be in the same color type as the PNG (hence "generic")*/
+static void decodeGeneric(unsigned char** out, unsigned* w, unsigned* h,
+                          LodePNGState* state,
+                          const unsigned char* in, size_t insize)
+{
+  unsigned char IEND = 0;
+  const unsigned char* chunk;
+  size_t i;
+  ucvector idat; /*the data from idat chunks*/
+  ucvector scanlines;
+  size_t predict;
+  size_t numpixels;
+  size_t outsize;
+
+  /*for unknown chunk order*/
+  unsigned unknown = 0;
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  unsigned critical_pos = 1; /*1 = after IHDR, 2 = after PLTE, 3 = after IDAT*/
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+
+  /*provide some proper output values if error will happen*/
+  *out = 0;
+
+  state->error = lodepng_inspect(w, h, state, in, insize); /*reads header and resets other parameters in state->info_png*/
+  if(state->error) return;
+
+  numpixels = *w * *h;
+
+  /*multiplication overflow*/
+  if(*h != 0 && numpixels / *h != *w) CERROR_RETURN(state->error, 92);
+  /*multiplication overflow possible further below. Allows up to 2^31-1 pixel
+  bytes with 16-bit RGBA, the rest is room for filter bytes.*/
+  if(numpixels > 268435455) CERROR_RETURN(state->error, 92);
+
+  ucvector_init(&idat);
+  chunk = &in[33]; /*first byte of the first chunk after the header*/
+
+  /*loop through the chunks, ignoring unknown chunks and stopping at IEND chunk.
+  IDAT data is put at the start of the in buffer*/
+  while(!IEND && !state->error)
+  {
+    unsigned chunkLength;
+    const unsigned char* data; /*the data in the chunk*/
+
+    /*error: size of the in buffer too small to contain next chunk*/
+    if((size_t)((chunk - in) + 12) > insize || chunk < in) CERROR_BREAK(state->error, 30);
+
+    /*length of the data of the chunk, excluding the length bytes, chunk type and CRC bytes*/
+    chunkLength = lodepng_chunk_length(chunk);
+    /*error: chunk length larger than the max PNG chunk size*/
+    if(chunkLength > 2147483647) CERROR_BREAK(state->error, 63);
+
+    if((size_t)((chunk - in) + chunkLength + 12) > insize || (chunk + chunkLength + 12) < in)
+    {
+      CERROR_BREAK(state->error, 64); /*error: size of the in buffer too small to contain next chunk*/
+    }
+
+    data = lodepng_chunk_data_const(chunk);
+
+    /*IDAT chunk, containing compressed image data*/
+    if(lodepng_chunk_type_equals(chunk, "IDAT"))
+    {
+      size_t oldsize = idat.size;
+      if(!ucvector_resize(&idat, oldsize + chunkLength)) CERROR_BREAK(state->error, 83 /*alloc fail*/);
+      for(i = 0; i != chunkLength; ++i) idat.data[oldsize + i] = data[i];
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+      critical_pos = 3;
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+    }
+    /*IEND chunk*/
+    else if(lodepng_chunk_type_equals(chunk, "IEND"))
+    {
+      IEND = 1;
+    }
+    /*palette chunk (PLTE)*/
+    else if(lodepng_chunk_type_equals(chunk, "PLTE"))
+    {
+      state->error = readChunk_PLTE(&state->info_png.color, data, chunkLength);
+      if(state->error) break;
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+      critical_pos = 2;
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+    }
+    /*palette transparency chunk (tRNS)*/
+    else if(lodepng_chunk_type_equals(chunk, "tRNS"))
+    {
+      state->error = readChunk_tRNS(&state->info_png.color, data, chunkLength);
+      if(state->error) break;
+    }
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+    /*background color chunk (bKGD)*/
+    else if(lodepng_chunk_type_equals(chunk, "bKGD"))
+    {
+      state->error = readChunk_bKGD(&state->info_png, data, chunkLength);
+      if(state->error) break;
+    }
+    /*text chunk (tEXt)*/
+    else if(lodepng_chunk_type_equals(chunk, "tEXt"))
+    {
+      if(state->decoder.read_text_chunks)
+      {
+        state->error = readChunk_tEXt(&state->info_png, data, chunkLength);
+        if(state->error) break;
+      }
+    }
+    /*compressed text chunk (zTXt)*/
+    else if(lodepng_chunk_type_equals(chunk, "zTXt"))
+    {
+      if(state->decoder.read_text_chunks)
+      {
+        state->error = readChunk_zTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength);
+        if(state->error) break;
+      }
+    }
+    /*international text chunk (iTXt)*/
+    else if(lodepng_chunk_type_equals(chunk, "iTXt"))
+    {
+      if(state->decoder.read_text_chunks)
+      {
+        state->error = readChunk_iTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength);
+        if(state->error) break;
+      }
+    }
+    else if(lodepng_chunk_type_equals(chunk, "tIME"))
+    {
+      state->error = readChunk_tIME(&state->info_png, data, chunkLength);
+      if(state->error) break;
+    }
+    else if(lodepng_chunk_type_equals(chunk, "pHYs"))
+    {
+      state->error = readChunk_pHYs(&state->info_png, data, chunkLength);
+      if(state->error) break;
+    }
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+    else /*it's not an implemented chunk type, so ignore it: skip over the data*/
+    {
+      /*error: unknown critical chunk (5th bit of first byte of chunk type is 0)*/
+      if(!lodepng_chunk_ancillary(chunk)) CERROR_BREAK(state->error, 69);
+
+      unknown = 1;
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+      if(state->decoder.remember_unknown_chunks)
+      {
+        state->error = lodepng_chunk_append(&state->info_png.unknown_chunks_data[critical_pos - 1],
+                                            &state->info_png.unknown_chunks_size[critical_pos - 1], chunk);
+        if(state->error) break;
+      }
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+    }
+
+    if(!state->decoder.ignore_crc && !unknown) /*check CRC if wanted, only on known chunk types*/
+    {
+      if(lodepng_chunk_check_crc(chunk)) CERROR_BREAK(state->error, 57); /*invalid CRC*/
+    }
+
+    if(!IEND) chunk = lodepng_chunk_next_const(chunk);
+  }
+
+  ucvector_init(&scanlines);
+  /*predict output size, to allocate exact size for output buffer to avoid more dynamic allocation.
+  If the decompressed size does not match the prediction, the image must be corrupt.*/
+  if(state->info_png.interlace_method == 0)
+  {
+    /*The extra *h is added because this are the filter bytes every scanline starts with*/
+    predict = lodepng_get_raw_size_idat(*w, *h, &state->info_png.color) + *h;
+  }
+  else
+  {
+    /*Adam-7 interlaced: predicted size is the sum of the 7 sub-images sizes*/
+    const LodePNGColorMode* color = &state->info_png.color;
+    predict = 0;
+    predict += lodepng_get_raw_size_idat((*w + 7) >> 3, (*h + 7) >> 3, color) + ((*h + 7) >> 3);
+    if(*w > 4) predict += lodepng_get_raw_size_idat((*w + 3) >> 3, (*h + 7) >> 3, color) + ((*h + 7) >> 3);
+    predict += lodepng_get_raw_size_idat((*w + 3) >> 2, (*h + 3) >> 3, color) + ((*h + 3) >> 3);
+    if(*w > 2) predict += lodepng_get_raw_size_idat((*w + 1) >> 2, (*h + 3) >> 2, color) + ((*h + 3) >> 2);
+    predict += lodepng_get_raw_size_idat((*w + 1) >> 1, (*h + 1) >> 2, color) + ((*h + 1) >> 2);
+    if(*w > 1) predict += lodepng_get_raw_size_idat((*w + 0) >> 1, (*h + 1) >> 1, color) + ((*h + 1) >> 1);
+    predict += lodepng_get_raw_size_idat((*w + 0), (*h + 0) >> 1, color) + ((*h + 0) >> 1);
+  }
+  if(!state->error && !ucvector_reserve(&scanlines, predict)) state->error = 83; /*alloc fail*/
+  if(!state->error)
+  {
+    state->error = zlib_decompress(&scanlines.data, &scanlines.size, idat.data,
+                                   idat.size, &state->decoder.zlibsettings);
+    if(!state->error && scanlines.size != predict) state->error = 91; /*decompressed size doesn't match prediction*/
+  }
+  ucvector_cleanup(&idat);
+
+  if(!state->error)
+  {
+    outsize = lodepng_get_raw_size(*w, *h, &state->info_png.color);
+    *out = (unsigned char*)lodepng_malloc(outsize);
+    if(!*out) state->error = 83; /*alloc fail*/
+  }
+  if(!state->error)
+  {
+    for(i = 0; i < outsize; i++) (*out)[i] = 0;
+    state->error = postProcessScanlines(*out, scanlines.data, *w, *h, &state->info_png);
+  }
+  ucvector_cleanup(&scanlines);
+}
+
+unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h,
+                        LodePNGState* state,
+                        const unsigned char* in, size_t insize)
+{
+  *out = 0;
+  decodeGeneric(out, w, h, state, in, insize);
+  if(state->error) return state->error;
+  if(!state->decoder.color_convert || lodepng_color_mode_equal(&state->info_raw, &state->info_png.color))
+  {
+    /*same color type, no copying or converting of data needed*/
+    /*store the info_png color settings on the info_raw so that the info_raw still reflects what colortype
+    the raw image has to the end user*/
+    if(!state->decoder.color_convert)
+    {
+      state->error = lodepng_color_mode_copy(&state->info_raw, &state->info_png.color);
+      if(state->error) return state->error;
+    }
+  }
+  else
+  {
+    /*color conversion needed; sort of copy of the data*/
+    unsigned char* data = *out;
+    size_t outsize;
+
+    /*TODO: check if this works according to the statement in the documentation: "The converter can convert
+    from greyscale input color type, to 8-bit greyscale or greyscale with alpha"*/
+    if(!(state->info_raw.colortype == LCT_RGB || state->info_raw.colortype == LCT_RGBA)
+       && !(state->info_raw.bitdepth == 8))
+    {
+      return 56; /*unsupported color mode conversion*/
+    }
+
+    outsize = lodepng_get_raw_size(*w, *h, &state->info_raw);
+    *out = (unsigned char*)lodepng_malloc(outsize);
+    if(!(*out))
+    {
+      state->error = 83; /*alloc fail*/
+    }
+    else state->error = lodepng_convert(*out, data, &state->info_raw,
+                                        &state->info_png.color, *w, *h);
+    lodepng_free(data);
+  }
+  return state->error;
+}
+
+unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in,
+                               size_t insize, LodePNGColorType colortype, unsigned bitdepth)
+{
+  unsigned error;
+  LodePNGState state;
+  lodepng_state_init(&state);
+  state.info_raw.colortype = colortype;
+  state.info_raw.bitdepth = bitdepth;
+  error = lodepng_decode(out, w, h, &state, in, insize);
+  lodepng_state_cleanup(&state);
+  return error;
+}
+
+unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize)
+{
+  return lodepng_decode_memory(out, w, h, in, insize, LCT_RGBA, 8);
+}
+
+unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize)
+{
+  return lodepng_decode_memory(out, w, h, in, insize, LCT_RGB, 8);
+}
+
+#ifdef LODEPNG_COMPILE_DISK
+unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename,
+                             LodePNGColorType colortype, unsigned bitdepth)
+{
+  unsigned char* buffer = 0;
+  size_t buffersize;
+  unsigned error;
+  error = lodepng_load_file(&buffer, &buffersize, filename);
+  if(!error) error = lodepng_decode_memory(out, w, h, buffer, buffersize, colortype, bitdepth);
+  lodepng_free(buffer);
+  return error;
+}
+
+unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename)
+{
+  return lodepng_decode_file(out, w, h, filename, LCT_RGBA, 8);
+}
+
+unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename)
+{
+  return lodepng_decode_file(out, w, h, filename, LCT_RGB, 8);
+}
+#endif /*LODEPNG_COMPILE_DISK*/
+
+void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings)
+{
+  settings->color_convert = 1;
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  settings->read_text_chunks = 1;
+  settings->remember_unknown_chunks = 0;
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+  settings->ignore_crc = 0;
+  lodepng_decompress_settings_init(&settings->zlibsettings);
+}
+
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER)
+
+void lodepng_state_init(LodePNGState* state)
+{
+#ifdef LODEPNG_COMPILE_DECODER
+  lodepng_decoder_settings_init(&state->decoder);
+#endif /*LODEPNG_COMPILE_DECODER*/
+#ifdef LODEPNG_COMPILE_ENCODER
+  lodepng_encoder_settings_init(&state->encoder);
+#endif /*LODEPNG_COMPILE_ENCODER*/
+  lodepng_color_mode_init(&state->info_raw);
+  lodepng_info_init(&state->info_png);
+  state->error = 1;
+}
+
+void lodepng_state_cleanup(LodePNGState* state)
+{
+  lodepng_color_mode_cleanup(&state->info_raw);
+  lodepng_info_cleanup(&state->info_png);
+}
+
+void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source)
+{
+  lodepng_state_cleanup(dest);
+  *dest = *source;
+  lodepng_color_mode_init(&dest->info_raw);
+  lodepng_info_init(&dest->info_png);
+  dest->error = lodepng_color_mode_copy(&dest->info_raw, &source->info_raw); if(dest->error) return;
+  dest->error = lodepng_info_copy(&dest->info_png, &source->info_png); if(dest->error) return;
+}
+
+#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */
+
+#ifdef LODEPNG_COMPILE_ENCODER
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / PNG Encoder                                                            / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+/*chunkName must be string of 4 characters*/
+static unsigned addChunk(ucvector* out, const char* chunkName, const unsigned char* data, size_t length)
+{
+  CERROR_TRY_RETURN(lodepng_chunk_create(&out->data, &out->size, (unsigned)length, chunkName, data));
+  out->allocsize = out->size; /*fix the allocsize again*/
+  return 0;
+}
+
+static void writeSignature(ucvector* out)
+{
+  /*8 bytes PNG signature, aka the magic bytes*/
+  ucvector_push_back(out, 137);
+  ucvector_push_back(out, 80);
+  ucvector_push_back(out, 78);
+  ucvector_push_back(out, 71);
+  ucvector_push_back(out, 13);
+  ucvector_push_back(out, 10);
+  ucvector_push_back(out, 26);
+  ucvector_push_back(out, 10);
+}
+
+static unsigned addChunk_IHDR(ucvector* out, unsigned w, unsigned h,
+                              LodePNGColorType colortype, unsigned bitdepth, unsigned interlace_method)
+{
+  unsigned error = 0;
+  ucvector header;
+  ucvector_init(&header);
+
+  lodepng_add32bitInt(&header, w); /*width*/
+  lodepng_add32bitInt(&header, h); /*height*/
+  ucvector_push_back(&header, (unsigned char)bitdepth); /*bit depth*/
+  ucvector_push_back(&header, (unsigned char)colortype); /*color type*/
+  ucvector_push_back(&header, 0); /*compression method*/
+  ucvector_push_back(&header, 0); /*filter method*/
+  ucvector_push_back(&header, interlace_method); /*interlace method*/
+
+  error = addChunk(out, "IHDR", header.data, header.size);
+  ucvector_cleanup(&header);
+
+  return error;
+}
+
+static unsigned addChunk_PLTE(ucvector* out, const LodePNGColorMode* info)
+{
+  unsigned error = 0;
+  size_t i;
+  ucvector PLTE;
+  ucvector_init(&PLTE);
+  for(i = 0; i != info->palettesize * 4; ++i)
+  {
+    /*add all channels except alpha channel*/
+    if(i % 4 != 3) ucvector_push_back(&PLTE, info->palette[i]);
+  }
+  error = addChunk(out, "PLTE", PLTE.data, PLTE.size);
+  ucvector_cleanup(&PLTE);
+
+  return error;
+}
+
+static unsigned addChunk_tRNS(ucvector* out, const LodePNGColorMode* info)
+{
+  unsigned error = 0;
+  size_t i;
+  ucvector tRNS;
+  ucvector_init(&tRNS);
+  if(info->colortype == LCT_PALETTE)
+  {
+    size_t amount = info->palettesize;
+    /*the tail of palette values that all have 255 as alpha, does not have to be encoded*/
+    for(i = info->palettesize; i != 0; --i)
+    {
+      if(info->palette[4 * (i - 1) + 3] == 255) --amount;
+      else break;
+    }
+    /*add only alpha channel*/
+    for(i = 0; i != amount; ++i) ucvector_push_back(&tRNS, info->palette[4 * i + 3]);
+  }
+  else if(info->colortype == LCT_GREY)
+  {
+    if(info->key_defined)
+    {
+      ucvector_push_back(&tRNS, (unsigned char)(info->key_r >> 8));
+      ucvector_push_back(&tRNS, (unsigned char)(info->key_r & 255));
+    }
+  }
+  else if(info->colortype == LCT_RGB)
+  {
+    if(info->key_defined)
+    {
+      ucvector_push_back(&tRNS, (unsigned char)(info->key_r >> 8));
+      ucvector_push_back(&tRNS, (unsigned char)(info->key_r & 255));
+      ucvector_push_back(&tRNS, (unsigned char)(info->key_g >> 8));
+      ucvector_push_back(&tRNS, (unsigned char)(info->key_g & 255));
+      ucvector_push_back(&tRNS, (unsigned char)(info->key_b >> 8));
+      ucvector_push_back(&tRNS, (unsigned char)(info->key_b & 255));
+    }
+  }
+
+  error = addChunk(out, "tRNS", tRNS.data, tRNS.size);
+  ucvector_cleanup(&tRNS);
+
+  return error;
+}
+
+static unsigned addChunk_IDAT(ucvector* out, const unsigned char* data, size_t datasize,
+                              LodePNGCompressSettings* zlibsettings)
+{
+  ucvector zlibdata;
+  unsigned error = 0;
+
+  /*compress with the Zlib compressor*/
+  ucvector_init(&zlibdata);
+  error = zlib_compress(&zlibdata.data, &zlibdata.size, data, datasize, zlibsettings);
+  if(!error) error = addChunk(out, "IDAT", zlibdata.data, zlibdata.size);
+  ucvector_cleanup(&zlibdata);
+
+  return error;
+}
+
+static unsigned addChunk_IEND(ucvector* out)
+{
+  unsigned error = 0;
+  error = addChunk(out, "IEND", 0, 0);
+  return error;
+}
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+
+static unsigned addChunk_tEXt(ucvector* out, const char* keyword, const char* textstring)
+{
+  unsigned error = 0;
+  size_t i;
+  ucvector text;
+  ucvector_init(&text);
+  for(i = 0; keyword[i] != 0; ++i) ucvector_push_back(&text, (unsigned char)keyword[i]);
+  if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/
+  ucvector_push_back(&text, 0); /*0 termination char*/
+  for(i = 0; textstring[i] != 0; ++i) ucvector_push_back(&text, (unsigned char)textstring[i]);
+  error = addChunk(out, "tEXt", text.data, text.size);
+  ucvector_cleanup(&text);
+
+  return error;
+}
+
+static unsigned addChunk_zTXt(ucvector* out, const char* keyword, const char* textstring,
+                              LodePNGCompressSettings* zlibsettings)
+{
+  unsigned error = 0;
+  ucvector data, compressed;
+  size_t i, textsize = strlen(textstring);
+
+  ucvector_init(&data);
+  ucvector_init(&compressed);
+  for(i = 0; keyword[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)keyword[i]);
+  if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/
+  ucvector_push_back(&data, 0); /*0 termination char*/
+  ucvector_push_back(&data, 0); /*compression method: 0*/
+
+  error = zlib_compress(&compressed.data, &compressed.size,
+                        (unsigned char*)textstring, textsize, zlibsettings);
+  if(!error)
+  {
+    for(i = 0; i != compressed.size; ++i) ucvector_push_back(&data, compressed.data[i]);
+    error = addChunk(out, "zTXt", data.data, data.size);
+  }
+
+  ucvector_cleanup(&compressed);
+  ucvector_cleanup(&data);
+  return error;
+}
+
+static unsigned addChunk_iTXt(ucvector* out, unsigned compressed, const char* keyword, const char* langtag,
+                              const char* transkey, const char* textstring, LodePNGCompressSettings* zlibsettings)
+{
+  unsigned error = 0;
+  ucvector data;
+  size_t i, textsize = strlen(textstring);
+
+  ucvector_init(&data);
+
+  for(i = 0; keyword[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)keyword[i]);
+  if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/
+  ucvector_push_back(&data, 0); /*null termination char*/
+  ucvector_push_back(&data, compressed ? 1 : 0); /*compression flag*/
+  ucvector_push_back(&data, 0); /*compression method*/
+  for(i = 0; langtag[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)langtag[i]);
+  ucvector_push_back(&data, 0); /*null termination char*/
+  for(i = 0; transkey[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)transkey[i]);
+  ucvector_push_back(&data, 0); /*null termination char*/
+
+  if(compressed)
+  {
+    ucvector compressed_data;
+    ucvector_init(&compressed_data);
+    error = zlib_compress(&compressed_data.data, &compressed_data.size,
+                          (unsigned char*)textstring, textsize, zlibsettings);
+    if(!error)
+    {
+      for(i = 0; i != compressed_data.size; ++i) ucvector_push_back(&data, compressed_data.data[i]);
+    }
+    ucvector_cleanup(&compressed_data);
+  }
+  else /*not compressed*/
+  {
+    for(i = 0; textstring[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)textstring[i]);
+  }
+
+  if(!error) error = addChunk(out, "iTXt", data.data, data.size);
+  ucvector_cleanup(&data);
+  return error;
+}
+
+static unsigned addChunk_bKGD(ucvector* out, const LodePNGInfo* info)
+{
+  unsigned error = 0;
+  ucvector bKGD;
+  ucvector_init(&bKGD);
+  if(info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA)
+  {
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_r >> 8));
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255));
+  }
+  else if(info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA)
+  {
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_r >> 8));
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255));
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_g >> 8));
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_g & 255));
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_b >> 8));
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_b & 255));
+  }
+  else if(info->color.colortype == LCT_PALETTE)
+  {
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255)); /*palette index*/
+  }
+
+  error = addChunk(out, "bKGD", bKGD.data, bKGD.size);
+  ucvector_cleanup(&bKGD);
+
+  return error;
+}
+
+static unsigned addChunk_tIME(ucvector* out, const LodePNGTime* time)
+{
+  unsigned error = 0;
+  unsigned char* data = (unsigned char*)lodepng_malloc(7);
+  if(!data) return 83; /*alloc fail*/
+  data[0] = (unsigned char)(time->year >> 8);
+  data[1] = (unsigned char)(time->year & 255);
+  data[2] = (unsigned char)time->month;
+  data[3] = (unsigned char)time->day;
+  data[4] = (unsigned char)time->hour;
+  data[5] = (unsigned char)time->minute;
+  data[6] = (unsigned char)time->second;
+  error = addChunk(out, "tIME", data, 7);
+  lodepng_free(data);
+  return error;
+}
+
+static unsigned addChunk_pHYs(ucvector* out, const LodePNGInfo* info)
+{
+  unsigned error = 0;
+  ucvector data;
+  ucvector_init(&data);
+
+  lodepng_add32bitInt(&data, info->phys_x);
+  lodepng_add32bitInt(&data, info->phys_y);
+  ucvector_push_back(&data, info->phys_unit);
+
+  error = addChunk(out, "pHYs", data.data, data.size);
+  ucvector_cleanup(&data);
+
+  return error;
+}
+
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+
+static void filterScanline(unsigned char* out, const unsigned char* scanline, const unsigned char* prevline,
+                           size_t length, size_t bytewidth, unsigned char filterType)
+{
+  size_t i;
+  switch(filterType)
+  {
+    case 0: /*None*/
+      for(i = 0; i != length; ++i) out[i] = scanline[i];
+      break;
+    case 1: /*Sub*/
+      for(i = 0; i != bytewidth; ++i) out[i] = scanline[i];
+      for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - scanline[i - bytewidth];
+      break;
+    case 2: /*Up*/
+      if(prevline)
+      {
+        for(i = 0; i != length; ++i) out[i] = scanline[i] - prevline[i];
+      }
+      else
+      {
+        for(i = 0; i != length; ++i) out[i] = scanline[i];
+      }
+      break;
+    case 3: /*Average*/
+      if(prevline)
+      {
+        for(i = 0; i != bytewidth; ++i) out[i] = scanline[i] - (prevline[i] >> 1);
+        for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - ((scanline[i - bytewidth] + prevline[i]) >> 1);
+      }
+      else
+      {
+        for(i = 0; i != bytewidth; ++i) out[i] = scanline[i];
+        for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - (scanline[i - bytewidth] >> 1);
+      }
+      break;
+    case 4: /*Paeth*/
+      if(prevline)
+      {
+        /*paethPredictor(0, prevline[i], 0) is always prevline[i]*/
+        for(i = 0; i != bytewidth; ++i) out[i] = (scanline[i] - prevline[i]);
+        for(i = bytewidth; i < length; ++i)
+        {
+          out[i] = (scanline[i] - paethPredictor(scanline[i - bytewidth], prevline[i], prevline[i - bytewidth]));
+        }
+      }
+      else
+      {
+        for(i = 0; i != bytewidth; ++i) out[i] = scanline[i];
+        /*paethPredictor(scanline[i - bytewidth], 0, 0) is always scanline[i - bytewidth]*/
+        for(i = bytewidth; i < length; ++i) out[i] = (scanline[i] - scanline[i - bytewidth]);
+      }
+      break;
+    default: return; /*unexisting filter type given*/
+  }
+}
+
+/* log2 approximation. A slight bit faster than std::log. */
+static float flog2(float f)
+{
+  float result = 0;
+  while(f > 32) { result += 4; f /= 16; }
+  while(f > 2) { ++result; f /= 2; }
+  return result + 1.442695f * (f * f * f / 3 - 3 * f * f / 2 + 3 * f - 1.83333f);
+}
+
+static unsigned filter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h,
+                       const LodePNGColorMode* info, const LodePNGEncoderSettings* settings)
+{
+  /*
+  For PNG filter method 0
+  out must be a buffer with as size: h + (w * h * bpp + 7) / 8, because there are
+  the scanlines with 1 extra byte per scanline
+  */
+
+  unsigned bpp = lodepng_get_bpp(info);
+  /*the width of a scanline in bytes, not including the filter type*/
+  size_t linebytes = (w * bpp + 7) / 8;
+  /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/
+  size_t bytewidth = (bpp + 7) / 8;
+  const unsigned char* prevline = 0;
+  unsigned x, y;
+  unsigned error = 0;
+  LodePNGFilterStrategy strategy = settings->filter_strategy;
+
+  /*
+  There is a heuristic called the minimum sum of absolute differences heuristic, suggested by the PNG standard:
+   *  If the image type is Palette, or the bit depth is smaller than 8, then do not filter the image (i.e.
+      use fixed filtering, with the filter None).
+   * (The other case) If the image type is Grayscale or RGB (with or without Alpha), and the bit depth is
+     not smaller than 8, then use adaptive filtering heuristic as follows: independently for each row, apply
+     all five filters and select the filter that produces the smallest sum of absolute values per row.
+  This heuristic is used if filter strategy is LFS_MINSUM and filter_palette_zero is true.
+
+  If filter_palette_zero is true and filter_strategy is not LFS_MINSUM, the above heuristic is followed,
+  but for "the other case", whatever strategy filter_strategy is set to instead of the minimum sum
+  heuristic is used.
+  */
+  if(settings->filter_palette_zero &&
+     (info->colortype == LCT_PALETTE || info->bitdepth < 8)) strategy = LFS_ZERO;
+
+  if(bpp == 0) return 31; /*error: invalid color type*/
+
+  if(strategy == LFS_ZERO)
+  {
+    for(y = 0; y != h; ++y)
+    {
+      size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/
+      size_t inindex = linebytes * y;
+      out[outindex] = 0; /*filter type byte*/
+      filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, 0);
+      prevline = &in[inindex];
+    }
+  }
+  else if(strategy == LFS_MINSUM)
+  {
+    /*adaptive filtering*/
+    size_t sum[5];
+    unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/
+    size_t smallest = 0;
+    unsigned char type, bestType = 0;
+
+    for(type = 0; type != 5; ++type)
+    {
+      attempt[type] = (unsigned char*)lodepng_malloc(linebytes);
+      if(!attempt[type]) return 83; /*alloc fail*/
+    }
+
+    if(!error)
+    {
+      for(y = 0; y != h; ++y)
+      {
+        /*try the 5 filter types*/
+        for(type = 0; type != 5; ++type)
+        {
+          filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type);
+
+          /*calculate the sum of the result*/
+          sum[type] = 0;
+          if(type == 0)
+          {
+            for(x = 0; x != linebytes; ++x) sum[type] += (unsigned char)(attempt[type][x]);
+          }
+          else
+          {
+            for(x = 0; x != linebytes; ++x)
+            {
+              /*For differences, each byte should be treated as signed, values above 127 are negative
+              (converted to signed char). Filtertype 0 isn't a difference though, so use unsigned there.
+              This means filtertype 0 is almost never chosen, but that is justified.*/
+              unsigned char s = attempt[type][x];
+              sum[type] += s < 128 ? s : (255U - s);
+            }
+          }
+
+          /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/
+          if(type == 0 || sum[type] < smallest)
+          {
+            bestType = type;
+            smallest = sum[type];
+          }
+        }
+
+        prevline = &in[y * linebytes];
+
+        /*now fill the out values*/
+        out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/
+        for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x];
+      }
+    }
+
+    for(type = 0; type != 5; ++type) lodepng_free(attempt[type]);
+  }
+  else if(strategy == LFS_ENTROPY)
+  {
+    float sum[5];
+    unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/
+    float smallest = 0;
+    unsigned type, bestType = 0;
+    unsigned count[256];
+
+    for(type = 0; type != 5; ++type)
+    {
+      attempt[type] = (unsigned char*)lodepng_malloc(linebytes);
+      if(!attempt[type]) return 83; /*alloc fail*/
+    }
+
+    for(y = 0; y != h; ++y)
+    {
+      /*try the 5 filter types*/
+      for(type = 0; type != 5; ++type)
+      {
+        filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type);
+        for(x = 0; x != 256; ++x) count[x] = 0;
+        for(x = 0; x != linebytes; ++x) ++count[attempt[type][x]];
+        ++count[type]; /*the filter type itself is part of the scanline*/
+        sum[type] = 0;
+        for(x = 0; x != 256; ++x)
+        {
+          float p = count[x] / (float)(linebytes + 1);
+          sum[type] += count[x] == 0 ? 0 : flog2(1 / p) * p;
+        }
+        /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/
+        if(type == 0 || sum[type] < smallest)
+        {
+          bestType = type;
+          smallest = sum[type];
+        }
+      }
+
+      prevline = &in[y * linebytes];
+
+      /*now fill the out values*/
+      out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/
+      for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x];
+    }
+
+    for(type = 0; type != 5; ++type) lodepng_free(attempt[type]);
+  }
+  else if(strategy == LFS_PREDEFINED)
+  {
+    for(y = 0; y != h; ++y)
+    {
+      size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/
+      size_t inindex = linebytes * y;
+      unsigned char type = settings->predefined_filters[y];
+      out[outindex] = type; /*filter type byte*/
+      filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, type);
+      prevline = &in[inindex];
+    }
+  }
+  else if(strategy == LFS_BRUTE_FORCE)
+  {
+    /*brute force filter chooser.
+    deflate the scanline after every filter attempt to see which one deflates best.
+    This is very slow and gives only slightly smaller, sometimes even larger, result*/
+    size_t size[5];
+    unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/
+    size_t smallest = 0;
+    unsigned type = 0, bestType = 0;
+    unsigned char* dummy;
+    LodePNGCompressSettings zlibsettings = settings->zlibsettings;
+    /*use fixed tree on the attempts so that the tree is not adapted to the filtertype on purpose,
+    to simulate the true case where the tree is the same for the whole image. Sometimes it gives
+    better result with dynamic tree anyway. Using the fixed tree sometimes gives worse, but in rare
+    cases better compression. It does make this a bit less slow, so it's worth doing this.*/
+    zlibsettings.btype = 1;
+    /*a custom encoder likely doesn't read the btype setting and is optimized for complete PNG
+    images only, so disable it*/
+    zlibsettings.custom_zlib = 0;
+    zlibsettings.custom_deflate = 0;
+    for(type = 0; type != 5; ++type)
+    {
+      attempt[type] = (unsigned char*)lodepng_malloc(linebytes);
+      if(!attempt[type]) return 83; /*alloc fail*/
+    }
+    for(y = 0; y != h; ++y) /*try the 5 filter types*/
+    {
+      for(type = 0; type != 5; ++type)
+      {
+        size_t testsize = linebytes;
+        /*if(testsize > 8) testsize /= 8;*/ /*it already works good enough by testing a part of the row*/
+
+        filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type);
+        size[type] = 0;
+        dummy = 0;
+        zlib_compress(&dummy, &size[type], attempt[type], testsize, &zlibsettings);
+        lodepng_free(dummy);
+        /*check if this is smallest size (or if type == 0 it's the first case so always store the values)*/
+        if(type == 0 || size[type] < smallest)
+        {
+          bestType = type;
+          smallest = size[type];
+        }
+      }
+      prevline = &in[y * linebytes];
+      out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/
+      for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x];
+    }
+    for(type = 0; type != 5; ++type) lodepng_free(attempt[type]);
+  }
+  else return 88; /* unknown filter strategy */
+
+  return error;
+}
+
+static void addPaddingBits(unsigned char* out, const unsigned char* in,
+                           size_t olinebits, size_t ilinebits, unsigned h)
+{
+  /*The opposite of the removePaddingBits function
+  olinebits must be >= ilinebits*/
+  unsigned y;
+  size_t diff = olinebits - ilinebits;
+  size_t obp = 0, ibp = 0; /*bit pointers*/
+  for(y = 0; y != h; ++y)
+  {
+    size_t x;
+    for(x = 0; x < ilinebits; ++x)
+    {
+      unsigned char bit = readBitFromReversedStream(&ibp, in);
+      setBitOfReversedStream(&obp, out, bit);
+    }
+    /*obp += diff; --> no, fill in some value in the padding bits too, to avoid
+    "Use of uninitialised value of size ###" warning from valgrind*/
+    for(x = 0; x != diff; ++x) setBitOfReversedStream(&obp, out, 0);
+  }
+}
+
+/*
+in: non-interlaced image with size w*h
+out: the same pixels, but re-ordered according to PNG's Adam7 interlacing, with
+ no padding bits between scanlines, but between reduced images so that each
+ reduced image starts at a byte.
+bpp: bits per pixel
+there are no padding bits, not between scanlines, not between reduced images
+in has the following size in bits: w * h * bpp.
+out is possibly bigger due to padding bits between reduced images
+NOTE: comments about padding bits are only relevant if bpp < 8
+*/
+static void Adam7_interlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp)
+{
+  unsigned passw[7], passh[7];
+  size_t filter_passstart[8], padded_passstart[8], passstart[8];
+  unsigned i;
+
+  Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);
+
+  if(bpp >= 8)
+  {
+    for(i = 0; i != 7; ++i)
+    {
+      unsigned x, y, b;
+      size_t bytewidth = bpp / 8;
+      for(y = 0; y < passh[i]; ++y)
+      for(x = 0; x < passw[i]; ++x)
+      {
+        size_t pixelinstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth;
+        size_t pixeloutstart = passstart[i] + (y * passw[i] + x) * bytewidth;
+        for(b = 0; b < bytewidth; ++b)
+        {
+          out[pixeloutstart + b] = in[pixelinstart + b];
+        }
+      }
+    }
+  }
+  else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/
+  {
+    for(i = 0; i != 7; ++i)
+    {
+      unsigned x, y, b;
+      unsigned ilinebits = bpp * passw[i];
+      unsigned olinebits = bpp * w;
+      size_t obp, ibp; /*bit pointers (for out and in buffer)*/
+      for(y = 0; y < passh[i]; ++y)
+      for(x = 0; x < passw[i]; ++x)
+      {
+        ibp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp;
+        obp = (8 * passstart[i]) + (y * ilinebits + x * bpp);
+        for(b = 0; b < bpp; ++b)
+        {
+          unsigned char bit = readBitFromReversedStream(&ibp, in);
+          setBitOfReversedStream(&obp, out, bit);
+        }
+      }
+    }
+  }
+}
+
+/*out must be buffer big enough to contain uncompressed IDAT chunk data, and in must contain the full image.
+return value is error**/
+static unsigned preProcessScanlines(unsigned char** out, size_t* outsize, const unsigned char* in,
+                                    unsigned w, unsigned h,
+                                    const LodePNGInfo* info_png, const LodePNGEncoderSettings* settings)
+{
+  /*
+  This function converts the pure 2D image with the PNG's colortype, into filtered-padded-interlaced data. Steps:
+  *) if no Adam7: 1) add padding bits (= posible extra bits per scanline if bpp < 8) 2) filter
+  *) if adam7: 1) Adam7_interlace 2) 7x add padding bits 3) 7x filter
+  */
+  unsigned bpp = lodepng_get_bpp(&info_png->color);
+  unsigned error = 0;
+
+  if(info_png->interlace_method == 0)
+  {
+    *outsize = h + (h * ((w * bpp + 7) / 8)); /*image size plus an extra byte per scanline + possible padding bits*/
+    *out = (unsigned char*)lodepng_malloc(*outsize);
+    if(!(*out) && (*outsize)) error = 83; /*alloc fail*/
+
+    if(!error)
+    {
+      /*non multiple of 8 bits per scanline, padding bits needed per scanline*/
+      if(bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8)
+      {
+        unsigned char* padded = (unsigned char*)lodepng_malloc(h * ((w * bpp + 7) / 8));
+        if(!padded) error = 83; /*alloc fail*/
+        if(!error)
+        {
+          addPaddingBits(padded, in, ((w * bpp + 7) / 8) * 8, w * bpp, h);
+          error = filter(*out, padded, w, h, &info_png->color, settings);
+        }
+        lodepng_free(padded);
+      }
+      else
+      {
+        /*we can immediately filter into the out buffer, no other steps needed*/
+        error = filter(*out, in, w, h, &info_png->color, settings);
+      }
+    }
+  }
+  else /*interlace_method is 1 (Adam7)*/
+  {
+    unsigned passw[7], passh[7];
+    size_t filter_passstart[8], padded_passstart[8], passstart[8];
+    unsigned char* adam7;
+
+    Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);
+
+    *outsize = filter_passstart[7]; /*image size plus an extra byte per scanline + possible padding bits*/
+    *out = (unsigned char*)lodepng_malloc(*outsize);
+    if(!(*out)) error = 83; /*alloc fail*/
+
+    adam7 = (unsigned char*)lodepng_malloc(passstart[7]);
+    if(!adam7 && passstart[7]) error = 83; /*alloc fail*/
+
+    if(!error)
+    {
+      unsigned i;
+
+      Adam7_interlace(adam7, in, w, h, bpp);
+      for(i = 0; i != 7; ++i)
+      {
+        if(bpp < 8)
+        {
+          unsigned char* padded = (unsigned char*)lodepng_malloc(padded_passstart[i + 1] - padded_passstart[i]);
+          if(!padded) ERROR_BREAK(83); /*alloc fail*/
+          addPaddingBits(padded, &adam7[passstart[i]],
+                         ((passw[i] * bpp + 7) / 8) * 8, passw[i] * bpp, passh[i]);
+          error = filter(&(*out)[filter_passstart[i]], padded,
+                         passw[i], passh[i], &info_png->color, settings);
+          lodepng_free(padded);
+        }
+        else
+        {
+          error = filter(&(*out)[filter_passstart[i]], &adam7[padded_passstart[i]],
+                         passw[i], passh[i], &info_png->color, settings);
+        }
+
+        if(error) break;
+      }
+    }
+
+    lodepng_free(adam7);
+  }
+
+  return error;
+}
+
+/*
+palette must have 4 * palettesize bytes allocated, and given in format RGBARGBARGBARGBA...
+returns 0 if the palette is opaque,
+returns 1 if the palette has a single color with alpha 0 ==> color key
+returns 2 if the palette is semi-translucent.
+*/
+static unsigned getPaletteTranslucency(const unsigned char* palette, size_t palettesize)
+{
+  size_t i;
+  unsigned key = 0;
+  unsigned r = 0, g = 0, b = 0; /*the value of the color with alpha 0, so long as color keying is possible*/
+  for(i = 0; i != palettesize; ++i)
+  {
+    if(!key && palette[4 * i + 3] == 0)
+    {
+      r = palette[4 * i + 0]; g = palette[4 * i + 1]; b = palette[4 * i + 2];
+      key = 1;
+      i = (size_t)(-1); /*restart from beginning, to detect earlier opaque colors with key's value*/
+    }
+    else if(palette[4 * i + 3] != 255) return 2;
+    /*when key, no opaque RGB may have key's RGB*/
+    else if(key && r == palette[i * 4 + 0] && g == palette[i * 4 + 1] && b == palette[i * 4 + 2]) return 2;
+  }
+  return key;
+}
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+static unsigned addUnknownChunks(ucvector* out, unsigned char* data, size_t datasize)
+{
+  unsigned char* inchunk = data;
+  while((size_t)(inchunk - data) < datasize)
+  {
+    CERROR_TRY_RETURN(lodepng_chunk_append(&out->data, &out->size, inchunk));
+    out->allocsize = out->size; /*fix the allocsize again*/
+    inchunk = lodepng_chunk_next(inchunk);
+  }
+  return 0;
+}
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+
+unsigned lodepng_encode(unsigned char** out, size_t* outsize,
+                        const unsigned char* image, unsigned w, unsigned h,
+                        LodePNGState* state)
+{
+  LodePNGInfo info;
+  ucvector outv;
+  unsigned char* data = 0; /*uncompressed version of the IDAT chunk data*/
+  size_t datasize = 0;
+
+  /*provide some proper output values if error will happen*/
+  *out = 0;
+  *outsize = 0;
+  state->error = 0;
+
+  lodepng_info_init(&info);
+  lodepng_info_copy(&info, &state->info_png);
+
+  if((info.color.colortype == LCT_PALETTE || state->encoder.force_palette)
+      && (info.color.palettesize == 0 || info.color.palettesize > 256))
+  {
+    state->error = 68; /*invalid palette size, it is only allowed to be 1-256*/
+    return state->error;
+  }
+
+  if(state->encoder.auto_convert)
+  {
+    state->error = lodepng_auto_choose_color(&info.color, image, w, h, &state->info_raw);
+  }
+  if(state->error) return state->error;
+
+  if(state->encoder.zlibsettings.btype > 2)
+  {
+    CERROR_RETURN_ERROR(state->error, 61); /*error: unexisting btype*/
+  }
+  if(state->info_png.interlace_method > 1)
+  {
+    CERROR_RETURN_ERROR(state->error, 71); /*error: unexisting interlace mode*/
+  }
+
+  state->error = checkColorValidity(info.color.colortype, info.color.bitdepth);
+  if(state->error) return state->error; /*error: unexisting color type given*/
+  state->error = checkColorValidity(state->info_raw.colortype, state->info_raw.bitdepth);
+  if(state->error) return state->error; /*error: unexisting color type given*/
+
+  if(!lodepng_color_mode_equal(&state->info_raw, &info.color))
+  {
+    unsigned char* converted;
+    size_t size = (w * h * lodepng_get_bpp(&info.color) + 7) / 8;
+
+    converted = (unsigned char*)lodepng_malloc(size);
+    if(!converted && size) state->error = 83; /*alloc fail*/
+    if(!state->error)
+    {
+      state->error = lodepng_convert(converted, image, &info.color, &state->info_raw, w, h);
+    }
+    if(!state->error) preProcessScanlines(&data, &datasize, converted, w, h, &info, &state->encoder);
+    lodepng_free(converted);
+  }
+  else preProcessScanlines(&data, &datasize, image, w, h, &info, &state->encoder);
+
+  ucvector_init(&outv);
+  while(!state->error) /*while only executed once, to break on error*/
+  {
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+    size_t i;
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+    /*write signature and chunks*/
+    writeSignature(&outv);
+    /*IHDR*/
+    addChunk_IHDR(&outv, w, h, info.color.colortype, info.color.bitdepth, info.interlace_method);
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+    /*unknown chunks between IHDR and PLTE*/
+    if(info.unknown_chunks_data[0])
+    {
+      state->error = addUnknownChunks(&outv, info.unknown_chunks_data[0], info.unknown_chunks_size[0]);
+      if(state->error) break;
+    }
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+    /*PLTE*/
+    if(info.color.colortype == LCT_PALETTE)
+    {
+      addChunk_PLTE(&outv, &info.color);
+    }
+    if(state->encoder.force_palette && (info.color.colortype == LCT_RGB || info.color.colortype == LCT_RGBA))
+    {
+      addChunk_PLTE(&outv, &info.color);
+    }
+    /*tRNS*/
+    if(info.color.colortype == LCT_PALETTE && getPaletteTranslucency(info.color.palette, info.color.palettesize) != 0)
+    {
+      addChunk_tRNS(&outv, &info.color);
+    }
+    if((info.color.colortype == LCT_GREY || info.color.colortype == LCT_RGB) && info.color.key_defined)
+    {
+      addChunk_tRNS(&outv, &info.color);
+    }
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+    /*bKGD (must come between PLTE and the IDAt chunks*/
+    if(info.background_defined) addChunk_bKGD(&outv, &info);
+    /*pHYs (must come before the IDAT chunks)*/
+    if(info.phys_defined) addChunk_pHYs(&outv, &info);
+
+    /*unknown chunks between PLTE and IDAT*/
+    if(info.unknown_chunks_data[1])
+    {
+      state->error = addUnknownChunks(&outv, info.unknown_chunks_data[1], info.unknown_chunks_size[1]);
+      if(state->error) break;
+    }
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+    /*IDAT (multiple IDAT chunks must be consecutive)*/
+    state->error = addChunk_IDAT(&outv, data, datasize, &state->encoder.zlibsettings);
+    if(state->error) break;
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+    /*tIME*/
+    if(info.time_defined) addChunk_tIME(&outv, &info.time);
+    /*tEXt and/or zTXt*/
+    for(i = 0; i != info.text_num; ++i)
+    {
+      if(strlen(info.text_keys[i]) > 79)
+      {
+        state->error = 66; /*text chunk too large*/
+        break;
+      }
+      if(strlen(info.text_keys[i]) < 1)
+      {
+        state->error = 67; /*text chunk too small*/
+        break;
+      }
+      if(state->encoder.text_compression)
+      {
+        addChunk_zTXt(&outv, info.text_keys[i], info.text_strings[i], &state->encoder.zlibsettings);
+      }
+      else
+      {
+        addChunk_tEXt(&outv, info.text_keys[i], info.text_strings[i]);
+      }
+    }
+    /*LodePNG version id in text chunk*/
+    if(state->encoder.add_id)
+    {
+      unsigned alread_added_id_text = 0;
+      for(i = 0; i != info.text_num; ++i)
+      {
+        if(!strcmp(info.text_keys[i], "LodePNG"))
+        {
+          alread_added_id_text = 1;
+          break;
+        }
+      }
+      if(alread_added_id_text == 0)
+      {
+        addChunk_tEXt(&outv, "LodePNG", LODEPNG_VERSION_STRING); /*it's shorter as tEXt than as zTXt chunk*/
+      }
+    }
+    /*iTXt*/
+    for(i = 0; i != info.itext_num; ++i)
+    {
+      if(strlen(info.itext_keys[i]) > 79)
+      {
+        state->error = 66; /*text chunk too large*/
+        break;
+      }
+      if(strlen(info.itext_keys[i]) < 1)
+      {
+        state->error = 67; /*text chunk too small*/
+        break;
+      }
+      addChunk_iTXt(&outv, state->encoder.text_compression,
+                    info.itext_keys[i], info.itext_langtags[i], info.itext_transkeys[i], info.itext_strings[i],
+                    &state->encoder.zlibsettings);
+    }
+
+    /*unknown chunks between IDAT and IEND*/
+    if(info.unknown_chunks_data[2])
+    {
+      state->error = addUnknownChunks(&outv, info.unknown_chunks_data[2], info.unknown_chunks_size[2]);
+      if(state->error) break;
+    }
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+    addChunk_IEND(&outv);
+
+    break; /*this isn't really a while loop; no error happened so break out now!*/
+  }
+
+  lodepng_info_cleanup(&info);
+  lodepng_free(data);
+  /*instead of cleaning the vector up, give it to the output*/
+  *out = outv.data;
+  *outsize = outv.size;
+
+  return state->error;
+}
+
+unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize, const unsigned char* image,
+                               unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth)
+{
+  unsigned error;
+  LodePNGState state;
+  lodepng_state_init(&state);
+  state.info_raw.colortype = colortype;
+  state.info_raw.bitdepth = bitdepth;
+  state.info_png.color.colortype = colortype;
+  state.info_png.color.bitdepth = bitdepth;
+  lodepng_encode(out, outsize, image, w, h, &state);
+  error = state.error;
+  lodepng_state_cleanup(&state);
+  return error;
+}
+
+unsigned lodepng_encode32(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h)
+{
+  return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGBA, 8);
+}
+
+unsigned lodepng_encode24(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h)
+{
+  return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGB, 8);
+}
+
+#ifdef LODEPNG_COMPILE_DISK
+unsigned lodepng_encode_file(const char* filename, const unsigned char* image, unsigned w, unsigned h,
+                             LodePNGColorType colortype, unsigned bitdepth)
+{
+  unsigned char* buffer;
+  size_t buffersize;
+  unsigned error = lodepng_encode_memory(&buffer, &buffersize, image, w, h, colortype, bitdepth);
+  if(!error) error = lodepng_save_file(buffer, buffersize, filename);
+  lodepng_free(buffer);
+  return error;
+}
+
+unsigned lodepng_encode32_file(const char* filename, const unsigned char* image, unsigned w, unsigned h)
+{
+  return lodepng_encode_file(filename, image, w, h, LCT_RGBA, 8);
+}
+
+unsigned lodepng_encode24_file(const char* filename, const unsigned char* image, unsigned w, unsigned h)
+{
+  return lodepng_encode_file(filename, image, w, h, LCT_RGB, 8);
+}
+#endif /*LODEPNG_COMPILE_DISK*/
+
+void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings)
+{
+  lodepng_compress_settings_init(&settings->zlibsettings);
+  settings->filter_palette_zero = 1;
+  settings->filter_strategy = LFS_MINSUM;
+  settings->auto_convert = 1;
+  settings->force_palette = 0;
+  settings->predefined_filters = 0;
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  settings->add_id = 0;
+  settings->text_compression = 1;
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+}
+
+#endif /*LODEPNG_COMPILE_ENCODER*/
+#endif /*LODEPNG_COMPILE_PNG*/
+
+#ifdef LODEPNG_COMPILE_ERROR_TEXT
+/*
+This returns the description of a numerical error code in English. This is also
+the documentation of all the error codes.
+*/
+const char* lodepng_error_text(unsigned code)
+{
+  switch(code)
+  {
+    case 0: return "no error, everything went ok";
+    case 1: return "nothing done yet"; /*the Encoder/Decoder has done nothing yet, error checking makes no sense yet*/
+    case 10: return "end of input memory reached without huffman end code"; /*while huffman decoding*/
+    case 11: return "error in code tree made it jump outside of huffman tree"; /*while huffman decoding*/
+    case 13: return "problem while processing dynamic deflate block";
+    case 14: return "problem while processing dynamic deflate block";
+    case 15: return "problem while processing dynamic deflate block";
+    case 16: return "unexisting code while processing dynamic deflate block";
+    case 17: return "end of out buffer memory reached while inflating";
+    case 18: return "invalid distance code while inflating";
+    case 19: return "end of out buffer memory reached while inflating";
+    case 20: return "invalid deflate block BTYPE encountered while decoding";
+    case 21: return "NLEN is not ones complement of LEN in a deflate block";
+     /*end of out buffer memory reached while inflating:
+     This can happen if the inflated deflate data is longer than the amount of bytes required to fill up
+     all the pixels of the image, given the color depth and image dimensions. Something that doesn't
+     happen in a normal, well encoded, PNG image.*/
+    case 22: return "end of out buffer memory reached while inflating";
+    case 23: return "end of in buffer memory reached while inflating";
+    case 24: return "invalid FCHECK in zlib header";
+    case 25: return "invalid compression method in zlib header";
+    case 26: return "FDICT encountered in zlib header while it's not used for PNG";
+    case 27: return "PNG file is smaller than a PNG header";
+    /*Checks the magic file header, the first 8 bytes of the PNG file*/
+    case 28: return "incorrect PNG signature, it's no PNG or corrupted";
+    case 29: return "first chunk is not the header chunk";
+    case 30: return "chunk length too large, chunk broken off at end of file";
+    case 31: return "illegal PNG color type or bpp";
+    case 32: return "illegal PNG compression method";
+    case 33: return "illegal PNG filter method";
+    case 34: return "illegal PNG interlace method";
+    case 35: return "chunk length of a chunk is too large or the chunk too small";
+    case 36: return "illegal PNG filter type encountered";
+    case 37: return "illegal bit depth for this color type given";
+    case 38: return "the palette is too big"; /*more than 256 colors*/
+    case 39: return "more palette alpha values given in tRNS chunk than there are colors in the palette";
+    case 40: return "tRNS chunk has wrong size for greyscale image";
+    case 41: return "tRNS chunk has wrong size for RGB image";
+    case 42: return "tRNS chunk appeared while it was not allowed for this color type";
+    case 43: return "bKGD chunk has wrong size for palette image";
+    case 44: return "bKGD chunk has wrong size for greyscale image";
+    case 45: return "bKGD chunk has wrong size for RGB image";
+    case 48: return "empty input buffer given to decoder. Maybe caused by non-existing file?";
+    case 49: return "jumped past memory while generating dynamic huffman tree";
+    case 50: return "jumped past memory while generating dynamic huffman tree";
+    case 51: return "jumped past memory while inflating huffman block";
+    case 52: return "jumped past memory while inflating";
+    case 53: return "size of zlib data too small";
+    case 54: return "repeat symbol in tree while there was no value symbol yet";
+    /*jumped past tree while generating huffman tree, this could be when the
+    tree will have more leaves than symbols after generating it out of the
+    given lenghts. They call this an oversubscribed dynamic bit lengths tree in zlib.*/
+    case 55: return "jumped past tree while generating huffman tree";
+    case 56: return "given output image colortype or bitdepth not supported for color conversion";
+    case 57: return "invalid CRC encountered (checking CRC can be disabled)";
+    case 58: return "invalid ADLER32 encountered (checking ADLER32 can be disabled)";
+    case 59: return "requested color conversion not supported";
+    case 60: return "invalid window size given in the settings of the encoder (must be 0-32768)";
+    case 61: return "invalid BTYPE given in the settings of the encoder (only 0, 1 and 2 are allowed)";
+    /*LodePNG leaves the choice of RGB to greyscale conversion formula to the user.*/
+    case 62: return "conversion from color to greyscale not supported";
+    case 63: return "length of a chunk too long, max allowed for PNG is 2147483647 bytes per chunk"; /*(2^31-1)*/
+    /*this would result in the inability of a deflated block to ever contain an end code. It must be at least 1.*/
+    case 64: return "the length of the END symbol 256 in the Huffman tree is 0";
+    case 66: return "the length of a text chunk keyword given to the encoder is longer than the maximum of 79 bytes";
+    case 67: return "the length of a text chunk keyword given to the encoder is smaller than the minimum of 1 byte";
+    case 68: return "tried to encode a PLTE chunk with a palette that has less than 1 or more than 256 colors";
+    case 69: return "unknown chunk type with 'critical' flag encountered by the decoder";
+    case 71: return "unexisting interlace mode given to encoder (must be 0 or 1)";
+    case 72: return "while decoding, unexisting compression method encountering in zTXt or iTXt chunk (it must be 0)";
+    case 73: return "invalid tIME chunk size";
+    case 74: return "invalid pHYs chunk size";
+    /*length could be wrong, or data chopped off*/
+    case 75: return "no null termination char found while decoding text chunk";
+    case 76: return "iTXt chunk too short to contain required bytes";
+    case 77: return "integer overflow in buffer size";
+    case 78: return "failed to open file for reading"; /*file doesn't exist or couldn't be opened for reading*/
+    case 79: return "failed to open file for writing";
+    case 80: return "tried creating a tree of 0 symbols";
+    case 81: return "lazy matching at pos 0 is impossible";
+    case 82: return "color conversion to palette requested while a color isn't in palette";
+    case 83: return "memory allocation failed";
+    case 84: return "given image too small to contain all pixels to be encoded";
+    case 86: return "impossible offset in lz77 encoding (internal bug)";
+    case 87: return "must provide custom zlib function pointer if LODEPNG_COMPILE_ZLIB is not defined";
+    case 88: return "invalid filter strategy given for LodePNGEncoderSettings.filter_strategy";
+    case 89: return "text chunk keyword too short or long: must have size 1-79";
+    /*the windowsize in the LodePNGCompressSettings. Requiring POT(==> & instead of %) makes encoding 12% faster.*/
+    case 90: return "windowsize must be a power of two";
+    case 91: return "invalid decompressed idat size";
+    case 92: return "too many pixels, not supported";
+    case 93: return "zero width or height is invalid";
+    case 94: return "header chunk must have a size of 13 bytes";
+  }
+  return "unknown error code";
+}
+#endif /*LODEPNG_COMPILE_ERROR_TEXT*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* ////////////////////////////////////////////////////////////////////////// */
+/* // C++ Wrapper                                                          // */
+/* ////////////////////////////////////////////////////////////////////////// */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+#ifdef LODEPNG_COMPILE_CPP
+namespace lodepng
+{
+
+#ifdef LODEPNG_COMPILE_DISK
+unsigned load_file(std::vector<unsigned char>& buffer, const std::string& filename)
+{
+  long size = lodepng_filesize(filename.c_str());
+  if(size < 0) return 78;
+  buffer.resize((size_t)size);
+  return size == 0 ? 0 : lodepng_buffer_file(&buffer[0], (size_t)size, filename.c_str());
+}
+
+/*write given buffer to the file, overwriting the file, it doesn't append to it.*/
+unsigned save_file(const std::vector<unsigned char>& buffer, const std::string& filename)
+{
+  return lodepng_save_file(buffer.empty() ? 0 : &buffer[0], buffer.size(), filename.c_str());
+}
+#endif /* LODEPNG_COMPILE_DISK */
+
+#ifdef LODEPNG_COMPILE_ZLIB
+#ifdef LODEPNG_COMPILE_DECODER
+unsigned decompress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
+                    const LodePNGDecompressSettings& settings)
+{
+  unsigned char* buffer = 0;
+  size_t buffersize = 0;
+  unsigned error = zlib_decompress(&buffer, &buffersize, in, insize, &settings);
+  if(buffer)
+  {
+    out.insert(out.end(), &buffer[0], &buffer[buffersize]);
+    lodepng_free(buffer);
+  }
+  return error;
+}
+
+unsigned decompress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
+                    const LodePNGDecompressSettings& settings)
+{
+  return decompress(out, in.empty() ? 0 : &in[0], in.size(), settings);
+}
+#endif /* LODEPNG_COMPILE_DECODER */
+
+#ifdef LODEPNG_COMPILE_ENCODER
+unsigned compress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
+                  const LodePNGCompressSettings& settings)
+{
+  unsigned char* buffer = 0;
+  size_t buffersize = 0;
+  unsigned error = zlib_compress(&buffer, &buffersize, in, insize, &settings);
+  if(buffer)
+  {
+    out.insert(out.end(), &buffer[0], &buffer[buffersize]);
+    lodepng_free(buffer);
+  }
+  return error;
+}
+
+unsigned compress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
+                  const LodePNGCompressSettings& settings)
+{
+  return compress(out, in.empty() ? 0 : &in[0], in.size(), settings);
+}
+#endif /* LODEPNG_COMPILE_ENCODER */
+#endif /* LODEPNG_COMPILE_ZLIB */
+
+
+#ifdef LODEPNG_COMPILE_PNG
+
+State::State()
+{
+  lodepng_state_init(this);
+}
+
+State::State(const State& other)
+{
+  lodepng_state_init(this);
+  lodepng_state_copy(this, &other);
+}
+
+State::~State()
+{
+  lodepng_state_cleanup(this);
+}
+
+State& State::operator=(const State& other)
+{
+  lodepng_state_copy(this, &other);
+  return *this;
+}
+
+#ifdef LODEPNG_COMPILE_DECODER
+
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, const unsigned char* in,
+                size_t insize, LodePNGColorType colortype, unsigned bitdepth)
+{
+  unsigned char* buffer;
+  unsigned error = lodepng_decode_memory(&buffer, &w, &h, in, insize, colortype, bitdepth);
+  if(buffer && !error)
+  {
+    State state;
+    state.info_raw.colortype = colortype;
+    state.info_raw.bitdepth = bitdepth;
+    size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw);
+    out.insert(out.end(), &buffer[0], &buffer[buffersize]);
+    lodepng_free(buffer);
+  }
+  return error;
+}
+
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
+                const std::vector<unsigned char>& in, LodePNGColorType colortype, unsigned bitdepth)
+{
+  return decode(out, w, h, in.empty() ? 0 : &in[0], (unsigned)in.size(), colortype, bitdepth);
+}
+
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
+                State& state,
+                const unsigned char* in, size_t insize)
+{
+  unsigned char* buffer = NULL;
+  unsigned error = lodepng_decode(&buffer, &w, &h, &state, in, insize);
+  if(buffer && !error)
+  {
+    size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw);
+    out.insert(out.end(), &buffer[0], &buffer[buffersize]);
+  }
+  lodepng_free(buffer);
+  return error;
+}
+
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
+                State& state,
+                const std::vector<unsigned char>& in)
+{
+  return decode(out, w, h, state, in.empty() ? 0 : &in[0], in.size());
+}
+
+#ifdef LODEPNG_COMPILE_DISK
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, const std::string& filename,
+                LodePNGColorType colortype, unsigned bitdepth)
+{	
+  std::vector<unsigned char> buffer;
+  unsigned error = load_file(buffer, filename);
+  if(error) return error;
+  return decode(out, w, h, buffer, colortype, bitdepth);
+}
+#endif /* LODEPNG_COMPILE_DECODER */
+#endif /* LODEPNG_COMPILE_DISK */
+
+#ifdef LODEPNG_COMPILE_ENCODER
+unsigned encode(std::vector<unsigned char>& out, const unsigned char* in, unsigned w, unsigned h,
+                LodePNGColorType colortype, unsigned bitdepth)
+{
+  unsigned char* buffer;
+  size_t buffersize;
+  unsigned error = lodepng_encode_memory(&buffer, &buffersize, in, w, h, colortype, bitdepth);
+  if(buffer)
+  {
+    out.insert(out.end(), &buffer[0], &buffer[buffersize]);
+    lodepng_free(buffer);
+  }
+  return error;
+}
+
+unsigned encode(std::vector<unsigned char>& out,
+                const std::vector<unsigned char>& in, unsigned w, unsigned h,
+                LodePNGColorType colortype, unsigned bitdepth)
+{
+  if(lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84;
+  return encode(out, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth);
+}
+
+unsigned encode(std::vector<unsigned char>& out,
+                const unsigned char* in, unsigned w, unsigned h,
+                State& state)
+{
+  unsigned char* buffer;
+  size_t buffersize;
+  unsigned error = lodepng_encode(&buffer, &buffersize, in, w, h, &state);
+  if(buffer)
+  {
+    out.insert(out.end(), &buffer[0], &buffer[buffersize]);
+    lodepng_free(buffer);
+  }
+  return error;
+}
+
+unsigned encode(std::vector<unsigned char>& out,
+                const std::vector<unsigned char>& in, unsigned w, unsigned h,
+                State& state)
+{
+  if(lodepng_get_raw_size(w, h, &state.info_raw) > in.size()) return 84;
+  return encode(out, in.empty() ? 0 : &in[0], w, h, state);
+}
+
+#ifdef LODEPNG_COMPILE_DISK
+unsigned encode(const std::string& filename,
+                const unsigned char* in, unsigned w, unsigned h,
+                LodePNGColorType colortype, unsigned bitdepth)
+{
+  std::vector<unsigned char> buffer;
+  unsigned error = encode(buffer, in, w, h, colortype, bitdepth);
+  if(!error) error = save_file(buffer, filename);
+  return error;
+}
+
+unsigned encode(const std::string& filename,
+                const std::vector<unsigned char>& in, unsigned w, unsigned h,
+                LodePNGColorType colortype, unsigned bitdepth)
+{
+  if(lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84;
+  return encode(filename, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth);
+}
+#endif /* LODEPNG_COMPILE_DISK */
+#endif /* LODEPNG_COMPILE_ENCODER */
+#endif /* LODEPNG_COMPILE_PNG */
+} /* namespace lodepng */
+#endif /*LODEPNG_COMPILE_CPP*/
diff --git a/examples/graph/stereo/lodepng.h b/examples/graph/stereo/lodepng.h
new file mode 100644
index 0000000..11c8906
--- /dev/null
+++ b/examples/graph/stereo/lodepng.h
@@ -0,0 +1,1778 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+/*
+LodePNG version 20160409
+
+Copyright (c) 2005-2016 Lode Vandevenne
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+    1. The origin of this software must not be misrepresented; you must not
+    claim that you wrote the original software. If you use this software
+    in a product, an acknowledgment in the product documentation would be
+    appreciated but is not required.
+
+    2. Altered source versions must be plainly marked as such, and must not be
+    misrepresented as being the original software.
+
+    3. This notice may not be removed or altered from any source
+    distribution.
+*/
+
+#ifndef LODEPNG_H
+#define LODEPNG_H
+
+#include <string.h> /*for size_t*/
+
+extern const char* LODEPNG_VERSION_STRING;
+
+/*
+The following #defines are used to create code sections. They can be disabled
+to disable code sections, which can give faster compile time and smaller binary.
+The "NO_COMPILE" defines are designed to be used to pass as defines to the
+compiler command to disable them without modifying this header, e.g.
+-DLODEPNG_NO_COMPILE_ZLIB for gcc.
+In addition to those below, you can also define LODEPNG_NO_COMPILE_CRC to
+allow implementing a custom lodepng_crc32.
+*/
+/*deflate & zlib. If disabled, you must specify alternative zlib functions in
+the custom_zlib field of the compress and decompress settings*/
+#ifndef LODEPNG_NO_COMPILE_ZLIB
+#define LODEPNG_COMPILE_ZLIB
+#endif
+/*png encoder and png decoder*/
+#ifndef LODEPNG_NO_COMPILE_PNG
+#define LODEPNG_COMPILE_PNG
+#endif
+/*deflate&zlib decoder and png decoder*/
+#ifndef LODEPNG_NO_COMPILE_DECODER
+#define LODEPNG_COMPILE_DECODER
+#endif
+/*deflate&zlib encoder and png encoder*/
+#ifndef LODEPNG_NO_COMPILE_ENCODER
+#define LODEPNG_COMPILE_ENCODER
+#endif
+/*the optional built in harddisk file loading and saving functions*/
+#ifndef LODEPNG_NO_COMPILE_DISK
+#define LODEPNG_COMPILE_DISK
+#endif
+/*support for chunks other than IHDR, IDAT, PLTE, tRNS, IEND: ancillary and unknown chunks*/
+#ifndef LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS
+#define LODEPNG_COMPILE_ANCILLARY_CHUNKS
+#endif
+/*ability to convert error numerical codes to English text string*/
+#ifndef LODEPNG_NO_COMPILE_ERROR_TEXT
+#define LODEPNG_COMPILE_ERROR_TEXT
+#endif
+/*Compile the default allocators (C's free, malloc and realloc). If you disable this,
+you can define the functions lodepng_free, lodepng_malloc and lodepng_realloc in your
+source files with custom allocators.*/
+#ifndef LODEPNG_NO_COMPILE_ALLOCATORS
+#define LODEPNG_COMPILE_ALLOCATORS
+#endif
+/*compile the C++ version (you can disable the C++ wrapper here even when compiling for C++)*/
+#ifdef __cplusplus
+#ifndef LODEPNG_NO_COMPILE_CPP
+#define LODEPNG_COMPILE_CPP
+#endif
+#endif
+
+#ifdef LODEPNG_COMPILE_CPP
+#include <vector>
+#include <string>
+#endif /*LODEPNG_COMPILE_CPP*/
+
+#ifdef LODEPNG_COMPILE_PNG
+/*The PNG color types (also used for raw).*/
+typedef enum LodePNGColorType
+{
+  LCT_GREY = 0, /*greyscale: 1,2,4,8,16 bit*/
+  LCT_RGB = 2, /*RGB: 8,16 bit*/
+  LCT_PALETTE = 3, /*palette: 1,2,4,8 bit*/
+  LCT_GREY_ALPHA = 4, /*greyscale with alpha: 8,16 bit*/
+  LCT_RGBA = 6 /*RGB with alpha: 8,16 bit*/
+} LodePNGColorType;
+
+#ifdef LODEPNG_COMPILE_DECODER
+/*
+Converts PNG data in memory to raw pixel data.
+out: Output parameter. Pointer to buffer that will contain the raw pixel data.
+     After decoding, its size is w * h * (bytes per pixel) bytes larger than
+     initially. Bytes per pixel depends on colortype and bitdepth.
+     Must be freed after usage with free(*out).
+     Note: for 16-bit per channel colors, uses big endian format like PNG does.
+w: Output parameter. Pointer to width of pixel data.
+h: Output parameter. Pointer to height of pixel data.
+in: Memory buffer with the PNG file.
+insize: size of the in buffer.
+colortype: the desired color type for the raw output image. See explanation on PNG color types.
+bitdepth: the desired bit depth for the raw output image. See explanation on PNG color types.
+Return value: LodePNG error code (0 means no error).
+*/
+unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h,
+                               const unsigned char* in, size_t insize,
+                               LodePNGColorType colortype, unsigned bitdepth);
+
+/*Same as lodepng_decode_memory, but always decodes to 32-bit RGBA raw image*/
+unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h,
+                          const unsigned char* in, size_t insize);
+
+/*Same as lodepng_decode_memory, but always decodes to 24-bit RGB raw image*/
+unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h,
+                          const unsigned char* in, size_t insize);
+
+#ifdef LODEPNG_COMPILE_DISK
+/*
+Load PNG from disk, from file with given name.
+Same as the other decode functions, but instead takes a filename as input.
+*/
+unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h,
+                             const char* filename,
+                             LodePNGColorType colortype, unsigned bitdepth);
+
+/*Same as lodepng_decode_file, but always decodes to 32-bit RGBA raw image.*/
+unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h,
+                               const char* filename);
+
+/*Same as lodepng_decode_file, but always decodes to 24-bit RGB raw image.*/
+unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h,
+                               const char* filename);
+#endif /*LODEPNG_COMPILE_DISK*/
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+
+#ifdef LODEPNG_COMPILE_ENCODER
+/*
+Converts raw pixel data into a PNG image in memory. The colortype and bitdepth
+  of the output PNG image cannot be chosen, they are automatically determined
+  by the colortype, bitdepth and content of the input pixel data.
+  Note: for 16-bit per channel colors, needs big endian format like PNG does.
+out: Output parameter. Pointer to buffer that will contain the PNG image data.
+     Must be freed after usage with free(*out).
+outsize: Output parameter. Pointer to the size in bytes of the out buffer.
+image: The raw pixel data to encode. The size of this buffer should be
+       w * h * (bytes per pixel), bytes per pixel depends on colortype and bitdepth.
+w: width of the raw pixel data in pixels.
+h: height of the raw pixel data in pixels.
+colortype: the color type of the raw input image. See explanation on PNG color types.
+bitdepth: the bit depth of the raw input image. See explanation on PNG color types.
+Return value: LodePNG error code (0 means no error).
+*/
+unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize,
+                               const unsigned char* image, unsigned w, unsigned h,
+                               LodePNGColorType colortype, unsigned bitdepth);
+
+/*Same as lodepng_encode_memory, but always encodes from 32-bit RGBA raw image.*/
+unsigned lodepng_encode32(unsigned char** out, size_t* outsize,
+                          const unsigned char* image, unsigned w, unsigned h);
+
+/*Same as lodepng_encode_memory, but always encodes from 24-bit RGB raw image.*/
+unsigned lodepng_encode24(unsigned char** out, size_t* outsize,
+                          const unsigned char* image, unsigned w, unsigned h);
+
+#ifdef LODEPNG_COMPILE_DISK
+/*
+Converts raw pixel data into a PNG file on disk.
+Same as the other encode functions, but instead takes a filename as output.
+NOTE: This overwrites existing files without warning!
+*/
+unsigned lodepng_encode_file(const char* filename,
+                             const unsigned char* image, unsigned w, unsigned h,
+                             LodePNGColorType colortype, unsigned bitdepth);
+
+/*Same as lodepng_encode_file, but always encodes from 32-bit RGBA raw image.*/
+unsigned lodepng_encode32_file(const char* filename,
+                               const unsigned char* image, unsigned w, unsigned h);
+
+/*Same as lodepng_encode_file, but always encodes from 24-bit RGB raw image.*/
+unsigned lodepng_encode24_file(const char* filename,
+                               const unsigned char* image, unsigned w, unsigned h);
+#endif /*LODEPNG_COMPILE_DISK*/
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+
+#ifdef LODEPNG_COMPILE_CPP
+namespace lodepng
+{
+#ifdef LODEPNG_COMPILE_DECODER
+/*Same as lodepng_decode_memory, but decodes to an std::vector. The colortype
+is the format to output the pixels to. Default is RGBA 8-bit per channel.*/
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
+                const unsigned char* in, size_t insize,
+                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
+                const std::vector<unsigned char>& in,
+                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
+#ifdef LODEPNG_COMPILE_DISK
+/*
+Converts PNG file from disk to raw pixel data in memory.
+Same as the other decode functions, but instead takes a filename as input.
+*/
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
+                const std::string& filename,
+                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
+#endif /* LODEPNG_COMPILE_DISK */
+#endif /* LODEPNG_COMPILE_DECODER */
+
+#ifdef LODEPNG_COMPILE_ENCODER
+/*Same as lodepng_encode_memory, but encodes to an std::vector. colortype
+is that of the raw input data. The output PNG color type will be auto chosen.*/
+unsigned encode(std::vector<unsigned char>& out,
+                const unsigned char* in, unsigned w, unsigned h,
+                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
+unsigned encode(std::vector<unsigned char>& out,
+                const std::vector<unsigned char>& in, unsigned w, unsigned h,
+                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
+#ifdef LODEPNG_COMPILE_DISK
+/*
+Converts 32-bit RGBA raw pixel data into a PNG file on disk.
+Same as the other encode functions, but instead takes a filename as output.
+NOTE: This overwrites existing files without warning!
+*/
+unsigned encode(const std::string& filename,
+                const unsigned char* in, unsigned w, unsigned h,
+                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
+unsigned encode(const std::string& filename,
+                const std::vector<unsigned char>& in, unsigned w, unsigned h,
+                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
+#endif /* LODEPNG_COMPILE_DISK */
+#endif /* LODEPNG_COMPILE_ENCODER */
+} /* namespace lodepng */
+#endif /*LODEPNG_COMPILE_CPP*/
+#endif /*LODEPNG_COMPILE_PNG*/
+
+#ifdef LODEPNG_COMPILE_ERROR_TEXT
+/*Returns an English description of the numerical error code.*/
+const char* lodepng_error_text(unsigned code);
+#endif /*LODEPNG_COMPILE_ERROR_TEXT*/
+
+#ifdef LODEPNG_COMPILE_DECODER
+/*Settings for zlib decompression*/
+typedef struct LodePNGDecompressSettings LodePNGDecompressSettings;
+struct LodePNGDecompressSettings
+{
+  unsigned ignore_adler32; /*if 1, continue and don't give an error message if the Adler32 checksum is corrupted*/
+
+  /*use custom zlib decoder instead of built in one (default: null)*/
+  unsigned (*custom_zlib)(unsigned char**, size_t*,
+                          const unsigned char*, size_t,
+                          const LodePNGDecompressSettings*);
+  /*use custom deflate decoder instead of built in one (default: null)
+  if custom_zlib is used, custom_deflate is ignored since only the built in
+  zlib function will call custom_deflate*/
+  unsigned (*custom_inflate)(unsigned char**, size_t*,
+                             const unsigned char*, size_t,
+                             const LodePNGDecompressSettings*);
+
+  const void* custom_context; /*optional custom settings for custom functions*/
+};
+
+extern const LodePNGDecompressSettings lodepng_default_decompress_settings;
+void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings);
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+#ifdef LODEPNG_COMPILE_ENCODER
+/*
+Settings for zlib compression. Tweaking these settings tweaks the balance
+between speed and compression ratio.
+*/
+typedef struct LodePNGCompressSettings LodePNGCompressSettings;
+struct LodePNGCompressSettings /*deflate = compress*/
+{
+  /*LZ77 related settings*/
+  unsigned btype; /*the block type for LZ (0, 1, 2 or 3, see zlib standard). Should be 2 for proper compression.*/
+  unsigned use_lz77; /*whether or not to use LZ77. Should be 1 for proper compression.*/
+  unsigned windowsize; /*must be a power of two <= 32768. higher compresses more but is slower. Default value: 2048.*/
+  unsigned minmatch; /*mininum lz77 length. 3 is normally best, 6 can be better for some PNGs. Default: 0*/
+  unsigned nicematch; /*stop searching if >= this length found. Set to 258 for best compression. Default: 128*/
+  unsigned lazymatching; /*use lazy matching: better compression but a bit slower. Default: true*/
+
+  /*use custom zlib encoder instead of built in one (default: null)*/
+  unsigned (*custom_zlib)(unsigned char**, size_t*,
+                          const unsigned char*, size_t,
+                          const LodePNGCompressSettings*);
+  /*use custom deflate encoder instead of built in one (default: null)
+  if custom_zlib is used, custom_deflate is ignored since only the built in
+  zlib function will call custom_deflate*/
+  unsigned (*custom_deflate)(unsigned char**, size_t*,
+                             const unsigned char*, size_t,
+                             const LodePNGCompressSettings*);
+
+  const void* custom_context; /*optional custom settings for custom functions*/
+};
+
+extern const LodePNGCompressSettings lodepng_default_compress_settings;
+void lodepng_compress_settings_init(LodePNGCompressSettings* settings);
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+#ifdef LODEPNG_COMPILE_PNG
+/*
+Color mode of an image. Contains all information required to decode the pixel
+bits to RGBA colors. This information is the same as used in the PNG file
+format, and is used both for PNG and raw image data in LodePNG.
+*/
+typedef struct LodePNGColorMode
+{
+  /*header (IHDR)*/
+  LodePNGColorType colortype; /*color type, see PNG standard or documentation further in this header file*/
+  unsigned bitdepth;  /*bits per sample, see PNG standard or documentation further in this header file*/
+
+  /*
+  palette (PLTE and tRNS)
+
+  Dynamically allocated with the colors of the palette, including alpha.
+  When encoding a PNG, to store your colors in the palette of the LodePNGColorMode, first use
+  lodepng_palette_clear, then for each color use lodepng_palette_add.
+  If you encode an image without alpha with palette, don't forget to put value 255 in each A byte of the palette.
+
+  When decoding, by default you can ignore this palette, since LodePNG already
+  fills the palette colors in the pixels of the raw RGBA output.
+
+  The palette is only supported for color type 3.
+  */
+  unsigned char* palette; /*palette in RGBARGBA... order. When allocated, must be either 0, or have size 1024*/
+  size_t palettesize; /*palette size in number of colors (amount of bytes is 4 * palettesize)*/
+
+  /*
+  transparent color key (tRNS)
+
+  This color uses the same bit depth as the bitdepth value in this struct, which can be 1-bit to 16-bit.
+  For greyscale PNGs, r, g and b will all 3 be set to the same.
+
+  When decoding, by default you can ignore this information, since LodePNG sets
+  pixels with this key to transparent already in the raw RGBA output.
+
+  The color key is only supported for color types 0 and 2.
+  */
+  unsigned key_defined; /*is a transparent color key given? 0 = false, 1 = true*/
+  unsigned key_r;       /*red/greyscale component of color key*/
+  unsigned key_g;       /*green component of color key*/
+  unsigned key_b;       /*blue component of color key*/
+} LodePNGColorMode;
+
+/*init, cleanup and copy functions to use with this struct*/
+void lodepng_color_mode_init(LodePNGColorMode* info);
+void lodepng_color_mode_cleanup(LodePNGColorMode* info);
+/*return value is error code (0 means no error)*/
+unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source);
+
+void lodepng_palette_clear(LodePNGColorMode* info);
+/*add 1 color to the palette*/
+unsigned lodepng_palette_add(LodePNGColorMode* info,
+                             unsigned char r, unsigned char g, unsigned char b, unsigned char a);
+
+/*get the total amount of bits per pixel, based on colortype and bitdepth in the struct*/
+unsigned lodepng_get_bpp(const LodePNGColorMode* info);
+/*get the amount of color channels used, based on colortype in the struct.
+If a palette is used, it counts as 1 channel.*/
+unsigned lodepng_get_channels(const LodePNGColorMode* info);
+/*is it a greyscale type? (only colortype 0 or 4)*/
+unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info);
+/*has it got an alpha channel? (only colortype 2 or 6)*/
+unsigned lodepng_is_alpha_type(const LodePNGColorMode* info);
+/*has it got a palette? (only colortype 3)*/
+unsigned lodepng_is_palette_type(const LodePNGColorMode* info);
+/*only returns true if there is a palette and there is a value in the palette with alpha < 255.
+Loops through the palette to check this.*/
+unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info);
+/*
+Check if the given color info indicates the possibility of having non-opaque pixels in the PNG image.
+Returns true if the image can have translucent or invisible pixels (it still be opaque if it doesn't use such pixels).
+Returns false if the image can only have opaque pixels.
+In detail, it returns true only if it's a color type with alpha, or has a palette with non-opaque values,
+or if "key_defined" is true.
+*/
+unsigned lodepng_can_have_alpha(const LodePNGColorMode* info);
+/*Returns the byte size of a raw image buffer with given width, height and color mode*/
+size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color);
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+/*The information of a Time chunk in PNG.*/
+typedef struct LodePNGTime
+{
+  unsigned year;    /*2 bytes used (0-65535)*/
+  unsigned month;   /*1-12*/
+  unsigned day;     /*1-31*/
+  unsigned hour;    /*0-23*/
+  unsigned minute;  /*0-59*/
+  unsigned second;  /*0-60 (to allow for leap seconds)*/
+} LodePNGTime;
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+
+/*Information about the PNG image, except pixels, width and height.*/
+typedef struct LodePNGInfo
+{
+  /*header (IHDR), palette (PLTE) and transparency (tRNS) chunks*/
+  unsigned compression_method;/*compression method of the original file. Always 0.*/
+  unsigned filter_method;     /*filter method of the original file*/
+  unsigned interlace_method;  /*interlace method of the original file*/
+  LodePNGColorMode color;     /*color type and bits, palette and transparency of the PNG file*/
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  /*
+  suggested background color chunk (bKGD)
+  This color uses the same color mode as the PNG (except alpha channel), which can be 1-bit to 16-bit.
+
+  For greyscale PNGs, r, g and b will all 3 be set to the same. When encoding
+  the encoder writes the red one. For palette PNGs: When decoding, the RGB value
+  will be stored, not a palette index. But when encoding, specify the index of
+  the palette in background_r, the other two are then ignored.
+
+  The decoder does not use this background color to edit the color of pixels.
+  */
+  unsigned background_defined; /*is a suggested background color given?*/
+  unsigned background_r;       /*red component of suggested background color*/
+  unsigned background_g;       /*green component of suggested background color*/
+  unsigned background_b;       /*blue component of suggested background color*/
+
+  /*
+  non-international text chunks (tEXt and zTXt)
+
+  The char** arrays each contain num strings. The actual messages are in
+  text_strings, while text_keys are keywords that give a short description what
+  the actual text represents, e.g. Title, Author, Description, or anything else.
+
+  A keyword is minimum 1 character and maximum 79 characters long. It's
+  discouraged to use a single line length longer than 79 characters for texts.
+
+  Don't allocate these text buffers yourself. Use the init/cleanup functions
+  correctly and use lodepng_add_text and lodepng_clear_text.
+  */
+  size_t text_num; /*the amount of texts in these char** buffers (there may be more texts in itext)*/
+  char** text_keys; /*the keyword of a text chunk (e.g. "Comment")*/
+  char** text_strings; /*the actual text*/
+
+  /*
+  international text chunks (iTXt)
+  Similar to the non-international text chunks, but with additional strings
+  "langtags" and "transkeys".
+  */
+  size_t itext_num; /*the amount of international texts in this PNG*/
+  char** itext_keys; /*the English keyword of the text chunk (e.g. "Comment")*/
+  char** itext_langtags; /*language tag for this text's language, ISO/IEC 646 string, e.g. ISO 639 language tag*/
+  char** itext_transkeys; /*keyword translated to the international language - UTF-8 string*/
+  char** itext_strings; /*the actual international text - UTF-8 string*/
+
+  /*time chunk (tIME)*/
+  unsigned time_defined; /*set to 1 to make the encoder generate a tIME chunk*/
+  LodePNGTime time;
+
+  /*phys chunk (pHYs)*/
+  unsigned phys_defined; /*if 0, there is no pHYs chunk and the values below are undefined, if 1 else there is one*/
+  unsigned phys_x; /*pixels per unit in x direction*/
+  unsigned phys_y; /*pixels per unit in y direction*/
+  unsigned phys_unit; /*may be 0 (unknown unit) or 1 (metre)*/
+
+  /*
+  unknown chunks
+  There are 3 buffers, one for each position in the PNG where unknown chunks can appear
+  each buffer contains all unknown chunks for that position consecutively
+  The 3 buffers are the unknown chunks between certain critical chunks:
+  0: IHDR-PLTE, 1: PLTE-IDAT, 2: IDAT-IEND
+  Do not allocate or traverse this data yourself. Use the chunk traversing functions declared
+  later, such as lodepng_chunk_next and lodepng_chunk_append, to read/write this struct.
+  */
+  unsigned char* unknown_chunks_data[3];
+  size_t unknown_chunks_size[3]; /*size in bytes of the unknown chunks, given for protection*/
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+} LodePNGInfo;
+
+/*init, cleanup and copy functions to use with this struct*/
+void lodepng_info_init(LodePNGInfo* info);
+void lodepng_info_cleanup(LodePNGInfo* info);
+/*return value is error code (0 means no error)*/
+unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source);
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+void lodepng_clear_text(LodePNGInfo* info); /*use this to clear the texts again after you filled them in*/
+unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str); /*push back both texts at once*/
+
+void lodepng_clear_itext(LodePNGInfo* info); /*use this to clear the itexts again after you filled them in*/
+unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag,
+                           const char* transkey, const char* str); /*push back the 4 texts of 1 chunk at once*/
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+
+/*
+Converts raw buffer from one color type to another color type, based on
+LodePNGColorMode structs to describe the input and output color type.
+See the reference manual at the end of this header file to see which color conversions are supported.
+return value = LodePNG error code (0 if all went ok, an error if the conversion isn't supported)
+The out buffer must have size (w * h * bpp + 7) / 8, where bpp is the bits per pixel
+of the output color type (lodepng_get_bpp).
+For < 8 bpp images, there should not be padding bits at the end of scanlines.
+For 16-bit per channel colors, uses big endian format like PNG does.
+Return value is LodePNG error code
+*/
+unsigned lodepng_convert(unsigned char* out, const unsigned char* in,
+                         const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in,
+                         unsigned w, unsigned h);
+
+#ifdef LODEPNG_COMPILE_DECODER
+/*
+Settings for the decoder. This contains settings for the PNG and the Zlib
+decoder, but not the Info settings from the Info structs.
+*/
+typedef struct LodePNGDecoderSettings
+{
+  LodePNGDecompressSettings zlibsettings; /*in here is the setting to ignore Adler32 checksums*/
+
+  unsigned ignore_crc; /*ignore CRC checksums*/
+
+  unsigned color_convert; /*whether to convert the PNG to the color type you want. Default: yes*/
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  unsigned read_text_chunks; /*if false but remember_unknown_chunks is true, they're stored in the unknown chunks*/
+  /*store all bytes from unknown chunks in the LodePNGInfo (off by default, useful for a png editor)*/
+  unsigned remember_unknown_chunks;
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+} LodePNGDecoderSettings;
+
+void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings);
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+#ifdef LODEPNG_COMPILE_ENCODER
+/*automatically use color type with less bits per pixel if losslessly possible. Default: AUTO*/
+typedef enum LodePNGFilterStrategy
+{
+  /*every filter at zero*/
+  LFS_ZERO,
+  /*Use filter that gives minimum sum, as described in the official PNG filter heuristic.*/
+  LFS_MINSUM,
+  /*Use the filter type that gives smallest Shannon entropy for this scanline. Depending
+  on the image, this is better or worse than minsum.*/
+  LFS_ENTROPY,
+  /*
+  Brute-force-search PNG filters by compressing each filter for each scanline.
+  Experimental, very slow, and only rarely gives better compression than MINSUM.
+  */
+  LFS_BRUTE_FORCE,
+  /*use predefined_filters buffer: you specify the filter type for each scanline*/
+  LFS_PREDEFINED
+} LodePNGFilterStrategy;
+
+/*Gives characteristics about the colors of the image, which helps decide which color model to use for encoding.
+Used internally by default if "auto_convert" is enabled. Public because it's useful for custom algorithms.*/
+typedef struct LodePNGColorProfile
+{
+  unsigned colored; /*not greyscale*/
+  unsigned key; /*if true, image is not opaque. Only if true and alpha is false, color key is possible.*/
+  unsigned short key_r; /*these values are always in 16-bit bitdepth in the profile*/
+  unsigned short key_g;
+  unsigned short key_b;
+  unsigned alpha; /*alpha channel or alpha palette required*/
+  unsigned numcolors; /*amount of colors, up to 257. Not valid if bits == 16.*/
+  unsigned char palette[1024]; /*Remembers up to the first 256 RGBA colors, in no particular order*/
+  unsigned bits; /*bits per channel (not for palette). 1,2 or 4 for greyscale only. 16 if 16-bit per channel required.*/
+} LodePNGColorProfile;
+
+void lodepng_color_profile_init(LodePNGColorProfile* profile);
+
+/*Get a LodePNGColorProfile of the image.*/
+unsigned lodepng_get_color_profile(LodePNGColorProfile* profile,
+                                   const unsigned char* image, unsigned w, unsigned h,
+                                   const LodePNGColorMode* mode_in);
+/*The function LodePNG uses internally to decide the PNG color with auto_convert.
+Chooses an optimal color model, e.g. grey if only grey pixels, palette if < 256 colors, ...*/
+unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out,
+                                   const unsigned char* image, unsigned w, unsigned h,
+                                   const LodePNGColorMode* mode_in);
+
+/*Settings for the encoder.*/
+typedef struct LodePNGEncoderSettings
+{
+  LodePNGCompressSettings zlibsettings; /*settings for the zlib encoder, such as window size, ...*/
+
+  unsigned auto_convert; /*automatically choose output PNG color type. Default: true*/
+
+  /*If true, follows the official PNG heuristic: if the PNG uses a palette or lower than
+  8 bit depth, set all filters to zero. Otherwise use the filter_strategy. Note that to
+  completely follow the official PNG heuristic, filter_palette_zero must be true and
+  filter_strategy must be LFS_MINSUM*/
+  unsigned filter_palette_zero;
+  /*Which filter strategy to use when not using zeroes due to filter_palette_zero.
+  Set filter_palette_zero to 0 to ensure always using your chosen strategy. Default: LFS_MINSUM*/
+  LodePNGFilterStrategy filter_strategy;
+  /*used if filter_strategy is LFS_PREDEFINED. In that case, this must point to a buffer with
+  the same length as the amount of scanlines in the image, and each value must <= 5. You
+  have to cleanup this buffer, LodePNG will never free it. Don't forget that filter_palette_zero
+  must be set to 0 to ensure this is also used on palette or low bitdepth images.*/
+  const unsigned char* predefined_filters;
+
+  /*force creating a PLTE chunk if colortype is 2 or 6 (= a suggested palette).
+  If colortype is 3, PLTE is _always_ created.*/
+  unsigned force_palette;
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  /*add LodePNG identifier and version as a text chunk, for debugging*/
+  unsigned add_id;
+  /*encode text chunks as zTXt chunks instead of tEXt chunks, and use compression in iTXt chunks*/
+  unsigned text_compression;
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+} LodePNGEncoderSettings;
+
+void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings);
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+
+#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER)
+/*The settings, state and information for extended encoding and decoding.*/
+typedef struct LodePNGState
+{
+#ifdef LODEPNG_COMPILE_DECODER
+  LodePNGDecoderSettings decoder; /*the decoding settings*/
+#endif /*LODEPNG_COMPILE_DECODER*/
+#ifdef LODEPNG_COMPILE_ENCODER
+  LodePNGEncoderSettings encoder; /*the encoding settings*/
+#endif /*LODEPNG_COMPILE_ENCODER*/
+  LodePNGColorMode info_raw; /*specifies the format in which you would like to get the raw pixel buffer*/
+  LodePNGInfo info_png; /*info of the PNG image obtained after decoding*/
+  unsigned error;
+#ifdef LODEPNG_COMPILE_CPP
+  /* For the lodepng::State subclass. */
+  virtual ~LodePNGState(){}
+#endif
+} LodePNGState;
+
+/*init, cleanup and copy functions to use with this struct*/
+void lodepng_state_init(LodePNGState* state);
+void lodepng_state_cleanup(LodePNGState* state);
+void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source);
+#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */
+
+#ifdef LODEPNG_COMPILE_DECODER
+/*
+Same as lodepng_decode_memory, but uses a LodePNGState to allow custom settings and
+getting much more information about the PNG image and color mode.
+*/
+unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h,
+                        LodePNGState* state,
+                        const unsigned char* in, size_t insize);
+
+/*
+Read the PNG header, but not the actual data. This returns only the information
+that is in the header chunk of the PNG, such as width, height and color type. The
+information is placed in the info_png field of the LodePNGState.
+*/
+unsigned lodepng_inspect(unsigned* w, unsigned* h,
+                         LodePNGState* state,
+                         const unsigned char* in, size_t insize);
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+
+#ifdef LODEPNG_COMPILE_ENCODER
+/*This function allocates the out buffer with standard malloc and stores the size in *outsize.*/
+unsigned lodepng_encode(unsigned char** out, size_t* outsize,
+                        const unsigned char* image, unsigned w, unsigned h,
+                        LodePNGState* state);
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+/*
+The lodepng_chunk functions are normally not needed, except to traverse the
+unknown chunks stored in the LodePNGInfo struct, or add new ones to it.
+It also allows traversing the chunks of an encoded PNG file yourself.
+
+PNG standard chunk naming conventions:
+First byte: uppercase = critical, lowercase = ancillary
+Second byte: uppercase = public, lowercase = private
+Third byte: must be uppercase
+Fourth byte: uppercase = unsafe to copy, lowercase = safe to copy
+*/
+
+/*
+Gets the length of the data of the chunk. Total chunk length has 12 bytes more.
+There must be at least 4 bytes to read from. If the result value is too large,
+it may be corrupt data.
+*/
+unsigned lodepng_chunk_length(const unsigned char* chunk);
+
+/*puts the 4-byte type in null terminated string*/
+void lodepng_chunk_type(char type[5], const unsigned char* chunk);
+
+/*check if the type is the given type*/
+unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type);
+
+/*0: it's one of the critical chunk types, 1: it's an ancillary chunk (see PNG standard)*/
+unsigned char lodepng_chunk_ancillary(const unsigned char* chunk);
+
+/*0: public, 1: private (see PNG standard)*/
+unsigned char lodepng_chunk_private(const unsigned char* chunk);
+
+/*0: the chunk is unsafe to copy, 1: the chunk is safe to copy (see PNG standard)*/
+unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk);
+
+/*get pointer to the data of the chunk, where the input points to the header of the chunk*/
+unsigned char* lodepng_chunk_data(unsigned char* chunk);
+const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk);
+
+/*returns 0 if the crc is correct, 1 if it's incorrect (0 for OK as usual!)*/
+unsigned lodepng_chunk_check_crc(const unsigned char* chunk);
+
+/*generates the correct CRC from the data and puts it in the last 4 bytes of the chunk*/
+void lodepng_chunk_generate_crc(unsigned char* chunk);
+
+/*iterate to next chunks. don't use on IEND chunk, as there is no next chunk then*/
+unsigned char* lodepng_chunk_next(unsigned char* chunk);
+const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk);
+
+/*
+Appends chunk to the data in out. The given chunk should already have its chunk header.
+The out variable and outlength are updated to reflect the new reallocated buffer.
+Returns error code (0 if it went ok)
+*/
+unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk);
+
+/*
+Appends new chunk to out. The chunk to append is given by giving its length, type
+and data separately. The type is a 4-letter string.
+The out variable and outlength are updated to reflect the new reallocated buffer.
+Returne error code (0 if it went ok)
+*/
+unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length,
+                              const char* type, const unsigned char* data);
+
+
+/*Calculate CRC32 of buffer*/
+unsigned lodepng_crc32(const unsigned char* buf, size_t len);
+#endif /*LODEPNG_COMPILE_PNG*/
+
+
+#ifdef LODEPNG_COMPILE_ZLIB
+/*
+This zlib part can be used independently to zlib compress and decompress a
+buffer. It cannot be used to create gzip files however, and it only supports the
+part of zlib that is required for PNG, it does not support dictionaries.
+*/
+
+#ifdef LODEPNG_COMPILE_DECODER
+/*Inflate a buffer. Inflate is the decompression step of deflate. Out buffer must be freed after use.*/
+unsigned lodepng_inflate(unsigned char** out, size_t* outsize,
+                         const unsigned char* in, size_t insize,
+                         const LodePNGDecompressSettings* settings);
+
+/*
+Decompresses Zlib data. Reallocates the out buffer and appends the data. The
+data must be according to the zlib specification.
+Either, *out must be NULL and *outsize must be 0, or, *out must be a valid
+buffer and *outsize its size in bytes. out must be freed by user after usage.
+*/
+unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize,
+                                 const unsigned char* in, size_t insize,
+                                 const LodePNGDecompressSettings* settings);
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+#ifdef LODEPNG_COMPILE_ENCODER
+/*
+Compresses data with Zlib. Reallocates the out buffer and appends the data.
+Zlib adds a small header and trailer around the deflate data.
+The data is output in the format of the zlib specification.
+Either, *out must be NULL and *outsize must be 0, or, *out must be a valid
+buffer and *outsize its size in bytes. out must be freed by user after usage.
+*/
+unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize,
+                               const unsigned char* in, size_t insize,
+                               const LodePNGCompressSettings* settings);
+
+/*
+Find length-limited Huffman code for given frequencies. This function is in the
+public interface only for tests, it's used internally by lodepng_deflate.
+*/
+unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies,
+                                      size_t numcodes, unsigned maxbitlen);
+
+/*Compress a buffer with deflate. See RFC 1951. Out buffer must be freed after use.*/
+unsigned lodepng_deflate(unsigned char** out, size_t* outsize,
+                         const unsigned char* in, size_t insize,
+                         const LodePNGCompressSettings* settings);
+
+#endif /*LODEPNG_COMPILE_ENCODER*/
+#endif /*LODEPNG_COMPILE_ZLIB*/
+
+#ifdef LODEPNG_COMPILE_DISK
+/*
+Load a file from disk into buffer. The function allocates the out buffer, and
+after usage you should free it.
+out: output parameter, contains pointer to loaded buffer.
+outsize: output parameter, size of the allocated out buffer
+filename: the path to the file to load
+return value: error code (0 means ok)
+*/
+unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename);
+
+/*
+Save a file from buffer to disk. Warning, if it exists, this function overwrites
+the file without warning!
+buffer: the buffer to write
+buffersize: size of the buffer to write
+filename: the path to the file to save to
+return value: error code (0 means ok)
+*/
+unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename);
+#endif /*LODEPNG_COMPILE_DISK*/
+
+#ifdef LODEPNG_COMPILE_CPP
+/* The LodePNG C++ wrapper uses std::vectors instead of manually allocated memory buffers. */
+namespace lodepng
+{
+#ifdef LODEPNG_COMPILE_PNG
+class State : public LodePNGState
+{
+  public:
+    State();
+    State(const State& other);
+    virtual ~State();
+    State& operator=(const State& other);
+};
+
+#ifdef LODEPNG_COMPILE_DECODER
+/* Same as other lodepng::decode, but using a State for more settings and information. */
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
+                State& state,
+                const unsigned char* in, size_t insize);
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
+                State& state,
+                const std::vector<unsigned char>& in);
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+#ifdef LODEPNG_COMPILE_ENCODER
+/* Same as other lodepng::encode, but using a State for more settings and information. */
+unsigned encode(std::vector<unsigned char>& out,
+                const unsigned char* in, unsigned w, unsigned h,
+                State& state);
+unsigned encode(std::vector<unsigned char>& out,
+                const std::vector<unsigned char>& in, unsigned w, unsigned h,
+                State& state);
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+#ifdef LODEPNG_COMPILE_DISK
+/*
+Load a file from disk into an std::vector.
+return value: error code (0 means ok)
+*/
+unsigned load_file(std::vector<unsigned char>& buffer, const std::string& filename);
+
+/*
+Save the binary data in an std::vector to a file on disk. The file is overwritten
+without warning.
+*/
+unsigned save_file(const std::vector<unsigned char>& buffer, const std::string& filename);
+#endif /* LODEPNG_COMPILE_DISK */
+#endif /* LODEPNG_COMPILE_PNG */
+
+#ifdef LODEPNG_COMPILE_ZLIB
+#ifdef LODEPNG_COMPILE_DECODER
+/* Zlib-decompress an unsigned char buffer */
+unsigned decompress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
+                    const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings);
+
+/* Zlib-decompress an std::vector */
+unsigned decompress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
+                    const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings);
+#endif /* LODEPNG_COMPILE_DECODER */
+
+#ifdef LODEPNG_COMPILE_ENCODER
+/* Zlib-compress an unsigned char buffer */
+unsigned compress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
+                  const LodePNGCompressSettings& settings = lodepng_default_compress_settings);
+
+/* Zlib-compress an std::vector */
+unsigned compress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
+                  const LodePNGCompressSettings& settings = lodepng_default_compress_settings);
+#endif /* LODEPNG_COMPILE_ENCODER */
+#endif /* LODEPNG_COMPILE_ZLIB */
+} /* namespace lodepng */
+#endif /*LODEPNG_COMPILE_CPP*/
+
+/*
+TODO:
+[.] test if there are no memory leaks or security exploits - done a lot but needs to be checked often
+[.] check compatibility with various compilers  - done but needs to be redone for every newer version
+[X] converting color to 16-bit per channel types
+[ ] read all public PNG chunk types (but never let the color profile and gamma ones touch RGB values)
+[ ] make sure encoder generates no chunks with size > (2^31)-1
+[ ] partial decoding (stream processing)
+[X] let the "isFullyOpaque" function check color keys and transparent palettes too
+[X] better name for the variables "codes", "codesD", "codelengthcodes", "clcl" and "lldl"
+[ ] don't stop decoding on errors like 69, 57, 58 (make warnings)
+[ ] let the C++ wrapper catch exceptions coming from the standard library and return LodePNG error codes
+[ ] allow user to provide custom color conversion functions, e.g. for premultiplied alpha, padding bits or not, ...
+[ ] allow user to give data (void*) to custom allocator
+*/
+
+#endif /*LODEPNG_H inclusion guard*/
+
+/*
+LodePNG Documentation
+---------------------
+
+0. table of contents
+--------------------
+
+  1. about
+   1.1. supported features
+   1.2. features not supported
+  2. C and C++ version
+  3. security
+  4. decoding
+  5. encoding
+  6. color conversions
+    6.1. PNG color types
+    6.2. color conversions
+    6.3. padding bits
+    6.4. A note about 16-bits per channel and endianness
+  7. error values
+  8. chunks and PNG editing
+  9. compiler support
+  10. examples
+   10.1. decoder C++ example
+   10.2. decoder C example
+  11. state settings reference
+  12. changes
+  13. contact information
+
+
+1. about
+--------
+
+PNG is a file format to store raster images losslessly with good compression,
+supporting different color types and alpha channel.
+
+LodePNG is a PNG codec according to the Portable Network Graphics (PNG)
+Specification (Second Edition) - W3C Recommendation 10 November 2003.
+
+The specifications used are:
+
+*) Portable Network Graphics (PNG) Specification (Second Edition):
+     http://www.w3.org/TR/2003/REC-PNG-20031110
+*) RFC 1950 ZLIB Compressed Data Format version 3.3:
+     http://www.gzip.org/zlib/rfc-zlib.html
+*) RFC 1951 DEFLATE Compressed Data Format Specification ver 1.3:
+     http://www.gzip.org/zlib/rfc-deflate.html
+
+The most recent version of LodePNG can currently be found at
+http://lodev.org/lodepng/
+
+LodePNG works both in C (ISO C90) and C++, with a C++ wrapper that adds
+extra functionality.
+
+LodePNG exists out of two files:
+-lodepng.h: the header file for both C and C++
+-lodepng.c(pp): give it the name lodepng.c or lodepng.cpp (or .cc) depending on your usage
+
+If you want to start using LodePNG right away without reading this doc, get the
+examples from the LodePNG website to see how to use it in code, or check the
+smaller examples in chapter 13 here.
+
+LodePNG is simple but only supports the basic requirements. To achieve
+simplicity, the following design choices were made: There are no dependencies
+on any external library. There are functions to decode and encode a PNG with
+a single function call, and extended versions of these functions taking a
+LodePNGState struct allowing to specify or get more information. By default
+the colors of the raw image are always RGB or RGBA, no matter what color type
+the PNG file uses. To read and write files, there are simple functions to
+convert the files to/from buffers in memory.
+
+This all makes LodePNG suitable for loading textures in games, demos and small
+programs, ... It's less suitable for full fledged image editors, loading PNGs
+over network (it requires all the image data to be available before decoding can
+begin), life-critical systems, ...
+
+1.1. supported features
+-----------------------
+
+The following features are supported by the decoder:
+
+*) decoding of PNGs with any color type, bit depth and interlace mode, to a 24- or 32-bit color raw image,
+   or the same color type as the PNG
+*) encoding of PNGs, from any raw image to 24- or 32-bit color, or the same color type as the raw image
+*) Adam7 interlace and deinterlace for any color type
+*) loading the image from harddisk or decoding it from a buffer from other sources than harddisk
+*) support for alpha channels, including RGBA color model, translucent palettes and color keying
+*) zlib decompression (inflate)
+*) zlib compression (deflate)
+*) CRC32 and ADLER32 checksums
+*) handling of unknown chunks, allowing making a PNG editor that stores custom and unknown chunks.
+*) the following chunks are supported (generated/interpreted) by both encoder and decoder:
+    IHDR: header information
+    PLTE: color palette
+    IDAT: pixel data
+    IEND: the final chunk
+    tRNS: transparency for palettized images
+    tEXt: textual information
+    zTXt: compressed textual information
+    iTXt: international textual information
+    bKGD: suggested background color
+    pHYs: physical dimensions
+    tIME: modification time
+
+1.2. features not supported
+---------------------------
+
+The following features are _not_ supported:
+
+*) some features needed to make a conformant PNG-Editor might be still missing.
+*) partial loading/stream processing. All data must be available and is processed in one call.
+*) The following public chunks are not supported but treated as unknown chunks by LodePNG
+    cHRM, gAMA, iCCP, sRGB, sBIT, hIST, sPLT
+   Some of these are not supported on purpose: LodePNG wants to provide the RGB values
+   stored in the pixels, not values modified by system dependent gamma or color models.
+
+
+2. C and C++ version
+--------------------
+
+The C version uses buffers allocated with alloc that you need to free()
+yourself. You need to use init and cleanup functions for each struct whenever
+using a struct from the C version to avoid exploits and memory leaks.
+
+The C++ version has extra functions with std::vectors in the interface and the
+lodepng::State class which is a LodePNGState with constructor and destructor.
+
+These files work without modification for both C and C++ compilers because all
+the additional C++ code is in "#ifdef __cplusplus" blocks that make C-compilers
+ignore it, and the C code is made to compile both with strict ISO C90 and C++.
+
+To use the C++ version, you need to rename the source file to lodepng.cpp
+(instead of lodepng.c), and compile it with a C++ compiler.
+
+To use the C version, you need to rename the source file to lodepng.c (instead
+of lodepng.cpp), and compile it with a C compiler.
+
+
+3. Security
+-----------
+
+Even if carefully designed, it's always possible that LodePNG contains possible
+exploits. If you discover one, please let me know, and it will be fixed.
+
+When using LodePNG, care has to be taken with the C version of LodePNG, as well
+as the C-style structs when working with C++. The following conventions are used
+for all C-style structs:
+
+-if a struct has a corresponding init function, always call the init function when making a new one
+-if a struct has a corresponding cleanup function, call it before the struct disappears to avoid memory leaks
+-if a struct has a corresponding copy function, use the copy function instead of "=".
+ The destination must also be inited already.
+
+
+4. Decoding
+-----------
+
+Decoding converts a PNG compressed image to a raw pixel buffer.
+
+Most documentation on using the decoder is at its declarations in the header
+above. For C, simple decoding can be done with functions such as
+lodepng_decode32, and more advanced decoding can be done with the struct
+LodePNGState and lodepng_decode. For C++, all decoding can be done with the
+various lodepng::decode functions, and lodepng::State can be used for advanced
+features.
+
+When using the LodePNGState, it uses the following fields for decoding:
+*) LodePNGInfo info_png: it stores extra information about the PNG (the input) in here
+*) LodePNGColorMode info_raw: here you can say what color mode of the raw image (the output) you want to get
+*) LodePNGDecoderSettings decoder: you can specify a few extra settings for the decoder to use
+
+LodePNGInfo info_png
+--------------------
+
+After decoding, this contains extra information of the PNG image, except the actual
+pixels, width and height because these are already gotten directly from the decoder
+functions.
+
+It contains for example the original color type of the PNG image, text comments,
+suggested background color, etc... More details about the LodePNGInfo struct are
+at its declaration documentation.
+
+LodePNGColorMode info_raw
+-------------------------
+
+When decoding, here you can specify which color type you want
+the resulting raw image to be. If this is different from the colortype of the
+PNG, then the decoder will automatically convert the result. This conversion
+always works, except if you want it to convert a color PNG to greyscale or to
+a palette with missing colors.
+
+By default, 32-bit color is used for the result.
+
+LodePNGDecoderSettings decoder
+------------------------------
+
+The settings can be used to ignore the errors created by invalid CRC and Adler32
+chunks, and to disable the decoding of tEXt chunks.
+
+There's also a setting color_convert, true by default. If false, no conversion
+is done, the resulting data will be as it was in the PNG (after decompression)
+and you'll have to puzzle the colors of the pixels together yourself using the
+color type information in the LodePNGInfo.
+
+
+5. Encoding
+-----------
+
+Encoding converts a raw pixel buffer to a PNG compressed image.
+
+Most documentation on using the encoder is at its declarations in the header
+above. For C, simple encoding can be done with functions such as
+lodepng_encode32, and more advanced decoding can be done with the struct
+LodePNGState and lodepng_encode. For C++, all encoding can be done with the
+various lodepng::encode functions, and lodepng::State can be used for advanced
+features.
+
+Like the decoder, the encoder can also give errors. However it gives less errors
+since the encoder input is trusted, the decoder input (a PNG image that could
+be forged by anyone) is not trusted.
+
+When using the LodePNGState, it uses the following fields for encoding:
+*) LodePNGInfo info_png: here you specify how you want the PNG (the output) to be.
+*) LodePNGColorMode info_raw: here you say what color type of the raw image (the input) has
+*) LodePNGEncoderSettings encoder: you can specify a few settings for the encoder to use
+
+LodePNGInfo info_png
+--------------------
+
+When encoding, you use this the opposite way as when decoding: for encoding,
+you fill in the values you want the PNG to have before encoding. By default it's
+not needed to specify a color type for the PNG since it's automatically chosen,
+but it's possible to choose it yourself given the right settings.
+
+The encoder will not always exactly match the LodePNGInfo struct you give,
+it tries as close as possible. Some things are ignored by the encoder. The
+encoder uses, for example, the following settings from it when applicable:
+colortype and bitdepth, text chunks, time chunk, the color key, the palette, the
+background color, the interlace method, unknown chunks, ...
+
+When encoding to a PNG with colortype 3, the encoder will generate a PLTE chunk.
+If the palette contains any colors for which the alpha channel is not 255 (so
+there are translucent colors in the palette), it'll add a tRNS chunk.
+
+LodePNGColorMode info_raw
+-------------------------
+
+You specify the color type of the raw image that you give to the input here,
+including a possible transparent color key and palette you happen to be using in
+your raw image data.
+
+By default, 32-bit color is assumed, meaning your input has to be in RGBA
+format with 4 bytes (unsigned chars) per pixel.
+
+LodePNGEncoderSettings encoder
+------------------------------
+
+The following settings are supported (some are in sub-structs):
+*) auto_convert: when this option is enabled, the encoder will
+automatically choose the smallest possible color mode (including color key) that
+can encode the colors of all pixels without information loss.
+*) btype: the block type for LZ77. 0 = uncompressed, 1 = fixed huffman tree,
+   2 = dynamic huffman tree (best compression). Should be 2 for proper
+   compression.
+*) use_lz77: whether or not to use LZ77 for compressed block types. Should be
+   true for proper compression.
+*) windowsize: the window size used by the LZ77 encoder (1 - 32768). Has value
+   2048 by default, but can be set to 32768 for better, but slow, compression.
+*) force_palette: if colortype is 2 or 6, you can make the encoder write a PLTE
+   chunk if force_palette is true. This can used as suggested palette to convert
+   to by viewers that don't support more than 256 colors (if those still exist)
+*) add_id: add text chunk "Encoder: LodePNG <version>" to the image.
+*) text_compression: default 1. If 1, it'll store texts as zTXt instead of tEXt chunks.
+  zTXt chunks use zlib compression on the text. This gives a smaller result on
+  large texts but a larger result on small texts (such as a single program name).
+  It's all tEXt or all zTXt though, there's no separate setting per text yet.
+
+
+6. color conversions
+--------------------
+
+An important thing to note about LodePNG, is that the color type of the PNG, and
+the color type of the raw image, are completely independent. By default, when
+you decode a PNG, you get the result as a raw image in the color type you want,
+no matter whether the PNG was encoded with a palette, greyscale or RGBA color.
+And if you encode an image, by default LodePNG will automatically choose the PNG
+color type that gives good compression based on the values of colors and amount
+of colors in the image. It can be configured to let you control it instead as
+well, though.
+
+To be able to do this, LodePNG does conversions from one color mode to another.
+It can convert from almost any color type to any other color type, except the
+following conversions: RGB to greyscale is not supported, and converting to a
+palette when the palette doesn't have a required color is not supported. This is
+not supported on purpose: this is information loss which requires a color
+reduction algorithm that is beyong the scope of a PNG encoder (yes, RGB to grey
+is easy, but there are multiple ways if you want to give some channels more
+weight).
+
+By default, when decoding, you get the raw image in 32-bit RGBA or 24-bit RGB
+color, no matter what color type the PNG has. And by default when encoding,
+LodePNG automatically picks the best color model for the output PNG, and expects
+the input image to be 32-bit RGBA or 24-bit RGB. So, unless you want to control
+the color format of the images yourself, you can skip this chapter.
+
+6.1. PNG color types
+--------------------
+
+A PNG image can have many color types, ranging from 1-bit color to 64-bit color,
+as well as palettized color modes. After the zlib decompression and unfiltering
+in the PNG image is done, the raw pixel data will have that color type and thus
+a certain amount of bits per pixel. If you want the output raw image after
+decoding to have another color type, a conversion is done by LodePNG.
+
+The PNG specification gives the following color types:
+
+0: greyscale, bit depths 1, 2, 4, 8, 16
+2: RGB, bit depths 8 and 16
+3: palette, bit depths 1, 2, 4 and 8
+4: greyscale with alpha, bit depths 8 and 16
+6: RGBA, bit depths 8 and 16
+
+Bit depth is the amount of bits per pixel per color channel. So the total amount
+of bits per pixel is: amount of channels * bitdepth.
+
+6.2. color conversions
+----------------------
+
+As explained in the sections about the encoder and decoder, you can specify
+color types and bit depths in info_png and info_raw to change the default
+behaviour.
+
+If, when decoding, you want the raw image to be something else than the default,
+you need to set the color type and bit depth you want in the LodePNGColorMode,
+or the parameters colortype and bitdepth of the simple decoding function.
+
+If, when encoding, you use another color type than the default in the raw input
+image, you need to specify its color type and bit depth in the LodePNGColorMode
+of the raw image, or use the parameters colortype and bitdepth of the simple
+encoding function.
+
+If, when encoding, you don't want LodePNG to choose the output PNG color type
+but control it yourself, you need to set auto_convert in the encoder settings
+to false, and specify the color type you want in the LodePNGInfo of the
+encoder (including palette: it can generate a palette if auto_convert is true,
+otherwise not).
+
+If the input and output color type differ (whether user chosen or auto chosen),
+LodePNG will do a color conversion, which follows the rules below, and may
+sometimes result in an error.
+
+To avoid some confusion:
+-the decoder converts from PNG to raw image
+-the encoder converts from raw image to PNG
+-the colortype and bitdepth in LodePNGColorMode info_raw, are those of the raw image
+-the colortype and bitdepth in the color field of LodePNGInfo info_png, are those of the PNG
+-when encoding, the color type in LodePNGInfo is ignored if auto_convert
+ is enabled, it is automatically generated instead
+-when decoding, the color type in LodePNGInfo is set by the decoder to that of the original
+ PNG image, but it can be ignored since the raw image has the color type you requested instead
+-if the color type of the LodePNGColorMode and PNG image aren't the same, a conversion
+ between the color types is done if the color types are supported. If it is not
+ supported, an error is returned. If the types are the same, no conversion is done.
+-even though some conversions aren't supported, LodePNG supports loading PNGs from any
+ colortype and saving PNGs to any colortype, sometimes it just requires preparing
+ the raw image correctly before encoding.
+-both encoder and decoder use the same color converter.
+
+Non supported color conversions:
+-color to greyscale: no error is thrown, but the result will look ugly because
+only the red channel is taken
+-anything to palette when that palette does not have that color in it: in this
+case an error is thrown
+
+Supported color conversions:
+-anything to 8-bit RGB, 8-bit RGBA, 16-bit RGB, 16-bit RGBA
+-any grey or grey+alpha, to grey or grey+alpha
+-anything to a palette, as long as the palette has the requested colors in it
+-removing alpha channel
+-higher to smaller bitdepth, and vice versa
+
+If you want no color conversion to be done (e.g. for speed or control):
+-In the encoder, you can make it save a PNG with any color type by giving the
+raw color mode and LodePNGInfo the same color mode, and setting auto_convert to
+false.
+-In the decoder, you can make it store the pixel data in the same color type
+as the PNG has, by setting the color_convert setting to false. Settings in
+info_raw are then ignored.
+
+The function lodepng_convert does the color conversion. It is available in the
+interface but normally isn't needed since the encoder and decoder already call
+it.
+
+6.3. padding bits
+-----------------
+
+In the PNG file format, if a less than 8-bit per pixel color type is used and the scanlines
+have a bit amount that isn't a multiple of 8, then padding bits are used so that each
+scanline starts at a fresh byte. But that is NOT true for the LodePNG raw input and output.
+The raw input image you give to the encoder, and the raw output image you get from the decoder
+will NOT have these padding bits, e.g. in the case of a 1-bit image with a width
+of 7 pixels, the first pixel of the second scanline will the the 8th bit of the first byte,
+not the first bit of a new byte.
+
+6.4. A note about 16-bits per channel and endianness
+----------------------------------------------------
+
+LodePNG uses unsigned char arrays for 16-bit per channel colors too, just like
+for any other color format. The 16-bit values are stored in big endian (most
+significant byte first) in these arrays. This is the opposite order of the
+little endian used by x86 CPU's.
+
+LodePNG always uses big endian because the PNG file format does so internally.
+Conversions to other formats than PNG uses internally are not supported by
+LodePNG on purpose, there are myriads of formats, including endianness of 16-bit
+colors, the order in which you store R, G, B and A, and so on. Supporting and
+converting to/from all that is outside the scope of LodePNG.
+
+This may mean that, depending on your use case, you may want to convert the big
+endian output of LodePNG to little endian with a for loop. This is certainly not
+always needed, many applications and libraries support big endian 16-bit colors
+anyway, but it means you cannot simply cast the unsigned char* buffer to an
+unsigned short* buffer on x86 CPUs.
+
+
+7. error values
+---------------
+
+All functions in LodePNG that return an error code, return 0 if everything went
+OK, or a non-zero code if there was an error.
+
+The meaning of the LodePNG error values can be retrieved with the function
+lodepng_error_text: given the numerical error code, it returns a description
+of the error in English as a string.
+
+Check the implementation of lodepng_error_text to see the meaning of each code.
+
+
+8. chunks and PNG editing
+-------------------------
+
+If you want to add extra chunks to a PNG you encode, or use LodePNG for a PNG
+editor that should follow the rules about handling of unknown chunks, or if your
+program is able to read other types of chunks than the ones handled by LodePNG,
+then that's possible with the chunk functions of LodePNG.
+
+A PNG chunk has the following layout:
+
+4 bytes length
+4 bytes type name
+length bytes data
+4 bytes CRC
+
+8.1. iterating through chunks
+-----------------------------
+
+If you have a buffer containing the PNG image data, then the first chunk (the
+IHDR chunk) starts at byte number 8 of that buffer. The first 8 bytes are the
+signature of the PNG and are not part of a chunk. But if you start at byte 8
+then you have a chunk, and can check the following things of it.
+
+NOTE: none of these functions check for memory buffer boundaries. To avoid
+exploits, always make sure the buffer contains all the data of the chunks.
+When using lodepng_chunk_next, make sure the returned value is within the
+allocated memory.
+
+unsigned lodepng_chunk_length(const unsigned char* chunk):
+
+Get the length of the chunk's data. The total chunk length is this length + 12.
+
+void lodepng_chunk_type(char type[5], const unsigned char* chunk):
+unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type):
+
+Get the type of the chunk or compare if it's a certain type
+
+unsigned char lodepng_chunk_critical(const unsigned char* chunk):
+unsigned char lodepng_chunk_private(const unsigned char* chunk):
+unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk):
+
+Check if the chunk is critical in the PNG standard (only IHDR, PLTE, IDAT and IEND are).
+Check if the chunk is private (public chunks are part of the standard, private ones not).
+Check if the chunk is safe to copy. If it's not, then, when modifying data in a critical
+chunk, unsafe to copy chunks of the old image may NOT be saved in the new one if your
+program doesn't handle that type of unknown chunk.
+
+unsigned char* lodepng_chunk_data(unsigned char* chunk):
+const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk):
+
+Get a pointer to the start of the data of the chunk.
+
+unsigned lodepng_chunk_check_crc(const unsigned char* chunk):
+void lodepng_chunk_generate_crc(unsigned char* chunk):
+
+Check if the crc is correct or generate a correct one.
+
+unsigned char* lodepng_chunk_next(unsigned char* chunk):
+const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk):
+
+Iterate to the next chunk. This works if you have a buffer with consecutive chunks. Note that these
+functions do no boundary checking of the allocated data whatsoever, so make sure there is enough
+data available in the buffer to be able to go to the next chunk.
+
+unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk):
+unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length,
+                              const char* type, const unsigned char* data):
+
+These functions are used to create new chunks that are appended to the data in *out that has
+length *outlength. The append function appends an existing chunk to the new data. The create
+function creates a new chunk with the given parameters and appends it. Type is the 4-letter
+name of the chunk.
+
+8.2. chunks in info_png
+-----------------------
+
+The LodePNGInfo struct contains fields with the unknown chunk in it. It has 3
+buffers (each with size) to contain 3 types of unknown chunks:
+the ones that come before the PLTE chunk, the ones that come between the PLTE
+and the IDAT chunks, and the ones that come after the IDAT chunks.
+It's necessary to make the distionction between these 3 cases because the PNG
+standard forces to keep the ordering of unknown chunks compared to the critical
+chunks, but does not force any other ordering rules.
+
+info_png.unknown_chunks_data[0] is the chunks before PLTE
+info_png.unknown_chunks_data[1] is the chunks after PLTE, before IDAT
+info_png.unknown_chunks_data[2] is the chunks after IDAT
+
+The chunks in these 3 buffers can be iterated through and read by using the same
+way described in the previous subchapter.
+
+When using the decoder to decode a PNG, you can make it store all unknown chunks
+if you set the option settings.remember_unknown_chunks to 1. By default, this
+option is off (0).
+
+The encoder will always encode unknown chunks that are stored in the info_png.
+If you need it to add a particular chunk that isn't known by LodePNG, you can
+use lodepng_chunk_append or lodepng_chunk_create to the chunk data in
+info_png.unknown_chunks_data[x].
+
+Chunks that are known by LodePNG should not be added in that way. E.g. to make
+LodePNG add a bKGD chunk, set background_defined to true and add the correct
+parameters there instead.
+
+
+9. compiler support
+-------------------
+
+No libraries other than the current standard C library are needed to compile
+LodePNG. For the C++ version, only the standard C++ library is needed on top.
+Add the files lodepng.c(pp) and lodepng.h to your project, include
+lodepng.h where needed, and your program can read/write PNG files.
+
+It is compatible with C90 and up, and C++03 and up.
+
+If performance is important, use optimization when compiling! For both the
+encoder and decoder, this makes a large difference.
+
+Make sure that LodePNG is compiled with the same compiler of the same version
+and with the same settings as the rest of the program, or the interfaces with
+std::vectors and std::strings in C++ can be incompatible.
+
+CHAR_BITS must be 8 or higher, because LodePNG uses unsigned chars for octets.
+
+*) gcc and g++
+
+LodePNG is developed in gcc so this compiler is natively supported. It gives no
+warnings with compiler options "-Wall -Wextra -pedantic -ansi", with gcc and g++
+version 4.7.1 on Linux, 32-bit and 64-bit.
+
+*) Clang
+
+Fully supported and warning-free.
+
+*) Mingw
+
+The Mingw compiler (a port of gcc for Windows) should be fully supported by
+LodePNG.
+
+*) Visual Studio and Visual C++ Express Edition
+
+LodePNG should be warning-free with warning level W4. Two warnings were disabled
+with pragmas though: warning 4244 about implicit conversions, and warning 4996
+where it wants to use a non-standard function fopen_s instead of the standard C
+fopen.
+
+Visual Studio may want "stdafx.h" files to be included in each source file and
+give an error "unexpected end of file while looking for precompiled header".
+This is not standard C++ and will not be added to the stock LodePNG. You can
+disable it for lodepng.cpp only by right clicking it, Properties, C/C++,
+Precompiled Headers, and set it to Not Using Precompiled Headers there.
+
+NOTE: Modern versions of VS should be fully supported, but old versions, e.g.
+VS6, are not guaranteed to work.
+
+*) Compilers on Macintosh
+
+LodePNG has been reported to work both with gcc and LLVM for Macintosh, both for
+C and C++.
+
+*) Other Compilers
+
+If you encounter problems on any compilers, feel free to let me know and I may
+try to fix it if the compiler is modern and standards complient.
+
+
+10. examples
+------------
+
+This decoder example shows the most basic usage of LodePNG. More complex
+examples can be found on the LodePNG website.
+
+10.1. decoder C++ example
+-------------------------
+
+#include "lodepng.h"
+#include <iostream>
+
+int main(int argc, char *argv[])
+{
+  const char* filename = argc > 1 ? argv[1] : "test.png";
+
+  //load and decode
+  std::vector<unsigned char> image;
+  unsigned width, height;
+  unsigned error = lodepng::decode(image, width, height, filename);
+
+  //if there's an error, display it
+  if(error) std::cout << "decoder error " << error << ": " << lodepng_error_text(error) << std::endl;
+
+  //the pixels are now in the vector "image", 4 bytes per pixel, ordered RGBARGBA..., use it as texture, draw it, ...
+}
+
+10.2. decoder C example
+-----------------------
+
+#include "lodepng.h"
+
+int main(int argc, char *argv[])
+{
+  unsigned error;
+  unsigned char* image;
+  size_t width, height;
+  const char* filename = argc > 1 ? argv[1] : "test.png";
+
+  error = lodepng_decode32_file(&image, &width, &height, filename);
+
+  if(error) printf("decoder error %u: %s\n", error, lodepng_error_text(error));
+
+  / * use image here * /
+
+  free(image);
+  return 0;
+}
+
+11. state settings reference
+----------------------------
+
+A quick reference of some settings to set on the LodePNGState
+
+For decoding:
+
+state.decoder.zlibsettings.ignore_adler32: ignore ADLER32 checksums
+state.decoder.zlibsettings.custom_...: use custom inflate function
+state.decoder.ignore_crc: ignore CRC checksums
+state.decoder.color_convert: convert internal PNG color to chosen one
+state.decoder.read_text_chunks: whether to read in text metadata chunks
+state.decoder.remember_unknown_chunks: whether to read in unknown chunks
+state.info_raw.colortype: desired color type for decoded image
+state.info_raw.bitdepth: desired bit depth for decoded image
+state.info_raw....: more color settings, see struct LodePNGColorMode
+state.info_png....: no settings for decoder but ouput, see struct LodePNGInfo
+
+For encoding:
+
+state.encoder.zlibsettings.btype: disable compression by setting it to 0
+state.encoder.zlibsettings.use_lz77: use LZ77 in compression
+state.encoder.zlibsettings.windowsize: tweak LZ77 windowsize
+state.encoder.zlibsettings.minmatch: tweak min LZ77 length to match
+state.encoder.zlibsettings.nicematch: tweak LZ77 match where to stop searching
+state.encoder.zlibsettings.lazymatching: try one more LZ77 matching
+state.encoder.zlibsettings.custom_...: use custom deflate function
+state.encoder.auto_convert: choose optimal PNG color type, if 0 uses info_png
+state.encoder.filter_palette_zero: PNG filter strategy for palette
+state.encoder.filter_strategy: PNG filter strategy to encode with
+state.encoder.force_palette: add palette even if not encoding to one
+state.encoder.add_id: add LodePNG identifier and version as a text chunk
+state.encoder.text_compression: use compressed text chunks for metadata
+state.info_raw.colortype: color type of raw input image you provide
+state.info_raw.bitdepth: bit depth of raw input image you provide
+state.info_raw: more color settings, see struct LodePNGColorMode
+state.info_png.color.colortype: desired color type if auto_convert is false
+state.info_png.color.bitdepth: desired bit depth if auto_convert is false
+state.info_png.color....: more color settings, see struct LodePNGColorMode
+state.info_png....: more PNG related settings, see struct LodePNGInfo
+
+
+12. changes
+-----------
+
+The version number of LodePNG is the date of the change given in the format
+yyyymmdd.
+
+Some changes aren't backwards compatible. Those are indicated with a (!)
+symbol.
+
+*) 09 apr 2016: Fixed colorkey usage detection, and better file loading (within
+   the limits of pure C90).
+*) 08 dec 2015: Made load_file function return error if file can't be opened.
+*) 24 okt 2015: Bugfix with decoding to palette output.
+*) 18 apr 2015: Boundary PM instead of just package-merge for faster encoding.
+*) 23 aug 2014: Reduced needless memory usage of decoder.
+*) 28 jun 2014: Removed fix_png setting, always support palette OOB for
+    simplicity. Made ColorProfile public.
+*) 09 jun 2014: Faster encoder by fixing hash bug and more zeros optimization.
+*) 22 dec 2013: Power of two windowsize required for optimization.
+*) 15 apr 2013: Fixed bug with LAC_ALPHA and color key.
+*) 25 mar 2013: Added an optional feature to ignore some PNG errors (fix_png).
+*) 11 mar 2013 (!): Bugfix with custom free. Changed from "my" to "lodepng_"
+    prefix for the custom allocators and made it possible with a new #define to
+    use custom ones in your project without needing to change lodepng's code.
+*) 28 jan 2013: Bugfix with color key.
+*) 27 okt 2012: Tweaks in text chunk keyword length error handling.
+*) 8 okt 2012 (!): Added new filter strategy (entropy) and new auto color mode.
+    (no palette). Better deflate tree encoding. New compression tweak settings.
+    Faster color conversions while decoding. Some internal cleanups.
+*) 23 sep 2012: Reduced warnings in Visual Studio a little bit.
+*) 1 sep 2012 (!): Removed #define's for giving custom (de)compression functions
+    and made it work with function pointers instead.
+*) 23 jun 2012: Added more filter strategies. Made it easier to use custom alloc
+    and free functions and toggle #defines from compiler flags. Small fixes.
+*) 6 may 2012 (!): Made plugging in custom zlib/deflate functions more flexible.
+*) 22 apr 2012 (!): Made interface more consistent, renaming a lot. Removed
+    redundant C++ codec classes. Reduced amount of structs. Everything changed,
+    but it is cleaner now imho and functionality remains the same. Also fixed
+    several bugs and shrunk the implementation code. Made new samples.
+*) 6 nov 2011 (!): By default, the encoder now automatically chooses the best
+    PNG color model and bit depth, based on the amount and type of colors of the
+    raw image. For this, autoLeaveOutAlphaChannel replaced by auto_choose_color.
+*) 9 okt 2011: simpler hash chain implementation for the encoder.
+*) 8 sep 2011: lz77 encoder lazy matching instead of greedy matching.
+*) 23 aug 2011: tweaked the zlib compression parameters after benchmarking.
+    A bug with the PNG filtertype heuristic was fixed, so that it chooses much
+    better ones (it's quite significant). A setting to do an experimental, slow,
+    brute force search for PNG filter types is added.
+*) 17 aug 2011 (!): changed some C zlib related function names.
+*) 16 aug 2011: made the code less wide (max 120 characters per line).
+*) 17 apr 2011: code cleanup. Bugfixes. Convert low to 16-bit per sample colors.
+*) 21 feb 2011: fixed compiling for C90. Fixed compiling with sections disabled.
+*) 11 dec 2010: encoding is made faster, based on suggestion by Peter Eastman
+    to optimize long sequences of zeros.
+*) 13 nov 2010: added LodePNG_InfoColor_hasPaletteAlpha and
+    LodePNG_InfoColor_canHaveAlpha functions for convenience.
+*) 7 nov 2010: added LodePNG_error_text function to get error code description.
+*) 30 okt 2010: made decoding slightly faster
+*) 26 okt 2010: (!) changed some C function and struct names (more consistent).
+     Reorganized the documentation and the declaration order in the header.
+*) 08 aug 2010: only changed some comments and external samples.
+*) 05 jul 2010: fixed bug thanks to warnings in the new gcc version.
+*) 14 mar 2010: fixed bug where too much memory was allocated for char buffers.
+*) 02 sep 2008: fixed bug where it could create empty tree that linux apps could
+    read by ignoring the problem but windows apps couldn't.
+*) 06 jun 2008: added more error checks for out of memory cases.
+*) 26 apr 2008: added a few more checks here and there to ensure more safety.
+*) 06 mar 2008: crash with encoding of strings fixed
+*) 02 feb 2008: support for international text chunks added (iTXt)
+*) 23 jan 2008: small cleanups, and #defines to divide code in sections
+*) 20 jan 2008: support for unknown chunks allowing using LodePNG for an editor.
+*) 18 jan 2008: support for tIME and pHYs chunks added to encoder and decoder.
+*) 17 jan 2008: ability to encode and decode compressed zTXt chunks added
+    Also various fixes, such as in the deflate and the padding bits code.
+*) 13 jan 2008: Added ability to encode Adam7-interlaced images. Improved
+    filtering code of encoder.
+*) 07 jan 2008: (!) changed LodePNG to use ISO C90 instead of C++. A
+    C++ wrapper around this provides an interface almost identical to before.
+    Having LodePNG be pure ISO C90 makes it more portable. The C and C++ code
+    are together in these files but it works both for C and C++ compilers.
+*) 29 dec 2007: (!) changed most integer types to unsigned int + other tweaks
+*) 30 aug 2007: bug fixed which makes this Borland C++ compatible
+*) 09 aug 2007: some VS2005 warnings removed again
+*) 21 jul 2007: deflate code placed in new namespace separate from zlib code
+*) 08 jun 2007: fixed bug with 2- and 4-bit color, and small interlaced images
+*) 04 jun 2007: improved support for Visual Studio 2005: crash with accessing
+    invalid std::vector element [0] fixed, and level 3 and 4 warnings removed
+*) 02 jun 2007: made the encoder add a tag with version by default
+*) 27 may 2007: zlib and png code separated (but still in the same file),
+    simple encoder/decoder functions added for more simple usage cases
+*) 19 may 2007: minor fixes, some code cleaning, new error added (error 69),
+    moved some examples from here to lodepng_examples.cpp
+*) 12 may 2007: palette decoding bug fixed
+*) 24 apr 2007: changed the license from BSD to the zlib license
+*) 11 mar 2007: very simple addition: ability to encode bKGD chunks.
+*) 04 mar 2007: (!) tEXt chunk related fixes, and support for encoding
+    palettized PNG images. Plus little interface change with palette and texts.
+*) 03 mar 2007: Made it encode dynamic Huffman shorter with repeat codes.
+    Fixed a bug where the end code of a block had length 0 in the Huffman tree.
+*) 26 feb 2007: Huffman compression with dynamic trees (BTYPE 2) now implemented
+    and supported by the encoder, resulting in smaller PNGs at the output.
+*) 27 jan 2007: Made the Adler-32 test faster so that a timewaste is gone.
+*) 24 jan 2007: gave encoder an error interface. Added color conversion from any
+    greyscale type to 8-bit greyscale with or without alpha.
+*) 21 jan 2007: (!) Totally changed the interface. It allows more color types
+    to convert to and is more uniform. See the manual for how it works now.
+*) 07 jan 2007: Some cleanup & fixes, and a few changes over the last days:
+    encode/decode custom tEXt chunks, separate classes for zlib & deflate, and
+    at last made the decoder give errors for incorrect Adler32 or Crc.
+*) 01 jan 2007: Fixed bug with encoding PNGs with less than 8 bits per channel.
+*) 29 dec 2006: Added support for encoding images without alpha channel, and
+    cleaned out code as well as making certain parts faster.
+*) 28 dec 2006: Added "Settings" to the encoder.
+*) 26 dec 2006: The encoder now does LZ77 encoding and produces much smaller files now.
+    Removed some code duplication in the decoder. Fixed little bug in an example.
+*) 09 dec 2006: (!) Placed output parameters of public functions as first parameter.
+    Fixed a bug of the decoder with 16-bit per color.
+*) 15 okt 2006: Changed documentation structure
+*) 09 okt 2006: Encoder class added. It encodes a valid PNG image from the
+    given image buffer, however for now it's not compressed.
+*) 08 sep 2006: (!) Changed to interface with a Decoder class
+*) 30 jul 2006: (!) LodePNG_InfoPng , width and height are now retrieved in different
+    way. Renamed decodePNG to decodePNGGeneric.
+*) 29 jul 2006: (!) Changed the interface: image info is now returned as a
+    struct of type LodePNG::LodePNG_Info, instead of a vector, which was a bit clumsy.
+*) 28 jul 2006: Cleaned the code and added new error checks.
+    Corrected terminology "deflate" into "inflate".
+*) 23 jun 2006: Added SDL example in the documentation in the header, this
+    example allows easy debugging by displaying the PNG and its transparency.
+*) 22 jun 2006: (!) Changed way to obtain error value. Added
+    loadFile function for convenience. Made decodePNG32 faster.
+*) 21 jun 2006: (!) Changed type of info vector to unsigned.
+    Changed position of palette in info vector. Fixed an important bug that
+    happened on PNGs with an uncompressed block.
+*) 16 jun 2006: Internally changed unsigned into unsigned where
+    needed, and performed some optimizations.
+*) 07 jun 2006: (!) Renamed functions to decodePNG and placed them
+    in LodePNG namespace. Changed the order of the parameters. Rewrote the
+    documentation in the header. Renamed files to lodepng.cpp and lodepng.h
+*) 22 apr 2006: Optimized and improved some code
+*) 07 sep 2005: (!) Changed to std::vector interface
+*) 12 aug 2005: Initial release (C++, decoder only)
+
+
+13. contact information
+-----------------------
+
+Feel free to contact me with suggestions, problems, comments, ... concerning
+LodePNG. If you encounter a PNG image that doesn't work properly with this
+decoder, feel free to send it and I'll use it to find and fix the problem.
+
+My email address is (puzzle the account and domain together with an @ symbol):
+Domain: gmail dot com.
+Account: lode dot vandevenne.
+
+
+Copyright (c) 2005-2016 Lode Vandevenne
+*/
diff --git a/examples/graph/stereo/msvs/stereo.sln b/examples/graph/stereo/msvs/stereo.sln
new file mode 100644
index 0000000..2627b9b
--- /dev/null
+++ b/examples/graph/stereo/msvs/stereo.sln
@@ -0,0 +1,26 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stereo", "stereo.vcxproj", "{9C777D75-70FF-4C24-AB74-EBCDF3328AB9}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{9C777D75-70FF-4C24-AB74-EBCDF3328AB9}.Debug|Win32.ActiveCfg = Debug|Win32
+		{9C777D75-70FF-4C24-AB74-EBCDF3328AB9}.Debug|Win32.Build.0 = Debug|Win32
+		{9C777D75-70FF-4C24-AB74-EBCDF3328AB9}.Debug|x64.ActiveCfg = Debug|x64
+		{9C777D75-70FF-4C24-AB74-EBCDF3328AB9}.Debug|x64.Build.0 = Debug|x64
+		{9C777D75-70FF-4C24-AB74-EBCDF3328AB9}.Release|Win32.ActiveCfg = Release|Win32
+		{9C777D75-70FF-4C24-AB74-EBCDF3328AB9}.Release|Win32.Build.0 = Release|Win32
+		{9C777D75-70FF-4C24-AB74-EBCDF3328AB9}.Release|x64.ActiveCfg = Release|x64
+		{9C777D75-70FF-4C24-AB74-EBCDF3328AB9}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/graph/stereo/msvs/stereo.vcxproj b/examples/graph/stereo/msvs/stereo.vcxproj
new file mode 100644
index 0000000..cb724ce
--- /dev/null
+++ b/examples/graph/stereo/msvs/stereo.vcxproj
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{9C777D75-70FF-4C24-AB74-EBCDF3328AB9}</ProjectGuid>
+    <RootNamespace>stereo</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v110</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v110</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v110</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v110</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\..\include;$(INTELOCLSDKROOT)include;$(TBBROOT)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>_MBCS;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(INTELOCLSDKROOT)lib\x86;$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>OpenCL.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\..\include;$(INTELOCLSDKROOT)include;$(TBBROOT)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>_MBCS;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(INTELOCLSDKROOT)lib\x64;$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>OpenCL.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\..\include;$(INTELOCLSDKROOT)include;$(TBBROOT)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>_MBCS;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalLibraryDirectories>$(INTELOCLSDKROOT)lib\x86;$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>OpenCL.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\..\include;$(INTELOCLSDKROOT)include;$(TBBROOT)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>_MBCS;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalLibraryDirectories>$(INTELOCLSDKROOT)lib\x64;$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>OpenCL.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <None Include="..\imageEffects.cl" />
+    <None Include="..\readme.html" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\lodepng.cpp" />
+    <ClCompile Include="..\stereo.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\lodepng.h" />
+    <ClInclude Include="..\utils.h" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/examples/graph/stereo/readme.html b/examples/graph/stereo/readme.html
new file mode 100644
index 0000000..3fb7031
--- /dev/null
+++ b/examples/graph/stereo/readme.html
@@ -0,0 +1,445 @@
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
+
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
+
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Stereo sample</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Stereo sample</h1>
+	</div>
+	
+	<p>
+		The Stereo example is an implementation of the algorithm that applies stereoscopic 3D effect on two input images and achieved by means of encoding each eye's image using filters of different colors: red and blue -
+		<a href="http://en.wikipedia.org/wiki/Anaglyph_3D"><i>Anaglyph effect</i></a>.
+	<br><br>
+		The example uses the flow graph interface and can be executed both on CPU and GPU for image processing.
+		The output of this application is a PNG image with the anaglyph effect applied.
+	<br><br>
+		<i>
+			This example includes software developed by Lode Vandevenne. See
+			<a href="#copyright">here</a> for copyright information.
+		</i>
+	<br>
+		It exemplifies the opencl_node usage in the flow graph interface in context of creating a stereo image from two input images.
+	<br><br>
+		This example uses C++11 lambda expressions. Specifying a compiler option such as -std=c++11 or similar might be necessary in order to build the example.
+		For more information please refer to the documentation for the compiler you use.
+	</p>
+
+	<div class="changes">
+		<div class="h3-alike">System Requirements</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				For the most up to date system requirements, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
+			</p>
+			<p>
+				Additionally, you have to install OpenCL™ version 1.2 or higher in order to run this example. See the <a href="https://software.intel.com/en-us/articles/opencl-drivers">OpenCL™ Drivers and Runtimes for Intel® Architecture</a>.
+			</p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Files</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="stereo.cpp">stereo.cpp</a>
+				<dd>The implementation of stereo image creation algorithm based on the flow graph interface.
+				<dt><a href="lodepng.cpp">lodepng.cpp</a>
+				<dd>Library for reading and writing png images.
+				<dt><a href="lodepng.h">lodepng.h</a>
+				<dd>Public header file for the lodepng library.
+				<dt><a href="utils.h">utils.h</a>
+				<dd>Support functions for this example.
+				<dt><a href="imageEffects.cl">imageEffects.cl</a>
+				<dd>OpenCL kernel file with image effects algorithms.
+				<dt><a href="Makefile">Makefile</a>
+				<dd>Makefile for building the example.
+			</dl>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="msvs/">msvs</a> 
+				<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).
+				<dt><a href="xcode/">xcode</a>
+				<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).
+			</dl>
+			<p>For information about the minimum supported version of IDE, see <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a></p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Build instructions</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>General build directions can be found <a href="../../index.html">here</a>.</p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Usage</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><tt>stereo <i>-h</i></tt>
+				<dd>Prints the help for command line options
+				<dt><tt>stereo [<i>-v</i>] [<i>-alg</i>=value] [<i>first_filename</i>] [<i>second_filename</i>]</tt>
+				<dd><i>-v</i> print diagnostic output to screen<br>
+					<i>-alg</i> name of the used pipeline realization - can be host, target (default) or host_target<br>
+					<i>first_filename</i> first input file name<br>
+					<i>second_filename</i> second input file name<br>
+			</dl>
+		</div>
+	</div>
+	
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<a name="copyright"></a>
+	<div class="changes">
+	<div class="h3-alike">Legal Information</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+
+			<p>
+				LodePNG version 20160409
+				Copyright (c) 2005-2016 Lode Vandevenne
+			</p>
+			<p>
+				This software is provided 'as-is', without any express or implied
+				warranty. In no event will the authors be held liable for any damages
+				arising from the use of this software.
+			<br>
+				Permission is granted to anyone to use this software for any purpose,
+				including commercial applications, and to alter it and redistribute it
+				freely, subject to the following restrictions:
+				<ol>
+					<li>The origin of this software must not be misrepresented; you must not
+						claim that you wrote the original software. If you use this software
+						in a product, an acknowledgment in the product documentation would be
+						appreciated but is not required.
+					<li>Altered source versions must be plainly marked as such, and must not be
+						misrepresented as being the original software.
+					<li>This notice may not be removed or altered from any source
+					distribution.
+				</ol>
+			</p>
+		</div>
+	</div>	
+	
+</body>
+</html>
diff --git a/examples/graph/stereo/stereo.cpp b/examples/graph/stereo/stereo.cpp
new file mode 100644
index 0000000..5bf5acb
--- /dev/null
+++ b/examples/graph/stereo/stereo.cpp
@@ -0,0 +1,435 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+#define TBB_PREVIEW_FLOW_GRAPH_NODES 1
+#define TBB_PREVIEW_FLOW_GRAPH_FEATURES 1
+
+#include "tbb/tbb_config.h"
+#include "../../common/utility/utility.h"
+
+#if __TBB_PREVIEW_OPENCL_NODE && __TBB_CPP11_LAMBDAS_PRESENT
+
+#if _MSC_VER
+// suppress warning C4503: decorated name length exceeded, name was truncated 
+#pragma warning(disable : 4503)
+#endif
+
+#include <iostream>
+
+#include "tbb/flow_graph.h"
+#include "tbb/flow_graph_opencl_node.h"
+#include "tbb/tick_count.h"
+
+#include "utils.h"
+
+static const int redChannelOffset = 0;
+static const int greenChannelOffset = 1;
+static const int blueChannelOffset = 2;
+static const int channelsPerPixel = 4;
+static const int channelIncreaseValue = 10;
+
+void applyLeftImageEffect(utils::image_buffer& image) {
+    const int heighBase = channelsPerPixel * image.width;
+    std::vector<unsigned char>& buffer = *image.buffer;
+
+    // Increase the Red channel of left image by 10
+    for (unsigned int y = 0; y < image.height; y++) {
+        const int heightOffset = heighBase * y;
+        for (unsigned int x = 0; x < image.width; x++) {
+            int pixelOffset = heightOffset + channelsPerPixel * x + redChannelOffset;
+            buffer[pixelOffset] += channelIncreaseValue;
+        }
+    }
+}
+
+void applyRightImageEffect(utils::image_buffer& image) {
+    const int heighBase = channelsPerPixel * image.width;
+    std::vector<unsigned char>& buffer = *image.buffer;
+
+    // Increase the Blue channel of left image by 10
+    for (unsigned int y = 0; y < image.height; y++) {
+        const int heightOffset = heighBase * y;
+        for (unsigned int x = 0; x < image.width; x++) {
+            const int pixelOffset = heightOffset + channelsPerPixel * x + blueChannelOffset;
+            buffer[pixelOffset] += channelIncreaseValue;
+        }
+    }
+}
+
+// This function merges to image buffers into the first buffer (leftImageBuffer as a destination)
+void mergeImageBuffers(utils::image_buffer& leftImage, const utils::image_buffer& rightImage) {
+    const int heighBase = channelsPerPixel * leftImage.width;
+    std::vector<unsigned char>& leftImageBuffer = *leftImage.buffer;
+    std::vector<unsigned char>& rightImageBuffer = *rightImage.buffer;
+
+    // Apply stereoscopic merge using algorithm: R: left image, G: left and right images (middle value), B: right image
+    for (unsigned int y = 0; y < leftImage.height; y++) {
+        const int heightOffset = heighBase * y;
+        for (unsigned int x = 0; x < leftImage.width; x++) {
+            const int pixelOffset = heightOffset + channelsPerPixel * x;
+            const int greenChannelIndex = pixelOffset + greenChannelOffset;
+            const int blueChannelIndex = pixelOffset + blueChannelOffset;
+            const int middleGreenChannel = (leftImageBuffer[greenChannelIndex] + rightImageBuffer[greenChannelIndex]);
+            leftImageBuffer[greenChannelIndex] = middleGreenChannel / 2;
+            leftImageBuffer[blueChannelIndex] = rightImageBuffer[blueChannelIndex];
+        }
+    }
+}
+
+void fillOpenclBuffer(tbb::flow::opencl_buffer<cl_uchar>& openclBuffer, const std::vector<unsigned char>& sourceBuffer) {
+    std::copy(sourceBuffer.begin(), sourceBuffer.end(), openclBuffer.begin());
+}
+
+void chooseTargetDevice(tbb::flow::opencl_graph& g) {
+    // Set your GPU device if available to execute kernel on
+    const tbb::flow::opencl_device_list &devices = g.available_devices();
+    tbb::flow::opencl_device_list::const_iterator it = std::find_if(
+        devices.cbegin(), devices.cend(),
+        [](const tbb::flow::opencl_device &d) {
+            cl_device_type type;
+            d.info(CL_DEVICE_TYPE, type);
+            return CL_DEVICE_TYPE_GPU == type;
+        });
+
+    if (it == devices.cend()) {
+        std::cout << "Info: could not find any GPU devices. Choosing the first available device (default behaviour)." << std::endl;
+    } else {
+        // Init factory with GPU device
+        g.opencl_factory().init({ *it });
+    }
+}
+
+
+// Image processing function that is executed on CPU only
+void hostFunction(const std::string& firstFile, const std::string& secondFile, const std::string& outputFile) {
+    using namespace tbb::flow;
+    typedef tuple< utils::image_buffer, utils::image_buffer > MergeImagesTuple;
+
+    graph g;
+
+    function_node< std::string, utils::image_buffer > fileReaderOne(g, serial, [](const std::string& fileToRead) -> utils::image_buffer {
+        return utils::getOrGenerateImage(fileToRead);
+    });
+
+    function_node< std::string, utils::image_buffer > fileReaderTwo = fileReaderOne;
+
+    function_node< utils::image_buffer, utils::image_buffer > leftImageEffect(g, unlimited, [](utils::image_buffer image) -> utils::image_buffer {
+        applyLeftImageEffect(image);
+        return image;
+    });
+
+    function_node< utils::image_buffer, utils::image_buffer > rightImageEffect(g, unlimited, [](utils::image_buffer image) -> utils::image_buffer {
+        applyRightImageEffect(image);
+        return image;
+    });
+
+    join_node< tuple< utils::image_buffer, utils::image_buffer > > joinNode(g);
+
+    function_node< MergeImagesTuple, utils::image_buffer > mergeImages(g, unlimited, [](const MergeImagesTuple& bufferTuple) -> utils::image_buffer {
+        // Two input images from tupple are merged into the first image,
+        utils::image_buffer leftImageBuffer = std::get<0>(bufferTuple);
+        utils::image_buffer rightImageBuffer = std::get<1>(bufferTuple);
+
+        mergeImageBuffers(leftImageBuffer, rightImageBuffer);
+
+        return leftImageBuffer;
+    });
+
+    function_node< utils::image_buffer > outputWriter(g, unlimited, [&outputFile](const utils::image_buffer& image) {
+        utils::writePNGImage(image, outputFile);
+    });
+
+    // Read left image
+    make_edge(fileReaderOne, leftImageEffect);
+
+    // Read right image
+    make_edge(fileReaderTwo, rightImageEffect);
+
+    // Process left image
+    make_edge(leftImageEffect, tbb::flow::input_port<0>(joinNode));
+
+    // Process right image
+    make_edge(rightImageEffect, tbb::flow::input_port<1>(joinNode));
+
+    // Merge images
+    make_edge(joinNode, mergeImages);
+    make_edge(mergeImages, outputWriter);
+
+    // Start graph image processing
+    fileReaderOne.try_put(firstFile);
+    fileReaderTwo.try_put(secondFile);
+
+    g.wait_for_all();
+}
+
+
+// Image processing function using OpenCL
+/** Reading and writing image to file is executed on CPU, while all buffers manipulation are executed on GPU */
+void openclFunctionGPU(const std::string& firstFile, const std::string& secondFile, const std::string& outputFile) {
+    using namespace tbb::flow;
+    typedef opencl_buffer<cl_uchar> OpenclImageBuffer;
+    typedef std::array<unsigned int, 2> NDRange;
+    typedef tuple< OpenclImageBuffer, cl_uint, NDRange > OpenclImageTuple;
+    typedef tuple< OpenclImageBuffer, OpenclImageBuffer, cl_uint, NDRange > OpenclImagesMergeTuple;
+    typedef tuple< OpenclImageBuffer, NDRange > WriteImageBufferTuple;
+
+    opencl_graph g;
+
+    chooseTargetDevice(g);
+
+    function_node< std::string, OpenclImageTuple > fileReaderOne(g, serial, [&g](const std::string& fileToRead) -> OpenclImageTuple {
+        utils::image_buffer src = utils::getOrGenerateImage(fileToRead);
+
+        // Create and initialize opencl_buffer in order to pass it to kernel
+        OpenclImageBuffer oclImage(g, src.buffer->size());
+        fillOpenclBuffer(oclImage, *src.buffer);
+
+        NDRange rangeList = { src.width, src.height };
+        return std::make_tuple(oclImage, src.width, rangeList);
+    });
+
+    function_node< std::string, OpenclImageTuple > fileReaderTwo = fileReaderOne;
+
+    split_node< OpenclImageTuple > splitArgumentsLeftNode(g);
+
+    // Kernel should be in the current folder
+    opencl_program<> program(g, "imageEffects.cl");
+
+    opencl_node< OpenclImageTuple > leftImageEffect(g, program.get_kernel("applyLeftImageEffect"));
+
+    split_node< OpenclImageTuple > splitArgumentsRightNode(g);
+
+    opencl_node< OpenclImageTuple > rightImageEffect(g, program.get_kernel("applyRightImageEffect"));
+
+    opencl_node< OpenclImagesMergeTuple > mergeImages(g, program.get_kernel("mergeImages"));
+
+    join_node< WriteImageBufferTuple > joinTupleNode(g);
+
+    function_node< WriteImageBufferTuple > outputWriter(g, unlimited, [&outputFile](const WriteImageBufferTuple& image) {
+        // The result image have to be copied in order to be changed,
+        // the second parameter - image size, can be taken by const reference
+        OpenclImageBuffer imageBuffer = std::get<0>(image);
+        const NDRange& imageSize = std::get<1>(image);
+        unsigned int width = imageSize[0];
+        unsigned int height = imageSize[1]; 
+
+        utils::writePNGImage(imageBuffer.data(), width, height, outputFile);
+    });
+
+    // Process left image
+    make_edge(fileReaderOne, splitArgumentsLeftNode);
+    make_edge(output_port<0>(splitArgumentsLeftNode), input_port<0>(leftImageEffect));
+    make_edge(output_port<1>(splitArgumentsLeftNode), input_port<1>(leftImageEffect));
+
+    // Pass OpenCL NDRange via input port because it depends on input data
+    make_edge(output_port<2>(splitArgumentsLeftNode), input_port<2>(leftImageEffect));
+
+    // Process right image
+    make_edge(fileReaderTwo, splitArgumentsRightNode);
+    make_edge(output_port<0>(splitArgumentsRightNode), input_port<0>(rightImageEffect));
+    make_edge(output_port<1>(splitArgumentsRightNode), input_port<1>(rightImageEffect));
+
+    // Pass OpenCL NDRange via input port because it depends on input data
+    make_edge(output_port<2>(splitArgumentsRightNode), input_port<2>(rightImageEffect));
+
+    // Merge images
+    make_edge(output_port<0>(leftImageEffect), input_port<0>(mergeImages));
+    make_edge(output_port<0>(rightImageEffect), input_port<1>(mergeImages));
+    make_edge(output_port<1>(leftImageEffect), input_port<2>(mergeImages));
+
+    // Set OpenCL NDRange here (because the values may vary, depending on input data)
+    make_edge(output_port<2>(leftImageEffect), input_port<3>(mergeImages));
+
+    // Write image to PNG
+    make_edge(output_port<0>(mergeImages), input_port<0>(joinTupleNode));
+    make_edge(output_port<3>(mergeImages), input_port<1>(joinTupleNode));
+    make_edge(joinTupleNode, outputWriter);
+
+    // Define where to get ndrange and kernel arguments
+    leftImageEffect.set_args(port_ref<0, 1>());
+    leftImageEffect.set_range(port_ref<2>());
+
+    rightImageEffect.set_args(port_ref<0, 1>());
+    rightImageEffect.set_range(port_ref<2>());
+
+    mergeImages.set_args(port_ref<0, 2>());
+    mergeImages.set_range(port_ref<3>());
+
+    // Start graph image processing pipeline
+    fileReaderOne.try_put(firstFile);
+    fileReaderTwo.try_put(secondFile);
+
+    g.wait_for_all();
+}
+
+
+// Second image processing function using OpenCL
+/** Reading and writing image to file is executed on CPU, while some buffers manipulation are executed on GPU
+    and others runs on CPU device. This case should have the best performance among others. */
+void openclFunctionGPUPlusCPU(const std::string& firstFile, const std::string& secondFile, const std::string& outputFile) {
+    using namespace tbb::flow;
+    typedef opencl_buffer<cl_uchar> OpenclImageBuffer;
+    typedef std::array<unsigned int, 2> NDRange;
+    typedef tuple< OpenclImageBuffer, cl_uint, NDRange > OpenclImageTuple;
+    typedef tuple< OpenclImageBuffer, OpenclImageBuffer, cl_uint, NDRange > OpenclImagesMergeTuple;
+    typedef tuple< OpenclImageBuffer, NDRange > WriteImageBufferTuple;
+
+    opencl_graph g;
+
+    chooseTargetDevice(g);
+
+    function_node< std::string, OpenclImageTuple > fileReaderOne(g, serial, [&g](const std::string& fileToRead) -> OpenclImageTuple {
+        utils::image_buffer src = utils::getOrGenerateImage(fileToRead);
+
+        // Create and initialize opencl_buffer in order to pass it to mergeImages kernel
+        OpenclImageBuffer oclImage(g, src.buffer->size());
+        fillOpenclBuffer(oclImage, *src.buffer);
+
+        NDRange rangeList = { src.width, src.height };
+        return std::make_tuple(oclImage, src.width, rangeList);
+    });
+
+    function_node< std::string, utils::image_buffer > fileReaderTwo(g, serial, [](const std::string& fileToRead) -> utils::image_buffer {
+        return utils::readPNGImage(fileToRead);
+    });
+
+    split_node< OpenclImageTuple > splitArgumentsLeftNode(g);
+
+    // Kernel should be in the current folder
+    opencl_program<> program(g, "imageEffects.cl");
+
+    opencl_node< OpenclImageTuple > leftImageEffect(g, program.get_kernel("applyLeftImageEffect"));
+
+    function_node< utils::image_buffer, OpenclImageBuffer > rightImageEffect(g, unlimited, [&g](utils::image_buffer image) -> OpenclImageBuffer {
+        applyRightImageEffect(image);
+
+        // Create and initialize opencl_buffer in order to pass it to kernel
+        OpenclImageBuffer oclImage(g, image.buffer->size());
+        fillOpenclBuffer(oclImage, *image.buffer);
+
+        return oclImage;
+    });
+
+    opencl_node< OpenclImagesMergeTuple > mergeImages(g, program.get_kernel("mergeImages"));
+
+    join_node< WriteImageBufferTuple > joinTupleNode(g);
+
+    function_node< WriteImageBufferTuple > outputWriter(g, unlimited, [&outputFile](const WriteImageBufferTuple& image) {
+        // The result image have to be copied in order to be changed,
+        // the second parameter - image size, can be taken by const reference
+        OpenclImageBuffer imageBuffer = std::get<0>(image);
+        const NDRange& imageSize = std::get<1>(image);
+        unsigned int width = imageSize[0];
+        unsigned int height = imageSize[1];
+
+        utils::writePNGImage(imageBuffer.data(), width, height, outputFile);
+    });
+
+    // Process left image on GPU
+    make_edge(fileReaderOne, splitArgumentsLeftNode);
+    make_edge(output_port<0>(splitArgumentsLeftNode), input_port<0>(leftImageEffect));
+    make_edge(output_port<1>(splitArgumentsLeftNode), input_port<1>(leftImageEffect));
+
+    // Pass OpenCL NDRange via input port because it depends on input data
+    make_edge(output_port<2>(splitArgumentsLeftNode), input_port<2>(leftImageEffect));
+
+    // Process right image on CPU
+    make_edge(fileReaderTwo, rightImageEffect);
+
+    // Merge images on GPU
+    make_edge(output_port<0>(leftImageEffect), input_port<0>(mergeImages));
+    make_edge(rightImageEffect, input_port<1>(mergeImages));
+    make_edge(output_port<1>(leftImageEffect), input_port<2>(mergeImages));
+
+    // Pass OpenCL NDRange via input port because it depends on input data
+    make_edge(output_port<2>(leftImageEffect), input_port<3>(mergeImages));
+
+    // Write image to PNG
+    make_edge(output_port<0>(mergeImages), input_port<0>(joinTupleNode));
+    make_edge(output_port<3>(mergeImages), input_port<1>(joinTupleNode));
+    make_edge(joinTupleNode, outputWriter);
+
+    // Define where to get ndrange and kernel arguments
+    leftImageEffect.set_args(port_ref<0, 1>());
+    leftImageEffect.set_range(port_ref<2>());
+
+    mergeImages.set_args(port_ref<0, 2>());
+    mergeImages.set_range(port_ref<3>());
+
+    // Start graph image processing pipeline
+    fileReaderOne.try_put(firstFile);
+    fileReaderTwo.try_put(secondFile);
+
+    g.wait_for_all();
+}
+
+
+int main(int argc, char* argv[]) {
+    try {
+
+        tbb::tick_count mainStartTime = tbb::tick_count::now();
+
+        bool verbose = false;
+        std::string algVersion;
+
+        std::string inputFileFirst;
+        std::string inputFileSecond;
+        std::string outputFile = "output.png";
+
+        utility::parse_cli_arguments(argc, argv,
+            utility::cli_argument_pack()
+            //"-h" option for displaying help
+            .arg(verbose, "-v", "verbose mode")
+            .arg(algVersion, "-alg", "name of the used pipeline realisation - can be host, target (default) or host_target")
+            .positional_arg(inputFileFirst, "first_filename", "first input file name")
+            .positional_arg(inputFileSecond, "second_filename", "second input file name")
+        );
+
+        if (!utils::isBothImagesExists(inputFileFirst, inputFileSecond)) {
+            std::cout << "Info: one or both images does not exists or empty. Input images will be generated instead." << std::endl;
+            inputFileFirst.clear();
+            inputFileSecond.clear();
+        } else {
+            std::cout << "First input file name: " << inputFileFirst << std::endl;
+            std::cout << "Second input file name: " << inputFileSecond << std::endl;
+        }
+
+        if (algVersion.empty() || algVersion == "target") {
+            openclFunctionGPU(inputFileFirst, inputFileSecond, outputFile);
+        } else if (algVersion == "host_target") {
+            openclFunctionGPUPlusCPU(inputFileFirst, inputFileSecond, outputFile);
+        } else if (algVersion == "host") {
+            hostFunction(inputFileFirst, inputFileSecond, outputFile);
+        }
+
+        utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds());
+
+        return 0;
+    } catch (std::exception& e) {
+        std::cerr << "Error occurred :\"" << e.what() << "\"\n";
+        return -1;
+    }
+}
+#else
+int main() {
+    utility::report_skipped();
+    return 0;
+}
+#endif /* __TBB_PREVIEW_OPENCL_NODE && __TBB_CPP11_LAMBDAS_PRESENT */
diff --git a/examples/graph/stereo/utils.h b/examples/graph/stereo/utils.h
new file mode 100644
index 0000000..ae199aa
--- /dev/null
+++ b/examples/graph/stereo/utils.h
@@ -0,0 +1,104 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+#include <iostream>
+#include <string>
+
+#include "lodepng.h"
+
+namespace utils {
+
+    struct image_buffer {
+        unsigned int width, height;
+        std::shared_ptr< std::vector<unsigned char> > buffer; // smart pointer to the vector of raw pixels in RGBA format, 4 bytes per pixel
+    };
+
+    image_buffer readPNGImage(const std::string& imageName) {
+        image_buffer image;
+        image.buffer = std::make_shared< std::vector<unsigned char> >();
+
+        unsigned int error = lodepng::decode(*image.buffer, image.width, image.height, imageName.c_str());
+
+        if (error) {
+            std::string exceptionMessage = "decoder error: " + std::string(lodepng_error_text(error));
+            throw std::runtime_error(exceptionMessage);
+        }
+        return image;
+    }
+
+    void readPNGImage(unsigned char* imageBuffer, unsigned int& width, unsigned int& height, const char* imageName) {
+        unsigned int error = lodepng_decode32_file(&imageBuffer, &width, &height, imageName);
+
+        if (error) {
+            std::string exceptionMessage = "decoder error: " + std::string(lodepng_error_text(error));
+            throw std::runtime_error(exceptionMessage);
+        }
+    }
+
+    void writePNGImage(const image_buffer& image, const std::string& outputFile) {
+        unsigned int error = lodepng::encode(outputFile, *image.buffer, image.width, image.height);
+        if (error) {
+            std::string exceptionMessage = "encoder error: " + std::string(lodepng_error_text(error));
+            throw std::runtime_error(exceptionMessage);
+        }
+    }
+
+    void writePNGImage(unsigned char* imageBuffer, unsigned int& width, unsigned int& height, const std::string& outputFile) {
+        unsigned int error = lodepng::encode(outputFile, imageBuffer, width, height);
+        if (error) {
+            std::string exceptionMessage = "encoder error: " + std::string(lodepng_error_text(error));
+            throw std::runtime_error(exceptionMessage);
+        }
+    }
+
+    image_buffer generatePNGImage() {
+        image_buffer image;
+        image.width = 1024;
+        image.height = 1024;
+
+        image.buffer = std::make_shared< std::vector<unsigned char> >(image.width * image.height * 4);
+        std::vector<unsigned char>& buffer = *image.buffer;
+
+        const int widthOffset = 4 * image.width;
+        for (unsigned y = 0; y < image.height; y++) {
+            for (unsigned x = 0; x < image.width; x++) {
+                const int pixelOffset = widthOffset * y + 4 * x;
+                buffer[pixelOffset] = 200 * !(x & y);
+                buffer[pixelOffset + 1] = x ^ y;
+                buffer[pixelOffset + 2] = x | y;
+                buffer[pixelOffset + 3] = 255;
+            }
+        }
+        return image;
+    }
+
+    bool isFileExist(const std::string& fileName) {
+        std::ifstream file(fileName);
+        return file.good();
+    }
+
+    bool isBothImagesExists(const std::string& firstFile, const std::string& secondFile) {
+        return isFileExist(firstFile) && isFileExist(secondFile);
+    }
+
+    image_buffer getOrGenerateImage(const std::string& fileName) {
+        return fileName.empty() ? generatePNGImage() : readPNGImage(fileName);
+    }
+}
diff --git a/examples/graph/stereo/xcode/stereo.xcodeproj/project.pbxproj b/examples/graph/stereo/xcode/stereo.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..865a22e
--- /dev/null
+++ b/examples/graph/stereo/xcode/stereo.xcodeproj/project.pbxproj
@@ -0,0 +1,321 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		0E8A7311136F4A4600453C80 /* ../../../../lib/libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* ../../../../lib/libtbb.dylib */; };
+		0E8A7325136F4D3600453C80 /* ../../../../lib/libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* ../../../../lib/libtbb.dylib */; };
+		8415B6821CFC8B7F00A875B5 /* stereo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8415B6801CFC8B7F00A875B5 /* stereo.cpp */; };
+		8415B6881CFC8B9200A875B5 /* lodepng.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8415B6851CFC8B9200A875B5 /* lodepng.cpp */; };
+		8415B68A1CFC96D900A875B5 /* OpenCL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8415B6891CFC96D900A875B5 /* OpenCL.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		8DD76F690486A84900D96B5E /* CopyFiles */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 12;
+			dstPath = "";
+			dstSubfolderSpec = 16;
+			files = (
+				0E8A7311136F4A4600453C80 /* ../../../../lib/libtbb.dylib in CopyFiles */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		0E8A7310136F4A4600453C80 /* ../../../../lib/libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = ../../../../lib/libtbb.dylib; sourceTree = "<group>"; };
+		8415B6801CFC8B7F00A875B5 /* stereo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stereo.cpp; path = ../stereo.cpp; sourceTree = "<group>"; };
+		8415B6811CFC8B7F00A875B5 /* utils.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = utils.hpp; path = ../utils.hpp; sourceTree = "<group>"; };
+		8415B6831CFC8B9200A875B5 /* imageEffects.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; name = imageEffects.cl; path = ../imageEffects.cl; sourceTree = "<group>"; };
+		8415B6841CFC8B9200A875B5 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = index.html; path = ../index.html; sourceTree = "<group>"; };
+		8415B6851CFC8B9200A875B5 /* lodepng.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = lodepng.cpp; path = ../lodepng.cpp; sourceTree = "<group>"; };
+		8415B6861CFC8B9200A875B5 /* lodepng.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lodepng.h; path = ../lodepng.h; sourceTree = "<group>"; };
+		8415B6891CFC96D900A875B5 /* OpenCL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenCL.framework; path = System/Library/Frameworks/OpenCL.framework; sourceTree = SDKROOT; };
+		8DD76F6C0486A84900D96B5E /* Stereo */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Stereo; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		8DD76F660486A84900D96B5E /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				8415B68A1CFC96D900A875B5 /* OpenCL.framework in Frameworks */,
+				0E8A7325136F4D3600453C80 /* ../../../../lib/libtbb.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		08FB7794FE84155DC02AAC07 /* Stereo */ = {
+			isa = PBXGroup;
+			children = (
+				8415B6891CFC96D900A875B5 /* OpenCL.framework */,
+				08FB7795FE84155DC02AAC07 /* Source */,
+				A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+				1AB674ADFE9D54B511CA2CBB /* Products */,
+			);
+			name = Stereo;
+			sourceTree = "<group>";
+		};
+		08FB7795FE84155DC02AAC07 /* Source */ = {
+			isa = PBXGroup;
+			children = (
+				8415B6831CFC8B9200A875B5 /* imageEffects.cl */,
+				8415B6841CFC8B9200A875B5 /* index.html */,
+				8415B6851CFC8B9200A875B5 /* lodepng.cpp */,
+				8415B6861CFC8B9200A875B5 /* lodepng.h */,
+				8415B6801CFC8B7F00A875B5 /* stereo.cpp */,
+				8415B6811CFC8B7F00A875B5 /* utils.hpp */,
+			);
+			name = Source;
+			sourceTree = "<group>";
+		};
+		1AB674ADFE9D54B511CA2CBB /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				8DD76F6C0486A84900D96B5E /* Stereo */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+			isa = PBXGroup;
+			children = (
+				0E8A7310136F4A4600453C80 /* ../../../../lib/libtbb.dylib */,
+			);
+			name = "External Frameworks and Libraries";
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		8DD76F620486A84900D96B5E /* Stereo */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Stereo" */;
+			buildPhases = (
+				8DD76F640486A84900D96B5E /* Sources */,
+				8DD76F660486A84900D96B5E /* Frameworks */,
+				8DD76F690486A84900D96B5E /* CopyFiles */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = Stereo;
+			productInstallPath = "$(HOME)/bin";
+			productName = Stereo;
+			productReference = 8DD76F6C0486A84900D96B5E /* Stereo */;
+			productType = "com.apple.product-type.tool";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		08FB7793FE84155DC02AAC07 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0410;
+			};
+			buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "stereo" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 1;
+			knownRegions = (
+				en,
+			);
+			mainGroup = 08FB7794FE84155DC02AAC07 /* Stereo */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				8DD76F620486A84900D96B5E /* Stereo */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+		8DD76F640486A84900D96B5E /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				8415B6881CFC8B9200A875B5 /* lodepng.cpp in Sources */,
+				8415B6821CFC8B7F00A875B5 /* stereo.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+		1DEB923208733DC60010E9CD /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					../../../../lib,
+				);
+				PRODUCT_NAME = Stereo;
+				ZERO_LINK = NO;
+			};
+			name = Debug;
+		};
+		1DEB923308733DC60010E9CD /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					../../../../lib,
+				);
+				PRODUCT_NAME = Stereo;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		1DEB923608733DC60010E9CD /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = i386;
+				GCC_ENABLE_CPP_RTTI = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Debug;
+		};
+		1DEB923708733DC60010E9CD /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = i386;
+				GCC_ENABLE_CPP_RTTI = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Release;
+		};
+		A1F593C60B8F0E6E00073279 /* Debug64 */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					../../../../lib,
+				);
+				PRODUCT_NAME = Stereo;
+				ZERO_LINK = NO;
+			};
+			name = Debug64;
+		};
+		A1F593C70B8F0E6E00073279 /* Release64 */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					../../../../lib,
+				);
+				PRODUCT_NAME = Stereo;
+				ZERO_LINK = NO;
+			};
+			name = Release64;
+		};
+		A1F593C80B8F0E6E00073279 /* Debug64 */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = i386;
+				GCC_ENABLE_CPP_RTTI = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				OTHER_CPLUSPLUSFLAGS = (
+					"$(OTHER_CFLAGS)",
+					"-m64",
+				);
+				OTHER_LDFLAGS = "-m64";
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Debug64;
+		};
+		A1F593C90B8F0E6E00073279 /* Release64 */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = i386;
+				GCC_ENABLE_CPP_RTTI = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				OTHER_CPLUSPLUSFLAGS = (
+					"$(OTHER_CFLAGS)",
+					"-m64",
+				);
+				OTHER_LDFLAGS = "-m64";
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Release64;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Stereo" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				1DEB923208733DC60010E9CD /* Debug */,
+				A1F593C60B8F0E6E00073279 /* Debug64 */,
+				1DEB923308733DC60010E9CD /* Release */,
+				A1F593C70B8F0E6E00073279 /* Release64 */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "stereo" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				1DEB923608733DC60010E9CD /* Debug */,
+				A1F593C80B8F0E6E00073279 /* Debug64 */,
+				1DEB923708733DC60010E9CD /* Release */,
+				A1F593C90B8F0E6E00073279 /* Release64 */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/examples/index.html b/examples/index.html
index 532d945..5c619d7 100644
--- a/examples/index.html
+++ b/examples/index.html
@@ -1,166 +1,575 @@
-<HTML>
-<BODY>
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
 
-<H2>Overview</H2>
-This directory has example usages of Intel® Threading Building Blocks (Intel® TBB).
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
 
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="GettingStarted/index.html">GettingStarted</A>
-<DD>Examples from the Getting Started Guide.
-<DT><A HREF="concurrent_hash_map/index.html">concurrent_hash_map</A>
-<DD>Examples using <CODE>concurrent_hash_map</CODE>.
-<DT><A HREF="concurrent_priority_queue/shortpath/index.html">concurrent_priority_queue</A>
-<DD>Examples using <CODE>concurrent_priority_queue</CODE>.
-<DT><A HREF="graph/index.html">graph</A>
-<DD>Examples using <CODE>tbb::flow graph</CODE>.
-<DT><A HREF="parallel_do/index.html">parallel_do</A>
-<DD>Examples using <CODE>parallel_do</CODE>.
-<DT><A HREF="parallel_for/index.html">parallel_for</A>
-<DD>Examples using <CODE>parallel_for</CODE>.
-<DT><A HREF="parallel_reduce/index.html">parallel_reduce</A>
-<DD>Examples using <CODE>parallel_reduce</CODE>.
-<DT><A HREF="pipeline/index.html">pipeline</A>
-<DD>Examples using <CODE>pipeline</CODE>.
-<DT><A HREF="task/index.html">task</A>
-<DD>Examples using raw <CODE>task</CODE> interface.
-<DT><A HREF="task_group/index.html">task_group</A>
-<DD>Examples using <CODE>task_group</CODE> interface.
-<DT><A HREF="task_priority/index.html">task_priority</A>
-<DD>Examples using the task priority feature.
-<DT><A HREF="test_all/index.html">test_all</A>
-<DD>Examples that test all the parts of the package.
-<DT><A HREF="common/index.html">common</A>
-<DD>Common files for building various examples.  Should not be used directly. But if you copy an example to other place this folder should be copied also and should have the same relative path for copied example.
-</DL>
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks Samples</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks Samples</h1>
+	</div>
+	
+	<p>
+		This directory includes example usages of Intel® Threading Building Blocks (Intel® TBB).
+	</p>
 
-<A NAME=build><H2>To Build</H2></A>
-Build each example by using one of the following methods.  The specific directions for each
-method can be found below.
-<UL>
-<LI>Build by using a <A HREF=#build_1>Microsoft* Visual Studio* project (Windows* systems only)</A>.
-<LI>Build by using a <A HREF=#build_2>Xcode* IDE project (OS X* systems only)</A>.
-<LI>Build by using a <A HREF=#build_3>Makefile (Windows*, Linux* or OS X* systems)</A>.
-</UL>
+	<div class="changes">
+		<div class="h3-alike">System Requirements:</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				For the most up to date system requirements, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
+			</p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="GettingStarted/index.html">GettingStarted</a>
+				<dd>Examples from the Intel TBB <a href="http://software.intel.com/en-us/tbb-tutorial">Getting Started Guide</a>.
+				<dt><a href="concurrent_hash_map/index.html">concurrent_hash_map</a>
+				<dd>Examples using <code>concurrent_hash_map</code> container.
+				<dt><a href="concurrent_priority_queue/index.html">concurrent_priority_queue</a>
+				<dd>Examples using <code>concurrent_priority_queue</code> container.
+				<dt><a href="graph/index.html">graph</a>
+				<dd>Examples using Intel TBB Flow Graph feature.
+				<dt><a href="parallel_do/index.html">parallel_do</a>
+				<dd>Examples using <code>parallel_do</code> algorithm.
+				<dt><a href="parallel_for/index.html">parallel_for</a>
+				<dd>Examples using <code>parallel_for</code> algorithm.
+				<dt><a href="parallel_reduce/index.html">parallel_reduce</a>
+				<dd>Examples using <code>parallel_reduce</code> algorithm.
+				<dt><a href="pipeline/index.html">pipeline</a>
+				<dd>Examples using <code>pipeline</code> algorithm.
+				<dt><a href="task/index.html">task</a>
+				<dd>Examples using raw <code>task</code> interface.
+				<dt><a href="task_group/index.html">task_group</a>
+				<dd>Examples using <code>task_group</code> interface.
+				<dt><a href="task_arena/index.html">task_arena</a>
+				<dd>Examples using the <code>task_arena</code> feature.
+				<dt><a href="test_all/index.html">test_all</a>
+				<dd>Examples that test various components of Intel TBB.
+				<dt><a href="common/index.html">common</a>
+				<dd>Common files for building various examples. Should not be used directly. But if you copy an example to other place this folder should be copied also and should have the same relative path for copied example.
+			</dl>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Build Instructions</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<br>
+			<div class="note">
+				Note: Some of the following directions refer to a shell window. This refers
+				to the command prompt environment/window normally used on your system:
+				<ul>
+					<li>cmd.exe command prompt window for Windows* systems
+					<li>sh, bash, csh, ksh, etc. (or compatible) shell window for Windows*, Linux* or macOS* systems
+				</ul>
+			</div>
+			<p>
+			Set up the environment for using Intel TBB:
+			</p>
+			<div class="h4-alike">To set up the environment for Windows* OS:</div>
+			<input type="checkbox">
+			<div class="show-hide">
 
-<P>
-Some of the following directions refer to a shell window; this refers
-to the command prompt environment/window normally used on your system.
-A shell might be a cmd.exe command prompt window (Windows* systems), or a
-sh, bash, csh, ksh, etc. (or compatible) shell window (Windows*, Linux* or OS X* systems).
-</P>
-
-<A name="build_1"><H4>To build by using a Microsoft* Visual Studio* project (Windows* systems):</H4></A>
-Perform the following steps:
-<OL>
-<LI>Identify the solution (*.sln) file for the example you wish to build and run. For Microsoft* Visual Studio* 2010, the *.sln file is in the example's msvs sub-directory.</LI>
-<LI>Open the project by using one of the following methods:
-    <UL>
-    <LI>Navigate to the *.sln file from My Computer, by using Windows Explorer, or by using another file browser. Double-click the *.sln file to invoke Microsoft* Visual Studio* and open the project.</LI>
-    <LI>Invoke Microsoft* Visual Studio* from the Start menu and use the "Open Project" dialog to navigate to and open the project.</LI>
-    </UL>
-</LI>
-<LI>Press <ctrl-F5> to build and run the example.</LI>
-<li>If you copied an example to another place separately from libraries you need to 
-    set %TBBROOT% variable pointing to <installdir> folder.</li>
-</OL>
-
-<A name="build_2"><H4>To build by using a Xcode* IDE project (OS X* systems):</H4></A>
-Perform the following steps:
-<OL>
-<LI>Identify the project (*.xcodeproj) file for the example you wish to build and run.
-    <UL>
-    <LI>The *.xcodeproj file is in the example's xcode sub-directory.
-    </UL>
-</LI>
-<LI>Open the project by using one of the following methods:
-    <UL>
-    <LI>Navigate to the *.xcodeproj file by using the Finder.Double-click the *.xcodeproj file to invoke the Xcode* IDE and open the project.</LI>
-    <LI>Invoke the Xcode* IDE and use the "File -> Open" dialog to navigate to and open the project.</LI>
-    </UL>
-</LI>
-<LI>Press <Apple-R>, or press the "Build and Go" button in the toolbox, to build and run the example.
-</LI>
-</OL>
-
-<A name="build_3"><H4>To build by using a Makefile (Windows*, Linux* or OS X* systems):</H4></A>
-Perform the following steps:
-<OL>
-<LI>Open a shell window.  For Windows* systems, make sure this shell window has the proper environment
-    defined for use with Microsoft* Visual Studio* (2005, 2008, 2010 or 2012); such a shell can be invoked
-    from the Start menu, under Visual Studio, Visual Studio Tools, Visual Studio Command Prompt.
-<LI>Set up the environment in this shell window for use with Intel TBB.
-    <BR>See below for how to set up the environment for <A href="#env_1">Windows*</A>, <A href="#env_23">Linux*</A> or <A href="#env_23">OS X*</A> systems.
-<LI>Unless you installed Intel TBB yourself, you may not have write permissions to the directory 
-    containing the example.  In this case, make a copy of the example, and use the copy for the following steps.
-<LI>In the shell window, navigate to the directory for the example
-    (or to the directory for the copy of the example if you made one in the previous step).
-<LI>Use one or more of the following commands to build and run the example.
-    Here, make refers to the make command normally used on your system: this could be
-    nmake, gmake, or make on Windows* systems, or make or gmake on Linux* or OS X* systems.
-    <DL>
-    <DT><TT>make</TT>
-    <DD>Default build and run.  Equivalent to 'make release test'.
-    <DT><TT>make release</TT>
-    <DD>Compile and link against the release version of Intel TBB runtime library. The resulting executable is left in the directory for the example.
-    <DT><TT>make debug</TT>
-    <DD>Compile and link against the debug version of Intel TBB runtime library. The resulting executable is left in the directory for the example.
-    <DT><TT>make test</TT>
-    <DD>Run an executable previously produced by one of the above commands.
-    <DT><TT>make <B>[</B>(above options or targets)<B>]</B> CXX=<B>{</B>icl, icc<B>}</B></TT>
-    <DD>Build and run as above, but use Intel® compilers instead of default, native compilers (e.g., icl instead of cl.exe on Windows* systems, or icc instead of g++ on Linux* or OS X* systems).
-    <DT><A NAME=build_4><TT>make <B>[</B>(above options or targets)<B>]</B> offload=mic</B></TT></A>
-    <DD>Build and run the offload version of an example for Intel&reg Many Integrated Core (Intel&reg MIC) Architecture.
-    <DD><I>Note: Only Intel&reg MIC Architecture with Linux* based host is currently supported.</I>
-    <DT><TT>make clean</TT>
-    <DD>Remove any executables or intermediate files produced by the above commands.
-    </DL>
-</OL>
-
-<A name="env_1"><H4>To set up the environment (Windows* systems):</H4></A>
-It is <B>strongly</B> recommended that the environment be set up when installing Intel TBB.
-Do this by selecting the appropriate check-box during the install.  However, if the environment is not set up
-during installation, or you wish to build for an alternate architecture or Microsoft* Visual Studio* version,
-it may be set up, for a given type of shell window, by using one of the following commands:
-<DL>
-<DT>For cmd.exe (command prompt):
-<DD><TT><<I>installdir</I>>\bin\tbbvars.bat (arch) (vs)</TT>
-<pre>
-    where (arch) must be is one of the following
-       ia32         : Set up for IA-32  architecture
-       intel64      : Set up for Intel® 64  architecture
-   (vs) should be one of the following
-       vs2010      : Set to use with Microsoft Visual Studio 2010 runtime DLLs
-       vs2012      : Set to use with Microsoft Visual Studio 2012 runtime DLLs
-       vs2013      : Set to use with Microsoft Visual Studio 2013 runtime DLLs
-       all         : Set to use TBB statically linked with Microsoft Visual C++ runtime
-   if (vs) is not set TBB statically linked with Microsoft Visual C++ runtime will be used.
-</pre>
-</DL>
-<A name="env_23">
-    <H4>To set up the environment (Linux* or OS X* systems):</H4></A>
-The environment may be set up, for a given type of shell window, by using one of the following commands:
-<DL>
-<DT>For sh, bash, ksh (or compatibles):
-<DD>. <<I>installdir</I>>/bin/tbbvars.sh (arch)
-<DT>For csh (or compatibles):
-<DD>source <<I>installdir</I>>/bin/tbbvars.csh (arch)
-<DT><I>Notes:</I>
-<DD><I><SL>
-    <LI>Choose one of {ia32,intel64} depending on the architecture to be used.
-    <LI>Environment setup need only be performed once per shell window to be used.
-    <LI>Always source tbbvars.sh or tbbvars.csh rather than executing them directly.
-    </SL></I>
-</DL>
-
-<HR>
-<A href="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
+				<p>
+					It is <b>strongly</b> recommended to set up the environment when installing Intel TBB.
+					Do this by selecting the appropriate check-box during the install. However, if the environment is not set up
+					during installation, or you wish to build for an alternate architecture or Microsoft* Visual Studio* version,
+					it may be set up, for a given type of shell window, by using one of the following commands:
+				</p>
+				<dl>
+				<dt>For cmd.exe (command prompt):
+				<dd>
+					<pre>
+<<i>installdir</i>>/bin/tbbvars.bat (arch) [vs]
+					</pre>
+				<dt>where:
+				<dd>
+					<li><i>(arch)</i> argument represents target architecture. Its possible values are 'ia32' or 'intel64'.
+					<li><i>[vs]</i> argument represents target version of Microsoft* Visual Studio*. Its possible values are:
+					<ul class='circ'>
+					<li><i>'vs<msvs_version>'</i> - to use TBB with Microsoft* Visual Studio* <i><msvs_version></i> runtime DLLs, e.g.: <code>tbbvars intel64 vs2015</code>
+						<br><i>Note:</i> for the most up to date supported versions of Microsoft* Visual Studio*, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
+					<li><i>'all'</i> - to use TBB statically linked with Microsoft Visual C++ runtime.
+						<br>If <i>[vs]</i> is not set the <i>'all'</i> value will be used by default.
+					</ul>
+				</dl>
+			</div>
+			<br>
+			<div class="h4-alike">To set up the environment for Linux* OS and macOS*:</div>
+			<input type="checkbox">
+			<div class="show-hide">
+				<p>
+					The environment may be set up, for a given type of shell window, by using one of the following commands:
+				</p>
+				<dl>
+				<dt>For sh, bash, ksh, dash (or compatibles):
+				<dd>
+				<pre>
+<b>.</b> <<i>installdir</i>>/bin/tbbvars.sh (arch) [platform [TBBROOT_detection_mode]]
+				</pre>
+				<dt>For csh (or compatibles):
+				<dd>
+				<pre>
+source <<i>installdir</i>>/bin/tbbvars.csh (arch) [platform [TBBROOT_detection_mode]]
+				</pre>
+				<dt>where:
+				<dd>
+					<li><i>(arch)</i> argument represents target architecture. Its possible values are <i>'ia32'</i> or <i>'intel64'</i>.
+					<li><i>[platform]</i> argument represents target platform. Its possible values are <i>'linux'</i> or <i>'android'</i>.
+					<li><i>[TBBROOT_detection_mode]</i> argument represents TBBROOT path detection method. Its only possible value is <i>'auto_tbbroot'</i>. In this case the environment variable TBBROOT is detected automatically by using the tbbvars script directory path.
+				</dl>
+			Environment setup need only be performed once per shell window to be used.
+			<br>Always source tbbvars.sh or tbbvars.csh rather than executing them directly.
+			<br>If the arguments to the sourced script are ignored (consult documentation for your shell) the alternative way to specify target is environment variables COMPILERVARS_ARCHITECTURE to pass (arch) to the script and COMPILERVARS_PLATFORM to pass [platform].
+				
+			</div>
+			<p>
+			Build each example by using one of the following methods:
+			</p>
+			<div class="h4-alike">To build by using a Microsoft* Visual Studio* project (Windows* systems):</div>
+			<input type="checkbox">
+			<div class="show-hide">
+			<ol>
+			<li>Identify the solution (*.sln) file for the example you wish to build and run. The *.sln file for each example is in the example's <i>msvs</i> sub-directory.
+			<li>Open the project by using one of the following methods:
+				<ul class="disc">
+				<li>Navigate to the *.sln file from My Computer, by using Windows Explorer, or by using another file browser. Double-click the *.sln file to invoke Microsoft* Visual Studio* and open the project.</li>
+				<li>Invoke Microsoft* Visual Studio* from the Start menu and use the "Open Project" dialog to navigate to and open the project.</li>
+				</ul>
+			</li>
+			<li>Press <ctrl-F5> to build and run the example.</li>
+			<li>If you copied an example to another place separately from libraries you need to
+				set %TBBROOT% variable pointing to <installdir> folder.</li>
+			</ol>
+			</div>
+			<br>
+			<div class="h4-alike">To build by using a Xcode* IDE project (macOS* systems):</div>
+			<input type="checkbox">
+			<div class="show-hide">
+			<br>
+			<div class="note">
+				Note: Xcode* project instructions are not applicable for the Intel TBB Sample Bundle for Intel® System Studio
+				because Intel System Studio does not support macOS*. For additional information, see the
+				<a href="https://software.intel.com/en-us/articles/intel-system-studio-release-notes">Release Notes</a>.
+			</div>
+			<ol>
+			<li>Identify the project (*.xcodeproj) file for the example you wish to build and run. The *.xcodeproj file is in the example's <i>xcode</i> sub-directory.</li>
+			<li>Open the project by using one of the following methods:
+				<ul class="disc">
+				<li>Navigate to the *.xcodeproj file by using the Finder.Double-click the *.xcodeproj file to invoke the Xcode* IDE and open the project.</li>
+				<li>Invoke the Xcode* IDE and use the "File -> Open" dialog to navigate to and open the project.</li>
+				</ul>
+			</li>
+			<li>Press <Apple-R>, or press the "Build and Go" button in the toolbox, to build and run the example.
+			</li>
+			</ol>
+			</div>
+			<br>
+			<div class="h4-alike">To build by using a Makefile (Windows*, Linux* or macOS* systems):</div>
+			<input type="checkbox">
+			<div class="show-hide">
+			<ol>
+			<li>Open a shell window
+				<ul class="disc">
+				<li>For Windows* systems, make sure this shell window has the proper environment
+					defined for use with Microsoft* Visual Studio*. Such shell can be invoked from the Start menu, under Microsoft* Visual Studio*, Microsoft* Visual Studio Tools*, Microsoft* Visual Studio* Command Prompt.</li>
+				</ul>
+			<li>Set up the environment in this shell window for use with Intel TBB.
+				<br>See above for how to set up the environment for Windows*, Linux* or macOS* systems.
+			<li>Unless you installed Intel TBB yourself, you may not have write permissions to the directory
+				containing the example. In this case, make a copy of the example, and use the copy for the following steps.
+			<li>In the shell window, navigate to the directory for the example
+				(or to the directory for the copy of the example if you made one in the previous step).
+			<li>Use one or more of the following commands to build and run the example.
+				Here, make refers to the make command normally used on your system: this could be
+				nmake, gmake, or make on Windows* systems, or make or gmake on Linux* or macOS* systems.
+				<dl>
+				<dt><tt>make</tt>
+				<dd>Default build and run. Equivalent to 'make release test'.
+				<dt><tt>make release</tt>
+				<dd>Compile and link against the release version of Intel TBB runtime library. The resulting executable is left in the directory for the example.
+				<dt><tt>make debug</tt>
+				<dd>Compile and link against the debug version of Intel TBB runtime library. The resulting executable is left in the directory for the example.
+				<dt><tt>make test</tt>
+				<dd>Run an executable previously produced by one of the above commands.
+				<dt><tt>make <b>[</b>(above options or targets)<b>]</b> CXX=<b>{</b>icl, icc<b>}</b></tt>
+				<dd>Build and run as above, but use Intel® C++ Compiler instead of default, native compilers (e.g., icl instead of cl.exe on Windows* systems, or icc instead of g++ on Linux* or macOS* systems).
+				<dt><tt>make <b>[</b>(above options or targets)<b>]</b> offload=mic</tt>
+				<dd>Build and run the offload version of an example for Intel® Many Integrated Core (Intel® MIC) Architecture.
+					<br>
+					<div class="note">
+						Note: Only Intel® MIC Architecture with Linux* based host is currently supported.
+					</div>
+				<dt><tt>make clean</tt>
+				<dd>Remove any executables or intermediate files produced by the above commands.
+				</dl>
+			</ol>
+			</div>
+			<br>
+		</div>
+	</div>
+	
+	<br>
+	<a href="../index.html">Up to parent directory</a> (available only in the Intel® Parallel Studio and Intel® System Studio Online Samples packages and the open-source version of Intel TBB)
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information:</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<br>
+			<div class="tablenoborder">
+			<table border="1" rules="all" frame="border" cellspacing="0" cellpadding="4" summary=""> 
+				<thead align="left"> 
+				<tr> 
+					<th width="100%" align="left" class="cellrowborder" valign="top"> 
+						<p>Optimization Notice</p>
+					</th>
+			 	</tr>
+				</thead>
+			 
+				<tbody> 
+				<tr> 
+					<td width="100%" class="bgcolor(#f5f5f5)" valign="top" bgcolor="#f5f5f5"> 
+					  <p>Intel's compilers may or may not optimize to the same 
+					  degree for non-Intel microprocessors for optimizations that 
+					  are not unique to Intel microprocessors. These optimizations 
+					  include SSE2, SSE3, and SSSE3 instruction sets and other 
+					  optimizations. Intel does not guarantee the availability, 
+					  functionality, or effectiveness of any optimization on 
+					  microprocessors not manufactured by Intel. 
+					  Microprocessor-dependent optimizations in this product are 
+					  intended for use with Intel microprocessors. Certain 
+					  optimizations not specific to Intel microarchitecture are 
+					  reserved for Intel microprocessors. Please refer to the 
+					  applicable product User and Reference Guides for more 
+					  information regarding the specific instruction sets covered by 
+					  this notice. 
+					  </p>
+	 				  <p>Notice revision #20110804 
+					  </p>
+				  </td>
+				</tr>
+				</tbody>
+			</table>
+			</div>
+			
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>	
+	
+</body>
+</html>
\ No newline at end of file
diff --git a/examples/parallel_do/index.html b/examples/parallel_do/index.html
index ef1c3b5..cd8d079 100644
--- a/examples/parallel_do/index.html
+++ b/examples/parallel_do/index.html
@@ -1,24 +1,344 @@
-<HTML>
-<BODY>
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
 
-<H2>Overview</H2>
-This directory has examples of the template <code>parallel_do</code>.
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
 
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="parallel_preorder/index.html">parallel_preorder</A>
-<DD>Parallel preorder traversal of a graph.
-</DL>
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Samples on parallel_do algorithm</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Samples on <code>parallel_do</code> algorithm</h1>
+	</div>
+	
+	<p>
+		This directory has examples of the <code>parallel_do</code> algorithm.
+	</p>
 
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="parallel_preorder/readme.html">parallel_preorder</a>
+				<dd>Parallel preorder traversal of a graph.
+			</dl>
+		</div>
+	</div>
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information:</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>
+</body>
+</html>
 
diff --git a/examples/parallel_do/parallel_preorder/Graph.cpp b/examples/parallel_do/parallel_preorder/Graph.cpp
index 8729a1c..12f17dc 100644
--- a/examples/parallel_do/parallel_preorder/Graph.cpp
+++ b/examples/parallel_do/parallel_preorder/Graph.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 #include <cstdlib>
diff --git a/examples/parallel_do/parallel_preorder/Graph.h b/examples/parallel_do/parallel_preorder/Graph.h
index 1369c33..13b36d2 100644
--- a/examples/parallel_do/parallel_preorder/Graph.h
+++ b/examples/parallel_do/parallel_preorder/Graph.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "Matrix.h"
@@ -60,7 +60,7 @@ public:
     //! Update the Cell's value.
     void update();
 
-    //! Default construtor
+    //! Default constructor
     Cell() {}
 };
 
diff --git a/examples/parallel_do/parallel_preorder/Makefile b/examples/parallel_do/parallel_preorder/Makefile
index b76ece9..a2fc8c4 100644
--- a/examples/parallel_do/parallel_preorder/Makefile
+++ b/examples/parallel_do/parallel_preorder/Makefile
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # GNU Makefile that builds and runs example.
 run_cmd=
@@ -35,6 +35,8 @@ run_cmd=../../common/android.linux.launcher.sh
 else
 LIBS+= -lrt 
 endif
+else ifeq ($(shell uname), Darwin)
+override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib
 endif
 
 all:	release test
diff --git a/examples/parallel_do/parallel_preorder/Makefile.windows b/examples/parallel_do/parallel_preorder/Makefile.windows
index e0cb7ab..5c554e9 100644
--- a/examples/parallel_do/parallel_preorder/Makefile.windows
+++ b/examples/parallel_do/parallel_preorder/Makefile.windows
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # Common Makefile that builds and runs example.
 
@@ -51,4 +51,4 @@ compiler_check:
 perf_build:	release
 
 perf_run:
-	./$(PROG) $(PERF_RUN_ARGS)
+	$(PROG) $(PERF_RUN_ARGS)
diff --git a/examples/parallel_do/parallel_preorder/Matrix.h b/examples/parallel_do/parallel_preorder/Matrix.h
index 9576512..b9fb938 100644
--- a/examples/parallel_do/parallel_preorder/Matrix.h
+++ b/examples/parallel_do/parallel_preorder/Matrix.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 class Matrix {
diff --git a/examples/parallel_do/parallel_preorder/index.html b/examples/parallel_do/parallel_preorder/index.html
deleted file mode 100644
index e94f16f..0000000
--- a/examples/parallel_do/parallel_preorder/index.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<HTML>
-<BODY>
-
-<H2>Overview</H2>
-Example that uses parallel_do to do parallel preorder traversal of a sparse graph.
-<P>
-Each vertex in the graph is called a "cell".  
-Each cell has a value. 
-The value is a matrix. 
-Some of the cells have operators
-that compute the cell's value, using other cell's values as input.
-A cell that uses the value of cell x is called a successor of x.
-</P><P>
-The algorithm works as follows. 
-<OL>
-<LI> Compute the set of cells that have no inputs. This set is called <TT>root_set</TT>.
-<LI> Each cell has an associated field <TT>ref_count</TT> that is an atomic integer.
-     Initialize <TT>ref_count</TT> to the number of inputs for the Cell.
-<LI> Update each cell in <TT>root_set</TT>, by applying a <TT>parallel_do</TT> to a <TT>root_set</TT>
-<LI> After updating a cell, for each of its successors 
-<OL>
-<LI> Atomically decrement the successor's <TT>ref_count</TT>
-<LI> If the count became zero, add the cell to the set of cells to be updated,
-     by calling <TT>parallel_do_feeder_impl::add</TT>.
-</OL>
-</OL>
-</P><P>
-The times printed are for the traversal and update, 
-and do not include time for computing the root_set.
-</P><P>
-The example is using custom synchronization via <TT>ref_count</TT> atomic variable.
-Correctness checking tools might not take this into account, and report data races
-between different tasks that are actually synchronized.
-</P>
-
-<B>NOTE: </B>It is important to understand that this example is unlikely to show speedup 
-if the cell values are changed to type "float".  The reason is twofold.
-<UL>
-<LI> The smaller value type causes each Cell to be significantly smaller than a cache line,
-     which leads to false sharing conflicts.
-<LI> The time to update the cells becomes very small, and consequently the overhead of
-     parallel_do swamps the useful work.
-</UL>
-
-<H2>Files</H2>
-<DL>
-<DT><A HREF="main.cpp">main.cpp</A>
-<DD>Main program which parses command line options and runs the algorithm with different numbers of threads.
-<DT><A HREF="parallel_preorder.cpp">parallel_preorder.cpp</A>
-<DD>Implementation of the parallel preorder traversal algorithm.
-<DT><A HREF="Graph.h">Graph.h</A>
-<DD>Interfaces of the Graph and Cell classes.
-<DT><A HREF="Graph.cpp">Graph.cpp</A>
-<DD>Implementations of the Graph and Cell classes.
-<DT><A HREF="Matrix.h">Matrix.h</A>
-<DD>The Matrix class definition.
-<DT><A HREF="Makefile">Makefile</A>
-<DD>Makefile for building example.
-</DL>
-
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2010 workspace for building and running the example (Windows* systems only).
-<DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example (OS X* systems only).
-</DL>
-
-<H2>To Build</H2>
-General build directions can be found <A HREF=../../index.html#build>here</A>.
-
-<H2>Usage</H2>
-<DL>
-<DT><TT>parallel_preorder <I>-h</I></TT>
-<DD>Prints the help for command line options
-<DT><TT>parallel_preorder [<I>n-of-threads</I>=value] [<I>n-of-nodes</I>=value] [<I>n-of-traversals</I>=value] [<I>silent</I>] </TT>
-<DT><TT>parallel_preorder [<I>n-of-threads</I> [<I>n-of-nodes</I> [<I>n-of-traversals</I>]]] [<I>silent</I>] </TT> 
-<DD><I>n-of-threads</I> is the number of threads to use; a range of the form <I>low</I>[:<I>high</I>], where low and optional high are non-negative integers or 'auto' for the TBB default.<BR>
-    <I>n-of-nodes</I> is a number of nodes in the graph. Default value is 1000.<BR>
-    <I>n-of-traversals</I> is the number of times to evaluate the graph. Default value is 500.<BR>
-    <I>silent</I> - no output except elapsed time.<BR>
-<DT>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
-<DD>Build a <I>debug</I> version of the example
-    (see the <A HREF=../../index.html#build>build directions</A>).
-    <BR>Run it with the desired number of threads and smaller number of traversals, e.g., <TT>parallel_preorder 4 1000 5</TT>.
-</DL>
-
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
-
diff --git a/examples/parallel_do/parallel_preorder/main.cpp b/examples/parallel_do/parallel_preorder/main.cpp
index 0fe20b2..1f960ad 100644
--- a/examples/parallel_do/parallel_preorder/main.cpp
+++ b/examples/parallel_do/parallel_preorder/main.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 /* Example program that shows how to use parallel_do to do parallel preorder
diff --git a/examples/parallel_do/parallel_preorder/msvs/parallel_preorder.sln b/examples/parallel_do/parallel_preorder/msvs/parallel_preorder.sln
index 2ac357d..7e77806 100644
--- a/examples/parallel_do/parallel_preorder/msvs/parallel_preorder.sln
+++ b/examples/parallel_do/parallel_preorder/msvs/parallel_preorder.sln
@@ -1,26 +1,26 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "parallel_preorder", "parallel_preorder.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A252B}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
-		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|Win32.ActiveCfg = Debug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|Win32.Build.0 = Debug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|x64.ActiveCfg = Debug|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|x64.Build.0 = Debug|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|Win32.ActiveCfg = Release|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|Win32.Build.0 = Release|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|x64.ActiveCfg = Release|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|x64.Build.0 = Release|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "parallel_preorder", "parallel_preorder.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A252B}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|Win32.ActiveCfg = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|Win32.Build.0 = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|x64.ActiveCfg = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|x64.Build.0 = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|Win32.ActiveCfg = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|Win32.Build.0 = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|x64.ActiveCfg = Release|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/parallel_do/parallel_preorder/msvs/parallel_preorder.vcxproj b/examples/parallel_do/parallel_preorder/msvs/parallel_preorder.vcxproj
index f85c0ed..c2cf9bc 100644
--- a/examples/parallel_do/parallel_preorder/msvs/parallel_preorder.vcxproj
+++ b/examples/parallel_do/parallel_preorder/msvs/parallel_preorder.vcxproj
@@ -1,203 +1,207 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>parallel_preorder</ProjectName>
-    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A252B}</ProjectGuid>
-    <RootNamespace>parallel_preorder</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <Import Project="..\..\..\common\toolset.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\Graph.cpp" />
-    <ClCompile Include="..\main.cpp" />
-    <ClCompile Include="..\parallel_preorder.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\Graph.h" />
-    <ClInclude Include="..\Matrix.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="..\index.html" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>parallel_preorder</ProjectName>
+    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A252B}</ProjectGuid>
+    <RootNamespace>parallel_preorder</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\Graph.cpp" />
+    <ClCompile Include="..\main.cpp" />
+    <ClCompile Include="..\parallel_preorder.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\Graph.h" />
+    <ClInclude Include="..\Matrix.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\readme.html" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/examples/parallel_do/parallel_preorder/parallel_preorder.cpp b/examples/parallel_do/parallel_preorder/parallel_preorder.cpp
index 197e691..f8ce1c5 100644
--- a/examples/parallel_do/parallel_preorder/parallel_preorder.cpp
+++ b/examples/parallel_do/parallel_preorder/parallel_preorder.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/parallel_do.h"
diff --git a/examples/parallel_do/parallel_preorder/readme.html b/examples/parallel_do/parallel_preorder/readme.html
new file mode 100644
index 0000000..727e56a
--- /dev/null
+++ b/examples/parallel_do/parallel_preorder/readme.html
@@ -0,0 +1,444 @@
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
+
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
+
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Parallel_preorder sample</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Parallel_preorder sample</h1>
+	</div>
+	
+	<p>
+		Example that uses parallel_do to do parallel preorder traversal of a sparse graph.
+	<br><br>
+		Each vertex in the graph is called a "cell".  
+		Each cell has a value. 
+		The value is a matrix. 
+		Some of the cells have operators
+		that compute the cell's value, using other cell's values as input.
+		A cell that uses the value of cell x is called a successor of x.
+	<br><br>
+		The algorithm works as follows. 
+		<ol>
+		<li> Compute the set of cells that have no inputs. This set is called <tt>root_set</tt>.
+		<li> Each cell has an associated field <tt>ref_count</tt> that is an atomic integer.
+			 Initialize <tt>ref_count</tt> to the number of inputs for the Cell.
+		<li> Update each cell in <tt>root_set</tt>, by applying a <tt>parallel_do</tt> to a <tt>root_set</tt>
+		<li> After updating a cell, for each of its successors 
+		<ol>
+		<li> Atomically decrement the successor's <tt>ref_count</tt>
+		<li> If the count became zero, add the cell to the set of cells to be updated,
+			 by calling <tt>parallel_do_feeder_impl::add</tt>.
+		</ol>
+		</ol>
+		The times printed are for the traversal and update, 
+		and do not include time for computing the root_set.
+	<br><br>
+		The example is using custom synchronization via <tt>ref_count</tt> atomic variable.
+		Correctness checking tools might not take this into account, and report data races
+		between different tasks that are actually synchronized.
+	<br><br>
+		<b>Note:</b> It is important to understand that this example is unlikely to show speedup 
+		if the cell values are changed to type "float".  The reason is twofold.
+		<ul>
+		<li> The smaller value type causes each Cell to be significantly smaller than a cache line,
+			 which leads to false sharing conflicts.
+		<li> The time to update the cells becomes very small, and consequently the overhead of
+			 parallel_do swamps the useful work.
+		</ul>
+	</p>
+
+	<div class="changes">
+		<div class="h3-alike">System Requirements</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				For the most up to date system requirements, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
+			</p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Files</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="main.cpp">main.cpp</a>
+				<dd>Main program which parses command line options and runs the algorithm with different numbers of threads.
+				<dt><a href="parallel_preorder.cpp">parallel_preorder.cpp</a>
+				<dd>Implementation of the parallel preorder traversal algorithm.
+				<dt><a href="Graph.h">Graph.h</a>
+				<dd>Interfaces of the Graph and Cell classes.
+				<dt><a href="Graph.cpp">Graph.cpp</a>
+				<dd>Implementations of the Graph and Cell classes.
+				<dt><a href="Matrix.h">Matrix.h</a>
+				<dd>The Matrix class definition.
+				<dt><a href="Makefile">Makefile</a>
+				<dd>Makefile for building the example.
+			</dl>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="msvs/">msvs</a>
+				<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).
+				<dt><a href="xcode/">xcode</a>
+				<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).
+			</dl>
+			<p>For information about the minimum supported version of IDE, see <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a></p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Build instructions</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>General build directions can be found <a href="../../index.html">here</a>.</p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Usage</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><tt>parallel_preorder <i>-h</i></tt>
+				<dd>Prints the help for command line options
+				<dt><tt>parallel_preorder [<i>n-of-threads</i>=value] [<i>n-of-nodes</i>=value] [<i>n-of-traversals</i>=value] [<i>silent</i>] </tt>
+				<dt><tt>parallel_preorder [<i>n-of-threads</i> [<i>n-of-nodes</i> [<i>n-of-traversals</i>]]] [<i>silent</i>] </tt> 
+				<dd><i>n-of-threads</i> is the number of threads to use; a range of the form <i>low</i>[:<i>high</i>], where low and optional high are non-negative integers or 'auto' for the TBB default.<br>
+					<i>n-of-nodes</i> is a number of nodes in the graph. Default value is 1000.<br>
+					<i>n-of-traversals</i> is the number of times to evaluate the graph. Default value is 500.<br>
+					<i>silent</i> - no output except elapsed time.<br>
+				<dt>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
+				<dd>Build a <i>debug</i> version of the example
+					(see the <a href="../../index.html">build instructions</a>).
+					<br>Run it with the desired number of threads and smaller number of traversals, e.g., <tt>parallel_preorder 4 1000 5</tt>.
+			</dl>
+		</div>
+	</div>
+	
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>	
+	
+</body>
+</html>
diff --git a/examples/parallel_for/game_of_life/Makefile b/examples/parallel_for/game_of_life/Makefile
index df52391..12768b3 100644
--- a/examples/parallel_for/game_of_life/Makefile
+++ b/examples/parallel_for/game_of_life/Makefile
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # GNU Makefile that builds and runs example.
 run_cmd=
@@ -32,6 +32,8 @@ run_cmd=../../common/android.linux.launcher.sh
 else
 LIBS+= -lrt 
 endif
+else ifeq ($(shell uname), Darwin)
+override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib
 endif
 
 all:	release test
diff --git a/examples/parallel_for/game_of_life/Makefile.windows b/examples/parallel_for/game_of_life/Makefile.windows
index d22cb6f..f3a3083 100644
--- a/examples/parallel_for/game_of_life/Makefile.windows
+++ b/examples/parallel_for/game_of_life/Makefile.windows
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # Common Makefile that builds and runs example.
 
diff --git a/examples/parallel_for/game_of_life/index.html b/examples/parallel_for/game_of_life/index.html
deleted file mode 100644
index 7fb36bd..0000000
--- a/examples/parallel_for/game_of_life/index.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<HTML>
-<BODY>
-
-<H2>Overview</H2>
-The "Game of life" example demonstrates interoperability of TBB and .NET. 
-<br>This program runs 2 simultaneous instances of the classic Conway's "Game of Life". 
-One of these instances uses serial calculations to update the board. The other one calculates in parallel with TBB.
-The visualization is written in managed C++ and uses .NET CLR.
-
-<H2>Source Files</H2>
-<DL>
-<DT><A HREF="src/Form1.h">Form1.h</A>, <A HREF="src/Board.h">Board.h</A>
-<DD>Header files for GUI classes.
-<DT><A HREF="src/Evolution.h">Evolution.h</A>, <A HREF="src/Evolution.cpp">Evolution.cpp</A>
-<DD>Contain class hierarchy to implement game evolution in serial and parallel.
-<DT><A HREF="src/Update_state.cpp">Update_state.cpp </A>
-<DD>Implements 2 approaches for calculating steps in the program: with the use of SSE intrinsics, and ordinary C++ code.
-<DT><A HREF="src/Game_of_life.cpp">Game_of_life.cpp </A>
-<DD>Contains program entry point and other source not related to logical structure of the example.
-<DT><A HREF="Makefile">Makefile</A>
-<DD>Makefile for building example.
-</DL>
-
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="src">src</A>
-<DD>Contains source files mentioned above.
-<DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2010 workspace for building and running the example (Windows* systems only).
-<DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example (OS X* systems only).
-</DL>
-
-<H2>To Build</H2>
-General build directions can be found <A HREF=../../index.html#build>here</A>.
-<P></P>
-
-<H2>Usage</H2>
-<DL>
-For Windows* systems, Microsoft* Visual Studio* projects are provided for each of the above versions. 
-</DL>
-
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
-
diff --git a/examples/parallel_for/game_of_life/msvs/Game_of_life.sln b/examples/parallel_for/game_of_life/msvs/Game_of_life.sln
index 0501236..13a6aa3 100644
--- a/examples/parallel_for/game_of_life/msvs/Game_of_life.sln
+++ b/examples/parallel_for/game_of_life/msvs/Game_of_life.sln
@@ -1,38 +1,38 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Game of Life", "Game_of_life.vcxproj", "{731C7E2E-2766-41D9-96FC-0A3548973803}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug(console)|Win32 = Debug(console)|Win32
-		Debug(console)|x64 = Debug(console)|x64
-		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
-		Release(console)|Win32 = Release(console)|Win32
-		Release(console)|x64 = Release(console)|x64
-		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{731C7E2E-2766-41D9-96FC-0A3548973803}.Debug(console)|Win32.ActiveCfg = Debug(console)|Win32
-		{731C7E2E-2766-41D9-96FC-0A3548973803}.Debug(console)|Win32.Build.0 = Debug(console)|Win32
-		{731C7E2E-2766-41D9-96FC-0A3548973803}.Debug(console)|x64.ActiveCfg = Debug(console)|x64
-		{731C7E2E-2766-41D9-96FC-0A3548973803}.Debug(console)|x64.Build.0 = Debug(console)|x64
-		{731C7E2E-2766-41D9-96FC-0A3548973803}.Debug|Win32.ActiveCfg = Debug|Win32
-		{731C7E2E-2766-41D9-96FC-0A3548973803}.Debug|Win32.Build.0 = Debug|Win32
-		{731C7E2E-2766-41D9-96FC-0A3548973803}.Debug|x64.ActiveCfg = Debug|x64
-		{731C7E2E-2766-41D9-96FC-0A3548973803}.Debug|x64.Build.0 = Debug|x64
-		{731C7E2E-2766-41D9-96FC-0A3548973803}.Release(console)|Win32.ActiveCfg = Release(console)|Win32
-		{731C7E2E-2766-41D9-96FC-0A3548973803}.Release(console)|Win32.Build.0 = Release(console)|Win32
-		{731C7E2E-2766-41D9-96FC-0A3548973803}.Release(console)|x64.ActiveCfg = Release(console)|x64
-		{731C7E2E-2766-41D9-96FC-0A3548973803}.Release(console)|x64.Build.0 = Release(console)|x64
-		{731C7E2E-2766-41D9-96FC-0A3548973803}.Release|Win32.ActiveCfg = Release|Win32
-		{731C7E2E-2766-41D9-96FC-0A3548973803}.Release|Win32.Build.0 = Release|Win32
-		{731C7E2E-2766-41D9-96FC-0A3548973803}.Release|x64.ActiveCfg = Release|x64
-		{731C7E2E-2766-41D9-96FC-0A3548973803}.Release|x64.Build.0 = Release|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Game of Life", "Game_of_life.vcxproj", "{731C7E2E-2766-41D9-96FC-0A3548973803}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug(console)|Win32 = Debug(console)|Win32
+		Debug(console)|x64 = Debug(console)|x64
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release(console)|Win32 = Release(console)|Win32
+		Release(console)|x64 = Release(console)|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{731C7E2E-2766-41D9-96FC-0A3548973803}.Debug(console)|Win32.ActiveCfg = Debug(console)|Win32
+		{731C7E2E-2766-41D9-96FC-0A3548973803}.Debug(console)|Win32.Build.0 = Debug(console)|Win32
+		{731C7E2E-2766-41D9-96FC-0A3548973803}.Debug(console)|x64.ActiveCfg = Debug(console)|x64
+		{731C7E2E-2766-41D9-96FC-0A3548973803}.Debug(console)|x64.Build.0 = Debug(console)|x64
+		{731C7E2E-2766-41D9-96FC-0A3548973803}.Debug|Win32.ActiveCfg = Debug|Win32
+		{731C7E2E-2766-41D9-96FC-0A3548973803}.Debug|Win32.Build.0 = Debug|Win32
+		{731C7E2E-2766-41D9-96FC-0A3548973803}.Debug|x64.ActiveCfg = Debug|x64
+		{731C7E2E-2766-41D9-96FC-0A3548973803}.Debug|x64.Build.0 = Debug|x64
+		{731C7E2E-2766-41D9-96FC-0A3548973803}.Release(console)|Win32.ActiveCfg = Release(console)|Win32
+		{731C7E2E-2766-41D9-96FC-0A3548973803}.Release(console)|Win32.Build.0 = Release(console)|Win32
+		{731C7E2E-2766-41D9-96FC-0A3548973803}.Release(console)|x64.ActiveCfg = Release(console)|x64
+		{731C7E2E-2766-41D9-96FC-0A3548973803}.Release(console)|x64.Build.0 = Release(console)|x64
+		{731C7E2E-2766-41D9-96FC-0A3548973803}.Release|Win32.ActiveCfg = Release|Win32
+		{731C7E2E-2766-41D9-96FC-0A3548973803}.Release|Win32.Build.0 = Release|Win32
+		{731C7E2E-2766-41D9-96FC-0A3548973803}.Release|x64.ActiveCfg = Release|x64
+		{731C7E2E-2766-41D9-96FC-0A3548973803}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/parallel_for/game_of_life/msvs/Game_of_life.vcxproj b/examples/parallel_for/game_of_life/msvs/Game_of_life.vcxproj
index 96da786..5d82469 100644
--- a/examples/parallel_for/game_of_life/msvs/Game_of_life.vcxproj
+++ b/examples/parallel_for/game_of_life/msvs/Game_of_life.vcxproj
@@ -1,443 +1,451 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug(console)|Win32">
-      <Configuration>Debug(console)</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug(console)|x64">
-      <Configuration>Debug(console)</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release(console)|Win32">
-      <Configuration>Release(console)</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release(console)|x64">
-      <Configuration>Release(console)</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>Game of Life</ProjectName>
-    <ProjectGuid>{731C7E2E-2766-41D9-96FC-0A3548973803}</ProjectGuid>
-    <RootNamespace>Game_of_life</RootNamespace>
-    <Keyword>ManagedCProj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release(console)|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <CLRSupport>false</CLRSupport>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug(console)|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <CLRSupport>false</CLRSupport>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>Unicode</CharacterSet>
-    <CLRSupport>true</CLRSupport>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>Unicode</CharacterSet>
-    <CLRSupport>true</CLRSupport>
-    <WholeProgramOptimization>false</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release(console)|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <CLRSupport>false</CLRSupport>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug(console)|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <CLRSupport>false</CLRSupport>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>Unicode</CharacterSet>
-    <CLRSupport>true</CLRSupport>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>Unicode</CharacterSet>
-    <CLRSupport>true</CLRSupport>
-    <WholeProgramOptimization>false</WholeProgramOptimization>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release(console)|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug(console)|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release(console)|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug(console)|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</IgnoreImportLibrary>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</IgnoreImportLibrary>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</IgnoreImportLibrary>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</IgnoreImportLibrary>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug(console)|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug(console)|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug(console)|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug(console)|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug(console)|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug(console)|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release(console)|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release(console)|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release(console)|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release(console)|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release(console)|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release(console)|x64'">false</LinkIncremental>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug(console)|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug(console)|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug(console)|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug(console)|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug(console)|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug(console)|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release(console)|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release(console)|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release(console)|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release(console)|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release(console)|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release(console)|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;USE_SSE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <GenerateXMLDocumentationFiles>false</GenerateXMLDocumentationFiles>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;user32.lib</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AssemblyDebug>true</AssemblyDebug>
-      <SubSystem>Windows</SubSystem>
-      <EntryPointSymbol>main</EntryPointSymbol>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <GenerateXMLDocumentationFiles>false</GenerateXMLDocumentationFiles>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;user32.lib</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AssemblyDebug>true</AssemblyDebug>
-      <SubSystem>Windows</SubSystem>
-      <EntryPointSymbol>main</EntryPointSymbol>
-      <TargetMachine>MachineX64</TargetMachine>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <AdditionalOptions>-S -03
- %(AdditionalOptions)</AdditionalOptions>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;user32.lib</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <EntryPointSymbol>main</EntryPointSymbol>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <AdditionalOptions>-S -03
- %(AdditionalOptions)</AdditionalOptions>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;user32.lib</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <EntryPointSymbol>main</EntryPointSymbol>
-      <TargetMachine>MachineX64</TargetMachine>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug(console)|Win32'">
-    <CustomBuildStep>
-      <Message>
-      </Message>
-    </CustomBuildStep>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;USE_SSE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <ExceptionHandling>Sync</ExceptionHandling>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug(console)|x64'">
-    <CustomBuildStep>
-      <Message>
-      </Message>
-    </CustomBuildStep>
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <ExceptionHandling>Sync</ExceptionHandling>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release(console)|Win32'">
-    <CustomBuildStep>
-      <Message>
-      </Message>
-    </CustomBuildStep>
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;USE_SSE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release(console)|x64'">
-    <CustomBuildStep>
-      <Message>
-      </Message>
-    </CustomBuildStep>
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;USE_SSE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <Reference Include="System">
-      <CopyLocalSatelliteAssemblies>true</CopyLocalSatelliteAssemblies>
-      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
-    </Reference>
-    <Reference Include="System.Data">
-      <CopyLocalSatelliteAssemblies>true</CopyLocalSatelliteAssemblies>
-      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
-    </Reference>
-    <Reference Include="System.Drawing">
-      <CopyLocalSatelliteAssemblies>true</CopyLocalSatelliteAssemblies>
-      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
-    </Reference>
-    <Reference Include="System.Windows.Forms">
-      <CopyLocalSatelliteAssemblies>true</CopyLocalSatelliteAssemblies>
-      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
-    </Reference>
-    <Reference Include="System.Xml">
-      <CopyLocalSatelliteAssemblies>true</CopyLocalSatelliteAssemblies>
-      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
-    </Reference>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="..\src\AssemblyInfo.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug(console)|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug(console)|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release(console)|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release(console)|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\src\Evolution.cpp" />
-    <ClCompile Include="..\src\Game_of_life.cpp" />
-    <ClCompile Include="..\src\Update_state.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\src\Board.h" />
-    <ClInclude Include="..\src\Evolution.h" />
-    <ClInclude Include="..\src\Form1.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="app.ico" />
-  </ItemGroup>
-  <ItemGroup>
-    <ResourceCompile Include="app.rc" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug(console)|Win32">
+      <Configuration>Debug(console)</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug(console)|x64">
+      <Configuration>Debug(console)</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release(console)|Win32">
+      <Configuration>Release(console)</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release(console)|x64">
+      <Configuration>Release(console)</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>Game of Life</ProjectName>
+    <ProjectGuid>{731C7E2E-2766-41D9-96FC-0A3548973803}</ProjectGuid>
+    <RootNamespace>Game_of_life</RootNamespace>
+    <Keyword>ManagedCProj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release(console)|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <CLRSupport>false</CLRSupport>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug(console)|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <CLRSupport>false</CLRSupport>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>Unicode</CharacterSet>
+    <CLRSupport>true</CLRSupport>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>Unicode</CharacterSet>
+    <CLRSupport>true</CLRSupport>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release(console)|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <CLRSupport>false</CLRSupport>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug(console)|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <CLRSupport>false</CLRSupport>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>Unicode</CharacterSet>
+    <CLRSupport>true</CLRSupport>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>Unicode</CharacterSet>
+    <CLRSupport>true</CLRSupport>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release(console)|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug(console)|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release(console)|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug(console)|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</IgnoreImportLibrary>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</IgnoreImportLibrary>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</IgnoreImportLibrary>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</IgnoreImportLibrary>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug(console)|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug(console)|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug(console)|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug(console)|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug(console)|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug(console)|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release(console)|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release(console)|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release(console)|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release(console)|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release(console)|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release(console)|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug(console)|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug(console)|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug(console)|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug(console)|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug(console)|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug(console)|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release(console)|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release(console)|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release(console)|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release(console)|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release(console)|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release(console)|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;USE_SSE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <GenerateXMLDocumentationFiles>false</GenerateXMLDocumentationFiles>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;user32.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AssemblyDebug>true</AssemblyDebug>
+      <SubSystem>Windows</SubSystem>
+      <EntryPointSymbol>main</EntryPointSymbol>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <GenerateXMLDocumentationFiles>false</GenerateXMLDocumentationFiles>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;user32.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AssemblyDebug>true</AssemblyDebug>
+      <SubSystem>Windows</SubSystem>
+      <EntryPointSymbol>main</EntryPointSymbol>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>-S -03
+ %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;user32.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <EntryPointSymbol>main</EntryPointSymbol>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalOptions>-S -03
+ %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;user32.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <EntryPointSymbol>main</EntryPointSymbol>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug(console)|Win32'">
+    <CustomBuildStep>
+      <Message>
+      </Message>
+    </CustomBuildStep>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;USE_SSE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ExceptionHandling>Sync</ExceptionHandling>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug(console)|x64'">
+    <CustomBuildStep>
+      <Message>
+      </Message>
+    </CustomBuildStep>
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ExceptionHandling>Sync</ExceptionHandling>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release(console)|Win32'">
+    <CustomBuildStep>
+      <Message>
+      </Message>
+    </CustomBuildStep>
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;USE_SSE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release(console)|x64'">
+    <CustomBuildStep>
+      <Message>
+      </Message>
+    </CustomBuildStep>
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;USE_SSE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <Reference Include="System">
+      <CopyLocalSatelliteAssemblies>true</CopyLocalSatelliteAssemblies>
+      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
+    </Reference>
+    <Reference Include="System.Data">
+      <CopyLocalSatelliteAssemblies>true</CopyLocalSatelliteAssemblies>
+      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
+    </Reference>
+    <Reference Include="System.Drawing">
+      <CopyLocalSatelliteAssemblies>true</CopyLocalSatelliteAssemblies>
+      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
+    </Reference>
+    <Reference Include="System.Windows.Forms">
+      <CopyLocalSatelliteAssemblies>true</CopyLocalSatelliteAssemblies>
+      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
+    </Reference>
+    <Reference Include="System.Xml">
+      <CopyLocalSatelliteAssemblies>true</CopyLocalSatelliteAssemblies>
+      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\AssemblyInfo.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug(console)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug(console)|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release(console)|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release(console)|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\src\Evolution.cpp" />
+    <ClCompile Include="..\src\Game_of_life.cpp" />
+    <ClCompile Include="..\src\Update_state.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\Board.h" />
+    <ClInclude Include="..\src\Evolution.h" />
+    <ClInclude Include="..\src\Form1.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.ico" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="app.rc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/examples/parallel_for/game_of_life/msvs/resource.h b/examples/parallel_for/game_of_life/msvs/resource.h
index d5ac7c4..ed5152c 100644
--- a/examples/parallel_for/game_of_life/msvs/resource.h
+++ b/examples/parallel_for/game_of_life/msvs/resource.h
@@ -1,3 +1,23 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
 //{{NO_DEPENDENCIES}}
 // Microsoft Visual C++ generated include file.
 // Used by app.rc
diff --git a/examples/parallel_for/game_of_life/readme.html b/examples/parallel_for/game_of_life/readme.html
new file mode 100644
index 0000000..394bfa7
--- /dev/null
+++ b/examples/parallel_for/game_of_life/readme.html
@@ -0,0 +1,392 @@
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
+
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
+
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Game_of_life sample</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Game_of_life sample</h1>
+	</div>
+	
+	<p>
+		The "Game of life" example demonstrates interoperability of Intel® Threading Building Blocks (Intel® TBB) 
+		and Microsoft* .NET*.
+	<br><br>
+		This program runs 2 simultaneous instances of the classic Conway's "Game of Life". 
+		One of these instances uses serial calculations to update the board. The other one calculates in parallel with Intel TBB.
+		The visualization is written in managed C++ and uses .NET CLR.
+	</p>
+
+	<div class="changes">
+		<div class="h3-alike">System Requirements</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				For the most up to date system requirements, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
+			</p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Files</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="src/Form1.h">Form1.h</a>, <a href="src/Board.h">Board.h</a>
+				<dd>Header files for GUI classes.
+				<dt><a href="src/Evolution.h">Evolution.h</a>, <a href="src/Evolution.cpp">Evolution.cpp</a>
+				<dd>Contain class hierarchy to implement game evolution in serial and parallel.
+				<dt><a href="src/Update_state.cpp">Update_state.cpp </a>
+				<dd>Implements 2 approaches for calculating steps in the program: with the use of SSE intrinsics, and ordinary C++ code.
+				<dt><a href="src/Game_of_life.cpp">Game_of_life.cpp </a>
+				<dd>Contains program entry point and other source not related to logical structure of the example.
+				<dt><a href="Makefile">Makefile</a>
+				<dd>Makefile for building the example.
+			</dl>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="src/">src</a>
+				<dd>Contains source files mentioned above.
+				<dt><a href="msvs/">msvs</a>
+				<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).
+				<dt><a href="xcode/">xcode</a>
+				<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).
+			</dl>
+			<p>For information about the minimum supported version of IDE, see <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a></p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Build instructions</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>General build directions can be found <a href="../../index.html">here</a>.</p>
+		</div>
+	</div>
+	
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>	
+	
+</body>
+</html>
diff --git a/examples/parallel_for/game_of_life/src/AssemblyInfo.cpp b/examples/parallel_for/game_of_life/src/AssemblyInfo.cpp
index 7f3c960..d4028a2 100644
--- a/examples/parallel_for/game_of_life/src/AssemblyInfo.cpp
+++ b/examples/parallel_for/game_of_life/src/AssemblyInfo.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 using namespace System;
diff --git a/examples/parallel_for/game_of_life/src/Board.h b/examples/parallel_for/game_of_life/src/Board.h
index aff6b56..3e624e9 100644
--- a/examples/parallel_for/game_of_life/src/Board.h
+++ b/examples/parallel_for/game_of_life/src/Board.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __BOARD_H__ 
diff --git a/examples/parallel_for/game_of_life/src/Evolution.cpp b/examples/parallel_for/game_of_life/src/Evolution.cpp
index 603dcea..f699b7e 100644
--- a/examples/parallel_for/game_of_life/src/Evolution.cpp
+++ b/examples/parallel_for/game_of_life/src/Evolution.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/game_of_life/src/Evolution.h b/examples/parallel_for/game_of_life/src/Evolution.h
index 99280b8..1c96928 100644
--- a/examples/parallel_for/game_of_life/src/Evolution.h
+++ b/examples/parallel_for/game_of_life/src/Evolution.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /** 
diff --git a/examples/parallel_for/game_of_life/src/Form1.h b/examples/parallel_for/game_of_life/src/Form1.h
index 976b053..d487554 100644
--- a/examples/parallel_for/game_of_life/src/Form1.h
+++ b/examples/parallel_for/game_of_life/src/Form1.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 #ifndef _CONSOLE
diff --git a/examples/parallel_for/game_of_life/src/Game_of_life.cpp b/examples/parallel_for/game_of_life/src/Game_of_life.cpp
index 80b86ed..4aaadd7 100644
--- a/examples/parallel_for/game_of_life/src/Game_of_life.cpp
+++ b/examples/parallel_for/game_of_life/src/Game_of_life.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /* 
diff --git a/examples/parallel_for/game_of_life/src/Update_state.cpp b/examples/parallel_for/game_of_life/src/Update_state.cpp
index e640567..3716cb8 100644
--- a/examples/parallel_for/game_of_life/src/Update_state.cpp
+++ b/examples/parallel_for/game_of_life/src/Update_state.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "Evolution.h"
diff --git a/examples/parallel_for/index.html b/examples/parallel_for/index.html
index 8df0cd1..bd6e08f 100644
--- a/examples/parallel_for/index.html
+++ b/examples/parallel_for/index.html
@@ -1,30 +1,350 @@
-<HTML>
-<BODY>
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
 
-<H2>Overview</H2>
-This directory has examples of the template <code>parallel_for</code>.
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
 
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="seismic/index.html">seismic</A>
-<DD>Parallel seismic wave simulation.
-<DT><A HREF="tachyon/index.html">tachyon</A>
-<DD>Parallel 2-D raytracer/renderer.
-<DT><A HREF="polygon_overlay/index.html">polygon_overlay</A>
-<DD>Simple polygon overlay.
-<DT><A HREF="game_of_life/index.html">game_of_life</A>
-<DD>Simple Game of life overlay.
-</DL>
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Samples on parallel_for algorithm</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Samples on <code>parallel_for</code> algorithm</h1>
+	</div>
+	
+	<p>
+		This directory has examples of the <code>parallel_for</code> algorithm.
+	</p>
 
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="seismic/readme.html">seismic</a>
+				<dd>Parallel seismic wave simulation.
+				<dt><a href="tachyon/readme.html">tachyon</a>
+				<dd>Parallel 2-D raytracer/renderer.
+				<dt><a href="polygon_overlay/readme.html">polygon_overlay</a>
+				<dd>Simple polygon overlay.
+				<dt><a href="game_of_life/readme.html">game_of_life</a>
+				<dd>Simple Game of life overlay.
+			</dl>
+		</div>
+	</div>
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information:</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>
+</body>
+</html>
 
diff --git a/examples/parallel_for/polygon_overlay/Makefile b/examples/parallel_for/polygon_overlay/Makefile
index 76ada47..fc7c124 100644
--- a/examples/parallel_for/polygon_overlay/Makefile
+++ b/examples/parallel_for/polygon_overlay/Makefile
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # GNU Makefile that builds and runs example.
 NAME=pover
@@ -38,6 +38,8 @@ SRCFILES = ../../common/gui/$(UI)video.cpp pover_video.cpp polymain.cpp polyover
 
 ifeq ($(shell uname), Linux)
 LIBS+= -lrt 
+else ifeq ($(shell uname), Darwin)
+override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib
 endif
 
 all:	release test
@@ -45,10 +47,10 @@ all:	release test
 resources:
 ifeq ($(UI),mac)
 	mkdir -p $(APPRES)/en.lproj $(NAME).app/Contents/MacOS
-	cp ../../common/gui/xcode/tbbExample/Info.plist $(NAME).app/Contents
+	cp ../../common/gui/xcode/tbbExample/tbbExample-Info.plist $(NAME).app/Contents/Info.plist
 	cp ../../common/gui/xcode/tbbExample/PkgInfo $(NAME).app/Contents
 	cp ../../common/gui/xcode/tbbExample/en.lproj/* $(APPRES)/en.lproj
-endif # OS X*
+endif # macOS*
 
 release: $(SRCFILES) resources
 ifeq ($(compiler),xl)
@@ -57,14 +59,14 @@ ifeq ($(compiler),xl)
 else
 ifeq ($(UI),mac)
 	$(CXX_UI) -O3 -DNDEBUG $(CXXFLAGS) -c $(MACUISOURCES)
-endif # OS X*
+endif # macOS
 	$(CXX) -O3 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) $(MACUIOBJS) -ltbb -ltbbmalloc $(LIBS)
 endif
 
 debug:  $(SRCFILES) resources
 ifeq ($(UI),mac)
 	$(CXX_UI) -g -O0 -DTBB_USE_DEBUG -D_DEBUG $(CXXFLAGS) -c $(MACUISOURCES)
-endif # OS X*
+endif # macOS
 	$(CXX) -g -O0 -DTBB_USE_DEBUG -D_DEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) $(MACUIOBJS) -ltbb_debug -ltbbmalloc_debug $(LIBS)
 
 clean:
diff --git a/examples/parallel_for/polygon_overlay/Makefile.windows b/examples/parallel_for/polygon_overlay/Makefile.windows
index 972d9c1..95b2b9c 100644
--- a/examples/parallel_for/polygon_overlay/Makefile.windows
+++ b/examples/parallel_for/polygon_overlay/Makefile.windows
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # Common Makefile that builds and runs example.
 
diff --git a/examples/parallel_for/polygon_overlay/index.html b/examples/parallel_for/polygon_overlay/index.html
deleted file mode 100644
index 262eaa1..0000000
--- a/examples/parallel_for/polygon_overlay/index.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<HTML>
-<BODY>
-
-<H2>Overview</H2>
-Polygon Overlay example that demonstrates the use of parallel_for.
-<P>
-This example is a simple implementation of polygon overlay, as described in 
-<a href="http://citeseer.ist.psu.edu/cache/papers/cs/11981/ftp:zSzzSzftp.cs.vu.nlzSzpubzSzbalzSzcowichanzSzPolygonzSzreport.pdf/langendoen95parallelizing.pdf">
-	<i>Parallelizing the Polygon Overlay Problem Using Orca</i>, by H.F. Langendoen</a>.
-</P>
-The solution was implemented in three forms:
-<UL>
-	<LI>The naive serial solution.
-	<LI>The naive parallel solution, by splitting list of polygons from one map and intersecting 
-	each sub-list against the entire list of polygons from the second map.
-	<LI>A parallel solution where each map is split into submaps, with each resulting submap being
-	intersected against the corresponding submap from the other map.  This solution requires some
-	redundancy (some polygons are members of more than one submap).  To prevent multiple copies
-	of a polygon from being placed in the solution map, if both polygons are duplicated (that is,
-	if they both appear in more than one map), they are intersected but the result is not placed
-	in the solution map.
-</UL>
-The only optimization in each solution is that the area of the generated sub-polygons are subtracted from
-the original area of one of the source polygons.  When the remaining area is zero, the intersection process
-is halted.
-<P>
-<i>A word about the speedup of the submap case.</i>  One may get superlinear speedup in this case (for instance a 
-laptop with Intel® Core(TM) Duo processor got a speedup of about 20 percent over serial.)  This results from two effects:
-</P>
-<UL>
-	<LI>the number of threads used, and
-	<LI>the fact that for each submap, the number of polygons is smaller than that for the other two cases.
-</UL>
-If there are, say, 400 polygons in each map, then on average the number of intersections calculated is 
-approximately 80,000 (400 * 200, where 200 is the average number of polygons examined before stopping.)  
-If the maps are split into 2 submaps, the time for each submap is about 200*100, or 20,000.  So even
-comparing the two sets of submaps serially should result in a speedup somewhere around 2.  This number 
-is affected by the number of redundant polygons being compared; this effect would eventually swamp the gain
-from comparing smaller numbers of polygons per submap.  And remember the submaps are created by intersecting each
-map with a rectangular polygon covering the submap being generated, which is additional work taking about N * O(400)
-in the case above, where N is the number of submaps generated, that can be done in parallel.
-<P>
-Running the default release pover while varying the number of submaps from 1 to 1000, the speedup on the submap 
-case for a 2-processor system looks like<br>
-<img src="speedup.gif" alt="Table of speedup for the algorithm"><br>
-</P>
-<P>
-One further optimization would be to sort one map, say <b>map1</b>, by maxY, and sort the other map (<b>map2</b>) 
-by minY.  For <b>p1</b> in <b>map1</b>, start testing for intersection at the first <b>p2</b> in <b>map2</b> 
-that intersected the last polygon tested in <b>map1</b>.  This would speed up the intersection process greatly, 
-but the optimization would apply to all the methods, and the sort would have to be accounted for in the timing.
-</P>
-<P>
-The source maps are generated pseudo-randomly in the manner described in the paper above.  That is, if
-we need N polygons, then N "boxes" are chosen at random, then one-at-a-time the areas are expanded in
-one of fours directions until the area hits an adjacent polygon.  When this process is finished, the
-resulting map is inspected and any remaining unoccupied "boxes" are made into additional polygons, as
-large as possible in each case.  So the actual number of polygons in each map will in general be larger
-than the number of polygons requested (sometimes by 10% or more.)
-</P>
-<P>
-One limitation of the program is that if the number of polygons in the source map is greater than the number of
-"boxes" (pixels in the GUI case), the maps cannot be generated.
-</P>
-
-<H2>Files</H2>
-<DL>
-<DT><A HREF="polyover.cpp">polyover.cpp</A>
-<DD>Source code for main program.
-<DT><A HREF="polyover.h">polyover.h</A>
-<DD>Global variables, classes and enums.
-<DT><A HREF="pover_video.cpp">pover_video.cpp</A>
-<DD>Source code for the GUI interface.
-<DT><A HREF="pover_video.h">pover_video.h</A>
-<DD>Defines for the GUI version.
-<DT><A HREF="Makefile">Makefile</A>
-<DD>Makefile for building example.
-</DL>
-
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2010 workspace for building and running the 
-    example (Windows* systems only).<DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example (OS X* 
-    systems only).</DL>
-
-<H2>To Build</H2>
-General build directions can be found <A HREF="../../index.html#build">here</A>.  For the various UI options, see the <A HREF="../../common/index.html">common GUI code</A> build instructions.
-
-<H2>Usage</H2>
-Building via the above make commands, or via Visual Studio projects on Windows* systems, produces executable files
-named pover.exe.  To run these executables directly, use one or more of the following commands.
-<DL>
-<DT><TT>pover.exe</TT>
-<DD>Run this version (release or debug).
-<DT><TT>pover.exe n:m</TT>
-<DD>Run this version (release or debug) (m-n+1) times, with n threads to m threads inclusive.
-<DT>To run a short version of this example, e.g., for use with Intel® Threading Tools:
-<DD>Build a <I>debug</I> version with the GUI turned off
-    (e.g., <TT>make UI=con debug</TT>; see also the build directions above).
-    <BR>Run it with a small dataset, e.g., <TT>pover.exe --polys 10 --size 5x5</TT>.
-</DL>
-
-<H2>Notes</H2>
-<UL>
-<LI>While running with the GUI display should yield reasonable performance in most cases, <I>running with no GUI
-    display is strongly recommended</I> in order to demonstrate the full performance and scalability of the example.
-</UL>
-
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
diff --git a/examples/parallel_for/polygon_overlay/msvs/polygon_overlay.sln b/examples/parallel_for/polygon_overlay/msvs/polygon_overlay.sln
new file mode 100644
index 0000000..4099c44
--- /dev/null
+++ b/examples/parallel_for/polygon_overlay/msvs/polygon_overlay.sln
@@ -0,0 +1,38 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pover", "pover.vcxproj", "{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		_GDIRelease|Win32 = _GDIRelease|Win32
+		_GDIRelease|x64 = _GDIRelease|x64
+		DD Debug|Win32 = DD Debug|Win32
+		DD Debug|x64 = DD Debug|x64
+		DD Release|Win32 = DD Release|Win32
+		DD Release|x64 = DD Release|x64
+		GDIDebug|Win32 = GDIDebug|Win32
+		GDIDebug|x64 = GDIDebug|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}._GDIRelease|Win32.ActiveCfg = Release|Win32
+		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}._GDIRelease|Win32.Build.0 = Release|Win32
+		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}._GDIRelease|x64.ActiveCfg = Release|x64
+		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}._GDIRelease|x64.Build.0 = Release|x64
+		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Debug|Win32.ActiveCfg = DD Debug|Win32
+		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Debug|Win32.Build.0 = DD Debug|Win32
+		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Debug|x64.ActiveCfg = DD Debug|x64
+		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Debug|x64.Build.0 = DD Debug|x64
+		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Release|Win32.ActiveCfg = DD Release|Win32
+		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Release|Win32.Build.0 = DD Release|Win32
+		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Release|x64.ActiveCfg = DD Release|x64
+		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Release|x64.Build.0 = DD Release|x64
+		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDIDebug|Win32.ActiveCfg = Debug|Win32
+		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDIDebug|Win32.Build.0 = Debug|Win32
+		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDIDebug|x64.ActiveCfg = Debug|x64
+		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDIDebug|x64.Build.0 = Debug|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/parallel_for/polygon_overlay/msvs/pover.sln b/examples/parallel_for/polygon_overlay/msvs/pover.sln
deleted file mode 100644
index c1df0ca..0000000
--- a/examples/parallel_for/polygon_overlay/msvs/pover.sln
+++ /dev/null
@@ -1,38 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pover", "pover.vcxproj", "{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		_GDIRelease|Win32 = _GDIRelease|Win32
-		_GDIRelease|x64 = _GDIRelease|x64
-		DD Debug|Win32 = DD Debug|Win32
-		DD Debug|x64 = DD Debug|x64
-		DD Release|Win32 = DD Release|Win32
-		DD Release|x64 = DD Release|x64
-		GDIDebug|Win32 = GDIDebug|Win32
-		GDIDebug|x64 = GDIDebug|x64
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}._GDIRelease|Win32.ActiveCfg = Release|Win32
-		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}._GDIRelease|Win32.Build.0 = Release|Win32
-		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}._GDIRelease|x64.ActiveCfg = Release|x64
-		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}._GDIRelease|x64.Build.0 = Release|x64
-		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Debug|Win32.ActiveCfg = DD Debug|Win32
-		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Debug|Win32.Build.0 = DD Debug|Win32
-		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Debug|x64.ActiveCfg = DD Debug|x64
-		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Debug|x64.Build.0 = DD Debug|x64
-		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Release|Win32.ActiveCfg = DD Release|Win32
-		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Release|Win32.Build.0 = DD Release|Win32
-		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Release|x64.ActiveCfg = DD Release|x64
-		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Release|x64.Build.0 = DD Release|x64
-		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDIDebug|Win32.ActiveCfg = Debug|Win32
-		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDIDebug|Win32.Build.0 = Debug|Win32
-		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDIDebug|x64.ActiveCfg = Debug|x64
-		{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDIDebug|x64.Build.0 = Debug|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
diff --git a/examples/parallel_for/polygon_overlay/msvs/pover.vcxproj b/examples/parallel_for/polygon_overlay/msvs/pover.vcxproj
index 3efcc75..74d158e 100644
--- a/examples/parallel_for/polygon_overlay/msvs/pover.vcxproj
+++ b/examples/parallel_for/polygon_overlay/msvs/pover.vcxproj
@@ -1,440 +1,448 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="DD Debug|Win32">
-      <Configuration>DD Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DD Debug|x64">
-      <Configuration>DD Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DD Release|Win32">
-      <Configuration>DD Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DD Release|x64">
-      <Configuration>DD Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>pover</ProjectName>
-    <ProjectGuid>{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}</ProjectGuid>
-    <RootNamespace>pover</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <Import Project="..\..\..\common\toolset.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DD Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DD Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DD Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DD Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DD Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DD Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DD Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DD Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DD Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DD Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DD Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DD Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DD Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DD Release|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DD Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DD Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DD Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DD Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DD Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DD Debug|x64'">false</LinkIncremental>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DD Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DD Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DD Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DD Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DD Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DD Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DD Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DD Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DD Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DD Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DD Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DD Release|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <Optimization>MaxSpeed</Optimization>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>MaxSpeed</Optimization>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DD Release|Win32'">
-    <PreBuildEvent>
-      <Command>..\..\..\common\gui\dxcheck.bat</Command>
-    </PreBuildEvent>
-    <ClCompile>
-      <Optimization>MaxSpeed</Optimization>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DD Release|x64'">
-    <PreBuildEvent>
-      <Command>..\..\..\common\gui\dxcheck.bat</Command>
-    </PreBuildEvent>
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>MaxSpeed</Optimization>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DD Debug|Win32'">
-    <PreBuildEvent>
-      <Command>..\..\..\common\gui\dxcheck.bat</Command>
-    </PreBuildEvent>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DD Debug|x64'">
-    <PreBuildEvent>
-      <Command>..\..\..\common\gui\dxcheck.bat</Command>
-    </PreBuildEvent>
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\polymain.cpp" />
-    <ClCompile Include="..\polyover.cpp" />
-    <ClCompile Include="..\pover_video.cpp" />
-    <ClCompile Include="..\..\..\common\gui\d2dvideo.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\..\common\gui\gdivideo.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DD Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DD Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DD Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DD Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\polymain.h" />
-    <ClInclude Include="..\polyover.h" />
-    <ClInclude Include="..\pover_global.h" />
-    <ClInclude Include="..\pover_video.h" />
-    <ClInclude Include="..\rpolygon.h" />
-    <ClInclude Include="..\..\..\common\gui\video.h" />
-    <ClInclude Include="..\..\..\common\gui\winvideo.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="..\index.html" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DD Debug|Win32">
+      <Configuration>DD Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DD Debug|x64">
+      <Configuration>DD Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DD Release|Win32">
+      <Configuration>DD Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DD Release|x64">
+      <Configuration>DD Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>pover</ProjectName>
+    <ProjectGuid>{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}</ProjectGuid>
+    <RootNamespace>pover</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DD Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DD Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DD Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DD Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DD Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DD Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DD Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DD Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DD Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DD Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DD Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DD Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DD Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DD Release|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DD Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DD Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DD Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DD Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DD Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DD Debug|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DD Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DD Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DD Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DD Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DD Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DD Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DD Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DD Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DD Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DD Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DD Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DD Release|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DD Release|Win32'">
+    <PreBuildEvent>
+      <Command>..\..\..\common\gui\dxcheck.bat</Command>
+    </PreBuildEvent>
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DD Release|x64'">
+    <PreBuildEvent>
+      <Command>..\..\..\common\gui\dxcheck.bat</Command>
+    </PreBuildEvent>
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DD Debug|Win32'">
+    <PreBuildEvent>
+      <Command>..\..\..\common\gui\dxcheck.bat</Command>
+    </PreBuildEvent>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DD Debug|x64'">
+    <PreBuildEvent>
+      <Command>..\..\..\common\gui\dxcheck.bat</Command>
+    </PreBuildEvent>
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\polymain.cpp" />
+    <ClCompile Include="..\polyover.cpp" />
+    <ClCompile Include="..\pover_video.cpp" />
+    <ClCompile Include="..\..\..\common\gui\d2dvideo.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\..\common\gui\gdivideo.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DD Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DD Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DD Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DD Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\polymain.h" />
+    <ClInclude Include="..\polyover.h" />
+    <ClInclude Include="..\pover_global.h" />
+    <ClInclude Include="..\pover_video.h" />
+    <ClInclude Include="..\rpolygon.h" />
+    <ClInclude Include="..\..\..\common\gui\video.h" />
+    <ClInclude Include="..\..\..\common\gui\winvideo.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\readme.html" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/examples/parallel_for/polygon_overlay/msvs/resource.h b/examples/parallel_for/polygon_overlay/msvs/resource.h
index e70b4ea..af12e9e 100644
--- a/examples/parallel_for/polygon_overlay/msvs/resource.h
+++ b/examples/parallel_for/polygon_overlay/msvs/resource.h
@@ -1,3 +1,23 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
 //{{NO_DEPENDENCIES}}
 // Microsoft Visual C++ generated include file.
 // Used by pover.rc
diff --git a/examples/parallel_for/polygon_overlay/polymain.cpp b/examples/parallel_for/polygon_overlay/polymain.cpp
index 60f8ec4..c7c2125 100644
--- a/examples/parallel_for/polygon_overlay/polymain.cpp
+++ b/examples/parallel_for/polygon_overlay/polymain.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Polygon overlay
diff --git a/examples/parallel_for/polygon_overlay/polymain.h b/examples/parallel_for/polygon_overlay/polymain.h
index 86e4b50..d351bff 100644
--- a/examples/parallel_for/polygon_overlay/polymain.h
+++ b/examples/parallel_for/polygon_overlay/polymain.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "pover_global.h"  // for declaration of DEFINE and INIT
diff --git a/examples/parallel_for/polygon_overlay/polyover.cpp b/examples/parallel_for/polygon_overlay/polyover.cpp
index 8f9c6dd..2ea34a1 100644
--- a/examples/parallel_for/polygon_overlay/polyover.cpp
+++ b/examples/parallel_for/polygon_overlay/polyover.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Polygon overlay
diff --git a/examples/parallel_for/polygon_overlay/polyover.h b/examples/parallel_for/polygon_overlay/polyover.h
index 477f141..d249f12 100644
--- a/examples/parallel_for/polygon_overlay/polyover.h
+++ b/examples/parallel_for/polygon_overlay/polyover.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*!
diff --git a/examples/parallel_for/polygon_overlay/pover_global.h b/examples/parallel_for/polygon_overlay/pover_global.h
index bbf30ff..43f90cc 100644
--- a/examples/parallel_for/polygon_overlay/pover_global.h
+++ b/examples/parallel_for/polygon_overlay/pover_global.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 //
diff --git a/examples/parallel_for/polygon_overlay/pover_video.cpp b/examples/parallel_for/polygon_overlay/pover_video.cpp
index fb1d205..bf24cc8 100644
--- a/examples/parallel_for/polygon_overlay/pover_video.cpp
+++ b/examples/parallel_for/polygon_overlay/pover_video.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Support for GUI display for Polygon overlay demo
diff --git a/examples/parallel_for/polygon_overlay/pover_video.h b/examples/parallel_for/polygon_overlay/pover_video.h
index 7906359..5152bf4 100644
--- a/examples/parallel_for/polygon_overlay/pover_video.h
+++ b/examples/parallel_for/polygon_overlay/pover_video.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // support for GUI for polygon overlay demo
diff --git a/examples/parallel_for/polygon_overlay/readme.html b/examples/parallel_for/polygon_overlay/readme.html
new file mode 100644
index 0000000..3ae5303
--- /dev/null
+++ b/examples/parallel_for/polygon_overlay/readme.html
@@ -0,0 +1,476 @@
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
+
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
+
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Polygon_overlay sample</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Polygon_overlay sample</h1>
+	</div>
+
+	<p>
+		Polygon Overlay example that demonstrates the use of parallel_for.
+	<br><br>
+		This example is a simple implementation of polygon overlay, as described in 
+		<a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.46.9538">
+			<i>Parallelizing the Polygon Overlay Problem Using Orca</i>, by H.F. Langendoen</a>.
+	<br><br>
+		The solution was implemented in three forms:
+		<ul>
+			<li>The naive serial solution.
+			<li>The naive parallel solution, by splitting list of polygons from one map and intersecting 
+			each sub-list against the entire list of polygons from the second map.
+			<li>A parallel solution where each map is split into submaps, with each resulting submap being
+			intersected against the corresponding submap from the other map.  This solution requires some
+			redundancy (some polygons are members of more than one submap).  To prevent multiple copies
+			of a polygon from being placed in the solution map, if both polygons are duplicated (that is,
+			if they both appear in more than one map), they are intersected but the result is not placed
+			in the solution map.
+		</ul>
+		The only optimization in each solution is that the area of the generated sub-polygons are subtracted from
+		the original area of one of the source polygons.  When the remaining area is zero, the intersection process
+		is halted.
+	<br><br>
+		<i>A word about the speedup of the submap case.</i> One may get superlinear speedup in this case (for instance a 
+		laptop with Intel® Core(TM) Duo processor got a speedup of about 20 percent over serial.)  This results from two effects:
+		<ul>
+			<li>the number of threads used, and
+			<li>the fact that for each submap, the number of polygons is smaller than that for the other two cases.
+		</ul>
+		If there are, say, 400 polygons in each map, then on average the number of intersections calculated is 
+		approximately 80,000 (400 * 200, where 200 is the average number of polygons examined before stopping.)  
+		If the maps are split into 2 submaps, the time for each submap is about 200*100, or 20,000.  So even
+		comparing the two sets of submaps serially should result in a speedup somewhere around 2.  This number 
+		is affected by the number of redundant polygons being compared; this effect would eventually swamp the gain
+		from comparing smaller numbers of polygons per submap.  And remember the submaps are created by intersecting each
+		map with a rectangular polygon covering the submap being generated, which is additional work taking about N * O(400)
+		in the case above, where N is the number of submaps generated, that can be done in parallel.
+	<br><br>
+		Running the default release pover while varying the number of submaps from 1 to 1000, the speedup on the submap 
+		case for a 2-processor system looks like
+	<br><br>
+		<img src="speedup.gif" alt="Table of speedup for the algorithm">
+	<br><br>
+		One further optimization would be to sort one map, say <b>map1</b>, by maxY, and sort the other map (<b>map2</b>) 
+		by minY.  For <b>p1</b> in <b>map1</b>, start testing for intersection at the first <b>p2</b> in <b>map2</b> 
+		that intersected the last polygon tested in <b>map1</b>.  This would speed up the intersection process greatly, 
+		but the optimization would apply to all the methods, and the sort would have to be accounted for in the timing.
+	<br><br>
+		The source maps are generated pseudo-randomly in the manner described in the paper above.  That is, if
+		we need N polygons, then N "boxes" are chosen at random, then one-at-a-time the areas are expanded in
+		one of fours directions until the area hits an adjacent polygon.  When this process is finished, the
+		resulting map is inspected and any remaining unoccupied "boxes" are made into additional polygons, as
+		large as possible in each case.  So the actual number of polygons in each map will in general be larger
+		than the number of polygons requested (sometimes by 10% or more.)
+	<br><br>
+		One limitation of the program is that if the number of polygons in the source map is greater than the number of
+		"boxes" (pixels in the GUI case), the maps cannot be generated.
+	</p>
+	
+	<div class="changes">
+		<div class="h3-alike">System Requirements</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				For the most up to date system requirements, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
+			</p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Files</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="polyover.cpp">polyover.cpp</a>
+				<dd>Source code for main program.
+				<dt><a href="polyover.h">polyover.h</a>
+				<dd>Global variables, classes and enums.
+				<dt><a href="pover_video.cpp">pover_video.cpp</a>
+				<dd>Source code for the GUI interface.
+				<dt><a href="pover_video.h">pover_video.h</a>
+				<dd>Defines for the GUI version.
+				<dt><a href="Makefile">Makefile</a>
+				<dd>Makefile for building the example.
+			</dl>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="msvs/">msvs</a>
+				<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).
+				<dt><a href="xcode/">xcode</a>
+				<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).
+			</dl>
+			<p>For information about the minimum supported version of IDE, see <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a></p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Build instructions</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>
+				General build directions can be found <a href="../../index.html">here</a>.
+			<br><br>
+				For the various UI options, see the <a href="../../common/index.html">common GUI code</a> build instructions.
+			</p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Usage</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>
+				Building via the above make commands, or via Microsoft* Visual Studio* projects on Windows* systems, produces executable files
+				named pover.exe.  To run these executables directly, use one or more of the following commands:
+			</p>
+			<dl>
+				<dt><tt>pover.exe</tt>
+				<dd>Run this version (release or debug).
+				<dt><tt>pover.exe n:m</tt>
+				<dd>Run this version (release or debug) (m-n+1) times, with n threads to m threads inclusive.
+				<dt>To run a short version of this example, e.g., for use with Intel® Threading Tools:
+				<dd>Build a <i>debug</i> version with the GUI turned off
+					(e.g., <tt>make UI=con debug</tt>; see also the build directions above).
+					<br>Run it with a small dataset, e.g., <tt>pover.exe --polys 10 --size 5x5</tt>.
+			</dl>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Notes</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<ul>
+			<li>While running with the GUI display should yield reasonable performance in most cases, <i>running with no GUI
+				display is strongly recommended</i> in order to demonstrate the full performance and scalability of the example.
+			</ul>
+		</div>
+	</div>
+	
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel, Intel Core and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>	
+	
+</body>
+</html>
diff --git a/examples/parallel_for/polygon_overlay/rpolygon.h b/examples/parallel_for/polygon_overlay/rpolygon.h
index f34ab7d..228701c 100644
--- a/examples/parallel_for/polygon_overlay/rpolygon.h
+++ b/examples/parallel_for/polygon_overlay/rpolygon.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // rpolygon.h
diff --git a/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/project.pbxproj b/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/project.pbxproj
index 4ada999..1b4eca9 100644
--- a/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/project.pbxproj
+++ b/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/project.pbxproj
@@ -7,8 +7,6 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
-		84011603152CB4AD00B07E4D /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 84011602152CB4AD00B07E4D /* libtbbmalloc.dylib */; };
-		84B8DA19152C9AC600D59B95 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 84B8DA13152C9AC600D59B95 /* libtbb.dylib */; };
 		84B8DA77152CA90100D59B95 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA6F152CA90100D59B95 /* main.m */; };
 		84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; };
 		84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; };
@@ -21,11 +19,23 @@
 		84B8DAAE152CB05200D59B95 /* pover_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DAA9152CB05200D59B95 /* pover_video.cpp */; };
 		84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D017551527431F0008A4E0 /* Cocoa.framework */; };
 		84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D01775152744BD0008A4E0 /* OpenGL.framework */; };
+		D31F32621C11DEE000A77D54 /* polymain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DAA4152CB05200D59B95 /* polymain.cpp */; };
+		D31F32631C11DEE300A77D54 /* polyover.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DAA6152CB05200D59B95 /* polyover.cpp */; };
+		D31F32641C11DEE700A77D54 /* pover_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DAA9152CB05200D59B95 /* pover_video.cpp */; };
+		D31F32651C11DEEC00A77D54 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; };
+		D31F32661C11DEF000A77D54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA6F152CA90100D59B95 /* main.m */; };
+		D31F32671C11DEF300A77D54 /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; };
+		D31F32681C11DEF600A77D54 /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; };
+		D31F326B1C11DF6000A77D54 /* iOS.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D31F32691C11DF1600A77D54 /* iOS.storyboard */; };
+		D31F32881C12DFFA00A77D54 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F326C1C11DF7C00A77D54 /* libtbb.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };
+		D31F32891C12E00100A77D54 /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F326D1C11DF7C00A77D54 /* libtbbmalloc.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };
+		D31F328A1C12E07100A77D54 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F32821C12DFDD00A77D54 /* libtbb.dylib */; };
+		D31F328B1C12E07100A77D54 /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F32831C12DFDD00A77D54 /* libtbbmalloc.dylib */; };
+		D31F328C1C12E08200A77D54 /* libtbb.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D31F32821C12DFDD00A77D54 /* libtbb.dylib */; };
+		D31F328D1C12E08900A77D54 /* libtbbmalloc.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D31F32831C12DFDD00A77D54 /* libtbbmalloc.dylib */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXFileReference section */
-		84011602152CB4AD00B07E4D /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = ../../../../lib/libtbbmalloc.dylib; sourceTree = "<group>"; };
-		84B8DA13152C9AC600D59B95 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = "<group>"; };
 		84B8DA6F152CA90100D59B95 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../../../common/gui/xcode/tbbExample/main.m; sourceTree = "<group>"; };
 		84B8DA70152CA90100D59B95 /* OpenGLView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenGLView.h; path = ../../../common/gui/xcode/tbbExample/OpenGLView.h; sourceTree = "<group>"; };
 		84B8DA71152CA90100D59B95 /* OpenGLView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OpenGLView.m; path = ../../../common/gui/xcode/tbbExample/OpenGLView.m; sourceTree = "<group>"; };
@@ -49,6 +59,12 @@
 		84D017591527431F0008A4E0 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
 		84D0175A1527431F0008A4E0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
 		84D01775152744BD0008A4E0 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
+		D31F324B1C11DEC100A77D54 /* tbbExample.ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tbbExample.ios.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		D31F32691C11DF1600A77D54 /* iOS.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = iOS.storyboard; path = ../iOS.storyboard; sourceTree = "<group>"; };
+		D31F326C1C11DF7C00A77D54 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = "<group>"; };
+		D31F326D1C11DF7C00A77D54 /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = ../../../../lib/libtbbmalloc.dylib; sourceTree = "<group>"; };
+		D31F32821C12DFDD00A77D54 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/ios/libtbb.dylib; sourceTree = "<group>"; };
+		D31F32831C12DFDD00A77D54 /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = ../../../../lib/ios/libtbbmalloc.dylib; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -57,9 +73,18 @@
 			buildActionMask = 2147483647;
 			files = (
 				84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */,
+				D31F32891C12E00100A77D54 /* libtbbmalloc.dylib in Frameworks */,
 				84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */,
-				84B8DA19152C9AC600D59B95 /* libtbb.dylib in Frameworks */,
-				84011603152CB4AD00B07E4D /* libtbbmalloc.dylib in Frameworks */,
+				D31F32881C12DFFA00A77D54 /* libtbb.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		D31F32481C11DEC100A77D54 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D31F328A1C12E07100A77D54 /* libtbb.dylib in Frameworks */,
+				D31F328B1C12E07100A77D54 /* libtbbmalloc.dylib in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -86,6 +111,7 @@
 		84B8DA7B152CA97B00D59B95 /* Resources */ = {
 			isa = PBXGroup;
 			children = (
+				D31F32691C11DF1600A77D54 /* iOS.storyboard */,
 				84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */,
 				84B8DA7E152CA97B00D59B95 /* MainMenu.xib */,
 			);
@@ -120,6 +146,7 @@
 			isa = PBXGroup;
 			children = (
 				84D017511527431F0008A4E0 /* tbbExample.app */,
+				D31F324B1C11DEC100A77D54 /* tbbExample.ios.app */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -127,6 +154,10 @@
 		84D017541527431F0008A4E0 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				D31F326C1C11DF7C00A77D54 /* libtbb.dylib */,
+				D31F326D1C11DF7C00A77D54 /* libtbbmalloc.dylib */,
+				D31F32821C12DFDD00A77D54 /* libtbb.dylib */,
+				D31F32831C12DFDD00A77D54 /* libtbbmalloc.dylib */,
 				84D01775152744BD0008A4E0 /* OpenGL.framework */,
 				84D017551527431F0008A4E0 /* Cocoa.framework */,
 				84D017571527431F0008A4E0 /* Other Frameworks */,
@@ -137,8 +168,6 @@
 		84D017571527431F0008A4E0 /* Other Frameworks */ = {
 			isa = PBXGroup;
 			children = (
-				84011602152CB4AD00B07E4D /* libtbbmalloc.dylib */,
-				84B8DA13152C9AC600D59B95 /* libtbb.dylib */,
 				84D017581527431F0008A4E0 /* AppKit.framework */,
 				84D017591527431F0008A4E0 /* CoreData.framework */,
 				84D0175A1527431F0008A4E0 /* Foundation.framework */,
@@ -166,6 +195,23 @@
 			productReference = 84D017511527431F0008A4E0 /* tbbExample.app */;
 			productType = "com.apple.product-type.application";
 		};
+		D31F324A1C11DEC100A77D54 /* tbbExample.ios */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = D31F325F1C11DEC100A77D54 /* Build configuration list for PBXNativeTarget "tbbExample.ios" */;
+			buildPhases = (
+				D31F32471C11DEC100A77D54 /* Sources */,
+				D31F32481C11DEC100A77D54 /* Frameworks */,
+				D31F32491C11DEC100A77D54 /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = tbbExample.ios;
+			productName = tbbExample.ios;
+			productReference = D31F324B1C11DEC100A77D54 /* tbbExample.ios.app */;
+			productType = "com.apple.product-type.application";
+		};
 /* End PBXNativeTarget section */
 
 /* Begin PBXProject section */
@@ -173,7 +219,13 @@
 			isa = PBXProject;
 			attributes = {
 				CLASSPREFIX = tbb;
-				LastUpgradeCheck = 0430;
+				LastUpgradeCheck = 0710;
+				TargetAttributes = {
+					D31F324A1C11DEC100A77D54 = {
+						CreatedOnToolsVersion = 7.1.1;
+						DevelopmentTeam = 7J8M3RM94C;
+					};
+				};
 			};
 			buildConfigurationList = 84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "polygon_overlay" */;
 			compatibilityVersion = "Xcode 3.2";
@@ -181,6 +233,7 @@
 			hasScannedForEncodings = 0;
 			knownRegions = (
 				en,
+				Base,
 			);
 			mainGroup = 84D017461527431F0008A4E0;
 			productRefGroup = 84D017521527431F0008A4E0 /* Products */;
@@ -188,6 +241,7 @@
 			projectRoot = "";
 			targets = (
 				84D017501527431F0008A4E0 /* tbbExample */,
+				D31F324A1C11DEC100A77D54 /* tbbExample.ios */,
 			);
 		};
 /* End PBXProject section */
@@ -203,6 +257,16 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
+		D31F32491C11DEC100A77D54 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D31F328D1C12E08900A77D54 /* libtbbmalloc.dylib in Resources */,
+				D31F328C1C12E08200A77D54 /* libtbb.dylib in Resources */,
+				D31F326B1C11DF6000A77D54 /* iOS.storyboard in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 /* End PBXResourcesBuildPhase section */
 
 /* Begin PBXSourcesBuildPhase section */
@@ -220,6 +284,20 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
+		D31F32471C11DEC100A77D54 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D31F32641C11DEE700A77D54 /* pover_video.cpp in Sources */,
+				D31F32631C11DEE300A77D54 /* polyover.cpp in Sources */,
+				D31F32651C11DEEC00A77D54 /* macvideo.cpp in Sources */,
+				D31F32681C11DEF600A77D54 /* tbbAppDelegate.m in Sources */,
+				D31F32621C11DEE000A77D54 /* polymain.cpp in Sources */,
+				D31F32661C11DEF000A77D54 /* main.m in Sources */,
+				D31F32671C11DEF300A77D54 /* OpenGLView.m in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 /* End PBXSourcesBuildPhase section */
 
 /* Begin PBXVariantGroup section */
@@ -246,12 +324,21 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = YES;
-				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
 				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				COPY_PHASE_STRIP = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_PREPROCESSOR_DEFINITIONS = (
 					"DEBUG=1",
@@ -261,9 +348,10 @@
 				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
 				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				MACOSX_DEPLOYMENT_TARGET = 10.7;
 				ONLY_ACTIVE_ARCH = YES;
 				SDKROOT = macosx;
 			};
@@ -273,18 +361,27 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = YES;
-				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
 				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				COPY_PHASE_STRIP = YES;
 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
 				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				MACOSX_DEPLOYMENT_TARGET = 10.7;
 				SDKROOT = macosx;
 			};
 			name = Release;
@@ -293,6 +390,8 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				CLANG_ENABLE_OBJC_ARC = NO;
+				COMBINE_HIDPI_IMAGES = YES;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
 				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
@@ -311,6 +410,8 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				CLANG_ENABLE_OBJC_ARC = NO;
+				COMBINE_HIDPI_IMAGES = YES;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
 				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
@@ -328,6 +429,68 @@
 			};
 			name = Release;
 		};
+		D31F32601C11DEC100A77D54 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD)";
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+					"__TBB_IOS=1",
+				);
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist";
+				IPHONEOS_DEPLOYMENT_TARGET = 9.1;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path";
+				LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib/ios\"";
+				MTL_ENABLE_DEBUG_INFO = YES;
+				PRODUCT_BUNDLE_IDENTIFIER = com.tbb.example;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = 1;
+			};
+			name = Debug;
+		};
+		D31F32611C11DEC100A77D54 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD)";
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				ENABLE_NS_ASSERTIONS = NO;
+				GCC_PREPROCESSOR_DEFINITIONS = "__TBB_IOS=1";
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist";
+				IPHONEOS_DEPLOYMENT_TARGET = 9.1;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path";
+				LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib/ios\"";
+				MTL_ENABLE_DEBUG_INFO = NO;
+				PRODUCT_BUNDLE_IDENTIFIER = com.tbb.example;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = 1;
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
 /* End XCBuildConfiguration section */
 
 /* Begin XCConfigurationList section */
@@ -349,6 +512,15 @@
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
+		D31F325F1C11DEC100A77D54 /* Build configuration list for PBXNativeTarget "tbbExample.ios" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				D31F32601C11DEC100A77D54 /* Debug */,
+				D31F32611C11DEC100A77D54 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
 /* End XCConfigurationList section */
 	};
 	rootObject = 84D017481527431F0008A4E0 /* Project object */;
diff --git a/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/xcshareddata/xcschemes/tbbExample.ios.xcscheme b/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/xcshareddata/xcschemes/tbbExample.ios.xcscheme
new file mode 100644
index 0000000..5516b61
--- /dev/null
+++ b/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/xcshareddata/xcschemes/tbbExample.ios.xcscheme
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "0710"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "D31F324A1C11DEC100A77D54"
+               BuildableName = "tbbExample.ios.app"
+               BlueprintName = "tbbExample.ios"
+               ReferencedContainer = "container:polygon_overlay.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "D31F324A1C11DEC100A77D54"
+            BuildableName = "tbbExample.ios.app"
+            BlueprintName = "tbbExample.ios"
+            ReferencedContainer = "container:polygon_overlay.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "D31F324A1C11DEC100A77D54"
+            BuildableName = "tbbExample.ios.app"
+            BlueprintName = "tbbExample.ios"
+            ReferencedContainer = "container:polygon_overlay.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "D31F324A1C11DEC100A77D54"
+            BuildableName = "tbbExample.ios.app"
+            BlueprintName = "tbbExample.ios"
+            ReferencedContainer = "container:polygon_overlay.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>
diff --git a/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme b/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme
index 37d4ac6..5c1312f 100644
--- a/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme
+++ b/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
+   LastUpgradeVersion = "0710"
    version = "1.3">
    <BuildAction
       parallelizeBuildables = "YES"
@@ -22,10 +23,10 @@
       </BuildActionEntries>
    </BuildAction>
    <TestAction
+      buildConfiguration = "Debug"
       selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
+      shouldUseLaunchSchemeArgsEnv = "YES">
       <Testables>
       </Testables>
       <MacroExpansion>
@@ -37,18 +38,22 @@
             ReferencedContainer = "container:polygon_overlay.xcodeproj">
          </BuildableReference>
       </MacroExpansion>
+      <AdditionalOptions>
+      </AdditionalOptions>
    </TestAction>
    <LaunchAction
+      buildConfiguration = "Debug"
       selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
       launchStyle = "0"
       useCustomWorkingDirectory = "NO"
       customWorkingDirectory = "/tmp"
-      buildConfiguration = "Debug"
       ignoresPersistentStateOnLaunch = "NO"
       debugDocumentVersioning = "NO"
+      debugServiceExtension = "internal"
       allowLocationSimulation = "YES">
-      <BuildableProductRunnable>
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
          <BuildableReference
             BuildableIdentifier = "primary"
             BlueprintIdentifier = "84D017501527431F0008A4E0"
@@ -68,12 +73,13 @@
       </AdditionalOptions>
    </LaunchAction>
    <ProfileAction
+      buildConfiguration = "Release"
       shouldUseLaunchSchemeArgsEnv = "YES"
       savedToolIdentifier = ""
       useCustomWorkingDirectory = "NO"
-      buildConfiguration = "Release"
       debugDocumentVersioning = "YES">
-      <BuildableProductRunnable>
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
          <BuildableReference
             BuildableIdentifier = "primary"
             BlueprintIdentifier = "84D017501527431F0008A4E0"
diff --git a/examples/parallel_for/seismic/Makefile b/examples/parallel_for/seismic/Makefile
index e406ee5..53ec0ca 100644
--- a/examples/parallel_for/seismic/Makefile
+++ b/examples/parallel_for/seismic/Makefile
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # GNU Makefile that builds and runs example.
 NAME=seismic
@@ -48,6 +48,8 @@ override CXXFLAGS += $(UI_CXXFLAGS)
 
 ifeq ($(shell uname), Linux)
 LIBS+= -lrt 
+else ifeq ($(shell uname), Darwin)
+override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib
 endif
 
 all:	release test
@@ -55,21 +57,21 @@ all:	release test
 resources:
 ifeq ($(UI),mac)
 	mkdir -p $(APPRES)/en.lproj $(NAME).app/Contents/MacOS
-	cp ../../common/gui/xcode/tbbExample/Info.plist $(NAME).app/Contents
+	cp ../../common/gui/xcode/tbbExample/tbbExample-Info.plist $(NAME).app/Contents/Info.plist
 	cp ../../common/gui/xcode/tbbExample/PkgInfo $(NAME).app/Contents
 	cp ../../common/gui/xcode/tbbExample/en.lproj/* $(APPRES)/en.lproj
-endif # OS X*
+endif # macOS*
 
 release: resources
 ifeq ($(UI),mac)
 	$(CXX_UI) -O2 -DNDEBUG $(CXXFLAGS) -c $(MACUISOURCES)
-endif # OS X*
+endif # macOS
 	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) $(MACUIOBJS) $(TBBLIB) $(LIBS)
 
 debug: resources
 ifeq ($(UI),mac)
 	$(CXX_UI) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -c $(MACUISOURCES)
-endif # OS X*
+endif # macOS
 	$(CXX) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) $(MACUIOBJS) $(TBBLIB_DEBUG) $(LIBS)
 
 clean:
diff --git a/examples/parallel_for/seismic/Makefile.windows b/examples/parallel_for/seismic/Makefile.windows
index 61b431c..9e4559d 100644
--- a/examples/parallel_for/seismic/Makefile.windows
+++ b/examples/parallel_for/seismic/Makefile.windows
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # Common Makefile that builds and runs example.
 
diff --git a/examples/parallel_for/seismic/index.html b/examples/parallel_for/seismic/index.html
deleted file mode 100644
index f7646cb..0000000
--- a/examples/parallel_for/seismic/index.html
+++ /dev/null
@@ -1,112 +0,0 @@
-<HTML>
-<BODY>
-
-<H2>Overview</H2>
-<DL>
-<DT>Parallel seismic wave simulation that demonstrates use of parallel_for and affinity_partitioner.
-<DT>The example can be built in the offload version to run on Intel&reg Many Integrated Core (Intel&reg MIC) Architecture based coprocessor (see <A HREF=../../index.html#build_4>build instructions</A>).
-NOTE: Currently, the offload version does not support GUI and can only be used with console mode.
-</DL>
-
-<H2>Files</H2>
-<DL>
-<DT><A HREF="main.cpp">main.cpp</A>
-<DD>Main program which parses command line options and runs the algorithm with different numbers of threads.
-<DT><A HREF="universe.h">universe.h</A>
-<DD>Wave propagation methods interface.
-<DT><A HREF="universe.cpp">universe.cpp</A>
-<DD>Wave propagation methods implementation.
-<DT><A HREF="seismic_video.h">seismic_video.h</A>
-<DD>GUI mode support interface.
-<DT><A HREF="seismic_video.cpp">seismic_video.cpp</A>
-<DD>GUI mode support implementation.
-<DT><A HREF="Makefile">Makefile</A>
-<DD>Makefile for building example.
-</DL>
-
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2010 workspace for building and running the 
-    example (Windows* systems only).<DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example (OS X* 
-    systems only).</DL>
-
-<H2>To Build</H2>
-General build directions can be found <A HREF=../../index.html#build>here</A>.
-The following additional options are supported:
-<DL>
-<DT><TT>make [(general targets: {release, debug} [test])] UI={con, gdi, d2d, x, mac}</TT>
-<DD>Build and run as usual, but build with the specified GUI driver: console, GDI+*,  
-    Direct2D*, X11, or OpenGL*
-    (see the description of the <A HREF=../../common/index.html>common GUI code</A>
-    for more information on available graphics support).
-    For Linux* and OS X* systems, the best available driver is detected automatically by the Makefile.
-    For Windows* systems, UI=gdi is the default GUI driver; compiling with UI=d2d may offer superior
-    performance, but can only be used if the Microsoft* DirectX* SDK is installed on your system 
-    and if overlay is supported by your graphics card.
-    Use UI=con to build without the GUI for use in making performance measurements
-    <I>(strongly recommended when measuring performance or scalability; see note below)</I>.
-<DT><TT>make [(above options or targets)] XARCH=x64</TT>
-<DD>Build and run as above, but also specify XARCH=x64
-    (or XARCH=AMD64 for older compilers) when building the example on Windows* as a 64-bit binary.
-<DT><TT>make [(above options or targets)] DDLIB_DIR=<<I>specify path to library directory of Direct Draw* SDK here</I>></TT>
-<DD>If you experience ddraw.lib linking problems, specify the correct library directory via this option.
-<DT><TT>make [(above options or targets)] CXXFLAGS=-DX_FULLSYNC</TT>
-<DD>Build and run as above, but enable full X11 synchronization if you experience "tearing" of motion on slower video systems.
-</DL>
-
-<H2>Usage</H2>
-<DL>
-<DT><TT>seismic <I>-h</I></TT>
-<DD>Prints the help for command line options
-<DT><TT>seismic [<I>n-of-threads</I>=value] [<I>n-of-frames</I>=value] [<I>silent</I>] [<I>serial</I>]</TT>
-<DT><TT>seismic [<I>n-of-threads</I> [<I>n-of-frames</I>]] [<I>silent</I>] [<I>serial</I>]</TT>
-<DD><I>n-of-threads</I> is the number of threads to use; a range of the form low[:high], where low and optional high are non-negative integers or 'auto' for the TBB default.<BR>
-    <I>n-of-frames</I> is a number of frames the example processes internally.<BR>
-    <I>silent</I> - no output except elapsed time.<BR>
-    <I>serial</I> - in GUI mode start with serial version of algorithm.<BR>
-
-<DT>To run a short version of this example, e.g., for use with Intel® Parallel Inspector::
-<DD>Build a <I>debug</I> version of the example
-    (see the <A HREF=../../index.html#build>build directions</A>).
-    <BR>Run it with the desired number of threads and smaller number of frames, e.g., <TT>seismic 4 5</TT>.
-</DL>
-
-<H2>Hot keys</H2>
-The following hot keys can be used in interactive execution mode when the example is compiled with the graphical
-user interface:
-<DL>
-<dt><left mouse button>
-<dd>Starts new seismic wave in place specified by mouse cursor.
-<dt><space>
-<dd>Toggles between parallel and serial execution modes.
-<dt><p>
-<dd>Enables parallel execution mode.
-<dt><s>
-<dd>Enables serial execution mode.
-<dt><e>
-<dd>Enables screen updates.
-<dt><d>
-<dd>Disables screen updates <I>(strongly recommended when measuring performance or scalability; see note below)</I>.
-<dt><esc>
-<dd>Stops execution.
-</DL>
-
-<H2>Notes</H2>
-<UL>
-<LI>While running with the GUI display turned on should yield reasonable performance in most cases, <I>running with the GUI
-    display turned off is strongly recommended</I> in order to demonstrate the full performance and scalability of the example.
-</UL>
-
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
diff --git a/examples/parallel_for/seismic/main.cpp b/examples/parallel_for/seismic/main.cpp
index f776a6d..5d88af6 100644
--- a/examples/parallel_for/seismic/main.cpp
+++ b/examples/parallel_for/seismic/main.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #define VIDEO_WINMAIN_ARGS
diff --git a/examples/parallel_for/seismic/msvs/SeismicSimulation.sln b/examples/parallel_for/seismic/msvs/SeismicSimulation.sln
deleted file mode 100644
index 6f3eac0..0000000
--- a/examples/parallel_for/seismic/msvs/SeismicSimulation.sln
+++ /dev/null
@@ -1,38 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SeismicSimulation", "SeismicSimulation.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A2527}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		_GDIRelease|Win32 = _GDIRelease|Win32
-		_GDIRelease|x64 = _GDIRelease|x64
-		DDDebug|Win32 = DDDebug|Win32
-		DDDebug|x64 = DDDebug|x64
-		DDRelease|Win32 = DDRelease|Win32
-		DDRelease|x64 = DDRelease|x64
-		GDIDebug|Win32 = GDIDebug|Win32
-		GDIDebug|x64 = GDIDebug|x64
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|Win32.ActiveCfg = Release|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|Win32.Build.0 = Release|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|x64.ActiveCfg = Release|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|x64.Build.0 = Release|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|Win32.ActiveCfg = DDDebug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|Win32.Build.0 = DDDebug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|x64.ActiveCfg = DDDebug|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|x64.Build.0 = DDDebug|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|Win32.ActiveCfg = DDRelease|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|Win32.Build.0 = DDRelease|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|x64.ActiveCfg = DDRelease|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|x64.Build.0 = DDRelease|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|Win32.ActiveCfg = Debug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|Win32.Build.0 = Debug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|x64.ActiveCfg = Debug|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|x64.Build.0 = Debug|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
diff --git a/examples/parallel_for/seismic/msvs/SeismicSimulation.vcxproj b/examples/parallel_for/seismic/msvs/SeismicSimulation.vcxproj
index 489975b..2dc098f 100644
--- a/examples/parallel_for/seismic/msvs/SeismicSimulation.vcxproj
+++ b/examples/parallel_for/seismic/msvs/SeismicSimulation.vcxproj
@@ -1,443 +1,451 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="DDDebug|Win32">
-      <Configuration>DDDebug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DDDebug|x64">
-      <Configuration>DDDebug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DDRelease|Win32">
-      <Configuration>DDRelease</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DDRelease|x64">
-      <Configuration>DDRelease</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>SeismicSimulation</ProjectName>
-    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A2527}</ProjectGuid>
-    <RootNamespace>SeismicSimulation</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <Import Project="..\..\..\common\toolset.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">false</LinkIncremental>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <Optimization>MaxSpeed</Optimization>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>MaxSpeed</Optimization>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">
-    <PreBuildEvent>
-      <Command>..\..\..\common\gui\dxcheck.bat</Command>
-    </PreBuildEvent>
-    <ClCompile>
-      <Optimization>MaxSpeed</Optimization>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">
-    <PreBuildEvent>
-      <Command>..\..\..\common\gui\dxcheck.bat</Command>
-    </PreBuildEvent>
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>MaxSpeed</Optimization>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">
-    <PreBuildEvent>
-      <Command>..\..\..\common\gui\dxcheck.bat</Command>
-    </PreBuildEvent>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">
-    <PreBuildEvent>
-      <Command>..\..\..\common\gui\dxcheck.bat</Command>
-    </PreBuildEvent>
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\main.cpp" />
-    <ClCompile Include="..\seismic_video.cpp" />
-    <ClCompile Include="..\universe.cpp" />
-    <ClCompile Include="..\..\..\common\gui\d2dvideo.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\..\common\gui\gdivideo.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\seismic_video.h" />
-    <ClInclude Include="..\universe.h" />
-    <ClInclude Include="resource.h" />
-    <ClInclude Include="..\..\..\common\gui\video.h" />
-    <ClInclude Include="..\..\..\common\gui\winvideo.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="SeismicSimulation.ico" />
-    <None Include="small.ico" />
-    <None Include="..\index.html" />
-  </ItemGroup>
-  <ItemGroup>
-    <ResourceCompile Include="SeismicSimulation.rc" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DDDebug|Win32">
+      <Configuration>DDDebug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DDDebug|x64">
+      <Configuration>DDDebug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DDRelease|Win32">
+      <Configuration>DDRelease</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DDRelease|x64">
+      <Configuration>DDRelease</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>SeismicSimulation</ProjectName>
+    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A2527}</ProjectGuid>
+    <RootNamespace>SeismicSimulation</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">
+    <PreBuildEvent>
+      <Command>..\..\..\common\gui\dxcheck.bat</Command>
+    </PreBuildEvent>
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">
+    <PreBuildEvent>
+      <Command>..\..\..\common\gui\dxcheck.bat</Command>
+    </PreBuildEvent>
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">
+    <PreBuildEvent>
+      <Command>..\..\..\common\gui\dxcheck.bat</Command>
+    </PreBuildEvent>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">
+    <PreBuildEvent>
+      <Command>..\..\..\common\gui\dxcheck.bat</Command>
+    </PreBuildEvent>
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\main.cpp" />
+    <ClCompile Include="..\seismic_video.cpp" />
+    <ClCompile Include="..\universe.cpp" />
+    <ClCompile Include="..\..\..\common\gui\d2dvideo.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\..\common\gui\gdivideo.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\seismic_video.h" />
+    <ClInclude Include="..\universe.h" />
+    <ClInclude Include="resource.h" />
+    <ClInclude Include="..\..\..\common\gui\video.h" />
+    <ClInclude Include="..\..\..\common\gui\winvideo.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="SeismicSimulation.ico" />
+    <None Include="small.ico" />
+    <None Include="..\readme.html" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="SeismicSimulation.rc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/examples/parallel_for/seismic/msvs/resource.h b/examples/parallel_for/seismic/msvs/resource.h
index 44453d7..ddc31c3 100644
--- a/examples/parallel_for/seismic/msvs/resource.h
+++ b/examples/parallel_for/seismic/msvs/resource.h
@@ -1,3 +1,23 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
 //{{NO_DEPENDENCIES}}
 // Microsoft Visual C++ generated include file.
 // Used by SeismicSimulation.rc
diff --git a/examples/parallel_for/seismic/msvs/seismic.sln b/examples/parallel_for/seismic/msvs/seismic.sln
new file mode 100644
index 0000000..b8dc698
--- /dev/null
+++ b/examples/parallel_for/seismic/msvs/seismic.sln
@@ -0,0 +1,38 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SeismicSimulation", "SeismicSimulation.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A2527}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		_GDIRelease|Win32 = _GDIRelease|Win32
+		_GDIRelease|x64 = _GDIRelease|x64
+		DDDebug|Win32 = DDDebug|Win32
+		DDDebug|x64 = DDDebug|x64
+		DDRelease|Win32 = DDRelease|Win32
+		DDRelease|x64 = DDRelease|x64
+		GDIDebug|Win32 = GDIDebug|Win32
+		GDIDebug|x64 = GDIDebug|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|Win32.ActiveCfg = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|Win32.Build.0 = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|x64.ActiveCfg = Release|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|x64.Build.0 = Release|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|Win32.ActiveCfg = DDDebug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|Win32.Build.0 = DDDebug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|x64.ActiveCfg = DDDebug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|x64.Build.0 = DDDebug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|Win32.ActiveCfg = DDRelease|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|Win32.Build.0 = DDRelease|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|x64.ActiveCfg = DDRelease|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|x64.Build.0 = DDRelease|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|Win32.ActiveCfg = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|Win32.Build.0 = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|x64.ActiveCfg = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|x64.Build.0 = Debug|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/parallel_for/seismic/readme.html b/examples/parallel_for/seismic/readme.html
new file mode 100644
index 0000000..ba64e7f
--- /dev/null
+++ b/examples/parallel_for/seismic/readme.html
@@ -0,0 +1,471 @@
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
+
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
+
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Seismic sample</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Seismic sample</h1>
+	</div>
+	
+	<p>
+		Parallel seismic wave simulation that demonstrates use of parallel_for and affinity_partitioner.
+	<br><br>
+		The example can be built in the offload version to run on Intel® Many Integrated Core (Intel® MIC) Architecture based coprocessor (see <a href="../../index.html">build instructions</a>).
+	<br><br>
+		<b>Note:</b> Currently, the offload version does not support GUI and can only be used with console mode.
+	</p>
+	
+	<div class="changes">
+		<div class="h3-alike">System Requirements</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				For the most up to date system requirements, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
+			</p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Files</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="main.cpp">main.cpp</a>
+				<dd>Main program which parses command line options and runs the algorithm with different numbers of threads.
+				<dt><a href="universe.h">universe.h</a>
+				<dd>Wave propagation methods interface.
+				<dt><a href="universe.cpp">universe.cpp</a>
+				<dd>Wave propagation methods implementation.
+				<dt><a href="seismic_video.h">seismic_video.h</a>
+				<dd>GUI mode support interface.
+				<dt><a href="seismic_video.cpp">seismic_video.cpp</a>
+				<dd>GUI mode support implementation.
+				<dt><a href="Makefile">Makefile</a>
+				<dd>Makefile for building the example.
+			</dl>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="msvs/">msvs</a>
+				<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).
+				<dt><a href="xcode/">xcode</a>
+				<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).
+			</dl>
+			<p>For information about the minimum supported version of IDE, see <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a></p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Build instructions</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>General build directions can be found <a href="../../index.html">here</a>.</p>
+			<p>The following additional options are supported:</p>
+			<dl>
+				<dt><tt>make [(general targets: {release, debug} [test])] UI={con, gdi, d2d, x, mac}</tt>
+				<dd>Build and run as usual, but build with the specified GUI driver: console, GDI+*,  
+					Direct2D*, X11, or OpenGL*
+					(see the description of the <a href="../../common/index.html">common GUI code</a>
+					for more information on available graphics support).<br>
+					For Linux* and macOS* systems, the best available driver is detected automatically by the Makefile.<br>
+					For Windows* systems, UI=gdi is the default GUI driver; compiling with UI=d2d may offer superior
+					performance, but can only be used if the Microsoft* DirectX* SDK is installed on your system 
+					and if overlay is supported by your graphics card.<br>
+					Use UI=con to build without the GUI for use in making performance measurements
+					<i>(strongly recommended when measuring performance or scalability; see note below)</i>.
+				<dt><tt>make [(above options or targets)] XARCH=x64</tt>
+				<dd>Build and run as above, but also specify XARCH=x64
+					(or XARCH=AMD64 for older compilers) when building the example on Windows* as a 64-bit binary.
+				<dt><tt>make [(above options or targets)] DDLIB_DIR=<<i>specify path to Direct Draw* SDK here</i>></tt>
+				<dd>If you experience ddraw.lib linking problems, specify the correct library directory via this option.
+				<dt><tt>make [(above options or targets)] CXXFLAGS=-DX_FULLSYNC</tt>
+				<dd>Build and run as above, but enable full X11 synchronization if you experience "tearing" of motion on slower video systems.
+			</dl>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Usage</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><tt>seismic <i>-h</i></tt>
+				<dd>Prints the help for command line options
+				<dt><tt>seismic [<i>n-of-threads</i>=value] [<i>n-of-frames</i>=value] [<i>silent</i>] [<i>serial</i>]</tt>
+				<dt><tt>seismic [<i>n-of-threads</i> [<i>n-of-frames</i>]] [<i>silent</i>] [<i>serial</i>]</tt>
+				<dd><i>n-of-threads</i> is the number of threads to use; a range of the form low[:high], where low and optional high are non-negative integers or 'auto' for the TBB default.<br>
+					<i>n-of-frames</i> is a number of frames the example processes internally.<br>
+					<i>silent</i> - no output except elapsed time.<br>
+					<i>serial</i> - in GUI mode start with serial version of algorithm.<br>
+				<dt>To run a short version of this example, e.g., for use with Intel® Parallel Inspector::
+				<dd>Build a <i>debug</i> version of the example
+					(see the <a href="../../index.html">build instructions</a>).
+					<br>Run it with the desired number of threads and smaller number of frames, e.g., <tt>seismic 4 5</tt>.
+			</dl>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Hot keys</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>
+				The following hot keys can be used in interactive execution mode when the example is compiled with the graphical
+				user interface:
+			</p>
+			<dl>
+				<dt><left mouse button>
+				<dd>Starts new seismic wave in place specified by mouse cursor.
+				<dt><space>
+				<dd>Toggles between parallel and serial execution modes.
+				<dt><p>
+				<dd>Enables parallel execution mode.
+				<dt><s>
+				<dd>Enables serial execution mode.
+				<dt><e>
+				<dd>Enables screen updates.
+				<dt><d>
+				<dd>Disables screen updates <i>(strongly recommended when measuring performance or scalability; see note below)</i>.
+				<dt><esc>
+				<dd>Stops execution.
+			</dl>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Notes</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<ul>
+			<li>While running with the GUI display turned on should yield reasonable performance in most cases, <i>running with the GUI
+				display turned off is strongly recommended</i> in order to demonstrate the full performance and scalability of the example.
+			</ul>
+		</div>
+	</div>
+	
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>	
+	
+</body>
+</html>
diff --git a/examples/parallel_for/seismic/seismic_video.cpp b/examples/parallel_for/seismic/seismic_video.cpp
index 50c978f..67ae78c 100644
--- a/examples/parallel_for/seismic/seismic_video.cpp
+++ b/examples/parallel_for/seismic/seismic_video.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "seismic_video.h"
diff --git a/examples/parallel_for/seismic/seismic_video.h b/examples/parallel_for/seismic/seismic_video.h
index 4197cd7..a1b5932 100644
--- a/examples/parallel_for/seismic/seismic_video.h
+++ b/examples/parallel_for/seismic/seismic_video.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef SEISMIC_VIDEO_H_
diff --git a/examples/parallel_for/seismic/universe.cpp b/examples/parallel_for/seismic/universe.cpp
index dc5e27a..f8d5f2f 100644
--- a/examples/parallel_for/seismic/universe.cpp
+++ b/examples/parallel_for/seismic/universe.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "../../common/gui/video.h"
diff --git a/examples/parallel_for/seismic/universe.h b/examples/parallel_for/seismic/universe.h
index ff1a79a..ccad69e 100644
--- a/examples/parallel_for/seismic/universe.h
+++ b/examples/parallel_for/seismic/universe.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef UNIVERSE_H_
diff --git a/examples/parallel_for/seismic/xcode/seismic.xcodeproj/project.pbxproj b/examples/parallel_for/seismic/xcode/seismic.xcodeproj/project.pbxproj
index ff39465..c0ba5eb 100644
--- a/examples/parallel_for/seismic/xcode/seismic.xcodeproj/project.pbxproj
+++ b/examples/parallel_for/seismic/xcode/seismic.xcodeproj/project.pbxproj
@@ -7,8 +7,7 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
-		84B8DA19152C9AC600D59B95 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 84B8DA13152C9AC600D59B95 /* libtbb.dylib */; };
-		84B8DA77152CA90100D59B95 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA6F152CA90100D59B95 /* main.m */; };
+		84B8DA19152C9AC600D59B95 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 84B8DA13152C9AC600D59B95 /* libtbb.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };
 		84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; };
 		84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; };
 		84B8DA7A152CA90100D59B95 /* (null) in Resources */ = {isa = PBXBuildFile; };
@@ -17,14 +16,29 @@
 		84B8DA87152CA99C00D59B95 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA82152CA99C00D59B95 /* main.cpp */; };
 		84B8DA88152CA99C00D59B95 /* seismic_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA83152CA99C00D59B95 /* seismic_video.cpp */; };
 		84B8DA89152CA99C00D59B95 /* universe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA85152CA99C00D59B95 /* universe.cpp */; };
-		84B8DA9A152CADF400D59B95 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; };
 		84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D017551527431F0008A4E0 /* Cocoa.framework */; };
 		84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D01775152744BD0008A4E0 /* OpenGL.framework */; };
+		D31F32771C12DEA300A77D54 /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D3BD96991C0DDB8700163D8B /* libtbbmalloc.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };
+		D31F327E1C12DF3D00A77D54 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F32781C12DEE000A77D54 /* libtbb.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };
+		D31F327F1C12DF3D00A77D54 /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F32791C12DEE000A77D54 /* libtbbmalloc.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };
+		D31F32801C12DF5200A77D54 /* libtbb.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D31F32781C12DEE000A77D54 /* libtbb.dylib */; };
+		D31F32811C12DF5900A77D54 /* libtbbmalloc.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D31F32791C12DEE000A77D54 /* libtbbmalloc.dylib */; };
+		D3BD96921C0DD55E00163D8B /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA82152CA99C00D59B95 /* main.cpp */; };
+		D3BD96931C0DD56900163D8B /* seismic_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA83152CA99C00D59B95 /* seismic_video.cpp */; };
+		D3BD96941C0DD57600163D8B /* universe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA85152CA99C00D59B95 /* universe.cpp */; };
+		D3BD96951C0DD59200163D8B /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; };
+		D3BD96961C0DD5A000163D8B /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; };
+		D3BD96971C0DD5A900163D8B /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; };
+		D3BD96A31C0DE2BB00163D8B /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; };
+		D3BD96A61C0DE3DE00163D8B /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = D3BD96A51C0DE3DE00163D8B /* main.m */; };
+		D3BD96AB1C0E08E500163D8B /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = D3BD96A51C0DE3DE00163D8B /* main.m */; };
+		D3BD96B31C0E0AFE00163D8B /* tbbExample-Info.ios.plist in Resources */ = {isa = PBXBuildFile; fileRef = D3BD966D1C0DD00400163D8B /* tbbExample-Info.ios.plist */; };
+		D3BD96B51C0E0B2200163D8B /* tbbExample-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = D3BD96B41C0E0B2200163D8B /* tbbExample-Info.plist */; };
+		D3BD96B81C0E11CE00163D8B /* iOS.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D3BD96B61C0E11C600163D8B /* iOS.storyboard */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXFileReference section */
 		84B8DA13152C9AC600D59B95 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = "<group>"; };
-		84B8DA6F152CA90100D59B95 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../../../common/gui/xcode/tbbExample/main.m; sourceTree = "<group>"; };
 		84B8DA70152CA90100D59B95 /* OpenGLView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenGLView.h; path = ../../../common/gui/xcode/tbbExample/OpenGLView.h; sourceTree = "<group>"; };
 		84B8DA71152CA90100D59B95 /* OpenGLView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OpenGLView.m; path = ../../../common/gui/xcode/tbbExample/OpenGLView.m; sourceTree = "<group>"; };
 		84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tbbAppDelegate.h; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.h; sourceTree = "<group>"; };
@@ -44,6 +58,14 @@
 		84D017591527431F0008A4E0 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
 		84D0175A1527431F0008A4E0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
 		84D01775152744BD0008A4E0 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
+		D31F32781C12DEE000A77D54 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/ios/libtbb.dylib; sourceTree = "<group>"; };
+		D31F32791C12DEE000A77D54 /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = ../../../../lib/ios/libtbbmalloc.dylib; sourceTree = "<group>"; };
+		D3BD966D1C0DD00400163D8B /* tbbExample-Info.ios.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "tbbExample-Info.ios.plist"; path = "../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist"; sourceTree = "<group>"; };
+		D3BD96991C0DDB8700163D8B /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = ../../../../lib/libtbbmalloc.dylib; sourceTree = "<group>"; };
+		D3BD96A51C0DE3DE00163D8B /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../../../common/gui/xcode/tbbExample/main.m; sourceTree = "<group>"; };
+		D3BD96B41C0E0B2200163D8B /* tbbExample-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "tbbExample-Info.plist"; path = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist"; sourceTree = "<group>"; };
+		D3BD96B61C0E11C600163D8B /* iOS.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = iOS.storyboard; path = ../iOS.storyboard; sourceTree = "<group>"; };
+		D3BD96BB1C0E19E700163D8B /* tbbExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tbbExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -54,29 +76,40 @@
 				84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */,
 				84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */,
 				84B8DA19152C9AC600D59B95 /* libtbb.dylib in Frameworks */,
+				D31F32771C12DEA300A77D54 /* libtbbmalloc.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		D3BD96571C0DD00400163D8B /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D31F327E1C12DF3D00A77D54 /* libtbb.dylib in Frameworks */,
+				D31F327F1C12DF3D00A77D54 /* libtbbmalloc.dylib in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
-		84B8DA6C152CA8D900D59B95 /* tbbExample */ = {
+		84B8DA6C152CA8D900D59B95 /* tbbExample Sources */ = {
 			isa = PBXGroup;
 			children = (
-				84B8DA98152CAD8600D59B95 /* Gui layer */,
 				84B8DA7B152CA97B00D59B95 /* Resources */,
 				84B8DA82152CA99C00D59B95 /* main.cpp */,
+				D3BD96A51C0DE3DE00163D8B /* main.m */,
 				84B8DA83152CA99C00D59B95 /* seismic_video.cpp */,
 				84B8DA84152CA99C00D59B95 /* seismic_video.h */,
 				84B8DA85152CA99C00D59B95 /* universe.cpp */,
 				84B8DA86152CA99C00D59B95 /* universe.h */,
 			);
-			name = tbbExample;
+			name = "tbbExample Sources";
 			sourceTree = "<group>";
 		};
 		84B8DA7B152CA97B00D59B95 /* Resources */ = {
 			isa = PBXGroup;
 			children = (
+				D3BD96B61C0E11C600163D8B /* iOS.storyboard */,
 				84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */,
 				84B8DA7E152CA97B00D59B95 /* MainMenu.xib */,
 			);
@@ -88,7 +121,6 @@
 			isa = PBXGroup;
 			children = (
 				84B8DA99152CADF400D59B95 /* macvideo.cpp */,
-				84B8DA6F152CA90100D59B95 /* main.m */,
 				84B8DA70152CA90100D59B95 /* OpenGLView.h */,
 				84B8DA71152CA90100D59B95 /* OpenGLView.m */,
 				84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */,
@@ -101,7 +133,10 @@
 		84D017461527431F0008A4E0 = {
 			isa = PBXGroup;
 			children = (
-				84B8DA6C152CA8D900D59B95 /* tbbExample */,
+				D3BD96B41C0E0B2200163D8B /* tbbExample-Info.plist */,
+				D3BD966D1C0DD00400163D8B /* tbbExample-Info.ios.plist */,
+				84B8DA98152CAD8600D59B95 /* Gui layer */,
+				84B8DA6C152CA8D900D59B95 /* tbbExample Sources */,
 				84D017541527431F0008A4E0 /* Frameworks */,
 				84D017521527431F0008A4E0 /* Products */,
 			);
@@ -111,6 +146,7 @@
 			isa = PBXGroup;
 			children = (
 				84D017511527431F0008A4E0 /* tbbExample.app */,
+				D3BD96BB1C0E19E700163D8B /* tbbExample.app */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -118,24 +154,19 @@
 		84D017541527431F0008A4E0 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				84D017591527431F0008A4E0 /* CoreData.framework */,
+				84B8DA13152C9AC600D59B95 /* libtbb.dylib */,
+				D3BD96991C0DDB8700163D8B /* libtbbmalloc.dylib */,
+				D31F32781C12DEE000A77D54 /* libtbb.dylib */,
+				D31F32791C12DEE000A77D54 /* libtbbmalloc.dylib */,
+				84D0175A1527431F0008A4E0 /* Foundation.framework */,
+				84D017581527431F0008A4E0 /* AppKit.framework */,
 				84D01775152744BD0008A4E0 /* OpenGL.framework */,
 				84D017551527431F0008A4E0 /* Cocoa.framework */,
-				84D017571527431F0008A4E0 /* Other Frameworks */,
 			);
 			name = Frameworks;
 			sourceTree = "<group>";
 		};
-		84D017571527431F0008A4E0 /* Other Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-				84B8DA13152C9AC600D59B95 /* libtbb.dylib */,
-				84D017581527431F0008A4E0 /* AppKit.framework */,
-				84D017591527431F0008A4E0 /* CoreData.framework */,
-				84D0175A1527431F0008A4E0 /* Foundation.framework */,
-			);
-			name = "Other Frameworks";
-			sourceTree = "<group>";
-		};
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
@@ -156,6 +187,23 @@
 			productReference = 84D017511527431F0008A4E0 /* tbbExample.app */;
 			productType = "com.apple.product-type.application";
 		};
+		D3BD96591C0DD00400163D8B /* tbbExample_ios */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = D3BD96841C0DD00500163D8B /* Build configuration list for PBXNativeTarget "tbbExample_ios" */;
+			buildPhases = (
+				D3BD96561C0DD00400163D8B /* Sources */,
+				D3BD96571C0DD00400163D8B /* Frameworks */,
+				D3BD96581C0DD00400163D8B /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = tbbExample_ios;
+			productName = tbbExample_ios;
+			productReference = D3BD96BB1C0E19E700163D8B /* tbbExample.app */;
+			productType = "com.apple.product-type.application";
+		};
 /* End PBXNativeTarget section */
 
 /* Begin PBXProject section */
@@ -163,14 +211,21 @@
 			isa = PBXProject;
 			attributes = {
 				CLASSPREFIX = tbb;
-				LastUpgradeCheck = 0430;
+				LastUpgradeCheck = 0710;
+				TargetAttributes = {
+					D3BD96591C0DD00400163D8B = {
+						CreatedOnToolsVersion = 7.1.1;
+						DevelopmentTeam = 7J8M3RM94C;
+					};
+				};
 			};
-			buildConfigurationList = 84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "tbbExample" */;
+			buildConfigurationList = 84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "seismic" */;
 			compatibilityVersion = "Xcode 3.2";
 			developmentRegion = English;
 			hasScannedForEncodings = 0;
 			knownRegions = (
 				en,
+				Base,
 			);
 			mainGroup = 84D017461527431F0008A4E0;
 			productRefGroup = 84D017521527431F0008A4E0 /* Products */;
@@ -178,6 +233,7 @@
 			projectRoot = "";
 			targets = (
 				84D017501527431F0008A4E0 /* tbbExample */,
+				D3BD96591C0DD00400163D8B /* tbbExample_ios */,
 			);
 		};
 /* End PBXProject section */
@@ -187,12 +243,24 @@
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				D3BD96B51C0E0B2200163D8B /* tbbExample-Info.plist in Resources */,
 				84B8DA7A152CA90100D59B95 /* (null) in Resources */,
 				84B8DA80152CA97B00D59B95 /* InfoPlist.strings in Resources */,
 				84B8DA81152CA97B00D59B95 /* MainMenu.xib in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
+		D3BD96581C0DD00400163D8B /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D31F32811C12DF5900A77D54 /* libtbbmalloc.dylib in Resources */,
+				D31F32801C12DF5200A77D54 /* libtbb.dylib in Resources */,
+				D3BD96B81C0E11CE00163D8B /* iOS.storyboard in Resources */,
+				D3BD96B31C0E0AFE00163D8B /* tbbExample-Info.ios.plist in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 /* End PBXResourcesBuildPhase section */
 
 /* Begin PBXSourcesBuildPhase section */
@@ -200,13 +268,27 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				84B8DA77152CA90100D59B95 /* main.m in Sources */,
 				84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */,
 				84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */,
 				84B8DA87152CA99C00D59B95 /* main.cpp in Sources */,
+				D3BD96A31C0DE2BB00163D8B /* macvideo.cpp in Sources */,
 				84B8DA88152CA99C00D59B95 /* seismic_video.cpp in Sources */,
+				D3BD96A61C0DE3DE00163D8B /* main.m in Sources */,
 				84B8DA89152CA99C00D59B95 /* universe.cpp in Sources */,
-				84B8DA9A152CADF400D59B95 /* macvideo.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		D3BD96561C0DD00400163D8B /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D3BD96941C0DD57600163D8B /* universe.cpp in Sources */,
+				D3BD96921C0DD55E00163D8B /* main.cpp in Sources */,
+				D3BD96951C0DD59200163D8B /* macvideo.cpp in Sources */,
+				D3BD96931C0DD56900163D8B /* seismic_video.cpp in Sources */,
+				D3BD96971C0DD5A900163D8B /* tbbAppDelegate.m in Sources */,
+				D3BD96AB1C0E08E500163D8B /* main.m in Sources */,
+				D3BD96961C0DD5A000163D8B /* OpenGLView.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -235,13 +317,23 @@
 		84D01770152743200008A4E0 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = YES;
-				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				ALWAYS_SEARCH_USER_PATHS = NO;
 				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				COPY_PHASE_STRIP = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO;
+				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_PREPROCESSOR_DEFINITIONS = (
 					"DEBUG=1",
@@ -251,9 +343,12 @@
 				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
 				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib\"";
 				ONLY_ACTIVE_ARCH = YES;
 				SDKROOT = macosx;
 			};
@@ -262,19 +357,31 @@
 		84D01771152743200008A4E0 /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = YES;
-				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				ALWAYS_SEARCH_USER_PATHS = NO;
 				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				COPY_PHASE_STRIP = YES;
 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO;
+				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
 				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib\"";
 				SDKROOT = macosx;
 			};
 			name = Release;
@@ -283,12 +390,15 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				CLANG_ENABLE_OBJC_ARC = NO;
+				COMBINE_HIDPI_IMAGES = YES;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
 				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
 				INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist";
 				LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib\"";
-				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				MACOSX_DEPLOYMENT_TARGET = 10.9;
+				PRODUCT_BUNDLE_IDENTIFIER = "Intel.${PRODUCT_NAME:rfc1034identifier}";
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				RUN_CLANG_STATIC_ANALYZER = YES;
 				USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
@@ -301,6 +411,8 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				CLANG_ENABLE_OBJC_ARC = NO;
+				COMBINE_HIDPI_IMAGES = YES;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
 				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
@@ -309,7 +421,8 @@
 					"\"$(SRCROOT)/../../../../lib\"",
 					"\"$(SRCROOT)\"",
 				);
-				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				MACOSX_DEPLOYMENT_TARGET = 10.9;
+				PRODUCT_BUNDLE_IDENTIFIER = "Intel.${PRODUCT_NAME:rfc1034identifier}";
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				RUN_CLANG_STATIC_ANALYZER = YES;
 				USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
@@ -318,10 +431,91 @@
 			};
 			name = Release;
 		};
+		D3BD96851C0DD00500163D8B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+					"__TBB_IOS=1",
+				);
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist";
+				IPHONEOS_DEPLOYMENT_TARGET = 9.1;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path";
+				LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib/ios\"";
+				MTL_ENABLE_DEBUG_INFO = YES;
+				PRODUCT_BUNDLE_IDENTIFIER = com.tbb.example;
+				PRODUCT_NAME = tbbExample;
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = 1;
+			};
+			name = Debug;
+		};
+		D3BD96861C0DD00500163D8B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				ENABLE_NS_ASSERTIONS = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_PREPROCESSOR_DEFINITIONS = "__TBB_IOS=1";
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist";
+				IPHONEOS_DEPLOYMENT_TARGET = 9.1;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path";
+				LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib/ios\"";
+				MTL_ENABLE_DEBUG_INFO = NO;
+				PRODUCT_BUNDLE_IDENTIFIER = com.tbb.example;
+				PRODUCT_NAME = tbbExample;
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = 1;
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
 /* End XCBuildConfiguration section */
 
 /* Begin XCConfigurationList section */
-		84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "tbbExample" */ = {
+		84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "seismic" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
 				84D01770152743200008A4E0 /* Debug */,
@@ -339,6 +533,15 @@
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
+		D3BD96841C0DD00500163D8B /* Build configuration list for PBXNativeTarget "tbbExample_ios" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				D3BD96851C0DD00500163D8B /* Debug */,
+				D3BD96861C0DD00500163D8B /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
 /* End XCConfigurationList section */
 	};
 	rootObject = 84D017481527431F0008A4E0 /* Project object */;
diff --git a/examples/parallel_for/seismic/xcode/seismic.xcodeproj/xcshareddata/xcschemes/tbbExample.ios.xcscheme b/examples/parallel_for/seismic/xcode/seismic.xcodeproj/xcshareddata/xcschemes/tbbExample.ios.xcscheme
new file mode 100644
index 0000000..9975c8e
--- /dev/null
+++ b/examples/parallel_for/seismic/xcode/seismic.xcodeproj/xcshareddata/xcschemes/tbbExample.ios.xcscheme
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "0710"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "D3BD96591C0DD00400163D8B"
+               BuildableName = "tbbExample.app"
+               BlueprintName = "tbbExample_ios"
+               ReferencedContainer = "container:seismic.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+         <BuildActionEntry
+            buildForTesting = "NO"
+            buildForRunning = "NO"
+            buildForProfiling = "NO"
+            buildForArchiving = "NO"
+            buildForAnalyzing = "NO">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "D3BD96711C0DD00400163D8B"
+               BuildableName = "com.tbb.exampleTests.xctest"
+               BlueprintName = "com.tbb.exampleTests"
+               ReferencedContainer = "container:seismic.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+         <BuildActionEntry
+            buildForTesting = "NO"
+            buildForRunning = "NO"
+            buildForProfiling = "NO"
+            buildForArchiving = "NO"
+            buildForAnalyzing = "NO">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "D3BD967C1C0DD00500163D8B"
+               BuildableName = "com.tbb.exampleUITests.xctest"
+               BlueprintName = "com.tbb.exampleUITests"
+               ReferencedContainer = "container:seismic.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "D3BD96591C0DD00400163D8B"
+            BuildableName = "tbbExample.app"
+            BlueprintName = "tbbExample_ios"
+            ReferencedContainer = "container:seismic.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "D3BD96591C0DD00400163D8B"
+            BuildableName = "tbbExample.app"
+            BlueprintName = "tbbExample_ios"
+            ReferencedContainer = "container:seismic.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "D3BD96591C0DD00400163D8B"
+            BuildableName = "tbbExample.app"
+            BlueprintName = "tbbExample_ios"
+            ReferencedContainer = "container:seismic.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>
diff --git a/examples/parallel_for/seismic/xcode/seismic.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme b/examples/parallel_for/seismic/xcode/seismic.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme
index 1dd33ab..21b8d64 100644
--- a/examples/parallel_for/seismic/xcode/seismic.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme
+++ b/examples/parallel_for/seismic/xcode/seismic.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
+   LastUpgradeVersion = "0710"
    version = "1.3">
    <BuildAction
       parallelizeBuildables = "YES"
@@ -22,10 +23,10 @@
       </BuildActionEntries>
    </BuildAction>
    <TestAction
+      buildConfiguration = "Debug"
       selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
+      shouldUseLaunchSchemeArgsEnv = "YES">
       <Testables>
       </Testables>
       <MacroExpansion>
@@ -37,18 +38,22 @@
             ReferencedContainer = "container:seismic.xcodeproj">
          </BuildableReference>
       </MacroExpansion>
+      <AdditionalOptions>
+      </AdditionalOptions>
    </TestAction>
    <LaunchAction
+      buildConfiguration = "Debug"
       selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
       launchStyle = "0"
       useCustomWorkingDirectory = "NO"
       customWorkingDirectory = "/tmp"
-      buildConfiguration = "Debug"
       ignoresPersistentStateOnLaunch = "NO"
       debugDocumentVersioning = "NO"
+      debugServiceExtension = "internal"
       allowLocationSimulation = "YES">
-      <BuildableProductRunnable>
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
          <BuildableReference
             BuildableIdentifier = "primary"
             BlueprintIdentifier = "84D017501527431F0008A4E0"
@@ -68,12 +73,13 @@
       </AdditionalOptions>
    </LaunchAction>
    <ProfileAction
+      buildConfiguration = "Release"
       shouldUseLaunchSchemeArgsEnv = "YES"
       savedToolIdentifier = ""
       useCustomWorkingDirectory = "NO"
-      buildConfiguration = "Release"
       debugDocumentVersioning = "YES">
-      <BuildableProductRunnable>
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
          <BuildableReference
             BuildableIdentifier = "primary"
             BlueprintIdentifier = "84D017501527431F0008A4E0"
diff --git a/examples/parallel_for/tachyon/Makefile b/examples/parallel_for/tachyon/Makefile
index 0e8db68..7df8526 100644
--- a/examples/parallel_for/tachyon/Makefile
+++ b/examples/parallel_for/tachyon/Makefile
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # The original source for this example is
 # Copyright (c) 1994-2008 John E. Stone
@@ -144,6 +144,8 @@ endif
 
 ifeq ($(shell uname), Linux)
 LIBS += -lrt 
+else ifeq ($(shell uname), Darwin)
+override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib
 endif
 
 SOURCE = ../../common/gui/$(UI)video.cpp src/trace.$(SVERSION).cpp src/main.cpp src/pthread.cpp src/tachyon_video.cpp src/api.cpp src/apigeom.cpp src/apitrigeom.cpp src/bndbox.cpp src/box.cpp src/camera.cpp src/coordsys.cpp src/cylinder.cpp src/extvol.cpp src/global.cpp src/grid.cpp src/imageio.cpp src/imap.cpp src/intersect.cpp src/jpeg.cpp src/light.cpp src/objbound.cpp src/parse.cpp src/plane.cpp src/ppm.cpp src/quadric.cpp src/render.cpp src/ring.cpp src/shade.cpp src/sphere.cpp src/ [...]
@@ -166,11 +168,11 @@ light_test_one:
 $(EXE): $(SOURCE)
 ifeq ($(UI),mac)
 	mkdir -p $(APPRES)/en.lproj $(NAME)$(SUFFIX).app/Contents/MacOS
-	cp ../../common/gui/xcode/tbbExample/Info.plist $(NAME)$(SUFFIX).app/Contents
+	cp ../../common/gui/xcode/tbbExample/tbbExample-Info.plist $(NAME)$(SUFFIX).app/Contents/Info.plist
 	cp ../../common/gui/xcode/tbbExample/PkgInfo $(NAME)$(SUFFIX).app/Contents
 	cp ../../common/gui/xcode/tbbExample/en.lproj/* $(APPRES)/en.lproj
 	$(CXX_UI) $(MYCXXFLAGS) $(CXXFLAGS) -c $(MACUISOURCES)
-endif # OS X*
+endif # macOS*
 	$(CXX) $(MYCXXFLAGS) -o $@ $(SOURCE) $(MACUIOBJS) $(LIBS)
 	$(RM) *.o
 
diff --git a/examples/parallel_for/tachyon/Makefile.windows b/examples/parallel_for/tachyon/Makefile.windows
index f738a7f..9b5266b 100644
--- a/examples/parallel_for/tachyon/Makefile.windows
+++ b/examples/parallel_for/tachyon/Makefile.windows
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # The original source for this example is
 # Copyright (c) 1994-2008 John E. Stone
diff --git a/examples/parallel_for/tachyon/android/.classpath b/examples/parallel_for/tachyon/android/.classpath
deleted file mode 100644
index 3f9691c..0000000
--- a/examples/parallel_for/tachyon/android/.classpath
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
-	<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" path="gen"/>
-	<classpathentry kind="output" path="bin/classes"/>
-</classpath>
diff --git a/examples/parallel_for/tachyon/android/.cproject b/examples/parallel_for/tachyon/android/.cproject
deleted file mode 100644
index e2df34a..0000000
--- a/examples/parallel_for/tachyon/android/.cproject
+++ /dev/null
@@ -1,223 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
-	<storageModule moduleId="org.eclipse.cdt.core.settings">
-		<cconfiguration id="com.android.toolchain.gcc.1728144771">
-			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.android.toolchain.gcc.1728144771" moduleId="org.eclipse.cdt.core.settings" name="Default">
-				<externalSettings/>
-				<extensions>
-					<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
-					<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
-					<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-				</extensions>
-			</storageModule>
-			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
-				<configuration artifactName="${ProjName}" buildProperties="" description="" id="com.android.toolchain.gcc.1728144771" name="Default" parent="org.eclipse.cdt.build.core.emptycfg">
-					<folderInfo id="com.android.toolchain.gcc.1728144771.1005286742" name="/" resourcePath="">
-						<toolChain id="com.android.toolchain.gcc.1253182491" name="com.android.toolchain.gcc" superClass="com.android.toolchain.gcc">
-							<targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="com.android.targetPlatform.1765338753" isAbstract="false" superClass="com.android.targetPlatform"/>
-							<builder id="com.android.builder.971200553" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Android Builder" superClass="com.android.builder">
-								<outputEntries>
-									<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="outputPath" name="obj"/>
-									<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="outputPath" name="libs"/>
-								</outputEntries>
-							</builder>
-							<tool id="com.android.gcc.compiler.969646961" name="Android GCC Compiler" superClass="com.android.gcc.compiler">
-								<inputType id="com.android.gcc.inputType.1420734641" superClass="com.android.gcc.inputType"/>
-							</tool>
-						</toolChain>
-					</folderInfo>
-					<sourceEntries>
-						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="jni"/>
-					</sourceEntries>
-				</configuration>
-			</storageModule>
-			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
-			<storageModule moduleId="scannerConfiguration">
-				<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
-				<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
-					<buildOutputProvider>
-						<openAction enabled="true" filePath=""/>
-						<parser enabled="true"/>
-					</buildOutputProvider>
-					<scannerInfoProvider id="specsFile">
-						<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-						<parser enabled="true"/>
-					</scannerInfoProvider>
-				</profile>
-				<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
-					<buildOutputProvider>
-						<openAction enabled="true" filePath=""/>
-						<parser enabled="true"/>
-					</buildOutputProvider>
-					<scannerInfoProvider id="makefileGenerator">
-						<runAction arguments="-E -P -v -dD" command="" useDefault="true"/>
-						<parser enabled="true"/>
-					</scannerInfoProvider>
-				</profile>
-				<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
-					<buildOutputProvider>
-						<openAction enabled="true" filePath=""/>
-						<parser enabled="true"/>
-					</buildOutputProvider>
-					<scannerInfoProvider id="specsFile">
-						<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-						<parser enabled="true"/>
-					</scannerInfoProvider>
-				</profile>
-				<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
-					<buildOutputProvider>
-						<openAction enabled="true" filePath=""/>
-						<parser enabled="true"/>
-					</buildOutputProvider>
-					<scannerInfoProvider id="specsFile">
-						<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
-						<parser enabled="true"/>
-					</scannerInfoProvider>
-				</profile>
-				<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
-					<buildOutputProvider>
-						<openAction enabled="true" filePath=""/>
-						<parser enabled="true"/>
-					</buildOutputProvider>
-					<scannerInfoProvider id="specsFile">
-						<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
-						<parser enabled="true"/>
-					</scannerInfoProvider>
-				</profile>
-				<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
-					<buildOutputProvider>
-						<openAction enabled="true" filePath=""/>
-						<parser enabled="true"/>
-					</buildOutputProvider>
-					<scannerInfoProvider id="specsFile">
-						<runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/${specs_file}"'" command="sh" useDefault="true"/>
-						<parser enabled="true"/>
-					</scannerInfoProvider>
-				</profile>
-				<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
-					<buildOutputProvider>
-						<openAction enabled="true" filePath=""/>
-						<parser enabled="true"/>
-					</buildOutputProvider>
-					<scannerInfoProvider id="specsFile">
-						<runAction arguments="-c 'g++ -E -P -v -dD "${plugin_state_location}/specs.cpp"'" command="sh" useDefault="true"/>
-						<parser enabled="true"/>
-					</scannerInfoProvider>
-				</profile>
-				<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
-					<buildOutputProvider>
-						<openAction enabled="true" filePath=""/>
-						<parser enabled="true"/>
-					</buildOutputProvider>
-					<scannerInfoProvider id="specsFile">
-						<runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/specs.c"'" command="sh" useDefault="true"/>
-						<parser enabled="true"/>
-					</scannerInfoProvider>
-				</profile>
-				<profile id="com.android.AndroidPerProjectProfile">
-					<buildOutputProvider>
-						<openAction enabled="false" filePath=""/>
-						<parser enabled="false"/>
-					</buildOutputProvider>
-				</profile>
-				<scannerConfigBuildInfo instanceId="com.android.toolchain.gcc.1728144771;com.android.toolchain.gcc.1728144771.1005286742;com.android.gcc.compiler.969646961;com.android.gcc.inputType.1420734641">
-					<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.android.AndroidPerProjectProfile"/>
-					<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
-						<buildOutputProvider>
-							<openAction enabled="true" filePath=""/>
-							<parser enabled="true"/>
-						</buildOutputProvider>
-						<scannerInfoProvider id="specsFile">
-							<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-							<parser enabled="true"/>
-						</scannerInfoProvider>
-					</profile>
-					<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
-						<buildOutputProvider>
-							<openAction enabled="true" filePath=""/>
-							<parser enabled="true"/>
-						</buildOutputProvider>
-						<scannerInfoProvider id="makefileGenerator">
-							<runAction arguments="-E -P -v -dD" command="" useDefault="true"/>
-							<parser enabled="true"/>
-						</scannerInfoProvider>
-					</profile>
-					<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
-						<buildOutputProvider>
-							<openAction enabled="true" filePath=""/>
-							<parser enabled="true"/>
-						</buildOutputProvider>
-						<scannerInfoProvider id="specsFile">
-							<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-							<parser enabled="true"/>
-						</scannerInfoProvider>
-					</profile>
-					<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
-						<buildOutputProvider>
-							<openAction enabled="true" filePath=""/>
-							<parser enabled="true"/>
-						</buildOutputProvider>
-						<scannerInfoProvider id="specsFile">
-							<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
-							<parser enabled="true"/>
-						</scannerInfoProvider>
-					</profile>
-					<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
-						<buildOutputProvider>
-							<openAction enabled="true" filePath=""/>
-							<parser enabled="true"/>
-						</buildOutputProvider>
-						<scannerInfoProvider id="specsFile">
-							<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
-							<parser enabled="true"/>
-						</scannerInfoProvider>
-					</profile>
-					<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
-						<buildOutputProvider>
-							<openAction enabled="true" filePath=""/>
-							<parser enabled="true"/>
-						</buildOutputProvider>
-						<scannerInfoProvider id="specsFile">
-							<runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/${specs_file}"'" command="sh" useDefault="true"/>
-							<parser enabled="true"/>
-						</scannerInfoProvider>
-					</profile>
-					<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
-						<buildOutputProvider>
-							<openAction enabled="true" filePath=""/>
-							<parser enabled="true"/>
-						</buildOutputProvider>
-						<scannerInfoProvider id="specsFile">
-							<runAction arguments="-c 'g++ -E -P -v -dD "${plugin_state_location}/specs.cpp"'" command="sh" useDefault="true"/>
-							<parser enabled="true"/>
-						</scannerInfoProvider>
-					</profile>
-					<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
-						<buildOutputProvider>
-							<openAction enabled="true" filePath=""/>
-							<parser enabled="true"/>
-						</buildOutputProvider>
-						<scannerInfoProvider id="specsFile">
-							<runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/specs.c"'" command="sh" useDefault="true"/>
-							<parser enabled="true"/>
-						</scannerInfoProvider>
-					</profile>
-					<profile id="com.android.AndroidPerProjectProfile">
-						<buildOutputProvider>
-							<openAction enabled="false" filePath=""/>
-							<parser enabled="false"/>
-						</buildOutputProvider>
-					</profile>
-				</scannerConfigBuildInfo>
-			</storageModule>
-		</cconfiguration>
-	</storageModule>
-	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
-		<project id="tbbTachyon.null.1278275383" name="tbbTachyon"/>
-	</storageModule>
-</cproject>
diff --git a/examples/parallel_for/tachyon/android/.project b/examples/parallel_for/tachyon/android/.project
deleted file mode 100644
index fc089ae..0000000
--- a/examples/parallel_for/tachyon/android/.project
+++ /dev/null
@@ -1,98 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>Tachyon</name>
-	<comment>
-    </comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
-			<triggers>clean,full,incremental,</triggers>
-			<arguments>
-				<dictionary>
-					<key>?children?</key>
-					<value>?name?=outputEntries\|?children?=?name?=entry\\\\\\\|\\\|?name?=entry\\\\\\\|\\\|\||</value>
-				</dictionary>
-				<dictionary>
-					<key>?name?</key>
-					<value></value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.append_environment</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.buildArguments</key>
-					<value></value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.buildCommand</key>
-					<value>ndk-build</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
-					<value>clean</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.contents</key>
-					<value>org.eclipse.cdt.make.core.activeConfigSettings</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
-					<value>false</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.enableFullBuild</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.stopOnError</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
-					<value>true</value>
-				</dictionary>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>com.android.ide.eclipse.adt.ApkBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
-			<triggers>full,incremental,</triggers>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.cdt.core.cnature</nature>
-		<nature>org.eclipse.cdt.core.ccnature</nature>
-		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
-		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
-	</natures>
-</projectDescription>
diff --git a/examples/parallel_for/tachyon/android/AndroidManifest.xml b/examples/parallel_for/tachyon/android/AndroidManifest.xml
deleted file mode 100644
index c3e1887..0000000
--- a/examples/parallel_for/tachyon/android/AndroidManifest.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.intel.tbb.example.tachyon"
-    android:versionCode="1"
-    android:versionName="1.0" >
-
-    <application
-        android:debuggable="true"
-        android:label="@string/app_name" 
-        >
-        <activity
-            android:name=".tachyon"
-            android:screenOrientation="landscape"
-            android:label="@string/app_name" >
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-    </application>
-
-    <uses-sdk android:minSdkVersion="15" />
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
-
-</manifest>
\ No newline at end of file
diff --git a/examples/parallel_for/tachyon/android/assets/data.dat b/examples/parallel_for/tachyon/android/assets/data.dat
deleted file mode 100644
index 0d4bbb1..0000000
--- a/examples/parallel_for/tachyon/android/assets/data.dat
+++ /dev/null
@@ -1,14804 +0,0 @@
-BEGIN_SCENE
-  OUTFILE /dev/null
-  RESOLUTION 512 512 
-  VERBOSE 0
-
-CAMERA
-  ZOOM 1.20711
-ASPECTRATIO 1.0
-  ANTIALIASING 0
-  RAYDEPTH 5
-  CENTER 2.1 1.3 1.7
-  VIEWDIR -0.700389 -0.433574 -0.566982
-  UPDIR -0.482085 -0.298433 0.82373
-
-END_CAMERA 
-
-BACKGROUND 0.078 0.361 0.753 
-
-LIGHT CENTER 4 3 2 RAD 0.002 COLOR 0.5 0.5 0.5
-
-LIGHT CENTER 1 -4 4 RAD 0.002 COLOR 0.5 0.5 0.5
-
-LIGHT CENTER -3 1 5 RAD 0.002 COLOR 0.5 0.5 0.5
-
-TEXDEF txt001 AMBIENT 0.2  DIFFUSE 0.8  SPECULAR 0  OPACITY 1 
-PHONG PLASTIC 0 PHONG_SIZE 100000
- COLOR 1 0.75 0.33 
- TEXFUNC 0 
-
-TRI 
-  V0 12 12 -0.5   V1 -12 -12 -0.5   V2 12 -12 -0.5 
-   txt001 
-TRI 
-  V0 12 12 -0.5   V1 -12 12 -0.5   V2 -12 -12 -0.5 
-   txt001 
-TEXDEF txt002 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
-PHONG PLASTIC 0.5 PHONG_SIZE 45.2776
- COLOR 1 0.9 0.7 
- TEXFUNC 0 
-
- SPHERE CENTER 0 0 0 RAD 0.5 
-   txt002 
- SPHERE CENTER 0.272166 0.272166 0.544331 RAD 0.166667 
-   txt002 
- SPHERE CENTER 0.420314 0.420314 0.618405 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.470715 0.470715 0.598245 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.481689 0.481689 0.57904 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.475329 0.45787 0.577669 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.45787 0.475329 0.577669 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.477074 0.494534 0.599616 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.453255 0.488174 0.598245 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.4661 0.48356 0.618821 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.494534 0.477074 0.599616 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.48356 0.4661 0.618821 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.488174 0.453255 0.598245 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.461623 0.409245 0.557924 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.47044 0.419664 0.537348 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.447954 0.425689 0.545578 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.468014 0.433095 0.557924 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.484109 0.40322 0.549693 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.481683 0.416651 0.57027 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.475292 0.392801 0.57027 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.464049 0.395814 0.537348 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.455233 0.385395 0.557924 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.441563 0.401839 0.545578 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.409245 0.461623 0.557924 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.419664 0.47044 0.537348 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.433095 0.468014 0.557924 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.425689 0.447954 0.545578 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.395814 0.464049 0.537348 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.401839 0.441563 0.545578 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.385395 0.455233 0.557924 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.40322 0.484109 0.549693 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.392801 0.475292 0.57027 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.416651 0.481683 0.57027 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.429405 0.481784 0.658726 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.441197 0.503434 0.660098 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.452601 0.483752 0.650495 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.434161 0.494577 0.63815 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.418001 0.501466 0.668328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.410965 0.492609 0.64638 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.406209 0.479816 0.666956 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.436441 0.490641 0.680674 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.42465 0.46899 0.679302 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.447846 0.470958 0.671072 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.367935 0.472692 0.618405 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.36376 0.497028 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.383056 0.487812 0.630751 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.383056 0.487812 0.606059 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.34864 0.481907 0.606059 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.367935 0.472692 0.593714 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.352815 0.457572 0.606059 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.34864 0.481907 0.630751 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.352815 0.457572 0.630751 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.367935 0.472692 0.643096 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.379004 0.431383 0.678886 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.376578 0.444814 0.699462 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.399064 0.438789 0.691232 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.385395 0.455233 0.678886 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.356518 0.437408 0.687117 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.365335 0.447826 0.666541 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.358944 0.423976 0.666541 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.370187 0.420964 0.699462 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.372614 0.407532 0.678886 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.392673 0.414939 0.691232 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.481784 0.429405 0.658726 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.503434 0.441197 0.660098 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.494577 0.434161 0.63815 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.483752 0.452601 0.650495 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.490641 0.436441 0.680674 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.470958 0.447846 0.671072 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.46899 0.42465 0.679302 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.501466 0.418001 0.668328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.479816 0.406209 0.666956 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.492609 0.410965 0.64638 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.431383 0.379004 0.678886 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.444814 0.376578 0.699462 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.455233 0.385395 0.678886 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.438789 0.399064 0.691232 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.420964 0.370187 0.699462 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.414939 0.392673 0.691232 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.407532 0.372614 0.678886 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.437408 0.356518 0.687117 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.423976 0.358944 0.666541 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.447826 0.365335 0.666541 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.472692 0.367935 0.618405 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.497028 0.36376 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.487812 0.383056 0.606059 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.487812 0.383056 0.630751 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.481907 0.34864 0.630751 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.472692 0.367935 0.643096 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.457572 0.352815 0.630751 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.481907 0.34864 0.606059 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.457572 0.352815 0.606059 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.472692 0.367935 0.593714 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.461844 0.304709 0.43322 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.492085 0.33495 0.372739 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.492085 0.33495 0.348047 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.488469 0.313874 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.471009 0.331334 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.495701 0.356025 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.474625 0.352409 0.372739 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.495701 0.356025 0.385084 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.51316 0.338566 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.51316 0.338566 0.385084 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.509544 0.31749 0.372739 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.424345 0.305171 0.369341 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.40568 0.315605 0.356995 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.403931 0.312107 0.381374 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.419383 0.329161 0.372427 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.426095 0.30867 0.344961 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.439797 0.322225 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.444759 0.298235 0.357307 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.410643 0.291616 0.353908 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.429307 0.281181 0.366254 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.408893 0.288117 0.378288 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.435193 0.368397 0.406378 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.440864 0.389015 0.394032 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.457301 0.37895 0.409464 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.451857 0.367697 0.388171 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.418755 0.378463 0.390945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.429748 0.357145 0.385084 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.413085 0.357845 0.403291 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.4242 0.389715 0.412239 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.418529 0.369098 0.424584 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.440637 0.37965 0.427671 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.529584 0.334488 0.436618 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.546497 0.347572 0.424272 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.532117 0.331508 0.412239 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.522481 0.352406 0.421186 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.543964 0.350552 0.448652 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.519948 0.355387 0.445566 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.52705 0.337468 0.460998 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.5536 0.329654 0.439705 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.536686 0.31657 0.45205 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.53922 0.313589 0.427671 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.472692 0.367935 0.470257 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.48474 0.389488 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.495668 0.369235 0.46131 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.477004 0.379669 0.448964 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.461764 0.388188 0.479204 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.454027 0.37837 0.457911 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.449715 0.366636 0.479204 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.480429 0.377754 0.49155 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.46838 0.356202 0.49155 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.491357 0.357501 0.482603 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.499343 0.304247 0.497099 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.518259 0.314219 0.509445 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.519922 0.310678 0.485065 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.504895 0.328108 0.494013 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.49768 0.307788 0.521479 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.484316 0.321677 0.506047 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.478764 0.297816 0.509133 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.512708 0.290358 0.512531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.493791 0.280387 0.500186 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.51437 0.286818 0.488152 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.518736 0.271262 0.399581 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.539811 0.274878 0.387235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.520873 0.290418 0.384149 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.533373 0.290264 0.405442 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.537674 0.255722 0.402668 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.531235 0.271108 0.420874 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.516598 0.252106 0.415013 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.525174 0.255876 0.381374 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.504099 0.25226 0.39372 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.506236 0.271416 0.378288 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.488495 0.241021 0.460062 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.50716 0.230587 0.472408 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.51153 0.24936 0.456976 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.499694 0.253381 0.478269 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.484125 0.222248 0.475494 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.476659 0.245042 0.481355 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.46546 0.232683 0.463149 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.495961 0.218227 0.454201 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.477296 0.228661 0.441856 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.500331 0.237 0.438769 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.450996 0.241483 0.396183 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.455172 0.217147 0.396183 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.472226 0.232599 0.40513 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.45115 0.228983 0.417476 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.433942 0.226031 0.387235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.429921 0.237867 0.408529 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.429767 0.250367 0.387235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.455018 0.229647 0.37489 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.450842 0.253983 0.37489 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.472072 0.245099 0.383837 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.304709 0.461844 0.43322 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.33495 0.492085 0.372739 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.33495 0.492085 0.348047 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.331334 0.471009 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.313874 0.488469 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.338566 0.51316 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.31749 0.509544 0.372739 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.338566 0.51316 0.385084 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.356025 0.495701 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.356025 0.495701 0.385084 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.352409 0.474625 0.372739 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.368397 0.435193 0.406378 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.389015 0.440864 0.394032 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.367697 0.451857 0.388171 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.37895 0.457301 0.409464 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.389715 0.4242 0.412239 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.37965 0.440637 0.427671 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.369098 0.418529 0.424584 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.378463 0.418755 0.390945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.357845 0.413085 0.403291 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.357145 0.429748 0.385084 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.305171 0.424345 0.369341 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.315605 0.40568 0.356995 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.329161 0.419383 0.372427 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.312107 0.403931 0.381374 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.291616 0.410643 0.353908 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.288117 0.408893 0.378288 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.281181 0.429307 0.366254 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.30867 0.426095 0.344961 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.298235 0.444759 0.357307 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.322225 0.439797 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.271262 0.518736 0.399581 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.274878 0.539811 0.387235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.290264 0.533373 0.405442 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.290418 0.520873 0.384149 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.255876 0.525174 0.381374 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.271416 0.506236 0.378288 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.25226 0.504099 0.39372 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.255722 0.537674 0.402668 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.252106 0.516598 0.415013 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.271108 0.531235 0.420874 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.241483 0.450996 0.396183 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.217147 0.455172 0.396183 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.228983 0.45115 0.417476 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.232599 0.472226 0.40513 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.229647 0.455018 0.37489 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.245099 0.472072 0.383837 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.253983 0.450842 0.37489 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.226031 0.433942 0.387235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.250367 0.429767 0.387235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.237867 0.429921 0.408529 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.241021 0.488495 0.460062 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.230587 0.50716 0.472408 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.253381 0.499694 0.478269 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.24936 0.51153 0.456976 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.218227 0.495961 0.454201 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.237 0.500331 0.438769 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.228661 0.477296 0.441856 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.222248 0.484125 0.475494 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.232683 0.46546 0.463149 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.245042 0.476659 0.481355 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.334488 0.529584 0.436618 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.347572 0.546497 0.424272 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.352406 0.522481 0.421186 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.331508 0.532117 0.412239 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.329654 0.5536 0.439705 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.313589 0.53922 0.427671 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.31657 0.536686 0.45205 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.350552 0.543964 0.448652 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.337468 0.52705 0.460998 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.355387 0.519948 0.445566 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.304247 0.499343 0.497099 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.314219 0.518259 0.509445 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.328108 0.504895 0.494013 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.310678 0.519922 0.485065 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.290358 0.512708 0.512531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.286818 0.51437 0.488152 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.280387 0.493791 0.500186 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.307788 0.49768 0.521479 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.297816 0.478764 0.509133 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.321677 0.484316 0.506047 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.367935 0.472692 0.470257 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.389488 0.48474 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.379669 0.477004 0.448964 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.369235 0.495668 0.46131 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.377754 0.480429 0.49155 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.357501 0.491357 0.482603 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.356202 0.46838 0.49155 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.388188 0.461764 0.479204 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.366636 0.449715 0.479204 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.37837 0.454027 0.457911 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.230635 0.38777 0.729516 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.2506 0.446614 0.769837 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.264242 0.467193 0.770086 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.272442 0.447086 0.758332 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.253384 0.459832 0.749168 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.2424 0.46672 0.781591 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.231541 0.459359 0.760673 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.228758 0.446141 0.781342 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.261459 0.453974 0.790755 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.247817 0.433396 0.790506 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.269659 0.433868 0.779001 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.301839 0.407906 0.732914 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.319874 0.420236 0.72141 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.303021 0.407886 0.708251 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.296625 0.428474 0.720288 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.318692 0.420256 0.746073 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.295442 0.428494 0.744951 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.300656 0.407926 0.757577 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.325088 0.399668 0.734036 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.307053 0.387338 0.745541 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.308235 0.387318 0.720878 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.253236 0.449775 0.695877 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.263032 0.459076 0.675209 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.270029 0.436804 0.683251 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.247378 0.440021 0.673964 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.246239 0.472047 0.687835 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.230585 0.452992 0.68659 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.236443 0.462746 0.708504 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.26889 0.468829 0.697123 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.259094 0.459528 0.717791 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.275887 0.446557 0.705165 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.179397 0.426478 0.766439 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.174744 0.447688 0.778193 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.197172 0.437457 0.779597 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.1895 0.447523 0.758396 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.156968 0.436708 0.765035 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.171724 0.436544 0.745238 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.161621 0.415499 0.753281 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.164641 0.426642 0.786236 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.169293 0.405432 0.774481 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.187069 0.416412 0.787639 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.182032 0.429639 0.692479 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.177682 0.45215 0.683315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.190087 0.449636 0.704516 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.200611 0.44299 0.683192 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.169628 0.432153 0.671279 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.192556 0.422992 0.671155 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.173978 0.409641 0.680442 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.159104 0.438799 0.692603 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.163454 0.416288 0.701767 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.171508 0.436286 0.713804 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.159431 0.367634 0.726118 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.13761 0.368692 0.737623 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.158434 0.366998 0.750781 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.153102 0.387887 0.738744 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.138607 0.369329 0.71296 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.154099 0.388523 0.714081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.160429 0.36827 0.701455 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.14394 0.34844 0.724997 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.165761 0.347381 0.713492 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.164764 0.346745 0.738155 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.227999 0.384609 0.803476 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.237348 0.393812 0.824394 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.251829 0.390976 0.804597 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.234368 0.408432 0.804721 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.213518 0.387445 0.823273 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.210538 0.402066 0.8036 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.204169 0.378242 0.802355 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.23098 0.369989 0.823149 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.221631 0.360786 0.802231 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.245461 0.367152 0.803352 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.208034 0.325765 0.763155 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.209548 0.312342 0.783824 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.229235 0.324887 0.775781 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.209827 0.337 0.785069 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.188347 0.31322 0.771198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.188626 0.337878 0.772443 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.186834 0.326643 0.750529 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.207755 0.301107 0.76191 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.206242 0.31453 0.741241 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.227442 0.313652 0.753867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.279238 0.345901 0.766553 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.302145 0.344931 0.775717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.297823 0.356827 0.754517 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.289691 0.366251 0.775841 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.28356 0.334005 0.787754 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.271106 0.355325 0.787878 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.260653 0.334975 0.77859 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.291692 0.324581 0.766429 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.268785 0.325551 0.757266 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.28737 0.336477 0.745229 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.115031 0.4293 0.544331 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.102505 0.502308 0.544331 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.110567 0.524146 0.536101 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.126738 0.506465 0.542066 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.112687 0.504055 0.521905 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0863343 0.519988 0.538366 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0884544 0.499897 0.524171 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0782715 0.49815 0.546597 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.100385 0.522399 0.558526 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0923218 0.500561 0.566757 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.116555 0.504718 0.564491 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.160392 0.474661 0.581368 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.177777 0.492047 0.579103 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.176681 0.473492 0.56285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.159222 0.490951 0.56285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.161488 0.493217 0.597621 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.142932 0.492121 0.581368 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.144102 0.475831 0.599887 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.178947 0.475757 0.597621 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.161561 0.458371 0.599887 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.177851 0.457202 0.581368 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.160392 0.474661 0.507294 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.167697 0.481967 0.484868 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.161561 0.458371 0.488775 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.144102 0.475831 0.488775 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.166528 0.498257 0.503387 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.142932 0.492121 0.507294 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.159222 0.490951 0.525813 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.183987 0.480797 0.503387 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.176681 0.473492 0.525813 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.177851 0.457202 0.507294 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0571437 0.456947 0.507294 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0450372 0.477623 0.501329 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.055591 0.475469 0.523547 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0696413 0.47788 0.503387 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0465898 0.4591 0.485076 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.071194 0.459357 0.487134 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0586963 0.438424 0.491041 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0325396 0.45669 0.505236 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0446461 0.436013 0.511201 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0430934 0.454536 0.527454 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.115031 0.4293 0.470257 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.10495 0.439381 0.450097 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0911807 0.435691 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.10864 0.45315 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.128801 0.43299 0.450097 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.13249 0.44676 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.138881 0.42291 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.111341 0.415531 0.450097 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.121421 0.40545 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0975713 0.411841 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0696698 0.383939 0.507294 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.052284 0.366554 0.509559 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0708393 0.36765 0.525813 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0533799 0.385109 0.525813 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0511144 0.382844 0.491041 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0522103 0.401399 0.507294 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0685002 0.400229 0.488775 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0685739 0.365384 0.491041 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0859596 0.38277 0.488775 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0871292 0.36648 0.507294 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0571437 0.456947 0.581368 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0493251 0.475575 0.595564 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0725262 0.467381 0.597621 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.06557 0.479825 0.577461 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0339426 0.465141 0.57931 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0501875 0.46939 0.561208 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0417612 0.446512 0.565115 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0408988 0.452697 0.599471 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0487174 0.434069 0.585275 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0640999 0.444504 0.601529 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0696698 0.383939 0.581368 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0623642 0.376634 0.603794 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0859596 0.38277 0.599887 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0685002 0.400229 0.599887 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0460743 0.377803 0.585275 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0522103 0.401399 0.581368 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0533799 0.385109 0.56285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0635337 0.360344 0.585275 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0708393 0.36765 0.56285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0871292 0.36648 0.581368 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.115031 0.4293 0.618405 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.125111 0.439381 0.638566 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.138881 0.435691 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.121421 0.45315 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.101261 0.43299 0.638566 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0975713 0.44676 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0911807 0.42291 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.11872 0.415531 0.638566 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.10864 0.40545 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.13249 0.411841 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.082487 0.239622 0.655442 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.0438957 0.258053 0.715923 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0426858 0.273525 0.735128 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.064638 0.265928 0.726759 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0510334 0.281546 0.713318 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0219434 0.26565 0.724292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.030291 0.273671 0.702483 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0231533 0.250178 0.705088 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0355481 0.250032 0.737733 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.036758 0.23456 0.718528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0575003 0.242434 0.729364 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.117687 0.252557 0.719322 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.135677 0.265544 0.730157 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.138361 0.25778 0.706872 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.12224 0.275732 0.71212 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.115003 0.26032 0.742607 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.101567 0.270508 0.72457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.097014 0.247334 0.731771 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.131123 0.242369 0.737359 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.113134 0.229382 0.726523 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.133808 0.234605 0.714074 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0863845 0.308551 0.682285 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0971427 0.330622 0.67968 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.109956 0.310023 0.675083 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.091905 0.317013 0.659755 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0735708 0.329151 0.686881 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0683331 0.315541 0.666956 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0628126 0.30708 0.689486 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0916222 0.322161 0.702209 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.080864 0.30009 0.704814 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.104436 0.301561 0.697613 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00869528 0.245118 0.652044 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0110117 0.257416 0.660413 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00823377 0.253319 0.675329 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0102865 0.269325 0.656641 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0105502 0.249215 0.637128 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.010748 0.261124 0.633356 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00915679 0.236916 0.628759 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0126029 0.233209 0.655816 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00710408 0.22091 0.647447 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00664257 0.229111 0.670732 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0511841 0.295616 0.618405 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0555846 0.315856 0.604965 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0705987 0.309941 0.623653 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0705297 0.296292 0.603077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.03617 0.301531 0.599717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0511152 0.281968 0.597829 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0317696 0.281291 0.613157 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.036239 0.31518 0.620293 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0318385 0.29494 0.633733 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.051253 0.309265 0.638981 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0472866 0.226687 0.591563 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.025169 0.224935 0.580727 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0281502 0.217281 0.604012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0288111 0.241399 0.598764 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0443054 0.234341 0.568278 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0479475 0.250805 0.586315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.066423 0.236092 0.579113 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0436445 0.210223 0.573526 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0657621 0.211974 0.584361 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0466257 0.202569 0.596811 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0399982 0.189123 0.689081 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0335228 0.179527 0.71089 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0567332 0.187058 0.707118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0385291 0.203632 0.709006 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0167878 0.181593 0.692853 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.021794 0.205698 0.690969 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0232631 0.191189 0.671044 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0349919 0.165018 0.690965 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0414672 0.174615 0.669156 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0582023 0.172549 0.687193 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0785895 0.170692 0.6286 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0867911 0.147549 0.631205 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.101845 0.166573 0.635801 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.083121 0.161663 0.65113 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0635354 0.151669 0.624003 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0598652 0.165782 0.643928 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0553337 0.174812 0.621398 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0822597 0.156579 0.608675 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.074058 0.179722 0.60607 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0973138 0.175603 0.613272 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.11379 0.183628 0.692479 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.133336 0.176775 0.705919 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.136161 0.192663 0.687231 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.124499 0.199753 0.707807 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.110965 0.167739 0.711167 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.102127 0.190718 0.713055 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0914184 0.174592 0.697727 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.122627 0.160649 0.690591 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.103081 0.167502 0.677151 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.125452 0.176537 0.671903 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.38777 0.230635 0.729516 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.446614 0.2506 0.769837 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.467193 0.264242 0.770086 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.459832 0.253384 0.749168 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.447086 0.272442 0.758332 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.453974 0.261459 0.790755 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.433868 0.269659 0.779001 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.433396 0.247817 0.790506 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.46672 0.2424 0.781591 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.446141 0.228758 0.781342 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.459359 0.231541 0.760673 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.449775 0.253236 0.695877 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.459076 0.263032 0.675209 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.440021 0.247378 0.673964 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.436804 0.270029 0.683251 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.468829 0.26889 0.697123 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.446557 0.275887 0.705165 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.459528 0.259094 0.717791 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.472047 0.246239 0.687835 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.462746 0.236443 0.708504 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.452992 0.230585 0.68659 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.407906 0.301839 0.732914 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.420236 0.319874 0.72141 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.428474 0.296625 0.720288 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.407886 0.303021 0.708251 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.399668 0.325088 0.734036 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.387318 0.308235 0.720878 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.387338 0.307053 0.745541 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.420256 0.318692 0.746073 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.407926 0.300656 0.757577 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.428494 0.295442 0.744951 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.384609 0.227999 0.803476 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.393812 0.237348 0.824394 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.408432 0.234368 0.804721 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.390976 0.251829 0.804597 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.369989 0.23098 0.823149 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.367152 0.245461 0.803352 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.360786 0.221631 0.802231 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.387445 0.213518 0.823273 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.378242 0.204169 0.802355 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.402066 0.210538 0.8036 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.345901 0.279238 0.766553 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.344931 0.302145 0.775717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.366251 0.289691 0.775841 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.356827 0.297823 0.754517 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.324581 0.291692 0.766429 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.336477 0.28737 0.745229 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.325551 0.268785 0.757266 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.334005 0.28356 0.787754 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.334975 0.260653 0.77859 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.355325 0.271106 0.787878 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.325765 0.208034 0.763155 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.312342 0.209548 0.783824 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.337 0.209827 0.785069 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.324887 0.229235 0.775781 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.301107 0.207755 0.76191 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.313652 0.227442 0.753867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.31453 0.206242 0.741241 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.31322 0.188347 0.771198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.326643 0.186834 0.750529 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.337878 0.188626 0.772443 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.426478 0.179397 0.766439 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.447688 0.174744 0.778193 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.447523 0.1895 0.758396 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.437457 0.197172 0.779597 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.426642 0.164641 0.786236 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.416412 0.187069 0.787639 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.405432 0.169293 0.774481 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.436708 0.156968 0.765035 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.415499 0.161621 0.753281 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.436544 0.171724 0.745238 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.367634 0.159431 0.726118 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.368692 0.13761 0.737623 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.387887 0.153102 0.738744 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.366998 0.158434 0.750781 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.34844 0.14394 0.724997 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.346745 0.164764 0.738155 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.347381 0.165761 0.713492 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.369329 0.138607 0.71296 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.36827 0.160429 0.701455 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.388523 0.154099 0.714081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.429639 0.182032 0.692479 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.45215 0.177682 0.683315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.44299 0.200611 0.683192 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.449636 0.190087 0.704516 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.438799 0.159104 0.692603 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.436286 0.171508 0.713804 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.416288 0.163454 0.701767 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.432153 0.169628 0.671279 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.409641 0.173978 0.680442 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.422992 0.192556 0.671155 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.239622 0.082487 0.655442 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.258053 0.0438957 0.715923 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.273525 0.0426858 0.735128 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.281546 0.0510334 0.713318 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.265928 0.064638 0.726759 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.250032 0.0355481 0.737733 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.242434 0.0575003 0.729364 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.23456 0.036758 0.718528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.26565 0.0219434 0.724292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.250178 0.0231533 0.705088 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.273671 0.030291 0.702483 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.308551 0.0863845 0.682285 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.330622 0.0971427 0.67968 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.317013 0.091905 0.659755 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.310023 0.109956 0.675083 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.322161 0.0916222 0.702209 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.301561 0.104436 0.697613 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.30009 0.080864 0.704814 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.329151 0.0735708 0.686881 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.30708 0.0628126 0.689486 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.315541 0.0683331 0.666956 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.252557 0.117687 0.719322 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.265544 0.135677 0.730157 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.275732 0.12224 0.71212 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.25778 0.138361 0.706872 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.242369 0.131123 0.737359 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.234605 0.133808 0.714074 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.229382 0.113134 0.726523 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.26032 0.115003 0.742607 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.247334 0.097014 0.731771 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.270508 0.101567 0.72457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.189123 0.0399982 0.689081 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.179527 0.0335228 0.71089 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.203632 0.0385291 0.709006 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.187058 0.0567332 0.707118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.165018 0.0349919 0.690965 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.172549 0.0582023 0.687193 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.174615 0.0414672 0.669156 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.181593 0.0167878 0.692853 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.191189 0.0232631 0.671044 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.205698 0.021794 0.690969 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.183628 0.11379 0.692479 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.176775 0.133336 0.705919 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.199753 0.124499 0.707807 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.192663 0.136161 0.687231 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.160649 0.122627 0.690591 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.176537 0.125452 0.671903 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.167502 0.103081 0.677151 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.167739 0.110965 0.711167 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.174592 0.0914184 0.697727 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.190718 0.102127 0.713055 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.170692 0.0785895 0.6286 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.147549 0.0867911 0.631205 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.161663 0.083121 0.65113 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.166573 0.101845 0.635801 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.156579 0.0822597 0.608675 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.175603 0.0973138 0.613272 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.179722 0.074058 0.60607 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.151669 0.0635354 0.624003 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.174812 0.0553337 0.621398 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.165782 0.0598652 0.643928 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.245118 0.00869528 0.652044 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.257416 -0.0110117 0.660413 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.269325 0.0102865 0.656641 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.253319 0.00823377 0.675329 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.233209 -0.0126029 0.655816 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.229111 0.00664257 0.670732 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.22091 0.00710408 0.647447 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.249215 -0.0105502 0.637128 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.236916 0.00915679 0.628759 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.261124 0.010748 0.633356 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.226687 0.0472866 0.591563 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.224935 0.025169 0.580727 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.241399 0.0288111 0.598764 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.217281 0.0281502 0.604012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.210223 0.0436445 0.573526 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.202569 0.0466257 0.596811 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.211974 0.0657621 0.584361 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.234341 0.0443054 0.568278 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.236092 0.066423 0.579113 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.250805 0.0479475 0.586315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.295616 0.0511841 0.618405 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.315856 0.0555846 0.604965 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.296292 0.0705297 0.603077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.309941 0.0705987 0.623653 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.31518 0.036239 0.620293 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.309265 0.051253 0.638981 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.29494 0.0318385 0.633733 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.301531 0.03617 0.599717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.281291 0.0317696 0.613157 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.281968 0.0511152 0.597829 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.4293 0.115031 0.544331 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.502308 0.102505 0.544331 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.524146 0.110567 0.536101 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.504055 0.112687 0.521905 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.506465 0.126738 0.542066 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.522399 0.100385 0.558526 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.504718 0.116555 0.564491 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.500561 0.0923218 0.566757 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.519988 0.0863343 0.538366 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.49815 0.0782715 0.546597 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.499897 0.0884544 0.524171 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.474661 0.160392 0.507294 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.481967 0.167697 0.484868 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.475831 0.144102 0.488775 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.458371 0.161561 0.488775 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.480797 0.183987 0.503387 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.457202 0.177851 0.507294 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.473492 0.176681 0.525813 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.498257 0.166528 0.503387 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.490951 0.159222 0.525813 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.492121 0.142932 0.507294 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.474661 0.160392 0.581368 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.492047 0.177777 0.579103 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.490951 0.159222 0.56285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.473492 0.176681 0.56285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.475757 0.178947 0.597621 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.457202 0.177851 0.581368 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.458371 0.161561 0.599887 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.493217 0.161488 0.597621 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.475831 0.144102 0.599887 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.492121 0.142932 0.581368 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.456947 0.0571437 0.581368 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.475575 0.0493251 0.595564 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.479825 0.06557 0.577461 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.467381 0.0725262 0.597621 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.452697 0.0408988 0.599471 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.444504 0.0640999 0.601529 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.434069 0.0487174 0.585275 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.465141 0.0339426 0.57931 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.446512 0.0417612 0.565115 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.46939 0.0501875 0.561208 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.4293 0.115031 0.618405 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.439381 0.125111 0.638566 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.45315 0.121421 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.435691 0.138881 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.415531 0.11872 0.638566 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.411841 0.13249 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.40545 0.10864 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.43299 0.101261 0.638566 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.42291 0.0911807 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.44676 0.0975713 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.383939 0.0696698 0.581368 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.376634 0.0623642 0.603794 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.400229 0.0685002 0.599887 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.38277 0.0859596 0.599887 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.360344 0.0635337 0.585275 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.36648 0.0871292 0.581368 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.36765 0.0708393 0.56285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.377803 0.0460743 0.585275 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.385109 0.0533799 0.56285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.401399 0.0522103 0.581368 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.456947 0.0571437 0.507294 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.477623 0.0450372 0.501329 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.47788 0.0696413 0.503387 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.475469 0.055591 0.523547 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.45669 0.0325396 0.505236 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.454536 0.0430934 0.527454 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.436013 0.0446461 0.511201 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.4591 0.0465898 0.485076 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.438424 0.0586963 0.491041 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.459357 0.071194 0.487134 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.383939 0.0696698 0.507294 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.366554 0.052284 0.509559 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.385109 0.0533799 0.525813 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.36765 0.0708393 0.525813 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.365384 0.0685739 0.491041 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.36648 0.0871292 0.507294 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.38277 0.0859596 0.488775 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.382844 0.0511144 0.491041 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.400229 0.0685002 0.488775 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.401399 0.0522103 0.507294 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.4293 0.115031 0.470257 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.41922 0.125111 0.450097 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.40545 0.121421 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.42291 0.138881 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.44307 0.11872 0.450097 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.44676 0.13249 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.45315 0.10864 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.425611 0.101261 0.450097 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.435691 0.0911807 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.411841 0.0975713 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.643951 0.172546 1.11022e-16 RAD 0.166667 
-   txt002 
- SPHERE CENTER 0.802608 0.281471 -0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.824035 0.30566 -0.177765 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.822021 0.302088 -0.202114 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.821938 0.282758 -0.186751 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.802598 0.298094 -0.187402 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.824119 0.32499 -0.193128 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.804695 0.320997 -0.178416 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.826132 0.328563 -0.16878 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.843459 0.309654 -0.192477 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.845472 0.313227 -0.168128 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.843375 0.290324 -0.177114 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.787796 0.241352 -0.171592 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.785699 0.218449 -0.180578 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.802677 0.22345 -0.163362 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.778718 0.223304 -0.157397 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.770818 0.236351 -0.188808 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.763837 0.241205 -0.165627 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.772915 0.259253 -0.179823 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.794777 0.236497 -0.194773 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.796874 0.2594 -0.185788 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.811756 0.241498 -0.177557 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.752156 0.305221 -0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.741263 0.325175 -0.169507 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.747715 0.32493 -0.145675 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.765112 0.325981 -0.163165 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.745704 0.305466 -0.183703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.769553 0.306272 -0.17736 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.756597 0.285513 -0.174066 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.728307 0.304415 -0.166213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.7392 0.284462 -0.156576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.734759 0.304171 -0.142381 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.838847 0.34578 -0.117284 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.851488 0.360404 -0.132647 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.853509 0.335865 -0.1345 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.832518 0.347059 -0.141116 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.836826 0.370319 -0.115431 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.817857 0.356973 -0.1239 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.824185 0.355695 -0.100068 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.857816 0.359125 -0.108814 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.845176 0.344501 -0.0934517 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.859838 0.334587 -0.110668 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.766968 0.345341 -0.099389 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.768944 0.369945 -0.10004 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.788341 0.356172 -0.093424 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.780624 0.356171 -0.116879 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.747572 0.359113 -0.106005 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.759252 0.34534 -0.122844 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.745596 0.33451 -0.105354 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.755289 0.359115 -0.0825505 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.753313 0.334511 -0.0818993 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.774685 0.345342 -0.0759343 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.817421 0.321591 -0.0506299 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.83071 0.340361 -0.0416443 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.840365 0.325527 -0.0588603 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.822249 0.341208 -0.0648253 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.807766 0.336425 -0.0334138 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.799305 0.337272 -0.0565949 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.794477 0.317654 -0.0423994 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.825882 0.320744 -0.0274488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.812593 0.301973 -0.0364345 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.835537 0.30591 -0.0446649 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.874487 0.28191 -0.129006 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.891539 0.292033 -0.143718 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.868678 0.28812 -0.152187 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.872763 0.305711 -0.135349 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.897348 0.285824 -0.120537 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.878572 0.299501 -0.112168 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.880296 0.275701 -0.105825 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.893263 0.268233 -0.137375 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.876212 0.25811 -0.122663 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.870402 0.264319 -0.145845 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.853061 0.257721 -0.062352 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.87538 0.26204 -0.0527151 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.87108 0.266856 -0.0765474 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.860805 0.280934 -0.0590577 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.857361 0.252905 -0.0385197 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.842785 0.271799 -0.0448623 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.835041 0.248586 -0.0481565 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.867636 0.238827 -0.0560094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.845317 0.234508 -0.0656463 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.863337 0.243643 -0.0798417 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.838248 0.217602 -0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.860225 0.206363 -0.122182 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.858689 0.230102 -0.128798 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.854636 0.223536 -0.105343 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.839784 0.193863 -0.116217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.834196 0.211035 -0.0993785 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.817808 0.205101 -0.116868 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.843837 0.200429 -0.139672 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.821861 0.211667 -0.140323 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.842301 0.224168 -0.146288 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.643951 0.172546 -0.222222 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.61371 0.202787 -0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.61556 0.221097 -0.299164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.621702 0.225035 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.635958 0.210779 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.607567 0.198849 -0.306292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.627965 0.188531 -0.296959 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.605717 0.180539 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.593312 0.213105 -0.292037 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.591462 0.194794 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.599454 0.217042 -0.268448 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.5724 0.191718 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.556122 0.208861 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.575596 0.203643 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.578791 0.215568 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.552927 0.196936 -0.236478 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.575596 0.203643 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.569205 0.179793 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.549732 0.185011 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.56601 0.167868 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.569205 0.179793 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.624779 0.244096 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.631486 0.266765 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.648629 0.250487 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.636704 0.247291 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.607636 0.260374 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.612854 0.240901 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.600929 0.237705 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.619561 0.26357 -0.207967 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.612854 0.240901 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.636704 0.247291 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.68526 0.183615 -0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.684921 0.190903 -0.306292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.665787 0.178397 -0.296959 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.669989 0.201661 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.704395 0.196121 -0.292037 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.689462 0.206879 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.704733 0.188833 -0.268448 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.700193 0.172858 -0.299164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.700531 0.165569 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.681058 0.160351 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.696329 0.224924 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.710584 0.23918 -0.236478 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.705059 0.216195 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.687599 0.233654 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.701855 0.24791 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.678869 0.242384 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.687599 0.233654 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.719314 0.23045 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.705059 0.216195 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.713788 0.207465 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.715501 0.153374 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.738169 0.160081 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.718696 0.165299 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.721891 0.177224 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.734974 0.148156 -0.207967 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.718696 0.165299 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.712305 0.141449 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.731779 0.136231 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.70911 0.129524 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.712305 0.141449 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.632882 0.131237 -0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.634145 0.108412 -0.292037 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.650927 0.115965 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.627664 0.111763 -0.268448 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.616099 0.123683 -0.299164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.609618 0.127034 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.614836 0.146508 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.639363 0.127886 -0.306292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.6381 0.15071 -0.296959 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.656145 0.135439 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.663122 0.100996 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.680265 0.0847178 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.686972 0.107387 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.675047 0.104191 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.656415 0.0783272 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.651197 0.0978007 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.639272 0.0946054 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.66834 0.0815225 -0.236478 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.651197 0.0978007 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.675047 0.104191 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.591572 0.120168 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.577317 0.105912 -0.207967 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.600302 0.111438 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.582843 0.128897 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.568587 0.114642 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.574113 0.137627 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.582843 0.128897 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.586046 0.0971825 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.600302 0.111438 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.609032 0.102708 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.594141 0.358439 -0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.619127 0.408291 -0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.625955 0.411883 -0.183325 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.630791 0.390369 -0.172216 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.607547 0.396287 -0.178077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.61429 0.429805 -0.170979 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.595882 0.414208 -0.165731 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.607462 0.426212 -0.147525 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.637535 0.423887 -0.165118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.630706 0.420295 -0.141664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.642371 0.402373 -0.154009 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.665691 0.37761 -0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.68332 0.389713 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.665691 0.37761 -0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.660156 0.398265 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.68332 0.389713 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.660156 0.398265 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.665691 0.37761 -0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.688854 0.369058 -0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.671225 0.356956 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.671225 0.356956 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.638217 0.337042 -0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.652948 0.344865 -0.184873 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.632683 0.357697 -0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.651954 0.357326 -0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.658482 0.324211 -0.172528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.657489 0.336672 -0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.643752 0.316388 -0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.639211 0.324581 -0.18796 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.624481 0.316758 -0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.618946 0.337413 -0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.547576 0.389119 -0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.541008 0.410169 -0.170979 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.548718 0.410472 -0.147525 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.564748 0.405866 -0.165731 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.539866 0.388816 -0.183325 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.563607 0.384513 -0.178077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.546435 0.367766 -0.172216 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.523836 0.393422 -0.165118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.530405 0.372372 -0.154009 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.531546 0.393725 -0.141664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.566667 0.317871 -0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.555534 0.296626 -0.172528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.572202 0.297216 -0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.550163 0.307914 -0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.549999 0.31728 -0.184873 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.544629 0.328569 -0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.561133 0.338525 -0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.572037 0.306582 -0.18796 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.583171 0.327827 -0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.588706 0.307172 -0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.522591 0.339267 -0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.501272 0.340934 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.522591 0.339267 -0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.517056 0.359921 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.501272 0.340934 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.517056 0.359921 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.522591 0.339267 -0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.506807 0.320279 -0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.528125 0.318612 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.528125 0.318612 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.57505 0.429687 -0.104315 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.58161 0.452905 -0.109563 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.5989 0.436077 -0.104315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.586467 0.434777 -0.125608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.55776 0.446515 -0.109563 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.562617 0.428387 -0.125608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.5512 0.423296 -0.104315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.570193 0.447815 -0.0882695 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.563633 0.424596 -0.0830215 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.587483 0.430987 -0.0830215 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.550064 0.379835 -0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.547099 0.396248 -0.0373488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.569716 0.388263 -0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.557504 0.403175 -0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.527447 0.387819 -0.0496945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.537852 0.394747 -0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.530412 0.371406 -0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.539659 0.372907 -0.0342624 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.542624 0.356494 -0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.562276 0.364922 -0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.621614 0.399007 -0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.637209 0.41723 -0.0496945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.642848 0.401533 -0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.624734 0.418027 -0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.615976 0.414703 -0.0373488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.603501 0.4155 -0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.600381 0.39648 -0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.634089 0.39821 -0.0342624 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.618494 0.379986 -0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.639728 0.382513 -0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.802608 0.281471 0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.858698 0.329459 0.104938 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.872345 0.34259 0.0890951 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.86421 0.32016 0.0827387 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.848329 0.338969 0.0846485 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.866833 0.351888 0.111295 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.842817 0.348268 0.106848 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.853186 0.338757 0.127138 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.882715 0.333079 0.109385 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.869068 0.319948 0.125228 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.87458 0.310649 0.103028 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.845371 0.280879 0.0506299 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.849036 0.291048 0.0284303 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.826067 0.287867 0.0369125 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.840755 0.304882 0.0471312 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.868341 0.28406 0.0421477 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.86006 0.297894 0.0608487 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.864676 0.273891 0.0643473 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.853652 0.267046 0.0319289 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.849987 0.256877 0.0541285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.830683 0.263865 0.0404111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.798572 0.337088 0.062352 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.808673 0.346884 0.0420622 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.82298 0.335792 0.0588533 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.807762 0.322361 0.044793 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.784265 0.34818 0.0455609 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.783355 0.323657 0.0482916 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.774164 0.338384 0.0658506 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.799483 0.361611 0.0596212 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.789382 0.351815 0.079911 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.81379 0.350519 0.0764123 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.815936 0.330051 0.165419 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.828769 0.350165 0.171776 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.838905 0.333232 0.156937 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.820583 0.347547 0.148628 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.805799 0.346984 0.180258 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.797614 0.344366 0.157111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.792966 0.32687 0.173902 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.824121 0.332668 0.188567 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.811288 0.312554 0.182211 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.834258 0.315735 0.173728 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.75581 0.33768 0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.753851 0.362219 0.124743 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.774086 0.350765 0.133052 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.76987 0.352319 0.108773 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.735575 0.349134 0.114524 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.751594 0.339233 0.0985541 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.737534 0.324595 0.112614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.739791 0.347581 0.138803 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.74175 0.323042 0.136894 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.760026 0.336127 0.147112 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.759846 0.282063 0.171592 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.756464 0.29233 0.193792 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.779336 0.288514 0.18531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.765125 0.305929 0.175091 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.736973 0.285879 0.180075 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.745634 0.299478 0.161374 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.740355 0.275612 0.157875 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.751185 0.268464 0.190293 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.754567 0.258198 0.168094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.774058 0.264649 0.181811 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.862735 0.273842 0.153697 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.885497 0.282313 0.158144 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.876946 0.281455 0.134996 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.867718 0.29787 0.150967 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.871286 0.274699 0.176845 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.853506 0.290257 0.169668 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.848523 0.266228 0.172398 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.880514 0.258284 0.160875 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.857752 0.249813 0.156428 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.871963 0.257427 0.137727 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.806645 0.225855 0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.818054 0.21762 0.18016 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.83061 0.230661 0.163369 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.813612 0.241754 0.177429 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.794089 0.212813 0.176661 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.789647 0.236948 0.173931 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.78268 0.221048 0.156372 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.811087 0.20172 0.162601 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.799677 0.209955 0.142311 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.823642 0.214761 0.14581 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.849407 0.225263 0.099389 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.873186 0.21889 0.0974792 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.865588 0.240865 0.0891702 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.866351 0.236437 0.113449 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.857005 0.203288 0.107698 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.850171 0.220835 0.123668 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.833227 0.20966 0.109608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.856242 0.207715 0.0834188 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.832464 0.214088 0.0853287 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.848644 0.22969 0.0751099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.594141 0.358439 0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.613592 0.428945 0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.626191 0.448155 0.113782 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.634643 0.42519 0.110488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.614455 0.43276 0.0984536 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.60514 0.45191 0.126127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.593404 0.436515 0.110799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.592541 0.4327 0.135179 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.625328 0.44434 0.138161 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.612729 0.42513 0.147213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.63378 0.421375 0.134867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.665691 0.37761 0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.68332 0.389713 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.665691 0.37761 0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.660156 0.398265 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.68332 0.389713 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.660156 0.398265 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.665691 0.37761 0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.688854 0.369058 0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.671225 0.356956 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.671225 0.356956 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.621614 0.399007 0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.625435 0.399844 0.031176 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.627149 0.378352 0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.60511 0.38905 0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.619901 0.420499 0.0435217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.599576 0.409705 0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.61608 0.419661 0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.641939 0.409801 0.0466081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.638118 0.408963 0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.643653 0.388308 0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.542042 0.409774 0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.53788 0.433888 0.126127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.558395 0.423551 0.135179 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.55574 0.426423 0.110799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.521526 0.42011 0.113782 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.539387 0.412646 0.0984536 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.525689 0.395996 0.110488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.524182 0.417238 0.138161 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.528344 0.393124 0.134867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.544697 0.406901 0.147213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.550064 0.379835 0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.540802 0.399304 0.0435217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.54453 0.400489 0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.563801 0.400119 0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.546337 0.37865 0.031176 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.569335 0.379464 0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.555599 0.35918 0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.527065 0.37902 0.0466081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.536327 0.359551 0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.530793 0.380205 0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.522591 0.339267 0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.501272 0.340934 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.522591 0.339267 0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.517056 0.359921 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.501272 0.340934 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.517056 0.359921 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.522591 0.339267 0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.506807 0.320279 0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.528125 0.318612 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.528125 0.318612 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.586119 0.388377 0.178389 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.594185 0.405974 0.193717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.609969 0.394768 0.178389 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.593017 0.410332 0.169441 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.570335 0.399584 0.193717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.569167 0.403942 0.169441 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.562269 0.381987 0.178389 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.587286 0.384019 0.202664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.57922 0.366422 0.187336 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.60307 0.372813 0.187336 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.566667 0.317871 0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.567308 0.314012 0.191046 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.587901 0.320398 0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.569787 0.336891 0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.546074 0.311485 0.178701 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.548554 0.334364 0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.545434 0.315344 0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.564188 0.294991 0.175614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.563547 0.29885 0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.584781 0.301377 0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.638217 0.337042 0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.659244 0.341809 0.178701 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.65787 0.345471 0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.645657 0.360383 0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.639592 0.33338 0.191046 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.626005 0.351955 0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.618565 0.328614 0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.651804 0.318468 0.175614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.630777 0.313702 0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.65043 0.32213 0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.643951 0.172546 0.222222 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.674191 0.202787 0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.690652 0.219248 0.290934 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.695267 0.206403 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.677807 0.223862 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.669577 0.215632 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.656732 0.220246 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.653116 0.199171 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.687036 0.198172 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.670575 0.181711 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.691651 0.185327 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.715501 0.191718 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.733129 0.203821 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.715501 0.191718 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.709966 0.212373 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.733129 0.203821 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.709966 0.212373 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.715501 0.191718 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.738664 0.183166 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.721035 0.171063 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.721035 0.171063 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.663122 0.244096 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.675225 0.261725 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.683777 0.238562 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.663122 0.244096 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.65457 0.267259 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.642468 0.249631 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.642468 0.249631 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.675225 0.261725 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.663122 0.244096 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.683777 0.238562 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.602641 0.183615 0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.600215 0.197046 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.622701 0.191021 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.609032 0.207465 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.580155 0.18964 0.290934 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.588972 0.200059 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.582581 0.176209 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.593824 0.173196 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.596251 0.159765 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.61631 0.167171 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.591572 0.224924 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.587397 0.24926 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.606693 0.240045 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.606693 0.240045 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.572277 0.23414 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.591572 0.224924 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.576452 0.209804 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.572277 0.23414 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.576452 0.209804 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.591572 0.224924 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.5724 0.153374 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.551082 0.155041 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.5724 0.153374 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.566866 0.174029 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.551082 0.155041 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.566866 0.174029 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.5724 0.153374 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.556617 0.134387 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.577935 0.13272 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.577935 0.13272 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.655019 0.131237 0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.668451 0.12881 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.678869 0.137627 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.662426 0.151296 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.644601 0.12242 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.638576 0.144906 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.631169 0.124846 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.661044 0.108751 0.290934 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.647613 0.111177 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.671463 0.117567 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.624779 0.100996 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.626446 0.0796777 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.645433 0.0954616 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.624779 0.100996 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.605791 0.0852121 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.604124 0.10653 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.604124 0.10653 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.626446 0.0796777 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.624779 0.100996 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.645433 0.0954616 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.696329 0.120168 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.720665 0.115992 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.711449 0.135288 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.711449 0.135288 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.705544 0.100872 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.696329 0.120168 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.681209 0.105047 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.705544 0.100872 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.681209 0.105047 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.696329 0.120168 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.852418 0.0955788 1.89979e-16 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.922609 0.11107 -0.0178949 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.937225 0.122151 -0.0344251 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.916553 0.11086 -0.0418311 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.915202 0.131874 -0.0289382 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.943281 0.12236 -0.0104889 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.921258 0.132084 -0.00500196 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.928665 0.111279 0.00604126 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.944632 0.101346 -0.0233819 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.930016 0.0902645 -0.00685171 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.92396 0.090055 -0.0307879 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.867231 0.135698 -0.0604812 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.873196 0.134634 -0.0844174 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.882112 0.117797 -0.0687117 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.858152 0.11765 -0.0746767 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.858315 0.152536 -0.076187 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.843271 0.135552 -0.0664462 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.852349 0.1536 -0.0522508 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.882275 0.152682 -0.070222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.876309 0.153747 -0.0462858 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.89119 0.135845 -0.0545162 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.877966 0.164775 0.00679642 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.890926 0.182656 -0.0042468 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.897331 0.159019 -0.00739901 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.876622 0.167676 -0.0176871 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.871561 0.188412 0.00994863 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.857256 0.173431 -0.00349164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.8586 0.17053 0.0209919 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.89227 0.179755 0.0202367 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.87931 0.161874 0.0312799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.898675 0.156118 0.0170845 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.907797 0.0709499 0.0425863 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.930963 0.0752104 0.0499923 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.924191 0.0806562 0.0268805 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.915684 0.0941344 0.0457385 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.914568 0.0655041 0.065698 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.899289 0.0844281 0.0614442 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.891402 0.0612436 0.058292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.923076 0.0520258 0.0468401 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.89991 0.0477654 0.0394341 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.916304 0.0574717 0.0237283 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.863153 0.124655 0.0672777 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.875744 0.141535 0.0801706 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.88655 0.129819 0.0613127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.868763 0.146389 0.0569896 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.852347 0.136371 0.0861356 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.845366 0.141225 0.0629546 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.839756 0.119492 0.0732426 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.870135 0.119801 0.0904587 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.857544 0.102922 0.0775657 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.880941 0.108085 0.0716007 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.837606 0.0554592 0.0604812 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.842832 0.0523913 0.0844174 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.86055 0.0593957 0.0687117 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.842434 0.0750766 0.0746767 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.819888 0.0484547 0.076187 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.81949 0.07114 0.0664462 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.814662 0.0515226 0.0522508 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.838004 0.0327739 0.070222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.832778 0.0358417 0.0462858 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.855722 0.0397783 0.0545162 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.897062 0.0418734 -0.0246914 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.920407 0.0359958 -0.0301783 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.912106 0.0588574 -0.0344321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.915603 0.0511067 -0.0112511 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.905363 0.0190117 -0.0204376 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.900559 0.0341227 -0.00151032 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.882018 0.0248894 -0.0149506 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.901866 0.0267625 -0.0436186 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.878521 0.0326401 -0.0381316 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.893565 0.0496241 -0.0478724 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.826871 0.0263827 -0.00679642 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.825102 0.00436945 0.0042468 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.84533 0.018173 0.00739901 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.823964 0.025051 0.0176871 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.806642 0.0125791 -0.00994863 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.805505 0.0332607 0.00349164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.808411 0.0345923 -0.0209919 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.828008 0.00570109 -0.0202367 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.829777 0.0277143 -0.0312799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.848237 0.0195047 -0.0170845 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.841683 0.0665023 -0.0672777 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.840284 0.0454909 -0.0801706 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.856111 0.0473735 -0.0613127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.831823 0.0463379 -0.0569896 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.825856 0.0646197 -0.0861356 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.817395 0.0654667 -0.0629546 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.827255 0.0856311 -0.0732426 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.850144 0.0656554 -0.0904587 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.851543 0.0866667 -0.0775657 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.865971 0.0675379 -0.0716007 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.69376 -0.0133465 0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.740325 -0.0440268 0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.762259 -0.0417568 0.170979 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.759495 -0.0345526 0.147525 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.748937 -0.0216407 0.165731 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.743089 -0.051231 0.183325 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.729767 -0.0311149 0.178077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.721155 -0.053501 0.172216 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.753646 -0.0641429 0.165118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.731712 -0.0664129 0.154009 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.750882 -0.0569387 0.141664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.76531 0.0058253 0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.782939 0.0179281 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.76531 0.0058253 0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.759776 0.02648 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.782939 0.0179281 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.759776 0.02648 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.76531 0.0058253 0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.788473 -0.00272662 0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.770845 -0.0148294 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.770845 -0.0148294 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.721234 0.0272215 0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.736829 0.0454452 0.172528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.742467 0.0297485 0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.724354 0.046242 0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.715595 0.0429182 0.184873 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.70312 0.043715 0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.7 0.0246945 0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.733709 0.0264247 0.18796 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.718114 0.00820099 0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.739347 0.010728 0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.668775 -0.0631985 0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.669983 -0.0708196 0.183325 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.690113 -0.0618185 0.172216 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.671462 -0.0467378 0.178077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.648644 -0.0721997 0.170979 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.650123 -0.0481178 0.165731 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.647436 -0.0645786 0.147525 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.667296 -0.0872804 0.165118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.666087 -0.0796593 0.141664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.687426 -0.0782793 0.154009 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.649684 0.00804971 0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.646718 0.0244627 0.184873 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.669336 0.016478 0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.657124 0.0313903 0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.627066 0.0160343 0.172528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.637471 0.022962 0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.630031 -0.000378614 0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.639278 0.00112207 0.18796 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.642244 -0.0152909 0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.661896 -0.00686255 0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.62221 -0.0325183 0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.600892 -0.0308513 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.62221 -0.0325183 0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.616676 -0.0118635 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.600892 -0.0308513 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.616676 -0.0118635 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.62221 -0.0325183 0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.606426 -0.051506 0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.627745 -0.053173 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.627745 -0.053173 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.712851 -0.0845947 0.104315 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.730141 -0.101422 0.109563 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.736701 -0.0782041 0.104315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.725284 -0.0832945 0.125608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.706291 -0.107813 0.109563 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.701434 -0.0896851 0.125608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.689001 -0.0909853 0.104315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.717709 -0.102723 0.0882695 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.700418 -0.0858949 0.0830215 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.724268 -0.0795043 0.0830215 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.666287 -0.0539145 0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.655153 -0.0751594 0.0496945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.671821 -0.0745692 0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.649783 -0.0638711 0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.649619 -0.0545047 0.0373488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.644249 -0.0432164 0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.660752 -0.0332597 0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.671657 -0.0652028 0.0342624 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.682791 -0.0439578 0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.688325 -0.0646126 0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.737837 -0.0347427 0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.752567 -0.0269197 0.0373488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.732303 -0.014088 0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.751574 -0.0144587 0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.758102 -0.0475745 0.0496945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.757108 -0.0351134 0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.743371 -0.0553974 0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.73883 -0.0472037 0.0342624 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.7241 -0.0550267 0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.718566 -0.0343719 0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.69376 -0.0133465 -0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.745859 -0.0646815 -0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.770032 -0.0684873 -0.126127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.759394 -0.0481266 -0.135179 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.762305 -0.0507391 -0.110799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.756497 -0.0850422 -0.113782 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.74877 -0.067294 -0.0984536 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.732325 -0.0812364 -0.110488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.753586 -0.0824297 -0.138161 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.729413 -0.0786239 -0.134867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.742948 -0.062069 -0.147213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.76531 0.0058253 -0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.782939 0.0179281 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.76531 0.0058253 -0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.759776 0.02648 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.782939 0.0179281 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.759776 0.02648 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.76531 0.0058253 -0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.788473 -0.00272662 -0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.770845 -0.0148294 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.770845 -0.0148294 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.737837 -0.0347427 -0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.758864 -0.0299763 -0.0435217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.757489 -0.0263144 -0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.745277 -0.0114021 -0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.739212 -0.0384047 -0.031176 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.725625 -0.0198304 -0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.718185 -0.043171 -0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.751424 -0.0533169 -0.0466081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.730397 -0.0580833 -0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.750049 -0.0496549 -0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.674309 -0.0838533 -0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.675276 -0.106805 -0.113782 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.694308 -0.091423 -0.110488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.673094 -0.0875713 -0.0984536 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.655278 -0.0992356 -0.126127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.653095 -0.0800016 -0.110799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.65431 -0.0762835 -0.135179 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.676491 -0.103087 -0.138161 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.675524 -0.0801352 -0.147213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.695522 -0.0877049 -0.134867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.666287 -0.0539145 -0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.666927 -0.0577732 -0.031176 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.68752 -0.0513875 -0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.669407 -0.034894 -0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.645694 -0.0603001 -0.0435217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.648173 -0.0374209 -0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.645053 -0.0564414 -0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.663807 -0.0767937 -0.0466081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.663167 -0.072935 -0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.6844 -0.070408 -0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.62221 -0.0325183 -0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.600892 -0.0308513 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.62221 -0.0325183 -0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.616676 -0.0118635 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.600892 -0.0308513 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.616676 -0.0118635 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.62221 -0.0325183 -0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.606426 -0.051506 -0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.627745 -0.053173 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.627745 -0.053173 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.701782 -0.0432853 -0.178389 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.717566 -0.0544915 -0.193717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.725632 -0.0368947 -0.178389 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.718734 -0.0588496 -0.169441 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.693716 -0.0608821 -0.193717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.694884 -0.0652402 -0.169441 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.677932 -0.0496759 -0.178389 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.700615 -0.0389272 -0.202664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.684831 -0.027721 -0.187336 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.708681 -0.0213304 -0.187336 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.649684 0.00804971 -0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.640422 0.0275193 -0.178701 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.644149 0.0287044 -0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.66342 0.0283337 -0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.645956 0.00686453 -0.191046 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.668955 0.00767898 -0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.655218 -0.012605 -0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.626685 0.00723527 -0.175614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.635947 -0.0122343 -0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.630413 0.00842045 -0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.721234 0.0272215 -0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.725055 0.0280589 -0.191046 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.726768 0.00656677 -0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.70473 0.0172649 -0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.71952 0.0487136 -0.178701 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.699195 0.0379196 -0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.715699 0.0478762 -0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.741558 0.0380155 -0.175614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.737738 0.0371781 -0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.743272 0.0165234 -0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.172546 0.643951 1.11022e-16 RAD 0.166667 
-   txt002 
- SPHERE CENTER 0.281471 0.802608 -0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.30566 0.824035 -0.177765 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.302088 0.822021 -0.202114 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.298094 0.802598 -0.187402 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.282758 0.821938 -0.186751 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.309654 0.843459 -0.192477 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.290324 0.843375 -0.177114 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.313227 0.845472 -0.168128 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.32499 0.824119 -0.193128 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.328563 0.826132 -0.16878 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.320997 0.804695 -0.178416 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.305221 0.752156 -0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.325175 0.741263 -0.169507 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.325981 0.765112 -0.163165 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.32493 0.747715 -0.145675 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.304415 0.728307 -0.166213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.304171 0.734759 -0.142381 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.284462 0.7392 -0.156576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.305466 0.745704 -0.183703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.285513 0.756597 -0.174066 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.306272 0.769553 -0.17736 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.241352 0.787796 -0.171592 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.218449 0.785699 -0.180578 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.223304 0.778718 -0.157397 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.22345 0.802677 -0.163362 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.236497 0.794777 -0.194773 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.241498 0.811756 -0.177557 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.2594 0.796874 -0.185788 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.236351 0.770818 -0.188808 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.259253 0.772915 -0.179823 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.241205 0.763837 -0.165627 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.28191 0.874487 -0.129006 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.292033 0.891539 -0.143718 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.305711 0.872763 -0.135349 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.28812 0.868678 -0.152187 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.268233 0.893263 -0.137375 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.264319 0.870402 -0.145845 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.25811 0.876212 -0.122663 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.285824 0.897348 -0.120537 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.275701 0.880296 -0.105825 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.299501 0.878572 -0.112168 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.217602 0.838248 -0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.206363 0.860225 -0.122182 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.223536 0.854636 -0.105343 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.230102 0.858689 -0.128798 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.200429 0.843837 -0.139672 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.224168 0.842301 -0.146288 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.211667 0.821861 -0.140323 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.193863 0.839784 -0.116217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.205101 0.817808 -0.116868 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.211035 0.834196 -0.0993785 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.257721 0.853061 -0.062352 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.26204 0.87538 -0.0527151 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.280934 0.860805 -0.0590577 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.266856 0.87108 -0.0765474 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.238827 0.867636 -0.0560094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.243643 0.863337 -0.0798417 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.234508 0.845317 -0.0656463 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.252905 0.857361 -0.0385197 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.248586 0.835041 -0.0481565 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.271799 0.842785 -0.0448623 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.34578 0.838847 -0.117284 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.360404 0.851488 -0.132647 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.347059 0.832518 -0.141116 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.335865 0.853509 -0.1345 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.359125 0.857816 -0.108814 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.334587 0.859838 -0.110668 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.344501 0.845176 -0.0934517 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.370319 0.836826 -0.115431 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.355695 0.824185 -0.100068 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.356973 0.817857 -0.1239 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.321591 0.817421 -0.0506299 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.340361 0.83071 -0.0416443 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.341208 0.822249 -0.0648253 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.325527 0.840365 -0.0588603 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.320744 0.825882 -0.0274488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.30591 0.835537 -0.0446649 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.301973 0.812593 -0.0364345 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.336425 0.807766 -0.0334138 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.317654 0.794477 -0.0423994 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.337272 0.799305 -0.0565949 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.345341 0.766968 -0.099389 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.369945 0.768944 -0.10004 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.356171 0.780624 -0.116879 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.356172 0.788341 -0.093424 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.359115 0.755289 -0.0825505 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.345342 0.774685 -0.0759343 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.334511 0.753313 -0.0818993 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.359113 0.747572 -0.106005 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.33451 0.745596 -0.105354 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.34534 0.759252 -0.122844 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.358439 0.594141 -0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.408291 0.619127 -0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.411883 0.625955 -0.183325 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.396287 0.607547 -0.178077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.390369 0.630791 -0.172216 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.423887 0.637535 -0.165118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.402373 0.642371 -0.154009 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.420295 0.630706 -0.141664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.429805 0.61429 -0.170979 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.426212 0.607462 -0.147525 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.414208 0.595882 -0.165731 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.337042 0.638217 -0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.344865 0.652948 -0.184873 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.357326 0.651954 -0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.357697 0.632683 -0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.324581 0.639211 -0.18796 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.337413 0.618946 -0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.316758 0.624481 -0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.324211 0.658482 -0.172528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.316388 0.643752 -0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.336672 0.657489 -0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.37761 0.665691 -0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.389713 0.68332 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.398265 0.660156 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.37761 0.665691 -0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.369058 0.688854 -0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.356956 0.671225 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.356956 0.671225 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.389713 0.68332 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.37761 0.665691 -0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.398265 0.660156 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.429687 0.57505 -0.104315 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.452905 0.58161 -0.109563 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.434777 0.586467 -0.125608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.436077 0.5989 -0.104315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.447815 0.570193 -0.0882695 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.430987 0.587483 -0.0830215 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.424596 0.563633 -0.0830215 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.446515 0.55776 -0.109563 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.423296 0.5512 -0.104315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.428387 0.562617 -0.125608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.399007 0.621614 -0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.41723 0.637209 -0.0496945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.418027 0.624734 -0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.401533 0.642848 -0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.39821 0.634089 -0.0342624 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.382513 0.639728 -0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.379986 0.618494 -0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.414703 0.615976 -0.0373488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.39648 0.600381 -0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.4155 0.603501 -0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.379835 0.550064 -0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.396248 0.547099 -0.0373488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.403175 0.557504 -0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.388263 0.569716 -0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.372907 0.539659 -0.0342624 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.364922 0.562276 -0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.356494 0.542624 -0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.387819 0.527447 -0.0496945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.371406 0.530412 -0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.394747 0.537852 -0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.389119 0.547576 -0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.410169 0.541008 -0.170979 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.405866 0.564748 -0.165731 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.410472 0.548718 -0.147525 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.393422 0.523836 -0.165118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.393725 0.531546 -0.141664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.372372 0.530405 -0.154009 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.388816 0.539866 -0.183325 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.367766 0.546435 -0.172216 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.384513 0.563607 -0.178077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.339267 0.522591 -0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.340934 0.501272 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.359921 0.517056 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.339267 0.522591 -0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.320279 0.506807 -0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.318612 0.528125 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.318612 0.528125 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.340934 0.501272 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.339267 0.522591 -0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.359921 0.517056 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.317871 0.566667 -0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.296626 0.555534 -0.172528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.307914 0.550163 -0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.297216 0.572202 -0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.306582 0.572037 -0.18796 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.307172 0.588706 -0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.327827 0.583171 -0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.31728 0.549999 -0.184873 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.338525 0.561133 -0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.328569 0.544629 -0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.172546 0.643951 -0.222222 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.142305 0.674191 -0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.144155 0.692502 -0.299164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.150298 0.696439 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.164554 0.682184 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.136163 0.670254 -0.306292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.156561 0.659936 -0.296959 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.134313 0.651943 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.121907 0.684509 -0.292037 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.120057 0.666199 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.12805 0.688447 -0.268448 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.100996 0.663122 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0847178 0.680265 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.104191 0.675047 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.107387 0.686972 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0815225 0.66834 -0.236478 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.104191 0.675047 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0978007 0.651197 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0783272 0.656415 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0946054 0.639272 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0978007 0.651197 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.153374 0.715501 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.160081 0.738169 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.177224 0.721891 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.165299 0.718696 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.136231 0.731779 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.141449 0.712305 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.129524 0.70911 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.148156 0.734974 -0.207967 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.141449 0.712305 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.165299 0.718696 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.213855 0.655019 -0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.213517 0.662308 -0.306292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.194382 0.649801 -0.296959 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.198584 0.673065 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.23299 0.667526 -0.292037 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.218058 0.678283 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.233329 0.660237 -0.268448 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.228788 0.644262 -0.299164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.229127 0.636974 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.209653 0.631756 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.224924 0.696329 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.23918 0.710584 -0.236478 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.233654 0.687599 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.216195 0.705059 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.23045 0.719314 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.207465 0.713788 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.216195 0.705059 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.24791 0.701855 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.233654 0.687599 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.242384 0.678869 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.244096 0.624779 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.266765 0.631486 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.247291 0.636704 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.250487 0.648629 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.26357 0.619561 -0.207967 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.247291 0.636704 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.240901 0.612854 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.260374 0.607636 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.237705 0.600929 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.240901 0.612854 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.161477 0.602641 -0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.162741 0.579817 -0.292037 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.179523 0.58737 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.156259 0.583168 -0.268448 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.144695 0.595088 -0.299164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.138214 0.598439 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.143431 0.617912 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.167958 0.59929 -0.306292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.166695 0.622115 -0.296959 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.184741 0.606843 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.191718 0.5724 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.208861 0.556122 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.215568 0.578791 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.203643 0.575596 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.185011 0.549732 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.179793 0.569205 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.167868 0.56601 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.196936 0.552927 -0.236478 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.179793 0.569205 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.203643 0.575596 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.120168 0.591572 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.105912 0.577317 -0.207967 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.128897 0.582843 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.111438 0.600302 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0971825 0.586046 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.102708 0.609032 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.111438 0.600302 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.114642 0.568587 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.128897 0.582843 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.137627 0.574113 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0955788 0.852418 9.1293e-17 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.11107 0.922609 -0.0178949 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.122151 0.937225 -0.0344251 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.131874 0.915202 -0.0289382 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.11086 0.916553 -0.0418311 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.101346 0.944632 -0.0233819 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.090055 0.92396 -0.0307879 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0902645 0.930016 -0.00685171 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.12236 0.943281 -0.0104889 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.111279 0.928665 0.00604126 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.132084 0.921258 -0.00500196 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.164775 0.877966 0.00679642 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.182656 0.890926 -0.0042468 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.167676 0.876622 -0.0176871 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.159019 0.897331 -0.00739901 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.179755 0.89227 0.0202367 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.156118 0.898675 0.0170845 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.161874 0.87931 0.0312799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.188412 0.871561 0.00994863 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.17053 0.8586 0.0209919 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.173431 0.857256 -0.00349164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.135698 0.867231 -0.0604812 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.134634 0.873196 -0.0844174 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.11765 0.858152 -0.0746767 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.117797 0.882112 -0.0687117 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.152682 0.882275 -0.070222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.135845 0.89119 -0.0545162 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.153747 0.876309 -0.0462858 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.152536 0.858315 -0.076187 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.1536 0.852349 -0.0522508 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.135552 0.843271 -0.0664462 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0418734 0.897062 -0.0246914 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0359958 0.920407 -0.0301783 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0511067 0.915603 -0.0112511 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0588574 0.912106 -0.0344321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0267625 0.901866 -0.0436186 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0496241 0.893565 -0.0478724 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0326401 0.878521 -0.0381316 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0190117 0.905363 -0.0204376 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0248894 0.882018 -0.0149506 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0341227 0.900559 -0.00151032 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0665023 0.841683 -0.0672777 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0454909 0.840284 -0.0801706 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0463379 0.831823 -0.0569896 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0473735 0.856111 -0.0613127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0656554 0.850144 -0.0904587 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0675379 0.865971 -0.0716007 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0866667 0.851543 -0.0775657 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0646197 0.825856 -0.0861356 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0856311 0.827255 -0.0732426 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0654667 0.817395 -0.0629546 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0263827 0.826871 -0.00679642 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.00436945 0.825102 0.0042468 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.025051 0.823964 0.0176871 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.018173 0.84533 0.00739901 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00570109 0.828008 -0.0202367 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0195047 0.848237 -0.0170845 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0277143 0.829777 -0.0312799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0125791 0.806642 -0.00994863 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0345923 0.808411 -0.0209919 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0332607 0.805505 0.00349164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0709499 0.907797 0.0425863 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0752104 0.930963 0.0499923 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0941344 0.915684 0.0457385 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0806562 0.924191 0.0268805 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0520258 0.923076 0.0468401 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0574717 0.916304 0.0237283 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0477654 0.89991 0.0394341 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0655041 0.914568 0.065698 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0612436 0.891402 0.058292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0844281 0.899289 0.0614442 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0554592 0.837606 0.0604812 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0523913 0.842832 0.0844174 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0750766 0.842434 0.0746767 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0593957 0.86055 0.0687117 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0327739 0.838004 0.070222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0397783 0.855722 0.0545162 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0358417 0.832778 0.0462858 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0484547 0.819888 0.076187 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0515226 0.814662 0.0522508 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.07114 0.81949 0.0664462 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.124655 0.863153 0.0672777 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.141535 0.875744 0.0801706 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.146389 0.868763 0.0569896 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.129819 0.88655 0.0613127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.119801 0.870135 0.0904587 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.108085 0.880941 0.0716007 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.102922 0.857544 0.0775657 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.136371 0.852347 0.0861356 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.119492 0.839756 0.0732426 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.141225 0.845366 0.0629546 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0133465 0.69376 -0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.0646815 0.745859 -0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0684873 0.770032 -0.126127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0507391 0.762305 -0.110799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0481266 0.759394 -0.135179 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0824297 0.753586 -0.138161 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.062069 0.742948 -0.147213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0786239 0.729413 -0.134867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0850422 0.756497 -0.113782 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0812364 0.732325 -0.110488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.067294 0.74877 -0.0984536 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0347427 0.737837 -0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0299763 0.758864 -0.0435217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0114021 0.745277 -0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0263144 0.757489 -0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0533169 0.751424 -0.0466081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0496549 0.750049 -0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0580833 0.730397 -0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0384047 0.739212 -0.031176 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.043171 0.718185 -0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0198304 0.725625 -0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0058253 0.76531 -0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0179281 0.782939 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.02648 0.759776 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0058253 0.76531 -0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00272662 0.788473 -0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0148294 0.770845 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0148294 0.770845 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0179281 0.782939 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0058253 0.76531 -0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.02648 0.759776 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0432853 0.701782 -0.178389 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0544915 0.717566 -0.193717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0588496 0.718734 -0.169441 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0368947 0.725632 -0.178389 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0389272 0.700615 -0.202664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0213304 0.708681 -0.187336 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.027721 0.684831 -0.187336 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0608821 0.693716 -0.193717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0496759 0.677932 -0.178389 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0652402 0.694884 -0.169441 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0272215 0.721234 -0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0280589 0.725055 -0.191046 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0172649 0.70473 -0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00656677 0.726768 -0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0380155 0.741558 -0.175614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0165234 0.743272 -0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0371781 0.737738 -0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0487136 0.71952 -0.178701 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0478762 0.715699 -0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0379196 0.699195 -0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00804971 0.649684 -0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0275193 0.640422 -0.178701 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0283337 0.66342 -0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0287044 0.644149 -0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00723527 0.626685 -0.175614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00842045 0.630413 -0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0122343 0.635947 -0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00686453 0.645956 -0.191046 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.012605 0.655218 -0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00767898 0.668955 -0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0838533 0.674309 -0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.106805 0.675276 -0.113782 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0875713 0.673094 -0.0984536 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.091423 0.694308 -0.110488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.103087 0.676491 -0.138161 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0877049 0.695522 -0.134867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0801352 0.675524 -0.147213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0992356 0.655278 -0.126127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0762835 0.65431 -0.135179 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0800016 0.653095 -0.110799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0325183 0.62221 -0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0308513 0.600892 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0118635 0.616676 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0325183 0.62221 -0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.051506 0.606426 -0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.053173 0.627745 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.053173 0.627745 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0308513 0.600892 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0325183 0.62221 -0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0118635 0.616676 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0539145 0.666287 -0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0577732 0.666927 -0.031176 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.034894 0.669407 -0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0513875 0.68752 -0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0767937 0.663807 -0.0466081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.070408 0.6844 -0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.072935 0.663167 -0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0603001 0.645694 -0.0435217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0564414 0.645053 -0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0374209 0.648173 -0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0133465 0.69376 0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.0440268 0.740325 0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0417568 0.762259 0.170979 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0216407 0.748937 0.165731 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0345526 0.759495 0.147525 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0641429 0.753646 0.165118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0569387 0.750882 0.141664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0664129 0.731712 0.154009 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.051231 0.743089 0.183325 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.053501 0.721155 0.172216 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0311149 0.729767 0.178077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0272215 0.721234 0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0454452 0.736829 0.172528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.046242 0.724354 0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0297485 0.742467 0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0264247 0.733709 0.18796 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.010728 0.739347 0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00820099 0.718114 0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0429182 0.715595 0.184873 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0246945 0.7 0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.043715 0.70312 0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0058253 0.76531 0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0179281 0.782939 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.02648 0.759776 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0058253 0.76531 0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00272662 0.788473 0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0148294 0.770845 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0148294 0.770845 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0179281 0.782939 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0058253 0.76531 0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.02648 0.759776 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0845947 0.712851 0.104315 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.101422 0.730141 0.109563 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0832945 0.725284 0.125608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0782041 0.736701 0.104315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.102723 0.717709 0.0882695 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0795043 0.724268 0.0830215 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0858949 0.700418 0.0830215 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.107813 0.706291 0.109563 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0909853 0.689001 0.104315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0896851 0.701434 0.125608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0347427 0.737837 0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0269197 0.752567 0.0373488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0144587 0.751574 0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.014088 0.732303 0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0472037 0.73883 0.0342624 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0343719 0.718566 0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0550267 0.7241 0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0475745 0.758102 0.0496945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0553974 0.743371 0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0351134 0.757108 0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0539145 0.666287 0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0751594 0.655153 0.0496945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0638711 0.649783 0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0745692 0.671821 0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0652028 0.671657 0.0342624 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0646126 0.688325 0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0439578 0.682791 0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0545047 0.649619 0.0373488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0332597 0.660752 0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0432164 0.644249 0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0631985 0.668775 0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0708196 0.669983 0.183325 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0467378 0.671462 0.178077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0618185 0.690113 0.172216 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0872804 0.667296 0.165118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0782793 0.687426 0.154009 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0796593 0.666087 0.141664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0721997 0.648644 0.170979 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0645786 0.647436 0.147525 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0481178 0.650123 0.165731 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0325183 0.62221 0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0308513 0.600892 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0118635 0.616676 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0325183 0.62221 0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.051506 0.606426 0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.053173 0.627745 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.053173 0.627745 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0308513 0.600892 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0325183 0.62221 0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0118635 0.616676 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00804971 0.649684 0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0244627 0.646718 0.184873 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0313903 0.657124 0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.016478 0.669336 0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00112207 0.639278 0.18796 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00686255 0.661896 0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0152909 0.642244 0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0160343 0.627066 0.172528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.000378614 0.630031 0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.022962 0.637471 0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.281471 0.802608 0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.329459 0.858698 0.104938 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.34259 0.872345 0.0890951 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.338969 0.848329 0.0846485 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.32016 0.86421 0.0827387 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.333079 0.882715 0.109385 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.310649 0.87458 0.103028 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.319948 0.869068 0.125228 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.351888 0.866833 0.111295 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.338757 0.853186 0.127138 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.348268 0.842817 0.106848 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.337088 0.798572 0.062352 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.346884 0.808673 0.0420622 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.322361 0.807762 0.044793 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.335792 0.82298 0.0588533 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.361611 0.799483 0.0596212 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.350519 0.81379 0.0764123 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.351815 0.789382 0.079911 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.34818 0.784265 0.0455609 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.338384 0.774164 0.0658506 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.323657 0.783355 0.0482916 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.280879 0.845371 0.0506299 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.291048 0.849036 0.0284303 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.304882 0.840755 0.0471312 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.287867 0.826067 0.0369125 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.267046 0.853652 0.0319289 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.263865 0.830683 0.0404111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.256877 0.849987 0.0541285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.28406 0.868341 0.0421477 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.273891 0.864676 0.0643473 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.297894 0.86006 0.0608487 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.273842 0.862735 0.153697 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.282313 0.885497 0.158144 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.29787 0.867718 0.150967 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.281455 0.876946 0.134996 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.258284 0.880514 0.160875 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.257427 0.871963 0.137727 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.249813 0.857752 0.156428 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.274699 0.871286 0.176845 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.266228 0.848523 0.172398 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.290257 0.853506 0.169668 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.225263 0.849407 0.099389 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.21889 0.873186 0.0974792 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.236437 0.866351 0.113449 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.240865 0.865588 0.0891702 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.207715 0.856242 0.0834188 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.22969 0.848644 0.0751099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.214088 0.832464 0.0853287 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.203288 0.857005 0.107698 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.20966 0.833227 0.109608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.220835 0.850171 0.123668 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.225855 0.806645 0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.21762 0.818054 0.18016 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.241754 0.813612 0.177429 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.230661 0.83061 0.163369 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.20172 0.811087 0.162601 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.214761 0.823642 0.14581 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.209955 0.799677 0.142311 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.212813 0.794089 0.176661 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.221048 0.78268 0.156372 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.236948 0.789647 0.173931 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.330051 0.815936 0.165419 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.350165 0.828769 0.171776 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.347547 0.820583 0.148628 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.333232 0.838905 0.156937 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.332668 0.824121 0.188567 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.315735 0.834258 0.173728 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.312554 0.811288 0.182211 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.346984 0.805799 0.180258 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.32687 0.792966 0.173902 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.344366 0.797614 0.157111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.282063 0.759846 0.171592 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.29233 0.756464 0.193792 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.305929 0.765125 0.175091 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.288514 0.779336 0.18531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.268464 0.751185 0.190293 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.264649 0.774058 0.181811 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.258198 0.754567 0.168094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.285879 0.736973 0.180075 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.275612 0.740355 0.157875 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.299478 0.745634 0.161374 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.33768 0.75581 0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.362219 0.753851 0.124743 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.352319 0.76987 0.108773 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.350765 0.774086 0.133052 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.347581 0.739791 0.138803 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.336127 0.760026 0.147112 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.323042 0.74175 0.136894 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.349134 0.735575 0.114524 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.324595 0.737534 0.112614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.339233 0.751594 0.0985541 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.172546 0.643951 0.222222 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.202787 0.674191 0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.219248 0.690652 0.290934 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.223862 0.677807 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.206403 0.695267 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.198172 0.687036 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.185327 0.691651 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.181711 0.670575 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.215632 0.669577 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.199171 0.653116 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.220246 0.656732 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.244096 0.663122 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.261725 0.675225 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.244096 0.663122 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.238562 0.683777 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.261725 0.675225 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.238562 0.683777 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.244096 0.663122 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.267259 0.65457 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.249631 0.642468 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.249631 0.642468 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.191718 0.715501 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.203821 0.733129 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.212373 0.709966 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.191718 0.715501 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.183166 0.738664 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.171063 0.721035 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.171063 0.721035 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.203821 0.733129 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.191718 0.715501 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.212373 0.709966 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.131237 0.655019 0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.12881 0.668451 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.151296 0.662426 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.137627 0.678869 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.108751 0.661044 0.290934 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.117567 0.671463 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.111177 0.647613 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.12242 0.644601 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.124846 0.631169 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.144906 0.638576 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.120168 0.696329 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.115992 0.720665 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.135288 0.711449 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.135288 0.711449 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.100872 0.705544 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.120168 0.696329 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.105047 0.681209 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.100872 0.705544 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.105047 0.681209 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.120168 0.696329 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.100996 0.624779 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0796777 0.626446 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.100996 0.624779 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0954616 0.645433 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0796777 0.626446 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0954616 0.645433 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.100996 0.624779 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0852121 0.605791 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.10653 0.604124 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.10653 0.604124 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.183615 0.602641 0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.197046 0.600215 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.207465 0.609032 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.191021 0.622701 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.173196 0.593824 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.167171 0.61631 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.159765 0.596251 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.18964 0.580155 0.290934 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.176209 0.582581 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.200059 0.588972 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.153374 0.5724 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.155041 0.551082 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.174029 0.566866 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.153374 0.5724 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.134387 0.556617 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.13272 0.577935 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.13272 0.577935 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.155041 0.551082 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.153374 0.5724 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.174029 0.566866 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.224924 0.591572 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.24926 0.587397 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.240045 0.606693 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.240045 0.606693 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.23414 0.572277 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.224924 0.591572 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.209804 0.576452 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.23414 0.572277 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.209804 0.576452 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.224924 0.591572 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.358439 0.594141 0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.428945 0.613592 0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.448155 0.626191 0.113782 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.43276 0.614455 0.0984536 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.42519 0.634643 0.110488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.44434 0.625328 0.138161 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.421375 0.63378 0.134867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.42513 0.612729 0.147213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.45191 0.60514 0.126127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.4327 0.592541 0.135179 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.436515 0.593404 0.110799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.399007 0.621614 0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.399844 0.625435 0.031176 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.38905 0.60511 0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.378352 0.627149 0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.409801 0.641939 0.0466081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.388308 0.643653 0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.408963 0.638118 0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.420499 0.619901 0.0435217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.419661 0.61608 0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.409705 0.599576 0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.37761 0.665691 0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.389713 0.68332 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.398265 0.660156 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.37761 0.665691 0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.369058 0.688854 0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.356956 0.671225 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.356956 0.671225 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.389713 0.68332 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.37761 0.665691 0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.398265 0.660156 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.388377 0.586119 0.178389 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.405974 0.594185 0.193717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.410332 0.593017 0.169441 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.394768 0.609969 0.178389 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.384019 0.587286 0.202664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.372813 0.60307 0.187336 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.366422 0.57922 0.187336 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.399584 0.570335 0.193717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.381987 0.562269 0.178389 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.403942 0.569167 0.169441 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.337042 0.638217 0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.341809 0.659244 0.178701 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.360383 0.645657 0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.345471 0.65787 0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.318468 0.651804 0.175614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.32213 0.65043 0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.313702 0.630777 0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.33338 0.639592 0.191046 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.328614 0.618565 0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.351955 0.626005 0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.317871 0.566667 0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.314012 0.567308 0.191046 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.336891 0.569787 0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.320398 0.587901 0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.294991 0.564188 0.175614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.301377 0.584781 0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.29885 0.563547 0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.311485 0.546074 0.178701 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.315344 0.545434 0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.334364 0.548554 0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.409774 0.542042 0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.433888 0.53788 0.126127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.426423 0.55574 0.110799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.423551 0.558395 0.135179 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.417238 0.524182 0.138161 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.406901 0.544697 0.147213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.393124 0.528344 0.134867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.42011 0.521526 0.113782 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.395996 0.525689 0.110488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.412646 0.539387 0.0984536 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.339267 0.522591 0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.340934 0.501272 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.359921 0.517056 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.339267 0.522591 0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.320279 0.506807 0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.318612 0.528125 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.318612 0.528125 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.340934 0.501272 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.339267 0.522591 0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.359921 0.517056 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.379835 0.550064 0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.399304 0.540802 0.0435217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.400119 0.563801 0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.400489 0.54453 0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.37902 0.527065 0.0466081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.380205 0.530793 0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.359551 0.536327 0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.37865 0.546337 0.031176 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.35918 0.555599 0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.379464 0.569335 0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.371785 0.0996195 0.544331 RAD 0.166667 
-   txt002 
- SPHERE CENTER -0.393621 0.220501 0.729516 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.368601 0.279642 0.766439 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.354293 0.299716 0.765035 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.347717 0.279022 0.753281 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.366989 0.292196 0.745238 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.375177 0.300337 0.778193 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.387873 0.292817 0.758396 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.389485 0.280263 0.779597 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.355904 0.287162 0.786236 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.370213 0.267088 0.787639 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.349329 0.266468 0.774481 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.321889 0.238665 0.726118 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.304702 0.250544 0.71296 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.32307 0.238717 0.701455 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.327715 0.259421 0.714081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.30352 0.250492 0.737623 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.326533 0.259369 0.738744 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.320707 0.238612 0.750781 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.298875 0.229788 0.724997 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.316063 0.217908 0.738155 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.317244 0.21796 0.713492 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.372464 0.281062 0.692479 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.362978 0.289441 0.671279 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.35549 0.267771 0.680442 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.378255 0.270044 0.671155 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.379952 0.302733 0.683315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.395229 0.283335 0.683192 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.389438 0.294353 0.704516 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.357187 0.30046 0.692603 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.366673 0.29208 0.713804 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.349699 0.278789 0.701767 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.440333 0.261479 0.769837 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.443285 0.282991 0.781591 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.421181 0.271991 0.781342 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.4302 0.282046 0.760673 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.462437 0.27248 0.770086 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.449353 0.271534 0.749168 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.459485 0.250967 0.758332 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.453417 0.262424 0.790755 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.450466 0.240911 0.779001 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.431313 0.251423 0.790506 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.444196 0.262898 0.695877 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.449273 0.285685 0.687835 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.436139 0.282528 0.708504 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.426189 0.27701 0.68659 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.45733 0.266055 0.675209 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.434246 0.257381 0.673964 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.452254 0.243269 0.683251 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.46728 0.271573 0.697123 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.462204 0.248787 0.705165 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.454146 0.268416 0.717791 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.465353 0.202338 0.732914 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.486123 0.204606 0.746073 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.464339 0.202946 0.757577 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.470107 0.223366 0.744951 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.487137 0.203998 0.72141 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.471122 0.222757 0.720288 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.466367 0.201729 0.708251 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.481368 0.183578 0.734036 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.460599 0.18131 0.720878 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.459584 0.181918 0.745541 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.389758 0.219082 0.803476 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.378635 0.228779 0.823273 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.365937 0.225483 0.802355 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.383364 0.24293 0.8036 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.402455 0.222377 0.824394 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.407185 0.236529 0.804721 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.413578 0.21268 0.804597 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.385029 0.20493 0.823149 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.396152 0.195233 0.803352 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.372331 0.201634 0.802231 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.414778 0.15994 0.766553 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.412573 0.147477 0.787754 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.39322 0.15977 0.77859 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.412448 0.172167 0.787878 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.434131 0.147647 0.775717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.434006 0.172338 0.775841 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.436336 0.16011 0.754517 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.414903 0.13525 0.766429 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.417108 0.147713 0.745229 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.39555 0.147543 0.757266 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.343046 0.178104 0.763155 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.319723 0.177083 0.771198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.325124 0.189464 0.750529 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.332294 0.198298 0.772443 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.337645 0.165722 0.783824 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.350216 0.186938 0.785069 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.360967 0.166743 0.775781 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.330475 0.156889 0.76191 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.353797 0.157909 0.753867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.335876 0.16927 0.741241 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.191247 0.166275 0.655442 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.130089 0.20793 0.652044 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.115471 0.221102 0.637128 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.126388 0.200597 0.628759 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.13987 0.220766 0.633356 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.119172 0.228435 0.660413 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.143571 0.228099 0.656641 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.13379 0.215264 0.675329 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.10569 0.208266 0.655816 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.120308 0.195095 0.670732 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.116607 0.187762 0.647447 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.154295 0.172673 0.591563 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.15554 0.180792 0.568278 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.17557 0.171251 0.579113 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.166926 0.19323 0.586315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.134265 0.182215 0.580727 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.145651 0.194652 0.598764 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.133019 0.174096 0.604012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.142909 0.160236 0.573526 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.141663 0.152117 0.596811 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.162939 0.150694 0.584361 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.192135 0.230419 0.618405 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.18209 0.243049 0.599717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.168159 0.227721 0.613157 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.185251 0.218634 0.597829 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.206066 0.245747 0.604965 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.209227 0.221332 0.603077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.216111 0.233117 0.623653 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.188974 0.254834 0.620293 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.199019 0.242204 0.638981 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.175043 0.239506 0.633733 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.167041 0.201532 0.715923 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.151829 0.219088 0.724292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.14514 0.205084 0.705088 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.163068 0.221861 0.702483 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.173729 0.215537 0.735128 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.184969 0.218309 0.713318 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.188942 0.197981 0.726759 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.155801 0.19876 0.737733 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.171014 0.181204 0.729364 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.149113 0.184756 0.718528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.229087 0.224021 0.682285 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.22829 0.248268 0.686881 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.207937 0.234532 0.689486 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.216949 0.2391 0.666956 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.249439 0.237756 0.67968 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.238098 0.228589 0.659755 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.250236 0.213509 0.675083 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.240428 0.233189 0.702209 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.241225 0.208942 0.697613 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.220075 0.219453 0.704814 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.228199 0.159877 0.719322 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.229756 0.167942 0.742607 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.207683 0.16569 0.731771 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.223214 0.183484 0.72457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.250271 0.162129 0.730157 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.243729 0.177671 0.71212 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.248714 0.154064 0.706872 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.234741 0.144336 0.737359 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.233184 0.13627 0.714074 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.212668 0.142084 0.726523 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.129201 0.143787 0.689081 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.105335 0.14887 0.692853 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.115741 0.153943 0.671044 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.121723 0.167242 0.690969 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.118795 0.138714 0.71089 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.135183 0.157086 0.709006 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.142661 0.13363 0.707118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.112813 0.125414 0.690965 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.136679 0.120331 0.687193 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.123219 0.130487 0.669156 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.190359 0.102131 0.692479 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.179968 0.0897843 0.711167 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.166467 0.105492 0.697727 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.183804 0.114103 0.713055 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.20386 0.0864233 0.705919 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.207696 0.110742 0.707807 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.214251 0.0987702 0.687231 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.186523 0.0778128 0.690591 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.196914 0.0901597 0.671903 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.173022 0.0935207 0.677151 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.153407 0.108529 0.6286 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.130858 0.0995811 0.624003 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.135326 0.123725 0.621398 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.134736 0.113639 0.643928 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.148938 0.0843858 0.631205 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.152816 0.0984435 0.65113 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.171487 0.0933338 0.635801 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.149528 0.0944715 0.608675 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.172078 0.10342 0.613272 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.153997 0.118615 0.60607 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.31427 0.31427 0.544331 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.277961 0.367156 0.507294 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.269898 0.374298 0.485076 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.270045 0.350338 0.491041 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.291334 0.362218 0.487134 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.277815 0.391115 0.501329 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.299251 0.379036 0.503387 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.285878 0.383973 0.523547 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.256525 0.379235 0.505236 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.264588 0.372093 0.527454 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.256671 0.355276 0.511201 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.252306 0.297666 0.507294 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.235688 0.305995 0.491041 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.259438 0.312359 0.488775 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.245915 0.321516 0.507294 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.228556 0.291303 0.509559 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.238783 0.306824 0.525813 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.245173 0.282974 0.525813 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.242079 0.282145 0.491041 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.258696 0.273816 0.507294 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.265828 0.288509 0.488775 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.31427 0.31427 0.470257 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.32435 0.32435 0.450097 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.33812 0.32066 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.32066 0.33812 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.3005 0.317959 0.450097 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.29681 0.331729 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.29042 0.307879 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.317959 0.3005 0.450097 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.307879 0.29042 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.331729 0.29681 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.339925 0.383759 0.544331 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.334762 0.407156 0.538366 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.31686 0.392275 0.546597 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.326552 0.388696 0.524171 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.357827 0.39864 0.536101 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.349618 0.380181 0.521905 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.362991 0.375243 0.542066 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.348135 0.402218 0.558526 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.353299 0.378821 0.564491 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.330233 0.387337 0.566757 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.376234 0.330873 0.507294 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.393346 0.348239 0.503387 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.383366 0.345565 0.525813 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.369843 0.354723 0.507294 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.386213 0.333547 0.484868 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.362711 0.340031 0.488775 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.369102 0.316181 0.488775 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.399736 0.324389 0.503387 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.382624 0.307023 0.507294 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.389757 0.321715 0.525813 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.376234 0.330873 0.581368 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.386461 0.346394 0.597621 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.362711 0.340031 0.599887 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.369843 0.354723 0.581368 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.399983 0.337237 0.579103 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.383366 0.345565 0.56285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.389757 0.321715 0.56285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.392851 0.322544 0.597621 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.382624 0.307023 0.581368 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.369102 0.316181 0.599887 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.277961 0.367156 0.581368 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.261966 0.385852 0.57931 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.259422 0.36581 0.565115 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.278159 0.38141 0.561208 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.280504 0.387198 0.595564 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.296698 0.382755 0.577461 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.2965 0.368501 0.597621 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.261768 0.371598 0.599471 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.277764 0.352901 0.601529 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.259225 0.351556 0.585275 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.31427 0.31427 0.618405 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.304189 0.32435 0.638566 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.29042 0.32066 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.307879 0.33812 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.328039 0.317959 0.638566 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.331729 0.331729 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.33812 0.307879 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.31058 0.3005 0.638566 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.32066 0.29042 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.29681 0.29681 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.252306 0.297666 0.581368 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.228803 0.30415 0.585275 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.238783 0.306824 0.56285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.245915 0.321516 0.581368 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.242326 0.294992 0.603794 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.259438 0.312359 0.599887 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.265828 0.288509 0.599887 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.235194 0.2803 0.585275 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.258696 0.273816 0.581368 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.245173 0.282974 0.56285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.574159 0.153845 0.618405 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.612768 0.202534 0.658726 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.612732 0.225282 0.668328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.591695 0.212428 0.666956 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.60221 0.22113 0.64638 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.633805 0.215388 0.660098 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.623283 0.211236 0.63815 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.63384 0.192641 0.650495 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.62329 0.206686 0.680674 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.623325 0.183939 0.671072 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.602253 0.193832 0.679302 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.543919 0.184086 0.678886 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.527458 0.200547 0.687117 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.522843 0.187702 0.666541 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.540303 0.205161 0.666541 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.548533 0.196931 0.699462 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.561378 0.201546 0.678886 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.564994 0.18047 0.691232 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.531074 0.179472 0.699462 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.547535 0.163011 0.691232 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.526459 0.166627 0.678886 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.554987 0.225396 0.618405 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.542885 0.243024 0.606059 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.534333 0.219861 0.606059 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.554987 0.225396 0.593714 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.563539 0.248559 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.575642 0.23093 0.606059 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.575642 0.23093 0.630751 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.542885 0.243024 0.630751 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.554987 0.225396 0.643096 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.534333 0.219861 0.630751 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.643008 0.172294 0.598245 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.660425 0.189742 0.599616 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.645434 0.185725 0.618821 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.636618 0.196144 0.598245 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.657999 0.17631 0.57904 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.634191 0.182712 0.577669 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.640582 0.158862 0.577669 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.666816 0.165892 0.599616 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.649399 0.148444 0.598245 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.651825 0.161875 0.618821 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.585228 0.195155 0.557924 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.574809 0.203972 0.537348 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.561378 0.201546 0.557924 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.568784 0.181486 0.545578 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.598659 0.197581 0.537348 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.592634 0.175095 0.545578 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.609078 0.188764 0.557924 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.591253 0.217641 0.549693 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.601672 0.208824 0.57027 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.577822 0.215215 0.57027 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.6044 0.123605 0.557924 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.620861 0.107144 0.549693 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.608016 0.102529 0.57027 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.625475 0.119989 0.57027 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.617245 0.128219 0.537348 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.621859 0.141064 0.557924 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.600784 0.14468 0.545578 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.599785 0.11076 0.537348 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.583324 0.127221 0.545578 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.58694 0.106145 0.557924 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.631939 0.130984 0.658726 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.643128 0.132649 0.680674 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.618482 0.133263 0.679302 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.631785 0.152367 0.671072 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.656585 0.130371 0.660098 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.645242 0.150088 0.650495 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.645397 0.128706 0.63815 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.643283 0.111266 0.668328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.632094 0.109601 0.64638 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.618637 0.11188 0.666956 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.593331 0.0822954 0.618405 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.591664 0.0609772 0.630751 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.572676 0.076761 0.630751 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.593331 0.0822954 0.643096 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.612319 0.0665116 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.613986 0.0878298 0.630751 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.613986 0.0878298 0.606059 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.591664 0.0609772 0.606059 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.593331 0.0822954 0.593714 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.572676 0.076761 0.606059 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.56309 0.112536 0.678886 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.549659 0.11011 0.699462 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.53924 0.118927 0.678886 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.555684 0.132596 0.691232 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.573509 0.103719 0.699462 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.579534 0.126205 0.691232 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.58694 0.106145 0.678886 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.557065 0.09005 0.687117 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.570497 0.0924762 0.666541 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.546646 0.0988668 0.666541 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.494808 0.247614 0.43322 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.494287 0.313607 0.399581 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.484182 0.326876 0.381374 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.470513 0.310432 0.39372 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.488171 0.302705 0.378288 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.507957 0.330051 0.387235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.511946 0.305881 0.384149 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.518062 0.316783 0.405442 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.490299 0.337778 0.402668 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.500404 0.324509 0.420874 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.476629 0.321334 0.415013 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.452978 0.302539 0.460062 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.436971 0.320401 0.454201 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.436675 0.29902 0.441856 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.455413 0.3148 0.438769 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.453274 0.32392 0.472408 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.471717 0.318318 0.456976 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.469281 0.306057 0.478269 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.434535 0.30814 0.475494 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.450543 0.290278 0.481355 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.434239 0.286759 0.463149 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.434629 0.269833 0.396183 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.426389 0.279233 0.37489 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.445377 0.263449 0.37489 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.448298 0.286276 0.383837 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.415641 0.285616 0.396183 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.43755 0.29266 0.40513 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.42388 0.276216 0.417476 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.41272 0.262789 0.387235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.420959 0.253389 0.408529 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.431707 0.247006 0.387235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.536117 0.258683 0.372739 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.549787 0.275127 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.549787 0.275127 0.385084 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.529727 0.282533 0.372739 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.536117 0.258683 0.348047 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.516058 0.266089 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.522448 0.242239 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.556177 0.251277 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.542508 0.234833 0.372739 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.556177 0.251277 0.385084 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.476459 0.214908 0.369341 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.457868 0.209819 0.353908 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.458164 0.2312 0.366254 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.453963 0.210053 0.378288 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.476163 0.193527 0.356995 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.472258 0.193761 0.381374 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.494753 0.198616 0.372427 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.480363 0.214674 0.344961 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.498954 0.219763 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.480659 0.236055 0.357307 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.536638 0.19269 0.406378 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.549603 0.17251 0.412239 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.528912 0.177908 0.424584 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.549105 0.191778 0.427671 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.557329 0.187292 0.394032 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.556831 0.20656 0.409464 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.544363 0.207471 0.388171 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.537136 0.173421 0.390945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.524171 0.193601 0.385084 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.516445 0.178819 0.403291 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.554467 0.291389 0.436618 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.562288 0.314604 0.439705 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.542501 0.306499 0.45205 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.541186 0.310183 0.427671 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.574255 0.299494 0.424272 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.553152 0.295073 0.412239 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.566433 0.276279 0.421186 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.575569 0.29581 0.448652 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.567748 0.272595 0.445566 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.555781 0.287705 0.460998 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.554987 0.225396 0.470257 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.567359 0.227186 0.49155 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.54267 0.227528 0.49155 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.555283 0.246777 0.482603 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.579676 0.225054 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.567601 0.244644 0.46131 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.567305 0.223263 0.448964 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.567063 0.205805 0.479204 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.554691 0.204014 0.457911 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.542374 0.206147 0.479204 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.513157 0.28032 0.497099 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.507811 0.298839 0.512531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.489718 0.287442 0.500186 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.505577 0.302049 0.488152 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.531251 0.291716 0.509445 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.529016 0.294927 0.485065 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.536597 0.273198 0.494013 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.515392 0.27711 0.521479 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.520738 0.258591 0.506047 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.497299 0.265714 0.509133 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.552323 0.0329639 0.43322 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.625877 0.0248832 0.436618 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.646362 0.0316054 0.448652 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.625173 0.0287309 0.460998 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.627981 0.0478 0.445566 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.647066 0.0277577 0.424272 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.628685 0.0439523 0.421186 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.62658 0.0210355 0.412239 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.644258 0.00868865 0.439705 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.623773 0.00196644 0.427671 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.623069 0.00581415 0.45205 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.584567 0.0138144 0.497099 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.584898 0.0177119 0.521479 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.56353 0.0185345 0.509133 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.580268 0.0364224 0.506047 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.605935 0.0129918 0.509445 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.601305 0.0317022 0.494013 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.605605 0.00909422 0.485065 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.589197 -0.00489609 0.512531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.588867 -0.00879364 0.488152 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.567829 -0.00407348 0.500186 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.593331 0.0822954 0.470257 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.593994 0.105299 0.479204 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.572783 0.0926585 0.479204 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.582384 0.100664 0.457911 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.614541 0.0949359 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.602932 0.090301 0.448964 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.613879 0.0719323 0.46131 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.604941 0.0869303 0.49155 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.604278 0.0639267 0.482603 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.58373 0.0742898 0.49155 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.593633 0.0440327 0.372739 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.607302 0.0604766 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.607302 0.0604766 0.385084 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.587242 0.0678827 0.372739 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.593633 0.0440327 0.348047 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.573573 0.0514389 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.579964 0.0275889 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.613693 0.0366265 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.600023 0.0201827 0.372739 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.613693 0.0366265 0.385084 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.561087 0.101445 0.406378 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.551884 0.118381 0.390945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.536664 0.103361 0.403291 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.550745 0.0944221 0.385084 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.576307 0.116465 0.394032 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.575168 0.0925065 0.388171 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.58551 0.0995293 0.409464 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.562225 0.125404 0.412239 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.571428 0.108468 0.427671 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.547006 0.110383 0.424584 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.520079 0.0521134 0.369341 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.523344 0.0542684 0.344961 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.534291 0.0358996 0.357307 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.541988 0.0591566 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.509132 0.0704822 0.356995 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.527777 0.0753703 0.372427 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.505868 0.0683272 0.381374 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.501435 0.0472252 0.353908 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.49817 0.0450702 0.378288 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.512382 0.0288565 0.366254 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.584869 -0.0244483 0.399581 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.5935 -0.0473753 0.402668 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.57344 -0.0399691 0.415013 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.595617 -0.0308315 0.420874 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.604929 -0.0318545 0.387235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.607046 -0.0153107 0.405442 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.596298 -0.00892756 0.384149 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.582752 -0.0409921 0.381374 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.574121 -0.0180651 0.378288 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.562692 -0.0335859 0.39372 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.511316 -0.0163676 0.396183 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.48882 -0.0212225 0.387235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.497372 0.00194055 0.387235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.491256 -0.00896145 0.408529 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.502764 -0.0395307 0.396183 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.505199 -0.0272696 0.417476 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.525259 -0.0346758 0.40513 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.50888 -0.0286287 0.37489 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.531375 -0.0237738 0.383837 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.517432 -0.00546563 0.37489 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.54356 -0.0355172 0.460062 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.530389 -0.0495897 0.475494 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.519442 -0.031221 0.463149 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.53532 -0.0261165 0.481355 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.554507 -0.0538859 0.472408 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.559438 -0.0304127 0.478269 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.567678 -0.0398133 0.456976 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.538628 -0.0589904 0.454201 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.551799 -0.0449178 0.438769 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.527681 -0.0406217 0.441856 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.451136 0.0058509 0.729516 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.447081 0.0051487 0.803476 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.435909 0.01504 0.823149 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.423265 0.0115452 0.802231 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.440694 0.0289993 0.803352 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.459725 0.00864346 0.824394 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.46451 0.0226028 0.804597 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.470897 -0.0012478 0.804721 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.442297 -0.00881065 0.823273 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.453468 -0.0187019 0.8036 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.429652 -0.0123054 0.802355 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.386138 0.0172804 0.763155 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.364644 0.0293677 0.76191 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.375512 0.0213457 0.741241 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.385352 0.0401449 0.753867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.37527 0.0253024 0.783824 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.395978 0.0360796 0.775781 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.396764 0.0132151 0.785069 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.36543 0.0065032 0.771198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.386924 -0.00558411 0.772443 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.376298 -0.00151881 0.750529 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.439178 0.0688765 0.766553 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.426942 0.0903221 0.766429 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.416328 0.0699989 0.757266 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.435083 0.0806307 0.745229 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.449792 0.0891998 0.775717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.457933 0.0795084 0.754517 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.462029 0.0677542 0.775841 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.431037 0.078568 0.787754 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.443274 0.0571224 0.787878 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.420423 0.0582447 0.77859 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.512079 -0.00628079 0.769837 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.523883 -0.000557006 0.790755 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.49924 -0.00208214 0.790506 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.51057 0.0165974 0.779001 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.536722 -0.00475566 0.770086 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.523409 0.0123987 0.758332 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.524918 -0.0104794 0.749168 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.525392 -0.0234352 0.781591 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.513588 -0.029159 0.760673 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.500749 -0.0249603 0.781342 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.504176 0.0574471 0.732914 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.508666 0.0817008 0.734036 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.488971 0.0722467 0.745541 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.489545 0.0732807 0.720878 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.523872 0.0669012 0.72141 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.504751 0.058481 0.708251 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.519382 0.0426474 0.720288 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.523298 0.0658672 0.746073 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.518808 0.0416134 0.744951 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.503602 0.0564131 0.757577 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.516134 -0.00557859 0.695877 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.540463 -0.00154892 0.697123 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.52751 -0.00538221 0.717791 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.524673 0.0156462 0.705165 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.529087 -0.00174531 0.675209 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.513298 0.0154498 0.683251 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.504759 -0.00577498 0.673964 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.531924 -0.0227737 0.687835 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.507596 -0.0268034 0.68659 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.518971 -0.026607 0.708504 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.459039 -0.0578769 0.766439 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.451803 -0.0707378 0.786236 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.435761 -0.0561039 0.774481 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.454158 -0.0461991 0.787639 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.475081 -0.0725109 0.778193 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.477435 -0.0479721 0.779597 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.482316 -0.05965 0.758396 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.456685 -0.0824157 0.765035 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.46392 -0.0695548 0.745238 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.440643 -0.0677817 0.753281 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.463094 -0.0571747 0.692479 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.459563 -0.081612 0.692603 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.442243 -0.0665888 0.701767 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.463589 -0.0696122 0.713804 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.480415 -0.0721979 0.683315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.48444 -0.0601982 0.704516 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.483946 -0.0477607 0.683192 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.459069 -0.0691745 0.671279 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.4626 -0.0447373 0.671155 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.441749 -0.0541513 0.680442 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.398096 -0.0457452 0.726118 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.373728 -0.0495643 0.724997 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.383722 -0.030137 0.713492 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.382672 -0.0306825 0.738155 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.388102 -0.0651725 0.737623 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.397047 -0.0462908 0.750781 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.41247 -0.0613535 0.738744 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.389151 -0.064627 0.71296 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.41352 -0.060808 0.714081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.399146 -0.0451997 0.701455 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.4293 -0.115031 0.544331 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.424299 -0.178985 0.581368 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.412497 -0.190929 0.599471 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.400273 -0.174844 0.585275 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.417001 -0.16674 0.601529 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.436523 -0.195071 0.595564 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.441027 -0.170881 0.597621 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.448325 -0.183127 0.577461 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.419795 -0.203175 0.57931 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.431597 -0.191231 0.561208 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.407571 -0.18709 0.565115 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.367336 -0.131634 0.581368 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.343834 -0.12515 0.585275 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.353814 -0.122476 0.56285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.360946 -0.107784 0.581368 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.357357 -0.134308 0.603794 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.374468 -0.116942 0.599887 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.380859 -0.140792 0.599887 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.350225 -0.149 0.585275 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.373727 -0.155484 0.581368 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.360204 -0.146326 0.56285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.4293 -0.115031 0.618405 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.41922 -0.10495 0.638566 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.40545 -0.10864 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.42291 -0.0911807 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.44307 -0.111341 0.638566 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.44676 -0.0975713 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.45315 -0.121421 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.425611 -0.128801 0.638566 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.435691 -0.138881 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.411841 -0.13249 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.486264 -0.162382 0.544331 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.502603 -0.174264 0.558526 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.479659 -0.170327 0.566757 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.495376 -0.15142 0.564491 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.509207 -0.166319 0.536101 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.501981 -0.143475 0.542066 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.492868 -0.154437 0.521905 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.49349 -0.185226 0.538366 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.477151 -0.173345 0.524171 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.470546 -0.18129 0.546597 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.491265 -0.0984274 0.581368 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.501491 -0.082906 0.597621 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.477742 -0.0892696 0.599887 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.484874 -0.0745774 0.581368 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.515014 -0.0920638 0.579103 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.498397 -0.0837352 0.56285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.504787 -0.107585 0.56285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.507882 -0.106756 0.597621 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.497655 -0.122277 0.581368 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.484132 -0.11312 0.599887 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.491265 -0.0984274 0.507294 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.508376 -0.0810612 0.503387 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.498397 -0.0837352 0.525813 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.484874 -0.0745774 0.507294 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.501244 -0.0957534 0.484868 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.477742 -0.0892696 0.488775 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.484132 -0.11312 0.488775 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.514767 -0.104911 0.503387 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.497655 -0.122277 0.507294 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.504787 -0.107585 0.525813 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.424299 -0.178985 0.507294 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.411775 -0.200165 0.505236 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.399922 -0.179342 0.511201 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.415187 -0.189948 0.527454 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.436152 -0.199808 0.501329 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.439564 -0.189591 0.523547 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.448677 -0.178629 0.503387 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.420888 -0.189202 0.485076 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.433412 -0.168023 0.487134 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.409035 -0.168379 0.491041 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.4293 -0.115031 0.470257 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.439381 -0.10495 0.450097 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.45315 -0.10864 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.435691 -0.0911807 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.415531 -0.111341 0.450097 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.411841 -0.0975713 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.40545 -0.121421 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.43299 -0.128801 0.450097 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.42291 -0.138881 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.44676 -0.13249 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.367336 -0.131634 0.507294 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.350719 -0.123305 0.491041 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.374468 -0.116942 0.488775 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.360946 -0.107784 0.507294 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.343587 -0.137998 0.509559 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.353814 -0.122476 0.525813 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.360204 -0.146326 0.525813 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.357109 -0.147155 0.491041 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.373727 -0.155484 0.507294 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.380859 -0.140792 0.488775 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.248762 -0.0483751 0.655442 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.183785 -0.0599222 0.689081 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.160406 -0.0522053 0.690965 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.171954 -0.0513956 0.669156 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.178533 -0.0358698 0.687193 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.172236 -0.0607319 0.71089 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.190363 -0.0443964 0.707118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.195615 -0.0684488 0.709006 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.165658 -0.0762577 0.692853 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.189036 -0.0839747 0.690969 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.177206 -0.075448 0.671044 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.187119 -0.0172857 0.6286 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.176731 -0.00705049 0.608675 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.192673 -0.025725 0.60607 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.200733 -0.00352517 0.613272 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.171177 0.00138875 0.631205 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.195179 0.00491406 0.635801 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.181564 -0.00884647 0.65113 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.163117 -0.020811 0.624003 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.173504 -0.0310463 0.643928 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.179058 -0.0394855 0.621398 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.215921 0.00673113 0.692479 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.20044 0.0258737 0.690591 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.196602 0.00551963 0.677151 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.215612 0.0203763 0.671903 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.21976 0.0270852 0.705919 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.234932 0.0215878 0.687231 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.235241 0.00794264 0.707807 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.200749 0.0122285 0.711167 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.21623 -0.00691403 0.713055 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.196911 -0.00812553 0.697727 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.245428 -0.0910116 0.715923 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.234308 -0.0942304 0.737733 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.221514 -0.0854464 0.718528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.238704 -0.0714204 0.729364 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.258223 -0.0997955 0.735128 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.262619 -0.0769856 0.726759 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.269343 -0.0965768 0.713318 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.241032 -0.113822 0.724292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.252152 -0.110603 0.702483 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.228237 -0.105038 0.705088 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.277564 -0.0243582 0.719322 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.275459 -0.0076281 0.737359 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.255218 -0.0167139 0.726523 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.270078 -0.00142185 0.714074 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.297806 -0.0152725 0.730157 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.292425 -0.00906621 0.706872 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.299911 -0.0320026 0.71212 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.282946 -0.0305645 0.742607 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.285051 -0.0472946 0.72457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.262704 -0.0396503 0.731771 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.310405 -0.0794645 0.682285 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.324811 -0.0817333 0.702209 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.300317 -0.0800146 0.704814 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.313378 -0.0603366 0.697613 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.334899 -0.0811832 0.67968 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.323466 -0.0597864 0.675083 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.320493 -0.0789143 0.659755 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.321838 -0.100861 0.686881 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.307433 -0.0985923 0.666956 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.297345 -0.0991425 0.689486 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.216626 -0.115028 0.652044 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.195663 -0.127519 0.655816 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.194866 -0.104303 0.647447 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.201738 -0.108803 0.670732 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.217423 -0.138245 0.660413 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.223497 -0.119529 0.675329 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.238386 -0.125754 0.656641 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.210551 -0.133744 0.637128 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.231514 -0.121254 0.633356 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.209754 -0.110528 0.628759 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.281603 -0.103481 0.618405 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.291073 -0.126206 0.620293 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.271345 -0.119897 0.633733 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.293457 -0.110246 0.638981 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.301332 -0.10979 0.604965 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.303716 -0.0938302 0.623653 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.291862 -0.0870656 0.603077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.279219 -0.119442 0.599717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.269749 -0.0967168 0.597829 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.25949 -0.113132 0.613157 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.21996 -0.0723919 0.591563 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.20388 -0.0673141 0.573526 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.216456 -0.0490355 0.584361 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.198742 -0.0609052 0.596811 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.207384 -0.0906706 0.580727 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.202246 -0.0842617 0.604012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.223463 -0.0957484 0.598764 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.225098 -0.0788008 0.568278 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.241177 -0.0838786 0.586315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.237674 -0.0605222 0.579113 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.471405 0.471405 1.11022e-16 RAD 0.166667 
-   txt002 
- SPHERE CENTER -0.508983 0.690426 8.51251e-17 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.484794 0.755941 -0.0246914 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.47411 0.767658 -0.0436186 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.467528 0.744501 -0.0381316 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.489758 0.749038 -0.0478724 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.491377 0.779098 -0.0301783 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.507025 0.760478 -0.0344321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.502061 0.767382 -0.0112511 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.469146 0.774562 -0.0204376 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.47983 0.762845 -0.00151032 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.462564 0.751405 -0.0149506 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.436283 0.7029 -0.00679642 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.418941 0.714226 -0.0202367 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.43889 0.704751 -0.0312799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.44101 0.724842 -0.0170845 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.416335 0.712374 0.0042468 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.438403 0.722991 0.00739901 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.433677 0.701048 0.0176871 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.414215 0.692283 -0.00994863 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.431557 0.680957 0.00349164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.434163 0.682808 -0.0209919 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.478434 0.695668 -0.0672777 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.481931 0.703418 -0.0904587 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.500827 0.694124 -0.0775657 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.491475 0.716184 -0.0716007 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.459538 0.704962 -0.0801706 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.469082 0.717727 -0.0613127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.456041 0.697211 -0.0569896 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.46889 0.682902 -0.0861356 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.465393 0.675152 -0.0629546 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.487786 0.673608 -0.0732426 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.557494 0.743468 -0.0178949 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.560084 0.767402 -0.0233819 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.543179 0.760285 -0.00685171 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.53997 0.755145 -0.0307879 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.574398 0.750585 -0.0344251 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.554284 0.738328 -0.0418311 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.571808 0.726651 -0.0289382 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.577608 0.755725 -0.0104889 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.575017 0.731791 -0.00500196 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.560703 0.748608 0.00604126 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.551134 0.683194 -0.0604812 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.573364 0.687731 -0.070222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.571303 0.682033 -0.0462858 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.56324 0.703871 -0.0545162 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.553195 0.688893 -0.0844174 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.543071 0.705033 -0.0687117 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.530964 0.684356 -0.0746767 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.561258 0.667055 -0.076187 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.539027 0.662518 -0.0664462 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.559196 0.661356 -0.0522508 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.581682 0.677953 0.00679642 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.601808 0.682851 0.0202367 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.579842 0.680568 0.0312799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.58454 0.700216 0.0170845 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.603648 0.680237 -0.0042468 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.58638 0.697602 -0.00739901 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.583522 0.675339 -0.0176871 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.59895 0.660588 0.00994863 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.578824 0.65569 -0.00349164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.576984 0.658304 0.0209919 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.515343 0.7507 0.0425863 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.506594 0.773394 0.0468401 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.491321 0.755462 0.0394341 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.507924 0.764807 0.0237283 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.530616 0.768632 0.0499923 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.531946 0.760045 0.0268805 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.539365 0.745938 0.0457385 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.514012 0.759287 0.065698 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.522762 0.736593 0.0614442 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.49874 0.741355 0.058292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.539531 0.685185 0.0672777 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.538818 0.693658 0.0904587 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.517905 0.691194 0.0775657 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.534075 0.708875 0.0716007 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.560445 0.687649 0.0801706 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.555702 0.702866 0.0613127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.561158 0.679176 0.0569896 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.544274 0.669969 0.0861356 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.544988 0.661495 0.0629546 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.523361 0.667505 0.0732426 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.466832 0.697658 0.0604812 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.447385 0.709346 0.070222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.447429 0.703286 0.0462858 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.46231 0.721188 0.0545162 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.466788 0.703718 0.0844174 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.481713 0.71556 0.0687117 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.486235 0.692031 0.0746767 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.451907 0.685816 0.076187 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.471354 0.674129 0.0664462 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.451951 0.679757 0.0522508 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.335322 0.607487 0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.283164 0.659645 0.104315 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.269894 0.672915 0.0882695 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.275822 0.649528 0.0830215 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.293281 0.666987 0.0830215 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.277236 0.683032 0.109563 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.300624 0.677104 0.104315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.290507 0.669762 0.125608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.259777 0.665573 0.109563 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.273047 0.652302 0.125608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.265705 0.642185 0.104315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.286452 0.603979 0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.279361 0.614273 0.0342624 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.303327 0.613293 0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.288206 0.628413 0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.262487 0.604959 0.0496945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.271332 0.619099 0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.269578 0.594664 0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.277607 0.589839 0.0373488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.284698 0.579544 0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.301572 0.588858 0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.33883 0.656357 0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.328536 0.663448 0.0342624 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.314396 0.654603 0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.329516 0.639482 0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.35297 0.665202 0.0373488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.353951 0.641237 0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.363265 0.658111 0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.33785 0.680322 0.0496945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.348145 0.673232 0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.32371 0.671477 0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.332034 0.663153 0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.321274 0.684748 0.165118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.308341 0.666888 0.154009 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.326131 0.678752 0.141664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.344967 0.681014 0.170979 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.349824 0.675018 0.147525 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.355727 0.659419 0.165731 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.327177 0.669149 0.183325 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.337937 0.647554 0.178077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.314244 0.651289 0.172216 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.3877 0.659866 0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.391875 0.684201 0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.37258 0.674986 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.37258 0.674986 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.406996 0.669081 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.3877 0.659866 0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.40282 0.644745 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.406996 0.669081 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.40282 0.644745 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.3877 0.659866 0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.384191 0.610996 0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.389739 0.622198 0.18796 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.366159 0.617804 0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.378964 0.63493 0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.407771 0.61539 0.172528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.396997 0.628121 0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.402224 0.604188 0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.394966 0.598265 0.184873 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.389418 0.587062 0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.371386 0.593871 0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.279656 0.610775 0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.258061 0.621535 0.165118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.264057 0.616678 0.141664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.275921 0.634468 0.154009 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.27366 0.615632 0.183325 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.29152 0.628565 0.172216 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.295255 0.604872 0.178077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.261795 0.597842 0.170979 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.28339 0.587082 0.165731 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.267791 0.592985 0.147525 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.331813 0.558618 0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.320611 0.55307 0.18796 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.30788 0.563845 0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.325005 0.57665 0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.344544 0.547843 0.184873 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.348938 0.571423 0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.355747 0.553391 0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.327419 0.535038 0.172528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.338621 0.540585 0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.314688 0.545813 0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.282943 0.555109 0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.258608 0.550934 0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.267823 0.570229 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.267823 0.570229 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.273728 0.535813 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.282943 0.555109 0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.298064 0.539989 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.273728 0.535813 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.298064 0.539989 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.282943 0.555109 0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.335322 0.607487 -0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.313405 0.629404 -0.178389 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.316595 0.626214 -0.202664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.318408 0.606941 -0.187336 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.335868 0.624401 -0.187336 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.311592 0.648676 -0.193717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.330864 0.646863 -0.178389 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.308402 0.651867 -0.169441 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.294133 0.631217 -0.193717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.290942 0.634407 -0.169441 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.295946 0.611945 -0.178389 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.331813 0.558618 -0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.319608 0.539107 -0.175614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.307378 0.556863 -0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.322499 0.541743 -0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.344043 0.540862 -0.178701 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.346933 0.543497 -0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.356248 0.560372 -0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.328923 0.555982 -0.191046 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.341128 0.575492 -0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.316693 0.573738 -0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.384191 0.610996 -0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.403702 0.623201 -0.175614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.401066 0.62031 -0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.385946 0.635431 -0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.386827 0.613886 -0.191046 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.369071 0.626116 -0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.367317 0.601681 -0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.401947 0.598766 -0.178701 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.382437 0.586561 -0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.399312 0.595876 -0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.316914 0.678274 -0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.305407 0.69384 -0.138161 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.296616 0.671002 -0.134867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.317721 0.674446 -0.147213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.325704 0.701111 -0.126127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.338018 0.681717 -0.135179 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.337211 0.685545 -0.110799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.3046 0.697667 -0.113782 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.316107 0.682101 -0.0984536 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.295809 0.67483 -0.110488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.3877 0.659866 -0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.391875 0.684201 -0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.37258 0.674986 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.37258 0.674986 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.406996 0.669081 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.3877 0.659866 -0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.40282 0.644745 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.406996 0.669081 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.40282 0.644745 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.3877 0.659866 -0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.33883 0.656357 -0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.329538 0.677411 -0.0466081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.314897 0.661584 -0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.332022 0.674389 -0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.353472 0.672184 -0.0435217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.355956 0.669162 -0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.362764 0.65113 -0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.336346 0.659378 -0.031176 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.345639 0.638325 -0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.321705 0.643552 -0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.264535 0.625895 -0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.248969 0.637402 -0.138161 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.268363 0.625088 -0.147213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.271807 0.646193 -0.134867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.245142 0.638209 -0.113782 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.267979 0.647 -0.110488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.260708 0.626702 -0.0984536 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.241698 0.617105 -0.126127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.257264 0.605598 -0.110799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.261092 0.604791 -0.135179 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.286452 0.603979 -0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.265398 0.613271 -0.0466081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.26842 0.610787 -0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.281225 0.627912 -0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.283431 0.606463 -0.031176 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.299257 0.621104 -0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.304484 0.59717 -0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.270625 0.589337 -0.0435217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.291679 0.580045 -0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.273647 0.586853 -0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.282943 0.555109 -0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.258608 0.550934 -0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.267823 0.570229 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.267823 0.570229 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.273728 0.535813 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.282943 0.555109 -0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.298064 0.539989 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.273728 0.535813 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.298064 0.539989 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.282943 0.555109 -0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.645066 0.554344 -0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.681385 0.616373 -0.129006 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.678928 0.639472 -0.137375 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.661636 0.629767 -0.122663 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.664108 0.621631 -0.145845 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.698678 0.626079 -0.143718 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.683858 0.608237 -0.152187 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.701135 0.602979 -0.135349 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.696205 0.634214 -0.120537 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.698662 0.611115 -0.112168 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.678912 0.624508 -0.105825 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.649723 0.609912 -0.062352 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.640648 0.631982 -0.0560094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.625749 0.614812 -0.0656463 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.64267 0.62585 -0.0798417 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.664623 0.627081 -0.0527151 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.666645 0.620949 -0.0765474 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.673698 0.605012 -0.0590577 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.647702 0.616044 -0.0385197 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.656777 0.593974 -0.0448623 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.632802 0.598874 -0.0481565 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.607573 0.617144 -0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.595495 0.63057 -0.139672 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.594239 0.605919 -0.140323 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.615286 0.617371 -0.146288 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.608828 0.641795 -0.122182 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.628619 0.628595 -0.128798 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.620906 0.628369 -0.105343 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.587782 0.630343 -0.116217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.59986 0.616917 -0.0993785 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.586526 0.605692 -0.116868 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.676727 0.560805 -0.177765 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.689897 0.57563 -0.192477 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.693998 0.575587 -0.168128 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.673115 0.585222 -0.177114 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.672626 0.560848 -0.202114 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.655844 0.57044 -0.186751 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.659456 0.546023 -0.187402 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.693509 0.551213 -0.193128 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.680339 0.536388 -0.178416 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.69761 0.55117 -0.16878 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.602915 0.561576 -0.171592 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.602201 0.570049 -0.194773 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.623084 0.560414 -0.185788 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.615021 0.582252 -0.177557 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.582032 0.571211 -0.180578 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.594852 0.583414 -0.163362 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.582745 0.562738 -0.157397 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.590095 0.549372 -0.188808 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.590808 0.540899 -0.165627 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.610978 0.539737 -0.179823 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.640408 0.498776 -0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.627785 0.478525 -0.166213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.615951 0.497935 -0.156576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.630799 0.484234 -0.142381 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.652241 0.479365 -0.169507 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.655255 0.485075 -0.145675 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.664864 0.499616 -0.163165 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.637394 0.493066 -0.183703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.650016 0.513317 -0.17736 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.62556 0.512476 -0.174066 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.718878 0.553573 -0.117284 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.73992 0.563328 -0.108814 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.720935 0.559693 -0.0934517 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.719679 0.577348 -0.110668 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.737863 0.557208 -0.132647 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.717623 0.571228 -0.1345 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.716821 0.547453 -0.141116 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.739118 0.539553 -0.115431 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.718076 0.529798 -0.1239 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.720133 0.535918 -0.100068 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.682558 0.491544 -0.099389 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.688647 0.474542 -0.0825505 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.666351 0.485132 -0.0818993 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.686417 0.498226 -0.0759343 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.704854 0.480953 -0.10004 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.702624 0.504637 -0.093424 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.698765 0.497955 -0.116879 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.684788 0.46786 -0.106005 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.678699 0.484862 -0.122844 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.662492 0.47845 -0.105354 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.687216 0.547112 -0.0506299 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.690713 0.554862 -0.0274488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.667813 0.552739 -0.0364345 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.682694 0.570641 -0.0446649 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.710116 0.549235 -0.0416443 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.702097 0.565014 -0.0588603 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.706619 0.541484 -0.0648253 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.695235 0.531333 -0.0334138 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.691738 0.523582 -0.0565949 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.672335 0.52921 -0.0423994 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.471405 0.471405 -0.222222 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.501645 0.501645 -0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.499795 0.519956 -0.299164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.493653 0.523893 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.479397 0.509638 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.507788 0.497708 -0.306292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.48739 0.48739 -0.296959 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.509638 0.479397 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.522043 0.511963 -0.292037 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.523893 0.493653 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.515901 0.515901 -0.268448 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.542955 0.490576 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.559233 0.507719 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.539759 0.502501 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.536564 0.514426 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.562428 0.495794 -0.236478 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.539759 0.502501 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.54615 0.478651 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.565623 0.483869 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.549345 0.466726 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.54615 0.478651 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.490576 0.542955 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.483869 0.565623 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.466726 0.549345 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.478651 0.54615 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.507719 0.559233 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.502501 0.539759 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.514426 0.536564 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.495794 0.562428 -0.207967 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.502501 0.539759 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.478651 0.54615 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.430095 0.482473 -0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.430434 0.489762 -0.306292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.449569 0.477255 -0.296959 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.445366 0.500519 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.41096 0.49498 -0.292037 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.425893 0.505737 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.410622 0.487691 -0.268448 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.415162 0.471716 -0.299164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.414824 0.464428 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.434297 0.45921 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.419026 0.523783 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.404771 0.538038 -0.236478 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.410297 0.515053 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.427756 0.532513 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.4135 0.546768 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.436486 0.541242 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.427756 0.532513 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.396041 0.529309 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.410297 0.515053 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.401567 0.506323 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.399854 0.452233 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.377186 0.45894 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.396659 0.464158 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.393464 0.476083 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.380381 0.447015 -0.207967 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.396659 0.464158 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.40305 0.440308 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.383576 0.43509 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.406245 0.428383 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.40305 0.440308 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.482473 0.430095 -0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.48121 0.407271 -0.292037 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.464428 0.414824 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.487691 0.410622 -0.268448 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.499256 0.422542 -0.299164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.505737 0.425893 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.500519 0.445366 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.475992 0.426744 -0.306292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.477255 0.449569 -0.296959 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.45921 0.434297 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.452233 0.399854 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.43509 0.383576 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.428383 0.406245 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.440308 0.40305 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.45894 0.377186 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.464158 0.396659 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.476083 0.393464 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.447015 0.380381 -0.236478 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.464158 0.396659 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.440308 0.40305 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.523783 0.419026 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.538038 0.404771 -0.207967 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.515053 0.410297 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.532513 0.427756 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.546768 0.4135 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.541242 0.436486 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.532513 0.427756 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.529309 0.396041 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.515053 0.410297 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.506323 0.401567 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.607487 0.335322 -0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.659645 0.283164 -0.104315 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.672915 0.269894 -0.0882695 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.649528 0.275822 -0.0830215 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.666987 0.293281 -0.0830215 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.683032 0.277236 -0.109563 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.677104 0.300624 -0.104315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.669762 0.290507 -0.125608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.665573 0.259777 -0.109563 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.652302 0.273047 -0.125608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.642185 0.265705 -0.104315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.603979 0.286452 -0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.592776 0.280905 -0.0342624 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.580045 0.291679 -0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.59717 0.304484 -0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.61671 0.275678 -0.0373488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.621104 0.299257 -0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.627912 0.281225 -0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.599585 0.262872 -0.0496945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.610787 0.26842 -0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.586853 0.273647 -0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.656357 0.33883 -0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.661904 0.350033 -0.0342624 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.638325 0.345639 -0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.65113 0.362764 -0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.679937 0.343224 -0.0496945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.669162 0.355956 -0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.674389 0.332022 -0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.667131 0.326099 -0.0373488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.661584 0.314897 -0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.643552 0.321705 -0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.663153 0.332034 -0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.685865 0.340177 -0.165118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.679339 0.33606 -0.141664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.669651 0.355123 -0.154009 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.669679 0.336151 -0.183325 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.653465 0.351097 -0.172216 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.646968 0.328008 -0.178077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.679367 0.317089 -0.170979 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.656656 0.308945 -0.165731 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.672841 0.312971 -0.147525 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.659866 0.3877 -0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.664041 0.412036 -0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.644745 0.40282 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.644745 0.40282 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.679161 0.396915 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.659866 0.3877 -0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.674986 0.37258 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.679161 0.396915 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.674986 0.37258 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.659866 0.3877 -0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.610996 0.384191 -0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.600701 0.391282 -0.18796 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.586561 0.382437 -0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.601681 0.367317 -0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.625136 0.393037 -0.184873 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.626116 0.369071 -0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.635431 0.385946 -0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.610016 0.408157 -0.172528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.62031 0.401066 -0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.595876 0.399312 -0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.610775 0.279656 -0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.602632 0.256944 -0.165118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.587686 0.273158 -0.154009 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.606749 0.26347 -0.141664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.62572 0.263442 -0.170979 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.629838 0.269968 -0.147525 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.633864 0.286153 -0.165731 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.606658 0.27313 -0.183325 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.614801 0.295841 -0.178077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.591712 0.289344 -0.172216 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.558618 0.331813 -0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.551527 0.342108 -0.18796 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.575492 0.341128 -0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.560372 0.356248 -0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.534652 0.332793 -0.172528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.543497 0.346933 -0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.541743 0.322499 -0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.549772 0.317673 -0.184873 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.556863 0.307378 -0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.573738 0.316693 -0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.555109 0.282943 -0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.530773 0.278768 -0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.539989 0.298064 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.539989 0.298064 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.545894 0.263648 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.555109 0.282943 -0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.570229 0.267823 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.545894 0.263648 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.570229 0.267823 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.555109 0.282943 -0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.645066 0.554344 0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.668521 0.610229 0.153697 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.663938 0.633406 0.160875 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.64522 0.617928 0.156428 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.65892 0.626429 0.137727 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.687239 0.625707 0.158144 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.682221 0.61873 0.134996 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.691822 0.602531 0.150967 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.673539 0.617206 0.176845 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.678123 0.59403 0.169668 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.654822 0.601728 0.172398 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.598918 0.585648 0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.580238 0.601562 0.162601 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.581665 0.587563 0.142311 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.59781 0.605914 0.14581 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.597491 0.599646 0.18016 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.615063 0.603999 0.163369 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.616171 0.583732 0.177429 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.581346 0.581295 0.176661 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.600026 0.565381 0.173931 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.582773 0.567297 0.156372 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.619787 0.622977 0.099389 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.608008 0.63767 0.0834188 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.601637 0.613891 0.0853287 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.623239 0.620102 0.0751099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.626157 0.646756 0.0974792 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.641389 0.629188 0.0891702 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.637936 0.632063 0.113449 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.604555 0.640545 0.107698 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.616334 0.625852 0.123668 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.598184 0.616766 0.109608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.714669 0.578925 0.104938 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.729812 0.597914 0.109385 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.711617 0.592661 0.125228 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.70632 0.602084 0.103028 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.732864 0.584178 0.0890951 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.709372 0.588348 0.0827387 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.71772 0.565189 0.0846485 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.738161 0.574755 0.111295 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.723017 0.555767 0.106848 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.719965 0.569503 0.127138 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.665934 0.591673 0.0506299 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.658095 0.605761 0.0319289 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.647455 0.607672 0.0541285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.643855 0.58746 0.0404111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.676573 0.589763 0.0284303 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.662334 0.571461 0.0369125 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.684413 0.575674 0.0471312 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.680174 0.609975 0.0421477 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.688013 0.595887 0.0608487 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.669535 0.611885 0.0643473 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.691213 0.52304 0.062352 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.712906 0.511567 0.0596212 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.699372 0.507717 0.079911 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.710453 0.529503 0.0764123 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.704747 0.526889 0.0420622 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.702295 0.544826 0.0588533 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.683054 0.538362 0.044793 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.693665 0.505104 0.0455609 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.671972 0.516576 0.0482916 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.680131 0.501254 0.0658506 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.6938 0.541596 0.165419 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.70016 0.547376 0.188567 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.676324 0.546319 0.182211 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.690564 0.564621 0.173728 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.717636 0.542652 0.171776 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.70804 0.559898 0.156937 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.711276 0.536873 0.148628 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.703396 0.524351 0.180258 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.697037 0.518571 0.157111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.679561 0.523294 0.173902 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.670344 0.48571 0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.67091 0.466887 0.138803 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.650637 0.480853 0.136894 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.671107 0.490138 0.147112 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.690617 0.471745 0.124743 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.690815 0.494995 0.133052 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.690052 0.490567 0.108773 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.670147 0.46246 0.114524 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.669581 0.481283 0.0985541 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.649874 0.476425 0.112614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.624197 0.517014 0.171592 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.60809 0.516313 0.190293 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.60089 0.524375 0.168094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.616221 0.538029 0.181811 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.631397 0.508952 0.193792 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.639529 0.530668 0.18531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.647504 0.509653 0.175091 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.616065 0.495298 0.180075 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.632172 0.495999 0.161374 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.608865 0.50336 0.157875 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.607487 0.335322 0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.629404 0.313405 0.178389 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.626214 0.316595 0.202664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.606941 0.318408 0.187336 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.624401 0.335868 0.187336 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.648676 0.311592 0.193717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.646863 0.330864 0.178389 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.651867 0.308402 0.169441 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.631217 0.294133 0.193717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.634407 0.290942 0.169441 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.611945 0.295946 0.178389 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.558618 0.331813 0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.537564 0.341105 0.175614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.540585 0.338621 0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.553391 0.355747 0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.555596 0.334297 0.191046 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.571423 0.348938 0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.57665 0.325005 0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.542791 0.317172 0.178701 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.563845 0.30788 0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.545813 0.314688 0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.610996 0.384191 0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.601704 0.405245 0.175614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.587062 0.389418 0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.604188 0.402224 0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.625637 0.400018 0.178701 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.628121 0.396997 0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.63493 0.378964 0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.608512 0.387213 0.191046 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.617804 0.366159 0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.593871 0.371386 0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.678274 0.316914 0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.697473 0.31938 0.138161 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.674538 0.318074 0.147213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.681812 0.338182 0.134867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.701209 0.31822 0.113782 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.685547 0.337022 0.110488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.682009 0.315754 0.0984536 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.693935 0.298112 0.126127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.674736 0.295646 0.110799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.671 0.296805 0.135179 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.659866 0.3877 0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.664041 0.412036 0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.644745 0.40282 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.644745 0.40282 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.679161 0.396915 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.659866 0.3877 0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.674986 0.37258 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.679161 0.396915 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.674986 0.37258 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.659866 0.3877 0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.656357 0.33883 0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.675867 0.351035 0.0466081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.673232 0.348145 0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.658111 0.363265 0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.658993 0.341721 0.031176 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.641237 0.353951 0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.639482 0.329516 0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.674113 0.3266 0.0435217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.654603 0.314396 0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.671477 0.32371 0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.625895 0.264535 0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.623429 0.245336 0.138161 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.604627 0.260997 0.134867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.624736 0.268271 0.147213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.644697 0.248874 0.126127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.646004 0.271809 0.135179 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.647163 0.268073 0.110799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.624589 0.2416 0.113782 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.627055 0.2608 0.0984536 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.605787 0.257262 0.110488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.603979 0.286452 0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.591774 0.266942 0.0466081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.579544 0.284698 0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.594664 0.269578 0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.616209 0.268696 0.0435217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.619099 0.271332 0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.628413 0.288206 0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.601088 0.283817 0.031176 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.613293 0.303327 0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.588858 0.301572 0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.555109 0.282943 0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.530773 0.278768 0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.539989 0.298064 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.539989 0.298064 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.545894 0.263648 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.555109 0.282943 0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.570229 0.267823 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.545894 0.263648 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.570229 0.267823 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.555109 0.282943 0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.471405 0.471405 0.222222 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.441164 0.501645 0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.424703 0.518106 0.290934 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.420089 0.505261 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.437548 0.522721 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.445778 0.51449 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.458623 0.519105 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.462239 0.498029 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.428319 0.497031 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.44478 0.48057 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.423704 0.484186 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.399854 0.490576 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.382226 0.502679 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.399854 0.490576 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.405389 0.511231 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.382226 0.502679 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.405389 0.511231 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.399854 0.490576 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.376691 0.482024 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.39432 0.469922 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.39432 0.469922 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.452233 0.542955 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.44013 0.560583 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.431578 0.53742 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.452233 0.542955 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.460785 0.566118 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.472887 0.548489 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.472887 0.548489 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.44013 0.560583 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.452233 0.542955 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.431578 0.53742 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.512714 0.482473 0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.51514 0.495905 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.492654 0.48988 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.506323 0.506323 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.5352 0.488498 0.290934 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.526383 0.498917 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.532774 0.475067 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.521531 0.472055 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.519105 0.458623 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.499045 0.46603 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.523783 0.523783 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.527958 0.548119 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.508662 0.538903 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.508662 0.538903 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.543078 0.532998 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.523783 0.523783 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.538903 0.508662 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.543078 0.532998 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.538903 0.508662 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.523783 0.523783 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.542955 0.452233 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.564273 0.4539 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.542955 0.452233 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.548489 0.472887 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.564273 0.4539 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.548489 0.472887 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.542955 0.452233 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.558738 0.433245 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.53742 0.431578 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.53742 0.431578 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.460336 0.430095 0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.446904 0.427669 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.436486 0.436486 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.45293 0.450155 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.470754 0.421278 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.47678 0.443764 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.484186 0.423704 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.454311 0.407609 0.290934 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.467742 0.410035 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.443892 0.416426 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.490576 0.399854 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.488909 0.378536 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.469922 0.39432 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.490576 0.399854 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.509564 0.384071 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.511231 0.405389 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.511231 0.405389 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.488909 0.378536 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.490576 0.399854 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.469922 0.39432 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.419026 0.419026 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.39469 0.414851 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.403906 0.434147 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.403906 0.434147 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.409811 0.399731 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.419026 0.419026 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.434147 0.403906 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.409811 0.399731 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.434147 0.403906 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.419026 0.419026 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.643951 -0.172546 1.11022e-16 RAD 0.166667 
-   txt002 
- SPHERE CENTER -0.835815 -0.157543 0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.871646 -0.122136 0.165419 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.871334 -0.102403 0.180258 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.850164 -0.113406 0.173902 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.862937 -0.100577 0.157111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.892817 -0.111133 0.171776 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.884419 -0.109307 0.148628 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.893129 -0.130866 0.156937 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.880044 -0.123961 0.188567 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.880356 -0.143694 0.173728 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.858873 -0.134964 0.182211 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.799077 -0.135649 0.171592 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.781177 -0.120908 0.180075 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.778973 -0.13149 0.157875 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.795477 -0.113462 0.161374 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.801282 -0.125067 0.193792 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.815582 -0.11762 0.175091 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.819182 -0.139808 0.18531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.784778 -0.143095 0.190293 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.802678 -0.157836 0.181811 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.782573 -0.153678 0.168094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.82339 -0.0854653 0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.811594 -0.0654286 0.114524 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.80102 -0.0876595 0.112614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.820516 -0.0820122 0.0985541 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.833964 -0.0632344 0.124743 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.842886 -0.079818 0.108773 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.845761 -0.083271 0.133052 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.814468 -0.0688817 0.138803 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.826265 -0.0889183 0.147112 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.803895 -0.0911125 0.136894 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.908384 -0.14403 0.104938 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.926643 -0.128672 0.111295 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.90826 -0.133221 0.127138 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.904034 -0.1198 0.106848 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.926768 -0.139481 0.0890951 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.904159 -0.130608 0.0846485 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.908508 -0.154838 0.0827387 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.930993 -0.152902 0.109385 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.912733 -0.16826 0.103028 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.912609 -0.157451 0.125228 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.860128 -0.107359 0.062352 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.853284 -0.0905999 0.0455609 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.839638 -0.0940331 0.0658506 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.840233 -0.111382 0.0482916 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.873773 -0.103926 0.0420622 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.860723 -0.124708 0.044793 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.880618 -0.120685 0.0588533 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.873178 -0.086577 0.0596212 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.880022 -0.103336 0.0764123 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.859532 -0.0900102 0.079911 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.872552 -0.179437 0.0506299 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.894035 -0.188167 0.0421477 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.885777 -0.195141 0.0643473 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.89378 -0.172046 0.0608487 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.880811 -0.172463 0.0284303 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.880556 -0.156342 0.0471312 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.859328 -0.163733 0.0369125 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.872807 -0.195558 0.0319289 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.851325 -0.186828 0.0404111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.864549 -0.202532 0.0541285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.884071 -0.194213 0.153697 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.891905 -0.197746 0.176845 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.867957 -0.193701 0.172398 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.884286 -0.175383 0.169668 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.908019 -0.198259 0.158144 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.900401 -0.175896 0.150967 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.900186 -0.194726 0.134996 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.89169 -0.216576 0.160875 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.883856 -0.213043 0.137727 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.867741 -0.212531 0.156428 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.84824 -0.229621 0.099389 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.843832 -0.25245 0.107698 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.826426 -0.235043 0.109608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.846687 -0.233837 0.123668 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.865646 -0.247028 0.0974792 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.868501 -0.228415 0.113449 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.870053 -0.224198 0.0891702 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.845385 -0.248234 0.0834188 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.849792 -0.225404 0.0751099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.827978 -0.230827 0.0853287 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.811502 -0.207727 0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.794108 -0.212743 0.176661 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.788345 -0.199907 0.156372 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.802328 -0.189621 0.173931 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.817265 -0.220563 0.18016 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.825486 -0.197441 0.177429 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.83466 -0.215547 0.163369 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.803282 -0.230849 0.162601 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.820676 -0.225832 0.14581 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.797518 -0.218012 0.142311 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.643951 -0.172546 0.222222 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.61371 -0.142305 0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.597249 -0.125845 0.290934 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.592635 -0.138689 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.610094 -0.12123 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.618324 -0.12946 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.631169 -0.124846 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.634785 -0.145921 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.600865 -0.14692 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.617326 -0.163381 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.596251 -0.159765 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.5724 -0.153374 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.554772 -0.141271 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.5724 -0.153374 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.577935 -0.13272 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.554772 -0.141271 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.577935 -0.13272 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.5724 -0.153374 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.549237 -0.161926 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.566866 -0.174029 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.566866 -0.174029 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.624779 -0.100996 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.612676 -0.0833673 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.604124 -0.10653 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.624779 -0.100996 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.633331 -0.0778329 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.645433 -0.0954616 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.645433 -0.0954616 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.612676 -0.0833673 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.624779 -0.100996 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.604124 -0.10653 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.68526 -0.161477 0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.687686 -0.148046 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.6652 -0.154071 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.678869 -0.137627 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.707746 -0.155452 0.290934 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.698929 -0.145033 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.70532 -0.168883 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.694077 -0.171896 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.691651 -0.185327 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.671591 -0.177921 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.696329 -0.120168 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.700504 -0.095832 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.681209 -0.105047 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.681209 -0.105047 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.715624 -0.110952 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.696329 -0.120168 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.711449 -0.135288 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.715624 -0.110952 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.711449 -0.135288 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.696329 -0.120168 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.715501 -0.191718 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.736819 -0.190051 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.715501 -0.191718 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.721035 -0.171063 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.736819 -0.190051 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.721035 -0.171063 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.715501 -0.191718 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.731284 -0.210706 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.709966 -0.212373 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.709966 -0.212373 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.632882 -0.213855 0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.61945 -0.216282 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.609032 -0.207465 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.625476 -0.193796 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.6433 -0.222672 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.649326 -0.200186 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.656732 -0.220246 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.626857 -0.236341 0.290934 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.640288 -0.233915 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.616438 -0.227525 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.663122 -0.244096 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.661455 -0.265414 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.642468 -0.249631 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.663122 -0.244096 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.68211 -0.25988 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.683777 -0.238562 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.683777 -0.238562 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.661455 -0.265414 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.663122 -0.244096 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.642468 -0.249631 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.591572 -0.224924 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.567237 -0.2291 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.576452 -0.209804 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.576452 -0.209804 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.582357 -0.24422 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.591572 -0.224924 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.606693 -0.240045 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.582357 -0.24422 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.606693 -0.240045 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.591572 -0.224924 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.69376 0.0133465 0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.674309 0.0838533 0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.66171 0.103063 0.113782 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.653258 0.0800983 0.110488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.673446 0.0876683 0.0984536 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.682761 0.106818 0.126127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.694497 0.0914233 0.110799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.69536 0.0876083 0.135179 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.662574 0.0992478 0.138161 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.675172 0.0800382 0.147213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.654121 0.0762832 0.134867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.62221 0.0325183 0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.604582 0.0446211 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.62221 0.0325183 0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.627745 0.053173 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.604582 0.0446211 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.627745 0.053173 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.62221 0.0325183 0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.599047 0.0239663 0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.616676 0.0118635 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.616676 0.0118635 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.666287 0.0539145 0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.662466 0.0547519 0.031176 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.660752 0.0332597 0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.682791 0.0439578 0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.668 0.0754066 0.0435217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.688325 0.0646126 0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.671821 0.0745692 0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.645962 0.0647085 0.0466081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.649783 0.0638711 0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.644249 0.0432164 0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.745859 0.0646815 0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.750021 0.0887955 0.126127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.729506 0.078459 0.135179 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.732161 0.0813312 0.110799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.766375 0.075018 0.113782 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.748514 0.0675537 0.0984536 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.762212 0.050904 0.110488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.763719 0.0721458 0.138161 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.759557 0.0480318 0.134867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.743204 0.0618093 0.147213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.737837 0.0347427 0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.747099 0.0542122 0.0435217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.743371 0.0553974 0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.7241 0.0550267 0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.741565 0.0335575 0.031176 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.718566 0.0343719 0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.732303 0.014088 0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.760836 0.0339282 0.0466081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.751574 0.0144587 0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.757108 0.0351134 0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.76531 -0.0058253 0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.786629 -0.00415829 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.76531 -0.0058253 0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.770845 0.0148294 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.786629 -0.00415829 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.770845 0.0148294 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.76531 -0.0058253 0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.781094 -0.024813 0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.759776 -0.02648 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.759776 -0.02648 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.701782 0.0432853 0.178389 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.693716 0.0608821 0.193717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.677932 0.0496759 0.178389 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.694884 0.0652402 0.169441 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.717566 0.0544915 0.193717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.718734 0.0588496 0.169441 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.725632 0.0368947 0.178389 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.700615 0.0389272 0.202664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.708681 0.0213304 0.187336 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.684831 0.027721 0.187336 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.721234 -0.0272215 0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.720593 -0.0310802 0.191046 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.7 -0.0246945 0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.718114 -0.00820099 0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.741827 -0.0336072 0.178701 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.739347 -0.010728 0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.742467 -0.0297485 0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.723713 -0.0501007 0.175614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.724354 -0.046242 0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.70312 -0.043715 0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.649684 -0.00804971 0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.628657 -0.00328338 0.178701 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.630031 0.000378614 0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.642244 0.0152909 0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.648309 -0.0117117 0.191046 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.661896 0.00686255 0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.669336 -0.016478 0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.636097 -0.026624 0.175614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.657124 -0.0313903 0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.637471 -0.022962 0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.835815 -0.157543 -0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.899353 -0.119969 -0.117284 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.909872 -0.0977075 -0.115431 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.891613 -0.104052 -0.100068 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.886771 -0.0997803 -0.1239 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.917612 -0.113625 -0.132647 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.894512 -0.115698 -0.141116 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.907093 -0.135886 -0.1345 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.922453 -0.117896 -0.108814 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.911935 -0.140158 -0.110668 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.904194 -0.124241 -0.0934517 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.868703 -0.130205 -0.0506299 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.867758 -0.11253 -0.0334138 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.846864 -0.122142 -0.0423994 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.860854 -0.107566 -0.0565949 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.889596 -0.120593 -0.0416443 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.882692 -0.115629 -0.0648253 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.890541 -0.138267 -0.0588603 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.875606 -0.135168 -0.0274488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.876551 -0.152843 -0.0446649 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.854713 -0.14478 -0.0364345 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.836885 -0.0844101 -0.099389 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.826973 -0.0627848 -0.106005 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.81296 -0.083104 -0.105354 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.830202 -0.0805529 -0.122844 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.850898 -0.0640908 -0.10004 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.854126 -0.0818589 -0.116879 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.860809 -0.0857161 -0.093424 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.833656 -0.0666419 -0.0825505 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.843568 -0.0882673 -0.0759343 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.819643 -0.0869612 -0.0818993 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.866465 -0.147308 -0.177765 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.876203 -0.130609 -0.193128 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.879733 -0.128522 -0.16878 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.857385 -0.124356 -0.178416 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.862935 -0.149395 -0.202114 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.844117 -0.143141 -0.187402 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.853198 -0.166093 -0.186751 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.885283 -0.153561 -0.192477 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.875546 -0.170259 -0.177114 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.888813 -0.151474 -0.168128 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.803997 -0.111748 -0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.798532 -0.108311 -0.183703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.797989 -0.131037 -0.174066 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.819589 -0.119537 -0.17736 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.80454 -0.0890219 -0.169507 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.825597 -0.100248 -0.163165 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.810005 -0.0924597 -0.145675 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.78294 -0.100522 -0.166213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.788405 -0.10396 -0.142381 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.782397 -0.123249 -0.156576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.802927 -0.184881 -0.171592 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.785723 -0.180723 -0.188808 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.798991 -0.161937 -0.179823 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.782104 -0.173028 -0.165627 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.78966 -0.203667 -0.180578 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.786041 -0.195972 -0.157397 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.806864 -0.207825 -0.163362 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.806546 -0.192576 -0.194773 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.82375 -0.196734 -0.177557 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.819813 -0.17379 -0.185788 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.898283 -0.193102 -0.129006 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.920038 -0.201143 -0.120537 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.900209 -0.201384 -0.105825 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.910616 -0.17991 -0.112168 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.918112 -0.192861 -0.143718 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.90869 -0.171628 -0.135349 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.896357 -0.18482 -0.152187 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.907705 -0.214335 -0.137375 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.88595 -0.206294 -0.145845 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.887876 -0.214576 -0.122663 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.834745 -0.230676 -0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.824206 -0.252002 -0.116217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.810793 -0.231282 -0.116868 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.827952 -0.234336 -0.0993785 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.848158 -0.251396 -0.122182 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.851905 -0.23373 -0.105343 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.858698 -0.23007 -0.128798 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.830999 -0.248342 -0.139672 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.841538 -0.227016 -0.146288 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.817586 -0.227621 -0.140323 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.867633 -0.203337 -0.062352 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.868948 -0.209658 -0.0385197 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.84746 -0.202239 -0.0481565 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.865773 -0.186008 -0.0448623 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.889121 -0.210757 -0.0527151 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.885946 -0.187106 -0.0590577 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.887806 -0.204436 -0.0765474 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.870808 -0.226988 -0.0560094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.869493 -0.220667 -0.0798417 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.84932 -0.219569 -0.0656463 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.69376 0.0133465 -0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.668775 0.0631985 -0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.661946 0.0667914 -0.183325 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.65711 0.0452771 -0.172216 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.680354 0.0511945 -0.178077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.673611 0.0847128 -0.170979 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.692019 0.069116 -0.165731 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.680439 0.08112 -0.147525 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.650366 0.0787954 -0.165118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.657195 0.0752026 -0.141664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.64553 0.0572811 -0.154009 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.62221 0.0325183 -0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.604582 0.0446211 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.62221 0.0325183 -0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.627745 0.053173 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.604582 0.0446211 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.627745 0.053173 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.62221 0.0325183 -0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.599047 0.0239663 -0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.616676 0.0118635 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.616676 0.0118635 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.649684 -0.00804971 -0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.634953 -0.000226782 -0.184873 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.655218 0.012605 -0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.635947 0.0122343 -0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.629419 -0.0208815 -0.172528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.630413 -0.00842045 -0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.644149 -0.0287044 -0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.64869 -0.0205108 -0.18796 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.66342 -0.0283337 -0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.668955 -0.00767898 -0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.740325 0.0440268 -0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.746894 0.0650768 -0.170979 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.739183 0.0653796 -0.147525 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.723153 0.0607735 -0.165731 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.748035 0.0437239 -0.183325 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.724295 0.0394207 -0.178077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.741466 0.0226739 -0.172216 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.764065 0.04833 -0.165118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.757496 0.02728 -0.154009 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.756355 0.0486329 -0.141664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.721234 -0.0272215 -0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.732368 -0.0484665 -0.172528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.715699 -0.0478762 -0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.737738 -0.0371781 -0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.737902 -0.0278118 -0.184873 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.743272 -0.0165234 -0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.726768 -0.00656677 -0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.715864 -0.0385099 -0.18796 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.70473 -0.0172649 -0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.699195 -0.0379196 -0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.76531 -0.0058253 -0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.786629 -0.00415829 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.76531 -0.0058253 -0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.770845 0.0148294 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.786629 -0.00415829 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.770845 0.0148294 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.76531 -0.0058253 -0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.781094 -0.024813 -0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.759776 -0.02648 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.759776 -0.02648 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.712851 0.0845947 -0.104315 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.706291 0.107813 -0.109563 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.689001 0.0909853 -0.104315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.701434 0.0896851 -0.125608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.730141 0.101422 -0.109563 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.725284 0.0832945 -0.125608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.736701 0.0782041 -0.104315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.717709 0.102723 -0.0882695 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.724268 0.0795043 -0.0830215 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.700418 0.0858949 -0.0830215 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.737837 0.0347427 -0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.740802 0.0511556 -0.0373488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.718185 0.043171 -0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.730397 0.0580833 -0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.760455 0.0427273 -0.0496945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.750049 0.0496549 -0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.757489 0.0263144 -0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.748242 0.027815 -0.0342624 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.745277 0.0114021 -0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.725625 0.0198304 -0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.666287 0.0539145 -0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.650692 0.0721382 -0.0496945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.645053 0.0564414 -0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.663167 0.072935 -0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.671925 0.0696112 -0.0373488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.6844 0.070408 -0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.68752 0.0513875 -0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.653812 0.0531177 -0.0342624 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.669407 0.034894 -0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.648173 0.0374209 -0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.643951 -0.172546 -0.222222 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.674191 -0.142305 -0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.672341 -0.123995 -0.299164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.666199 -0.120057 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.651943 -0.134313 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.680334 -0.146243 -0.306292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.659936 -0.156561 -0.296959 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.682184 -0.164554 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.69459 -0.131987 -0.292037 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.696439 -0.150298 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.688447 -0.12805 -0.268448 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.715501 -0.153374 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.731779 -0.136231 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.712305 -0.141449 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.70911 -0.129524 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.734974 -0.148156 -0.236478 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.712305 -0.141449 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.718696 -0.165299 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.738169 -0.160081 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.721891 -0.177224 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.718696 -0.165299 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.663122 -0.100996 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.656415 -0.0783272 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.639272 -0.0946054 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.651197 -0.0978007 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.680265 -0.0847178 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.675047 -0.104191 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.686972 -0.107387 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.66834 -0.0815225 -0.207967 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.675047 -0.104191 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.651197 -0.0978007 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.602641 -0.161477 -0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.60298 -0.154189 -0.306292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.622115 -0.166695 -0.296959 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.617912 -0.143431 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.583506 -0.148971 -0.292037 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.598439 -0.138214 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.583168 -0.156259 -0.268448 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.587708 -0.172234 -0.299164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.58737 -0.179523 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.606843 -0.184741 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.591572 -0.120168 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.577317 -0.105912 -0.236478 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.582843 -0.128897 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.600302 -0.111438 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.586046 -0.0971825 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.609032 -0.102708 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.600302 -0.111438 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.568587 -0.114642 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.582843 -0.128897 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.574113 -0.137627 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.5724 -0.191718 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.549732 -0.185011 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.569205 -0.179793 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.56601 -0.167868 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.552927 -0.196936 -0.207967 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.569205 -0.179793 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.575596 -0.203643 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.556122 -0.208861 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.578791 -0.215568 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.575596 -0.203643 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.655019 -0.213855 -0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.653756 -0.23668 -0.292037 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.636974 -0.229127 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.660237 -0.233329 -0.268448 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.671802 -0.221409 -0.299164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.678283 -0.218058 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.673065 -0.198584 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.648538 -0.217207 -0.306292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.649801 -0.194382 -0.296959 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.631756 -0.209653 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.624779 -0.244096 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.607636 -0.260374 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.600929 -0.237705 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.612854 -0.240901 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.631486 -0.266765 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.636704 -0.247291 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.648629 -0.250487 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.619561 -0.26357 -0.236478 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.636704 -0.247291 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.612854 -0.240901 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.696329 -0.224924 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.710584 -0.23918 -0.207967 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.687599 -0.233654 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.705059 -0.216195 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.719314 -0.23045 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.713788 -0.207465 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.705059 -0.216195 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.701855 -0.24791 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.687599 -0.233654 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.678869 -0.242384 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.786005 -0.343435 8.51251e-17 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.82165 -0.392454 0.0425863 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.824791 -0.400556 0.065698 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.802599 -0.392663 0.058292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.821021 -0.376528 0.0614442 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.843843 -0.400347 0.0499923 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.840073 -0.376319 0.0457385 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.840701 -0.392245 0.0268805 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.82542 -0.416482 0.0468401 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.822279 -0.40838 0.0237283 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.803228 -0.408589 0.0394341 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.753118 -0.370774 0.0604812 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.734271 -0.367981 0.076187 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.731279 -0.362711 0.0522508 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.745269 -0.348136 0.0664462 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.756109 -0.376044 0.0844174 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.767107 -0.356199 0.0746767 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.774956 -0.378837 0.0687117 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.74212 -0.390619 0.070222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.760966 -0.393412 0.0545162 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.739128 -0.385349 0.0462858 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.80984 -0.323622 0.0672777 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.80634 -0.308073 0.0861356 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.786996 -0.316395 0.0732426 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.802721 -0.300378 0.0629546 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.829184 -0.315299 0.0801706 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.825565 -0.307605 0.0569896 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.832685 -0.330849 0.0613127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.813459 -0.331317 0.0904587 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.81696 -0.346866 0.0716007 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.794116 -0.339639 0.0775657 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.854538 -0.365116 -0.0178949 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.878086 -0.365674 -0.0104889 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.859887 -0.367962 0.00604126 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.863875 -0.346241 -0.00500196 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.872736 -0.362827 -0.0344251 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.858526 -0.343394 -0.0289382 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.849188 -0.362269 -0.0418311 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.868748 -0.384548 -0.0233819 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.8452 -0.38399 -0.0307879 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.85055 -0.386837 -0.00685171 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.842728 -0.296284 0.00679642 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.848999 -0.272611 0.00994863 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.828835 -0.281616 0.0209919 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.829121 -0.278432 -0.00349164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.862893 -0.287278 -0.0042468 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.843015 -0.293099 -0.0176871 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.856621 -0.310951 -0.00739901 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.862606 -0.290462 0.0202367 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.856335 -0.314135 0.0170845 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.842441 -0.299468 0.0312799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.818893 -0.316097 -0.0604812 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.819591 -0.297057 -0.076187 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.814956 -0.293153 -0.0522508 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.79807 -0.304244 -0.0664462 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.823527 -0.320001 -0.0844174 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.802007 -0.327188 -0.0746767 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.822829 -0.339041 -0.0687117 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.840413 -0.30891 -0.070222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.839716 -0.32795 -0.0545162 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.835779 -0.305006 -0.0462858 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.797815 -0.412267 -0.0246914 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.793573 -0.436217 -0.0204376 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.776294 -0.419454 -0.0149506 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.796968 -0.420728 -0.00151032 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.815094 -0.42903 -0.0301783 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.818489 -0.413542 -0.0112511 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.819335 -0.405081 -0.0344321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.79442 -0.427756 -0.0436186 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.798662 -0.403807 -0.0478724 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.777141 -0.410993 -0.0381316 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.76217 -0.363249 -0.0672777 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.747522 -0.356966 -0.0861356 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.759239 -0.339469 -0.0732426 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.740618 -0.352002 -0.0629546 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.750453 -0.380746 -0.0801706 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.743549 -0.375782 -0.0569896 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.765101 -0.387029 -0.0613127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.769074 -0.368213 -0.0904587 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.783722 -0.374496 -0.0716007 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.780791 -0.350716 -0.0775657 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.729282 -0.390587 -0.00679642 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.704862 -0.392427 -0.00994863 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.717401 -0.374248 -0.0209919 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.714218 -0.373948 0.00349164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.716744 -0.408767 0.0042468 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.726099 -0.390287 0.0176871 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.741164 -0.406927 0.00739901 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.719927 -0.409067 -0.0202367 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.744347 -0.407227 -0.0170845 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.732465 -0.390887 -0.0312799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.594141 -0.358439 -0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.542042 -0.409774 -0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.517869 -0.413579 -0.126127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.528508 -0.393219 -0.135179 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.525596 -0.395831 -0.110799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.531404 -0.430134 -0.113782 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.539131 -0.412386 -0.0984536 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.555577 -0.426328 -0.110488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.534315 -0.427522 -0.138161 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.558488 -0.423716 -0.134867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.544953 -0.407161 -0.147213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.522591 -0.339267 -0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.504962 -0.327164 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.522591 -0.339267 -0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.528125 -0.318612 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.504962 -0.327164 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.528125 -0.318612 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.522591 -0.339267 -0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.499428 -0.347819 -0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.517056 -0.359921 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.517056 -0.359921 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.550064 -0.379835 -0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.529037 -0.375068 -0.0435217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.530412 -0.371406 -0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.542624 -0.356494 -0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.548689 -0.383497 -0.031176 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.562276 -0.364922 -0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.569716 -0.388263 -0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.536477 -0.398409 -0.0466081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.557504 -0.403175 -0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.537852 -0.394747 -0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.613592 -0.428945 -0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.612625 -0.451897 -0.113782 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.593593 -0.436515 -0.110488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.614807 -0.432663 -0.0984536 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.632624 -0.444328 -0.126127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.634806 -0.425094 -0.110799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.633591 -0.421376 -0.135179 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.61141 -0.448179 -0.138161 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.612377 -0.425227 -0.147213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.592379 -0.432797 -0.134867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.621614 -0.399007 -0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.620974 -0.402865 -0.031176 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.600381 -0.39648 -0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.618494 -0.379986 -0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.642207 -0.405392 -0.0435217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.639728 -0.382513 -0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.642848 -0.401533 -0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.624094 -0.421886 -0.0466081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.624734 -0.418027 -0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.603501 -0.4155 -0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.665691 -0.37761 -0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.687009 -0.375943 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.665691 -0.37761 -0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.671225 -0.356956 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.687009 -0.375943 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.671225 -0.356956 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.665691 -0.37761 -0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.681475 -0.396598 -0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.660156 -0.398265 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.660156 -0.398265 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.586119 -0.388377 -0.178389 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.570335 -0.399584 -0.193717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.562269 -0.381987 -0.178389 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.569167 -0.403942 -0.169441 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.594185 -0.405974 -0.193717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.593017 -0.410332 -0.169441 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.609969 -0.394768 -0.178389 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.587286 -0.384019 -0.202664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.60307 -0.372813 -0.187336 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.57922 -0.366422 -0.187336 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.638217 -0.337042 -0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.64748 -0.317573 -0.178701 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.643752 -0.316388 -0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.624481 -0.316758 -0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.641945 -0.338228 -0.191046 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.618946 -0.337413 -0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.632683 -0.357697 -0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.661216 -0.337857 -0.175614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.651954 -0.357326 -0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.657489 -0.336672 -0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.566667 -0.317871 -0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.562847 -0.317033 -0.191046 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.561133 -0.338525 -0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.583171 -0.327827 -0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.568381 -0.296378 -0.178701 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.588706 -0.307172 -0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.572202 -0.297216 -0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.546343 -0.307077 -0.175614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.550163 -0.307914 -0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.544629 -0.328569 -0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.594141 -0.358439 0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.547576 -0.389119 0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.525642 -0.386849 0.170979 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.528407 -0.379645 0.147525 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.538964 -0.366733 0.165731 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.544812 -0.396323 0.183325 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.558134 -0.376207 0.178077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.566746 -0.398593 0.172216 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.534255 -0.409235 0.165118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.556189 -0.411505 0.154009 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.537019 -0.402031 0.141664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.522591 -0.339267 0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.504962 -0.327164 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.522591 -0.339267 0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.528125 -0.318612 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.504962 -0.327164 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.528125 -0.318612 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.522591 -0.339267 0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.499428 -0.347819 0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.517056 -0.359921 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.517056 -0.359921 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.566667 -0.317871 0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.551072 -0.299647 0.172528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.545434 -0.315344 0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.563547 -0.29885 0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.572306 -0.302174 0.184873 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.584781 -0.301377 0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.587901 -0.320398 0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.554192 -0.318667 0.18796 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.569787 -0.336891 0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.548554 -0.334364 0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.619127 -0.408291 0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.617918 -0.415912 0.183325 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.597788 -0.406911 0.172216 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.616439 -0.39183 0.178077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.639257 -0.417292 0.170979 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.637778 -0.39321 0.165731 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.640465 -0.409671 0.147525 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.620605 -0.432372 0.165118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.621814 -0.424751 0.141664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.600475 -0.423371 0.154009 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.638217 -0.337042 0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.641183 -0.320629 0.184873 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.618565 -0.328614 0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.630777 -0.313702 0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.660835 -0.329058 0.172528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.65043 -0.32213 0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.65787 -0.345471 0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.648623 -0.34397 0.18796 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.645657 -0.360383 0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.626005 -0.351955 0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.665691 -0.37761 0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.687009 -0.375943 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.665691 -0.37761 0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.671225 -0.356956 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.687009 -0.375943 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.671225 -0.356956 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.665691 -0.37761 0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.681475 -0.396598 0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.660156 -0.398265 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.660156 -0.398265 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.57505 -0.429687 0.104315 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.55776 -0.446515 0.109563 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.5512 -0.423296 0.104315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.562617 -0.428387 0.125608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.58161 -0.452905 0.109563 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.586467 -0.434777 0.125608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.5989 -0.436077 0.104315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.570193 -0.447815 0.0882695 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.587483 -0.430987 0.0830215 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.563633 -0.424596 0.0830215 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.621614 -0.399007 0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.632748 -0.420252 0.0496945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.61608 -0.419661 0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.638118 -0.408963 0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.638282 -0.399597 0.0373488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.643653 -0.388308 0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.627149 -0.378352 0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.616244 -0.410295 0.0342624 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.60511 -0.38905 0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.599576 -0.409705 0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.550064 -0.379835 0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.535334 -0.372012 0.0373488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.555599 -0.35918 0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.536327 -0.359551 0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.529799 -0.392667 0.0496945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.530793 -0.380205 0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.54453 -0.400489 0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.549071 -0.392296 0.0342624 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.563801 -0.400119 0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.569335 -0.379464 0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0996195 -0.371785 0.544331 RAD 0.166667 
-   txt002 
- SPHERE CENTER 0.220501 -0.393621 0.729516 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.279642 -0.368601 0.766439 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.299716 -0.354293 0.765035 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.292196 -0.366989 0.745238 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.279022 -0.347717 0.753281 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.287162 -0.355904 0.786236 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.266468 -0.349329 0.774481 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.267088 -0.370213 0.787639 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.300337 -0.375177 0.778193 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.280263 -0.389485 0.779597 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.292817 -0.387873 0.758396 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.281062 -0.372464 0.692479 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.289441 -0.362978 0.671279 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.270044 -0.378255 0.671155 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.267771 -0.35549 0.680442 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.30046 -0.357187 0.692603 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.278789 -0.349699 0.701767 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.29208 -0.366673 0.713804 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.302733 -0.379952 0.683315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.294353 -0.389438 0.704516 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.283335 -0.395229 0.683192 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.238665 -0.321889 0.726118 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.250544 -0.304702 0.71296 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.259421 -0.327715 0.714081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.238717 -0.32307 0.701455 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.229788 -0.298875 0.724997 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.21796 -0.317244 0.713492 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.217908 -0.316063 0.738155 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.250492 -0.30352 0.737623 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.238612 -0.320707 0.750781 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.259369 -0.326533 0.738744 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.219082 -0.389758 0.803476 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.228779 -0.378635 0.823273 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.24293 -0.383364 0.8036 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.225483 -0.365937 0.802355 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.20493 -0.385029 0.823149 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.201634 -0.372331 0.802231 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.195233 -0.396152 0.803352 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.222377 -0.402455 0.824394 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.21268 -0.413578 0.804597 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.236529 -0.407185 0.804721 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.178104 -0.343046 0.763155 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.177083 -0.319723 0.771198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.198298 -0.332294 0.772443 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.189464 -0.325124 0.750529 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.156889 -0.330475 0.76191 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.16927 -0.335876 0.741241 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.157909 -0.353797 0.753867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.165722 -0.337645 0.783824 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.166743 -0.360967 0.775781 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.186938 -0.350216 0.785069 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.15994 -0.414778 0.766553 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.147477 -0.412573 0.787754 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.172167 -0.412448 0.787878 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.15977 -0.39322 0.77859 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.13525 -0.414903 0.766429 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.147543 -0.39555 0.757266 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.147713 -0.417108 0.745229 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.147647 -0.434131 0.775717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.16011 -0.436336 0.754517 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.172338 -0.434006 0.775841 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.261479 -0.440333 0.769837 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.282991 -0.443285 0.781591 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.282046 -0.4302 0.760673 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.271991 -0.421181 0.781342 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.262424 -0.453417 0.790755 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.251423 -0.431313 0.790506 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.240911 -0.450466 0.779001 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.27248 -0.462437 0.770086 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.250967 -0.459485 0.758332 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.271534 -0.449353 0.749168 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.202338 -0.465353 0.732914 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.204606 -0.486123 0.746073 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.223366 -0.470107 0.744951 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.202946 -0.464339 0.757577 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.183578 -0.481368 0.734036 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.181918 -0.459584 0.745541 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.18131 -0.460599 0.720878 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.203998 -0.487137 0.72141 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.201729 -0.466367 0.708251 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.222757 -0.471122 0.720288 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.262898 -0.444196 0.695877 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.285685 -0.449273 0.687835 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.27701 -0.426189 0.68659 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.282528 -0.436139 0.708504 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.271573 -0.46728 0.697123 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.268416 -0.454146 0.717791 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.248787 -0.462204 0.705165 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.266055 -0.45733 0.675209 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.243269 -0.452254 0.683251 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.257381 -0.434246 0.673964 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.31427 -0.31427 0.544331 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.367156 -0.277961 0.507294 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.374298 -0.269898 0.485076 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.362218 -0.291334 0.487134 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.350338 -0.270045 0.491041 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.379235 -0.256525 0.505236 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.355276 -0.256671 0.511201 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.372093 -0.264588 0.527454 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.391115 -0.277815 0.501329 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.383973 -0.285878 0.523547 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.379036 -0.299251 0.503387 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.31427 -0.31427 0.470257 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.304189 -0.304189 0.450097 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.29042 -0.307879 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.307879 -0.29042 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.328039 -0.31058 0.450097 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.331729 -0.29681 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.33812 -0.32066 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.31058 -0.328039 0.450097 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.32066 -0.33812 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.29681 -0.331729 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.297666 -0.252306 0.507294 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.305995 -0.235688 0.491041 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.321516 -0.245915 0.507294 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.312359 -0.259438 0.488775 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.282145 -0.242079 0.491041 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.288509 -0.265828 0.488775 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.273816 -0.258696 0.507294 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.291303 -0.228556 0.509559 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.282974 -0.245173 0.525813 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.306824 -0.238783 0.525813 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.367156 -0.277961 0.581368 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.385852 -0.261966 0.57931 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.38141 -0.278159 0.561208 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.36581 -0.259422 0.565115 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.371598 -0.261768 0.599471 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.351556 -0.259225 0.585275 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.352901 -0.277764 0.601529 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.387198 -0.280504 0.595564 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.368501 -0.2965 0.597621 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.382755 -0.296698 0.577461 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.297666 -0.252306 0.581368 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.30415 -0.228803 0.585275 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.321516 -0.245915 0.581368 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.306824 -0.238783 0.56285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.2803 -0.235194 0.585275 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.282974 -0.245173 0.56285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.273816 -0.258696 0.581368 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.294992 -0.242326 0.603794 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.288509 -0.265828 0.599887 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.312359 -0.259438 0.599887 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.31427 -0.31427 0.618405 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.32435 -0.304189 0.638566 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.33812 -0.307879 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.32066 -0.29042 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.3005 -0.31058 0.638566 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.29681 -0.29681 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.29042 -0.32066 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.317959 -0.328039 0.638566 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.307879 -0.33812 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.331729 -0.331729 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.383759 -0.339925 0.544331 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.407156 -0.334762 0.538366 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.388696 -0.326552 0.524171 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.392275 -0.31686 0.546597 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.402218 -0.348135 0.558526 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.387337 -0.330233 0.566757 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.378821 -0.353299 0.564491 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.39864 -0.357827 0.536101 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.375243 -0.362991 0.542066 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.380181 -0.349618 0.521905 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.330873 -0.376234 0.581368 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.346394 -0.386461 0.597621 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.354723 -0.369843 0.581368 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.340031 -0.362711 0.599887 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.322544 -0.392851 0.597621 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.316181 -0.369102 0.599887 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.307023 -0.382624 0.581368 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.337237 -0.399983 0.579103 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.321715 -0.389757 0.56285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.345565 -0.383366 0.56285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.330873 -0.376234 0.507294 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.348239 -0.393346 0.503387 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.354723 -0.369843 0.507294 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.345565 -0.383366 0.525813 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.324389 -0.399736 0.503387 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.321715 -0.389757 0.525813 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.307023 -0.382624 0.507294 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.333547 -0.386213 0.484868 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.316181 -0.369102 0.488775 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.340031 -0.362711 0.488775 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.166275 -0.191247 0.655442 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.20793 -0.130089 0.652044 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.221102 -0.115471 0.637128 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.220766 -0.13987 0.633356 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.200597 -0.126388 0.628759 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.208266 -0.10569 0.655816 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.187762 -0.116607 0.647447 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.195095 -0.120308 0.670732 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.228435 -0.119172 0.660413 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.215264 -0.13379 0.675329 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.228099 -0.143571 0.656641 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.230419 -0.192135 0.618405 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.243049 -0.18209 0.599717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.218634 -0.185251 0.597829 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.227721 -0.168159 0.613157 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.254834 -0.188974 0.620293 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.239506 -0.175043 0.633733 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.242204 -0.199019 0.638981 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.245747 -0.206066 0.604965 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.233117 -0.216111 0.623653 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.221332 -0.209227 0.603077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.172673 -0.154295 0.591563 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.180792 -0.15554 0.568278 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.19323 -0.166926 0.586315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.171251 -0.17557 0.579113 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.160236 -0.142909 0.573526 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.150694 -0.162939 0.584361 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.152117 -0.141663 0.596811 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.182215 -0.134265 0.580727 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.174096 -0.133019 0.604012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.194652 -0.145651 0.598764 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.143787 -0.129201 0.689081 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.14887 -0.105335 0.692853 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.167242 -0.121723 0.690969 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.153943 -0.115741 0.671044 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.125414 -0.112813 0.690965 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.130487 -0.123219 0.669156 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.120331 -0.136679 0.687193 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.138714 -0.118795 0.71089 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.13363 -0.142661 0.707118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.157086 -0.135183 0.709006 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.108529 -0.153407 0.6286 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0995811 -0.130858 0.624003 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.113639 -0.134736 0.643928 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.123725 -0.135326 0.621398 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0944715 -0.149528 0.608675 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.118615 -0.153997 0.60607 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.10342 -0.172078 0.613272 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0843858 -0.148938 0.631205 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0933338 -0.171487 0.635801 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0984435 -0.152816 0.65113 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.102131 -0.190359 0.692479 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0897843 -0.179968 0.711167 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.114103 -0.183804 0.713055 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.105492 -0.166467 0.697727 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0778128 -0.186523 0.690591 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0935207 -0.173022 0.677151 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0901597 -0.196914 0.671903 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0864233 -0.20386 0.705919 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0987702 -0.214251 0.687231 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.110742 -0.207696 0.707807 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.201532 -0.167041 0.715923 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.219088 -0.151829 0.724292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.221861 -0.163068 0.702483 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.205084 -0.14514 0.705088 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.19876 -0.155801 0.737733 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.184756 -0.149113 0.718528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.181204 -0.171014 0.729364 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.215537 -0.173729 0.735128 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.197981 -0.188942 0.726759 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.218309 -0.184969 0.713318 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.159877 -0.228199 0.719322 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.167942 -0.229756 0.742607 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.183484 -0.223214 0.72457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.16569 -0.207683 0.731771 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.144336 -0.234741 0.737359 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.142084 -0.212668 0.726523 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.13627 -0.233184 0.714074 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.162129 -0.250271 0.730157 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.154064 -0.248714 0.706872 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.177671 -0.243729 0.71212 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.224021 -0.229087 0.682285 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.248268 -0.22829 0.686881 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.2391 -0.216949 0.666956 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.234532 -0.207937 0.689486 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.233189 -0.240428 0.702209 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.219453 -0.220075 0.704814 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.208942 -0.241225 0.697613 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.237756 -0.249439 0.67968 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.213509 -0.250236 0.675083 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.228589 -0.238098 0.659755 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0058509 -0.451136 0.729516 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.0051487 -0.447081 0.803476 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.01504 -0.435909 0.823149 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0289993 -0.440694 0.803352 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0115452 -0.423265 0.802231 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00881065 -0.442297 0.823273 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0123054 -0.429652 0.802355 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0187019 -0.453468 0.8036 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00864346 -0.459725 0.824394 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0012478 -0.470897 0.804721 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0226028 -0.46451 0.804597 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0688765 -0.439178 0.766553 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0903221 -0.426942 0.766429 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0806307 -0.435083 0.745229 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0699989 -0.416328 0.757266 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.078568 -0.431037 0.787754 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0582447 -0.420423 0.77859 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0571224 -0.443274 0.787878 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0891998 -0.449792 0.775717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0677542 -0.462029 0.775841 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0795084 -0.457933 0.754517 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0172804 -0.386138 0.763155 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0293677 -0.364644 0.76191 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0401449 -0.385352 0.753867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0213457 -0.375512 0.741241 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0065032 -0.36543 0.771198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00151881 -0.376298 0.750529 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00558411 -0.386924 0.772443 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0253024 -0.37527 0.783824 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0132151 -0.396764 0.785069 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0360796 -0.395978 0.775781 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0578769 -0.459039 0.766439 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0707378 -0.451803 0.786236 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0461991 -0.454158 0.787639 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0561039 -0.435761 0.774481 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0824157 -0.456685 0.765035 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0677817 -0.440643 0.753281 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0695548 -0.46392 0.745238 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0725109 -0.475081 0.778193 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.05965 -0.482316 0.758396 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0479721 -0.477435 0.779597 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0457452 -0.398096 0.726118 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0495643 -0.373728 0.724997 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0306825 -0.382672 0.738155 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.030137 -0.383722 0.713492 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.064627 -0.389151 0.71296 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0451997 -0.399146 0.701455 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.060808 -0.41352 0.714081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0651725 -0.388102 0.737623 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0613535 -0.41247 0.738744 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0462908 -0.397047 0.750781 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0571747 -0.463094 0.692479 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.081612 -0.459563 0.692603 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0696122 -0.463589 0.713804 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0665888 -0.442243 0.701767 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0691745 -0.459069 0.671279 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0541513 -0.441749 0.680442 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0447373 -0.4626 0.671155 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0721979 -0.480415 0.683315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0477607 -0.483946 0.683192 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0601982 -0.48444 0.704516 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00628079 -0.512079 0.769837 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.000557006 -0.523883 0.790755 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0165974 -0.51057 0.779001 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00208214 -0.49924 0.790506 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0234352 -0.525392 0.781591 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0249603 -0.500749 0.781342 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.029159 -0.513588 0.760673 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00475566 -0.536722 0.770086 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0104794 -0.524918 0.749168 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0123987 -0.523409 0.758332 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00557859 -0.516134 0.695877 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.00154892 -0.540463 0.697123 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0156462 -0.524673 0.705165 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00538221 -0.52751 0.717791 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0227737 -0.531924 0.687835 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.026607 -0.518971 0.708504 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0268034 -0.507596 0.68659 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00174531 -0.529087 0.675209 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00577498 -0.504759 0.673964 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0154498 -0.513298 0.683251 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0574471 -0.504176 0.732914 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0817008 -0.508666 0.734036 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0732807 -0.489545 0.720878 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0722467 -0.488971 0.745541 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0658672 -0.523298 0.746073 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0564131 -0.503602 0.757577 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0416134 -0.518808 0.744951 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0669012 -0.523872 0.72141 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0426474 -0.519382 0.720288 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.058481 -0.504751 0.708251 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0483751 -0.248762 0.655442 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.0599222 -0.183785 0.689081 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0522053 -0.160406 0.690965 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0358698 -0.178533 0.687193 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0513956 -0.171954 0.669156 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0762577 -0.165658 0.692853 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.075448 -0.177206 0.671044 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0839747 -0.189036 0.690969 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0607319 -0.172236 0.71089 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0684488 -0.195615 0.709006 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0443964 -0.190363 0.707118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00673113 -0.215921 0.692479 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0258737 -0.20044 0.690591 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0203763 -0.215612 0.671903 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00551963 -0.196602 0.677151 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0122285 -0.200749 0.711167 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00812553 -0.196911 0.697727 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00691403 -0.21623 0.713055 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0270852 -0.21976 0.705919 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00794264 -0.235241 0.707807 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0215878 -0.234932 0.687231 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0172857 -0.187119 0.6286 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.00705049 -0.176731 0.608675 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00352517 -0.200733 0.613272 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.025725 -0.192673 0.60607 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.020811 -0.163117 0.624003 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0394855 -0.179058 0.621398 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0310463 -0.173504 0.643928 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00138875 -0.171177 0.631205 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00884647 -0.181564 0.65113 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00491406 -0.195179 0.635801 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.115028 -0.216626 0.652044 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.127519 -0.195663 0.655816 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.108803 -0.201738 0.670732 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.104303 -0.194866 0.647447 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.133744 -0.210551 0.637128 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.110528 -0.209754 0.628759 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.121254 -0.231514 0.633356 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.138245 -0.217423 0.660413 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.125754 -0.238386 0.656641 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.119529 -0.223497 0.675329 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0723919 -0.21996 0.591563 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0673141 -0.20388 0.573526 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0609052 -0.198742 0.596811 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0490355 -0.216456 0.584361 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0788008 -0.225098 0.568278 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0605222 -0.237674 0.579113 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0838786 -0.241177 0.586315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0906706 -0.207384 0.580727 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0957484 -0.223463 0.598764 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0842617 -0.202246 0.604012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.103481 -0.281603 0.618405 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.126206 -0.291073 0.620293 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.110246 -0.293457 0.638981 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.119897 -0.271345 0.633733 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.119442 -0.279219 0.599717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.113132 -0.25949 0.613157 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0967168 -0.269749 0.597829 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.10979 -0.301332 0.604965 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0870656 -0.291862 0.603077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0938302 -0.303716 0.623653 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0910116 -0.245428 0.715923 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0942304 -0.234308 0.737733 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0714204 -0.238704 0.729364 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0854464 -0.221514 0.718528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.113822 -0.241032 0.724292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.105038 -0.228237 0.705088 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.110603 -0.252152 0.702483 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0997955 -0.258223 0.735128 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0965768 -0.269343 0.713318 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0769856 -0.262619 0.726759 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0794645 -0.310405 0.682285 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0817333 -0.324811 0.702209 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0603366 -0.313378 0.697613 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0800146 -0.300317 0.704814 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.100861 -0.321838 0.686881 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0991425 -0.297345 0.689486 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0985923 -0.307433 0.666956 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0811832 -0.334899 0.67968 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0789143 -0.320493 0.659755 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0597864 -0.323466 0.675083 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0243582 -0.277564 0.719322 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0076281 -0.275459 0.737359 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00142185 -0.270078 0.714074 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0167139 -0.255218 0.726523 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0305645 -0.282946 0.742607 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0396503 -0.262704 0.731771 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0472946 -0.285051 0.72457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0152725 -0.297806 0.730157 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0320026 -0.299911 0.71212 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00906621 -0.292425 0.706872 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.115031 -0.4293 0.544331 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.178985 -0.424299 0.581368 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.190929 -0.412497 0.599471 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.16674 -0.417001 0.601529 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.174844 -0.400273 0.585275 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.203175 -0.419795 0.57931 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.18709 -0.407571 0.565115 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.191231 -0.431597 0.561208 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.195071 -0.436523 0.595564 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.183127 -0.448325 0.577461 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.170881 -0.441027 0.597621 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.115031 -0.4293 0.618405 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.10495 -0.41922 0.638566 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0911807 -0.42291 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.10864 -0.40545 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.128801 -0.425611 0.638566 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.13249 -0.411841 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.138881 -0.435691 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.111341 -0.44307 0.638566 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.121421 -0.45315 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0975713 -0.44676 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.131634 -0.367336 0.581368 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.12515 -0.343834 0.585275 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.107784 -0.360946 0.581368 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.122476 -0.353814 0.56285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.149 -0.350225 0.585275 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.146326 -0.360204 0.56285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.155484 -0.373727 0.581368 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.134308 -0.357357 0.603794 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.140792 -0.380859 0.599887 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.116942 -0.374468 0.599887 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.178985 -0.424299 0.507294 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.200165 -0.411775 0.505236 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.189948 -0.415187 0.527454 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.179342 -0.399922 0.511201 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.189202 -0.420888 0.485076 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.168379 -0.409035 0.491041 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.168023 -0.433412 0.487134 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.199808 -0.436152 0.501329 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.178629 -0.448677 0.503387 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.189591 -0.439564 0.523547 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.131634 -0.367336 0.507294 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.123305 -0.350719 0.491041 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.107784 -0.360946 0.507294 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.116942 -0.374468 0.488775 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.147155 -0.357109 0.491041 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.140792 -0.380859 0.488775 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.155484 -0.373727 0.507294 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.137998 -0.343587 0.509559 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.146326 -0.360204 0.525813 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.122476 -0.353814 0.525813 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.115031 -0.4293 0.470257 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.125111 -0.41922 0.450097 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.138881 -0.42291 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.121421 -0.40545 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.101261 -0.425611 0.450097 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0975713 -0.411841 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0911807 -0.435691 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.11872 -0.44307 0.450097 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.10864 -0.45315 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.13249 -0.44676 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.162382 -0.486264 0.544331 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.174264 -0.502603 0.558526 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.15142 -0.495376 0.564491 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.170327 -0.479659 0.566757 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.185226 -0.49349 0.538366 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.18129 -0.470546 0.546597 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.173345 -0.477151 0.524171 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.166319 -0.509207 0.536101 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.154437 -0.492868 0.521905 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.143475 -0.501981 0.542066 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0984274 -0.491265 0.507294 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0810612 -0.508376 0.503387 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0745774 -0.484874 0.507294 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0837352 -0.498397 0.525813 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.104911 -0.514767 0.503387 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.107585 -0.504787 0.525813 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.122277 -0.497655 0.507294 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0957534 -0.501244 0.484868 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.11312 -0.484132 0.488775 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0892696 -0.477742 0.488775 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0984274 -0.491265 0.581368 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.082906 -0.501491 0.597621 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0745774 -0.484874 0.581368 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0892696 -0.477742 0.599887 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.106756 -0.507882 0.597621 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.11312 -0.484132 0.599887 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.122277 -0.497655 0.581368 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0920638 -0.515014 0.579103 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.107585 -0.504787 0.56285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0837352 -0.498397 0.56285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.153845 -0.574159 0.618405 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.202534 -0.612768 0.658726 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.225282 -0.612732 0.668328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.22113 -0.60221 0.64638 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.212428 -0.591695 0.666956 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.206686 -0.62329 0.680674 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.193832 -0.602253 0.679302 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.183939 -0.623325 0.671072 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.215388 -0.633805 0.660098 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.192641 -0.63384 0.650495 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.211236 -0.623283 0.63815 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.225396 -0.554987 0.618405 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.243024 -0.542885 0.606059 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.225396 -0.554987 0.593714 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.219861 -0.534333 0.606059 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.243024 -0.542885 0.630751 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.219861 -0.534333 0.630751 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.225396 -0.554987 0.643096 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.248559 -0.563539 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.23093 -0.575642 0.630751 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.23093 -0.575642 0.606059 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.184086 -0.543919 0.678886 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.200547 -0.527458 0.687117 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.205161 -0.540303 0.666541 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.187702 -0.522843 0.666541 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.179472 -0.531074 0.699462 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.166627 -0.526459 0.678886 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.163011 -0.547535 0.691232 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.196931 -0.548533 0.699462 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.18047 -0.564994 0.691232 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.201546 -0.561378 0.678886 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.130984 -0.631939 0.658726 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.132649 -0.643128 0.680674 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.152367 -0.631785 0.671072 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.133263 -0.618482 0.679302 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.111266 -0.643283 0.668328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.11188 -0.618637 0.666956 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.109601 -0.632094 0.64638 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.130371 -0.656585 0.660098 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.128706 -0.645397 0.63815 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.150088 -0.645242 0.650495 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.112536 -0.56309 0.678886 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.11011 -0.549659 0.699462 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.132596 -0.555684 0.691232 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.118927 -0.53924 0.678886 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.09005 -0.557065 0.687117 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0988668 -0.546646 0.666541 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0924762 -0.570497 0.666541 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.103719 -0.573509 0.699462 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.106145 -0.58694 0.678886 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.126205 -0.579534 0.691232 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0822954 -0.593331 0.618405 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0609772 -0.591664 0.630751 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0822954 -0.593331 0.643096 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.076761 -0.572676 0.630751 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0609772 -0.591664 0.606059 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.076761 -0.572676 0.606059 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0822954 -0.593331 0.593714 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0665116 -0.612319 0.618405 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0878298 -0.613986 0.606059 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0878298 -0.613986 0.630751 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.172294 -0.643008 0.598245 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.189742 -0.660425 0.599616 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.196144 -0.636618 0.598245 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.185725 -0.645434 0.618821 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.165892 -0.666816 0.599616 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.161875 -0.651825 0.618821 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.148444 -0.649399 0.598245 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.17631 -0.657999 0.57904 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.158862 -0.640582 0.577669 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.182712 -0.634191 0.577669 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.123605 -0.6044 0.557924 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.107144 -0.620861 0.549693 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.119989 -0.625475 0.57027 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.102529 -0.608016 0.57027 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.11076 -0.599785 0.537348 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.106145 -0.58694 0.557924 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.127221 -0.583324 0.545578 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.128219 -0.617245 0.537348 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.14468 -0.600784 0.545578 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.141064 -0.621859 0.557924 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.195155 -0.585228 0.557924 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.203972 -0.574809 0.537348 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.181486 -0.568784 0.545578 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.201546 -0.561378 0.557924 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.217641 -0.591253 0.549693 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.215215 -0.577822 0.57027 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.208824 -0.601672 0.57027 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.197581 -0.598659 0.537348 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.188764 -0.609078 0.557924 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.175095 -0.592634 0.545578 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0329639 -0.552323 0.43322 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.0248832 -0.625877 0.436618 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0316054 -0.646362 0.448652 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0478 -0.627981 0.445566 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0287309 -0.625173 0.460998 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00868865 -0.644258 0.439705 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00581415 -0.623069 0.45205 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00196644 -0.623773 0.427671 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0277577 -0.647066 0.424272 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0210355 -0.62658 0.412239 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0439523 -0.628685 0.421186 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0822954 -0.593331 0.470257 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.105299 -0.593994 0.479204 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.100664 -0.582384 0.457911 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0926585 -0.572783 0.479204 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0869303 -0.604941 0.49155 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0742898 -0.58373 0.49155 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0639267 -0.604278 0.482603 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0949359 -0.614541 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0719323 -0.613879 0.46131 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.090301 -0.602932 0.448964 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0138144 -0.584567 0.497099 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0177119 -0.584898 0.521479 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0364224 -0.580268 0.506047 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0185345 -0.56353 0.509133 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00489609 -0.589197 0.512531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00407348 -0.567829 0.500186 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00879364 -0.588867 0.488152 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0129918 -0.605935 0.509445 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00909422 -0.605605 0.485065 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0317022 -0.601305 0.494013 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0244483 -0.584869 0.399581 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0473753 -0.5935 0.402668 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0308315 -0.595617 0.420874 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0399691 -0.57344 0.415013 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0409921 -0.582752 0.381374 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0335859 -0.562692 0.39372 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0180651 -0.574121 0.378288 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0318545 -0.604929 0.387235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00892756 -0.596298 0.384149 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0153107 -0.607046 0.405442 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0355172 -0.54356 0.460062 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0495897 -0.530389 0.475494 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0261165 -0.53532 0.481355 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.031221 -0.519442 0.463149 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0589904 -0.538628 0.454201 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0406217 -0.527681 0.441856 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0449178 -0.551799 0.438769 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0538859 -0.554507 0.472408 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0398133 -0.567678 0.456976 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0304127 -0.559438 0.478269 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0163676 -0.511316 0.396183 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0212225 -0.48882 0.387235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00896145 -0.491256 0.408529 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00194055 -0.497372 0.387235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0286287 -0.50888 0.37489 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00546563 -0.517432 0.37489 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0237738 -0.531375 0.383837 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0395307 -0.502764 0.396183 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0346758 -0.525259 0.40513 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0272696 -0.505199 0.417476 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0440327 -0.593633 0.372739 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0604766 -0.607302 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0678827 -0.587242 0.372739 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0604766 -0.607302 0.385084 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0366265 -0.613693 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0366265 -0.613693 0.385084 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0201827 -0.600023 0.372739 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0440327 -0.593633 0.348047 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0275889 -0.579964 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0514389 -0.573573 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0521134 -0.520079 0.369341 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0542684 -0.523344 0.344961 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0591566 -0.541988 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0358996 -0.534291 0.357307 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0472252 -0.501435 0.353908 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0288565 -0.512382 0.366254 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0450702 -0.49817 0.378288 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0704822 -0.509132 0.356995 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0683272 -0.505868 0.381374 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0753703 -0.527777 0.372427 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.101445 -0.561087 0.406378 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.118381 -0.551884 0.390945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0944221 -0.550745 0.385084 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.103361 -0.536664 0.403291 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.125404 -0.562225 0.412239 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.110383 -0.547006 0.424584 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.108468 -0.571428 0.427671 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.116465 -0.576307 0.394032 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0995293 -0.58551 0.409464 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0925065 -0.575168 0.388171 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.247614 -0.494808 0.43322 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.313607 -0.494287 0.399581 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.326876 -0.484182 0.381374 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.302705 -0.488171 0.378288 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.310432 -0.470513 0.39372 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.337778 -0.490299 0.402668 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.321334 -0.476629 0.415013 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.324509 -0.500404 0.420874 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.330051 -0.507957 0.387235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.316783 -0.518062 0.405442 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.305881 -0.511946 0.384149 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.269833 -0.434629 0.396183 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.279233 -0.426389 0.37489 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.286276 -0.448298 0.383837 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.263449 -0.445377 0.37489 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.262789 -0.41272 0.387235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.247006 -0.431707 0.387235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.253389 -0.420959 0.408529 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.285616 -0.415641 0.396183 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.276216 -0.42388 0.417476 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.29266 -0.43755 0.40513 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.302539 -0.452978 0.460062 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.320401 -0.436971 0.454201 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.3148 -0.455413 0.438769 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.29902 -0.436675 0.441856 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.30814 -0.434535 0.475494 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.286759 -0.434239 0.463149 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.290278 -0.450543 0.481355 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.32392 -0.453274 0.472408 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.306057 -0.469281 0.478269 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.318318 -0.471717 0.456976 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.291389 -0.554467 0.436618 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.314604 -0.562288 0.439705 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.310183 -0.541186 0.427671 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.306499 -0.542501 0.45205 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.29581 -0.575569 0.448652 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.287705 -0.555781 0.460998 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.272595 -0.567748 0.445566 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.299494 -0.574255 0.424272 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.276279 -0.566433 0.421186 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.295073 -0.553152 0.412239 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.28032 -0.513157 0.497099 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.298839 -0.507811 0.512531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.302049 -0.505577 0.488152 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.287442 -0.489718 0.500186 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.27711 -0.515392 0.521479 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.265714 -0.497299 0.509133 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.258591 -0.520738 0.506047 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.291716 -0.531251 0.509445 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.273198 -0.536597 0.494013 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.294927 -0.529016 0.485065 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.225396 -0.554987 0.470257 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.227186 -0.567359 0.49155 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.246777 -0.555283 0.482603 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.227528 -0.54267 0.49155 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.205805 -0.567063 0.479204 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.206147 -0.542374 0.479204 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.204014 -0.554691 0.457911 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.225054 -0.579676 0.470257 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.223263 -0.567305 0.448964 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.244644 -0.567601 0.46131 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.258683 -0.536117 0.372739 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.275127 -0.549787 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.282533 -0.529727 0.372739 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.275127 -0.549787 0.385084 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.251277 -0.556177 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.251277 -0.556177 0.385084 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.234833 -0.542508 0.372739 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.258683 -0.536117 0.348047 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.242239 -0.522448 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.266089 -0.516058 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.19269 -0.536638 0.406378 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.17251 -0.549603 0.412239 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.191778 -0.549105 0.427671 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.177908 -0.528912 0.424584 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.173421 -0.537136 0.390945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.178819 -0.516445 0.403291 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.193601 -0.524171 0.385084 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.187292 -0.557329 0.394032 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.207471 -0.544363 0.388171 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.20656 -0.556831 0.409464 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.214908 -0.476459 0.369341 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.209819 -0.457868 0.353908 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.210053 -0.453963 0.378288 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.2312 -0.458164 0.366254 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.214674 -0.480363 0.344961 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.236055 -0.480659 0.357307 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.219763 -0.498954 0.360393 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.193527 -0.476163 0.356995 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.198616 -0.494753 0.372427 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.193761 -0.472258 0.381374 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.172546 -0.643951 1.11022e-16 RAD 0.166667 
-   txt002 
- SPHERE CENTER -0.157543 -0.835815 0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.122136 -0.871646 0.165419 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.102403 -0.871334 0.180258 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.100577 -0.862937 0.157111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.113406 -0.850164 0.173902 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.123961 -0.880044 0.188567 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.134964 -0.858873 0.182211 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.143694 -0.880356 0.173728 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.111133 -0.892817 0.171776 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.130866 -0.893129 0.156937 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.109307 -0.884419 0.148628 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0854653 -0.82339 0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0654286 -0.811594 0.114524 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0820122 -0.820516 0.0985541 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0876595 -0.80102 0.112614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0688817 -0.814468 0.138803 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0911125 -0.803895 0.136894 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0889183 -0.826265 0.147112 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0632344 -0.833964 0.124743 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.083271 -0.845761 0.133052 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.079818 -0.842886 0.108773 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.135649 -0.799077 0.171592 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.120908 -0.781177 0.180075 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.113462 -0.795477 0.161374 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.13149 -0.778973 0.157875 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.143095 -0.784778 0.190293 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.153678 -0.782573 0.168094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.157836 -0.802678 0.181811 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.125067 -0.801282 0.193792 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.139808 -0.819182 0.18531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.11762 -0.815582 0.175091 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.194213 -0.884071 0.153697 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.197746 -0.891905 0.176845 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.175383 -0.884286 0.169668 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.193701 -0.867957 0.172398 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.216576 -0.89169 0.160875 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.212531 -0.867741 0.156428 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.213043 -0.883856 0.137727 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.198259 -0.908019 0.158144 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.194726 -0.900186 0.134996 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.175896 -0.900401 0.150967 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.207727 -0.811502 0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.212743 -0.794108 0.176661 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.189621 -0.802328 0.173931 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.199907 -0.788345 0.156372 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.230849 -0.803282 0.162601 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.218012 -0.797518 0.142311 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.225832 -0.820676 0.14581 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.220563 -0.817265 0.18016 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.215547 -0.83466 0.163369 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.197441 -0.825486 0.177429 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.229621 -0.84824 0.099389 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.25245 -0.843832 0.107698 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.233837 -0.846687 0.123668 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.235043 -0.826426 0.109608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.248234 -0.845385 0.0834188 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.230827 -0.827978 0.0853287 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.225404 -0.849792 0.0751099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.247028 -0.865646 0.0974792 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.224198 -0.870053 0.0891702 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.228415 -0.868501 0.113449 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.14403 -0.908384 0.104938 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.128672 -0.926643 0.111295 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.1198 -0.904034 0.106848 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.133221 -0.90826 0.127138 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.152902 -0.930993 0.109385 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.157451 -0.912609 0.125228 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.16826 -0.912733 0.103028 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.139481 -0.926768 0.0890951 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.154838 -0.908508 0.0827387 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.130608 -0.904159 0.0846485 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.179437 -0.872552 0.0506299 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.188167 -0.894035 0.0421477 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.172046 -0.89378 0.0608487 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.195141 -0.885777 0.0643473 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.195558 -0.872807 0.0319289 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.202532 -0.864549 0.0541285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.186828 -0.851325 0.0404111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.172463 -0.880811 0.0284303 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.163733 -0.859328 0.0369125 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.156342 -0.880556 0.0471312 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.107359 -0.860128 0.062352 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0905999 -0.853284 0.0455609 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.111382 -0.840233 0.0482916 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0940331 -0.839638 0.0658506 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.086577 -0.873178 0.0596212 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0900102 -0.859532 0.079911 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.103336 -0.880022 0.0764123 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.103926 -0.873773 0.0420622 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.120685 -0.880618 0.0588533 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.124708 -0.860723 0.044793 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0133465 -0.69376 0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.0838533 -0.674309 0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.103063 -0.66171 0.113782 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0876683 -0.673446 0.0984536 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0800983 -0.653258 0.110488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0992478 -0.662574 0.138161 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0762832 -0.654121 0.134867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0800382 -0.675172 0.147213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.106818 -0.682761 0.126127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0876083 -0.69536 0.135179 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0914233 -0.694497 0.110799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0539145 -0.666287 0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0547519 -0.662466 0.031176 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0439578 -0.682791 0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0332597 -0.660752 0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0647085 -0.645962 0.0466081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0432164 -0.644249 0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0638711 -0.649783 0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0754066 -0.668 0.0435217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0745692 -0.671821 0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0646126 -0.688325 0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0325183 -0.62221 0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0446211 -0.604582 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.053173 -0.627745 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0325183 -0.62221 0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0239663 -0.599047 0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0118635 -0.616676 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0118635 -0.616676 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0446211 -0.604582 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0325183 -0.62221 0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.053173 -0.627745 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0432853 -0.701782 0.178389 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0608821 -0.693716 0.193717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0652402 -0.694884 0.169441 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0496759 -0.677932 0.178389 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0389272 -0.700615 0.202664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.027721 -0.684831 0.187336 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0213304 -0.708681 0.187336 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0544915 -0.717566 0.193717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0368947 -0.725632 0.178389 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0588496 -0.718734 0.169441 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00804971 -0.649684 0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.00328338 -0.628657 0.178701 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0152909 -0.642244 0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.000378614 -0.630031 0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.026624 -0.636097 0.175614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.022962 -0.637471 0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0313903 -0.657124 0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0117117 -0.648309 0.191046 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.016478 -0.669336 0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.00686255 -0.661896 0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0272215 -0.721234 0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0310802 -0.720593 0.191046 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00820099 -0.718114 0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0246945 -0.7 0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0501007 -0.723713 0.175614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.043715 -0.70312 0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.046242 -0.724354 0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0336072 -0.741827 0.178701 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0297485 -0.742467 0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.010728 -0.739347 0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0646815 -0.745859 0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0887955 -0.750021 0.126127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0813312 -0.732161 0.110799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.078459 -0.729506 0.135179 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0721458 -0.763719 0.138161 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0618093 -0.743204 0.147213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0480318 -0.759557 0.134867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.075018 -0.766375 0.113782 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.050904 -0.762212 0.110488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0675537 -0.748514 0.0984536 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0058253 -0.76531 0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.00415829 -0.786629 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0148294 -0.770845 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0058253 -0.76531 0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.024813 -0.781094 0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.02648 -0.759776 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.02648 -0.759776 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00415829 -0.786629 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0058253 -0.76531 0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0148294 -0.770845 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0347427 -0.737837 0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0542122 -0.747099 0.0435217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0550267 -0.7241 0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0553974 -0.743371 0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0339282 -0.760836 0.0466081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0351134 -0.757108 0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0144587 -0.751574 0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0335575 -0.741565 0.031176 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.014088 -0.732303 0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0343719 -0.718566 0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.172546 -0.643951 0.222222 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.142305 -0.61371 0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.125845 -0.597249 0.290934 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.12123 -0.610094 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.138689 -0.592635 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.14692 -0.600865 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.159765 -0.596251 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.163381 -0.617326 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.12946 -0.618324 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.145921 -0.634785 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.124846 -0.631169 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.100996 -0.624779 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0833673 -0.612676 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.100996 -0.624779 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.10653 -0.604124 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0833673 -0.612676 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.10653 -0.604124 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.100996 -0.624779 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0778329 -0.633331 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0954616 -0.645433 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0954616 -0.645433 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.153374 -0.5724 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.141271 -0.554772 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.13272 -0.577935 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.153374 -0.5724 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.161926 -0.549237 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.174029 -0.566866 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.174029 -0.566866 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.141271 -0.554772 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.153374 -0.5724 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.13272 -0.577935 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.213855 -0.632882 0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.216282 -0.61945 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.193796 -0.625476 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.207465 -0.609032 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.236341 -0.626857 0.290934 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.227525 -0.616438 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.233915 -0.640288 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.222672 -0.6433 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.220246 -0.656732 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.200186 -0.649326 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.224924 -0.591572 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.2291 -0.567237 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.209804 -0.576452 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.209804 -0.576452 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.24422 -0.582357 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.224924 -0.591572 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.240045 -0.606693 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.24422 -0.582357 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.240045 -0.606693 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.224924 -0.591572 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.244096 -0.663122 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.265414 -0.661455 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.244096 -0.663122 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.249631 -0.642468 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.265414 -0.661455 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.249631 -0.642468 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.244096 -0.663122 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.25988 -0.68211 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.238562 -0.683777 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.238562 -0.683777 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.161477 -0.68526 0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.148046 -0.687686 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.137627 -0.678869 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.154071 -0.6652 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.171896 -0.694077 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.177921 -0.671591 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.185327 -0.691651 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.155452 -0.707746 0.290934 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.168883 -0.70532 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.145033 -0.698929 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.191718 -0.715501 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.190051 -0.736819 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.171063 -0.721035 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.191718 -0.715501 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.210706 -0.731284 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.212373 -0.709966 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.212373 -0.709966 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.190051 -0.736819 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.191718 -0.715501 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.171063 -0.721035 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.120168 -0.696329 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.095832 -0.700504 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.105047 -0.681209 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.105047 -0.681209 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.110952 -0.715624 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.120168 -0.696329 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.135288 -0.711449 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.110952 -0.715624 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.135288 -0.711449 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.120168 -0.696329 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.343435 -0.786005 8.51251e-17 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.392454 -0.82165 0.0425863 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.400556 -0.824791 0.065698 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.376528 -0.821021 0.0614442 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.392663 -0.802599 0.058292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.416482 -0.82542 0.0468401 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.408589 -0.803228 0.0394341 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.40838 -0.822279 0.0237283 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.400347 -0.843843 0.0499923 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.392245 -0.840701 0.0268805 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.376319 -0.840073 0.0457385 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.323622 -0.80984 0.0672777 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.308073 -0.80634 0.0861356 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.300378 -0.802721 0.0629546 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.316395 -0.786996 0.0732426 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.331317 -0.813459 0.0904587 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.339639 -0.794116 0.0775657 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.346866 -0.81696 0.0716007 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.315299 -0.829184 0.0801706 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.330849 -0.832685 0.0613127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.307605 -0.825565 0.0569896 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.370774 -0.753118 0.0604812 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.367981 -0.734271 0.076187 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.348136 -0.745269 0.0664462 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.362711 -0.731279 0.0522508 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.390619 -0.74212 0.070222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.385349 -0.739128 0.0462858 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.393412 -0.760966 0.0545162 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.376044 -0.756109 0.0844174 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.378837 -0.774956 0.0687117 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.356199 -0.767107 0.0746767 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.412267 -0.797815 -0.0246914 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.436217 -0.793573 -0.0204376 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.420728 -0.796968 -0.00151032 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.419454 -0.776294 -0.0149506 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.427756 -0.79442 -0.0436186 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.410993 -0.777141 -0.0381316 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.403807 -0.798662 -0.0478724 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.42903 -0.815094 -0.0301783 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.405081 -0.819335 -0.0344321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.413542 -0.818489 -0.0112511 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.390587 -0.729282 -0.00679642 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.392427 -0.704862 -0.00994863 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.373948 -0.714218 0.00349164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.374248 -0.717401 -0.0209919 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.409067 -0.719927 -0.0202367 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.390887 -0.732465 -0.0312799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.407227 -0.744347 -0.0170845 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.408767 -0.716744 0.0042468 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.406927 -0.741164 0.00739901 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.390287 -0.726099 0.0176871 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.363249 -0.76217 -0.0672777 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.356966 -0.747522 -0.0861356 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.352002 -0.740618 -0.0629546 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.339469 -0.759239 -0.0732426 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.368213 -0.769074 -0.0904587 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.350716 -0.780791 -0.0775657 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.374496 -0.783722 -0.0716007 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.380746 -0.750453 -0.0801706 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.387029 -0.765101 -0.0613127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.375782 -0.743549 -0.0569896 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.365116 -0.854538 -0.0178949 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.365674 -0.878086 -0.0104889 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.346241 -0.863875 -0.00500196 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.367962 -0.859887 0.00604126 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.384548 -0.868748 -0.0233819 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.386837 -0.85055 -0.00685171 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.38399 -0.8452 -0.0307879 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.362827 -0.872736 -0.0344251 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.362269 -0.849188 -0.0418311 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.343394 -0.858526 -0.0289382 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.316097 -0.818893 -0.0604812 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.297057 -0.819591 -0.076187 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.304244 -0.79807 -0.0664462 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.293153 -0.814956 -0.0522508 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.30891 -0.840413 -0.070222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.305006 -0.835779 -0.0462858 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.32795 -0.839716 -0.0545162 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.320001 -0.823527 -0.0844174 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.339041 -0.822829 -0.0687117 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.327188 -0.802007 -0.0746767 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.296284 -0.842728 0.00679642 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.272611 -0.848999 0.00994863 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.278432 -0.829121 -0.00349164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.281616 -0.828835 0.0209919 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.290462 -0.862606 0.0202367 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.299468 -0.842441 0.0312799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.314135 -0.856335 0.0170845 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.287278 -0.862893 -0.0042468 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.310951 -0.856621 -0.00739901 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.293099 -0.843015 -0.0176871 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.358439 -0.594141 0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.389119 -0.547576 0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.386849 -0.525642 0.170979 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.366733 -0.538964 0.165731 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.379645 -0.528407 0.147525 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.409235 -0.534255 0.165118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.402031 -0.537019 0.141664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.411505 -0.556189 0.154009 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.396323 -0.544812 0.183325 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.398593 -0.566746 0.172216 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.376207 -0.558134 0.178077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.317871 -0.566667 0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.299647 -0.551072 0.172528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.29885 -0.563547 0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.315344 -0.545434 0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.318667 -0.554192 0.18796 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.334364 -0.548554 0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.336891 -0.569787 0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.302174 -0.572306 0.184873 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.320398 -0.587901 0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.301377 -0.584781 0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.339267 -0.522591 0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.327164 -0.504962 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.318612 -0.528125 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.339267 -0.522591 0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.347819 -0.499428 0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.359921 -0.517056 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.359921 -0.517056 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.327164 -0.504962 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.339267 -0.522591 0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.318612 -0.528125 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.429687 -0.57505 0.104315 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.446515 -0.55776 0.109563 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.428387 -0.562617 0.125608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.423296 -0.5512 0.104315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.447815 -0.570193 0.0882695 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.424596 -0.563633 0.0830215 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.430987 -0.587483 0.0830215 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.452905 -0.58161 0.109563 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.436077 -0.5989 0.104315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.434777 -0.586467 0.125608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.379835 -0.550064 0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.372012 -0.535334 0.0373488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.359551 -0.536327 0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.35918 -0.555599 0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.392296 -0.549071 0.0342624 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.379464 -0.569335 0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.400119 -0.563801 0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.392667 -0.529799 0.0496945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.400489 -0.54453 0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.380205 -0.530793 0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.399007 -0.621614 0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.420252 -0.632748 0.0496945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.408963 -0.638118 0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.419661 -0.61608 0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.410295 -0.616244 0.0342624 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.409705 -0.599576 0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.38905 -0.60511 0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.399597 -0.638282 0.0373488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.378352 -0.627149 0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.388308 -0.643653 0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.408291 -0.619127 0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.415912 -0.617918 0.183325 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.39183 -0.616439 0.178077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.406911 -0.597788 0.172216 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.432372 -0.620605 0.165118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.423371 -0.600475 0.154009 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.424751 -0.621814 0.141664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.417292 -0.639257 0.170979 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.409671 -0.640465 0.147525 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.39321 -0.637778 0.165731 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.37761 -0.665691 0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.375943 -0.687009 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.356956 -0.671225 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.37761 -0.665691 0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.396598 -0.681475 0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.398265 -0.660156 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.398265 -0.660156 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.375943 -0.687009 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.37761 -0.665691 0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.356956 -0.671225 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.337042 -0.638217 0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.320629 -0.641183 0.184873 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.313702 -0.630777 0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.328614 -0.618565 0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.34397 -0.648623 0.18796 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.351955 -0.626005 0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.360383 -0.645657 0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.329058 -0.660835 0.172528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.345471 -0.65787 0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.32213 -0.65043 0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.358439 -0.594141 -0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.409774 -0.542042 -0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.413579 -0.517869 -0.126127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.395831 -0.525596 -0.110799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.393219 -0.528508 -0.135179 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.427522 -0.534315 -0.138161 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.407161 -0.544953 -0.147213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.423716 -0.558488 -0.134867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.430134 -0.531404 -0.113782 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.426328 -0.555577 -0.110488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.412386 -0.539131 -0.0984536 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.379835 -0.550064 -0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.375068 -0.529037 -0.0435217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.356494 -0.542624 -0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.371406 -0.530412 -0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.398409 -0.536477 -0.0466081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.394747 -0.537852 -0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.403175 -0.557504 -0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.383497 -0.548689 -0.031176 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.388263 -0.569716 -0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.364922 -0.562276 -0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.339267 -0.522591 -0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.327164 -0.504962 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.318612 -0.528125 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.339267 -0.522591 -0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.347819 -0.499428 -0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.359921 -0.517056 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.359921 -0.517056 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.327164 -0.504962 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.339267 -0.522591 -0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.318612 -0.528125 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.388377 -0.586119 -0.178389 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.399584 -0.570335 -0.193717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.403942 -0.569167 -0.169441 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.381987 -0.562269 -0.178389 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.384019 -0.587286 -0.202664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.366422 -0.57922 -0.187336 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.372813 -0.60307 -0.187336 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.405974 -0.594185 -0.193717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.394768 -0.609969 -0.178389 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.410332 -0.593017 -0.169441 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.317871 -0.566667 -0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.317033 -0.562847 -0.191046 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.327827 -0.583171 -0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.338525 -0.561133 -0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.307077 -0.546343 -0.175614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.328569 -0.544629 -0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.307914 -0.550163 -0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.296378 -0.568381 -0.178701 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.297216 -0.572202 -0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.307172 -0.588706 -0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.337042 -0.638217 -0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.317573 -0.64748 -0.178701 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.316758 -0.624481 -0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.316388 -0.643752 -0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.337857 -0.661216 -0.175614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.336672 -0.657489 -0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.357326 -0.651954 -0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.338228 -0.641945 -0.191046 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.357697 -0.632683 -0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.337413 -0.618946 -0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.428945 -0.613592 -0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.451897 -0.612625 -0.113782 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.432663 -0.614807 -0.0984536 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.436515 -0.593593 -0.110488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.448179 -0.61141 -0.138161 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.432797 -0.592379 -0.134867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.425227 -0.612377 -0.147213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.444328 -0.632624 -0.126127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.421376 -0.633591 -0.135179 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.425094 -0.634806 -0.110799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.37761 -0.665691 -0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.375943 -0.687009 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.356956 -0.671225 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.37761 -0.665691 -0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.396598 -0.681475 -0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.398265 -0.660156 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.398265 -0.660156 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.375943 -0.687009 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.37761 -0.665691 -0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.356956 -0.671225 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.399007 -0.621614 -0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.402865 -0.620974 -0.031176 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.379986 -0.618494 -0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.39648 -0.600381 -0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.421886 -0.624094 -0.0466081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.4155 -0.603501 -0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.418027 -0.624734 -0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.405392 -0.642207 -0.0435217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.401533 -0.642848 -0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.382513 -0.639728 -0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.157543 -0.835815 -0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.119969 -0.899353 -0.117284 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0977075 -0.909872 -0.115431 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0997803 -0.886771 -0.1239 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.104052 -0.891613 -0.100068 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.117896 -0.922453 -0.108814 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.124241 -0.904194 -0.0934517 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.140158 -0.911935 -0.110668 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.113625 -0.917612 -0.132647 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.135886 -0.907093 -0.1345 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.115698 -0.894512 -0.141116 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0844101 -0.836885 -0.099389 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0627848 -0.826973 -0.106005 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0805529 -0.830202 -0.122844 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.083104 -0.81296 -0.105354 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0666419 -0.833656 -0.0825505 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0869612 -0.819643 -0.0818993 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0882673 -0.843568 -0.0759343 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0640908 -0.850898 -0.10004 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0857161 -0.860809 -0.093424 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0818589 -0.854126 -0.116879 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.130205 -0.868703 -0.0506299 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.11253 -0.867758 -0.0334138 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.107566 -0.860854 -0.0565949 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.122142 -0.846864 -0.0423994 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.135168 -0.875606 -0.0274488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.14478 -0.854713 -0.0364345 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.152843 -0.876551 -0.0446649 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.120593 -0.889596 -0.0416443 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.138267 -0.890541 -0.0588603 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.115629 -0.882692 -0.0648253 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.193102 -0.898283 -0.129006 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.201143 -0.920038 -0.120537 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.17991 -0.910616 -0.112168 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.201384 -0.900209 -0.105825 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.214335 -0.907705 -0.137375 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.214576 -0.887876 -0.122663 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.206294 -0.88595 -0.145845 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.192861 -0.918112 -0.143718 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.18482 -0.896357 -0.152187 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.171628 -0.90869 -0.135349 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.203337 -0.867633 -0.062352 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.209658 -0.868948 -0.0385197 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.186008 -0.865773 -0.0448623 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.202239 -0.84746 -0.0481565 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.226988 -0.870808 -0.0560094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.219569 -0.84932 -0.0656463 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.220667 -0.869493 -0.0798417 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.210757 -0.889121 -0.0527151 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.204436 -0.887806 -0.0765474 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.187106 -0.885946 -0.0590577 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.230676 -0.834745 -0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.252002 -0.824206 -0.116217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.234336 -0.827952 -0.0993785 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.231282 -0.810793 -0.116868 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.248342 -0.830999 -0.139672 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.227621 -0.817586 -0.140323 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.227016 -0.841538 -0.146288 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.251396 -0.848158 -0.122182 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.23007 -0.858698 -0.128798 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.23373 -0.851905 -0.105343 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.147308 -0.866465 -0.177765 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.130609 -0.876203 -0.193128 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.124356 -0.857385 -0.178416 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.128522 -0.879733 -0.16878 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.153561 -0.885283 -0.192477 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.151474 -0.888813 -0.168128 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.170259 -0.875546 -0.177114 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.149395 -0.862935 -0.202114 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.166093 -0.853198 -0.186751 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.143141 -0.844117 -0.187402 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.184881 -0.802927 -0.171592 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.180723 -0.785723 -0.188808 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.173028 -0.782104 -0.165627 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.161937 -0.798991 -0.179823 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.192576 -0.806546 -0.194773 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.17379 -0.819813 -0.185788 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.196734 -0.82375 -0.177557 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.203667 -0.78966 -0.180578 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.207825 -0.806864 -0.163362 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.195972 -0.786041 -0.157397 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.111748 -0.803997 -0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.108311 -0.798532 -0.183703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.119537 -0.819589 -0.17736 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.131037 -0.797989 -0.174066 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.100522 -0.78294 -0.166213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.123249 -0.782397 -0.156576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.10396 -0.788405 -0.142381 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0890219 -0.80454 -0.169507 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0924597 -0.810005 -0.145675 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.100248 -0.825597 -0.163165 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.172546 -0.643951 -0.222222 RAD 0.0555556 
-   txt002 
- SPHERE CENTER -0.202787 -0.61371 -0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.200937 -0.595399 -0.299164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.194794 -0.591462 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.180539 -0.605717 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.208929 -0.617647 -0.306292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.188531 -0.627965 -0.296959 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.210779 -0.635958 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.223185 -0.603392 -0.292037 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.225035 -0.621702 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.217042 -0.599454 -0.268448 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.244096 -0.624779 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.260374 -0.607636 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.240901 -0.612854 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.237705 -0.600929 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.26357 -0.619561 -0.236478 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.240901 -0.612854 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.247291 -0.636704 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.266765 -0.631486 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.250487 -0.648629 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.247291 -0.636704 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.191718 -0.5724 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.185011 -0.549732 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.167868 -0.56601 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.179793 -0.569205 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.208861 -0.556122 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.203643 -0.575596 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.215568 -0.578791 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.196936 -0.552927 -0.207967 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.203643 -0.575596 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.179793 -0.569205 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.131237 -0.632882 -0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.131575 -0.625593 -0.306292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.15071 -0.6381 -0.296959 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.146508 -0.614836 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.112102 -0.620375 -0.292037 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.127034 -0.609618 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.111763 -0.627664 -0.268448 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.116304 -0.643639 -0.299164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.115965 -0.650927 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.135439 -0.656145 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.120168 -0.591572 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.105912 -0.577317 -0.236478 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.111438 -0.600302 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.128897 -0.582843 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.114642 -0.568587 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.137627 -0.574113 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.128897 -0.582843 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0971825 -0.586046 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.111438 -0.600302 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.102708 -0.609032 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.100996 -0.663122 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0783272 -0.656415 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0978007 -0.651197 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0946054 -0.639272 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0815225 -0.66834 -0.207967 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0978007 -0.651197 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.104191 -0.675047 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0847178 -0.680265 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.107387 -0.686972 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.104191 -0.675047 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.183615 -0.68526 -0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.182351 -0.708085 -0.292037 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.165569 -0.700531 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.188833 -0.704733 -0.268448 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.200397 -0.692813 -0.299164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.206879 -0.689462 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.201661 -0.669989 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.177134 -0.688611 -0.306292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.178397 -0.665787 -0.296959 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.160351 -0.681058 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.153374 -0.715501 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.136231 -0.731779 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.129524 -0.70911 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.141449 -0.712305 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.160081 -0.738169 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.165299 -0.718696 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.177224 -0.721891 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.148156 -0.734974 -0.236478 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.165299 -0.718696 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.141449 -0.712305 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.224924 -0.696329 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.23918 -0.710584 -0.207967 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.216195 -0.705059 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.233654 -0.687599 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.24791 -0.701855 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.242384 -0.678869 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.233654 -0.687599 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.23045 -0.719314 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.216195 -0.705059 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.207465 -0.713788 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0133465 -0.69376 -0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.0631985 -0.668775 -0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0667914 -0.661946 -0.183325 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0511945 -0.680354 -0.178077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0452771 -0.65711 -0.172216 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0787954 -0.650366 -0.165118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0572811 -0.64553 -0.154009 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0752026 -0.657195 -0.141664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0847128 -0.673611 -0.170979 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.08112 -0.680439 -0.147525 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.069116 -0.692019 -0.165731 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00804971 -0.649684 -0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.000226782 -0.634953 -0.184873 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0122343 -0.635947 -0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.012605 -0.655218 -0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0205108 -0.64869 -0.18796 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00767898 -0.668955 -0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0283337 -0.66342 -0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0208815 -0.629419 -0.172528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0287044 -0.644149 -0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00842045 -0.630413 -0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0325183 -0.62221 -0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0446211 -0.604582 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.053173 -0.627745 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0325183 -0.62221 -0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0239663 -0.599047 -0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0118635 -0.616676 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0118635 -0.616676 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0446211 -0.604582 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0325183 -0.62221 -0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.053173 -0.627745 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0845947 -0.712851 -0.104315 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.107813 -0.706291 -0.109563 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0896851 -0.701434 -0.125608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0909853 -0.689001 -0.104315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.102723 -0.717709 -0.0882695 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0858949 -0.700418 -0.0830215 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0795043 -0.724268 -0.0830215 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.101422 -0.730141 -0.109563 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0782041 -0.736701 -0.104315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0832945 -0.725284 -0.125608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0539145 -0.666287 -0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0721382 -0.650692 -0.0496945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.072935 -0.663167 -0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0564414 -0.645053 -0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0531177 -0.653812 -0.0342624 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0374209 -0.648173 -0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.034894 -0.669407 -0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0696112 -0.671925 -0.0373488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0513875 -0.68752 -0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.070408 -0.6844 -0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0347427 -0.737837 -0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0511556 -0.740802 -0.0373488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0580833 -0.730397 -0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.043171 -0.718185 -0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.027815 -0.748242 -0.0342624 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0198304 -0.725625 -0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0114021 -0.745277 -0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0427273 -0.760455 -0.0496945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0263144 -0.757489 -0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0496549 -0.750049 -0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0440268 -0.740325 -0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.0650768 -0.746894 -0.170979 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0607735 -0.723153 -0.165731 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0653796 -0.739183 -0.147525 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.04833 -0.764065 -0.165118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0486329 -0.756355 -0.141664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.02728 -0.757496 -0.154009 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0437239 -0.748035 -0.183325 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0226739 -0.741466 -0.172216 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0394207 -0.724295 -0.178077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0058253 -0.76531 -0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.00415829 -0.786629 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0148294 -0.770845 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0058253 -0.76531 -0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.024813 -0.781094 -0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.02648 -0.759776 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.02648 -0.759776 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00415829 -0.786629 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0058253 -0.76531 -0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.0148294 -0.770845 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0272215 -0.721234 -0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER -0.0484665 -0.732368 -0.172528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0371781 -0.737738 -0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0478762 -0.715699 -0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0385099 -0.715864 -0.18796 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0379196 -0.699195 -0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0172649 -0.70473 -0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0278118 -0.737902 -0.184873 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.00656677 -0.726768 -0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER -0.0165234 -0.743272 -0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.471405 -0.471405 1.11022e-16 RAD 0.166667 
-   txt002 
- SPHERE CENTER 0.690426 -0.508983 1.83812e-16 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.755941 -0.484794 -0.0246914 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.767658 -0.47411 -0.0436186 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.749038 -0.489758 -0.0478724 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.744501 -0.467528 -0.0381316 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.774562 -0.469146 -0.0204376 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.751405 -0.462564 -0.0149506 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.762845 -0.47983 -0.00151032 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.779098 -0.491377 -0.0301783 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.767382 -0.502061 -0.0112511 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.760478 -0.507025 -0.0344321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.695668 -0.478434 -0.0672777 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.703418 -0.481931 -0.0904587 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.716184 -0.491475 -0.0716007 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.694124 -0.500827 -0.0775657 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.682902 -0.46889 -0.0861356 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.673608 -0.487786 -0.0732426 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.675152 -0.465393 -0.0629546 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.704962 -0.459538 -0.0801706 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.697211 -0.456041 -0.0569896 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.717727 -0.469082 -0.0613127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.7029 -0.436283 -0.00679642 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.714226 -0.418941 -0.0202367 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.724842 -0.44101 -0.0170845 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.704751 -0.43889 -0.0312799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.692283 -0.414215 -0.00994863 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.682808 -0.434163 -0.0209919 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.680957 -0.431557 0.00349164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.712374 -0.416335 0.0042468 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.701048 -0.433677 0.0176871 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.722991 -0.438403 0.00739901 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.7507 -0.515343 0.0425863 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.773394 -0.506594 0.0468401 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.764807 -0.507924 0.0237283 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.755462 -0.491321 0.0394341 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.759287 -0.514012 0.065698 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.741355 -0.49874 0.058292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.736593 -0.522762 0.0614442 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.768632 -0.530616 0.0499923 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.745938 -0.539365 0.0457385 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.760045 -0.531946 0.0268805 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.697658 -0.466832 0.0604812 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.709346 -0.447385 0.070222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.721188 -0.46231 0.0545162 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.703286 -0.447429 0.0462858 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.685816 -0.451907 0.076187 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.679757 -0.451951 0.0522508 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.674129 -0.471354 0.0664462 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.703718 -0.466788 0.0844174 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.692031 -0.486235 0.0746767 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.71556 -0.481713 0.0687117 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.685185 -0.539531 0.0672777 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.693658 -0.538818 0.0904587 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.708875 -0.534075 0.0716007 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.691194 -0.517905 0.0775657 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.669969 -0.544274 0.0861356 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.667505 -0.523361 0.0732426 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.661495 -0.544988 0.0629546 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.687649 -0.560445 0.0801706 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.679176 -0.561158 0.0569896 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.702866 -0.555702 0.0613127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.743468 -0.557494 -0.0178949 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.767402 -0.560084 -0.0233819 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.755145 -0.53997 -0.0307879 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.760285 -0.543179 -0.00685171 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.755725 -0.577608 -0.0104889 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.748608 -0.560703 0.00604126 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.731791 -0.575017 -0.00500196 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.750585 -0.574398 -0.0344251 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.726651 -0.571808 -0.0289382 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.738328 -0.554284 -0.0418311 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.677953 -0.581682 0.00679642 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.682851 -0.601808 0.0202367 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.700216 -0.58454 0.0170845 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.680568 -0.579842 0.0312799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.660588 -0.59895 0.00994863 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.658304 -0.576984 0.0209919 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.65569 -0.578824 -0.00349164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.680237 -0.603648 -0.0042468 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.675339 -0.583522 -0.0176871 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.697602 -0.58638 -0.00739901 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.683194 -0.551134 -0.0604812 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.687731 -0.573364 -0.070222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.703871 -0.56324 -0.0545162 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.682033 -0.571303 -0.0462858 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.667055 -0.561258 -0.076187 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.661356 -0.559196 -0.0522508 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.662518 -0.539027 -0.0664462 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.688893 -0.553195 -0.0844174 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.684356 -0.530964 -0.0746767 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.705033 -0.543071 -0.0687117 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.607487 -0.335322 -0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.629404 -0.313405 -0.178389 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.626214 -0.316595 -0.202664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.624401 -0.335868 -0.187336 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.606941 -0.318408 -0.187336 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.631217 -0.294133 -0.193717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.611945 -0.295946 -0.178389 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.634407 -0.290942 -0.169441 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.648676 -0.311592 -0.193717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.651867 -0.308402 -0.169441 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.646863 -0.330864 -0.178389 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.610996 -0.384191 -0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.623201 -0.403702 -0.175614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.635431 -0.385946 -0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.62031 -0.401066 -0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.598766 -0.401947 -0.178701 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.595876 -0.399312 -0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.586561 -0.382437 -0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.613886 -0.386827 -0.191046 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.601681 -0.367317 -0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.626116 -0.369071 -0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.558618 -0.331813 -0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.539107 -0.319608 -0.175614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.541743 -0.322499 -0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.556863 -0.307378 -0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.555982 -0.328923 -0.191046 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.573738 -0.316693 -0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.575492 -0.341128 -0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.540862 -0.344043 -0.178701 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.560372 -0.356248 -0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.543497 -0.346933 -0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.625895 -0.264535 -0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.637402 -0.248969 -0.138161 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.646193 -0.271807 -0.134867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.625088 -0.268363 -0.147213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.617105 -0.241698 -0.126127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.604791 -0.261092 -0.135179 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.605598 -0.257264 -0.110799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.638209 -0.245142 -0.113782 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.626702 -0.260708 -0.0984536 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.647 -0.267979 -0.110488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.555109 -0.282943 -0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.550934 -0.258608 -0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.570229 -0.267823 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.570229 -0.267823 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.535813 -0.273728 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.555109 -0.282943 -0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.539989 -0.298064 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.535813 -0.273728 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.539989 -0.298064 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.555109 -0.282943 -0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.603979 -0.286452 -0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.613271 -0.265398 -0.0466081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.627912 -0.281225 -0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.610787 -0.26842 -0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.589337 -0.270625 -0.0435217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.586853 -0.273647 -0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.580045 -0.291679 -0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.606463 -0.283431 -0.031176 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.59717 -0.304484 -0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.621104 -0.299257 -0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.678274 -0.316914 -0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.69384 -0.305407 -0.138161 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.674446 -0.317721 -0.147213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.671002 -0.296616 -0.134867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.697667 -0.3046 -0.113782 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.67483 -0.295809 -0.110488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.682101 -0.316107 -0.0984536 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.701111 -0.325704 -0.126127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.685545 -0.337211 -0.110799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.681717 -0.338018 -0.135179 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.656357 -0.33883 -0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.677411 -0.329538 -0.0466081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.674389 -0.332022 -0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.661584 -0.314897 -0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.659378 -0.336346 -0.031176 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.643552 -0.321705 -0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.638325 -0.345639 -0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.672184 -0.353472 -0.0435217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.65113 -0.362764 -0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.669162 -0.355956 -0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.659866 -0.3877 -0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.684201 -0.391875 -0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.674986 -0.37258 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.674986 -0.37258 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.669081 -0.406996 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.659866 -0.3877 -0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.644745 -0.40282 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.669081 -0.406996 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.644745 -0.40282 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.659866 -0.3877 -0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.607487 -0.335322 0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.659645 -0.283164 0.104315 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.672915 -0.269894 0.0882695 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.666987 -0.293281 0.0830215 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.649528 -0.275822 0.0830215 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.665573 -0.259777 0.109563 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.642185 -0.265705 0.104315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.652302 -0.273047 0.125608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.683032 -0.277236 0.109563 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.669762 -0.290507 0.125608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.677104 -0.300624 0.104315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.656357 -0.33883 0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.663448 -0.328536 0.0342624 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.639482 -0.329516 0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.654603 -0.314396 0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.680322 -0.33785 0.0496945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.671477 -0.32371 0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.673232 -0.348145 0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.665202 -0.35297 0.0373488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.658111 -0.363265 0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.641237 -0.353951 0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.603979 -0.286452 0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.614273 -0.279361 0.0342624 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.628413 -0.288206 0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.613293 -0.303327 0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.589839 -0.277607 0.0373488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.588858 -0.301572 0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.579544 -0.284698 0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.604959 -0.262487 0.0496945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.594664 -0.269578 0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.619099 -0.271332 0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.610775 -0.279656 0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.621535 -0.258061 0.165118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.634468 -0.275921 0.154009 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.616678 -0.264057 0.141664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.597842 -0.261795 0.170979 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.592985 -0.267791 0.147525 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.587082 -0.28339 0.165731 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.615632 -0.27366 0.183325 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.604872 -0.295255 0.178077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.628565 -0.29152 0.172216 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.555109 -0.282943 0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.550934 -0.258608 0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.570229 -0.267823 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.570229 -0.267823 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.535813 -0.273728 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.555109 -0.282943 0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.539989 -0.298064 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.535813 -0.273728 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.539989 -0.298064 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.555109 -0.282943 0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.558618 -0.331813 0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.55307 -0.320611 0.18796 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.57665 -0.325005 0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.563845 -0.30788 0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.535038 -0.327419 0.172528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.545813 -0.314688 0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.540585 -0.338621 0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.547843 -0.344544 0.184873 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.553391 -0.355747 0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.571423 -0.348938 0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.663153 -0.332034 0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.684748 -0.321274 0.165118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.678752 -0.326131 0.141664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.666888 -0.308341 0.154009 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.669149 -0.327177 0.183325 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.651289 -0.314244 0.172216 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.647554 -0.337937 0.178077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.681014 -0.344967 0.170979 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.659419 -0.355727 0.165731 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.675018 -0.349824 0.147525 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.610996 -0.384191 0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.622198 -0.389739 0.18796 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.63493 -0.378964 0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.617804 -0.366159 0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.598265 -0.394966 0.184873 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.593871 -0.371386 0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.587062 -0.389418 0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.61539 -0.407771 0.172528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.604188 -0.402224 0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.628121 -0.396997 0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.659866 -0.3877 0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.684201 -0.391875 0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.674986 -0.37258 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.674986 -0.37258 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.669081 -0.406996 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.659866 -0.3877 0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.644745 -0.40282 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.669081 -0.406996 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.644745 -0.40282 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.659866 -0.3877 0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.554344 -0.645066 0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.610229 -0.668521 0.153697 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.633406 -0.663938 0.160875 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.626429 -0.65892 0.137727 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.617928 -0.64522 0.156428 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.617206 -0.673539 0.176845 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.601728 -0.654822 0.172398 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.59403 -0.678123 0.169668 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.625707 -0.687239 0.158144 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.602531 -0.691822 0.150967 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.61873 -0.682221 0.134996 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.622977 -0.619787 0.099389 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.63767 -0.608008 0.0834188 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.620102 -0.623239 0.0751099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.613891 -0.601637 0.0853287 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.640545 -0.604555 0.107698 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.616766 -0.598184 0.109608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.625852 -0.616334 0.123668 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.646756 -0.626157 0.0974792 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.632063 -0.637936 0.113449 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.629188 -0.641389 0.0891702 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.585648 -0.598918 0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.601562 -0.580238 0.162601 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.605914 -0.59781 0.14581 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.587563 -0.581665 0.142311 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.581295 -0.581346 0.176661 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.567297 -0.582773 0.156372 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.565381 -0.600026 0.173931 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.599646 -0.597491 0.18016 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.583732 -0.616171 0.177429 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.603999 -0.615063 0.163369 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.541596 -0.6938 0.165419 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.547376 -0.70016 0.188567 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.564621 -0.690564 0.173728 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.546319 -0.676324 0.182211 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.524351 -0.703396 0.180258 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.523294 -0.679561 0.173902 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.518571 -0.697037 0.157111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.542652 -0.717636 0.171776 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.536873 -0.711276 0.148628 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.559898 -0.70804 0.156937 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.517014 -0.624197 0.171592 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.516313 -0.60809 0.190293 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.538029 -0.616221 0.181811 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.524375 -0.60089 0.168094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.495298 -0.616065 0.180075 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.50336 -0.608865 0.157875 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.495999 -0.632172 0.161374 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.508952 -0.631397 0.193792 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.509653 -0.647504 0.175091 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.530668 -0.639529 0.18531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.48571 -0.670344 0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.466887 -0.67091 0.138803 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.490138 -0.671107 0.147112 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.480853 -0.650637 0.136894 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.46246 -0.670147 0.114524 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.476425 -0.649874 0.112614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.481283 -0.669581 0.0985541 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.471745 -0.690617 0.124743 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.490567 -0.690052 0.108773 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.494995 -0.690815 0.133052 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.578925 -0.714669 0.104938 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.597914 -0.729812 0.109385 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.602084 -0.70632 0.103028 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.592661 -0.711617 0.125228 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.574755 -0.738161 0.111295 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.569503 -0.719965 0.127138 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.555767 -0.723017 0.106848 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.584178 -0.732864 0.0890951 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.565189 -0.71772 0.0846485 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.588348 -0.709372 0.0827387 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.52304 -0.691213 0.062352 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.511567 -0.712906 0.0596212 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.529503 -0.710453 0.0764123 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.507717 -0.699372 0.079911 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.505104 -0.693665 0.0455609 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.501254 -0.680131 0.0658506 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.516576 -0.671972 0.0482916 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.526889 -0.704747 0.0420622 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.538362 -0.683054 0.044793 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.544826 -0.702295 0.0588533 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.591673 -0.665934 0.0506299 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.605761 -0.658095 0.0319289 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.58746 -0.643855 0.0404111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.607672 -0.647455 0.0541285 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.609975 -0.680174 0.0421477 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.611885 -0.669535 0.0643473 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.595887 -0.688013 0.0608487 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.589763 -0.676573 0.0284303 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.575674 -0.684413 0.0471312 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.571461 -0.662334 0.0369125 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.471405 -0.471405 0.222222 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.501645 -0.441164 0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.518106 -0.424703 0.290934 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.522721 -0.437548 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.505261 -0.420089 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.497031 -0.428319 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.484186 -0.423704 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.48057 -0.44478 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.51449 -0.445778 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.498029 -0.462239 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.519105 -0.458623 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.542955 -0.452233 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.560583 -0.44013 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.542955 -0.452233 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.53742 -0.431578 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.560583 -0.44013 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.53742 -0.431578 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.542955 -0.452233 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.566118 -0.460785 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.548489 -0.472887 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.548489 -0.472887 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.490576 -0.399854 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.502679 -0.382226 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.511231 -0.405389 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.490576 -0.399854 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.482024 -0.376691 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.469922 -0.39432 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.469922 -0.39432 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.502679 -0.382226 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.490576 -0.399854 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.511231 -0.405389 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.430095 -0.460336 0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.427669 -0.446904 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.450155 -0.45293 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.436486 -0.436486 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.407609 -0.454311 0.290934 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.416426 -0.443892 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.410035 -0.467742 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.421278 -0.470754 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.423704 -0.484186 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.443764 -0.47678 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.419026 -0.419026 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.414851 -0.39469 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.434147 -0.403906 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.434147 -0.403906 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.399731 -0.409811 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.419026 -0.419026 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.403906 -0.434147 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.399731 -0.409811 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.403906 -0.434147 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.419026 -0.419026 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.399854 -0.490576 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.378536 -0.488909 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.399854 -0.490576 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.39432 -0.469922 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.378536 -0.488909 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.39432 -0.469922 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.399854 -0.490576 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.384071 -0.509564 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.405389 -0.511231 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.405389 -0.511231 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.482473 -0.512714 0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.495905 -0.51514 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.506323 -0.506323 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.48988 -0.492654 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.472055 -0.521531 0.30328 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.46603 -0.499045 0.295049 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.458623 -0.519105 0.282703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.488498 -0.5352 0.290934 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.475067 -0.532774 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.498917 -0.526383 0.270358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.452233 -0.542955 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.4539 -0.564273 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.472887 -0.548489 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.452233 -0.542955 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.433245 -0.558738 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.431578 -0.53742 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.431578 -0.53742 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.4539 -0.564273 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.452233 -0.542955 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.472887 -0.548489 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.523783 -0.523783 0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.548119 -0.527958 0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.538903 -0.508662 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.538903 -0.508662 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.532998 -0.543078 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.523783 -0.523783 0.246914 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.508662 -0.538903 0.234568 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.532998 -0.543078 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.508662 -0.538903 0.209877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.523783 -0.523783 0.197531 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.335322 -0.607487 0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.313405 -0.629404 0.178389 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.316595 -0.626214 0.202664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.335868 -0.624401 0.187336 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.318408 -0.606941 0.187336 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.294133 -0.631217 0.193717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.295946 -0.611945 0.178389 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.290942 -0.634407 0.169441 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.311592 -0.648676 0.193717 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.308402 -0.651867 0.169441 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.330864 -0.646863 0.178389 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.384191 -0.610996 0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.405245 -0.601704 0.175614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.402224 -0.604188 0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.389418 -0.587062 0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.387213 -0.608512 0.191046 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.371386 -0.593871 0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.366159 -0.617804 0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.400018 -0.625637 0.178701 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.378964 -0.63493 0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.396997 -0.628121 0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.331813 -0.558618 0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.341105 -0.537564 0.175614 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.355747 -0.553391 0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.338621 -0.540585 0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.317172 -0.542791 0.178701 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.314688 -0.545813 0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.30788 -0.563845 0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.334297 -0.555596 0.191046 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.325005 -0.57665 0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.348938 -0.571423 0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.264535 -0.625895 0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.245336 -0.623429 0.138161 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.268271 -0.624736 0.147213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.260997 -0.604627 0.134867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.2416 -0.624589 0.113782 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.257262 -0.605787 0.110488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.2608 -0.627055 0.0984536 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.248874 -0.644697 0.126127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.268073 -0.647163 0.110799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.271809 -0.646004 0.135179 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.282943 -0.555109 0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.278768 -0.530773 0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.298064 -0.539989 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.298064 -0.539989 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.263648 -0.545894 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.282943 -0.555109 0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.267823 -0.570229 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.263648 -0.545894 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.267823 -0.570229 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.282943 -0.555109 0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.286452 -0.603979 0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.266942 -0.591774 0.0466081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.269578 -0.594664 0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.284698 -0.579544 0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.283817 -0.601088 0.031176 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.301572 -0.588858 0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.303327 -0.613293 0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.268696 -0.616209 0.0435217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.288206 -0.628413 0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.271332 -0.619099 0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.316914 -0.678274 0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.31938 -0.697473 0.138161 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.338182 -0.681812 0.134867 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.318074 -0.674538 0.147213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.298112 -0.693935 0.126127 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.296805 -0.671 0.135179 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.295646 -0.674736 0.110799 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.31822 -0.701209 0.113782 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.315754 -0.682009 0.0984536 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.337022 -0.685547 0.110488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.33883 -0.656357 0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.351035 -0.675867 0.0466081 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.363265 -0.658111 0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.348145 -0.673232 0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.3266 -0.674113 0.0435217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.32371 -0.671477 0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.314396 -0.654603 0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.341721 -0.658993 0.031176 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.329516 -0.639482 0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.353951 -0.641237 0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.3877 -0.659866 0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.412036 -0.664041 0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.40282 -0.644745 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.40282 -0.644745 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.396915 -0.679161 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.3877 -0.659866 0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.37258 -0.674986 0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.396915 -0.679161 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.37258 -0.674986 0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.3877 -0.659866 0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.554344 -0.645066 -0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.616373 -0.681385 -0.129006 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.639472 -0.678928 -0.137375 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.621631 -0.664108 -0.145845 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.629767 -0.661636 -0.122663 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.634214 -0.696205 -0.120537 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.624508 -0.678912 -0.105825 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.611115 -0.698662 -0.112168 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.626079 -0.698678 -0.143718 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.602979 -0.701135 -0.135349 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.608237 -0.683858 -0.152187 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.617144 -0.607573 -0.122833 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.63057 -0.595495 -0.139672 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.617371 -0.615286 -0.146288 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.605919 -0.594239 -0.140323 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.630343 -0.587782 -0.116217 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.605692 -0.586526 -0.116868 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.616917 -0.59986 -0.0993785 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.641795 -0.608828 -0.122182 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.628369 -0.620906 -0.105343 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.628595 -0.628619 -0.128798 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.609912 -0.649723 -0.062352 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.631982 -0.640648 -0.0560094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.62585 -0.64267 -0.0798417 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.614812 -0.625749 -0.0656463 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.616044 -0.647702 -0.0385197 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.598874 -0.632802 -0.0481565 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.593974 -0.656777 -0.0448623 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.627081 -0.664623 -0.0527151 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.605012 -0.673698 -0.0590577 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.620949 -0.666645 -0.0765474 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.553573 -0.718878 -0.117284 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.563328 -0.73992 -0.108814 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.577348 -0.719679 -0.110668 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.559693 -0.720935 -0.0934517 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.539553 -0.739118 -0.115431 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.535918 -0.720133 -0.100068 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.529798 -0.718076 -0.1239 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.557208 -0.737863 -0.132647 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.547453 -0.716821 -0.141116 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.571228 -0.717623 -0.1345 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.547112 -0.687216 -0.0506299 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.554862 -0.690713 -0.0274488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.570641 -0.682694 -0.0446649 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.552739 -0.667813 -0.0364345 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.531333 -0.695235 -0.0334138 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.52921 -0.672335 -0.0423994 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.523582 -0.691738 -0.0565949 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.549235 -0.710116 -0.0416443 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.541484 -0.706619 -0.0648253 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.565014 -0.702097 -0.0588603 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.491544 -0.682558 -0.099389 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.474542 -0.688647 -0.0825505 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.498226 -0.686417 -0.0759343 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.485132 -0.666351 -0.0818993 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.46786 -0.684788 -0.106005 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.47845 -0.662492 -0.105354 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.484862 -0.678699 -0.122844 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.480953 -0.704854 -0.10004 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.497955 -0.698765 -0.116879 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.504637 -0.702624 -0.093424 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.560805 -0.676727 -0.177765 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.57563 -0.689897 -0.192477 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.585222 -0.673115 -0.177114 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.575587 -0.693998 -0.168128 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.551213 -0.693509 -0.193128 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.55117 -0.69761 -0.16878 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.536388 -0.680339 -0.178416 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.560848 -0.672626 -0.202114 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.546023 -0.659456 -0.187402 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.57044 -0.655844 -0.186751 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.498776 -0.640408 -0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.478525 -0.627785 -0.166213 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.484234 -0.630799 -0.142381 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.497935 -0.615951 -0.156576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.493066 -0.637394 -0.183703 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.512476 -0.62556 -0.174066 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.513317 -0.650016 -0.17736 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.479365 -0.652241 -0.169507 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.499616 -0.664864 -0.163165 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.485075 -0.655255 -0.145675 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.561576 -0.602915 -0.171592 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.570049 -0.602201 -0.194773 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.582252 -0.615021 -0.177557 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.560414 -0.623084 -0.185788 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.549372 -0.590095 -0.188808 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.539737 -0.610978 -0.179823 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.540899 -0.590808 -0.165627 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.571211 -0.582032 -0.180578 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.562738 -0.582745 -0.157397 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.583414 -0.594852 -0.163362 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.335322 -0.607487 -0.111111 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.283164 -0.659645 -0.104315 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.269894 -0.672915 -0.0882695 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.293281 -0.666987 -0.0830215 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.275822 -0.649528 -0.0830215 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.259777 -0.665573 -0.109563 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.265705 -0.642185 -0.104315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.273047 -0.652302 -0.125608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.277236 -0.683032 -0.109563 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.290507 -0.669762 -0.125608 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.300624 -0.677104 -0.104315 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.33883 -0.656357 -0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.350033 -0.661904 -0.0342624 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.362764 -0.65113 -0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.345639 -0.638325 -0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.326099 -0.667131 -0.0373488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.321705 -0.643552 -0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.314897 -0.661584 -0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.343224 -0.679937 -0.0496945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.332022 -0.674389 -0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.355956 -0.669162 -0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.286452 -0.603979 -0.0555556 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.280905 -0.592776 -0.0342624 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.304484 -0.59717 -0.0401235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.291679 -0.580045 -0.0524691 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.262872 -0.599585 -0.0496945 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.273647 -0.586853 -0.0679012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.26842 -0.610787 -0.0709877 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.275678 -0.61671 -0.0373488 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.281225 -0.627912 -0.058642 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.299257 -0.621104 -0.0432099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.279656 -0.610775 -0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.256944 -0.602632 -0.165118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.26347 -0.606749 -0.141664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.273158 -0.587686 -0.154009 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.27313 -0.606658 -0.183325 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.289344 -0.591712 -0.172216 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.295841 -0.614801 -0.178077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.263442 -0.62572 -0.170979 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.286153 -0.633864 -0.165731 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.269968 -0.629838 -0.147525 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.282943 -0.555109 -0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.278768 -0.530773 -0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.298064 -0.539989 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.298064 -0.539989 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.263648 -0.545894 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.282943 -0.555109 -0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.267823 -0.570229 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.263648 -0.545894 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.267823 -0.570229 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.282943 -0.555109 -0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.331813 -0.558618 -0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.342108 -0.551527 -0.18796 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.356248 -0.560372 -0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.341128 -0.575492 -0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.317673 -0.549772 -0.184873 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.316693 -0.573738 -0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.307378 -0.556863 -0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.332793 -0.534652 -0.172528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.322499 -0.541743 -0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.346933 -0.543497 -0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.332034 -0.663153 -0.15987 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.340177 -0.685865 -0.165118 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.355123 -0.669651 -0.154009 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.33606 -0.679339 -0.141664 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.317089 -0.679367 -0.170979 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.312971 -0.672841 -0.147525 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.308945 -0.656656 -0.165731 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.336151 -0.669679 -0.183325 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.328008 -0.646968 -0.178077 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.351097 -0.653465 -0.172216 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.384191 -0.610996 -0.166667 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.391282 -0.600701 -0.18796 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.367317 -0.601681 -0.182099 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.382437 -0.586561 -0.169753 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.408157 -0.610016 -0.172528 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.399312 -0.595876 -0.154321 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.401066 -0.62031 -0.151235 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.393037 -0.625136 -0.184873 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.385946 -0.635431 -0.16358 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.369071 -0.626116 -0.179012 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.3877 -0.659866 -0.111111 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.412036 -0.664041 -0.111111 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.40282 -0.644745 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.40282 -0.644745 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.396915 -0.679161 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.3877 -0.659866 -0.0864198 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.37258 -0.674986 -0.0987654 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.396915 -0.679161 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.37258 -0.674986 -0.123457 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.3877 -0.659866 -0.135802 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.471405 -0.471405 -0.222222 RAD 0.0555556 
-   txt002 
- SPHERE CENTER 0.441164 -0.441164 -0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.443014 -0.422853 -0.299164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.449156 -0.418916 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.463412 -0.433171 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.435021 -0.445101 -0.306292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.455419 -0.455419 -0.296959 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.433171 -0.463412 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.420766 -0.430846 -0.292037 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.418916 -0.449156 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.426908 -0.426908 -0.268448 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.399854 -0.452233 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.383576 -0.43509 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.40305 -0.440308 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.406245 -0.428383 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.380381 -0.447015 -0.236478 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.40305 -0.440308 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.396659 -0.464158 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.377186 -0.45894 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.393464 -0.476083 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.396659 -0.464158 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.452233 -0.399854 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.45894 -0.377186 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.476083 -0.393464 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.464158 -0.396659 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.43509 -0.383576 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.440308 -0.40305 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.428383 -0.406245 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.447015 -0.380381 -0.207967 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.440308 -0.40305 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.464158 -0.396659 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.512714 -0.460336 -0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.512375 -0.453047 -0.306292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.493241 -0.465554 -0.296959 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.497443 -0.44229 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.531849 -0.447829 -0.292037 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.516916 -0.437072 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.532187 -0.455118 -0.268448 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.527647 -0.471093 -0.299164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.527985 -0.478381 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.508512 -0.483599 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.523783 -0.419026 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.538038 -0.404771 -0.236478 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.532513 -0.427756 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.515053 -0.410297 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.529309 -0.396041 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.506323 -0.401567 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.515053 -0.410297 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.546768 -0.4135 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.532513 -0.427756 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.541242 -0.436486 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.542955 -0.490576 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.565623 -0.483869 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.54615 -0.478651 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.549345 -0.466726 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.562428 -0.495794 -0.207967 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.54615 -0.478651 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.539759 -0.502501 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.559233 -0.507719 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.536564 -0.514426 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.539759 -0.502501 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.460336 -0.512714 -0.282703 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.461599 -0.535539 -0.292037 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.478381 -0.527985 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.455118 -0.532187 -0.268448 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.443553 -0.520267 -0.299164 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.437072 -0.516916 -0.275576 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.44229 -0.497443 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.466817 -0.516065 -0.306292 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.465554 -0.493241 -0.296959 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.483599 -0.508512 -0.289831 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.490576 -0.542955 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.507719 -0.559233 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.514426 -0.536564 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.502501 -0.539759 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.483869 -0.565623 -0.215094 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.478651 -0.54615 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.466726 -0.549345 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.495794 -0.562428 -0.236478 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.478651 -0.54615 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.502501 -0.539759 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.419026 -0.523783 -0.222222 RAD 0.0185185 
-   txt002 
- SPHERE CENTER 0.404771 -0.538038 -0.207967 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.427756 -0.532513 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.410297 -0.515053 -0.200839 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.396041 -0.529309 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.401567 -0.506323 -0.222222 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.410297 -0.515053 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.4135 -0.546768 -0.22935 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.427756 -0.532513 -0.243606 RAD 0.00617284 
-   txt002 
- SPHERE CENTER 0.436486 -0.541242 -0.222222 RAD 0.00617284 
-   txt002 
-
-END_SCENE
diff --git a/examples/parallel_for/tachyon/android/jni/Android.mk b/examples/parallel_for/tachyon/android/jni/Android.mk
deleted file mode 100644
index f1e69f8..0000000
--- a/examples/parallel_for/tachyon/android/jni/Android.mk
+++ /dev/null
@@ -1,90 +0,0 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-#
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-#
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
-
-
-# The original source for this example is
-# Copyright (c) 1994-2008 John E. Stone
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in the
-#    documentation and/or other materials provided with the distribution.
-# 3. The name of the author may not be used to endorse or promote products
-#    derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
-# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-
-LOCAL_PATH := $(realpath $(call my-dir)/..)
-
-ifneq (,$(wildcard Android.mk))
-  $(error ndk-build should be run one level up from jni folder)
-endif
-
-#Relative paths
-TBB_PATH := ../../../..
-SRC_PATH := $(TBB_PATH)/examples/parallel_for/tachyon/src
-
-#Absolute paths
-TBB_FULL_PATH := $(realpath $(TBB_PATH))
-TBB_COMMON_FULL_PATH := $(realpath $(TBB_PATH))/examples/common
-
-#The path is setup for binary package
-ifeq (x86,$(TARGET_ARCH_ABI))
-TBB_LIBRARY_ARCH_PATH:=
-else
-TBB_LIBRARY_ARCH_PATH:=/$(TARGET_ARCH_ABI)
-endif
-#Override if needed
-TBB_LIBRARY_FULL_PATH ?= $(TBB_FULL_PATH)/lib/android$(TBB_LIBRARY_ARCH_PATH)
-
-ifeq (,$(wildcard $(TBB_LIBRARY_FULL_PATH)/libtbb.so))
-  $(info Skipping $(TARGET_ARCH_ABI) target. $(TBB_LIBRARY_FULL_PATH)/libtbb.so library not found. Copy $(TARGET_ARCH_ABI) version of library to $(TBB_LIBRARY_FULL_PATH) folder to enable its build.)
-else
-
-include $(CLEAR_VARS)
-LOCAL_MODULE    := jni-engine
-LOCAL_SRC_FILES := jni/jni-engine.cpp $(TBB_PATH)/examples/common/gui/convideo.cpp $(SRC_PATH)/trace.tbb.cpp $(SRC_PATH)/pthread.cpp $(SRC_PATH)/tachyon_video.cpp $(SRC_PATH)/api.cpp $(SRC_PATH)/apigeom.cpp $(SRC_PATH)/apitrigeom.cpp $(SRC_PATH)/bndbox.cpp $(SRC_PATH)/box.cpp $(SRC_PATH)/camera.cpp $(SRC_PATH)/coordsys.cpp $(SRC_PATH)/cylinder.cpp $(SRC_PATH)/extvol.cpp $(SRC_PATH)/global.cpp $(SRC_PATH)/grid.cpp $(SRC_PATH)/imageio.cpp $(SRC_PATH)/imap.cpp $(SRC_PATH)/intersect.cpp $(SR [...]
-# Add -DMARK_RENDERING_AREA=1 to see graphical threads work
-# Add -DTBB_USE_GCC_BUILTINS to use gcc atomics
-LOCAL_CFLAGS += -std=c++11 -fexceptions -Wdeprecated-declarations  -I$(TBB_FULL_PATH)/include -I$(TBB_COMMON_FULL_PATH) -I$(realpath $(SRC_PATH)) 
-LOCAL_LDLIBS := -lm -llog -ljnigraphics -L./ -L$(TBB_LIBRARY_FULL_PATH) 
-LOCAL_SHARED_LIBRARIES += libtbb 
-include $(BUILD_SHARED_LIBRARY)
-
-LOCAL_PATH := $(TBB_LIBRARY_FULL_PATH)
-include $(CLEAR_VARS)
-LOCAL_MODULE    := libtbb
-LOCAL_SRC_FILES := libtbb.so
-include $(PREBUILT_SHARED_LIBRARY)
-
-endif
diff --git a/examples/parallel_for/tachyon/android/jni/Application.mk b/examples/parallel_for/tachyon/android/jni/Application.mk
deleted file mode 100644
index d5aef90..0000000
--- a/examples/parallel_for/tachyon/android/jni/Application.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-#
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-#
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
-
-APP_ABI:= all
-APP_STL:=gnustl_shared
-APP_GNUSTL_FORCE_CPP_FEATURES := exceptions rtti
-APP_PLATFORM:=android-15
-NDK_TOOLCHAIN_VERSION:=4.6
diff --git a/examples/parallel_for/tachyon/android/jni/jni-engine.cpp b/examples/parallel_for/tachyon/android/jni/jni-engine.cpp
deleted file mode 100644
index e9c38c7..0000000
--- a/examples/parallel_for/tachyon/android/jni/jni-engine.cpp
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
-*/
-
-/*
-    The original source for this example is
-    Copyright (c) 1994-2008 John E. Stone
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-    3. The name of the author may not be used to endorse or promote products
-       derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
-    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
- */
-
-#include <jni.h>
-#include <android/bitmap.h>
-#include <pthread.h>
-#include <signal.h>
-
-#include "utility/utility.h"
-#include "tachyon_video.h"
-#include "tbb/tick_count.h"
-#include "tbb/task_scheduler_init.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <math.h>
-
-#include <android/log.h>
-#define  LOG_INFO(...)  __android_log_print(ANDROID_LOG_INFO,"tachyon",__VA_ARGS__)
-#define  LOG_ERROR(...)  __android_log_print(ANDROID_LOG_ERROR,"tachyon",__VA_ARGS__)
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "types.h"
-#include "api.h"       /* The ray tracing library API */
-#include "parse.h"     /* Support for my own file format */
-#include "ui.h"
-#include "util.h"
-
-SceneHandle global_scene;
-int global_xsize;     /*  size of graphic image rendered in window (from hres, vres)  */
-int global_ysize;
-int global_xwinsize;  /*  size of window (may be larger than above)  */
-int global_ywinsize;
-bool global_usegraphics;
-char* global_window_title;
-static long startTime=0;
-static volatile long elapsedTime=0;
-static volatile bool isCancelled=false;
-static volatile bool isPaused=false;
-
-bool silent_mode = false; /* silent mode */
-
-class tachyon_video *video = 0;
-
-typedef struct {
-    int foundfilename;      /* was a model file name found in the args? */
-    char filename[1024];    /* model file to render */
-    int useoutfilename;     /* command line override of output filename */
-    char outfilename[1024]; /* name of output image file */
-    int verbosemode;        /* verbose flags */
-    int antialiasing;       /* antialiasing setting */
-    int displaymode;        /* display mode */
-    int boundmode;          /* bounding mode */
-    int boundthresh;        /* bounding threshold */
-    int usecamfile;         /* use camera file */
-    char camfilename[1024]; /* camera filename */
-} argoptions;
-
-void initoptions(argoptions * opt) {
-    memset(opt, 0, sizeof(argoptions));
-    opt->foundfilename = -1;
-    opt->useoutfilename = -1;
-    opt->verbosemode = -1;
-    opt->antialiasing = -1;
-    opt->displaymode = -1;
-    opt->boundmode = -1;
-    opt->boundthresh = -1;
-    opt->usecamfile = -1;
-}
-
-int CreateScene(argoptions &opt) {
-    char *filename;
-
-    global_scene = rt_newscene();
-    rt_initialize();
-
-    //filename = "/mnt/sdcard/tachyon/data.dat";
-    filename = opt.filename;
-    LOG_INFO("CreateScene: data file name is %s", filename);
-
-    LOG_INFO("Readmodel");
-    if (readmodel(filename, global_scene) != 0) {
-        LOG_ERROR("Parser returned a non-zero error code reading %s\n", filename);
-        LOG_ERROR("Aborting Render...\n");
-        rt_finalize();
-        return -1;
-    }
-    LOG_INFO("Readmodel done");
-
-    scenedef *scene = (scenedef *) global_scene;
-
-    //scene->hres and scene->yres are taken from display properties in *initBitmap() function
-    scene->hres = global_xwinsize = global_xsize;
-    scene->vres = global_ywinsize = global_ysize;
-    LOG_INFO("CreateScene: global_xsize=%d global_ysize=%d", global_xsize, global_ysize);
-
-    return 0;
-}
-
-extern unsigned int * g_pImg;
-
-void* example_main(void *filename) {
-    try {
-        LOG_INFO("initoptions");
-        argoptions opt;
-        initoptions(&opt);
-        strcpy(opt.filename, (char*) filename);
-        LOG_INFO("initoptions done");
-
-        LOG_INFO("CreateScene");
-        if ((CreateScene(opt) != 0))
-            return NULL;
-        LOG_INFO("CreateScene done");
-
-        LOG_INFO("tachyon video");
-        tachyon_video tachyon;
-        LOG_INFO("tachyon video init_console");
-        tachyon.init_console();
-        LOG_INFO("tachyon video init_window");
-
-        tachyon.init_window(global_xsize, global_ysize);
-        LOG_INFO("tachyon video init_window done");
-        if(  !tachyon.running )
-            return NULL;
-        LOG_INFO("tachyon video done");
-
-        video = &tachyon;
-        //Exit from the while via GUI "Exit" menu.
-        for(;;) {
-            LOG_INFO("main_loop() start");
-            elapsedTime = 0;
-            startTime=time(NULL);
-            isCancelled=false;
-            if (video)video->running = true;
-            memset(g_pImg, 0, 4 * global_xsize * global_ysize);
-            tachyon.main_loop();
-            elapsedTime = (long)(time(NULL)-startTime);
-            video->running=false;
-            //The timer to restart drawing then it is complete.
-            int timer=5;
-            do{
-                sleep(1);
-            }while( (  isPaused || !isCancelled && (timer--)>0 ) );
-            LOG_INFO("main_loop() done");
-        }
-        return NULL;
-    } catch (std::exception& e) {
-        LOG_ERROR("An error occurred. Error text is %s", e.what());
-        return NULL;
-    }
-}
-
-static int fill_rect(void* pixels, int size) {
-    if( pixels && g_pImg ){
-        memcpy(pixels, g_pImg, size);
-        if (video->running)
-            elapsedTime=(long)(time(NULL)-startTime);
-        return 0;
-    }else{
-        return -1;
-    }
-}
-
-extern "C" JNIEXPORT jlong JNICALL Java_com_intel_tbb_example_tachyon_tachyonView_getElapsedTime(
-        JNIEnv * env) {
-    return  elapsedTime;
-}
-
-extern "C" JNIEXPORT void JNICALL Java_com_intel_tbb_example_tachyon_tachyonView_initBitmap(
-        JNIEnv * env, jobject obj, jobject bitmap, jint x_size, jint y_size,
-        jint number_of_threads, jstring filename) {
-    LOG_INFO("initBitmap start");
-    static pthread_t handle;
-    char buf[5];
-    LOG_INFO("video");
-    //TBB_NUM_THREADS is reading somewhere inside C++ common code
-    if (number_of_threads >= 0 && number_of_threads < 256) {
-        snprintf(buf, 4, "%d", number_of_threads);
-        setenv("TBB_NUM_THREADS", buf, 1);
-    }
-    LOG_INFO("TBB_NUM_THREADS=%s",getenv ("TBB_NUM_THREADS"));
-    //Cancel if we are in the middle of the painting
-    isCancelled = true;
-    if (video)
-        video->running = false;
-    if (!handle) {
-        LOG_INFO("Starting native thread");
-        pthread_attr_t s;
-        pthread_attr_init(&s);
-        //adjusting picture to physical resolution
-        global_xsize = x_size;
-        global_ysize = y_size;
-        char const* fn = env->GetStringUTFChars(filename, NULL);
-        LOG_INFO("fn=%s",fn);
-        //Starting example_main and returning back to GUI
-        pthread_create(&handle, NULL, &example_main, (void*) fn);
-        LOG_INFO("Thread handle is %ld", handle);
-    }
-}
-
-extern "C" JNIEXPORT jint JNICALL Java_com_intel_tbb_example_tachyon_tachyonView_renderBitmap(
-        JNIEnv * env, jobject obj, jobject bitmap, jint size) {
-    AndroidBitmapInfo info;
-    void* pixels;
-    int ret;
-
-    //Getting bitmap to fill
-    if ((ret = AndroidBitmap_getInfo(env, bitmap, &info)) < 0) {
-        LOG_ERROR("AndroidBitmap_getInfo() returned %d", ret);
-        return ret;
-    }
-
-    //Locking bitmap to fill
-    if ((ret = AndroidBitmap_lockPixels(env, bitmap, &pixels)) < 0) {
-        LOG_ERROR("AndroidBitmap_lockPixels() returned %d", ret);
-    }
-
-    //Filling the bitmap
-    ret = fill_rect(pixels, size);
-
-    //Unlocking the bitmap
-    AndroidBitmap_unlockPixels(env, bitmap);
-    return ret;
-}
-
-extern "C" JNIEXPORT void JNICALL Java_com_intel_tbb_example_tachyon_tachyon_setPaused(
-        JNIEnv * env, jobject obj, jboolean paused) {
-    if(video)video->pausing = isPaused = paused;
-    return;
-}
diff --git a/examples/parallel_for/tachyon/android/project.properties b/examples/parallel_for/tachyon/android/project.properties
deleted file mode 100644
index a3ee5ab..0000000
--- a/examples/parallel_for/tachyon/android/project.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-# This file is automatically generated by Android Tools.
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-#
-# This file must be checked in Version Control Systems.
-#
-# To customize properties used by the Ant build system edit
-# "ant.properties", and override values to adapt the script to your
-# project structure.
-#
-# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
-#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
-
-# Project target.
-target=android-17
diff --git a/examples/parallel_for/tachyon/android/res/menu/main_screen_menu.xml b/examples/parallel_for/tachyon/android/res/menu/main_screen_menu.xml
deleted file mode 100644
index 8d1d4e4..0000000
--- a/examples/parallel_for/tachyon/android/res/menu/main_screen_menu.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<menu
-    xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:id="@+id/thread0"
-        android:title="Auto" android:showAsAction="ifRoom"/>
-    <item android:id="@+id/thread1"
-        android:title="1 thread" android:showAsAction="ifRoom"/>
-    <item android:id="@+id/thread2"
-        android:title="2 threads" android:showAsAction="ifRoom"/>
-    <item android:id="@+id/thread4"
-        android:title="4 threads" android:showAsAction="ifRoom"/>
-    <item android:id="@+id/thread8"
-        android:title="8 threads" android:showAsAction="ifRoom"/>
-    <item android:id="@+id/exit"
-        android:title="Exit" android:showAsAction="ifRoom"/>
-</menu>
diff --git a/examples/parallel_for/tachyon/android/res/values/strings.xml b/examples/parallel_for/tachyon/android/res/values/strings.xml
deleted file mode 100644
index f3514bb..0000000
--- a/examples/parallel_for/tachyon/android/res/values/strings.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">Tachyon demo</string>
-</resources>
diff --git a/examples/parallel_for/tachyon/android/src/com/intel/tbb/example/tachyon/tachyon.java b/examples/parallel_for/tachyon/android/src/com/intel/tbb/example/tachyon/tachyon.java
deleted file mode 100644
index c3aa24a..0000000
--- a/examples/parallel_for/tachyon/android/src/com/intel/tbb/example/tachyon/tachyon.java
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
-*/
-
-/*
- The original source for this example is
- Copyright (c) 1994-2008 John E. Stone
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. The name of the author may not be used to endorse or promote products
- derived from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
- OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-*/
-
-package com.intel.tbb.example.tachyon;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Timer;
-import java.util.TimerTask;
-
-import android.app.ActionBar;
-import android.app.Activity;
-import android.os.Bundle;
-import android.os.Environment;
-import android.content.Context;
-import android.content.res.AssetManager;
-import android.util.DisplayMetrics;
-import android.util.Log;
-import android.view.Gravity;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup.LayoutParams;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Rect;
-
-public class tachyon extends Activity {
-    private tachyonView myView;
-    private int W;
-    private int H;
-    private String fileOnSDcard; 
-    private float currentYMenuPosition=(float) 1e5;
-    private float previousYMenuPosition=0;
-    public int number_of_threads=0;
-    public static TextView txtThreadNumber;
-    public static TextView txtElapsedTime;
-    
-    private static native void setPaused(boolean paused);
-
-    @SuppressWarnings("deprecation")
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        try {
-            fileOnSDcard = Environment.getExternalStorageDirectory()
-                    .getPath() + "/tachyon/data.dat";
-            Log.i("tachyon", "Data file name is " + fileOnSDcard);
-            File dataFile = new File(fileOnSDcard);
-            if (dataFile.exists()) {
-                dataFile.delete();
-            }
-            if (!dataFile.exists()) {
-                AssetManager assetManager = getAssets();
-                InputStream inputFile = assetManager.open("data.dat");
-                dataFile.getParentFile().mkdirs();
-                dataFile.createNewFile();
-                OutputStream outputFile = new FileOutputStream(fileOnSDcard);
-                byte[] buffer = new byte[10000];
-                int bytesRead;
-                while ((bytesRead = inputFile.read(buffer)) != -1)
-                    outputFile.write(buffer, 0, bytesRead);
-                inputFile.close();
-                inputFile = null;
-                outputFile.flush();
-                outputFile.close();
-                outputFile = null;
-            }
-            DisplayMetrics displayMetrics = new DisplayMetrics();
-            getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
-            ActionBar actionBar = getActionBar();
-            actionBar.hide();
-
-            H = displayMetrics.heightPixels;
-            W = displayMetrics.widthPixels;
-            Log.i("tachyon", "displayMetrics.heightPixels: " + H);
-            Log.i("tachyon", "displayMetrics.widthPixels: " + W);
-
-            //uncomment to override scene size 
-            int sceneWidth = 400;
-            float ratio = W>H?(float)(W)/H:(float)(H)/W;
-            W = sceneWidth;
-            H = (int) (W/ratio);
-
-            Log.i("tachyon", "Scene size is " + W + "*" + H );
-
-        } catch (Exception e) {
-            Log.e("tachyon", "Exception in file copy: " + e.getMessage());
-        }
-        myView = new tachyonView(this, W, H, fileOnSDcard);
-        setContentView(myView);
-        
-        LinearLayout llThreadNumber = new LinearLayout(this);
-        txtThreadNumber = new TextView(this);
-        txtThreadNumber.setText("");
-        txtThreadNumber.setTextColor(0xFF00FF00);
-        txtThreadNumber.setScaleX(1);
-        txtThreadNumber.setScaleY(1);
-        txtThreadNumber.setPadding(10, 10, 10, 10);
-        llThreadNumber.setGravity(Gravity.TOP | Gravity.CENTER);
-        llThreadNumber.addView(txtThreadNumber);
-        this.addContentView(llThreadNumber,
-                    new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
-        LinearLayout llElapsedTime = new LinearLayout(this);
-        txtElapsedTime = new TextView(this);
-        txtElapsedTime.setText("");
-        txtElapsedTime.setTextColor(0xFFFF0000);
-        txtElapsedTime.setScaleX(2);
-        txtElapsedTime.setScaleY(2);
-        txtElapsedTime.setPadding(10, 10, 40, 10);
-        llElapsedTime.setGravity(Gravity.TOP | Gravity.RIGHT);
-        llElapsedTime.addView(txtElapsedTime);
-        this.addContentView(llElapsedTime,
-                    new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
-    }
-
-    public boolean onCreateOptionsMenu(Menu menu) {
-        MenuInflater inflater = getMenuInflater();
-        inflater.inflate(R.menu.main_screen_menu, menu);
-        return true;
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent event)
-    {
-        currentYMenuPosition = event.getY();
-        if(event.getAction()==MotionEvent.ACTION_UP ){
-        ActionBar actionBar = getActionBar();
-            if (previousYMenuPosition < currentYMenuPosition){
-                actionBar.show();
-            }else{
-                actionBar.hide();
-            }
-            previousYMenuPosition = currentYMenuPosition;
-            return true;
-        }
-        return super.onTouchEvent(event);
-    }
-    
-    @Override
-    public void onPause() {
-        super.onPause();
-        Log.i("tachyon", "onPause working" );
-        setPaused(true);
-    }
-    
-    @Override
-    public void onResume() {
-        super.onResume(); 
-        Log.i("tachyon", "onResume working" );
-        setPaused(false);
-    }
-    
-    public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case R.id.thread0: {
-                number_of_threads = 0;
-                break;
-            }
-            case R.id.thread1: {
-                number_of_threads = 1;
-                break;
-            }
-            case R.id.thread2: {
-                number_of_threads = 2;
-                break;
-            }
-            case R.id.thread4: {
-                number_of_threads = 4;
-                break;
-            }
-            case R.id.thread8: {
-                number_of_threads = 8;
-                break;
-            }
-            case R.id.exit: {
-                Log.i("tachyon", "Exiting...");
-                System.exit(0);
-            }
-        }
-        Log.i("tachyon", "Starting in " + number_of_threads + " Thread(s)");
-        myView.initNative(number_of_threads);
-        return true;
-    }
-
-    static {
-        System.loadLibrary("gnustl_shared");
-        System.loadLibrary("tbb");
-        System.loadLibrary("jni-engine");
-    }
-}
-
-class tachyonView extends View {
-    private Bitmap myBitmap;
-    private Rect targetRect;
-    private TimerTask myRefreshTask;
-    private static Timer myRefreshTimer;
-    private int W;
-    private int H;
-    private String filename;
-    public static String strCntDisplay;
-    public static String strFpsDisplay;
-    
-    private static native int renderBitmap(Bitmap bitmap, int size);
-
-    private static native void initBitmap(Bitmap bitmap, int x_size,
-            int y_size, int number_of_threads, String fileOnSDcard);
-
-    private static native void pressButton(int x, int y);
-
-    private static native long getElapsedTime();
-
-    public void initNative(int number_of_threads) {
-        initBitmap(myBitmap, W, H, number_of_threads, filename);
-    }
-
-    public tachyonView(Context context, int widthPixels, int heightPixels, String fileOnSDcard) {
-        super(context);
-
-        //Landscape support only: H must be less than W
-        //In case application is started on locked phone portrait layout comes 
-        //to the constructor even landscape is set in the manifest
-        W = widthPixels>heightPixels?widthPixels:heightPixels;
-        H = widthPixels>heightPixels?heightPixels:widthPixels;
-        filename=fileOnSDcard;
-        myBitmap = Bitmap.createBitmap(W, H, Bitmap.Config.ARGB_8888);
-        targetRect = new Rect();
-        initBitmap(myBitmap, W, H, 0, filename);
-
-    }
-
-    @Override
-    protected void onDraw(Canvas canvas) {
-        //Write bitmap buffer
-        if( renderBitmap(myBitmap, 4 * H * W) == 0 ){
-            targetRect.right = canvas.getWidth();
-            targetRect.bottom = canvas.getHeight();
-            //Draw bitmap buffer
-            canvas.drawBitmap(myBitmap, null, targetRect, null);
-            tachyon parent = (tachyon)getContext();
-            long elapsedTime=getElapsedTime();
-            if ( parent.number_of_threads > 0 ){
-                parent.getWindow().setTitle(parent.number_of_threads + " Thread(s): " + elapsedTime + " s.");
-                tachyon.txtThreadNumber.setText(parent.number_of_threads + " thread(s)");
-                tachyon.txtElapsedTime.setText(elapsedTime + " secs");
-            }else{
-                parent.getWindow().setTitle("HW concurrency: " + elapsedTime + " s.");
-                tachyon.txtThreadNumber.setText("Auto HW concurrency");
-                tachyon.txtElapsedTime.setText(elapsedTime + " secs");
-            }
-        }
-        invalidate();
-        return;
-    }
-}
diff --git a/examples/parallel_for/tachyon/index.html b/examples/parallel_for/tachyon/index.html
deleted file mode 100644
index 9794d97..0000000
--- a/examples/parallel_for/tachyon/index.html
+++ /dev/null
@@ -1,220 +0,0 @@
-<HTML>
-<BODY>
-
-<H2>Overview</H2>
-Parallel raytracer / renderer that demonstrates the use of parallel_for.
-
-<P><I>
-This example includes software developed by John E. Stone.  See
-<A HREF=#copyright>here</A> for copyright information.
-</I></P>
-
-<P>
-This example is a 2-D raytracer/renderer that visually shows different parallel scheduling
-methods and their resulting speedup.  The code was parallelized by speculating
-that each pixel could be rendered in parallel.  The resulting parallel code was
-then checked for correctness by using Intel® Thread Checker, which
-pointed out where synchronization was needed.  Minimal synchronization was then
-inserted into the parallel code.  The resulting parallel code exhibits good speedup.
-</P>
-
-<P>
-The following versions of the example are provided:
-<DL>
-<DT>serial
-<DD>Original sequential version.
-<DT>tbb1d
-<DD>Parallel version that uses Intel® Threading Building Blocks (Intel® TBB) and blocked_range to parallelize
-	over tasks that are groups of scan-lines.
-    <UL>
-    <LI>By default, this version uses one thread per available processor.  To change this
-	default, set the TBB_NUM_THREADS environment variable to the desired number of threads before running.
-    <LI>This version uses the preview feature: auto_range_partitioner.  No grain size is provided to blocked_range.
-        The blocked_range class uses a default grain size of 1 when none is provided.  However, the auto_range_partitioner 
-        controls the amount of range splitting dynamically at runtime, resulting in sub-ranges of varying sizes.  
-    </UL>
-<DT>tbb
-<DD>Parallel version that uses Intel TBB and blocked_range2d to parallelize
-	over tasks that are rectangular sub-areas.
-    <UL>
-    <LI>By default, this version uses one thread per available processor.  To change this
-	default, set the TBB_NUM_THREADS environment variable to the desired number of threads before running.
-    <LI>This version uses a reasonable task grain size by default.  To change this default,
-	set the TBB_GRAINSIZE environment variable to the desired grain size before running.
-	The grain size corresponds to the number of pixels (in the X or Y direction, for a
-	rectangular sub-area) in each parallel task.
-    </UL>
-</DL>
-</P>
-
-<H2>Files</H2>
-<DL>
-<DT><A HREF="src/main.cpp">src/main.cpp</A>
-<DD>Main program which parses command line options and runs the raytracer.
-<DT><A HREF="src/tachyon_video.cpp">src/tachyon_video.cpp</A>
-<DD>Source code for GUI interfaces.
-<DT><A HREF="src/trace.serial.cpp">src/trace.serial.cpp</A>
-<DD>Source code for original sequential version of example.
-<DT><A HREF="src/trace.tbb1d.cpp">src/trace.tbb1d.cpp</A>
-<DD>Source code for Intel TBB blocked_range (scan-line) version of example.
-<DT><A HREF="src/trace.tbb.cpp">src/trace.tbb.cpp</A>
-<DD>Source code for Intel TBB blocked_range2d (rectangular sub-area) version of example.
-<DT>(src/*.cpp)
-<DD>Remainder of source code for example.
-<DT>(src/*.h)
-<DD>Remainder of include files for example.
-<DT><A HREF="Makefile">Makefile</A>
-<DD>Makefile for building example.
-</DL>
-
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="src">src</A>
-<DD>Contains source code and include files for the example.
-<DT><A HREF="dat">dat</A>
-<DD>Contains data sets for running the example.
-<DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2010 workspace for building and running the 
-    example (Windows* systems only).<DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example (OS X* 
-    systems only).</DL>
-<A HREF="android">android</A>
-<DD>Contains Eclipse* IDE workspace for building and running the example on Android* system. JNI part needs to be compiled by Android NDK.</DL> 
-
-
-<H2>To Build</H2>
-General build directions can be found <A HREF=../../index.html#build>here</A>.
-
-<P>
-For Windows* systems Microsoft* Visual Studio* projects are provided for each of the above 
-    example versions.
-</P>
-
-<P>
-The Makefile supports the following build targets (in addition to the <A HREF=../../index.html#build>general</A> ones).
-Here, <<I>version</I>> is one of the above versions of the example, i.e., {serial, tbb1d, tbb}.
-</P>
-<DL>
-<DT><TT>make <<I>version</I>>[_debug]</TT>
-<DD>Build and run a single version (release or debug).
-    Equivalent to 'make build_<<I>version</I>>[_debug] run_<<I>version</I>>'.
-<DT><TT>make build_<<I>version</I>>[_debug]</TT>
-<DD>Compile and link a single version (release or debug).
-    The resulting executable is left in the directory for the example.
-<DT><TT>make run_<<I>version</I>></TT>
-<DD>Run a single version previously produced by one of the above commands.
-<DT><TT>make [(above options or targets)] DATASET={820spheres, balls, balls3, lattice, model2,
-    teapot, trypsin4pti}</TT>
-<DD>Build and run as above, but run with the specified data set.
-<DT><TT>make [(above options or targets)] ARGS=-D</TT>
-<DD>Build and run as above, but run with disabled run-time display updating for use in making performance measurements
-    <I>(strongly recommended when measuring performance or scalability; see note below)</I>.
-<DT><TT>make [(above options or targets)] UI={con, gdi, d2d, x, mac}</TT>
-<DD>Build and run as usual, but build with the specified GUI driver: console, GDI+*, Direct2D*, X11, or OpenGL*
-	(see the description of the <A HREF=../../common/index.html>common GUI code</A>
-	for more information on available graphics support).
-    For Linux* and OS X* systems, the best available driver is detected automatically by the Makefile.
-    For Windows* systems, UI=gdi is the default GUI driver; compiling with UI=d2d may offer superior
-	performance, but can only be used if the Microsoft* DirectX* SDK is installed on your system.
-    Use UI=con to build without the GUI for use in making performance measurements
-	<I>(strongly recommended when measuring performance or scalability; see note below)</I>.
-<DT><TT>make [(above options or targets)] XARCH=x64</TT>
-<DD>Build and run as above, but
-    also specify XARCH=x64 (or XARCH=AMD64 for older compilers) when building the example on Windows* as a 64-bit binary.
-<DT><TT>make [(above options or targets)] DDLIB_DIR=<<I>specify path to library directory of Direct Draw* SDK here</I>></TT>
-<DD>If you experience ddraw.lib linking problems, specify the correct library directory via this option.
-</DL>
-
-<H2>Usage</H2>
-Building via the above make commands, or via Visual Studio projects on Windows* systems, produces executable files
-named <TT>tachyon.<<I>version</I>>.exe</TT>.  To run these executables directly, use one or more of the following commands.
-<DL>
-<DT><TT>tachyon.<<I>version</I>> <I>-h</I></TT>
-<DD>Prints the help for command line options
-<DT><TT>tachyon.<<I>version</I>> [<I>dataset</I>=value] [<I>boundthresh</I>=value] [<I>no-display-updating</I>] [<I>nobounding</I>] [<I>silent</I>]</TT>
-<DT><TT>tachyon.<<I>version</I>> [<I>dataset</I> [<I>boundthresh</I>]] [<I>no-display-updating</I>] [<I>nobounding</I>] [<I>silent</I>]</TT> 
-<DD><I>dataset</I> is the path/name of one of the *.dat files in the <A HREF="dat">dat</A> directory for the example.<BR>
-    <I>boundthresh</I> is a bounding threshold value.<BR>
-    <I>no-display-updating</I> - disable run-time display updating.<BR>
-    <I>no-bounding</I> - disable bounding technique.<BR>
-    <I>silent</I> - no output except elapsed time.<BR>
-<DT><TT>tachyon.<<I>version</I>> [<I>dataset</I>] [<I>no-display-updating</I>]</TT>
-<DD>Run this version (release or debug), but run with disabled run-time display updating
-    for use in making performance measurements
-    <I>(strongly recommended when measuring performance or scalability; see note below)</I>.
-<DT>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
-<DD>Build a <I>debug</I> version of the <TT>tbb</TT> example with the GUI turned off
-    (e.g., <TT>make UI=con tbb_debug</TT>; see also the build directions above).
-    <BR>Run it with a small dataset, e.g., <TT>tachyon.tbb.exe dat/820spheres.dat no-display-updating</TT>.
-</DL>
-
-<H2>Keys</H2>
-While running with the GUI display turned on the following keyboard keys can be used:
-<DL>
-<DT><TT>ESC</TT>
-<DD>Interrupt the rendering and exit
-<DT><TT><I>Any key</I></TT>
-<DD>Enable repetition of rendering after the pause. Press ESC to stop the application.
-<DT><TT>Space</TT>
-<DD>Toggle run-time display updating mode while rendering (see no-display-updating above).
-<DT><TT>p</TT>
-<DD>Holds the picture after rendering completion. Press 'p' again to continue.
-</DL>
-
-<H2>Notes</H2>
-<UL>
-<LI>While running with the GUI display turned on should yield reasonable performance in most cases, <I>running with the GUI
-    display turned off is strongly recommended</I> in order to demonstrate the full performance and scalability of the example.
-</UL>
-
-<a name="copyright"/>
-
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-
-<I>
-<P>
-The original source for this example is
-Copyright (c) 1994-2008 John E. Stone
-All rights reserved.
-</P>
-
-<P>
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-<OL>
-<LI>Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-<LI>Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-<LI>The name of the author may not be used to endorse or promote products
-   derived from this software without specific prior written permission.
-</OL>
-</P>
-
-<P>
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
-OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-</P>
-</I>
-
-</BODY>
-</HTML>
diff --git a/examples/parallel_for/tachyon/msvs/resource.h b/examples/parallel_for/tachyon/msvs/resource.h
index 5f70f0c..40cdc5a 100644
--- a/examples/parallel_for/tachyon/msvs/resource.h
+++ b/examples/parallel_for/tachyon/msvs/resource.h
@@ -1,3 +1,23 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
 #define IDC_MYICON                      2
 #define IDD_GUI    			102
 #define IDS_APP_TITLE                   103
diff --git a/examples/parallel_for/tachyon/msvs/tachyon.serial.vcxproj b/examples/parallel_for/tachyon/msvs/tachyon.serial.vcxproj
index f465221..603d75b 100644
--- a/examples/parallel_for/tachyon/msvs/tachyon.serial.vcxproj
+++ b/examples/parallel_for/tachyon/msvs/tachyon.serial.vcxproj
@@ -1,385 +1,393 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="DDDebug|Win32">
-      <Configuration>DDDebug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DDDebug|x64">
-      <Configuration>DDDebug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DDRelease|Win32">
-      <Configuration>DDRelease</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DDRelease|x64">
-      <Configuration>DDRelease</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}</ProjectGuid>
-    <RootNamespace>tachyon.serial</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <Import Project="..\..\..\common\toolset.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <InterproceduralOptimization>true</InterproceduralOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <InterproceduralOptimization>true</InterproceduralOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <InterproceduralOptimization>true</InterproceduralOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <InterproceduralOptimization>true</InterproceduralOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\serial\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\serial\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\serial\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\serial\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\serial\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\serial\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\serial\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\serial\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\serial\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\serial\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\serial\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\serial\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\serial\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\serial\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\serial\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\serial\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">false</LinkIncremental>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>false</WholeProgramOptimization>
-      <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>false</WholeProgramOptimization>
-      <PreprocessorDefinitions>WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <PreprocessorDefinitions>WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">
-    <ClCompile>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalLibraryDirectories>$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <PreprocessorDefinitions>WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalLibraryDirectories>$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>false</WholeProgramOptimization>
-      <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalLibraryDirectories>$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>false</WholeProgramOptimization>
-      <PreprocessorDefinitions>WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalLibraryDirectories>$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ProjectReference Include="tachyon.vcxproj">
-      <Project>{924517df-2b6a-47d5-8a11-cc247cc4d810}</Project>
-      <Private>false</Private>
-      <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
-      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="..\src\trace.serial.cpp" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DDDebug|Win32">
+      <Configuration>DDDebug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DDDebug|x64">
+      <Configuration>DDDebug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DDRelease|Win32">
+      <Configuration>DDRelease</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DDRelease|x64">
+      <Configuration>DDRelease</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}</ProjectGuid>
+    <RootNamespace>tachyon.serial</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <InterproceduralOptimization>true</InterproceduralOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <InterproceduralOptimization>true</InterproceduralOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <InterproceduralOptimization>true</InterproceduralOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <InterproceduralOptimization>true</InterproceduralOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\serial\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\serial\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\serial\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\serial\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\serial\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\serial\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\serial\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\serial\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\serial\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\serial\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\serial\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\serial\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\serial\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\serial\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\serial\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\serial\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <PreprocessorDefinitions>WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <PreprocessorDefinitions>WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">
+    <ClCompile>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalLibraryDirectories>$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <PreprocessorDefinitions>WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalLibraryDirectories>$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalLibraryDirectories>$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <PreprocessorDefinitions>WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalLibraryDirectories>$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ProjectReference Include="tachyon.vcxproj">
+      <Project>{924517df-2b6a-47d5-8a11-cc247cc4d810}</Project>
+      <Private>false</Private>
+      <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
+      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\trace.serial.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/examples/parallel_for/tachyon/msvs/tachyon.sln b/examples/parallel_for/tachyon/msvs/tachyon.sln
index 7c1b076..da86777 100644
--- a/examples/parallel_for/tachyon/msvs/tachyon.sln
+++ b/examples/parallel_for/tachyon/msvs/tachyon.sln
@@ -1,92 +1,92 @@
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tachyon.tbb", "tachyon.tbb.vcxproj", "{6E9B1702-78E0-4D64-B771-8B274D963B58}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tachyon.common", "tachyon.vcxproj", "{924517DF-2B6A-47D5-8A11-CC247CC4D810}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tachyon.serial", "tachyon.serial.vcxproj", "{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tachyon.tbb1d", "tachyon.tbb1d.vcxproj", "{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		_GDI Release|Win32 = _GDI Release|Win32
-		_GDI Release|x64 = _GDI Release|x64
-		DD Debug|Win32 = DD Debug|Win32
-		DD Debug|x64 = DD Debug|x64
-		DD Release|Win32 = DD Release|Win32
-		DD Release|x64 = DD Release|x64
-		GDI Debug|Win32 = GDI Debug|Win32
-		GDI Debug|x64 = GDI Debug|x64
-		Description = Tachyon ray-tracer example
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|Win32.ActiveCfg = Release|Win32
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|Win32.Build.0 = Release|Win32
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|x64.ActiveCfg = Release|x64
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|x64.Build.0 = Release|x64
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|Win32.ActiveCfg = DDDebug|Win32
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|Win32.Build.0 = DDDebug|Win32
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|x64.ActiveCfg = DDDebug|x64
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|x64.Build.0 = DDDebug|x64
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|Win32.ActiveCfg = DDRelease|Win32
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|Win32.Build.0 = DDRelease|Win32
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|x64.ActiveCfg = DDRelease|x64
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|x64.Build.0 = DDRelease|x64
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|Win32.ActiveCfg = Debug|Win32
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|Win32.Build.0 = Debug|Win32
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|x64.ActiveCfg = Debug|x64
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|x64.Build.0 = Debug|x64
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|Win32.ActiveCfg = Release|Win32
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|Win32.Build.0 = Release|Win32
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|x64.ActiveCfg = Release|x64
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|x64.Build.0 = Release|x64
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|Win32.ActiveCfg = DDDebug|Win32
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|Win32.Build.0 = DDDebug|Win32
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|x64.ActiveCfg = DDDebug|x64
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|x64.Build.0 = DDDebug|x64
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|Win32.ActiveCfg = DDRelease|Win32
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|Win32.Build.0 = DDRelease|Win32
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|x64.ActiveCfg = DDRelease|x64
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|x64.Build.0 = DDRelease|x64
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|Win32.ActiveCfg = Debug|Win32
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|Win32.Build.0 = Debug|Win32
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|x64.ActiveCfg = Debug|x64
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|x64.Build.0 = Debug|x64
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|Win32.ActiveCfg = Release|Win32
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|Win32.Build.0 = Release|Win32
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|x64.ActiveCfg = Release|x64
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|x64.Build.0 = Release|x64
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|Win32.ActiveCfg = DDDebug|Win32
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|Win32.Build.0 = DDDebug|Win32
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|x64.ActiveCfg = DDDebug|x64
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|x64.Build.0 = DDDebug|x64
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|Win32.ActiveCfg = DDRelease|Win32
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|Win32.Build.0 = DDRelease|Win32
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|x64.ActiveCfg = DDRelease|x64
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|x64.Build.0 = DDRelease|x64
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|Win32.ActiveCfg = Debug|Win32
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|Win32.Build.0 = Debug|Win32
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|x64.ActiveCfg = Debug|x64
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|x64.Build.0 = Debug|x64
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release|Win32.ActiveCfg = Release|Win32
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release|Win32.Build.0 = Release|Win32
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release|x64.ActiveCfg = Release|x64
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release|x64.Build.0 = Release|x64
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|Win32.ActiveCfg = DDDebug|Win32
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|Win32.Build.0 = DDDebug|Win32
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|x64.ActiveCfg = DDDebug|x64
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|x64.Build.0 = DDDebug|x64
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|Win32.ActiveCfg = DDRelease|Win32
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|Win32.Build.0 = DDRelease|Win32
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|x64.ActiveCfg = DDRelease|x64
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|x64.Build.0 = DDRelease|x64
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|Win32.ActiveCfg = Debug|Win32
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|Win32.Build.0 = Debug|Win32
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|x64.ActiveCfg = Debug|x64
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|x64.Build.0 = Debug|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tachyon.tbb", "tachyon.tbb.vcxproj", "{6E9B1702-78E0-4D64-B771-8B274D963B58}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tachyon.common", "tachyon.vcxproj", "{924517DF-2B6A-47D5-8A11-CC247CC4D810}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tachyon.serial", "tachyon.serial.vcxproj", "{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tachyon.tbb1d", "tachyon.tbb1d.vcxproj", "{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		_GDI Release|Win32 = _GDI Release|Win32
+		_GDI Release|x64 = _GDI Release|x64
+		DD Debug|Win32 = DD Debug|Win32
+		DD Debug|x64 = DD Debug|x64
+		DD Release|Win32 = DD Release|Win32
+		DD Release|x64 = DD Release|x64
+		GDI Debug|Win32 = GDI Debug|Win32
+		GDI Debug|x64 = GDI Debug|x64
+		Description = Tachyon ray-tracer example
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|Win32.ActiveCfg = Release|Win32
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|Win32.Build.0 = Release|Win32
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|x64.ActiveCfg = Release|x64
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|x64.Build.0 = Release|x64
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|Win32.ActiveCfg = DDDebug|Win32
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|Win32.Build.0 = DDDebug|Win32
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|x64.ActiveCfg = DDDebug|x64
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|x64.Build.0 = DDDebug|x64
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|Win32.ActiveCfg = DDRelease|Win32
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|Win32.Build.0 = DDRelease|Win32
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|x64.ActiveCfg = DDRelease|x64
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|x64.Build.0 = DDRelease|x64
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|Win32.Build.0 = Debug|Win32
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|x64.ActiveCfg = Debug|x64
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|x64.Build.0 = Debug|x64
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|Win32.ActiveCfg = Release|Win32
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|Win32.Build.0 = Release|Win32
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|x64.ActiveCfg = Release|x64
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|x64.Build.0 = Release|x64
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|Win32.ActiveCfg = DDDebug|Win32
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|Win32.Build.0 = DDDebug|Win32
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|x64.ActiveCfg = DDDebug|x64
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|x64.Build.0 = DDDebug|x64
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|Win32.ActiveCfg = DDRelease|Win32
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|Win32.Build.0 = DDRelease|Win32
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|x64.ActiveCfg = DDRelease|x64
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|x64.Build.0 = DDRelease|x64
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|Win32.Build.0 = Debug|Win32
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|x64.ActiveCfg = Debug|x64
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|x64.Build.0 = Debug|x64
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|Win32.ActiveCfg = Release|Win32
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|Win32.Build.0 = Release|Win32
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|x64.ActiveCfg = Release|x64
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|x64.Build.0 = Release|x64
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|Win32.ActiveCfg = DDDebug|Win32
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|Win32.Build.0 = DDDebug|Win32
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|x64.ActiveCfg = DDDebug|x64
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|x64.Build.0 = DDDebug|x64
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|Win32.ActiveCfg = DDRelease|Win32
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|Win32.Build.0 = DDRelease|Win32
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|x64.ActiveCfg = DDRelease|x64
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|x64.Build.0 = DDRelease|x64
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|Win32.Build.0 = Debug|Win32
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|x64.ActiveCfg = Debug|x64
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|x64.Build.0 = Debug|x64
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release|Win32.ActiveCfg = Release|Win32
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release|Win32.Build.0 = Release|Win32
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release|x64.ActiveCfg = Release|x64
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release|x64.Build.0 = Release|x64
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|Win32.ActiveCfg = DDDebug|Win32
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|Win32.Build.0 = DDDebug|Win32
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|x64.ActiveCfg = DDDebug|x64
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|x64.Build.0 = DDDebug|x64
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|Win32.ActiveCfg = DDRelease|Win32
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|Win32.Build.0 = DDRelease|Win32
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|x64.ActiveCfg = DDRelease|x64
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|x64.Build.0 = DDRelease|x64
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|Win32.Build.0 = Debug|Win32
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|x64.ActiveCfg = Debug|x64
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|x64.Build.0 = Debug|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/parallel_for/tachyon/msvs/tachyon.tbb.vcxproj b/examples/parallel_for/tachyon/msvs/tachyon.tbb.vcxproj
index c97a91a..086ebf7 100644
--- a/examples/parallel_for/tachyon/msvs/tachyon.tbb.vcxproj
+++ b/examples/parallel_for/tachyon/msvs/tachyon.tbb.vcxproj
@@ -1,437 +1,445 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="DDDebug|Win32">
-      <Configuration>DDDebug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DDDebug|x64">
-      <Configuration>DDDebug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DDRelease|Win32">
-      <Configuration>DDRelease</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DDRelease|x64">
-      <Configuration>DDRelease</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{6E9B1702-78E0-4D64-B771-8B274D963B58}</ProjectGuid>
-    <RootNamespace>tachyon.tbb</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <Import Project="..\..\..\common\toolset.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <InterproceduralOptimization>true</InterproceduralOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <InterproceduralOptimization>true</InterproceduralOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <InterproceduralOptimization>true</InterproceduralOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <InterproceduralOptimization>true</InterproceduralOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">false</LinkIncremental>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">
-    <ClCompile>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ProjectReference Include="tachyon.vcxproj">
-      <Project>{924517df-2b6a-47d5-8a11-cc247cc4d810}</Project>
-      <Private>false</Private>
-      <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
-      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="..\src\trace.tbb.cpp" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DDDebug|Win32">
+      <Configuration>DDDebug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DDDebug|x64">
+      <Configuration>DDDebug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DDRelease|Win32">
+      <Configuration>DDRelease</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DDRelease|x64">
+      <Configuration>DDRelease</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{6E9B1702-78E0-4D64-B771-8B274D963B58}</ProjectGuid>
+    <RootNamespace>tachyon.tbb</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <InterproceduralOptimization>true</InterproceduralOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <InterproceduralOptimization>true</InterproceduralOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <InterproceduralOptimization>true</InterproceduralOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <InterproceduralOptimization>true</InterproceduralOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">
+    <ClCompile>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ProjectReference Include="tachyon.vcxproj">
+      <Project>{924517df-2b6a-47d5-8a11-cc247cc4d810}</Project>
+      <Private>false</Private>
+      <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
+      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\trace.tbb.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/examples/parallel_for/tachyon/msvs/tachyon.tbb1d.vcxproj b/examples/parallel_for/tachyon/msvs/tachyon.tbb1d.vcxproj
index b3291d8..d97418b 100644
--- a/examples/parallel_for/tachyon/msvs/tachyon.tbb1d.vcxproj
+++ b/examples/parallel_for/tachyon/msvs/tachyon.tbb1d.vcxproj
@@ -1,437 +1,445 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="DDDebug|Win32">
-      <Configuration>DDDebug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DDDebug|x64">
-      <Configuration>DDDebug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DDRelease|Win32">
-      <Configuration>DDRelease</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DDRelease|x64">
-      <Configuration>DDRelease</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}</ProjectGuid>
-    <RootNamespace>tachyon.tbb1d</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <Import Project="..\..\..\common\toolset.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <InterproceduralOptimization>true</InterproceduralOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <InterproceduralOptimization>true</InterproceduralOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <InterproceduralOptimization>true</InterproceduralOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <InterproceduralOptimization>true</InterproceduralOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb1d\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb1d\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb1d\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb1d\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb1d\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb1d\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb1d\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb1d\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb1d\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb1d\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb1d\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb1d\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb1d\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb1d\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb1d\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb1d\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">false</LinkIncremental>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">
-    <ClCompile>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ProjectReference Include="tachyon.vcxproj">
-      <Project>{924517df-2b6a-47d5-8a11-cc247cc4d810}</Project>
-      <Private>false</Private>
-      <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
-      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="..\src\trace.tbb1d.cpp" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DDDebug|Win32">
+      <Configuration>DDDebug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DDDebug|x64">
+      <Configuration>DDDebug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DDRelease|Win32">
+      <Configuration>DDRelease</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DDRelease|x64">
+      <Configuration>DDRelease</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}</ProjectGuid>
+    <RootNamespace>tachyon.tbb1d</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <InterproceduralOptimization>true</InterproceduralOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <InterproceduralOptimization>true</InterproceduralOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <InterproceduralOptimization>true</InterproceduralOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <InterproceduralOptimization>true</InterproceduralOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb1d\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb1d\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb1d\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb1d\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb1d\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb1d\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb1d\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb1d\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb1d\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb1d\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb1d\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb1d\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb1d\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb1d\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb1d\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb1d\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">
+    <ClCompile>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ProjectReference Include="tachyon.vcxproj">
+      <Project>{924517df-2b6a-47d5-8a11-cc247cc4d810}</Project>
+      <Private>false</Private>
+      <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
+      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\trace.tbb1d.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/examples/parallel_for/tachyon/msvs/tachyon.vcxproj b/examples/parallel_for/tachyon/msvs/tachyon.vcxproj
index c179ceb..8a01221 100644
--- a/examples/parallel_for/tachyon/msvs/tachyon.vcxproj
+++ b/examples/parallel_for/tachyon/msvs/tachyon.vcxproj
@@ -1,447 +1,455 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="DDDebug|Win32">
-      <Configuration>DDDebug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DDDebug|x64">
-      <Configuration>DDDebug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DDRelease|Win32">
-      <Configuration>DDRelease</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DDRelease|x64">
-      <Configuration>DDRelease</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>tachyon.common</ProjectName>
-    <ProjectGuid>{924517DF-2B6A-47D5-8A11-CC247CC4D810}</ProjectGuid>
-    <RootNamespace>tachyon.common</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <Import Project="..\..\..\common\toolset.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>false</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <InterproceduralOptimization>true</InterproceduralOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <InterproceduralOptimization>true</InterproceduralOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>false</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>false</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <InterproceduralOptimization>true</InterproceduralOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <InterproceduralOptimization>true</InterproceduralOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>false</WholeProgramOptimization>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>false</WholeProgramOptimization>
-      <PreprocessorDefinitions>DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Lib>
-      <AdditionalOptions>/MACHINE:X86 %(AdditionalOptions)</AdditionalOptions>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>false</WholeProgramOptimization>
-      <PreprocessorDefinitions>DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Lib>
-      <AdditionalOptions>/MACHINE:X64 %(AdditionalOptions)</AdditionalOptions>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <PreprocessorDefinitions>DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Lib>
-      <AdditionalOptions>/MACHINE:X86 %(AdditionalOptions)</AdditionalOptions>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <PreprocessorDefinitions>DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Lib>
-      <AdditionalOptions>/MACHINE:X64 %(AdditionalOptions)</AdditionalOptions>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">
-    <PreBuildEvent>
-      <Command>..\..\..\common\gui\dxcheck.bat</Command>
-    </PreBuildEvent>
-    <ClCompile>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <PreprocessorDefinitions>DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Lib>
-      <AdditionalOptions>/MACHINE:X86 %(AdditionalOptions)</AdditionalOptions>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">
-    <PreBuildEvent>
-      <Command>..\..\..\common\gui\dxcheck.bat</Command>
-    </PreBuildEvent>
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <PreprocessorDefinitions>DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Lib>
-      <AdditionalOptions>/MACHINE:X64 %(AdditionalOptions)</AdditionalOptions>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">
-    <PreBuildEvent>
-      <Command>..\..\..\common\gui\dxcheck.bat</Command>
-    </PreBuildEvent>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>false</WholeProgramOptimization>
-      <PreprocessorDefinitions>DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Lib>
-      <AdditionalOptions>/MACHINE:X86 %(AdditionalOptions)</AdditionalOptions>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">
-    <PreBuildEvent>
-      <Command>..\..\..\common\gui\dxcheck.bat</Command>
-    </PreBuildEvent>
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>false</WholeProgramOptimization>
-      <PreprocessorDefinitions>DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level2</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Lib>
-      <AdditionalOptions>/MACHINE:X64 %(AdditionalOptions)</AdditionalOptions>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\src\api.cpp" />
-    <ClCompile Include="..\src\apigeom.cpp" />
-    <ClCompile Include="..\src\apitrigeom.cpp" />
-    <ClCompile Include="..\src\bndbox.cpp" />
-    <ClCompile Include="..\src\box.cpp" />
-    <ClCompile Include="..\src\camera.cpp" />
-    <ClCompile Include="..\src\coordsys.cpp" />
-    <ClCompile Include="..\src\cylinder.cpp" />
-    <ClCompile Include="..\src\extvol.cpp" />
-    <ClCompile Include="..\src\global.cpp" />
-    <ClCompile Include="..\src\grid.cpp" />
-    <ClCompile Include="..\src\imageio.cpp" />
-    <ClCompile Include="..\src\imap.cpp" />
-    <ClCompile Include="..\src\intersect.cpp" />
-    <ClCompile Include="..\src\jpeg.cpp" />
-    <ClCompile Include="..\src\light.cpp" />
-    <ClCompile Include="..\src\main.cpp" />
-    <ClCompile Include="..\src\objbound.cpp" />
-    <ClCompile Include="..\src\parse.cpp" />
-    <ClCompile Include="..\src\plane.cpp" />
-    <ClCompile Include="..\src\ppm.cpp" />
-    <ClCompile Include="..\src\pthread.cpp" />
-    <ClCompile Include="..\src\quadric.cpp" />
-    <ClCompile Include="..\src\render.cpp" />
-    <ClCompile Include="..\src\ring.cpp" />
-    <ClCompile Include="..\src\shade.cpp" />
-    <ClCompile Include="..\src\sphere.cpp" />
-    <ClCompile Include="..\src\tachyon_video.cpp" />
-    <ClCompile Include="..\src\texture.cpp" />
-    <ClCompile Include="..\src\tgafile.cpp" />
-    <ClCompile Include="..\src\trace_rest.cpp" />
-    <ClCompile Include="..\src\triangle.cpp" />
-    <ClCompile Include="..\src\ui.cpp" />
-    <ClCompile Include="..\src\util.cpp" />
-    <ClCompile Include="..\src\vector.cpp" />
-    <ClCompile Include="..\src\vol.cpp" />
-    <ClCompile Include="..\..\..\common\gui\d2dvideo.cpp">
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">_WINDOWS;_DEBUG</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">_WINDOWS;_DEBUG</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">_WINDOWS;NDEBUG</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">_WINDOWS;NDEBUG</PreprocessorDefinitions>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\..\common\gui\gdivideo.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">true</ExcludedFromBuild>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_WINDOWS;_DEBUG</PreprocessorDefinitions>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_WINDOWS;_DEBUG</PreprocessorDefinitions>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_WINDOWS;NDEBUG</PreprocessorDefinitions>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_WINDOWS;NDEBUG</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\src\api.h" />
-    <ClInclude Include="..\src\apitrigeom.h" />
-    <ClInclude Include="..\src\bndbox.h" />
-    <ClInclude Include="..\src\box.h" />
-    <ClInclude Include="..\src\camera.h" />
-    <ClInclude Include="..\src\coordsys.h" />
-    <ClInclude Include="..\src\cylinder.h" />
-    <ClInclude Include="..\src\extvol.h" />
-    <ClInclude Include="..\src\global.h" />
-    <ClInclude Include="..\src\grid.h" />
-    <ClInclude Include="..\src\imageio.h" />
-    <ClInclude Include="..\src\imap.h" />
-    <ClInclude Include="..\src\intersect.h" />
-    <ClInclude Include="..\src\jpeg.h" />
-    <ClInclude Include="..\src\light.h" />
-    <ClInclude Include="..\src\machine.h" />
-    <ClInclude Include="..\src\macros.h" />
-    <ClInclude Include="..\src\objbound.h" />
-    <ClInclude Include="..\src\parse.h" />
-    <ClInclude Include="..\src\plane.h" />
-    <ClInclude Include="..\src\ppm.h" />
-    <ClInclude Include="..\src\pthread.h" />
-    <ClInclude Include="..\src\quadric.h" />
-    <ClInclude Include="..\src\render.h" />
-    <ClInclude Include="..\msvs\resource.h" />
-    <ClInclude Include="..\src\ring.h" />
-    <ClInclude Include="..\src\shade.h" />
-    <ClInclude Include="..\src\sphere.h" />
-    <ClInclude Include="..\src\tachyon_video.h" />
-    <ClInclude Include="..\src\texture.h" />
-    <ClInclude Include="..\src\tgafile.h" />
-    <ClInclude Include="..\src\trace.h" />
-    <ClInclude Include="..\src\triangle.h" />
-    <ClInclude Include="..\src\types.h" />
-    <ClInclude Include="..\src\ui.h" />
-    <ClInclude Include="..\src\util.h" />
-    <ClInclude Include="..\src\vector.h" />
-    <ClInclude Include="..\src\vol.h" />
-    <ClInclude Include="..\..\..\common\gui\video.h" />
-    <ClInclude Include="..\..\..\common\gui\winvideo.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="..\msvs\gui.ico" />
-    <None Include="..\msvs\small.ico" />
-    <None Include="..\index.html" />
-  </ItemGroup>
-  <ItemGroup>
-    <ResourceCompile Include="..\msvs\gui.rc" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DDDebug|Win32">
+      <Configuration>DDDebug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DDDebug|x64">
+      <Configuration>DDDebug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DDRelease|Win32">
+      <Configuration>DDRelease</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DDRelease|x64">
+      <Configuration>DDRelease</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>tachyon.common</ProjectName>
+    <ProjectGuid>{924517DF-2B6A-47D5-8A11-CC247CC4D810}</ProjectGuid>
+    <RootNamespace>tachyon.common</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <InterproceduralOptimization>true</InterproceduralOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <InterproceduralOptimization>true</InterproceduralOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <InterproceduralOptimization>true</InterproceduralOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <InterproceduralOptimization>true</InterproceduralOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <PreprocessorDefinitions>DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Lib>
+      <AdditionalOptions>/MACHINE:X86 %(AdditionalOptions)</AdditionalOptions>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <PreprocessorDefinitions>DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Lib>
+      <AdditionalOptions>/MACHINE:X64 %(AdditionalOptions)</AdditionalOptions>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <PreprocessorDefinitions>DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Lib>
+      <AdditionalOptions>/MACHINE:X86 %(AdditionalOptions)</AdditionalOptions>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <PreprocessorDefinitions>DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Lib>
+      <AdditionalOptions>/MACHINE:X64 %(AdditionalOptions)</AdditionalOptions>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">
+    <PreBuildEvent>
+      <Command>..\..\..\common\gui\dxcheck.bat</Command>
+    </PreBuildEvent>
+    <ClCompile>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <PreprocessorDefinitions>DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Lib>
+      <AdditionalOptions>/MACHINE:X86 %(AdditionalOptions)</AdditionalOptions>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">
+    <PreBuildEvent>
+      <Command>..\..\..\common\gui\dxcheck.bat</Command>
+    </PreBuildEvent>
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <PreprocessorDefinitions>DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Lib>
+      <AdditionalOptions>/MACHINE:X64 %(AdditionalOptions)</AdditionalOptions>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">
+    <PreBuildEvent>
+      <Command>..\..\..\common\gui\dxcheck.bat</Command>
+    </PreBuildEvent>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <PreprocessorDefinitions>DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Lib>
+      <AdditionalOptions>/MACHINE:X86 %(AdditionalOptions)</AdditionalOptions>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">
+    <PreBuildEvent>
+      <Command>..\..\..\common\gui\dxcheck.bat</Command>
+    </PreBuildEvent>
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+      <PreprocessorDefinitions>DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level2</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Lib>
+      <AdditionalOptions>/MACHINE:X64 %(AdditionalOptions)</AdditionalOptions>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\api.cpp" />
+    <ClCompile Include="..\src\apigeom.cpp" />
+    <ClCompile Include="..\src\apitrigeom.cpp" />
+    <ClCompile Include="..\src\bndbox.cpp" />
+    <ClCompile Include="..\src\box.cpp" />
+    <ClCompile Include="..\src\camera.cpp" />
+    <ClCompile Include="..\src\coordsys.cpp" />
+    <ClCompile Include="..\src\cylinder.cpp" />
+    <ClCompile Include="..\src\extvol.cpp" />
+    <ClCompile Include="..\src\global.cpp" />
+    <ClCompile Include="..\src\grid.cpp" />
+    <ClCompile Include="..\src\imageio.cpp" />
+    <ClCompile Include="..\src\imap.cpp" />
+    <ClCompile Include="..\src\intersect.cpp" />
+    <ClCompile Include="..\src\jpeg.cpp" />
+    <ClCompile Include="..\src\light.cpp" />
+    <ClCompile Include="..\src\main.cpp" />
+    <ClCompile Include="..\src\objbound.cpp" />
+    <ClCompile Include="..\src\parse.cpp" />
+    <ClCompile Include="..\src\plane.cpp" />
+    <ClCompile Include="..\src\ppm.cpp" />
+    <ClCompile Include="..\src\pthread.cpp" />
+    <ClCompile Include="..\src\quadric.cpp" />
+    <ClCompile Include="..\src\render.cpp" />
+    <ClCompile Include="..\src\ring.cpp" />
+    <ClCompile Include="..\src\shade.cpp" />
+    <ClCompile Include="..\src\sphere.cpp" />
+    <ClCompile Include="..\src\tachyon_video.cpp" />
+    <ClCompile Include="..\src\texture.cpp" />
+    <ClCompile Include="..\src\tgafile.cpp" />
+    <ClCompile Include="..\src\trace_rest.cpp" />
+    <ClCompile Include="..\src\triangle.cpp" />
+    <ClCompile Include="..\src\ui.cpp" />
+    <ClCompile Include="..\src\util.cpp" />
+    <ClCompile Include="..\src\vector.cpp" />
+    <ClCompile Include="..\src\vol.cpp" />
+    <ClCompile Include="..\..\..\common\gui\d2dvideo.cpp">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">_WINDOWS;_DEBUG</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">_WINDOWS;_DEBUG</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">_WINDOWS;NDEBUG</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">_WINDOWS;NDEBUG</PreprocessorDefinitions>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\..\common\gui\gdivideo.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">true</ExcludedFromBuild>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_WINDOWS;_DEBUG</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_WINDOWS;_DEBUG</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_WINDOWS;NDEBUG</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_WINDOWS;NDEBUG</PreprocessorDefinitions>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\api.h" />
+    <ClInclude Include="..\src\apitrigeom.h" />
+    <ClInclude Include="..\src\bndbox.h" />
+    <ClInclude Include="..\src\box.h" />
+    <ClInclude Include="..\src\camera.h" />
+    <ClInclude Include="..\src\coordsys.h" />
+    <ClInclude Include="..\src\cylinder.h" />
+    <ClInclude Include="..\src\extvol.h" />
+    <ClInclude Include="..\src\global.h" />
+    <ClInclude Include="..\src\grid.h" />
+    <ClInclude Include="..\src\imageio.h" />
+    <ClInclude Include="..\src\imap.h" />
+    <ClInclude Include="..\src\intersect.h" />
+    <ClInclude Include="..\src\jpeg.h" />
+    <ClInclude Include="..\src\light.h" />
+    <ClInclude Include="..\src\machine.h" />
+    <ClInclude Include="..\src\macros.h" />
+    <ClInclude Include="..\src\objbound.h" />
+    <ClInclude Include="..\src\parse.h" />
+    <ClInclude Include="..\src\plane.h" />
+    <ClInclude Include="..\src\ppm.h" />
+    <ClInclude Include="..\src\pthread.h" />
+    <ClInclude Include="..\src\quadric.h" />
+    <ClInclude Include="..\src\render.h" />
+    <ClInclude Include="..\msvs\resource.h" />
+    <ClInclude Include="..\src\ring.h" />
+    <ClInclude Include="..\src\shade.h" />
+    <ClInclude Include="..\src\sphere.h" />
+    <ClInclude Include="..\src\tachyon_video.h" />
+    <ClInclude Include="..\src\texture.h" />
+    <ClInclude Include="..\src\tgafile.h" />
+    <ClInclude Include="..\src\trace.h" />
+    <ClInclude Include="..\src\triangle.h" />
+    <ClInclude Include="..\src\types.h" />
+    <ClInclude Include="..\src\ui.h" />
+    <ClInclude Include="..\src\util.h" />
+    <ClInclude Include="..\src\vector.h" />
+    <ClInclude Include="..\src\vol.h" />
+    <ClInclude Include="..\..\..\common\gui\video.h" />
+    <ClInclude Include="..\..\..\common\gui\winvideo.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\msvs\gui.ico" />
+    <None Include="..\msvs\small.ico" />
+    <None Include="..\readme.html" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\msvs\gui.rc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/examples/parallel_for/tachyon/msvs/win8ui/App.xaml.cpp b/examples/parallel_for/tachyon/msvs/win8ui/App.xaml.cpp
index c07773a..0abae72 100644
--- a/examples/parallel_for/tachyon/msvs/win8ui/App.xaml.cpp
+++ b/examples/parallel_for/tachyon/msvs/win8ui/App.xaml.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    The source code contained or described herein and all documents related
-    to the source code ("Material") are owned by Intel Corporation or its
-    suppliers or licensors.  Title to the Material remains with Intel
-    Corporation or its suppliers and licensors.  The Material is protected
-    by worldwide copyright laws and treaty provisions.  No part of the
-    Material may be used, copied, reproduced, modified, published, uploaded,
-    posted, transmitted, distributed, or disclosed in any way without
-    Intel's prior express written permission.
-
-    No license under any patent, copyright, trade secret or other
-    intellectual property right is granted to or conferred upon you by
-    disclosure or delivery of the Materials, either expressly, by
-    implication, inducement, estoppel or otherwise.  Any license under such
-    intellectual property rights must be express and approved by Intel in
-    writing.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "DirectXPage.xaml.h"
diff --git a/examples/parallel_for/tachyon/msvs/win8ui/App.xaml.h b/examples/parallel_for/tachyon/msvs/win8ui/App.xaml.h
index 3cafe31..ffb3437 100644
--- a/examples/parallel_for/tachyon/msvs/win8ui/App.xaml.h
+++ b/examples/parallel_for/tachyon/msvs/win8ui/App.xaml.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    The source code contained or described herein and all documents related
-    to the source code ("Material") are owned by Intel Corporation or its
-    suppliers or licensors.  Title to the Material remains with Intel
-    Corporation or its suppliers and licensors.  The Material is protected
-    by worldwide copyright laws and treaty provisions.  No part of the
-    Material may be used, copied, reproduced, modified, published, uploaded,
-    posted, transmitted, distributed, or disclosed in any way without
-    Intel's prior express written permission.
-
-    No license under any patent, copyright, trade secret or other
-    intellectual property right is granted to or conferred upon you by
-    disclosure or delivery of the Materials, either expressly, by
-    implication, inducement, estoppel or otherwise.  Any license under such
-    intellectual property rights must be express and approved by Intel in
-    writing.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 
diff --git a/examples/parallel_for/tachyon/msvs/win8ui/DirectXBase.cpp b/examples/parallel_for/tachyon/msvs/win8ui/DirectXBase.cpp
index b97f3ba..afa2bbc 100644
--- a/examples/parallel_for/tachyon/msvs/win8ui/DirectXBase.cpp
+++ b/examples/parallel_for/tachyon/msvs/win8ui/DirectXBase.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    The source code contained or described herein and all documents related
-    to the source code ("Material") are owned by Intel Corporation or its
-    suppliers or licensors.  Title to the Material remains with Intel
-    Corporation or its suppliers and licensors.  The Material is protected
-    by worldwide copyright laws and treaty provisions.  No part of the
-    Material may be used, copied, reproduced, modified, published, uploaded,
-    posted, transmitted, distributed, or disclosed in any way without
-    Intel's prior express written permission.
-
-    No license under any patent, copyright, trade secret or other
-    intellectual property right is granted to or conferred upon you by
-    disclosure or delivery of the Materials, either expressly, by
-    implication, inducement, estoppel or otherwise.  Any license under such
-    intellectual property rights must be express and approved by Intel in
-    writing.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "pch.h"
diff --git a/examples/parallel_for/tachyon/msvs/win8ui/DirectXBase.h b/examples/parallel_for/tachyon/msvs/win8ui/DirectXBase.h
index 26807ca..d03e08a 100644
--- a/examples/parallel_for/tachyon/msvs/win8ui/DirectXBase.h
+++ b/examples/parallel_for/tachyon/msvs/win8ui/DirectXBase.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    The source code contained or described herein and all documents related
-    to the source code ("Material") are owned by Intel Corporation or its
-    suppliers or licensors.  Title to the Material remains with Intel
-    Corporation or its suppliers and licensors.  The Material is protected
-    by worldwide copyright laws and treaty provisions.  No part of the
-    Material may be used, copied, reproduced, modified, published, uploaded,
-    posted, transmitted, distributed, or disclosed in any way without
-    Intel's prior express written permission.
-
-    No license under any patent, copyright, trade secret or other
-    intellectual property right is granted to or conferred upon you by
-    disclosure or delivery of the Materials, either expressly, by
-    implication, inducement, estoppel or otherwise.  Any license under such
-    intellectual property rights must be express and approved by Intel in
-    writing.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #pragma once
diff --git a/examples/parallel_for/tachyon/msvs/win8ui/DirectXPage.xaml.cpp b/examples/parallel_for/tachyon/msvs/win8ui/DirectXPage.xaml.cpp
index 2729d69..aec5f6d 100644
--- a/examples/parallel_for/tachyon/msvs/win8ui/DirectXPage.xaml.cpp
+++ b/examples/parallel_for/tachyon/msvs/win8ui/DirectXPage.xaml.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    The source code contained or described herein and all documents related
-    to the source code ("Material") are owned by Intel Corporation or its
-    suppliers or licensors.  Title to the Material remains with Intel
-    Corporation or its suppliers and licensors.  The Material is protected
-    by worldwide copyright laws and treaty provisions.  No part of the
-    Material may be used, copied, reproduced, modified, published, uploaded,
-    posted, transmitted, distributed, or disclosed in any way without
-    Intel's prior express written permission.
-
-    No license under any patent, copyright, trade secret or other
-    intellectual property right is granted to or conferred upon you by
-    disclosure or delivery of the Materials, either expressly, by
-    implication, inducement, estoppel or otherwise.  Any license under such
-    intellectual property rights must be express and approved by Intel in
-    writing.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 
diff --git a/examples/parallel_for/tachyon/msvs/win8ui/DirectXPage.xaml.h b/examples/parallel_for/tachyon/msvs/win8ui/DirectXPage.xaml.h
index 2c42581..5d91f39 100644
--- a/examples/parallel_for/tachyon/msvs/win8ui/DirectXPage.xaml.h
+++ b/examples/parallel_for/tachyon/msvs/win8ui/DirectXPage.xaml.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    The source code contained or described herein and all documents related
-    to the source code ("Material") are owned by Intel Corporation or its
-    suppliers or licensors.  Title to the Material remains with Intel
-    Corporation or its suppliers and licensors.  The Material is protected
-    by worldwide copyright laws and treaty provisions.  No part of the
-    Material may be used, copied, reproduced, modified, published, uploaded,
-    posted, transmitted, distributed, or disclosed in any way without
-    Intel's prior express written permission.
-
-    No license under any patent, copyright, trade secret or other
-    intellectual property right is granted to or conferred upon you by
-    disclosure or delivery of the Materials, either expressly, by
-    implication, inducement, estoppel or otherwise.  Any license under such
-    intellectual property rights must be express and approved by Intel in
-    writing.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #pragma once
diff --git a/examples/parallel_for/tachyon/msvs/win8ui/copy_libraries_and_assets.bat b/examples/parallel_for/tachyon/msvs/win8ui/copy_libraries_and_assets.bat
old mode 100755
new mode 100644
index 899bb96..1322d0f
--- a/examples/parallel_for/tachyon/msvs/win8ui/copy_libraries_and_assets.bat
+++ b/examples/parallel_for/tachyon/msvs/win8ui/copy_libraries_and_assets.bat
@@ -1,34 +1,33 @@
 @echo on
 REM
-REM Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+REM Copyright (c) 2005-2017 Intel Corporation
+REM
+REM Licensed under the Apache License, Version 2.0 (the "License");
+REM you may not use this file except in compliance with the License.
+REM You may obtain a copy of the License at
+REM
+REM     http://www.apache.org/licenses/LICENSE-2.0
+REM
+REM Unless required by applicable law or agreed to in writing, software
+REM distributed under the License is distributed on an "AS IS" BASIS,
+REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+REM See the License for the specific language governing permissions and
+REM limitations under the License.
+REM
+REM
 REM
-REM The source code contained or described herein and all documents related
-REM to the source code ("Material") are owned by Intel Corporation or its
-REM suppliers or licensors.  Title to the Material remains with Intel
-REM Corporation or its suppliers and licensors.  The Material is protected
-REM by worldwide copyright laws and treaty provisions.  No part of the
-REM Material may be used, copied, reproduced, modified, published, uploaded,
-REM posted, transmitted, distributed, or disclosed in any way without
-REM Intel's prior express written permission.
 REM
-REM No license under any patent, copyright, trade secret or other
-REM intellectual property right is granted to or conferred upon you by
-REM disclosure or delivery of the Materials, either expressly, by
-REM implication, inducement, estoppel or otherwise.  Any license under such
-REM intellectual property rights must be express and approved by Intel in
-REM writing.
 REM
-
 :: Getting parameters
 :: Architecture
 if ("%1") == ("") goto error0
 :: Release/Debug
 if ("%2") == ("") goto error0
 :: Output directory
-if ("%3") == ("") goto error0
+if (%3) == ("") goto error0
 set arch=%1
 if ("%2") == ("debug") set postfix=_debug
-set output_dir=%3
+set output_dir="%3"
 if ("%4") == ("") set dat_file="%output_dir%\..\..\dat\balls.dat"
 
 :: Actually we can set install root by ourselves
diff --git a/examples/parallel_for/tachyon/msvs/win8ui/pch.h b/examples/parallel_for/tachyon/msvs/win8ui/pch.h
index 9140a8f..2673e67 100644
--- a/examples/parallel_for/tachyon/msvs/win8ui/pch.h
+++ b/examples/parallel_for/tachyon/msvs/win8ui/pch.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    The source code contained or described herein and all documents related
-    to the source code ("Material") are owned by Intel Corporation or its
-    suppliers or licensors.  Title to the Material remains with Intel
-    Corporation or its suppliers and licensors.  The Material is protected
-    by worldwide copyright laws and treaty provisions.  No part of the
-    Material may be used, copied, reproduced, modified, published, uploaded,
-    posted, transmitted, distributed, or disclosed in any way without
-    Intel's prior express written permission.
-
-    No license under any patent, copyright, trade secret or other
-    intellectual property right is granted to or conferred upon you by
-    disclosure or delivery of the Materials, either expressly, by
-    implication, inducement, estoppel or otherwise.  Any license under such
-    intellectual property rights must be express and approved by Intel in
-    writing.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #pragma once
diff --git a/examples/parallel_for/tachyon/msvs/win8ui/tbbTachyon.vcxproj b/examples/parallel_for/tachyon/msvs/win8ui/tbbTachyon.vcxproj
index a215998..076f67c 100644
--- a/examples/parallel_for/tachyon/msvs/win8ui/tbbTachyon.vcxproj
+++ b/examples/parallel_for/tachyon/msvs/win8ui/tbbTachyon.vcxproj
@@ -1,239 +1,239 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{e20cb432-6730-4021-a372-1c81a333518a}</ProjectGuid>
-    <RootNamespace>tbbTachyon</RootNamespace>
-    <DefaultLanguage>en-US</DefaultLanguage>
-    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and '$(VisualStudioVersion)' == ''">$(VCTargetsPath11)</VCTargetsPath>
-    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
-    <AppContainerApplication>true</AppContainerApplication>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v110</PlatformToolset>
-    <UseIntelTBB>true</UseIntelTBB>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v110</PlatformToolset>
-    <UseIntelTBB>true</UseIntelTBB>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>false</WholeProgramOptimization>
-    <PlatformToolset>v110</PlatformToolset>
-    <UseIntelTBB>true</UseIntelTBB>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>false</WholeProgramOptimization>
-    <PlatformToolset>v110</PlatformToolset>
-    <UseIntelTBB>true</UseIntelTBB>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <PackageCertificateKeyFile>tbbTachyon_TemporaryKey.pfx</PackageCertificateKeyFile>
-    <AppxAutoIncrementPackageRevision>True</AppxAutoIncrementPackageRevision>
-    <PackageCertificateThumbprint>5E3EA4A6008AD66D2487EFC68BB366981685295D</PackageCertificateThumbprint>
-  </PropertyGroup>
-  <ItemDefinitionGroup>
-    <Link>
-      <AdditionalDependencies>d2d1.lib; d3d11.lib; dxgi.lib; ole32.lib; windowscodecs.lib; dwrite.lib; dxguid.lib; %(AdditionalDependencies)</AdditionalDependencies>
-      <GenerateWindowsMetadata>true</GenerateWindowsMetadata>
-      <LinkTimeCodeGeneration Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Default</LinkTimeCodeGeneration>
-      <LinkTimeCodeGeneration Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Default</LinkTimeCodeGeneration>
-      <LinkTimeCodeGeneration Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Default</LinkTimeCodeGeneration>
-      <LinkTimeCodeGeneration Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Default</LinkTimeCodeGeneration>
-    </Link>
-    <ClCompile>
-      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
-      <PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
-      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\common;$(ProjectDir)\..\..;$(ProjectDir)\..\..\..\..\..\include;$(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_WARNINGS;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_DEBUG;_CRT_SECURE_NO_WARNINGS;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_CRT_SECURE_NO_WARNINGS;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <UseMSVC Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</UseMSVC>
-    </ClCompile>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClInclude Include="App.xaml.h">
-      <DependentUpon>App.xaml</DependentUpon>
-    </ClInclude>
-    <ClInclude Include="DirectXPage.xaml.h">
-      <DependentUpon>DirectXPage.xaml</DependentUpon>
-    </ClInclude>
-  </ItemGroup>
-  <ItemGroup>
-    <ApplicationDefinition Include="App.xaml">
-      <SubType>Designer</SubType>
-    </ApplicationDefinition>
-    <Page Include="Common\StandardStyles.xaml">
-      <SubType>Designer</SubType>
-    </Page>
-    <Page Include="DirectXPage.xaml">
-      <SubType>Designer</SubType>
-    </Page>
-  </ItemGroup>
-  <ItemGroup>
-    <AppxManifest Include="Package.appxmanifest">
-      <SubType>Designer</SubType>
-    </AppxManifest>
-    <None Include="Assets\balls.dat">
-      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
-      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
-      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
-      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
-    </None>
-    <CustomBuild Include="copy_libraries_and_assets.bat">
-      <FileType>Document</FileType>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">call "$(SolutionDir)\copy_libraries_and_assets.bat" ia32 release $(SolutionDir)</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">call "$(SolutionDir)\copy_libraries_and_assets.bat" ia32 debug "$(SolutionDir)"</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">call "$(SolutionDir)\copy_libraries_and_assets.bat" intel64 debug "$(SolutionDir)"</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">call "$(SolutionDir)\copy_libraries_and_assets.bat" intel64 release "$(SolutionDir)"</Command>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying libraries to the solution...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying libraries to the solution...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying libraries to the solution...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying libraries to the solution...</Message>
-      <TreatOutputAsContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</TreatOutputAsContent>
-      <TreatOutputAsContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</TreatOutputAsContent>
-      <TreatOutputAsContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</TreatOutputAsContent>
-      <TreatOutputAsContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</TreatOutputAsContent>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">tbb_debug.dll</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">tbb_debug.dll</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">tbb.dll</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">tbb.dll</Outputs>
-    </CustomBuild>
-    <None Include="tbb.dll">
-      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</DeploymentContent>
-      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
-      <FileType>CppCode</FileType>
-      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
-      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
-    </None>
-    <None Include="tbbmalloc.dll">
-      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</DeploymentContent>
-      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
-      <FileType>CppCode</FileType>
-      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
-      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
-    </None>
-    <None Include="tbbmalloc_debug.dll">
-      <FileType>CppCode</FileType>
-      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</DeploymentContent>
-      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
-      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
-      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
-    </None>
-    <None Include="tbbTachyon_TemporaryKey.pfx" />
-    <None Include="tbb_debug.dll">
-      <FileType>CppCode</FileType>
-      <DeploymentContent>true</DeploymentContent>
-      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</DeploymentContent>
-      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
-    </None>
-  </ItemGroup>
-  <ItemGroup>
-    <Image Include="Assets\Logo.png" />
-    <Image Include="Assets\SmallLogo.png" />
-    <Image Include="Assets\StoreLogo.png" />
-    <Image Include="Assets\SplashScreen.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include=".\tbbTachyonRenderer.h" />
-    <ClInclude Include="DirectXBase.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\..\..\common\gui\convideo.cpp" />
-    <ClCompile Include="..\..\src\api.cpp" />
-    <ClCompile Include="..\..\src\apigeom.cpp" />
-    <ClCompile Include="..\..\src\apitrigeom.cpp" />
-    <ClCompile Include="..\..\src\bndbox.cpp" />
-    <ClCompile Include="..\..\src\box.cpp" />
-    <ClCompile Include="..\..\src\camera.cpp" />
-    <ClCompile Include="..\..\src\coordsys.cpp" />
-    <ClCompile Include="..\..\src\cylinder.cpp" />
-    <ClCompile Include="..\..\src\extvol.cpp" />
-    <ClCompile Include="..\..\src\global.cpp" />
-    <ClCompile Include="..\..\src\grid.cpp" />
-    <ClCompile Include="..\..\src\imageio.cpp" />
-    <ClCompile Include="..\..\src\imap.cpp" />
-    <ClCompile Include="..\..\src\intersect.cpp" />
-    <ClCompile Include="..\..\src\jpeg.cpp" />
-    <ClCompile Include="..\..\src\light.cpp" />
-    <ClCompile Include="..\..\src\main.cpp" />
-    <ClCompile Include="..\..\src\objbound.cpp" />
-    <ClCompile Include="..\..\src\parse.cpp" />
-    <ClCompile Include="..\..\src\plane.cpp" />
-    <ClCompile Include="..\..\src\ppm.cpp" />
-    <ClCompile Include="..\..\src\pthread.cpp" />
-    <ClCompile Include="..\..\src\quadric.cpp" />
-    <ClCompile Include="..\..\src\render.cpp" />
-    <ClCompile Include="..\..\src\ring.cpp" />
-    <ClCompile Include="..\..\src\shade.cpp" />
-    <ClCompile Include="..\..\src\sphere.cpp" />
-    <ClCompile Include="..\..\src\tachyon_video.cpp" />
-    <ClCompile Include="..\..\src\texture.cpp" />
-    <ClCompile Include="..\..\src\tgafile.cpp" />
-    <ClCompile Include="..\..\src\trace.tbb.cpp" />
-    <ClCompile Include="..\..\src\trace_rest.cpp" />
-    <ClCompile Include="..\..\src\triangle.cpp" />
-    <ClCompile Include="..\..\src\ui.cpp" />
-    <ClCompile Include="..\..\src\util.cpp" />
-    <ClCompile Include="..\..\src\vector.cpp" />
-    <ClCompile Include="..\..\src\vol.cpp" />
-    <ClCompile Include=".\tbbTachyonRenderer.cpp" />
-    <ClCompile Include="DirectXBase.cpp" />
-    <ClCompile Include="App.xaml.cpp">
-      <DependentUpon>App.xaml</DependentUpon>
-    </ClCompile>
-    <ClCompile Include="DirectXPage.xaml.cpp">
-      <DependentUpon>DirectXPage.xaml</DependentUpon>
-    </ClCompile>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{e20cb432-6730-4021-a372-1c81a333518a}</ProjectGuid>
+    <RootNamespace>tbbTachyon</RootNamespace>
+    <DefaultLanguage>en-US</DefaultLanguage>
+    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and '$(VisualStudioVersion)' == ''">$(VCTargetsPath11)</VCTargetsPath>
+    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
+    <AppContainerApplication>true</AppContainerApplication>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v110</PlatformToolset>
+    <UseIntelTBB>true</UseIntelTBB>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v110</PlatformToolset>
+    <UseIntelTBB>true</UseIntelTBB>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+    <UseIntelTBB>true</UseIntelTBB>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+    <UseIntelTBB>true</UseIntelTBB>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <PackageCertificateKeyFile>tbbTachyon_TemporaryKey.pfx</PackageCertificateKeyFile>
+    <AppxAutoIncrementPackageRevision>True</AppxAutoIncrementPackageRevision>
+    <PackageCertificateThumbprint>5E3EA4A6008AD66D2487EFC68BB366981685295D</PackageCertificateThumbprint>
+  </PropertyGroup>
+  <ItemDefinitionGroup>
+    <Link>
+      <AdditionalDependencies>d2d1.lib; d3d11.lib; dxgi.lib; ole32.lib; windowscodecs.lib; dwrite.lib; dxguid.lib; %(AdditionalDependencies)</AdditionalDependencies>
+      <GenerateWindowsMetadata>true</GenerateWindowsMetadata>
+      <LinkTimeCodeGeneration Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Default</LinkTimeCodeGeneration>
+      <LinkTimeCodeGeneration Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Default</LinkTimeCodeGeneration>
+      <LinkTimeCodeGeneration Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Default</LinkTimeCodeGeneration>
+      <LinkTimeCodeGeneration Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Default</LinkTimeCodeGeneration>
+    </Link>
+    <ClCompile>
+      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
+      <PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\common;$(ProjectDir)\..\..;$(ProjectDir)\..\..\..\..\..\include;$(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_WARNINGS;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_DEBUG;_CRT_SECURE_NO_WARNINGS;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_CRT_SECURE_NO_WARNINGS;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <UseMSVC Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</UseMSVC>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="App.xaml.h">
+      <DependentUpon>App.xaml</DependentUpon>
+    </ClInclude>
+    <ClInclude Include="DirectXPage.xaml.h">
+      <DependentUpon>DirectXPage.xaml</DependentUpon>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ApplicationDefinition Include="App.xaml">
+      <SubType>Designer</SubType>
+    </ApplicationDefinition>
+    <Page Include="Common\StandardStyles.xaml">
+      <SubType>Designer</SubType>
+    </Page>
+    <Page Include="DirectXPage.xaml">
+      <SubType>Designer</SubType>
+    </Page>
+  </ItemGroup>
+  <ItemGroup>
+    <AppxManifest Include="Package.appxmanifest">
+      <SubType>Designer</SubType>
+    </AppxManifest>
+    <None Include="Assets\balls.dat">
+      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
+      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
+      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+    </None>
+    <CustomBuild Include="copy_libraries_and_assets.bat">
+      <FileType>Document</FileType>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">call "$(SolutionDir)\copy_libraries_and_assets.bat" ia32 release "$(SolutionDir)"</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">call "$(SolutionDir)\copy_libraries_and_assets.bat" ia32 debug "$(SolutionDir)"</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">call "$(SolutionDir)\copy_libraries_and_assets.bat" intel64 debug "$(SolutionDir)"</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">call "$(SolutionDir)\copy_libraries_and_assets.bat" intel64 release "$(SolutionDir)"</Command>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying libraries to the solution...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying libraries to the solution...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying libraries to the solution...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying libraries to the solution...</Message>
+      <TreatOutputAsContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</TreatOutputAsContent>
+      <TreatOutputAsContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</TreatOutputAsContent>
+      <TreatOutputAsContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</TreatOutputAsContent>
+      <TreatOutputAsContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</TreatOutputAsContent>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">tbb_debug.dll</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">tbb_debug.dll</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">tbb.dll</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">tbb.dll</Outputs>
+    </CustomBuild>
+    <None Include="tbb.dll">
+      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</DeploymentContent>
+      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
+      <FileType>CppCode</FileType>
+      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+    </None>
+    <None Include="tbbmalloc.dll">
+      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</DeploymentContent>
+      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
+      <FileType>CppCode</FileType>
+      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+    </None>
+    <None Include="tbbmalloc_debug.dll">
+      <FileType>CppCode</FileType>
+      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</DeploymentContent>
+      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
+      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+    </None>
+    <None Include="tbbTachyon_TemporaryKey.pfx" />
+    <None Include="tbb_debug.dll">
+      <FileType>CppCode</FileType>
+      <DeploymentContent>true</DeploymentContent>
+      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</DeploymentContent>
+      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <Image Include="Assets\Logo.png" />
+    <Image Include="Assets\SmallLogo.png" />
+    <Image Include="Assets\StoreLogo.png" />
+    <Image Include="Assets\SplashScreen.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include=".\tbbTachyonRenderer.h" />
+    <ClInclude Include="DirectXBase.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\..\common\gui\convideo.cpp" />
+    <ClCompile Include="..\..\src\api.cpp" />
+    <ClCompile Include="..\..\src\apigeom.cpp" />
+    <ClCompile Include="..\..\src\apitrigeom.cpp" />
+    <ClCompile Include="..\..\src\bndbox.cpp" />
+    <ClCompile Include="..\..\src\box.cpp" />
+    <ClCompile Include="..\..\src\camera.cpp" />
+    <ClCompile Include="..\..\src\coordsys.cpp" />
+    <ClCompile Include="..\..\src\cylinder.cpp" />
+    <ClCompile Include="..\..\src\extvol.cpp" />
+    <ClCompile Include="..\..\src\global.cpp" />
+    <ClCompile Include="..\..\src\grid.cpp" />
+    <ClCompile Include="..\..\src\imageio.cpp" />
+    <ClCompile Include="..\..\src\imap.cpp" />
+    <ClCompile Include="..\..\src\intersect.cpp" />
+    <ClCompile Include="..\..\src\jpeg.cpp" />
+    <ClCompile Include="..\..\src\light.cpp" />
+    <ClCompile Include="..\..\src\main.cpp" />
+    <ClCompile Include="..\..\src\objbound.cpp" />
+    <ClCompile Include="..\..\src\parse.cpp" />
+    <ClCompile Include="..\..\src\plane.cpp" />
+    <ClCompile Include="..\..\src\ppm.cpp" />
+    <ClCompile Include="..\..\src\pthread.cpp" />
+    <ClCompile Include="..\..\src\quadric.cpp" />
+    <ClCompile Include="..\..\src\render.cpp" />
+    <ClCompile Include="..\..\src\ring.cpp" />
+    <ClCompile Include="..\..\src\shade.cpp" />
+    <ClCompile Include="..\..\src\sphere.cpp" />
+    <ClCompile Include="..\..\src\tachyon_video.cpp" />
+    <ClCompile Include="..\..\src\texture.cpp" />
+    <ClCompile Include="..\..\src\tgafile.cpp" />
+    <ClCompile Include="..\..\src\trace.tbb.cpp" />
+    <ClCompile Include="..\..\src\trace_rest.cpp" />
+    <ClCompile Include="..\..\src\triangle.cpp" />
+    <ClCompile Include="..\..\src\ui.cpp" />
+    <ClCompile Include="..\..\src\util.cpp" />
+    <ClCompile Include="..\..\src\vector.cpp" />
+    <ClCompile Include="..\..\src\vol.cpp" />
+    <ClCompile Include=".\tbbTachyonRenderer.cpp" />
+    <ClCompile Include="DirectXBase.cpp" />
+    <ClCompile Include="App.xaml.cpp">
+      <DependentUpon>App.xaml</DependentUpon>
+    </ClCompile>
+    <ClCompile Include="DirectXPage.xaml.cpp">
+      <DependentUpon>DirectXPage.xaml</DependentUpon>
+    </ClCompile>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/examples/parallel_for/tachyon/msvs/win8ui/tbbTachyonRenderer.cpp b/examples/parallel_for/tachyon/msvs/win8ui/tbbTachyonRenderer.cpp
index 0949ea6..bc2f856 100644
--- a/examples/parallel_for/tachyon/msvs/win8ui/tbbTachyonRenderer.cpp
+++ b/examples/parallel_for/tachyon/msvs/win8ui/tbbTachyonRenderer.cpp
@@ -1,21 +1,21 @@
 /*
-Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-The source code contained or described herein and all documents related
-to the source code ("Material") are owned by Intel Corporation or its
-suppliers or licensors.  Title to the Material remains with Intel
-Corporation or its suppliers and licensors.  The Material is protected
-by worldwide copyright laws and treaty provisions.  No part of the
-Material may be used, copied, reproduced, modified, published, uploaded,
-posted, transmitted, distributed, or disclosed in any way without
-Intel's prior express written permission.
-
-No license under any patent, copyright, trade secret or other
-intellectual property right is granted to or conferred upon you by
-disclosure or delivery of the Materials, either expressly, by
-implication, inducement, estoppel or otherwise.  Any license under such
-intellectual property rights must be express and approved by Intel in
-writing.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "pch.h"
diff --git a/examples/parallel_for/tachyon/msvs/win8ui/tbbTachyonRenderer.h b/examples/parallel_for/tachyon/msvs/win8ui/tbbTachyonRenderer.h
index 443138e..9d22996 100644
--- a/examples/parallel_for/tachyon/msvs/win8ui/tbbTachyonRenderer.h
+++ b/examples/parallel_for/tachyon/msvs/win8ui/tbbTachyonRenderer.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    The source code contained or described herein and all documents related
-    to the source code ("Material") are owned by Intel Corporation or its
-    suppliers or licensors.  Title to the Material remains with Intel
-    Corporation or its suppliers and licensors.  The Material is protected
-    by worldwide copyright laws and treaty provisions.  No part of the
-    Material may be used, copied, reproduced, modified, published, uploaded,
-    posted, transmitted, distributed, or disclosed in any way without
-    Intel's prior express written permission.
-
-    No license under any patent, copyright, trade secret or other
-    intellectual property right is granted to or conferred upon you by
-    disclosure or delivery of the Materials, either expressly, by
-    implication, inducement, estoppel or otherwise.  Any license under such
-    intellectual property rights must be express and approved by Intel in
-    writing.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #pragma once
diff --git a/examples/parallel_for/tachyon/readme.html b/examples/parallel_for/tachyon/readme.html
new file mode 100644
index 0000000..33e5d23
--- /dev/null
+++ b/examples/parallel_for/tachyon/readme.html
@@ -0,0 +1,572 @@
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
+
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
+
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Tachyon sample</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Tachyon sample</h1>
+	</div>
+	
+	<p>
+		Parallel raytracer / renderer that demonstrates the use of parallel_for.
+	</p>
+	<p><i>
+		This example includes software developed by John E. Stone. See
+		<a href="#copyright">here</a> for copyright information.
+	</i></p>
+	<p>
+		This example is a 2-D raytracer/renderer that visually shows different parallel scheduling
+		methods and their resulting speedup.  The code was parallelized by speculating
+		that each pixel could be rendered in parallel.  The resulting parallel code was
+		then checked for correctness by using Intel® Thread Checker, which
+		pointed out where synchronization was needed.  Minimal synchronization was then
+		inserted into the parallel code.  The resulting parallel code exhibits good speedup.
+	</p>
+
+	<div class="changes">
+		<div class="h3-alike">System Requirements</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				For the most up to date system requirements, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
+			</p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Versions</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><b>serial</b>
+				<dd>Original sequential version.
+				<dt><b>tbb1d</b>
+				<dd>Parallel version that uses Intel® Threading Building Blocks (Intel® TBB) and blocked_range to parallelize
+					over tasks that are groups of scan-lines.
+					<ul>
+					<li>By default, this version uses one thread per available processor. To change this
+					default, set the TBB_NUM_THREADS environment variable to the desired number of threads before running.
+					<li>This version uses the preview feature: auto_range_partitioner.  No grain size is provided to blocked_range.
+						The blocked_range class uses a default grain size of 1 when none is provided.  However, the auto_range_partitioner
+						controls the amount of range splitting dynamically at runtime, resulting in sub-ranges of varying sizes.
+					</ul>
+				<dt><b>tbb</b>
+				<dd>Parallel version that uses Intel TBB and blocked_range2d to parallelize
+					over tasks that are rectangular sub-areas.
+					<ul>
+					<li>By default, this version uses one thread per available processor.  To change this
+					default, set the TBB_NUM_THREADS environment variable to the desired number of threads before running.
+					<li>This version uses a reasonable task grain size by default.  To change this default,
+					set the TBB_GRAINSIZE environment variable to the desired grain size before running.
+					The grain size corresponds to the number of pixels (in the X or Y direction, for a
+					rectangular sub-area) in each parallel task.
+					</ul>
+			</dl>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Files</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="src/main.cpp">src/main.cpp</a>
+				<dd>Main program which parses command line options and runs the raytracer.
+				<dt><a href="src/tachyon_video.cpp">src/tachyon_video.cpp</a>
+				<dd>Source code for GUI interfaces.
+				<dt><a href="src/trace.serial.cpp">src/trace.serial.cpp</a>
+				<dd>Source code for original sequential version of example.
+				<dt><a href="src/trace.tbb1d.cpp">src/trace.tbb1d.cpp</a>
+				<dd>Source code for Intel TBB blocked_range (scan-line) version of example.
+				<dt><a href="src/trace.tbb.cpp">src/trace.tbb.cpp</a>
+				<dd>Source code for Intel TBB blocked_range2d (rectangular sub-area) version of example.
+				<dt>(src/*.cpp)
+				<dd>Remainder of source code for example.
+				<dt>(src/*.h)
+				<dd>Remainder of include files for example.
+				<dt><a href="Makefile">Makefile</a>
+				<dd>Makefile for building the example.
+			</dl>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="src/">src</a>
+				<dd>Contains source code and include files for the example.
+				<dt><a href="dat/">dat</a>
+				<dd>Contains data sets for running the example.
+				<dt><a href="msvs/">msvs</a>
+				<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).
+				<dt><a href="xcode/">xcode</a>
+				<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).
+			</dl>
+			<p>For information about the minimum supported version of IDE, see <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a></p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Build instructions</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>General build directions can be found <a href="../../index.html">here</a>.</p>
+			<p>
+				For Windows* systems Microsoft* Visual Studio* projects are provided for each of the above example versions.
+			</p>
+
+			<p>
+			The Makefile supports the following build targets (in addition to the <a href="../../index.html">general</a> ones).
+			Here, <<i>version</i>> is one of the above versions of the example, i.e., {serial, tbb1d, tbb}.
+			</p>
+			<dl>
+				<dt><tt>make <<i>version</i>>[_debug]</tt>
+				<dd>Build and run a single version (release or debug).
+					Equivalent to 'make build_<<i>version</i>>[_debug] run_<<i>version</i>>'.
+				<dt><tt>make build_<<i>version</i>>[_debug]</tt>
+				<dd>Compile and link a single version (release or debug).
+					The resulting executable is left in the directory for the example.
+				<dt><tt>make run_<<i>version</i>></tt>
+				<dd>Run a single version previously produced by one of the above commands.
+				<dt><tt>make [(above options or targets)] DATASET={820spheres, balls, balls3, lattice, model2,
+					teapot, trypsin4pti}</tt>
+				<dd>Build and run as above, but run with the specified data set.
+				<dt><tt>make [(above options or targets)] ARGS=-D</tt>
+				<dd>Build and run as above, but run with disabled run-time display updating for use in making performance measurements
+					<i>(strongly recommended when measuring performance or scalability; see note below)</i>.
+				<dt><tt>make [(above options or targets)] UI={con, gdi, d2d, x, mac}</tt>
+				<dd>Build and run as usual, but build with the specified GUI driver: console, GDI+*, Direct2D*, X11, or OpenGL*
+					(see the description of the <a href="../../common/index.html">common GUI code</a>
+					for more information on available graphics support).
+					For Linux* and macOS* systems, the best available driver is detected automatically by the Makefile.
+					For Windows* systems, UI=gdi is the default GUI driver; compiling with UI=d2d may offer superior
+					performance, but can only be used if the Microsoft* DirectX* SDK is installed on your system.
+					Use UI=con to build without the GUI for use in making performance measurements
+					<i>(strongly recommended when measuring performance or scalability; see note below)</i>.
+				<dt><tt>make [(above options or targets)] XARCH=x64</tt>
+				<dd>Build and run as above, but
+					also specify XARCH=x64 (or XARCH=AMD64 for older compilers) when building the example on Windows* as a 64-bit binary.
+				<dt><tt>make [(above options or targets)] DDLIB_DIR=<<i>specify path to Direct Draw* SDK here</i>></tt>
+				<dd>If you experience ddraw.lib linking problems, specify the correct library directory via this option.
+			</dl>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Usage</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>
+				Building via the above make commands, or via Visual Studio projects on Windows* systems, produces executable files
+				named <tt>tachyon.<<i>version</i>>.exe</tt>.  To run these executables directly, use one or more of the following commands.
+			</p>
+			<dl>
+				<dt><tt>tachyon.<<i>version</i>> <i>-h</i></tt>
+				<dd>Prints the help for command line options
+				<dt><tt>tachyon.<<i>version</i>> [<i>dataset</i>=value] [<i>boundthresh</i>=value] [<i>no-display-updating</i>] [<i>nobounding</i>] [<i>silent</i>]</tt>
+				<dt><tt>tachyon.<<i>version</i>> [<i>dataset</i> [<i>boundthresh</i>]] [<i>no-display-updating</i>] [<i>nobounding</i>] [<i>silent</i>]</tt>
+				<dd><i>dataset</i> is the path/name of one of the *.dat files in the <a href="dat">dat</a> directory for the example.<br>
+					<i>boundthresh</i> is a bounding threshold value.<br>
+					<i>no-display-updating</i> - disable run-time display updating.<br>
+					<i>no-bounding</i> - disable bounding technique.<br>
+					<i>silent</i> - no output except elapsed time.<br>
+				<dt><tt>tachyon.<<i>version</i>> [<i>dataset</i>] [<i>no-display-updating</i>]</tt>
+				<dd>Run this version (release or debug), but run with disabled run-time display updating
+					for use in making performance measurements
+					<i>(strongly recommended when measuring performance or scalability; see note below)</i>.
+				<dt>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
+				<dd>Build a <i>debug</i> version of the <tt>tbb</tt> example with the GUI turned off
+					(e.g., <tt>make UI=con tbb_debug</tt>; see also the build directions above).
+					<br>Run it with a small dataset, e.g., <tt>tachyon.tbb.exe dat/820spheres.dat no-display-updating</tt>.
+			</dl>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Keys</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>While running with the GUI display turned on the following keyboard keys can be used:</p>
+			<dl>
+				<dt><tt>ESC</tt>
+				<dd>Interrupt the rendering and exit
+				<dt><tt><i>Any key</i></tt>
+				<dd>Enable repetition of rendering after the pause. Press ESC to stop the application.
+				<dt><tt>Space</tt>
+				<dd>Toggle run-time display updating mode while rendering (see no-display-updating above).
+				<dt><tt>p</tt>
+				<dd>Holds the picture after rendering completion. Press 'p' again to continue.
+			</dl>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Notes</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<ul>
+			<li>While running with the GUI display turned on should yield reasonable performance in most cases, <i>running with the GUI
+				display turned off is strongly recommended</i> in order to demonstrate the full performance and scalability of the example.
+			</ul>
+		</div>
+	</div>
+	
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<a name="copyright"></a>
+	<div class="changes">
+	<div class="h3-alike">Legal Information</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+
+			<p>
+			The original source for this example is
+			Copyright (c) 1994-2008 John E. Stone
+			All rights reserved.
+			</p>
+
+			<p>
+			Redistribution and use in source and binary forms, with or without
+			modification, are permitted provided that the following conditions
+			are met:
+			<ol>
+			<li>Redistributions of source code must retain the above copyright
+			   notice, this list of conditions and the following disclaimer.
+			<li>Redistributions in binary form must reproduce the above copyright
+			   notice, this list of conditions and the following disclaimer in the
+			   documentation and/or other materials provided with the distribution.
+			<li>The name of the author may not be used to endorse or promote products
+			   derived from this software without specific prior written permission.
+			</ol>
+			</p>
+
+			<p>
+			THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+			OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+			WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+			ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+			DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+			DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+			OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+			HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+			LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+			OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+			SUCH DAMAGE.
+			</p>
+		</div>
+	</div>	
+	
+</body>
+</html>
diff --git a/examples/parallel_for/tachyon/src/api.cpp b/examples/parallel_for/tachyon/src/api.cpp
index ea2f57c..ce35493 100644
--- a/examples/parallel_for/tachyon/src/api.cpp
+++ b/examples/parallel_for/tachyon/src/api.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/api.h b/examples/parallel_for/tachyon/src/api.h
index b27ead2..a136c60 100644
--- a/examples/parallel_for/tachyon/src/api.h
+++ b/examples/parallel_for/tachyon/src/api.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/apigeom.cpp b/examples/parallel_for/tachyon/src/apigeom.cpp
index 12fd8c3..e612b1f 100644
--- a/examples/parallel_for/tachyon/src/apigeom.cpp
+++ b/examples/parallel_for/tachyon/src/apigeom.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/apitrigeom.cpp b/examples/parallel_for/tachyon/src/apitrigeom.cpp
index 1d79ec0..d32ece3 100644
--- a/examples/parallel_for/tachyon/src/apitrigeom.cpp
+++ b/examples/parallel_for/tachyon/src/apitrigeom.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/apitrigeom.h b/examples/parallel_for/tachyon/src/apitrigeom.h
index 48f0fd6..19829e2 100644
--- a/examples/parallel_for/tachyon/src/apitrigeom.h
+++ b/examples/parallel_for/tachyon/src/apitrigeom.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/bndbox.cpp b/examples/parallel_for/tachyon/src/bndbox.cpp
index 2ef12ba..c0b3d37 100644
--- a/examples/parallel_for/tachyon/src/bndbox.cpp
+++ b/examples/parallel_for/tachyon/src/bndbox.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/bndbox.h b/examples/parallel_for/tachyon/src/bndbox.h
index 488e9bb..2681ac8 100644
--- a/examples/parallel_for/tachyon/src/bndbox.h
+++ b/examples/parallel_for/tachyon/src/bndbox.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/box.cpp b/examples/parallel_for/tachyon/src/box.cpp
index 70e28c3..e4f9f88 100644
--- a/examples/parallel_for/tachyon/src/box.cpp
+++ b/examples/parallel_for/tachyon/src/box.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/box.h b/examples/parallel_for/tachyon/src/box.h
index 6074790..9901335 100644
--- a/examples/parallel_for/tachyon/src/box.h
+++ b/examples/parallel_for/tachyon/src/box.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/camera.cpp b/examples/parallel_for/tachyon/src/camera.cpp
index 60dcbc4..5fd81dd 100644
--- a/examples/parallel_for/tachyon/src/camera.cpp
+++ b/examples/parallel_for/tachyon/src/camera.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/camera.h b/examples/parallel_for/tachyon/src/camera.h
index 6b235bc..2ce5c01 100644
--- a/examples/parallel_for/tachyon/src/camera.h
+++ b/examples/parallel_for/tachyon/src/camera.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/coordsys.cpp b/examples/parallel_for/tachyon/src/coordsys.cpp
index 537288b..871c946 100644
--- a/examples/parallel_for/tachyon/src/coordsys.cpp
+++ b/examples/parallel_for/tachyon/src/coordsys.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/coordsys.h b/examples/parallel_for/tachyon/src/coordsys.h
index 3668d12..bc1e191 100644
--- a/examples/parallel_for/tachyon/src/coordsys.h
+++ b/examples/parallel_for/tachyon/src/coordsys.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/cylinder.cpp b/examples/parallel_for/tachyon/src/cylinder.cpp
index 3590ee0..7c78158 100644
--- a/examples/parallel_for/tachyon/src/cylinder.cpp
+++ b/examples/parallel_for/tachyon/src/cylinder.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/cylinder.h b/examples/parallel_for/tachyon/src/cylinder.h
index 4120ce5..3f5847e 100644
--- a/examples/parallel_for/tachyon/src/cylinder.h
+++ b/examples/parallel_for/tachyon/src/cylinder.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/extvol.cpp b/examples/parallel_for/tachyon/src/extvol.cpp
index f9effd3..a245877 100644
--- a/examples/parallel_for/tachyon/src/extvol.cpp
+++ b/examples/parallel_for/tachyon/src/extvol.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/extvol.h b/examples/parallel_for/tachyon/src/extvol.h
index 66f83c0..194e615 100644
--- a/examples/parallel_for/tachyon/src/extvol.h
+++ b/examples/parallel_for/tachyon/src/extvol.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/global.cpp b/examples/parallel_for/tachyon/src/global.cpp
index 6ce462d..08f6fcf 100644
--- a/examples/parallel_for/tachyon/src/global.cpp
+++ b/examples/parallel_for/tachyon/src/global.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/global.h b/examples/parallel_for/tachyon/src/global.h
index 847fb1d..00ed94e 100644
--- a/examples/parallel_for/tachyon/src/global.h
+++ b/examples/parallel_for/tachyon/src/global.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/grid.cpp b/examples/parallel_for/tachyon/src/grid.cpp
index 1810caa..99350a3 100644
--- a/examples/parallel_for/tachyon/src/grid.cpp
+++ b/examples/parallel_for/tachyon/src/grid.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/grid.h b/examples/parallel_for/tachyon/src/grid.h
index edc295b..8628673 100644
--- a/examples/parallel_for/tachyon/src/grid.h
+++ b/examples/parallel_for/tachyon/src/grid.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/imageio.cpp b/examples/parallel_for/tachyon/src/imageio.cpp
index 8b07372..0349670 100644
--- a/examples/parallel_for/tachyon/src/imageio.cpp
+++ b/examples/parallel_for/tachyon/src/imageio.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/imageio.h b/examples/parallel_for/tachyon/src/imageio.h
index b47b8e9..17de997 100644
--- a/examples/parallel_for/tachyon/src/imageio.h
+++ b/examples/parallel_for/tachyon/src/imageio.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/imap.cpp b/examples/parallel_for/tachyon/src/imap.cpp
index b27f9bd..6466ffb 100644
--- a/examples/parallel_for/tachyon/src/imap.cpp
+++ b/examples/parallel_for/tachyon/src/imap.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/imap.h b/examples/parallel_for/tachyon/src/imap.h
index 4f31acc..4bc05d3 100644
--- a/examples/parallel_for/tachyon/src/imap.h
+++ b/examples/parallel_for/tachyon/src/imap.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/intersect.cpp b/examples/parallel_for/tachyon/src/intersect.cpp
index 6545d64..eb01b07 100644
--- a/examples/parallel_for/tachyon/src/intersect.cpp
+++ b/examples/parallel_for/tachyon/src/intersect.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/intersect.h b/examples/parallel_for/tachyon/src/intersect.h
index 0ec3e1e..8f3ba52 100644
--- a/examples/parallel_for/tachyon/src/intersect.h
+++ b/examples/parallel_for/tachyon/src/intersect.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/jpeg.cpp b/examples/parallel_for/tachyon/src/jpeg.cpp
index 0c635c4..9d26786 100644
--- a/examples/parallel_for/tachyon/src/jpeg.cpp
+++ b/examples/parallel_for/tachyon/src/jpeg.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/jpeg.h b/examples/parallel_for/tachyon/src/jpeg.h
index b4f2a6a..5f5287e 100644
--- a/examples/parallel_for/tachyon/src/jpeg.h
+++ b/examples/parallel_for/tachyon/src/jpeg.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/light.cpp b/examples/parallel_for/tachyon/src/light.cpp
index 39fb164..35963b2 100644
--- a/examples/parallel_for/tachyon/src/light.cpp
+++ b/examples/parallel_for/tachyon/src/light.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/light.h b/examples/parallel_for/tachyon/src/light.h
index 5e7e61a..6d54d03 100644
--- a/examples/parallel_for/tachyon/src/light.h
+++ b/examples/parallel_for/tachyon/src/light.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/machine.h b/examples/parallel_for/tachyon/src/machine.h
index 976a461..3be3fe8 100644
--- a/examples/parallel_for/tachyon/src/machine.h
+++ b/examples/parallel_for/tachyon/src/machine.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/macros.h b/examples/parallel_for/tachyon/src/macros.h
index 47792b5..bf27c2b 100644
--- a/examples/parallel_for/tachyon/src/macros.h
+++ b/examples/parallel_for/tachyon/src/macros.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/main.cpp b/examples/parallel_for/tachyon/src/main.cpp
index fe02914..668d000 100644
--- a/examples/parallel_for/tachyon/src/main.cpp
+++ b/examples/parallel_for/tachyon/src/main.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
@@ -172,6 +172,64 @@ unsigned int __stdcall example_main(void *)
     }
 }
 
+#elif __TBB_IOS
+
+#include "tbb/tbb.h"
+#include "CoreFoundation/CoreFoundation.h"
+extern "C" void get_screen_resolution(int *x, int *y);
+
+int CreateScene() {
+
+    CFURLRef balls_dat_url = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("balls"), CFSTR("dat"),NULL);
+    char filename[1024];
+    CFURLGetFileSystemRepresentation(balls_dat_url, true, (UInt8*)filename, (CFIndex)sizeof(filename));
+    CFRelease(balls_dat_url);
+
+    global_scene = rt_newscene();
+    rt_initialize();
+
+    if ( readmodel(filename, global_scene) != 0 ) {
+        rt_finalize();
+        return -1;
+    }
+
+    // need these early for create_graphics_window() so grab these here...
+    scenedef *scene = (scenedef *) global_scene;
+
+    get_screen_resolution(&global_xsize, &global_ysize);
+
+    // scene->hres and scene->vres should be equal to screen resolution
+    scene->hres = global_xwinsize = global_xsize;
+    scene->vres = global_ywinsize = global_ysize;
+    return 0;
+}
+
+int main (int argc, char *argv[]) {
+    try {
+
+        if ( CreateScene() != 0 ) return -1;
+
+        tachyon_video tachyon;
+        tachyon.threaded = true;
+        tachyon.init_console();
+
+        global_usegraphics = tachyon.init_window(global_xwinsize, global_ywinsize);
+        if(!tachyon.running) return -1;
+
+        //TODO: add a demo loop.
+        video = &tachyon;
+        if (video)video->running = true;
+        memset(g_pImg, 0, sizeof(unsigned int) * global_xsize * global_ysize);
+        tachyon.main_loop();
+        video->running=false;
+        return NULL;
+
+    } catch ( std::exception& e ) {
+        std::cerr<<"error occurred. error text is :\"" <<e.what()<<"\"\n";
+        return 1;
+    }
+}
+
 #else
 
 static char *window_title_string (int argc, const char **argv)
diff --git a/examples/parallel_for/tachyon/src/objbound.cpp b/examples/parallel_for/tachyon/src/objbound.cpp
index 929202a..4fd2691 100644
--- a/examples/parallel_for/tachyon/src/objbound.cpp
+++ b/examples/parallel_for/tachyon/src/objbound.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/objbound.h b/examples/parallel_for/tachyon/src/objbound.h
index a97c456..92751a1 100644
--- a/examples/parallel_for/tachyon/src/objbound.h
+++ b/examples/parallel_for/tachyon/src/objbound.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/parse.cpp b/examples/parallel_for/tachyon/src/parse.cpp
index a9e26b1..cd30782 100644
--- a/examples/parallel_for/tachyon/src/parse.cpp
+++ b/examples/parallel_for/tachyon/src/parse.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
@@ -47,7 +47,7 @@
     SUCH DAMAGE.
 */
 
-/* 
+/*
  * parse.cpp - an UltraLame (tm) parser for simple data files...
  */
 
@@ -90,7 +90,7 @@ static int stringcmp(const char * a, const char * b) {
   s=strlen(a);
   l=strlen(b);
 
-  if (s != l) 
+  if (s != l)
     return 1;
 
   for (i=0; i<s; i++) {
@@ -103,13 +103,13 @@ static int stringcmp(const char * a, const char * b) {
 
 static void reset_tex_table(void) {
   apitexture apitex;
-  
-  numtextures=0; 
+
+  numtextures=0;
   memset(&textable, 0, sizeof(textable));
 
   apitex.col.r=1.0;
-  apitex.col.g=1.0; 
-  apitex.col.b=1.0; 
+  apitex.col.g=1.0;
+  apitex.col.b=1.0;
   apitex.ambient=0.1;
   apitex.diffuse=0.9;
   apitex.specular=0.0;
@@ -121,7 +121,7 @@ static void reset_tex_table(void) {
 
 static errcode add_texture(void * tex, char name[TEXNAMELEN]) {
   textable[numtextures].tex=tex;
-  strcpy(textable[numtextures].name, name); 
+  strcpy(textable[numtextures].name, name);
 
   numtextures++;
   if (numtextures > NUMTEXS) {
@@ -135,13 +135,13 @@ static errcode add_texture(void * tex, char name[TEXNAMELEN]) {
 
 static void * find_texture(char name[TEXNAMELEN]) {
   int i;
-  
+
   for (i=0; i<numtextures; i++) {
-    if (strcmp(name, textable[i].name) == 0) 
-	return textable[i].tex;	
+    if (strcmp(name, textable[i].name) == 0)
+    return textable[i].tex;
   }
   fprintf(stderr, "Undefined texture '%s', using default. \n",name);
-  return(defaulttex.tex); 
+  return(defaulttex.tex);
 }
 
 apiflt degtorad(apiflt deg) {
@@ -163,7 +163,7 @@ static void InitRot3d(RotMat * rot, apiflt x, apiflt y, apiflt z) {
   rot->rx1=cos(y)*cos(z);
   rot->rx2=sin(x)*sin(y)*cos(z) - cos(x)*sin(z);
   rot->rx3=sin(x)*sin(z) + cos(x)*cos(z)*sin(y);
-  
+
   rot->ry1=cos(y)*sin(z);
   rot->ry2=cos(x)*cos(z) + sin(x)*sin(y)*sin(z);
   rot->ry3=cos(x)*sin(y)*sin(z) - sin(x)*cos(z);
@@ -178,7 +178,7 @@ static void Rotate3d(RotMat * rot, vector * vec) {
   tmp.x=(vec->x*(rot->rx1) + vec->y*(rot->rx2) + vec->z*(rot->rx3));
   tmp.y=(vec->x*(rot->ry1) + vec->y*(rot->ry2) + vec->z*(rot->ry3));
   tmp.z=(vec->x*(rot->rz1) + vec->y*(rot->rz2) + vec->z*(rot->rz3));
-  *vec=tmp; 
+  *vec=tmp;
 }
 
 static void Scale3d(vector * scale, vector * vec) {
@@ -209,8 +209,8 @@ static errcode GetString(FILE * dfile, const char * string) {
 unsigned int readmodel(char * modelfile, SceneHandle scene) {
   FILE * dfile;
   errcode rc;
- 
-  reset_tex_table(); 
+
+  reset_tex_table();
   dfile=NULL;
 
   dfile=fopen(modelfile,"r");
@@ -218,9 +218,11 @@ unsigned int readmodel(char * modelfile, SceneHandle scene) {
     return PARSEBADFILE;
   }
 
-  rc = GetScenedefs(dfile, scene); 
-  if (rc != PARSENOERR)
+  rc = GetScenedefs(dfile, scene);
+  if (rc != PARSENOERR) {
+    fclose(dfile);
     return rc;
+  }
 
   scenebackcol.r = 0.0; /* default background is black */
   scenebackcol.g = 0.0;
@@ -229,7 +231,7 @@ unsigned int readmodel(char * modelfile, SceneHandle scene) {
   numobjectsparsed=0;
   while ((rc = GetObject(dfile, scene)) == PARSENOERR) {
     numobjectsparsed++;
-  } 
+  }
   fclose(dfile);
 
   if (rc == PARSEEOF)
@@ -250,16 +252,16 @@ static errcode GetScenedefs(FILE * dfile, SceneHandle scene) {
   float a,b,c;
   errcode rc = PARSENOERR;
 
-  rc |= GetString(dfile, "BEGIN_SCENE"); 
+  rc |= GetString(dfile, "BEGIN_SCENE");
 
   rc |= GetString(dfile, "OUTFILE");
-  fscanf(dfile, "%s", outfilename); 
+  fscanf(dfile, "%s", outfilename);
 #ifdef _WIN32
   if (strcmp (outfilename, "/dev/null") == 0) {
     strcpy (outfilename, "NUL:");
   }
 #endif
- 
+
   rc |= GetString(dfile, "RESOLUTION");
   fscanf(dfile, "%d %d", &xres, &yres);
 
@@ -275,7 +277,7 @@ static errcode GetScenedefs(FILE * dfile, SceneHandle scene) {
   zoom=a;
 
   rc |= GetString(dfile, "ASPECTRATIO");
-  fscanf(dfile, "%f", &b);  
+  fscanf(dfile, "%f", &b);
   aspectratio=b;
 
   rc |= GetString(dfile, "ANTIALIASING");
@@ -313,14 +315,14 @@ static errcode GetScenedefs(FILE * dfile, SceneHandle scene) {
 
 static errcode GetObject(FILE * dfile, SceneHandle scene) {
   char objtype[80];
- 
+
   fscanf(dfile, "%s", objtype);
   if (!stringcmp(objtype, "END_SCENE")) {
     return PARSEEOF; /* end parsing */
   }
   if (!stringcmp(objtype, "TEXDEF")) {
     return GetTexDef(dfile);
-  }	
+  }
   if (!stringcmp(objtype, "TEXALIAS")) {
     return GetTexAlias(dfile);
   }
@@ -373,8 +375,8 @@ static errcode GetObject(FILE * dfile, SceneHandle scene) {
 
 static errcode GetVector(FILE * dfile, vector * v1) {
   float a, b, c;
-  
-  fscanf(dfile, "%f %f %f", &a, &b, &c); 
+
+  fscanf(dfile, "%f %f %f", &a, &b, &c);
   v1->x=a;
   v1->y=b;
   v1->z=c;
@@ -384,9 +386,9 @@ static errcode GetVector(FILE * dfile, vector * v1) {
 
 static errcode GetColor(FILE * dfile, color * c1) {
   float r, g, b;
-  int rc; 
+  int rc;
 
-  rc = GetString(dfile, "COLOR"); 
+  rc = GetString(dfile, "COLOR");
   fscanf(dfile, "%f %f %f", &r, &g, &b);
   c1->r=r;
   c1->g=g;
@@ -399,7 +401,7 @@ static errcode GetTexDef(FILE * dfile) {
   char texname[TEXNAMELEN];
 
   fscanf(dfile, "%s", texname);
-  add_texture(GetTexBody(dfile), texname); 
+  add_texture(GetTexBody(dfile), texname);
 
   return PARSENOERR;
 }
@@ -410,7 +412,7 @@ static errcode GetTexAlias(FILE * dfile) {
 
   fscanf(dfile, "%s", texname);
   fscanf(dfile, "%s", aliasname);
-  add_texture(find_texture(aliasname), texname); 
+  add_texture(find_texture(aliasname), texname);
 
   return PARSENOERR;
 }
@@ -421,7 +423,7 @@ static errcode GetTexture(FILE * dfile, void ** tex) {
   errcode rc = PARSENOERR;
 
   fscanf(dfile, "%s", tmp);
-  if (!stringcmp("TEXTURE", tmp)) {	
+  if (!stringcmp("TEXTURE", tmp)) {
     *tex = GetTexBody(dfile);
   }
   else
@@ -434,11 +436,11 @@ void * GetTexBody(FILE * dfile) {
   char tmp[255];
   float a,b,c,d, phong, phongexp, phongtype;
   apitexture tex;
-  void * voidtex; 
+  void * voidtex;
   errcode rc;
 
   rc = GetString(dfile, "AMBIENT");
-  fscanf(dfile, "%f", &a); 
+  fscanf(dfile, "%f", &a);
   tex.ambient=a;
 
   rc |= GetString(dfile, "DIFFUSE");
@@ -450,7 +452,7 @@ void * GetTexBody(FILE * dfile) {
   tex.specular=c;
 
   rc |= GetString(dfile, "OPACITY");
-  fscanf(dfile, "%f", &d);  
+  fscanf(dfile, "%f", &d);
   tex.opacity=d;
 
   fscanf(dfile, "%s", tmp);
@@ -464,24 +466,24 @@ void * GetTexBody(FILE * dfile) {
     }
     else {
       phongtype = RT_PHONG_PLASTIC;
-    } 
+    }
 
     fscanf(dfile, "%f", &phong);
     GetString(dfile, "PHONG_SIZE");
     fscanf(dfile, "%f", &phongexp);
     fscanf(dfile, "%s", tmp);
-  }     
-  else { 
+  }
+  else {
     phong = 0.0;
     phongexp = 100.0;
     phongtype = RT_PHONG_PLASTIC;
   }
-  
+
   fscanf(dfile, "%f %f %f", &a, &b, &c);
   tex.col.r = a;
   tex.col.g = b;
   tex.col.b = c;
- 
+
   rc |= GetString(dfile, "TEXFUNC");
   fscanf(dfile, "%d", &tex.texturefunc);
   if (tex.texturefunc >= 7) {    /* if its an image map, we need a filename */
@@ -512,19 +514,19 @@ static errcode GetLight(FILE * dfile) {
   apiflt rad;
   vector ctr;
   apitexture tex;
-  float a; 
+  float a;
   errcode rc;
 
-  memset(&tex, 0, sizeof(apitexture)); 
+  memset(&tex, 0, sizeof(apitexture));
 
-  rc = GetString(dfile,"CENTER"); 
-  rc |= GetVector(dfile, &ctr); 
+  rc = GetString(dfile,"CENTER");
+  rc |= GetVector(dfile, &ctr);
   rc |= GetString(dfile,"RAD");
-  fscanf(dfile,"%f",&a);  /* read in radius */ 
+  fscanf(dfile,"%f",&a);  /* read in radius */
   rad=a;
 
   rc |= GetColor(dfile, &tex.col);
-  
+
   rt_light(rt_texture(&tex), ctr, rad);
 
   return rc;
@@ -532,7 +534,7 @@ static errcode GetLight(FILE * dfile) {
 
 static errcode GetBackGnd(FILE * dfile) {
   float r,g,b;
-  
+
   fscanf(dfile, "%f %f %f", &r, &g, &b);
 
   scenebackcol.r=r;
@@ -558,7 +560,7 @@ static errcode GetCylinder(FILE * dfile) {
   rad=a;
 
   rc |= GetTexture(dfile, &tex);
-  rt_cylinder(tex, ctr, axis, rad); 
+  rt_cylinder(tex, ctr, axis, rad);
 
   return rc;
 }
@@ -577,7 +579,7 @@ static errcode GetFCylinder(FILE * dfile) {
   rc |= GetVector(dfile, &pnt2);
 
   ctr=pnt1;
-  axis.x=pnt2.x - pnt1.x; 
+  axis.x=pnt2.x - pnt1.x;
   axis.y=pnt2.y - pnt1.y;
   axis.z=pnt2.z - pnt1.z;
 
@@ -586,11 +588,11 @@ static errcode GetFCylinder(FILE * dfile) {
   rad=a;
 
   rc |= GetTexture(dfile, &tex);
-  rt_fcylinder(tex, ctr, axis, rad); 
+  rt_fcylinder(tex, ctr, axis, rad);
 
   return rc;
 }
- 
+
 static errcode GetPolyCylinder(FILE * dfile) {
   apiflt rad;
   vector * temp;
@@ -606,20 +608,20 @@ static errcode GetPolyCylinder(FILE * dfile) {
 
   for (i=0; i<numpts; i++) {
     rc |= GetVector(dfile, &temp[i]);
-  }         
+  }
 
   rc |= GetString(dfile, "RAD");
   fscanf(dfile, "%f", &a);
   rad=a;
 
   rc |= GetTexture(dfile, &tex);
-  rt_polycylinder(tex, temp, numpts, rad); 
+  rt_polycylinder(tex, temp, numpts, rad);
 
   free(temp);
 
   return rc;
 }
- 
+
 
 static errcode GetSphere(FILE * dfile) {
   apiflt rad;
@@ -627,15 +629,15 @@ static errcode GetSphere(FILE * dfile) {
   void * tex;
   float a;
   errcode rc;
- 
+
   rc = GetString(dfile,"CENTER");
-  rc |= GetVector(dfile, &ctr); 
+  rc |= GetVector(dfile, &ctr);
   rc |= GetString(dfile, "RAD");
-  fscanf(dfile,"%f",&a); 
+  fscanf(dfile,"%f",&a);
   rad=a;
 
-  rc |= GetTexture(dfile, &tex); 
- 
+  rc |= GetTexture(dfile, &tex);
+
   rt_sphere(tex, ctr, rad);
 
   return rc;
@@ -660,11 +662,11 @@ static errcode GetPlane(FILE * dfile) {
 
 static errcode GetVol(FILE * dfile) {
   vector min, max;
-  int x,y,z;  
+  int x,y,z;
   char fname[255];
   void * tex;
   errcode rc;
- 
+
   rc = GetString(dfile, "MIN");
   rc |= GetVector(dfile, &min);
   rc |= GetString(dfile, "MAX");
@@ -672,10 +674,10 @@ static errcode GetVol(FILE * dfile) {
   rc |= GetString(dfile, "DIM");
   fscanf(dfile, "%d %d %d ", &x, &y, &z);
   rc |= GetString(dfile, "FILE");
-  fscanf(dfile, "%s", fname);  
+  fscanf(dfile, "%s", fname);
   rc |= GetTexture(dfile, &tex);
- 
-  rt_scalarvol(tex, min, max, x, y, z, fname, NULL); 
+
+  rt_scalarvol(tex, min, max, x, y, z, fname, NULL);
 
   return rc;
 }
@@ -702,7 +704,7 @@ static errcode GetRing(FILE * dfile) {
   void * tex;
   float a,b;
   errcode rc;
- 
+
   rc = GetString(dfile, "CENTER");
   rc |= GetVector(dfile, &ctr);
   rc |= GetString(dfile, "NORMAL");
@@ -712,7 +714,7 @@ static errcode GetRing(FILE * dfile) {
   rc |= GetString(dfile, "OUTER");
   fscanf(dfile, " %f ", &b);
   rc |= GetTexture(dfile, &tex);
- 
+
   rt_ring(tex, ctr, normal, a, b);
 
   return rc;
@@ -752,7 +754,7 @@ static errcode GetSTri(FILE * dfile) {
 
   rc |= GetString(dfile, "V2");
   rc |= GetVector(dfile, &v2);
-  
+
   rc |= GetString(dfile, "N0");
   rc |= GetVector(dfile, &n0);
 
@@ -763,7 +765,7 @@ static errcode GetSTri(FILE * dfile) {
   rc |= GetVector(dfile, &n2);
 
   rc |= GetTexture(dfile, &tex);
-  
+
   rt_stri(tex, v0, v1, v2, n0, n1, n2);
 
   return rc;
@@ -781,7 +783,7 @@ static errcode GetLandScape(FILE * dfile) {
   fscanf(dfile, "%d %d", &m, &n);
 
   rc |= GetString(dfile, "SCALE");
-  fscanf(dfile, "%f %f", &a, &b);   
+  fscanf(dfile, "%f %f", &a, &b);
   wx=a;
   wy=b;
 
@@ -807,13 +809,13 @@ static errcode GetTPolyFile(FILE * dfile) {
 
   totalpolys=0;
 
-  rc = GetString(dfile, "SCALE"); 
+  rc = GetString(dfile, "SCALE");
   rc |= GetVector(dfile, &scale);
 
   rc |= GetString(dfile, "ROT");
   rc |= GetVector(dfile, &rot);
 
-  degvectoradvec(&rot); 
+  degvectoradvec(&rot);
   InitRot3d(&RotA, rot.x, rot.y, rot.z);
 
   rc |= GetString(dfile, "CENTER");
@@ -834,8 +836,8 @@ static errcode GetTPolyFile(FILE * dfile) {
     if (v != 3) { break; }
 
     totalpolys++;
-    v=0; 
-     
+    v=0;
+
     rc |= GetVector(ifp, &v0);
     rc |= GetVector(ifp, &v1);
     rc |= GetVector(ifp, &v2);
@@ -844,9 +846,9 @@ static errcode GetTPolyFile(FILE * dfile) {
     Scale3d(&scale, &v1);
     Scale3d(&scale, &v2);
 
-    Rotate3d(&RotA, &v0); 
-    Rotate3d(&RotA, &v1); 
-    Rotate3d(&RotA, &v2); 
+    Rotate3d(&RotA, &v0);
+    Rotate3d(&RotA, &v1);
+    Rotate3d(&RotA, &v2);
 
     Trans3d(&ctr, &v0);
     Trans3d(&ctr, &v1);
diff --git a/examples/parallel_for/tachyon/src/parse.h b/examples/parallel_for/tachyon/src/parse.h
index b43e3f4..80afd65 100644
--- a/examples/parallel_for/tachyon/src/parse.h
+++ b/examples/parallel_for/tachyon/src/parse.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/plane.cpp b/examples/parallel_for/tachyon/src/plane.cpp
index 0d56b00..3fdc79d 100644
--- a/examples/parallel_for/tachyon/src/plane.cpp
+++ b/examples/parallel_for/tachyon/src/plane.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/plane.h b/examples/parallel_for/tachyon/src/plane.h
index 459128f..9b1741a 100644
--- a/examples/parallel_for/tachyon/src/plane.h
+++ b/examples/parallel_for/tachyon/src/plane.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/ppm.cpp b/examples/parallel_for/tachyon/src/ppm.cpp
index 8651f91..56c9c85 100644
--- a/examples/parallel_for/tachyon/src/ppm.cpp
+++ b/examples/parallel_for/tachyon/src/ppm.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/ppm.h b/examples/parallel_for/tachyon/src/ppm.h
index 0747f9d..59cef50 100644
--- a/examples/parallel_for/tachyon/src/ppm.h
+++ b/examples/parallel_for/tachyon/src/ppm.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/pthread.cpp b/examples/parallel_for/tachyon/src/pthread.cpp
index 64f78eb..959cbc1 100644
--- a/examples/parallel_for/tachyon/src/pthread.cpp
+++ b/examples/parallel_for/tachyon/src/pthread.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/pthread_w.h b/examples/parallel_for/tachyon/src/pthread_w.h
index 009844f..4860913 100644
--- a/examples/parallel_for/tachyon/src/pthread_w.h
+++ b/examples/parallel_for/tachyon/src/pthread_w.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/quadric.cpp b/examples/parallel_for/tachyon/src/quadric.cpp
index 59a869d..ee4adb3 100644
--- a/examples/parallel_for/tachyon/src/quadric.cpp
+++ b/examples/parallel_for/tachyon/src/quadric.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/quadric.h b/examples/parallel_for/tachyon/src/quadric.h
index 18b011f..c381219 100644
--- a/examples/parallel_for/tachyon/src/quadric.h
+++ b/examples/parallel_for/tachyon/src/quadric.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/render.cpp b/examples/parallel_for/tachyon/src/render.cpp
index 1a75d06..60b7b5f 100644
--- a/examples/parallel_for/tachyon/src/render.cpp
+++ b/examples/parallel_for/tachyon/src/render.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/render.h b/examples/parallel_for/tachyon/src/render.h
index 9a2a926..b47b8ce 100644
--- a/examples/parallel_for/tachyon/src/render.h
+++ b/examples/parallel_for/tachyon/src/render.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/ring.cpp b/examples/parallel_for/tachyon/src/ring.cpp
index a14a5d1..c01e219 100644
--- a/examples/parallel_for/tachyon/src/ring.cpp
+++ b/examples/parallel_for/tachyon/src/ring.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/ring.h b/examples/parallel_for/tachyon/src/ring.h
index 68be511..2262776 100644
--- a/examples/parallel_for/tachyon/src/ring.h
+++ b/examples/parallel_for/tachyon/src/ring.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/shade.cpp b/examples/parallel_for/tachyon/src/shade.cpp
index f67bb4b..49b4b4d 100644
--- a/examples/parallel_for/tachyon/src/shade.cpp
+++ b/examples/parallel_for/tachyon/src/shade.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/shade.h b/examples/parallel_for/tachyon/src/shade.h
index 5ec1bb8..24718b3 100644
--- a/examples/parallel_for/tachyon/src/shade.h
+++ b/examples/parallel_for/tachyon/src/shade.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/sphere.cpp b/examples/parallel_for/tachyon/src/sphere.cpp
index 58a44fb..2013b81 100644
--- a/examples/parallel_for/tachyon/src/sphere.cpp
+++ b/examples/parallel_for/tachyon/src/sphere.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/sphere.h b/examples/parallel_for/tachyon/src/sphere.h
index 2bc4df3..e90ecea 100644
--- a/examples/parallel_for/tachyon/src/sphere.h
+++ b/examples/parallel_for/tachyon/src/sphere.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/tachyon_video.cpp b/examples/parallel_for/tachyon/src/tachyon_video.cpp
index 8cfb735..ad7eeb1 100644
--- a/examples/parallel_for/tachyon/src/tachyon_video.cpp
+++ b/examples/parallel_for/tachyon/src/tachyon_video.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/tachyon_video.h b/examples/parallel_for/tachyon/src/tachyon_video.h
index 06e554c..1c15330 100644
--- a/examples/parallel_for/tachyon/src/tachyon_video.h
+++ b/examples/parallel_for/tachyon/src/tachyon_video.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/texture.cpp b/examples/parallel_for/tachyon/src/texture.cpp
index 832d7ea..feb36b6 100644
--- a/examples/parallel_for/tachyon/src/texture.cpp
+++ b/examples/parallel_for/tachyon/src/texture.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/texture.h b/examples/parallel_for/tachyon/src/texture.h
index 7e902e0..d16ffb3 100644
--- a/examples/parallel_for/tachyon/src/texture.h
+++ b/examples/parallel_for/tachyon/src/texture.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/tgafile.cpp b/examples/parallel_for/tachyon/src/tgafile.cpp
index 8049bd4..6b0a61b 100644
--- a/examples/parallel_for/tachyon/src/tgafile.cpp
+++ b/examples/parallel_for/tachyon/src/tgafile.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/tgafile.h b/examples/parallel_for/tachyon/src/tgafile.h
index fb9b079..97d7a0e 100644
--- a/examples/parallel_for/tachyon/src/tgafile.h
+++ b/examples/parallel_for/tachyon/src/tgafile.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/trace.h b/examples/parallel_for/tachyon/src/trace.h
index 24e1a94..8fb5f3c 100644
--- a/examples/parallel_for/tachyon/src/trace.h
+++ b/examples/parallel_for/tachyon/src/trace.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/trace.serial.cpp b/examples/parallel_for/tachyon/src/trace.serial.cpp
index 400591c..843ede8 100644
--- a/examples/parallel_for/tachyon/src/trace.serial.cpp
+++ b/examples/parallel_for/tachyon/src/trace.serial.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/trace.simple.cpp b/examples/parallel_for/tachyon/src/trace.simple.cpp
index 8de8684..f0207ae 100644
--- a/examples/parallel_for/tachyon/src/trace.simple.cpp
+++ b/examples/parallel_for/tachyon/src/trace.simple.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
@@ -76,11 +76,10 @@ static color_t render_one_pixel (int x, int y, unsigned int *local_mbox, unsigne
                                  int startx, int stopx, int starty, int stopy)
 {
     /* private vars moved inside loop */
-    ray primary, sample;
-    color col, avcol;
+    ray primary;
+    color col;
     int R,G,B;
     intersectstruct local_intersections;
-    int alias;
     /* end private */
 
     primary = camray(&scene, x, y);
diff --git a/examples/parallel_for/tachyon/src/trace.tbb.cpp b/examples/parallel_for/tachyon/src/trace.tbb.cpp
index a709e1e..add6dd4 100644
--- a/examples/parallel_for/tachyon/src/trace.tbb.cpp
+++ b/examples/parallel_for/tachyon/src/trace.tbb.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/trace.tbb1d.cpp b/examples/parallel_for/tachyon/src/trace.tbb1d.cpp
index 3b261ff..ad8c6cf 100644
--- a/examples/parallel_for/tachyon/src/trace.tbb1d.cpp
+++ b/examples/parallel_for/tachyon/src/trace.tbb1d.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/trace_rest.cpp b/examples/parallel_for/tachyon/src/trace_rest.cpp
index 4823da2..853b31c 100644
--- a/examples/parallel_for/tachyon/src/trace_rest.cpp
+++ b/examples/parallel_for/tachyon/src/trace_rest.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/triangle.cpp b/examples/parallel_for/tachyon/src/triangle.cpp
index bbc1882..fdb2f5a 100644
--- a/examples/parallel_for/tachyon/src/triangle.cpp
+++ b/examples/parallel_for/tachyon/src/triangle.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/triangle.h b/examples/parallel_for/tachyon/src/triangle.h
index 02f7a0f..4e1335c 100644
--- a/examples/parallel_for/tachyon/src/triangle.h
+++ b/examples/parallel_for/tachyon/src/triangle.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/types.h b/examples/parallel_for/tachyon/src/types.h
index f0be477..c32c8f7 100644
--- a/examples/parallel_for/tachyon/src/types.h
+++ b/examples/parallel_for/tachyon/src/types.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/ui.cpp b/examples/parallel_for/tachyon/src/ui.cpp
index f9b860f..25ef041 100644
--- a/examples/parallel_for/tachyon/src/ui.cpp
+++ b/examples/parallel_for/tachyon/src/ui.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/ui.h b/examples/parallel_for/tachyon/src/ui.h
index 0c66ce9..6973abf 100644
--- a/examples/parallel_for/tachyon/src/ui.h
+++ b/examples/parallel_for/tachyon/src/ui.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/util.cpp b/examples/parallel_for/tachyon/src/util.cpp
index 79d182d..f2d84bf 100644
--- a/examples/parallel_for/tachyon/src/util.cpp
+++ b/examples/parallel_for/tachyon/src/util.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/util.h b/examples/parallel_for/tachyon/src/util.h
index 32f3f90..6891a99 100644
--- a/examples/parallel_for/tachyon/src/util.h
+++ b/examples/parallel_for/tachyon/src/util.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/vector.cpp b/examples/parallel_for/tachyon/src/vector.cpp
index 0f842bc..a194b6b 100644
--- a/examples/parallel_for/tachyon/src/vector.cpp
+++ b/examples/parallel_for/tachyon/src/vector.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/vector.h b/examples/parallel_for/tachyon/src/vector.h
index a3381f2..9578e8d 100644
--- a/examples/parallel_for/tachyon/src/vector.h
+++ b/examples/parallel_for/tachyon/src/vector.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/src/vol.cpp b/examples/parallel_for/tachyon/src/vol.cpp
index 60eb111..05796d5 100644
--- a/examples/parallel_for/tachyon/src/vol.cpp
+++ b/examples/parallel_for/tachyon/src/vol.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
@@ -73,7 +73,7 @@ int scalarvol_bbox(void * obj, vector * min, vector * max) {
   return 1;
 }
 
-void * newscalarvol(void * intex, vector min, vector max, 
+void * newscalarvol(void * intex, vector min, vector max,
                     int xs, int ys, int zs, char * fname, scalarvol * invol) {
   box * bx;
   texture * tx, * tex;
@@ -128,7 +128,7 @@ void * newscalarvol(void * intex, vector min, vector max,
 color VoxelColor(flt scalar) {
   color col;
 
-  if (scalar > 1.0) 
+  if (scalar > 1.0)
     scalar = 1.0;
 
   if (scalar < 0.0)
@@ -153,30 +153,30 @@ color VoxelColor(flt scalar) {
   }
 
   return col;
-} 
+}
 
 color scalar_volume_texture(vector * hit, texture * tex, ray * ry) {
   color col, col2;
   box * bx;
   flt a, tx1, tx2, ty1, ty2, tz1, tz2;
   flt tnear, tfar;
-  flt t, tdist, dt, sum, tt; 
+  flt t, tdist, dt, sum, tt;
   vector pnt, bln;
   scalarvol * vol;
-  flt scalar, transval; 
+  flt scalar, transval;
   int x, y, z;
   unsigned char * ptr;
 
   bx=(box *) tex->obj;
   vol=(scalarvol *)bx->tex->img;
-   
+
   col.r=0.0;
   col.g=0.0;
   col.b=0.0;
- 
+
   tnear= -FHUGE;
   tfar= FHUGE;
- 
+
   if (ry->d.x == 0.0) {
     if ((ry->o.x < bx->min.x) || (ry->o.x > bx->max.x)) return col;
   }
@@ -189,7 +189,7 @@ color scalar_volume_texture(vector * hit, texture * tex, ray * ry) {
   }
   if (tnear > tfar) return col;
   if (tfar < 0.0) return col;
- 
+
  if (ry->d.y == 0.0) {
     if ((ry->o.y < bx->min.y) || (ry->o.y > bx->max.y)) return col;
   }
@@ -202,7 +202,7 @@ color scalar_volume_texture(vector * hit, texture * tex, ray * ry) {
   }
   if (tnear > tfar) return col;
   if (tfar < 0.0) return col;
- 
+
   if (ry->d.z == 0.0) {
     if ((ry->o.z < bx->min.z) || (ry->o.z > bx->max.z)) return col;
   }
@@ -215,17 +215,17 @@ color scalar_volume_texture(vector * hit, texture * tex, ray * ry) {
   }
   if (tnear > tfar) return col;
   if (tfar < 0.0) return col;
- 
+
   if (tnear < 0.0) tnear=0.0;
- 
+
   tdist=sqrt((flt) (vol->xres*vol->xres + vol->yres*vol->yres + vol->zres*vol->zres));
-  tt = (vol->opacity / tdist); 
+  tt = (vol->opacity / tdist);
 
   bln.x=fabs(bx->min.x - bx->max.x);
   bln.y=fabs(bx->min.y - bx->max.y);
   bln.z=fabs(bx->min.z - bx->max.z);
-  
-  dt=sqrt(bln.x*bln.x + bln.y*bln.y + bln.z*bln.z) / tdist; 
+
+  dt=sqrt(bln.x*bln.x + bln.y*bln.y + bln.z*bln.z) / tdist;
   sum=0.0;
 
   /* move the volume residency check out of loop.. */
@@ -233,23 +233,23 @@ color scalar_volume_texture(vector * hit, texture * tex, ray * ry) {
     LoadVol(vol);
     vol->loaded=1;
   }
- 
+
   for (t=tnear; t<=tfar; t+=dt) {
     pnt.x=((ry->o.x + (ry->d.x * t)) - bx->min.x) / bln.x;
     pnt.y=((ry->o.y + (ry->d.y * t)) - bx->min.y) / bln.y;
     pnt.z=((ry->o.z + (ry->d.z * t)) - bx->min.z) / bln.z;
- 
+
     x=(int) ((vol->xres - 1.5) * pnt.x + 0.5);
     y=(int) ((vol->yres - 1.5) * pnt.y + 0.5);
     z=(int) ((vol->zres - 1.5) * pnt.z + 0.5);
-   
+
     ptr = vol->data + ((vol->xres * vol->yres * z) + (vol->xres * y) + x);
-   
+
     scalar = (flt) ((flt) 1.0 * ((int) ptr[0])) / 255.0;
 
-    sum += tt * scalar; 
+    sum += tt * scalar;
 
-    transval = tt * scalar; 
+    transval = tt * scalar;
 
     col2 = VoxelColor(scalar);
 
@@ -258,39 +258,39 @@ color scalar_volume_texture(vector * hit, texture * tex, ray * ry) {
       col.g += transval * col2.g;
       col.b += transval * col2.b;
       if (sum < 0.0) sum=0.0;
-    }  
-    else { 
+    }
+    else {
       sum=1.0;
     }
   }
 
-  if (sum < 1.0) {      /* spawn transmission rays / refraction */    
+  if (sum < 1.0) {      /* spawn transmission rays / refraction */
     color transcol;
 
     transcol = shade_transmission(ry, hit, 1.0 - sum);
 
-    col.r += transcol.r; /* add the transmitted ray  */    
+    col.r += transcol.r; /* add the transmitted ray  */
     col.g += transcol.g; /* to the diffuse and       */
-    col.b += transcol.b; /* transmission total..     */  
+    col.b += transcol.b; /* transmission total..     */
   }
 
   return col;
 }
 
-void LoadVol(scalarvol * vol) { 
+void LoadVol(scalarvol * vol) {
   FILE * dfile;
   size_t status;
   char msgtxt[2048];
- 
+
   dfile=fopen(vol->name, "r");
   if (dfile==NULL) {
     char msgtxt[2048];
-    sprintf(msgtxt, "Vol: can't open %s for input!!! Aborting\n",vol->name); 
+    sprintf(msgtxt, "Vol: can't open %s for input!!! Aborting\n",vol->name);
     rt_ui_message(MSG_ERR, msgtxt);
     rt_ui_message(MSG_ABORT, "Rendering Aborted.");
     exit(1);
-  }  
- 
+  }
+
   sprintf(msgtxt, "loading %dx%dx%d volume set from %s",
       vol->xres, vol->yres, vol->zres, vol->name);
   rt_ui_message(MSG_0, msgtxt);
@@ -298,4 +298,5 @@ void LoadVol(scalarvol * vol) {
   vol->data = (unsigned char *)rt_getmem(vol->xres * vol->yres * vol->zres);
 
   status=fread(vol->data, 1, (vol->xres * vol->yres * vol->zres), dfile);
+  fclose(dfile);
 }
diff --git a/examples/parallel_for/tachyon/src/vol.h b/examples/parallel_for/tachyon/src/vol.h
index 76776ad..2637a7e 100644
--- a/examples/parallel_for/tachyon/src/vol.h
+++ b/examples/parallel_for/tachyon/src/vol.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/project.pbxproj b/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/project.pbxproj
index b4ee8cc..048986f 100644
--- a/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/project.pbxproj
+++ b/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/project.pbxproj
@@ -148,6 +148,54 @@
 		84B8DA9A152CADF400D59B95 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; };
 		84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D017551527431F0008A4E0 /* Cocoa.framework */; };
 		84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D01775152744BD0008A4E0 /* OpenGL.framework */; };
+		D3E786C41C0E36AC006995F1 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; };
+		D3E786C51C0E36B0006995F1 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA6F152CA90100D59B95 /* main.m */; };
+		D3E786C61C0E36BC006995F1 /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; };
+		D3E786C71C0E36C1006995F1 /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; };
+		D3E786C81C0E373D006995F1 /* trace.tbb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84011729152D6E3E00B07E4D /* trace.tbb.cpp */; };
+		D3E786C91C0E3742006995F1 /* api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B6152CBBF600B07E4D /* api.cpp */; };
+		D3E786CA1C0E375D006995F1 /* apigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B7152CBBF600B07E4D /* apigeom.cpp */; };
+		D3E786CB1C0E375D006995F1 /* apitrigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B8152CBBF600B07E4D /* apitrigeom.cpp */; };
+		D3E786CC1C0E375D006995F1 /* bndbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B9152CBBF600B07E4D /* bndbox.cpp */; };
+		D3E786CD1C0E375D006995F1 /* box.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BA152CBBF600B07E4D /* box.cpp */; };
+		D3E786CE1C0E375D006995F1 /* camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BB152CBBF600B07E4D /* camera.cpp */; };
+		D3E786CF1C0E375D006995F1 /* coordsys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BC152CBBF600B07E4D /* coordsys.cpp */; };
+		D3E786D01C0E375D006995F1 /* cylinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BD152CBBF600B07E4D /* cylinder.cpp */; };
+		D3E786D11C0E375D006995F1 /* extvol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BE152CBBF600B07E4D /* extvol.cpp */; };
+		D3E786D21C0E375D006995F1 /* global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BF152CBBF600B07E4D /* global.cpp */; };
+		D3E786D31C0E375D006995F1 /* grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C0152CBBF600B07E4D /* grid.cpp */; };
+		D3E786D41C0E375D006995F1 /* imageio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C1152CBBF600B07E4D /* imageio.cpp */; };
+		D3E786D51C0E375D006995F1 /* imap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C2152CBBF600B07E4D /* imap.cpp */; };
+		D3E786D61C0E375D006995F1 /* intersect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C3152CBBF600B07E4D /* intersect.cpp */; };
+		D3E786D71C0E375D006995F1 /* jpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C4152CBBF600B07E4D /* jpeg.cpp */; };
+		D3E786D81C0E375D006995F1 /* light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C5152CBBF600B07E4D /* light.cpp */; };
+		D3E786D91C0E375D006995F1 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C6152CBBF600B07E4D /* main.cpp */; };
+		D3E786DA1C0E375D006995F1 /* objbound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C7152CBBF600B07E4D /* objbound.cpp */; };
+		D3E786DB1C0E375D006995F1 /* parse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C8152CBBF600B07E4D /* parse.cpp */; };
+		D3E786DC1C0E375D006995F1 /* plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C9152CBBF600B07E4D /* plane.cpp */; };
+		D3E786DD1C0E375D006995F1 /* ppm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CA152CBBF600B07E4D /* ppm.cpp */; };
+		D3E786DE1C0E375D006995F1 /* pthread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CB152CBBF600B07E4D /* pthread.cpp */; };
+		D3E786DF1C0E375D006995F1 /* quadric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CC152CBBF600B07E4D /* quadric.cpp */; };
+		D3E786E01C0E375D006995F1 /* render.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CD152CBBF600B07E4D /* render.cpp */; };
+		D3E786E11C0E375D006995F1 /* ring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CE152CBBF600B07E4D /* ring.cpp */; };
+		D3E786E21C0E375D006995F1 /* shade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CF152CBBF600B07E4D /* shade.cpp */; };
+		D3E786E31C0E375D006995F1 /* sphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D0152CBBF600B07E4D /* sphere.cpp */; };
+		D3E786E41C0E375D006995F1 /* tachyon_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D1152CBBF600B07E4D /* tachyon_video.cpp */; };
+		D3E786E51C0E375D006995F1 /* texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D2152CBBF600B07E4D /* texture.cpp */; };
+		D3E786E61C0E375D006995F1 /* tgafile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D3152CBBF600B07E4D /* tgafile.cpp */; };
+		D3E786E71C0E375D006995F1 /* trace_rest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D4152CBBF600B07E4D /* trace_rest.cpp */; };
+		D3E786E81C0E375D006995F1 /* triangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DC152CBBF600B07E4D /* triangle.cpp */; };
+		D3E786E91C0E375D006995F1 /* ui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DD152CBBF600B07E4D /* ui.cpp */; };
+		D3E786EA1C0E375D006995F1 /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DE152CBBF600B07E4D /* util.cpp */; };
+		D3E786EB1C0E375D006995F1 /* vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DF152CBBF600B07E4D /* vector.cpp */; };
+		D3E786F01C0E38F0006995F1 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D3E786EC1C0E38E2006995F1 /* libtbb.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };
+		D3E786F11C0E38F4006995F1 /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D3E786ED1C0E38E2006995F1 /* libtbbmalloc.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };
+		D3E786F21C0E394C006995F1 /* vol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116E0152CBBF600B07E4D /* vol.cpp */; };
+		D3E786F31C0E3A01006995F1 /* libtbb.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D3E786EC1C0E38E2006995F1 /* libtbb.dylib */; };
+		D3E786F41C0E3A08006995F1 /* libtbbmalloc.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D3E786ED1C0E38E2006995F1 /* libtbbmalloc.dylib */; };
+		D3E786F71C0E3A33006995F1 /* iOS.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D3E786F51C0E3A27006995F1 /* iOS.storyboard */; };
+		D3E786FA1C0E3DF7006995F1 /* balls.dat in Resources */ = {isa = PBXBuildFile; fileRef = D3E786F81C0E3DEC006995F1 /* balls.dat */; };
+		D3E786FC1C0E44E3006995F1 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D3E786FB1C0E44E3006995F1 /* CoreFoundation.framework */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXFileReference section */
@@ -238,12 +286,18 @@
 		84B8DA7D152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = InfoPlist.strings; sourceTree = "<group>"; };
 		84B8DA7F152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = MainMenu.xib; sourceTree = "<group>"; };
 		84B8DA99152CADF400D59B95 /* macvideo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macvideo.cpp; path = ../../../common/gui/macvideo.cpp; sourceTree = "<group>"; };
-		84D017511527431F0008A4E0 /* tbbExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tbbExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		84D017511527431F0008A4E0 /* tachyon.tbb.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tachyon.tbb.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		84D017551527431F0008A4E0 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
 		84D017581527431F0008A4E0 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
 		84D017591527431F0008A4E0 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
 		84D0175A1527431F0008A4E0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
 		84D01775152744BD0008A4E0 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
+		D3E786AD1C0E3588006995F1 /* tachyon.tbb.ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tachyon.tbb.ios.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		D3E786EC1C0E38E2006995F1 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/ios/libtbb.dylib; sourceTree = "<group>"; };
+		D3E786ED1C0E38E2006995F1 /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = ../../../../lib/ios/libtbbmalloc.dylib; sourceTree = "<group>"; };
+		D3E786F51C0E3A27006995F1 /* iOS.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = iOS.storyboard; path = ../iOS.storyboard; sourceTree = "<group>"; };
+		D3E786F81C0E3DEC006995F1 /* balls.dat */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = balls.dat; path = ../../../../../parallel_for/tachyon/dat/balls.dat; sourceTree = "<group>"; };
+		D3E786FB1C0E44E3006995F1 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.1.sdk/System/Library/Frameworks/CoreFoundation.framework; sourceTree = DEVELOPER_DIR; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -277,6 +331,16 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
+		D3E786AA1C0E3588006995F1 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D3E786FC1C0E44E3006995F1 /* CoreFoundation.framework in Frameworks */,
+				D3E786F01C0E38F0006995F1 /* libtbb.dylib in Frameworks */,
+				D3E786F11C0E38F4006995F1 /* libtbbmalloc.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
@@ -386,6 +450,8 @@
 			children = (
 				84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */,
 				84B8DA7E152CA97B00D59B95 /* MainMenu.xib */,
+				D3E786F51C0E3A27006995F1 /* iOS.storyboard */,
+				D3E786F81C0E3DEC006995F1 /* balls.dat */,
 			);
 			name = Resources;
 			path = ../../../common/gui/xcode/tbbExample/en.lproj;
@@ -411,17 +477,16 @@
 				84B8DA6C152CA8D900D59B95 /* tbbExample */,
 				84D017541527431F0008A4E0 /* Frameworks */,
 				84D017521527431F0008A4E0 /* Products */,
-				84011763152D6F6D00B07E4D /* tbbExample copy-Info.plist */,
-				8401179C152D6F8500B07E4D /* tbbExample copy copy-Info.plist */,
 			);
 			sourceTree = "<group>";
 		};
 		84D017521527431F0008A4E0 /* Products */ = {
 			isa = PBXGroup;
 			children = (
-				84D017511527431F0008A4E0 /* tbbExample.app */,
+				84D017511527431F0008A4E0 /* tachyon.tbb.app */,
 				84011761152D6F6C00B07E4D /* tachyon.serial.app */,
 				8401179A152D6F8400B07E4D /* tachyon.tbb1d.app */,
+				D3E786AD1C0E3588006995F1 /* tachyon.tbb.ios.app */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -429,22 +494,17 @@
 		84D017541527431F0008A4E0 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
-				84D01775152744BD0008A4E0 /* OpenGL.framework */,
-				84D017551527431F0008A4E0 /* Cocoa.framework */,
-				84D017571527431F0008A4E0 /* Other Frameworks */,
-			);
-			name = Frameworks;
-			sourceTree = "<group>";
-		};
-		84D017571527431F0008A4E0 /* Other Frameworks */ = {
-			isa = PBXGroup;
-			children = (
+				D3E786FB1C0E44E3006995F1 /* CoreFoundation.framework */,
+				D3E786EC1C0E38E2006995F1 /* libtbb.dylib */,
+				D3E786ED1C0E38E2006995F1 /* libtbbmalloc.dylib */,
 				84B8DA13152C9AC600D59B95 /* libtbb.dylib */,
 				84D017581527431F0008A4E0 /* AppKit.framework */,
 				84D017591527431F0008A4E0 /* CoreData.framework */,
 				84D0175A1527431F0008A4E0 /* Foundation.framework */,
+				84D01775152744BD0008A4E0 /* OpenGL.framework */,
+				84D017551527431F0008A4E0 /* Cocoa.framework */,
 			);
-			name = "Other Frameworks";
+			name = Frameworks;
 			sourceTree = "<group>";
 		};
 /* End PBXGroup section */
@@ -498,7 +558,24 @@
 			);
 			name = tachyon.tbb;
 			productName = tbbExample;
-			productReference = 84D017511527431F0008A4E0 /* tbbExample.app */;
+			productReference = 84D017511527431F0008A4E0 /* tachyon.tbb.app */;
+			productType = "com.apple.product-type.application";
+		};
+		D3E786AC1C0E3588006995F1 /* tachyon.tbb.ios */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = D3E786C31C0E3588006995F1 /* Build configuration list for PBXNativeTarget "tachyon.tbb.ios" */;
+			buildPhases = (
+				D3E786A91C0E3588006995F1 /* Sources */,
+				D3E786AA1C0E3588006995F1 /* Frameworks */,
+				D3E786AB1C0E3588006995F1 /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = tachyon.tbb.ios;
+			productName = tbbExample;
+			productReference = D3E786AD1C0E3588006995F1 /* tachyon.tbb.ios.app */;
 			productType = "com.apple.product-type.application";
 		};
 /* End PBXNativeTarget section */
@@ -508,7 +585,13 @@
 			isa = PBXProject;
 			attributes = {
 				CLASSPREFIX = tbb;
-				LastUpgradeCheck = 0430;
+				LastUpgradeCheck = 0710;
+				TargetAttributes = {
+					D3E786AC1C0E3588006995F1 = {
+						CreatedOnToolsVersion = 7.1.1;
+						DevelopmentTeam = 7J8M3RM94C;
+					};
+				};
 			};
 			buildConfigurationList = 84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "tachyon" */;
 			compatibilityVersion = "Xcode 3.2";
@@ -516,6 +599,7 @@
 			hasScannedForEncodings = 0;
 			knownRegions = (
 				en,
+				Base,
 			);
 			mainGroup = 84D017461527431F0008A4E0;
 			productRefGroup = 84D017521527431F0008A4E0 /* Products */;
@@ -525,6 +609,7 @@
 				84D017501527431F0008A4E0 /* tachyon.tbb */,
 				8401172B152D6F6C00B07E4D /* tachyon.serial */,
 				84011764152D6F8400B07E4D /* tachyon.tbb1d */,
+				D3E786AC1C0E3588006995F1 /* tachyon.tbb.ios */,
 			);
 		};
 /* End PBXProject section */
@@ -560,6 +645,17 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
+		D3E786AB1C0E3588006995F1 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D3E786F41C0E3A08006995F1 /* libtbbmalloc.dylib in Resources */,
+				D3E786F31C0E3A01006995F1 /* libtbb.dylib in Resources */,
+				D3E786FA1C0E3DF7006995F1 /* balls.dat in Resources */,
+				D3E786F71C0E3A33006995F1 /* iOS.storyboard in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 /* End PBXResourcesBuildPhase section */
 
 /* Begin PBXSourcesBuildPhase section */
@@ -707,6 +803,54 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
+		D3E786A91C0E3588006995F1 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D3E786E41C0E375D006995F1 /* tachyon_video.cpp in Sources */,
+				D3E786DE1C0E375D006995F1 /* pthread.cpp in Sources */,
+				D3E786CB1C0E375D006995F1 /* apitrigeom.cpp in Sources */,
+				D3E786E31C0E375D006995F1 /* sphere.cpp in Sources */,
+				D3E786CD1C0E375D006995F1 /* box.cpp in Sources */,
+				D3E786F21C0E394C006995F1 /* vol.cpp in Sources */,
+				D3E786D51C0E375D006995F1 /* imap.cpp in Sources */,
+				D3E786D71C0E375D006995F1 /* jpeg.cpp in Sources */,
+				D3E786E01C0E375D006995F1 /* render.cpp in Sources */,
+				D3E786D91C0E375D006995F1 /* main.cpp in Sources */,
+				D3E786DB1C0E375D006995F1 /* parse.cpp in Sources */,
+				D3E786D21C0E375D006995F1 /* global.cpp in Sources */,
+				D3E786C91C0E3742006995F1 /* api.cpp in Sources */,
+				D3E786DA1C0E375D006995F1 /* objbound.cpp in Sources */,
+				D3E786E51C0E375D006995F1 /* texture.cpp in Sources */,
+				D3E786EB1C0E375D006995F1 /* vector.cpp in Sources */,
+				D3E786CF1C0E375D006995F1 /* coordsys.cpp in Sources */,
+				D3E786D41C0E375D006995F1 /* imageio.cpp in Sources */,
+				D3E786E61C0E375D006995F1 /* tgafile.cpp in Sources */,
+				D3E786CE1C0E375D006995F1 /* camera.cpp in Sources */,
+				D3E786C81C0E373D006995F1 /* trace.tbb.cpp in Sources */,
+				D3E786C51C0E36B0006995F1 /* main.m in Sources */,
+				D3E786D81C0E375D006995F1 /* light.cpp in Sources */,
+				D3E786DC1C0E375D006995F1 /* plane.cpp in Sources */,
+				D3E786DF1C0E375D006995F1 /* quadric.cpp in Sources */,
+				D3E786E71C0E375D006995F1 /* trace_rest.cpp in Sources */,
+				D3E786C61C0E36BC006995F1 /* OpenGLView.m in Sources */,
+				D3E786D01C0E375D006995F1 /* cylinder.cpp in Sources */,
+				D3E786CC1C0E375D006995F1 /* bndbox.cpp in Sources */,
+				D3E786C71C0E36C1006995F1 /* tbbAppDelegate.m in Sources */,
+				D3E786E11C0E375D006995F1 /* ring.cpp in Sources */,
+				D3E786C41C0E36AC006995F1 /* macvideo.cpp in Sources */,
+				D3E786CA1C0E375D006995F1 /* apigeom.cpp in Sources */,
+				D3E786E91C0E375D006995F1 /* ui.cpp in Sources */,
+				D3E786D11C0E375D006995F1 /* extvol.cpp in Sources */,
+				D3E786E81C0E375D006995F1 /* triangle.cpp in Sources */,
+				D3E786DD1C0E375D006995F1 /* ppm.cpp in Sources */,
+				D3E786EA1C0E375D006995F1 /* util.cpp in Sources */,
+				D3E786D31C0E375D006995F1 /* grid.cpp in Sources */,
+				D3E786D61C0E375D006995F1 /* intersect.cpp in Sources */,
+				D3E786E21C0E375D006995F1 /* shade.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 /* End PBXSourcesBuildPhase section */
 
 /* Begin PBXVariantGroup section */
@@ -733,6 +877,8 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				CLANG_ENABLE_OBJC_ARC = NO;
+				COMBINE_HIDPI_IMAGES = YES;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
 				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
@@ -751,6 +897,8 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				CLANG_ENABLE_OBJC_ARC = NO;
+				COMBINE_HIDPI_IMAGES = YES;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
 				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
@@ -772,6 +920,8 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				CLANG_ENABLE_OBJC_ARC = NO;
+				COMBINE_HIDPI_IMAGES = YES;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
 				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
@@ -790,6 +940,8 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				CLANG_ENABLE_OBJC_ARC = NO;
+				COMBINE_HIDPI_IMAGES = YES;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
 				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
@@ -811,12 +963,21 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = YES;
-				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
 				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				COPY_PHASE_STRIP = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_PREPROCESSOR_DEFINITIONS = (
 					"DEBUG=1",
@@ -826,9 +987,10 @@
 				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
 				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				MACOSX_DEPLOYMENT_TARGET = 10.7;
 				ONLY_ACTIVE_ARCH = YES;
 				SDKROOT = macosx;
 			};
@@ -838,18 +1000,27 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = YES;
-				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
 				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				COPY_PHASE_STRIP = YES;
 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
 				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				MACOSX_DEPLOYMENT_TARGET = 10.7;
 				SDKROOT = macosx;
 			};
 			name = Release;
@@ -858,6 +1029,8 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				CLANG_ENABLE_OBJC_ARC = NO;
+				COMBINE_HIDPI_IMAGES = YES;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
 				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
@@ -876,6 +1049,8 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				CLANG_ENABLE_OBJC_ARC = NO;
+				COMBINE_HIDPI_IMAGES = YES;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
 				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
@@ -893,6 +1068,89 @@
 			};
 			name = Release;
 		};
+		D3E786C11C0E3588006995F1 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
+				GCC_NO_COMMON_BLOCKS = YES;
+				"GCC_PREPROCESSOR_DEFINITIONS[arch=*]" = (
+					"DEBUG=1",
+					"__TBB_IOS=1",
+					"$(inherited)",
+				);
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist";
+				IPHONEOS_DEPLOYMENT_TARGET = 9.1;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path";
+				LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib/ios\"";
+				MTL_ENABLE_DEBUG_INFO = YES;
+				PRODUCT_BUNDLE_IDENTIFIER = com.tbb.example;
+				PRODUCT_NAME = tachyon.tbb.ios;
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Debug;
+		};
+		D3E786C21C0E3588006995F1 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				ENABLE_NS_ASSERTIONS = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_NO_COMMON_BLOCKS = YES;
+				"GCC_PREPROCESSOR_DEFINITIONS[arch=*]" = "__TBB_IOS=1";
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist";
+				IPHONEOS_DEPLOYMENT_TARGET = 9.1;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path";
+				LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib/ios\"";
+				MTL_ENABLE_DEBUG_INFO = NO;
+				PRODUCT_BUNDLE_IDENTIFIER = com.tbb.example;
+				PRODUCT_NAME = tachyon.tbb.ios;
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
 /* End XCBuildConfiguration section */
 
 /* Begin XCConfigurationList section */
@@ -932,6 +1190,15 @@
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
+		D3E786C31C0E3588006995F1 /* Build configuration list for PBXNativeTarget "tachyon.tbb.ios" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				D3E786C11C0E3588006995F1 /* Debug */,
+				D3E786C21C0E3588006995F1 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
 /* End XCConfigurationList section */
 	};
 	rootObject = 84D017481527431F0008A4E0 /* Project object */;
diff --git a/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.serial.xcscheme b/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.serial.xcscheme
index b1c8534..71a8bdf 100644
--- a/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.serial.xcscheme
+++ b/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.serial.xcscheme
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
+   LastUpgradeVersion = "0710"
    version = "1.3">
    <BuildAction
       parallelizeBuildables = "YES"
@@ -22,10 +23,10 @@
       </BuildActionEntries>
    </BuildAction>
    <TestAction
+      buildConfiguration = "Debug"
       selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
+      shouldUseLaunchSchemeArgsEnv = "YES">
       <Testables>
       </Testables>
       <MacroExpansion>
@@ -37,17 +38,21 @@
             ReferencedContainer = "container:tachyon.xcodeproj">
          </BuildableReference>
       </MacroExpansion>
+      <AdditionalOptions>
+      </AdditionalOptions>
    </TestAction>
    <LaunchAction
+      buildConfiguration = "Debug"
       selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
       launchStyle = "0"
       useCustomWorkingDirectory = "NO"
-      buildConfiguration = "Debug"
       ignoresPersistentStateOnLaunch = "NO"
       debugDocumentVersioning = "NO"
+      debugServiceExtension = "internal"
       allowLocationSimulation = "YES">
-      <BuildableProductRunnable>
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
          <BuildableReference
             BuildableIdentifier = "primary"
             BlueprintIdentifier = "8401172B152D6F6C00B07E4D"
@@ -73,12 +78,13 @@
       </AdditionalOptions>
    </LaunchAction>
    <ProfileAction
+      buildConfiguration = "Release"
       shouldUseLaunchSchemeArgsEnv = "YES"
       savedToolIdentifier = ""
       useCustomWorkingDirectory = "NO"
-      buildConfiguration = "Release"
       debugDocumentVersioning = "YES">
-      <BuildableProductRunnable>
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
          <BuildableReference
             BuildableIdentifier = "primary"
             BlueprintIdentifier = "8401172B152D6F6C00B07E4D"
diff --git a/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.tbb.ios.xcscheme b/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.tbb.ios.xcscheme
new file mode 100644
index 0000000..66d6836
--- /dev/null
+++ b/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.tbb.ios.xcscheme
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "0710"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "D3E786AC1C0E3588006995F1"
+               BuildableName = "tachyon.tbb.ios.app"
+               BlueprintName = "tachyon.tbb.ios"
+               ReferencedContainer = "container:tachyon.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "D3E786AC1C0E3588006995F1"
+            BuildableName = "tachyon.tbb.ios.app"
+            BlueprintName = "tachyon.tbb.ios"
+            ReferencedContainer = "container:tachyon.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Release"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "D3E786AC1C0E3588006995F1"
+            BuildableName = "tachyon.tbb.ios.app"
+            BlueprintName = "tachyon.tbb.ios"
+            ReferencedContainer = "container:tachyon.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+      <CommandLineArguments>
+         <CommandLineArgument
+            argument = ""
+            isEnabled = "NO">
+         </CommandLineArgument>
+      </CommandLineArguments>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "D3E786AC1C0E3588006995F1"
+            BuildableName = "tachyon.tbb.ios.app"
+            BlueprintName = "tachyon.tbb.ios"
+            ReferencedContainer = "container:tachyon.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>
diff --git a/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.tbb.xcscheme b/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.tbb.xcscheme
index ccd129c..35c5eab 100644
--- a/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.tbb.xcscheme
+++ b/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.tbb.xcscheme
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
+   LastUpgradeVersion = "0710"
    version = "1.3">
    <BuildAction
       parallelizeBuildables = "YES"
@@ -22,10 +23,10 @@
       </BuildActionEntries>
    </BuildAction>
    <TestAction
+      buildConfiguration = "Debug"
       selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
+      shouldUseLaunchSchemeArgsEnv = "YES">
       <Testables>
       </Testables>
       <MacroExpansion>
@@ -37,18 +38,22 @@
             ReferencedContainer = "container:tachyon.xcodeproj">
          </BuildableReference>
       </MacroExpansion>
+      <AdditionalOptions>
+      </AdditionalOptions>
    </TestAction>
    <LaunchAction
+      buildConfiguration = "Debug"
       selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
       launchStyle = "0"
       useCustomWorkingDirectory = "NO"
       customWorkingDirectory = "/tmp"
-      buildConfiguration = "Debug"
       ignoresPersistentStateOnLaunch = "NO"
       debugDocumentVersioning = "NO"
+      debugServiceExtension = "internal"
       allowLocationSimulation = "YES">
-      <BuildableProductRunnable>
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
          <BuildableReference
             BuildableIdentifier = "primary"
             BlueprintIdentifier = "84D017501527431F0008A4E0"
@@ -74,12 +79,13 @@
       </AdditionalOptions>
    </LaunchAction>
    <ProfileAction
+      buildConfiguration = "Release"
       shouldUseLaunchSchemeArgsEnv = "YES"
       savedToolIdentifier = ""
       useCustomWorkingDirectory = "NO"
-      buildConfiguration = "Release"
       debugDocumentVersioning = "YES">
-      <BuildableProductRunnable>
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
          <BuildableReference
             BuildableIdentifier = "primary"
             BlueprintIdentifier = "84D017501527431F0008A4E0"
diff --git a/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.tbb1d.xcscheme b/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.tbb1d.xcscheme
index 4cb4aad..584392d 100644
--- a/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.tbb1d.xcscheme
+++ b/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.tbb1d.xcscheme
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
+   LastUpgradeVersion = "0710"
    version = "1.3">
    <BuildAction
       parallelizeBuildables = "YES"
@@ -22,10 +23,10 @@
       </BuildActionEntries>
    </BuildAction>
    <TestAction
+      buildConfiguration = "Debug"
       selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
+      shouldUseLaunchSchemeArgsEnv = "YES">
       <Testables>
       </Testables>
       <MacroExpansion>
@@ -37,18 +38,22 @@
             ReferencedContainer = "container:tachyon.xcodeproj">
          </BuildableReference>
       </MacroExpansion>
+      <AdditionalOptions>
+      </AdditionalOptions>
    </TestAction>
    <LaunchAction
+      buildConfiguration = "Debug"
       selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
       launchStyle = "0"
       useCustomWorkingDirectory = "NO"
       customWorkingDirectory = "/tmp"
-      buildConfiguration = "Debug"
       ignoresPersistentStateOnLaunch = "NO"
       debugDocumentVersioning = "NO"
+      debugServiceExtension = "internal"
       allowLocationSimulation = "YES">
-      <BuildableProductRunnable>
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
          <BuildableReference
             BuildableIdentifier = "primary"
             BlueprintIdentifier = "84011764152D6F8400B07E4D"
@@ -74,12 +79,13 @@
       </AdditionalOptions>
    </LaunchAction>
    <ProfileAction
+      buildConfiguration = "Release"
       shouldUseLaunchSchemeArgsEnv = "YES"
       savedToolIdentifier = ""
       useCustomWorkingDirectory = "NO"
-      buildConfiguration = "Release"
       debugDocumentVersioning = "YES">
-      <BuildableProductRunnable>
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
          <BuildableReference
             BuildableIdentifier = "primary"
             BlueprintIdentifier = "84D017501527431F0008A4E0"
diff --git a/examples/parallel_reduce/convex_hull/Makefile b/examples/parallel_reduce/convex_hull/Makefile
index cd06850..4aa4df1 100644
--- a/examples/parallel_reduce/convex_hull/Makefile
+++ b/examples/parallel_reduce/convex_hull/Makefile
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # GNU Makefile that builds and runs example.
 run_cmd=
@@ -35,6 +35,8 @@ run_cmd=../../common/android.linux.launcher.sh
 else
 LIBS+= -lrt 
 endif
+else ifeq ($(shell uname), Darwin)
+override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib
 endif
 
 all:	release test
diff --git a/examples/parallel_reduce/convex_hull/Makefile.windows b/examples/parallel_reduce/convex_hull/Makefile.windows
index f436bc9..9fdf084 100644
--- a/examples/parallel_reduce/convex_hull/Makefile.windows
+++ b/examples/parallel_reduce/convex_hull/Makefile.windows
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # Common Makefile that builds and runs example.
 PROG=convex_hull_bench
@@ -46,10 +46,10 @@ test:
 perf_build: release
 
 perf_run:
-	./convex_hull_sample $(PERF_RUN_ARGS)
+	convex_hull_sample $(PERF_RUN_ARGS)
 
 light_test:
-	./$(PROG) $(LIGHT_ARGS)
+	$(PROG) $(LIGHT_ARGS)
 
 compiler_check:
 	@echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1  || echo "$(CXX) command not found. Check if CXX=$(CXX) is set properly"
diff --git a/examples/parallel_reduce/convex_hull/convex_hull.h b/examples/parallel_reduce/convex_hull/convex_hull.h
index 5c6bcd2..a71fda2 100644
--- a/examples/parallel_reduce/convex_hull/convex_hull.h
+++ b/examples/parallel_reduce/convex_hull/convex_hull.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __CONVEX_HULL_H__
diff --git a/examples/parallel_reduce/convex_hull/convex_hull_bench.cpp b/examples/parallel_reduce/convex_hull/convex_hull_bench.cpp
index e0a905e..4bf0011 100644
--- a/examples/parallel_reduce/convex_hull/convex_hull_bench.cpp
+++ b/examples/parallel_reduce/convex_hull/convex_hull_bench.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_reduce/convex_hull/convex_hull_sample.cpp b/examples/parallel_reduce/convex_hull/convex_hull_sample.cpp
index 509be78..c2bd125 100644
--- a/examples/parallel_reduce/convex_hull/convex_hull_sample.cpp
+++ b/examples/parallel_reduce/convex_hull/convex_hull_sample.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
diff --git a/examples/parallel_reduce/convex_hull/index.html b/examples/parallel_reduce/convex_hull/index.html
deleted file mode 100644
index 6101358..0000000
--- a/examples/parallel_reduce/convex_hull/index.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<HTML>
-<BODY>
-
-<H2>Overview</H2>
-Parallel version of convex hull algorithm (quick hull).
-
-<H2>Files</H2>
-<DL>
-<DT><A HREF="convex_hull_sample.cpp">convex_hull_sample.cpp</A>
-<DD>Source code for TBB version of example.
-<DT><A HREF="convex_hull_bench.cpp">convex_hull_bench.cpp</A>
-<DD>Source code for version of example that compares serial and TBB buffered and unbuffered implementations.
-<DT><A HREF="convex_hull.h">convex_hull.h</A>
-<DD>Include file for example.
-<DT><A HREF="Makefile">Makefile</A>
-<DD>Makefile for building example.
-</DL>
-
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2010 workspace for building and running the 
-    example (Windows* systems only).<DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example (OS X* 
-    systems only).</DL>
-
-<H2>To Build</H2>
-General build directions can be found <A HREF=../../index.html#build>here</A>.
-
-<H2>Usage</H2>
-<DL>
-<DT><TT>convex_hull_sample [<I>S</I>] [<I>M</I>[:<I>N</I>]] [-v]</TT>
-<DD><I>S</I> is the number of points (problem size).
-    <I>M:N</I> are a range of numbers of threads to be used.
-    Use the -v option to turn on verbose output.
-<DT>To run a short version of this example, e.g., for use with Intel® Threading Tools:
-<DD>Build a <I>debug</I> version of the example
-    (see the <A HREF=../../index.html#build>build directions</A>).
-    <BR>Run it with a small problem size and the desired number of threads, e.g., <TT>convex_hull_sample 500000 4</TT>.
-</DL>
-
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
diff --git a/examples/parallel_reduce/convex_hull/msvs/convex_hull.sln b/examples/parallel_reduce/convex_hull/msvs/convex_hull.sln
index 5ec78ff..88b338a 100644
--- a/examples/parallel_reduce/convex_hull/msvs/convex_hull.sln
+++ b/examples/parallel_reduce/convex_hull/msvs/convex_hull.sln
@@ -1,36 +1,36 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convex_hull_sample", "convex_hull_sample.vcxproj", "{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convex_hull_benchmark", "convex_hull_benchmark.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A252A}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
-		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Debug|Win32.ActiveCfg = Debug|Win32
-		{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Debug|Win32.Build.0 = Debug|Win32
-		{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Debug|x64.ActiveCfg = Debug|x64
-		{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Debug|x64.Build.0 = Debug|x64
-		{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Release|Win32.ActiveCfg = Release|Win32
-		{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Release|Win32.Build.0 = Release|Win32
-		{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Release|x64.ActiveCfg = Release|x64
-		{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Release|x64.Build.0 = Release|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.ActiveCfg = Debug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.Build.0 = Debug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.ActiveCfg = Debug|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.Build.0 = Debug|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.ActiveCfg = Release|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.Build.0 = Release|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.ActiveCfg = Release|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.Build.0 = Release|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convex_hull_sample", "convex_hull_sample.vcxproj", "{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convex_hull_benchmark", "convex_hull_benchmark.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A252A}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Debug|Win32.ActiveCfg = Debug|Win32
+		{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Debug|Win32.Build.0 = Debug|Win32
+		{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Debug|x64.ActiveCfg = Debug|x64
+		{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Debug|x64.Build.0 = Debug|x64
+		{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Release|Win32.ActiveCfg = Release|Win32
+		{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Release|Win32.Build.0 = Release|Win32
+		{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Release|x64.ActiveCfg = Release|x64
+		{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Release|x64.Build.0 = Release|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.ActiveCfg = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.Build.0 = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.ActiveCfg = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.Build.0 = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.ActiveCfg = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.Build.0 = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.ActiveCfg = Release|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/parallel_reduce/convex_hull/msvs/convex_hull_benchmark.vcxproj b/examples/parallel_reduce/convex_hull/msvs/convex_hull_benchmark.vcxproj
index f96217e..4599263 100644
--- a/examples/parallel_reduce/convex_hull/msvs/convex_hull_benchmark.vcxproj
+++ b/examples/parallel_reduce/convex_hull/msvs/convex_hull_benchmark.vcxproj
@@ -1,202 +1,206 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>convex_hull_benchmark</ProjectName>
-    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A252A}</ProjectGuid>
-    <RootNamespace>convex_hull_benchmark</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <Import Project="..\..\..\common\toolset.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <Optimization>Full</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Full</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\convex_hull_bench.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\convex_hull.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="..\index.html" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>convex_hull_benchmark</ProjectName>
+    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A252A}</ProjectGuid>
+    <RootNamespace>convex_hull_benchmark</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <Optimization>Full</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Full</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\convex_hull_bench.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\convex_hull.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\readme.html" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/examples/parallel_reduce/convex_hull/msvs/convex_hull_sample.vcxproj b/examples/parallel_reduce/convex_hull/msvs/convex_hull_sample.vcxproj
index f48a01a..8b9b518 100644
--- a/examples/parallel_reduce/convex_hull/msvs/convex_hull_sample.vcxproj
+++ b/examples/parallel_reduce/convex_hull/msvs/convex_hull_sample.vcxproj
@@ -1,199 +1,203 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>convex_hull_sample</ProjectName>
-    <ProjectGuid>{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}</ProjectGuid>
-    <RootNamespace>convex_hull_sample</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <Import Project="..\..\..\common\toolset.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <Optimization>Full</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Full</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\convex_hull_sample.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\convex_hull.h" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>convex_hull_sample</ProjectName>
+    <ProjectGuid>{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}</ProjectGuid>
+    <RootNamespace>convex_hull_sample</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <Optimization>Full</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Full</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\convex_hull_sample.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\convex_hull.h" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/examples/parallel_reduce/convex_hull/readme.html b/examples/parallel_reduce/convex_hull/readme.html
new file mode 100644
index 0000000..02f6f00
--- /dev/null
+++ b/examples/parallel_reduce/convex_hull/readme.html
@@ -0,0 +1,400 @@
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
+
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
+
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Convex_hull sample</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Convex_hull sample</h1>
+	</div>
+	
+	<p>
+		Parallel version of convex hull algorithm (quick hull).
+	</p>
+
+	<div class="changes">
+		<div class="h3-alike">System Requirements</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				For the most up to date system requirements, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
+			</p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Files</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="convex_hull_sample.cpp">convex_hull_sample.cpp</a>
+				<dd>Source code for TBB version of example.
+				<dt><a href="convex_hull_bench.cpp">convex_hull_bench.cpp</a>
+				<dd>Source code for version of example that compares serial and TBB buffered and unbuffered implementations.
+				<dt><a href="convex_hull.h">convex_hull.h</a>
+				<dd>Include file for example.
+				<dt><a href="Makefile">Makefile</a>
+				<dd>Makefile for building the example.
+			</dl>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="msvs/">msvs</a>
+				<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).
+				<dt><a href="xcode/">xcode</a>
+				<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).
+			</dl>
+			<p>For information about the minimum supported version of IDE, see <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a></p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Build instructions</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>General build directions can be found <a href="../../index.html">here</a>.</p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Usage</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><tt>convex_hull_sample [<i>S</i>] [<i>M</i>[:<i>N</i>]] [-v]</tt>
+				<dd><i>S</i> is the number of points (problem size).
+					<i>M:N</i> are a range of numbers of threads to be used.
+					Use the -v option to turn on verbose output.
+				<dt>To run a short version of this example, e.g., for use with Intel® Threading Tools:
+				<dd>Build a <i>debug</i> version of the example
+					(see the <a href="../../index.html">build instructions</a>).
+					<br>Run it with a small problem size and the desired number of threads, e.g., <tt>convex_hull_sample 500000 4</tt>.
+			</dl>
+		</div>
+	</div>
+	
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>	
+	
+</body>
+</html>
diff --git a/examples/parallel_reduce/index.html b/examples/parallel_reduce/index.html
index 06eb06d..c67ba7e 100644
--- a/examples/parallel_reduce/index.html
+++ b/examples/parallel_reduce/index.html
@@ -1,26 +1,346 @@
-<HTML>
-<BODY>
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
 
-<H2>Overview</H2>
-This directory has examples of the template <code>parallel_reduce</code>.
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
 
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="convex_hull/index.html">convex_hull</A>
-<DD>Parallel version of convex hull algorithm (quick hull).
-<DT><A HREF="primes/index.html">primes</A>
-<DD>Parallel version of the Sieve of Eratosthenes.
-</DL>
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Samples on parallel_reduce</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Samples on <code>parallel_reduce</code> algorithm</h1>
+	</div>
+	
+	<p>
+		This directory has examples of the <code>parallel_reduce</code> algorithm.
+	</p>
 
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="convex_hull/readme.html">convex_hull</a>
+				<dd>Parallel version of convex hull algorithm (quick hull).
+				<dt><a href="primes/readme.html">primes</a>
+				<dd>Parallel version of the Sieve of Eratosthenes.
+			</dl>
+		</div>
+	</div>
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information:</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>
+</body>
+</html>
 
diff --git a/examples/parallel_reduce/primes/Makefile b/examples/parallel_reduce/primes/Makefile
index 04b4b54..d483cfb 100644
--- a/examples/parallel_reduce/primes/Makefile
+++ b/examples/parallel_reduce/primes/Makefile
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # GNU Makefile that builds and runs example.
 run_cmd=
@@ -44,6 +44,8 @@ run_cmd=../../common/android.linux.launcher.sh
 else
 LIBS+= -lrt 
 endif
+else ifeq ($(shell uname), Darwin)
+override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib
 endif
 
 all:	release test
diff --git a/examples/parallel_reduce/primes/Makefile.windows b/examples/parallel_reduce/primes/Makefile.windows
index bd6328f..489b13c 100644
--- a/examples/parallel_reduce/primes/Makefile.windows
+++ b/examples/parallel_reduce/primes/Makefile.windows
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # Common Makefile that builds and runs example.
 
@@ -45,7 +45,7 @@ test:
 perf_build: release
 
 perf_run:
-	./$(PROG) $(PERF_RUN_ARGS)
+	$(PROG) $(PERF_RUN_ARGS)
 
 compiler_check:
 	@echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1  || echo "$(CXX) command not found. Check if CXX=$(CXX) is set properly"
diff --git a/examples/parallel_reduce/primes/index.html b/examples/parallel_reduce/primes/index.html
deleted file mode 100644
index 7da6c8d..0000000
--- a/examples/parallel_reduce/primes/index.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<HTML>
-<BODY>
-
-<H2>Overview</H2>
-<DL>
-<DT>Parallel version of the Sieve of Eratosthenes.
-<DT>The example can be built in the offload version to run on Intel&reg Many Integrated Core (Intel&reg MIC) Architecture based coprocessor (see <A HREF=../../index.html#build_4>build instructions</A>).
-</DL>
-
-<H2>Files</H2>
-<DL>
-<DT><A HREF="main.cpp">main.cpp</A>
-<DD>Main program which parses command line options and runs the algorithm with different numbers of threads.
-<DT><A HREF="primes.h">primes.h</A>
-<DD>The Sieve of Eratosthenes interface.
-<DT><A HREF="primes.cpp">primes.cpp</A>
-<DD>The Sieve of Eratosthenes implementation.
-<DT><A HREF="Makefile">Makefile</A>
-<DD>Makefile for building example.
-</DL>
-
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2010 workspace for building and running the 
-    example (Windows* systems only).<DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example (OS X* 
-    systems only).</DL>
-
-<H2>To Build</H2>
-General build directions can be found <A HREF=../../index.html#build>here</A>.
-<A HREF=../../index.html#build_4>here</A>
-
-<H2>Usage</H2>
-<DL>
-<DT><TT>primes <I>-h</I></TT>
-<DD>Prints the help for command line options
-<DT><TT>primes [<I>n-of-threads</I>=value] [<I>number</I>=value] [<I>grain-size</I>=value] [<I>n-of-repeats</I>=value] [<I>silent</I>]</TT>
-<DT><TT>primes [<I>n-of-threads</I> [<I>number</I> [<I>grain-size</I> [<I>n-of-repeats</I>]]]][<I>silent</I>]</TT> 
-<DD><I>n-of-threads</I> is the number of threads to use; a range of the form <I>low</I>[:<I>high</I>], where low and optional high are non-negative integers or 'auto' for the TBB default.<BR>
-    <I>number</I> is an upper bound of range to search primes in, must be a positive integer.<BR>
-    <I>grain-size</I> is an optional grain size, must be a positive integer. <BR>
-    <I>n-of-repeats</I> is a number of the calculation repeats, must be a positive integer.<BR>
-    <I>silent</I> - no output except elapsed time.<BR>
-
-<DT>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
-<DD>Build a <I>debug</I> version of the example
-    (see the <A HREF=../../index.html#build>build directions</A>).
-    <BR>Run it with a small problem size and the desired number of threads, e.g., <TT>primes 4 100000</TT>.
-</DL>
-
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
-
diff --git a/examples/parallel_reduce/primes/main.cpp b/examples/parallel_reduce/primes/main.cpp
index d400cbb..e52cad8 100644
--- a/examples/parallel_reduce/primes/main.cpp
+++ b/examples/parallel_reduce/primes/main.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "primes.h"
@@ -42,8 +42,8 @@ struct RunOptions{
     // number of time to repeat calculation
     NumberType repeatNumber;
 
-    RunOptions(utility::thread_number_range threads, NumberType grainSize, NumberType n, bool silentFlag, NumberType repeatNumber)
-        : threads(threads), grainSize(grainSize), n(n), silentFlag(silentFlag), repeatNumber(repeatNumber)
+    RunOptions(utility::thread_number_range threads_, NumberType grainSize_, NumberType n_, bool silentFlag_, NumberType repeatNumber_)
+        : threads(threads_), silentFlag(silentFlag_), n(n_), grainSize(grainSize_), repeatNumber(repeatNumber_)
     {}
 };
 
diff --git a/examples/parallel_reduce/primes/msvs/primes.sln b/examples/parallel_reduce/primes/msvs/primes.sln
index 1635efd..1430cf3 100644
--- a/examples/parallel_reduce/primes/msvs/primes.sln
+++ b/examples/parallel_reduce/primes/msvs/primes.sln
@@ -1,26 +1,26 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "primes", "primes.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A252A}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
-		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.ActiveCfg = Debug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.Build.0 = Debug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.ActiveCfg = Debug|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.Build.0 = Debug|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.ActiveCfg = Release|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.Build.0 = Release|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.ActiveCfg = Release|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.Build.0 = Release|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "primes", "primes.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A252A}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.ActiveCfg = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.Build.0 = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.ActiveCfg = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.Build.0 = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.ActiveCfg = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.Build.0 = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.ActiveCfg = Release|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/parallel_reduce/primes/msvs/primes.vcxproj b/examples/parallel_reduce/primes/msvs/primes.vcxproj
index 632d1d2..f7720df 100644
--- a/examples/parallel_reduce/primes/msvs/primes.vcxproj
+++ b/examples/parallel_reduce/primes/msvs/primes.vcxproj
@@ -1,201 +1,205 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>primes</ProjectName>
-    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A252A}</ProjectGuid>
-    <RootNamespace>primes</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <Import Project="..\..\..\common\toolset.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\main.cpp" />
-    <ClCompile Include="..\primes.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\primes.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="..\index.html" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>primes</ProjectName>
+    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A252A}</ProjectGuid>
+    <RootNamespace>primes</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\main.cpp" />
+    <ClCompile Include="..\primes.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\primes.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\readme.html" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/examples/parallel_reduce/primes/primes.cpp b/examples/parallel_reduce/primes/primes.cpp
index d559509..4876012 100644
--- a/examples/parallel_reduce/primes/primes.cpp
+++ b/examples/parallel_reduce/primes/primes.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Example program that computes number of prime numbers up to n, 
@@ -273,8 +273,8 @@ public:
     }
     void join( Sieve& other ) {
         count += other.count;
-        // Final value of multiples needs to final value of other.mulitiples,
-        // so that *this can correcty process next window to right.
+        // Final value of multiples needs to final value of other multiples,
+        // so that *this can correctly process next window to right.
         multiples.move( other.multiples );
     }
     Sieve( Sieve& other, tbb::split ) :
diff --git a/examples/parallel_reduce/primes/primes.h b/examples/parallel_reduce/primes/primes.h
index 901923b..64611b6 100644
--- a/examples/parallel_reduce/primes/primes.h
+++ b/examples/parallel_reduce/primes/primes.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef PRIMES_H_
diff --git a/examples/parallel_reduce/primes/readme.html b/examples/parallel_reduce/primes/readme.html
new file mode 100644
index 0000000..822beae
--- /dev/null
+++ b/examples/parallel_reduce/primes/readme.html
@@ -0,0 +1,407 @@
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
+
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
+
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Primes sample</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Primes sample</h1>
+	</div>
+	
+	<p>
+		Parallel version of the Sieve of Eratosthenes.
+	<br><br>
+		The example can be built in the offload version to run on Intel® Many Integrated Core (Intel® MIC) Architecture based coprocessor (see <a href="../../index.html">build instructions</a>).
+	</p>
+
+	<div class="changes">
+		<div class="h3-alike">System Requirements</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				For the most up to date system requirements, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
+			</p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Files</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="main.cpp">main.cpp</a>
+				<dd>Main program which parses command line options and runs the algorithm with different numbers of threads.
+				<dt><a href="primes.h">primes.h</a>
+				<dd>The Sieve of Eratosthenes interface.
+				<dt><a href="primes.cpp">primes.cpp</a>
+				<dd>The Sieve of Eratosthenes implementation.
+				<dt><a href="Makefile">Makefile</a>
+				<dd>Makefile for building the example.
+			</dl>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="msvs/">msvs</a>
+				<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).
+				<dt><a href="xcode/">xcode</a>
+				<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).
+			</dl>
+			<p>For information about the minimum supported version of IDE, see <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a></p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Build instructions</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>General build directions can be found <a href="../../index.html">here</a>.</p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Usage</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><tt>primes <i>-h</i></tt>
+				<dd>Prints the help for command line options
+				<dt><tt>primes [<i>n-of-threads</i>=value] [<i>number</i>=value] [<i>grain-size</i>=value] [<i>n-of-repeats</i>=value] [<i>silent</i>]</tt>
+				<dt><tt>primes [<i>n-of-threads</i> [<i>number</i> [<i>grain-size</i> [<i>n-of-repeats</i>]]]][<i>silent</i>]</tt> 
+				<dd><i>n-of-threads</i> is the number of threads to use; a range of the form <i>low</i>[:<i>high</i>], where low and optional high are non-negative integers or 'auto' for the TBB default.<br>
+					<i>number</i> is an upper bound of range to search primes in, must be a positive integer.<br>
+					<i>grain-size</i> is an optional grain size, must be a positive integer. <br>
+					<i>n-of-repeats</i> is a number of the calculation repeats, must be a positive integer.<br>
+					<i>silent</i> - no output except elapsed time.<br>
+				<dt>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
+				<dd>Build a <i>debug</i> version of the example
+					(see the <a href="../../index.html">build instructions</a>).
+					<br>Run it with a small problem size and the desired number of threads, e.g., <tt>primes 4 100000</tt>.
+			</dl>
+		</div>
+	</div>
+	
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>	
+	
+</body>
+</html>
diff --git a/examples/pipeline/index.html b/examples/pipeline/index.html
index 30e8e88..8fa7aaa 100644
--- a/examples/pipeline/index.html
+++ b/examples/pipeline/index.html
@@ -1,24 +1,344 @@
-<HTML>
-<BODY>
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
 
-<H2>Overview</H2>
-This directory has examples of the template <code>pipeline</code>.
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
 
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="square/index.html">square</A>
-<DD>Another simple string transformation example that squares numbers read from a file.
-</DL>
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Samples on pipeline algorithm</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Samples on <code>pipeline</code> algorithm</h1>
+	</div>
+	
+	<p>
+		This directory has examples of the <code>pipeline</code> algorithm.
+	</p>
 
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="square/readme.html">square</a>
+				<dd>Another simple string transformation example that squares numbers read from a file.
+			</dl>
+		</div>
+	</div>
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information:</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>
+</body>
+</html>
 
diff --git a/examples/pipeline/square/Makefile b/examples/pipeline/square/Makefile
index 744297a..455652b 100644
--- a/examples/pipeline/square/Makefile
+++ b/examples/pipeline/square/Makefile
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # GNU Makefile that builds and runs example.
 run_cmd=
@@ -36,6 +36,8 @@ run_cmd=../../common/android.linux.launcher.sh
 else
 LIBS+= -lrt 
 endif
+else ifeq ($(shell uname), Darwin)
+override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib
 endif
 
 all:	release test
diff --git a/examples/pipeline/square/Makefile.windows b/examples/pipeline/square/Makefile.windows
index 4de0b43..58de785 100644
--- a/examples/pipeline/square/Makefile.windows
+++ b/examples/pipeline/square/Makefile.windows
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # Common Makefile that builds and runs example.
 
@@ -29,7 +29,7 @@ CXX2 = $(CXX1:icl.exe-=icl.exe)
 CXX  = $(CXX2:-=cl.exe)
 
 # The C++ compiler options
-MYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS) /D _CRT_SECURE_NO_DEPRECATE /arch:sse2
+MYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS) /D _CRT_SECURE_NO_DEPRECATE
 MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
 SOURCES = square.cpp gen_input.cpp
 
diff --git a/examples/pipeline/square/gen_input.cpp b/examples/pipeline/square/gen_input.cpp
index 122cf2e..7ce4308 100644
--- a/examples/pipeline/square/gen_input.cpp
+++ b/examples/pipeline/square/gen_input.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include <stdlib.h>
diff --git a/examples/pipeline/square/index.html b/examples/pipeline/square/index.html
deleted file mode 100644
index 021ccff..0000000
--- a/examples/pipeline/square/index.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<HTML>
-<BODY>
-
-<H2>Overview</H2>
-Text filter that demonstrates class pipeline. Example program reads a file 
-containing decimal integers in text format, and changes each to its square.
-
-<H2>Files</H2>
-<DL>
-<DT><A HREF="square.cpp">square.cpp</A>
-<DD>Source code for example.
-<DT><A HREF="gen_input.cpp">gen_input.cpp </A>
-<DD>Source code for sample input generation.
-<DT><A HREF="Makefile">Makefile</A>
-<DD>Makefile for building example.
-</DL>
-
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2010 workspace for building and running the 
-    example (Windows* systems only).<DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example (OS X*
-    systems only).</DL>
-
-<H2>To Build</H2>
-General build directions can be found <A HREF=../../index.html#build>here</A>.
-<P></P>
-Two additional targets for this example:
-<DL>
-    <DT><TT>make gen_input</TT>
-    <DD>Create an input generator program that prints out a sequence of integers.
-    <DT><TT>make input.txt</TT>
-    <DD>Create an input file for the example (with help of <TT>gen_input</TT>).
-</DL>
-<P></P>
-
-<H2>Usage</H2>
-<DL>
-<DT><TT>square <I>-h</I></TT>
-<DD>Prints the help for command line options
-<DT><TT>square [<I>n-of-threads</I>=value] [<I>input-file</I>=value] [<I>output-file</I>=value] [<I>max-slice-size</I>=value] [<I>silent</I>]</TT>
-<DT><TT>square [<I>n-of-threads</I> [<I>input-file</I> [<I>output-file</I> [<I>max-slice-size</I>]]]] [<I>silent</I>]</TT> 
-<DD><I>n-of-threads</I> is the number of threads to use; a range of the form <I>low</I>[:<I>high</I>], where low and optional high are non-negative integers or 'auto' for the TBB default.<BR>
-    <I>input-file</I> is an input file name.<BR>
-    <I>output-file</I> is an output file name. <BR>
-    <I>max-slice-size</I> is the maximum number of characters in one slice.<BR>
-    <I>silent</I> - no output except elapsed time.<BR>
-<DT><TT>gen_input [<I>LN</I>] > <I>inputfile</I></TT>
-<DD>Generate a file named <I>inputfile</I> consisting of <I>LN</I> lines each containing one integer.
-    If not specified, <I>LN</I> is assumed to be 1000000.
-
-<DT>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
-<DD>Build a <I>debug</I> version of the example
-    (see the <A HREF=../../index.html#build>build directions</A>).
-    <BR>Prepare an <I>inputfile</I> with about 5,000 lines of text (see the instruction above).
-    <BR>Run it with this <I>inputfile</I> and the desired number of threads,
-    e.g., <TT>square 4 <I>inputfile</I> <I>outputfile</I></TT>.
-</DL>
-
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
diff --git a/examples/pipeline/square/msvs/square.sln b/examples/pipeline/square/msvs/square.sln
index fc440dc..fb2d23f 100644
--- a/examples/pipeline/square/msvs/square.sln
+++ b/examples/pipeline/square/msvs/square.sln
@@ -1,26 +1,26 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "square", "square.vcxproj", "{A21C0AEE-ADDC-45F0-A668-58FF10351D23}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
-		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|Win32.ActiveCfg = Debug|Win32
-		{A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|Win32.Build.0 = Debug|Win32
-		{A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|x64.ActiveCfg = Debug|x64
-		{A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|x64.Build.0 = Debug|x64
-		{A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|Win32.ActiveCfg = Release|Win32
-		{A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|Win32.Build.0 = Release|Win32
-		{A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|x64.ActiveCfg = Release|x64
-		{A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|x64.Build.0 = Release|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "square", "square.vcxproj", "{A21C0AEE-ADDC-45F0-A668-58FF10351D23}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|Win32.ActiveCfg = Debug|Win32
+		{A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|Win32.Build.0 = Debug|Win32
+		{A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|x64.ActiveCfg = Debug|x64
+		{A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|x64.Build.0 = Debug|x64
+		{A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|Win32.ActiveCfg = Release|Win32
+		{A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|Win32.Build.0 = Release|Win32
+		{A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|x64.ActiveCfg = Release|x64
+		{A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/pipeline/square/msvs/square.vcxproj b/examples/pipeline/square/msvs/square.vcxproj
index 3ef06f4..e4807fe 100644
--- a/examples/pipeline/square/msvs/square.vcxproj
+++ b/examples/pipeline/square/msvs/square.vcxproj
@@ -1,198 +1,202 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>square</ProjectName>
-    <ProjectGuid>{A21C0AEE-ADDC-45F0-A668-58FF10351D23}</ProjectGuid>
-    <RootNamespace>square</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <Import Project="..\..\..\common\toolset.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\gen_input.cpp" />
-    <ClCompile Include="..\square.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="..\index.html" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>square</ProjectName>
+    <ProjectGuid>{A21C0AEE-ADDC-45F0-A668-58FF10351D23}</ProjectGuid>
+    <RootNamespace>square</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\gen_input.cpp" />
+    <ClCompile Include="..\square.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\readme.html" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/examples/pipeline/square/readme.html b/examples/pipeline/square/readme.html
new file mode 100644
index 0000000..84bc4fa
--- /dev/null
+++ b/examples/pipeline/square/readme.html
@@ -0,0 +1,417 @@
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
+
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
+
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Square sample</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Square sample</h1>
+	</div>
+	
+	<p>
+		Text filter that demonstrates class pipeline. Example program reads a file 
+		containing decimal integers in text format, and changes each to its square.
+	</p>
+
+	<div class="changes">
+		<div class="h3-alike">System Requirements</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				For the most up to date system requirements, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
+			</p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Files</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="square.cpp">square.cpp</a>
+				<dd>Source code for example.
+				<dt><a href="gen_input.cpp">gen_input.cpp </a>
+				<dd>Source code for sample input generation.
+				<dt><a href="Makefile">Makefile</a>
+				<dd>Makefile for building the example.
+			</dl>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="msvs/">msvs</a>
+				<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).
+				<dt><a href="xcode/">xcode</a>
+				<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).
+			</dl>
+			<p>For information about the minimum supported version of IDE, see <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a></p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Build instructions</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>General build directions can be found <a href="../../index.html">here</a>.</p>
+			Two additional targets for this example:
+			<dl>
+				<dt><tt>make gen_input</tt>
+				<dd>Create an input generator program that prints out a sequence of integers.
+				<dt><tt>make input.txt</tt>
+				<dd>Create an input file for the example (with help of <tt>gen_input</tt>).
+			</dl>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Usage</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><tt>square <i>-h</i></tt>
+				<dd>Prints the help for command line options
+				<dt><tt>square [<i>n-of-threads</i>=value] [<i>input-file</i>=value] [<i>output-file</i>=value] [<i>max-slice-size</i>=value] [<i>silent</i>]</tt>
+				<dt><tt>square [<i>n-of-threads</i> [<i>input-file</i> [<i>output-file</i> [<i>max-slice-size</i>]]]] [<i>silent</i>]</tt> 
+				<dd><i>n-of-threads</i> is the number of threads to use; a range of the form <i>low</i>[:<i>high</i>], where low and optional high are non-negative integers or 'auto' for the TBB default.<br>
+					<i>input-file</i> is an input file name.<br>
+					<i>output-file</i> is an output file name. <br>
+					<i>max-slice-size</i> is the maximum number of characters in one slice.<br>
+					<i>silent</i> - no output except elapsed time.<br>
+				<dt><tt>gen_input [<i>LN</i>] > <i>inputfile</i></tt>
+				<dd>Generate a file named <i>inputfile</i> consisting of <i>LN</i> lines each containing one integer.
+					If not specified, <i>LN</i> is assumed to be 1000000.
+
+				<dt>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
+				<dd>Build a <i>debug</i> version of the example
+					(see the <a href="../../index.html">build instructions</a>).
+					<br>Prepare an <i>inputfile</i> with about 5,000 lines of text (see the instruction above).
+					<br>Run it with this <i>inputfile</i> and the desired number of threads,
+					e.g., <tt>square 4 <i>inputfile</i> <i>outputfile</i></tt>.
+				</dl>
+		</div>
+	</div>
+	
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>	
+	
+</body>
+</html>
diff --git a/examples/pipeline/square/square.cpp b/examples/pipeline/square/square.cpp
index 016ffce..b28f6ea 100644
--- a/examples/pipeline/square/square.cpp
+++ b/examples/pipeline/square/square.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 //
@@ -85,7 +85,7 @@ public:
 private:
     FILE* input_file;
     TextSlice* next_slice;
-    /*override*/ void* operator()(void*);
+    void* operator()(void*) /*override*/;
 };
 
 MyInputFilter::MyInputFilter( FILE* input_file_ ) : 
@@ -126,14 +126,14 @@ void* MyInputFilter::operator()(void*) {
 class MyTransformFilter: public tbb::filter {
 public:
     MyTransformFilter();
-    /*override*/void* operator()( void* item );
+    void* operator()( void* item ) /*override*/;
 };
 
 MyTransformFilter::MyTransformFilter() : 
     tbb::filter(parallel) 
 {}  
 
-/*override*/void* MyTransformFilter::operator()( void* item ) {
+void* MyTransformFilter::operator()( void* item ) {
     TextSlice& input = *static_cast<TextSlice*>(item);
     // Add terminating null so that strtol works right even if number is at end of the input.
     *input.end() = '\0';
@@ -163,7 +163,7 @@ class MyOutputFilter: public tbb::filter {
     FILE* my_output_file;
 public:
     MyOutputFilter( FILE* output_file );
-    /*override*/void* operator()( void* item );
+    void* operator()( void* item ) /*override*/;
 };
 
 MyOutputFilter::MyOutputFilter( FILE* output_file ) : 
diff --git a/examples/task/index.html b/examples/task/index.html
index 7562e9f..7a06333 100644
--- a/examples/task/index.html
+++ b/examples/task/index.html
@@ -1,24 +1,344 @@
-<HTML>
-<BODY>
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
 
-<H2>Overview</H2>
-This directory has examples of how to use the raw task scheduler.
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
 
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="tree_sum/index.html">tree_sum</A>
-<DD>Sum values in a tree.
-</DL>
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Samples on task scheduler interface</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Samples on task scheduler interface</h1>
+	</div>
+	
+	<p>
+		This directory has examples of how to use the raw task scheduler.
+	</p>
 
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="tree_sum/readme.html">tree_sum</a>
+				<dd>Sum values in a tree.
+			</dl>
+		</div>
+	</div>
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information:</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>
+</body>
+</html>
 
diff --git a/examples/task/tree_sum/Makefile b/examples/task/tree_sum/Makefile
index 88a4744..2c7f49c 100644
--- a/examples/task/tree_sum/Makefile
+++ b/examples/task/tree_sum/Makefile
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # GNU Makefile that builds and runs example.
 run_cmd=
@@ -34,6 +34,8 @@ run_cmd=../../common/android.linux.launcher.sh
 else
 LIBS+= -lrt 
 endif
+else ifeq ($(shell uname), Darwin)
+override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib
 endif
 
 all:	release test
diff --git a/examples/task/tree_sum/Makefile.windows b/examples/task/tree_sum/Makefile.windows
index 9e55133..f2a5329 100644
--- a/examples/task/tree_sum/Makefile.windows
+++ b/examples/task/tree_sum/Makefile.windows
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # Common Makefile that builds and runs example.
 
diff --git a/examples/task/tree_sum/OptimizedParallelSumTree.cpp b/examples/task/tree_sum/OptimizedParallelSumTree.cpp
index f9baa73..ddaeb53 100644
--- a/examples/task/tree_sum/OptimizedParallelSumTree.cpp
+++ b/examples/task/tree_sum/OptimizedParallelSumTree.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 #include "common.h"
@@ -29,7 +29,7 @@ class OptimizedSumTask: public tbb::task {
 public:
     OptimizedSumTask( TreeNode* root_, Value* sum_ ) : root(root_), sum(sum_), is_continuation(false) {
     }
-    tbb::task* execute() {
+    tbb::task* execute() /*override*/ {
         tbb::task* next = NULL;
         if( !is_continuation ) {
             if( root->node_count<1000 ) {
diff --git a/examples/task/tree_sum/SerialSumTree.cpp b/examples/task/tree_sum/SerialSumTree.cpp
index 6988d7a..2082576 100644
--- a/examples/task/tree_sum/SerialSumTree.cpp
+++ b/examples/task/tree_sum/SerialSumTree.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "common.h"
diff --git a/examples/task/tree_sum/SimpleParallelSumTree.cpp b/examples/task/tree_sum/SimpleParallelSumTree.cpp
index 2de4f56..e9874c6 100644
--- a/examples/task/tree_sum/SimpleParallelSumTree.cpp
+++ b/examples/task/tree_sum/SimpleParallelSumTree.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "common.h"
@@ -26,7 +26,7 @@ class SimpleSumTask: public tbb::task {
     TreeNode* root;
 public:
     SimpleSumTask( TreeNode* root_, Value* sum_ ) : root(root_), sum(sum_) {}
-    task* execute() {
+    task* execute() /*override*/ {
         if( root->node_count<1000 ) {
             *sum = SerialSumTree(root);
         } else {
diff --git a/examples/task/tree_sum/TreeMaker.h b/examples/task/tree_sum/TreeMaker.h
index 46bd0ce..d14e31d 100644
--- a/examples/task/tree_sum/TreeMaker.h
+++ b/examples/task/tree_sum/TreeMaker.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef TREE_MAKER_H_
@@ -44,7 +44,7 @@ class TreeMaker {
             my_root->value = Value(Pi*number_of_nodes);
         }
 
-        tbb::task* execute() {
+        tbb::task* execute() /*override*/ {
             tbb::task* next = NULL;
             if( !is_continuation ) {
                 long subtree_size = my_root->node_count - 1;
diff --git a/examples/task/tree_sum/common.h b/examples/task/tree_sum/common.h
index da23bb1..5b2bc95 100644
--- a/examples/task/tree_sum/common.h
+++ b/examples/task/tree_sum/common.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 typedef float Value;
diff --git a/examples/task/tree_sum/index.html b/examples/task/tree_sum/index.html
deleted file mode 100644
index ea35663..0000000
--- a/examples/task/tree_sum/index.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<HTML>
-<BODY>
-
-<H2>Overview</H2>
-This directory contains a simple example that sums values in a tree.
-The example exhibits some speedup, but not a lot,  because it quickly saturates 
-the system bus on a multiprocessor.  For good speedup, there needs to be 
-more computation cycles per memory reference.  The point of the example 
-is to teach how to use the raw task interface, so the computation is
-deliberately trivial.
-<P>
-The performance of this example is better when objects are allocated
-by the scalable_allocator instead of
-the default "operator new".  The reason is that the scalable_allocator typically
-packs small objects more tightly than the default "operator new", resulting in
-a smaller memory footprint, and thus more efficient use of cache and virtual memory.
-In addition, the scalable_allocator performs better for multi-threaded allocations.
-</P>
-<H2>Files</H2>
-<DL>
-<DT><A HREF="SerialSumTree.cpp">SerialSumTree.cpp</A>
-<DD>Sums sequentially.
-<DT><A HREF="SimpleParallelSumTree.cpp">SimpleParallelSumTree.cpp</A><DT>
-<DD>Sums in parallel without any fancy tricks.
-<DT><A HREF="OptimizedParallelSumTree.cpp">OptimizedParallelSumTree.cpp</A><DT>
-<DD>Sums in parallel, using "recycling" and "continuation-passing" tricks. 
-    In this case, it is only slightly faster than the simple version.
-<DT><A HREF="common.h">common.h</A>
-<DD>Shared declarations.
-<DT><A HREF="main.cpp">main.cpp</A>
-<DD>Main program which parses command line options and runs the algorithm.
-<DT><A HREF="Makefile">Makefile</A>
-<DD>Makefile for building example.
-</DL>
-
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2010 workspace for building and running the 
-    example (Windows* systems only).<DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example (OS X*
-    systems only).</DL>
-
-<H2>To Build</H2>
-General build directions can be found <A HREF=../../index.html#build>here</A>.
-<P></P>
-
-<H2>Usage</H2>
-<DL>
-<DT><TT>tree_sum <I>-h</I></TT>
-<DD>Prints the help for command line options
-<DT><TT>tree_sum [<I>n-of-threads</I>=value] [<I>number-of-nodes</I>=value] [<I>silent</I>] [<I>stdmalloc</I>]</TT>
-<DT><TT>tree_sum [<I>n-of-threads</I> [<I>number-of-nodes</I>]] [<I>silent</I>] [<I>stdmalloc</I>]</TT> 
-<DD><I>n-of-threads</I> is the number of threads to use; a range of the form <I>low</I>[:<I>high</I>], where low and optional high are non-negative integers or 'auto' for the default.<BR>
-    <I>number-of-nodes</I> is the number of nodes in the tree.<BR>
-    <I>silent</I> - no output except elapsed time.<BR>
-    <I>stdmalloc</I> - causes the default "operator new" to be used for memory allocations instead of the scalable_allocator.<BR>
-
-<DT>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
-<DD>Build a <I>debug</I> version of the example
-    (see the <A HREF=../../index.html#build>build directions</A>).
-    <BR>Run it with a small problem size and the desired number of threads, e.g., <TT>tree_sum 4 100000</TT>.
-</DL>
-
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
-
diff --git a/examples/task/tree_sum/main.cpp b/examples/task/tree_sum/main.cpp
index 513f924..cf58f85 100644
--- a/examples/task/tree_sum/main.cpp
+++ b/examples/task/tree_sum/main.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "common.h"
diff --git a/examples/task/tree_sum/msvs/tree_sum.sln b/examples/task/tree_sum/msvs/tree_sum.sln
index 69b1ad6..172b245 100644
--- a/examples/task/tree_sum/msvs/tree_sum.sln
+++ b/examples/task/tree_sum/msvs/tree_sum.sln
@@ -1,26 +1,26 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tree_sum", "tree_sum.vcxproj", "{C931C7A2-074E-4150-9E7A-39A03250411E}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
-		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.ActiveCfg = Debug|Win32
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.Build.0 = Debug|Win32
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.ActiveCfg = Debug|x64
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.Build.0 = Debug|x64
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.ActiveCfg = Release|Win32
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.Build.0 = Release|Win32
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.ActiveCfg = Release|x64
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.Build.0 = Release|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tree_sum", "tree_sum.vcxproj", "{C931C7A2-074E-4150-9E7A-39A03250411E}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.ActiveCfg = Debug|Win32
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.Build.0 = Debug|Win32
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.ActiveCfg = Debug|x64
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.Build.0 = Debug|x64
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.ActiveCfg = Release|Win32
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.Build.0 = Release|Win32
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.ActiveCfg = Release|x64
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/task/tree_sum/msvs/tree_sum.vcxproj b/examples/task/tree_sum/msvs/tree_sum.vcxproj
index 5836c2c..96f38a8 100644
--- a/examples/task/tree_sum/msvs/tree_sum.vcxproj
+++ b/examples/task/tree_sum/msvs/tree_sum.vcxproj
@@ -1,204 +1,208 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>tree_sum</ProjectName>
-    <ProjectGuid>{C931C7A2-074E-4150-9E7A-39A03250411E}</ProjectGuid>
-    <RootNamespace>tree_sum</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <Import Project="..\..\..\common\toolset.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClInclude Include="..\common.h" />
-    <ClInclude Include="..\TreeMaker.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="..\main.cpp" />
-    <ClCompile Include="..\OptimizedParallelSumTree.cpp" />
-    <ClCompile Include="..\SerialSumTree.cpp" />
-    <ClCompile Include="..\SimpleParallelSumTree.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="..\index.html" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>tree_sum</ProjectName>
+    <ProjectGuid>{C931C7A2-074E-4150-9E7A-39A03250411E}</ProjectGuid>
+    <RootNamespace>tree_sum</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\common.h" />
+    <ClInclude Include="..\TreeMaker.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\main.cpp" />
+    <ClCompile Include="..\OptimizedParallelSumTree.cpp" />
+    <ClCompile Include="..\SerialSumTree.cpp" />
+    <ClCompile Include="..\SimpleParallelSumTree.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\readme.html" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/examples/task/tree_sum/readme.html b/examples/task/tree_sum/readme.html
new file mode 100644
index 0000000..653e50e
--- /dev/null
+++ b/examples/task/tree_sum/readme.html
@@ -0,0 +1,423 @@
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
+
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
+
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Tree_sum sample</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Tree_sum sample</h1>
+	</div>
+	
+	<p>
+		This directory contains a simple example that sums values in a tree.
+	<br><br>
+		The example exhibits some speedup, but not a lot,  because it quickly saturates 
+		the system bus on a multiprocessor.  For good speedup, there needs to be 
+		more computation cycles per memory reference.  The point of the example 
+		is to teach how to use the raw task interface, so the computation is
+		deliberately trivial.
+	<br><br>
+		The performance of this example is better when objects are allocated
+		by the scalable_allocator instead of
+		the default "operator new".  The reason is that the scalable_allocator typically
+		packs small objects more tightly than the default "operator new", resulting in
+		a smaller memory footprint, and thus more efficient use of cache and virtual memory.
+		In addition, the scalable_allocator performs better for multi-threaded allocations.
+	</p>
+
+	<div class="changes">
+		<div class="h3-alike">System Requirements</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				For the most up to date system requirements, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
+			</p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Files</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="SerialSumTree.cpp">SerialSumTree.cpp</a>
+				<dd>Sums sequentially.
+				<dt><a href="SimpleParallelSumTree.cpp">SimpleParallelSumTree.cpp</a><dt>
+				<dd>Sums in parallel without any fancy tricks.
+				<dt><a href="OptimizedParallelSumTree.cpp">OptimizedParallelSumTree.cpp</a><dt>
+				<dd>Sums in parallel, using "recycling" and "continuation-passing" tricks. 
+					In this case, it is only slightly faster than the simple version.
+				<dt><a href="common.h">common.h</a>
+				<dd>Shared declarations.
+				<dt><a href="main.cpp">main.cpp</a>
+				<dd>Main program which parses command line options and runs the algorithm.
+				<dt><a href="Makefile">Makefile</a>
+				<dd>Makefile for building the example.
+			</dl>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="msvs/">msvs</a>
+				<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).
+				<dt><a href="xcode/">xcode</a>
+				<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).
+			</dl>
+			<p>For information about the minimum supported version of IDE, see <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a></p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Build instructions</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>General build directions can be found <a href="../../index.html">here</a>.</p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Usage</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><tt>tree_sum <i>-h</i></tt>
+				<dd>Prints the help for command line options
+				<dt><tt>tree_sum [<i>n-of-threads</i>=value] [<i>number-of-nodes</i>=value] [<i>silent</i>] [<i>stdmalloc</i>]</tt>
+				<dt><tt>tree_sum [<i>n-of-threads</i> [<i>number-of-nodes</i>]] [<i>silent</i>] [<i>stdmalloc</i>]</tt> 
+				<dd><i>n-of-threads</i> is the number of threads to use; a range of the form <i>low</i>[:<i>high</i>], where low and optional high are non-negative integers or 'auto' for the default.<br>
+					<i>number-of-nodes</i> is the number of nodes in the tree.<br>
+					<i>silent</i> - no output except elapsed time.<br>
+					<i>stdmalloc</i> - causes the default "operator new" to be used for memory allocations instead of the scalable_allocator.<br>
+
+				<dt>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
+				<dd>Build a <i>debug</i> version of the example
+					(see the <a href="../../index.html">build instructions</a>).
+					<br>Run it with a small problem size and the desired number of threads, e.g., <tt>tree_sum 4 100000</tt>.
+			</dl>
+		</div>
+	</div>
+	
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>	
+	
+</body>
+</html>
diff --git a/examples/task_arena/fractal/Makefile b/examples/task_arena/fractal/Makefile
new file mode 100644
index 0000000..f3965b8
--- /dev/null
+++ b/examples/task_arena/fractal/Makefile
@@ -0,0 +1,87 @@
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+# GNU Makefile that builds and runs example.
+NAME=Fractal
+ARGS=auto
+PERF_RUN_ARGS=auto 1 1000000 silent
+LIGHT_ARGS=auto 1 1000
+
+# The C++ compiler
+ifneq (,$(shell which icc 2>/dev/null))
+CXX=icc
+endif # icc
+
+ifeq ($(shell uname), Linux)
+LIBS+= -lrt 
+else ifeq ($(shell uname), Darwin)
+override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib
+endif
+
+include ../../common/gui/Makefile.gmake
+
+SOURCES= ../../common/gui/$(UI)video.cpp fractal.cpp main.cpp
+
+override CXXFLAGS += $(UI_CXXFLAGS)
+
+all:	release test
+
+resources:
+ifeq ($(UI),mac)
+	mkdir -p $(APPRES)/en.lproj $(NAME).app/Contents/MacOS
+	cp ../../common/gui/xcode/tbbExample/tbbExample-Info.plist $(NAME).app/Contents/Info.plist
+	cp ../../common/gui/xcode/tbbExample/PkgInfo $(NAME).app/Contents
+	cp ../../common/gui/xcode/tbbExample/en.lproj/* $(APPRES)/en.lproj
+endif # macOS*
+
+release: $(SOURCES) resources
+ifeq ($(UI),mac)
+	$(CXX_UI) -O2 -DNDEBUG $(CXXFLAGS) -c $(MACUISOURCES)
+endif # macOS
+	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) $(MACUIOBJS) -ltbb $(LIBS)
+
+debug: resources
+ifeq ($(UI),mac)
+	$(CXX_UI) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -c $(MACUISOURCES)
+endif # macOS
+	$(CXX) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) $(MACUIOBJS) -ltbb_debug $(LIBS)
+
+clean:
+	$(RM) $(EXE) *.o *.d
+ifeq ($(UI),mac)
+	rm -rf $(NAME).app
+endif
+
+test:
+ifeq ($(UI),mac)
+	export DYLD_LIBRARY_PATH="$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)"; $(run_cmd) ./$(EXE) $(ARGS)
+else
+	$(run_cmd) ./$(EXE) $(ARGS)
+endif
+
+light_test:
+ifeq ($(UI),mac)
+	export DYLD_LIBRARY_PATH="$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)"; $(run_cmd) ./$(EXE) $(LIGHT_ARGS)
+else
+	$(run_cmd) ./$(EXE) $(LIGHT_ARGS)
+endif
+
+perf_build: release
+
+perf_run:
+	$(run_cmd) ./$(EXE) $(PERF_RUN_ARGS)
diff --git a/examples/task_arena/fractal/Makefile.windows b/examples/task_arena/fractal/Makefile.windows
new file mode 100644
index 0000000..41dd269
--- /dev/null
+++ b/examples/task_arena/fractal/Makefile.windows
@@ -0,0 +1,66 @@
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+PROG=Fractal
+ARGS=auto
+PERF_RUN_ARGS=auto 1 1000000 silent
+LIGHT_ARGS=auto 1 1000
+
+# Trying to find if icl.exe is set
+CXX1 = $(TBB_CXX)-
+CXX2 = $(CXX1:icl.exe-=icl.exe)
+CXX  = $(CXX2:-=cl.exe)
+# Uncomment one of next lines to choose user interface type (console, gdiplus, direct draw)
+#UI = con
+UI = gdi
+#UI = dd
+
+# Machine architecture, auto-detected from TBB_TARGET_ARCH by default
+# Use XARCH variable to change it. See index.html for more information
+ARCH0 = $(TBB_TARGET_ARCH)-
+ARCH1 = $(ARCH0:ia32-=x86)
+ARCH2 = $(ARCH1:intel64-=AMD64)
+XARCH = $(ARCH2:-=x86)
+
+MAKEINC = ../../common/gui/Makefile.win
+SOURCES = fractal.cpp main.cpp 
+
+all: release test
+release: compiler_check
+	@$(MAKE) -f $(MAKEINC) UI=$(UI) CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" LFLAGS="$(LDFLAGS) tbb.lib $(LIBS)" XARCH=$(XARCH) RCNAME=gui SOURCE="$(SOURCES)" EXE=$(PROG).exe build_one
+debug: compiler_check
+	@$(MAKE) -f $(MAKEINC) UI=$(UI) DEBUG=_debug CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS) /D TBB_USE_DEBUG" LFLAGS="$(LDFLAGS) tbb_debug.lib $(LIBS)" XARCH=$(XARCH) RCNAME=gui SOURCE="$(SOURCES)" EXE=$(PROG).exe build_one
+clean:
+	@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest msvs\gui.res
+test:
+	$(PROG) $(ARGS)
+light_test:
+	$(PROG) $(LIGHT_ARGS)
+
+perf_build: compiler_check
+	@$(MAKE) -f $(MAKEINC) UI=con CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" LFLAGS="$(LDFLAGS) tbb.lib $(LIBS)" XARCH=$(XARCH) RCNAME=gui SOURCE="$(SOURCES) " EXE=$(PROG).exe build_one
+perf_run:
+	$(PROG) $(PERF_RUN_ARGS)
+
+compiler_check:
+	@echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1  || echo "$(CXX) command not found. Check if CXX=$(CXX) is set properly"
+	@cmd.exe /C del compiler_test
+
diff --git a/examples/task_arena/fractal/fractal.cpp b/examples/task_arena/fractal/fractal.cpp
new file mode 100644
index 0000000..116d26d
--- /dev/null
+++ b/examples/task_arena/fractal/fractal.cpp
@@ -0,0 +1,305 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+#include "fractal.h"
+
+#include "tbb/parallel_for.h"
+#include "tbb/blocked_range2d.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/task_arena.h"
+#include "tbb/task_group.h"
+#include "tbb/tick_count.h"
+
+#include <math.h>
+#include <stdio.h>
+
+// Included for __TBB_CPP11_LAMBDAS_PRESENT definition
+#include "tbb/tbb_config.h"
+
+video *v;
+extern bool silent;
+extern bool schedule_auto;
+extern int grain_size;
+
+color_t fractal::calc_one_pixel( int x0, int y0 ) const {
+    unsigned int iter;
+    double fx0, fy0, xtemp, x, y, mu;
+
+    color_t color;
+
+    fx0 = (double)x0 - (double) size_x / 2.0;
+    fy0 = (double)y0 - (double) size_y / 2.0;
+    fx0 = fx0 / magn + cx;
+    fy0 = fy0 / magn + cy;
+
+    iter = 0; x = 0; y = 0;
+    mu = 0;
+
+    while (((x*x + y*y) <= 4) && (iter < max_iterations)) {
+        xtemp = x*x - y*y + fx0;
+        y = 2*x*y + fy0;
+        x = xtemp;
+        mu += exp(-sqrt(x*x+y*y));
+        iter++;
+    }
+
+    if (iter == max_iterations) {
+        // point corresponds to the mandelbrot set
+        color = v->get_color(255, 255, 255);
+        return color;
+    }
+
+    int b = (int)(256*mu);
+    int g = (b/8);
+    int r = (g/16);
+
+    b = b>255 ? 255 : b;
+    g = g>255 ? 255 : g;
+    r = r>255 ? 255 : r;
+
+    color = v->get_color(r, g, b);
+    return color;
+}
+
+void fractal::clear() {
+    drawing_area area( off_x, off_y, size_x, size_y, dm ) ;
+
+    // fill the rendering area with black color
+    for (int y=0; y<size_y; ++y) {
+        area.set_pos( 0, y );
+        for (int x=0; x<size_x; ++x) {
+            area.put_pixel( v->get_color(0, 0, 0) );
+        }
+    }
+}
+
+void fractal::draw_border( bool is_active ) {
+    color_t color = is_active ? v->get_color(0, 255, 0) // green color
+                                : v->get_color(96, 128, 96); // green-gray color
+
+    // top border
+    drawing_area area0( off_x-1, off_y-1, size_x+2, 1, dm );
+    for (int i=-1; i<size_x+1; ++i)
+        area0.put_pixel(color);
+    // bottom border
+    drawing_area area1( off_x-1, off_y+size_y, size_x+2, 1, dm );
+    for (int i=-1; i<size_x+1; ++i)
+        area1.put_pixel(color);
+    // left border
+    drawing_area area2( off_x-1, off_y, 1, size_y+2, dm );
+    for (int i=0; i<size_y; ++i)
+        area2.set_pixel(0, i, color);
+    // right border
+    drawing_area area3( size_x+off_x, off_y, 1, size_y+2, dm );
+    for (int i=0; i<size_y; ++i)
+        area3.set_pixel(0, i, color);
+}
+
+void fractal::render_rect( int x0, int y0, int x1, int y1 ) const {
+    // render the specified rectangle area
+    drawing_area area(off_x+x0, off_y+y0, x1-x0, y1-y0, dm);
+    for ( int y=y0; y<y1; ++y ) {
+        area.set_pos( 0, y-y0 );
+        for ( int x=x0; x<x1; ++x ) {
+            area.put_pixel( calc_one_pixel( x, y ) );
+        }
+    }
+}
+
+class fractal_body {
+    fractal &f;
+public:
+    void operator()( tbb::blocked_range2d<int> &r ) const {
+        if ( v->next_frame() )
+            f.render_rect( r.cols().begin(), r.rows().begin(), r.cols().end(), r.rows().end() );
+    }
+
+    fractal_body( fractal &_f ) : f(_f) {
+    }
+};
+
+void fractal::render( tbb::task_group_context &context ) {
+    // Make copy of fractal object and render fractal with parallel_for with
+    // the provided context and partitioner chosen by schedule_auto.
+    // Updates to fractal are not reflected in the render.
+    fractal f = *this;
+    fractal_body body(f);
+
+    if( schedule_auto )
+        tbb::parallel_for( tbb::blocked_range2d<int>(0, size_y, grain_size, 0, size_x, grain_size ),
+                body, tbb::auto_partitioner(), context);
+    else
+        tbb::parallel_for( tbb::blocked_range2d<int>(0, size_y, grain_size, 0, size_x, grain_size ),
+                body, tbb::simple_partitioner(), context);
+}
+
+void fractal::run( tbb::task_group_context &context ) {
+    clear();
+    context.reset();
+    render( context );
+}
+
+bool fractal::check_point( int x, int y ) const {
+    return x >= off_x && x <= off_x+size_x &&
+            y >= off_y && y <= off_y+size_y;
+}
+
+void fractal_group::calc_fractal( int num ) {
+    // calculate the fractal
+    fractal &f = num ? f1 : f0;
+
+    tbb::tick_count t0 = tbb::tick_count::now();
+    while ( v->next_frame() && num_frames[num] != 0 ) {
+        f.run( context[num] );
+        if ( num_frames[num]>0 ) num_frames[num] -= 1;
+    }
+    tbb::tick_count t1 = tbb::tick_count::now();
+
+    if ( !silent ) {
+        printf("  %s fractal finished. Time: %g\n", num ? "Second" : "First", (t1-t0).seconds());
+    }
+}
+
+void fractal_group::set_priorities() {
+    // set the high priority for the active area and the normal priority for another area
+    context[active].set_priority( tbb::priority_high );
+    context[active^1].set_priority( tbb::priority_low );
+}
+
+void fractal_group::switch_priorities( int new_active ) {
+    if( new_active!=-1 ) active = new_active;
+    else                 active = 1-active; // assumes 'active' is only 0 or 1
+    set_priorities();
+    draw_borders();
+}
+
+void fractal_group::set_num_frames_at_least( int n ) {
+    if ( num_frames[0]<n ) num_frames[0] = n;
+    if ( num_frames[1]<n ) num_frames[1] = n;
+}
+
+#if !__TBB_CPP11_LAMBDAS_PRESENT
+class task_group_body {
+    fractal_group &fg;
+public:
+    task_group_body(fractal_group &_fg) : fg(_fg) { }
+
+    void operator() () const { fg.calc_fractal( 1 ); }
+};
+
+class arena_body {
+    task_group_body &tg_body;
+    tbb::task_group &task_group;
+public:
+    arena_body( task_group_body &_tg_body, tbb::task_group &_task_group )
+        :  tg_body( _tg_body ), task_group( _task_group )  { }
+
+    void operator() () const { task_group.run( tg_body ); }
+};
+
+class arena_body_wait {
+    tbb::task_group &group;
+public:
+    arena_body_wait( tbb::task_group &gr ) : group(gr) { }
+
+    void operator() () const { group.wait(); }
+};
+#endif
+
+void fractal_group::run( bool create_second_fractal ) {
+    // initialize task scheduler
+    tbb::task_scheduler_init init( num_threads );
+
+    // create contexts to manage fractal priorities
+    context = new tbb::task_group_context[2];
+
+    set_priorities();
+    draw_borders();
+
+    tbb::task_arena arena;
+    tbb::task_group gr;
+
+    // the second fractal is calculating on separated thread
+    if ( create_second_fractal ) {
+#if __TBB_CPP11_LAMBDAS_PRESENT
+        arena.execute( [&] {
+            gr.run( [&] { calc_fractal( 1 ); } );
+        } );
+#else
+        task_group_body tg_body( *this );
+        arena_body a_body( tg_body, gr );
+        arena.execute( a_body );
+#endif
+    }
+
+    // calculate the first fractal
+    calc_fractal( 0 );
+
+    if ( create_second_fractal ) {
+#if __TBB_CPP11_LAMBDAS_PRESENT
+        // wait for second fractal
+        arena.execute( [&] { gr.wait(); } );
+#else
+        arena.execute( arena_body_wait( gr ) );
+#endif
+    }
+
+    delete[] context;
+}
+
+void fractal_group::draw_borders() {
+    f0.draw_border( active==0 );
+    f1.draw_border( active==1 );
+}
+
+fractal_group::fractal_group( const drawing_memory &_dm, int _num_threads, unsigned int _max_iterations, int _num_frames ) : f0(_dm), f1(_dm), num_threads(_num_threads) {
+    // set rendering areas
+    f0.size_x = f1.size_x = _dm.sizex/2-4;
+    f0.size_y = f1.size_y = _dm.sizey-4;
+    f0.off_x = f0.off_y = f1.off_y = 2;
+    f1.off_x = f0.size_x+4+2;
+
+    // set fractals parameters
+    f0.cx = -0.6f; f0.cy = 0.0f; f0.magn = 200.0f;
+    f1.cx = -0.6f; f1.cy = 0.0f; f1.magn = 200.0f;
+    f0.max_iterations = f1.max_iterations = _max_iterations;
+
+    // initially the first fractal is active
+    active = 0;
+
+    num_frames[0] = num_frames[1] = _num_frames;
+}
+
+void fractal_group::mouse_click( int x, int y ) {
+    // assumption that the point is not inside any fractal area
+    int new_active = -1;
+
+    if ( f0.check_point( x, y ) ) {
+        // the point is inside the first fractal area
+        new_active = 0;
+    } else if ( f1.check_point( x, y ) ) {
+        // the point is inside the second fractal area
+        new_active = 1;
+    }
+
+    if ( new_active != -1 && new_active != active ) {
+        switch_priorities( new_active );
+    }
+}
diff --git a/examples/task_arena/fractal/fractal.h b/examples/task_arena/fractal/fractal.h
new file mode 100644
index 0000000..ce59dd1
--- /dev/null
+++ b/examples/task_arena/fractal/fractal.h
@@ -0,0 +1,163 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+#ifndef FRACTAL_H_
+#define FRACTAL_H_
+
+#include "../../common/gui/video.h"
+
+#include "tbb/task.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/atomic.h"
+
+//! Fractal class
+class fractal {
+    //! Left corner of the fractal area
+    int off_x, off_y;
+    //! Size of the fractal area
+    int size_x, size_y;
+
+    //! Fractal properties
+    float cx, cy;
+    float magn;
+    float step;
+    unsigned int max_iterations;
+
+    //! Drawing memory object for rendering
+    const drawing_memory &dm;
+
+    //! One pixel calculation routine
+    color_t calc_one_pixel( int x, int y ) const;
+    //! Clears the fractal area
+    void clear();
+    //! Draws the border around the fractal area
+    void draw_border( bool is_active );
+    //! Renders the fractal
+    void render( tbb::task_group_context &context );
+    //! Check if the point is inside the fractal area
+    bool check_point( int x, int y ) const;
+
+public:
+    //! Constructor
+    fractal( const drawing_memory &dm ) : step(0.2), dm(dm) {
+#if _MSC_VER && _WIN64 && !__INTEL_COMPILER
+        // Workaround for MSVC x64 compiler issue
+        volatile int i=0;
+#endif
+    }
+    //! Runs the fractal calculation
+    void run( tbb::task_group_context &context );
+    //! Renders the fractal rectangular area
+    void render_rect( int x0, int y0, int x1, int y1 ) const;
+
+    void move_up()   { cy += step; }
+    void move_down() { cy -= step; }
+    void move_left() { cx += step; }
+    void move_right(){ cx -= step; }
+
+    void zoom_in() { magn *= 2.; step /= 2.; }
+    void zoom_out(){ magn /= 2.; step *= 2.; }
+
+    void quality_inc() { max_iterations += max_iterations/2; }
+    void quality_dec() { max_iterations -= max_iterations/2; }
+
+    friend class fractal_group;
+};
+
+//! The group of fractals
+class fractal_group {
+    //! Fractals definition
+    fractal f0, f1;
+    //! Number of frames to calculate
+    tbb::atomic<int> num_frames[2];
+    //! Task group contexts to manage priorities
+    tbb::task_group_context *context;
+
+    //! Border type enumeration
+    enum BORDER_TYPE {
+        BORDER_INACTIVE = 0,
+        BORDER_ACTIVE
+    };
+
+    //! The number of the threads
+    int num_threads;
+    //! The active (high priority) fractal number
+    int active;
+
+    //! Draws the borders around the fractals
+    void draw_borders();
+    //! Sets priorities for fractals calculations
+    void set_priorities();
+
+public:
+    //! Constructor
+    fractal_group( const drawing_memory &_dm,
+            int num_threads = tbb::task_scheduler_init::automatic,
+            unsigned int max_iterations = 100000, int num_frames = 1 );
+    //! Run calculation
+    void run( bool create_second_fractal=true );
+    //! Mouse event handler
+    void mouse_click( int x, int y );
+    //! Fractal calculation routine
+    void calc_fractal( int num );
+    //! Get number of threads
+    int get_num_threads() const { return num_threads; }
+    //! Reset the number of frames to be not less than the given value
+    void set_num_frames_at_least( int n );
+    //! Switches the priorities of two fractals
+    void switch_priorities( int new_active=-1 );
+    //! Get active fractal
+    fractal& get_active_fractal() { return  active ? f1 : f0; }
+
+    void active_fractal_zoom_in() {
+        get_active_fractal().zoom_in();
+        context[active].cancel_group_execution();
+    }
+    void active_fractal_zoom_out() {
+        get_active_fractal().zoom_out();
+        context[active].cancel_group_execution();
+    }
+    void active_fractal_quality_inc() {
+        get_active_fractal().quality_inc();
+        context[active].cancel_group_execution();
+    }
+    void active_fractal_quality_dec() {
+        get_active_fractal().quality_dec();
+        context[active].cancel_group_execution();
+    }
+    void active_fractal_move_up() {
+        get_active_fractal().move_up();
+        context[active].cancel_group_execution();
+    }
+    void active_fractal_move_down() {
+        get_active_fractal().move_down();
+        context[active].cancel_group_execution();
+    }
+    void active_fractal_move_left() {
+        get_active_fractal().move_left();
+        context[active].cancel_group_execution();
+    }
+    void active_fractal_move_right() {
+        get_active_fractal().move_right();
+        context[active].cancel_group_execution();
+    }
+};
+
+#endif /* FRACTAL_H_ */
diff --git a/examples/task_arena/fractal/fractal_video.h b/examples/task_arena/fractal/fractal_video.h
new file mode 100644
index 0000000..44bbfdd
--- /dev/null
+++ b/examples/task_arena/fractal/fractal_video.h
@@ -0,0 +1,90 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+#ifndef FRACTAL_VIDEO_H_
+#define FRACTAL_VIDEO_H_
+
+#include "../../common/gui/video.h"
+#include "fractal.h"
+
+extern video *v;
+extern bool single;
+
+class fractal_video : public video
+{
+    fractal_group *fg;
+
+private:
+    void on_mouse( int x, int y, int key ) {
+        if( key == 1 ) {
+            if ( fg ) {
+                fg->set_num_frames_at_least(20);
+                fg->mouse_click( x, y );
+            }
+        }
+    }
+
+    void on_key( int key ) {
+        switch ( key&0xff ) {
+            case esc_key:
+                running = false; break;
+            case ' ': // space
+                if( fg ) fg->switch_priorities(); break;
+
+            case 'q':
+                if( fg ) fg->active_fractal_zoom_in(); break;
+            case 'e':
+                if( fg ) fg->active_fractal_zoom_out(); break;
+
+            case 'r':
+                if( fg ) fg->active_fractal_quality_inc(); break;
+            case 'f':
+                if( fg ) fg->active_fractal_quality_dec(); break;
+
+            case 'w':
+                if( fg ) fg->active_fractal_move_up(); break;
+            case 'a':
+                if( fg ) fg->active_fractal_move_left(); break;
+            case 's':
+                if( fg ) fg->active_fractal_move_down(); break;
+            case 'd':
+                if( fg ) fg->active_fractal_move_right(); break;
+        }
+        if( fg ) fg->set_num_frames_at_least(20);
+    }
+
+    void on_process() {
+        if ( fg ) {
+            fg->run( !single );
+        }
+    }
+
+public:
+    fractal_video() :fg(0) {
+        title = "Dynamic Priorities in TBB: Fractal Example";
+        v = this;
+    }
+
+    void set_fractal_group( fractal_group &_fg ) {
+        fg = &_fg;
+    }
+};
+
+#endif /* FRACTAL_VIDEO_H_ */
diff --git a/examples/task_arena/fractal/main.cpp b/examples/task_arena/fractal/main.cpp
new file mode 100644
index 0000000..7a80818
--- /dev/null
+++ b/examples/task_arena/fractal/main.cpp
@@ -0,0 +1,92 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+#define VIDEO_WINMAIN_ARGS
+
+#include <stdio.h>
+#include <iostream>
+
+#include "fractal.h"
+#include "fractal_video.h"
+
+#include "tbb/tick_count.h"
+#include "tbb/task_scheduler_init.h"
+
+#include "../../common/utility/utility.h"
+
+bool silent = false;
+bool single = false;
+bool schedule_auto = false;
+int grain_size = 8;
+
+int main(int argc, char *argv[])
+{
+    try{
+        tbb::tick_count mainStartTime = tbb::tick_count::now();
+
+        // It is used for console mode for test with different number of threads and also has
+        // meaning for GUI: threads.first  - use separate event/updating loop thread (>0) or not (0).
+        //                  threads.second - initialization value for scheduler
+        utility::thread_number_range threads( tbb::task_scheduler_init::default_num_threads );
+        int num_frames = -1;
+        int max_iterations = 1000000;
+
+        // command line parsing
+        utility::parse_cli_arguments(argc,argv,
+            utility::cli_argument_pack()
+            //"-h" option for displaying help is present implicitly
+            .positional_arg(threads,"n-of-threads",utility::thread_number_range_desc)
+            .positional_arg(num_frames,"n-of-frames","number of frames the example processes internally")
+            .positional_arg(max_iterations,"max-of-iterations","maximum number of the fractal iterations")
+            .positional_arg(grain_size,"grain-size","the grain size value")
+            .arg(schedule_auto, "use-auto-partitioner", "use tbb::auto_partitioner")
+            .arg(silent, "silent", "no output except elapsed time")
+            .arg(single, "single", "process only one fractal")
+        );
+
+        fractal_video video;
+
+        // video layer init
+        if ( video.init_window(1024, 512) ) {
+            video.calc_fps = false;
+            video.threaded = threads.first > 0;
+            // initialize fractal group
+            fractal_group fg( video.get_drawing_memory(), threads.last, max_iterations, num_frames );
+            video.set_fractal_group( fg );
+            // main loop
+            video.main_loop();
+        }
+        else if ( video.init_console() ) {
+            // in console mode we always have limited number of frames
+            num_frames = num_frames<0 ? 1 : num_frames;
+            for(int p = threads.first;  p <= threads.last; p = threads.step(p) ) {
+                if ( !silent ) printf("Threads = %d\n", p);
+                fractal_group fg( video.get_drawing_memory(), p, max_iterations, num_frames );
+                fg.run( !single );
+            }
+        }
+        video.terminate();
+        utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds());
+        return 0;
+    } catch ( std::exception& e ) {
+        std::cerr<<"error occurred. error text is :\"" <<e.what()<<"\"\n";
+        return 1;
+    }
+}
diff --git a/examples/task_arena/fractal/msvs/fractal.sln b/examples/task_arena/fractal/msvs/fractal.sln
new file mode 100644
index 0000000..03a9c05
--- /dev/null
+++ b/examples/task_arena/fractal/msvs/fractal.sln
@@ -0,0 +1,38 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fractal", "fractal.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A2527}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		_GDIRelease|Win32 = _GDIRelease|Win32
+		_GDIRelease|x64 = _GDIRelease|x64
+		DDDebug|Win32 = DDDebug|Win32
+		DDDebug|x64 = DDDebug|x64
+		DDRelease|Win32 = DDRelease|Win32
+		DDRelease|x64 = DDRelease|x64
+		GDIDebug|Win32 = GDIDebug|Win32
+		GDIDebug|x64 = GDIDebug|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|Win32.ActiveCfg = GDIRelease|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|Win32.Build.0 = GDIRelease|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|x64.ActiveCfg = GDIRelease|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|x64.Build.0 = GDIRelease|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|Win32.ActiveCfg = DDDebug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|Win32.Build.0 = DDDebug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|x64.ActiveCfg = DDDebug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|x64.Build.0 = DDDebug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|Win32.ActiveCfg = DDRelease|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|Win32.Build.0 = DDRelease|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|x64.ActiveCfg = DDRelease|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|x64.Build.0 = DDRelease|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|Win32.ActiveCfg = GDIDebug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|Win32.Build.0 = GDIDebug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|x64.ActiveCfg = GDIDebug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|x64.Build.0 = GDIDebug|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/task_arena/fractal/msvs/fractal.vcxproj b/examples/task_arena/fractal/msvs/fractal.vcxproj
new file mode 100644
index 0000000..3ce7382
--- /dev/null
+++ b/examples/task_arena/fractal/msvs/fractal.vcxproj
@@ -0,0 +1,450 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="GDIDebug|Win32">
+      <Configuration>GDIDebug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="GDIDebug|x64">
+      <Configuration>GDIDebug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="GDIRelease|Win32">
+      <Configuration>GDIRelease</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="GDIRelease|x64">
+      <Configuration>GDIRelease</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DDDebug|Win32">
+      <Configuration>DDDebug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DDDebug|x64">
+      <Configuration>DDDebug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DDRelease|Win32">
+      <Configuration>DDRelease</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DDRelease|x64">
+      <Configuration>DDRelease</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>fractal</ProjectName>
+    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A2527}</ProjectGuid>
+    <RootNamespace>fractal</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='GDIRelease|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='GDIDebug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='GDIRelease|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='GDIDebug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='GDIRelease|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='GDIDebug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='GDIRelease|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='GDIDebug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='GDIDebug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='GDIDebug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='GDIDebug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='GDIDebug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='GDIDebug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='GDIDebug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='GDIRelease|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='GDIRelease|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='GDIRelease|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='GDIRelease|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='GDIRelease|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='GDIRelease|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='GDIDebug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='GDIDebug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='GDIDebug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='GDIDebug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='GDIDebug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='GDIDebug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='GDIRelease|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='GDIRelease|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='GDIRelease|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='GDIRelease|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='GDIRelease|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='GDIRelease|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='GDIDebug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='GDIDebug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='GDIRelease|Win32'">
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='GDIRelease|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">
+    <PreBuildEvent>
+      <Command>..\..\..\common\gui\dxcheck.bat</Command>
+    </PreBuildEvent>
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">
+    <PreBuildEvent>
+      <Command>..\..\..\common\gui\dxcheck.bat</Command>
+    </PreBuildEvent>
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">
+    <PreBuildEvent>
+      <Command>..\..\..\common\gui\dxcheck.bat</Command>
+    </PreBuildEvent>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">
+    <PreBuildEvent>
+      <Command>..\..\..\common\gui\dxcheck.bat</Command>
+    </PreBuildEvent>
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\fractal.cpp" />
+    <ClCompile Include="..\main.cpp" />
+    <ClCompile Include="..\..\..\common\gui\d2dvideo.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='GDIDebug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='GDIDebug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='GDIRelease|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='GDIRelease|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\..\common\gui\gdivideo.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\fractal.h" />
+    <ClInclude Include="..\fractal_video.h" />
+    <ClInclude Include="resource.h" />
+    <ClInclude Include="..\..\..\common\gui\video.h" />
+    <ClInclude Include="..\..\..\common\gui\winvideo.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="gui.ico" />
+    <None Include="small.ico" />
+    <None Include="..\readme.html" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="gui.rc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/examples/task_priority/fractal/msvs/gui.ico b/examples/task_arena/fractal/msvs/gui.ico
similarity index 100%
rename from examples/task_priority/fractal/msvs/gui.ico
rename to examples/task_arena/fractal/msvs/gui.ico
diff --git a/examples/task_priority/fractal/msvs/gui.rc b/examples/task_arena/fractal/msvs/gui.rc
similarity index 100%
rename from examples/task_priority/fractal/msvs/gui.rc
rename to examples/task_arena/fractal/msvs/gui.rc
diff --git a/examples/task_arena/fractal/msvs/resource.h b/examples/task_arena/fractal/msvs/resource.h
new file mode 100644
index 0000000..760972e
--- /dev/null
+++ b/examples/task_arena/fractal/msvs/resource.h
@@ -0,0 +1,28 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+#define IDC_MYICON                      2
+#define IDD_GUI                         102
+#define IDS_APP_TITLE                   103
+#define IDI_GUI                         107
+#define IDI_SMALL                       108
+#define IDC_GUI                         109
+#define IDR_MAINFRAME                   128
+#define IDC_STATIC                      -1
diff --git a/examples/task_priority/fractal/msvs/small.ico b/examples/task_arena/fractal/msvs/small.ico
similarity index 100%
rename from examples/task_priority/fractal/msvs/small.ico
rename to examples/task_arena/fractal/msvs/small.ico
diff --git a/examples/task_arena/fractal/readme.html b/examples/task_arena/fractal/readme.html
new file mode 100644
index 0000000..1c2ec90
--- /dev/null
+++ b/examples/task_arena/fractal/readme.html
@@ -0,0 +1,447 @@
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
+
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
+
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Fractal sample</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Fractal sample</h1>
+	</div>
+	
+	<p>
+		The example calculates two classical Mandelbrot fractals with different priorities. 
+	<br><br>
+		The application window is divided into two areas where fractals are rendered. With mouse click on an area the user can change the priority of the calculating fractal. In the clicked area the fractal priority is changed to be "high" and the priority of the other fractal is changed to "low". The fractal with "high" priority we will call active.
+		The example also has the console mode but in this mode the priorities could not be changed during execution.
+	</p>
+
+	<div class="changes">
+		<div class="h3-alike">System Requirements</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				For the most up to date system requirements, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
+			</p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Files</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="main.cpp">main.cpp</a>
+				<dd>Main program which parses command line options and runs the fractals calculation in GUI or Console mode.
+				<dt><a href="fractal.h">fractal.h</a>
+				<dd>Interfaces of fractal and fractal_group classes.
+				<dt><a href="fractal.cpp">fractal.cpp</a>
+				<dd>Implementations of fractal and fractal_group classes.
+				<dt><a href="fractal_video.h">fractal_video.h</a>
+				<dd>GUI mode support interface.
+				<dt><a href="Makefile">Makefile</a>
+				<dd>Makefile for building the example.
+			</dl>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="msvs/">msvs</a>
+				<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).
+				<dt><a href="xcode/">xcode</a>
+				<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).
+			</dl>
+			<p>For information about the minimum supported version of IDE, see <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a></p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Build instructions</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>General build directions can be found <a href="../../index.html">here</a>.</p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Usage</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><tt>fractal <i>-h</i></tt>
+				<dd>Prints the help for command line options
+				<dt><tt>fractal [<i>n-of-threads=value</i>] [<i>n-of-frames=value</i>] [<i>max-of-iterations=value</i>] [<i>grain-size=value</i>] [<i>silent</i>] [<i>single</i>]</tt>
+				<dt><tt>fractal [<i>n-of-threads</i> [<i>n-of-frames</i> [<i>max-of-iterations</i> [<i>grain-size</i>]]]] [<i>silent</i>] [<i>single</i>]</tt> 
+				<dd><i>n-of-threads</i> is the number of threads to use; a range of the form <i>low</i>[:<i>high</i>], where low and optional high are non-negative integers or 'auto' for the TBB default.<br>
+					<i>n-of-frames</i> is a number of frames the example processes internally.<br>
+					<i>max-of-iterations</i> is a maximum number of the fractal iterations.<br>
+					<i>grain-size</i> is an optional grain size, must be a positive integer. <br>
+					<i>use-auto-partitioner</i> - use tbb::auto_partitioner.<br>
+					<i>silent</i> - no output except elapsed time.<br>
+					<i>single</i> - process only one fractal.<br>
+
+				<dt>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
+				<dd>Build a <i>debug</i> version of the example
+					(see the <a href="../../index.html">build instructions</a>).
+					<br>Run it with a small fractal iterations number and the desired number of threads, e.g., <tt>fractal 4 1 10000</tt>.
+			</dl>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Hot keys</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>
+				The following hot keys can be used in interactive execution mode when the example is compiled with the graphical user interface:
+			</p>
+			<dl>
+				<dt><left mouse button>
+				<dd>Make the fractal active and change its priority to high
+				<dt><space>
+				<dd>Switch priorities
+				<dt><w>
+				<dd>Move the active fractal up
+				<dt><a>
+				<dd>Move the active fractal to the left
+				<dt><s>
+				<dd>Move the active fractal down
+				<dt><d>
+				<dd>Move the active fractal to the right
+				<dt><q>
+				<dd>Zoom in the active fractal
+				<dt><e>
+				<dd>Zoom out the active fractal
+				<dt><r>
+				<dd>Increase quality (count of iterations for each pixel) the active fractal
+				<dt><f>
+				<dd>Decrease quality (count of iterations for each pixel) the active fractal
+				<dt><esc>
+				<dd>Stop execution.
+			</dl>
+		</div>
+	</div>
+	
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>	
+	
+</body>
+</html>
diff --git a/examples/task_arena/fractal/xcode/fractal.xcodeproj/project.pbxproj b/examples/task_arena/fractal/xcode/fractal.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..09e43aa
--- /dev/null
+++ b/examples/task_arena/fractal/xcode/fractal.xcodeproj/project.pbxproj
@@ -0,0 +1,529 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		84011722152D687A00B07E4D /* fractal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84011720152D687A00B07E4D /* fractal.cpp */; };
+		84B8DA77152CA90100D59B95 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA6F152CA90100D59B95 /* main.m */; };
+		84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; };
+		84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; };
+		84B8DA7A152CA90100D59B95 /* (null) in Resources */ = {isa = PBXBuildFile; };
+		84B8DA80152CA97B00D59B95 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */; };
+		84B8DA81152CA97B00D59B95 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7E152CA97B00D59B95 /* MainMenu.xib */; };
+		84B8DA87152CA99C00D59B95 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA82152CA99C00D59B95 /* main.cpp */; };
+		84B8DA9A152CADF400D59B95 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; };
+		84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D017551527431F0008A4E0 /* Cocoa.framework */; };
+		84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D01775152744BD0008A4E0 /* OpenGL.framework */; };
+		D31F32341C11798900A77D54 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; };
+		D31F32351C11798E00A77D54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA6F152CA90100D59B95 /* main.m */; };
+		D31F32361C11799200A77D54 /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; };
+		D31F32371C11799500A77D54 /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; };
+		D31F323A1C117A6200A77D54 /* iOS.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D31F32381C117A1700A77D54 /* iOS.storyboard */; };
+		D31F323B1C117BE300A77D54 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA82152CA99C00D59B95 /* main.cpp */; };
+		D31F323C1C117BE700A77D54 /* fractal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84011720152D687A00B07E4D /* fractal.cpp */; };
+		D31F328E1C12E65800A77D54 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F323F1C11B5C900A77D54 /* libtbb.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };
+		D31F328F1C12E65F00A77D54 /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F32401C11B5C900A77D54 /* libtbbmalloc.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };
+		D31F32961C12E6B500A77D54 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F32901C12E67300A77D54 /* libtbb.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };
+		D31F32971C12E6B500A77D54 /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F32911C12E67300A77D54 /* libtbbmalloc.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };
+		D31F32981C12E6C500A77D54 /* libtbb.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D31F32901C12E67300A77D54 /* libtbb.dylib */; };
+		D31F32991C12E6CA00A77D54 /* libtbbmalloc.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D31F32911C12E67300A77D54 /* libtbbmalloc.dylib */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+		8401171F152D687A00B07E4D /* fractal_video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fractal_video.h; path = ../fractal_video.h; sourceTree = "<group>"; };
+		84011720152D687A00B07E4D /* fractal.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fractal.cpp; path = ../fractal.cpp; sourceTree = "<group>"; };
+		84011721152D687A00B07E4D /* fractal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fractal.h; path = ../fractal.h; sourceTree = "<group>"; };
+		84B8DA13152C9AC600D59B95 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = "<group>"; };
+		84B8DA6F152CA90100D59B95 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../../../common/gui/xcode/tbbExample/main.m; sourceTree = "<group>"; };
+		84B8DA70152CA90100D59B95 /* OpenGLView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenGLView.h; path = ../../../common/gui/xcode/tbbExample/OpenGLView.h; sourceTree = "<group>"; };
+		84B8DA71152CA90100D59B95 /* OpenGLView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OpenGLView.m; path = ../../../common/gui/xcode/tbbExample/OpenGLView.m; sourceTree = "<group>"; };
+		84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tbbAppDelegate.h; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.h; sourceTree = "<group>"; };
+		84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = tbbAppDelegate.m; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.m; sourceTree = "<group>"; };
+		84B8DA75152CA90100D59B95 /* tbbExample-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "tbbExample-Prefix.pch"; path = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch"; sourceTree = "<group>"; };
+		84B8DA7D152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = InfoPlist.strings; sourceTree = "<group>"; };
+		84B8DA7F152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = MainMenu.xib; sourceTree = "<group>"; };
+		84B8DA82152CA99C00D59B95 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../main.cpp; sourceTree = "<group>"; };
+		84B8DA99152CADF400D59B95 /* macvideo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macvideo.cpp; path = ../../../common/gui/macvideo.cpp; sourceTree = "<group>"; };
+		84D017511527431F0008A4E0 /* tbbExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tbbExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		84D017551527431F0008A4E0 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
+		84D017581527431F0008A4E0 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
+		84D017591527431F0008A4E0 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
+		84D0175A1527431F0008A4E0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+		84D01775152744BD0008A4E0 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
+		D31F321D1C11796D00A77D54 /* tbbExample_ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tbbExample_ios.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		D31F32381C117A1700A77D54 /* iOS.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = iOS.storyboard; path = ../iOS.storyboard; sourceTree = "<group>"; };
+		D31F323F1C11B5C900A77D54 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = "<group>"; };
+		D31F32401C11B5C900A77D54 /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = ../../../../lib/libtbbmalloc.dylib; sourceTree = "<group>"; };
+		D31F32901C12E67300A77D54 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/ios/libtbb.dylib; sourceTree = "<group>"; };
+		D31F32911C12E67300A77D54 /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = ../../../../lib/ios/libtbbmalloc.dylib; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		84D0174E1527431F0008A4E0 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D31F328E1C12E65800A77D54 /* libtbb.dylib in Frameworks */,
+				84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */,
+				84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */,
+				D31F328F1C12E65F00A77D54 /* libtbbmalloc.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		D31F321A1C11796D00A77D54 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D31F32961C12E6B500A77D54 /* libtbb.dylib in Frameworks */,
+				D31F32971C12E6B500A77D54 /* libtbbmalloc.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		84011727152D68D200B07E4D /* Sources */ = {
+			isa = PBXGroup;
+			children = (
+				8401171F152D687A00B07E4D /* fractal_video.h */,
+				84B8DA82152CA99C00D59B95 /* main.cpp */,
+				84011720152D687A00B07E4D /* fractal.cpp */,
+				84011721152D687A00B07E4D /* fractal.h */,
+			);
+			name = Sources;
+			sourceTree = "<group>";
+		};
+		84B8DA6C152CA8D900D59B95 /* tbbExample */ = {
+			isa = PBXGroup;
+			children = (
+				84011727152D68D200B07E4D /* Sources */,
+				84B8DA98152CAD8600D59B95 /* Gui layer */,
+				84B8DA7B152CA97B00D59B95 /* Resources */,
+			);
+			name = tbbExample;
+			sourceTree = "<group>";
+		};
+		84B8DA7B152CA97B00D59B95 /* Resources */ = {
+			isa = PBXGroup;
+			children = (
+				D31F32381C117A1700A77D54 /* iOS.storyboard */,
+				84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */,
+				84B8DA7E152CA97B00D59B95 /* MainMenu.xib */,
+			);
+			name = Resources;
+			path = ../../../common/gui/xcode/tbbExample/en.lproj;
+			sourceTree = "<group>";
+		};
+		84B8DA98152CAD8600D59B95 /* Gui layer */ = {
+			isa = PBXGroup;
+			children = (
+				84B8DA99152CADF400D59B95 /* macvideo.cpp */,
+				84B8DA6F152CA90100D59B95 /* main.m */,
+				84B8DA70152CA90100D59B95 /* OpenGLView.h */,
+				84B8DA71152CA90100D59B95 /* OpenGLView.m */,
+				84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */,
+				84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */,
+				84B8DA75152CA90100D59B95 /* tbbExample-Prefix.pch */,
+			);
+			name = "Gui layer";
+			sourceTree = "<group>";
+		};
+		84D017461527431F0008A4E0 = {
+			isa = PBXGroup;
+			children = (
+				84B8DA6C152CA8D900D59B95 /* tbbExample */,
+				84D017541527431F0008A4E0 /* Frameworks */,
+				84D017521527431F0008A4E0 /* Products */,
+			);
+			sourceTree = "<group>";
+		};
+		84D017521527431F0008A4E0 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				84D017511527431F0008A4E0 /* tbbExample.app */,
+				D31F321D1C11796D00A77D54 /* tbbExample_ios.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		84D017541527431F0008A4E0 /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				D31F323F1C11B5C900A77D54 /* libtbb.dylib */,
+				D31F32401C11B5C900A77D54 /* libtbbmalloc.dylib */,
+				D31F32901C12E67300A77D54 /* libtbb.dylib */,
+				D31F32911C12E67300A77D54 /* libtbbmalloc.dylib */,
+				84D01775152744BD0008A4E0 /* OpenGL.framework */,
+				84D017551527431F0008A4E0 /* Cocoa.framework */,
+				84D017571527431F0008A4E0 /* Other Frameworks */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		84D017571527431F0008A4E0 /* Other Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				84B8DA13152C9AC600D59B95 /* libtbb.dylib */,
+				84D017581527431F0008A4E0 /* AppKit.framework */,
+				84D017591527431F0008A4E0 /* CoreData.framework */,
+				84D0175A1527431F0008A4E0 /* Foundation.framework */,
+			);
+			name = "Other Frameworks";
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		84D017501527431F0008A4E0 /* tbbExample */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget "tbbExample" */;
+			buildPhases = (
+				84D0174D1527431F0008A4E0 /* Sources */,
+				84D0174E1527431F0008A4E0 /* Frameworks */,
+				84D0174F1527431F0008A4E0 /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = tbbExample;
+			productName = tbbExample;
+			productReference = 84D017511527431F0008A4E0 /* tbbExample.app */;
+			productType = "com.apple.product-type.application";
+		};
+		D31F321C1C11796D00A77D54 /* tbbExample_ios */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = D31F32331C11796D00A77D54 /* Build configuration list for PBXNativeTarget "tbbExample_ios" */;
+			buildPhases = (
+				D31F32191C11796D00A77D54 /* Sources */,
+				D31F321A1C11796D00A77D54 /* Frameworks */,
+				D31F321B1C11796D00A77D54 /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = tbbExample_ios;
+			productName = tbbExample_ios;
+			productReference = D31F321D1C11796D00A77D54 /* tbbExample_ios.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		84D017481527431F0008A4E0 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				CLASSPREFIX = tbb;
+				LastUpgradeCheck = 0430;
+				TargetAttributes = {
+					D31F321C1C11796D00A77D54 = {
+						CreatedOnToolsVersion = 7.1.1;
+						DevelopmentTeam = 7J8M3RM94C;
+					};
+				};
+			};
+			buildConfigurationList = 84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "fractal" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+				Base,
+			);
+			mainGroup = 84D017461527431F0008A4E0;
+			productRefGroup = 84D017521527431F0008A4E0 /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				84D017501527431F0008A4E0 /* tbbExample */,
+				D31F321C1C11796D00A77D54 /* tbbExample_ios */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		84D0174F1527431F0008A4E0 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				84B8DA7A152CA90100D59B95 /* (null) in Resources */,
+				84B8DA80152CA97B00D59B95 /* InfoPlist.strings in Resources */,
+				84B8DA81152CA97B00D59B95 /* MainMenu.xib in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		D31F321B1C11796D00A77D54 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D31F32991C12E6CA00A77D54 /* libtbbmalloc.dylib in Resources */,
+				D31F32981C12E6C500A77D54 /* libtbb.dylib in Resources */,
+				D31F323A1C117A6200A77D54 /* iOS.storyboard in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		84D0174D1527431F0008A4E0 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				84B8DA77152CA90100D59B95 /* main.m in Sources */,
+				84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */,
+				84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */,
+				84B8DA87152CA99C00D59B95 /* main.cpp in Sources */,
+				84B8DA9A152CADF400D59B95 /* macvideo.cpp in Sources */,
+				84011722152D687A00B07E4D /* fractal.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		D31F32191C11796D00A77D54 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D31F32351C11798E00A77D54 /* main.m in Sources */,
+				D31F323C1C117BE700A77D54 /* fractal.cpp in Sources */,
+				D31F32361C11799200A77D54 /* OpenGLView.m in Sources */,
+				D31F32371C11799500A77D54 /* tbbAppDelegate.m in Sources */,
+				D31F323B1C117BE300A77D54 /* main.cpp in Sources */,
+				D31F32341C11798900A77D54 /* macvideo.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+		84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */ = {
+			isa = PBXVariantGroup;
+			children = (
+				84B8DA7D152CA97B00D59B95 /* en */,
+			);
+			name = InfoPlist.strings;
+			sourceTree = "<group>";
+		};
+		84B8DA7E152CA97B00D59B95 /* MainMenu.xib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				84B8DA7F152CA97B00D59B95 /* en */,
+			);
+			name = MainMenu.xib;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		84D01770152743200008A4E0 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = YES;
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				CLANG_ENABLE_OBJC_ARC = YES;
+				COPY_PHASE_STRIP = NO;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = macosx;
+			};
+			name = Debug;
+		};
+		84D01771152743200008A4E0 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = YES;
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				CLANG_ENABLE_OBJC_ARC = YES;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				SDKROOT = macosx;
+			};
+			name = Release;
+		};
+		84D01773152743200008A4E0 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				CLANG_ENABLE_OBJC_ARC = NO;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
+				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist";
+				LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib\"";
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				RUN_CLANG_STATIC_ANALYZER = YES;
+				USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				VERSION_INFO_BUILDER = "$(TARGET_NAME)";
+				WRAPPER_EXTENSION = app;
+			};
+			name = Debug;
+		};
+		84D01774152743200008A4E0 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				CLANG_ENABLE_OBJC_ARC = NO;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
+				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist";
+				LIBRARY_SEARCH_PATHS = (
+					"\"$(SRCROOT)/../../../../lib\"",
+					"\"$(SRCROOT)\"",
+				);
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				RUN_CLANG_STATIC_ANALYZER = YES;
+				USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				VERSION_INFO_BUILDER = "$(TARGET_NAME)";
+				WRAPPER_EXTENSION = app;
+			};
+			name = Release;
+		};
+		D31F32311C11796D00A77D54 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD)";
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+					"__TBB_IOS=1",
+				);
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist";
+				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path";
+				LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib/ios\"";
+				MACOSX_DEPLOYMENT_TARGET = 10.9;
+				MTL_ENABLE_DEBUG_INFO = YES;
+				PRODUCT_BUNDLE_IDENTIFIER = com.tbb.example;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Debug;
+		};
+		D31F32321C11796D00A77D54 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD)";
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				ENABLE_NS_ASSERTIONS = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_PREPROCESSOR_DEFINITIONS = "__TBB_IOS=1";
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist";
+				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path";
+				LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib/ios\"";
+				MACOSX_DEPLOYMENT_TARGET = 10.9;
+				MTL_ENABLE_DEBUG_INFO = NO;
+				PRODUCT_BUNDLE_IDENTIFIER = com.tbb.example;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "fractal" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				84D01770152743200008A4E0 /* Debug */,
+				84D01771152743200008A4E0 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget "tbbExample" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				84D01773152743200008A4E0 /* Debug */,
+				84D01774152743200008A4E0 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		D31F32331C11796D00A77D54 /* Build configuration list for PBXNativeTarget "tbbExample_ios" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				D31F32311C11796D00A77D54 /* Debug */,
+				D31F32321C11796D00A77D54 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 84D017481527431F0008A4E0 /* Project object */;
+}
diff --git a/examples/task_arena/fractal/xcode/fractal.xcodeproj/xcshareddata/xcschemes/tbbExample.ios.xcscheme b/examples/task_arena/fractal/xcode/fractal.xcodeproj/xcshareddata/xcschemes/tbbExample.ios.xcscheme
new file mode 100644
index 0000000..3ce0e58
--- /dev/null
+++ b/examples/task_arena/fractal/xcode/fractal.xcodeproj/xcshareddata/xcschemes/tbbExample.ios.xcscheme
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "0710"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "D31F321C1C11796D00A77D54"
+               BuildableName = "tbbExample_ios.app"
+               BlueprintName = "tbbExample_ios"
+               ReferencedContainer = "container:fractal.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "D31F321C1C11796D00A77D54"
+            BuildableName = "tbbExample_ios.app"
+            BlueprintName = "tbbExample_ios"
+            ReferencedContainer = "container:fractal.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "D31F321C1C11796D00A77D54"
+            BuildableName = "tbbExample_ios.app"
+            BlueprintName = "tbbExample_ios"
+            ReferencedContainer = "container:fractal.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "D31F321C1C11796D00A77D54"
+            BuildableName = "tbbExample_ios.app"
+            BlueprintName = "tbbExample_ios"
+            ReferencedContainer = "container:fractal.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>
diff --git a/examples/task_priority/fractal/xcode/fractal.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme b/examples/task_arena/fractal/xcode/fractal.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme
similarity index 100%
rename from examples/task_priority/fractal/xcode/fractal.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme
rename to examples/task_arena/fractal/xcode/fractal.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme
diff --git a/examples/task_arena/index.html b/examples/task_arena/index.html
new file mode 100644
index 0000000..582c06b
--- /dev/null
+++ b/examples/task_arena/index.html
@@ -0,0 +1,343 @@
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
+
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
+
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Samples on task_arena feature</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Samples on <code>task_arena</code> feature</h1>
+	</div>
+	
+	<p>
+		This directory has examples of how to use the <code>task_arena</code> feature.
+	</p>
+
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="fractal/readme.html">fractal</a>
+				<dd>The example calculates two classical Mandelbrot fractals with different priorities.
+			</dl>
+		</div>
+	</div>
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information:</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>
+</body>
+</html>
diff --git a/examples/task_group/index.html b/examples/task_group/index.html
index 63e4919..f3bda7a 100644
--- a/examples/task_group/index.html
+++ b/examples/task_group/index.html
@@ -1,23 +1,343 @@
-<HTML>
-<BODY>
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
 
-<H2>Overview</H2>
-This directory has examples of how to use task_groups.
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
 
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="sudoku/index.html">Sudoku</A>
-<DD>Compute all solutions for a Sudoku board.
-</DL>
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Samples on task_group interface</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks<br>Samples on <code>task_group</code> interface</h1>
+	</div>
+	
+	<p>
+		This directory has examples of how to use <code>task_group</code> interface.
+	</p>
 
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="sudoku/readme.html">Sudoku</a>
+				<dd>Compute all solutions for a Sudoku board.
+			</dl>
+		</div>
+	</div>
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information:</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>
+</body>
+</html>
diff --git a/examples/task_group/sudoku/Makefile b/examples/task_group/sudoku/Makefile
index 34b38be..27d9f32 100644
--- a/examples/task_group/sudoku/Makefile
+++ b/examples/task_group/sudoku/Makefile
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # GNU Makefile that builds and runs example.
 run_cmd=
@@ -22,18 +22,18 @@ PROG=sudoku
 ARGS=4 input1 verbose
 PERF_RUN_ARGS=auto input1 silent
 
-# The C++ compiler
+# icpc by default
 ifneq (,$(shell which icc 2>/dev/null))
-CXX=icc
-endif # which icc
+    CXX=icpc
+endif
+
+# autodetect C++11 support
+include ../../common/examples-common.inc
 
 TBBLIB = -ltbb
 TBBLIB_DEBUG = -ltbb_debug
 
 ifneq (,$(filter icc icpc,$(CXX)))
-ifneq (0,$(cpp0x))
-CXX0XFLAGS?=-std=c++0x -D_TBB_CPP0X
-endif
 ifeq ($(offload), mic)
 override CXXFLAGS += -D__TBB_MIC_OFFLOAD=1
 # Replace -ltbb with -tbb in the offload mode
@@ -49,6 +49,8 @@ run_cmd=../../common/android.linux.launcher.sh
 else
 LIBS+= -lrt 
 endif
+else ifeq ($(shell uname), Darwin)
+override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib
 endif
 
 all:	release test
diff --git a/examples/task_group/sudoku/Makefile.windows b/examples/task_group/sudoku/Makefile.windows
index a8990f6..411542b 100644
--- a/examples/task_group/sudoku/Makefile.windows
+++ b/examples/task_group/sudoku/Makefile.windows
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # Common Makefile that builds and runs example.
 
diff --git a/examples/task_group/sudoku/index.html b/examples/task_group/sudoku/index.html
deleted file mode 100644
index d0d582d..0000000
--- a/examples/task_group/sudoku/index.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<HTML>
-<BODY>
-
-<H2>Overview</H2>
-<DL>
-<DT>This directory contains a simple example that finds all solutions to a
-Sudoku board. It uses a straightforward state-space search algorithm
-that exhibits OR-parallelism.  It can be optionally run until it
-obtains just the first solution. The point of the example is to teach
-how to use the task_group interface.
-<DT>The example can be built in the offload version to run on Intel&reg Many Integrated Core (Intel&reg MIC) Architecture based coprocessor (see <A HREF=../../index.html#build_4>build instructions</A>).
-</DL>
-
-<H2>Files</H2>
-<DL>
-<DT><A HREF="sudoku.cpp">sudoku.cpp</A>
-<DD>Driver.
-<DT><A HREF="input1">input1</A>
-<DD>Sample input file with modest number of solutions.
-
-<DT><A HREF="input2">input2</A>
-<DD>Sample input file with small number of solutions.
-
-<DT><A HREF="input3">input3</A>
-<DD>Sample input file with larger number of solutions.
-
-<DT><A HREF="input4">input4</A>
-<DD>Sample input file with very large number of solutions.
-
-<DT><A HREF="Makefile">Makefile</A>
-<DD>Makefile for building example.
-
-</DL>
-
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2010 workspace for building and running the example with the Intel® C++ compiler (Windows* systems only).
-<DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example (OS X* systems only).
-</DL>
-
-<H2>To Build</H2>
-General build directions can be found <A HREF=../../index.html#build>here</A>.
-<P></P>
-
-<H2>Usage</H2>
-<DL>
-
-<DT><TT>sudoku <I>-h</I></TT>
-<DD>Prints the help for command line options
-<DT><TT>sudoku [<I>n-of-threads</I>=value] [<I>filename</I>=value] [<I>verbose</I>] [<I>silent</I>] [<I>find-one</I>]</TT>
-<DT><TT>sudoku [n-of-threads [filename]] [<I>verbose</I>] [<I>silent</I>] [<I>find-one</I>]</TT> 
-<DD><I>n-of-threads</I> is the number of threads to use; a range of the form <I>low</I>[:<I>high</I>], where low and optional high are non-negative integers or 'auto' for the TBB default.<BR>
-    <I>filename</I> is an input filename.<BR>
-    <I>verbose</I> - prints the first solution.<BR>
-    <I>silent</I> - no output except elapsed time.<BR>
-    <I>find-one</I> - stops after finding first solution.<BR>
-
-<DT>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
-<DD>Build a <I>debug</I> version of the example
-    (see the <A HREF=../../index.html#build>build directions</A>).
-    <BR>Run it with a small problem size and the desired number of threads, e.g., <TT>sudoku 4 input2</TT>.
-</DL>
-
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
diff --git a/examples/task_group/sudoku/msvs/sudoku.sln b/examples/task_group/sudoku/msvs/sudoku.sln
index 55eda3e..77e25d4 100644
--- a/examples/task_group/sudoku/msvs/sudoku.sln
+++ b/examples/task_group/sudoku/msvs/sudoku.sln
@@ -1,26 +1,26 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sudoku", "sudoku.vcxproj", "{C931C7A2-074E-4150-9E7A-39A03250411E}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
-		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.ActiveCfg = Debug|Win32
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.Build.0 = Debug|Win32
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.ActiveCfg = Debug|x64
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.Build.0 = Debug|x64
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.ActiveCfg = Release|Win32
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.Build.0 = Release|Win32
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.ActiveCfg = Release|x64
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.Build.0 = Release|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sudoku", "sudoku.vcxproj", "{C931C7A2-074E-4150-9E7A-39A03250411E}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.ActiveCfg = Debug|Win32
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.Build.0 = Debug|Win32
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.ActiveCfg = Debug|x64
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.Build.0 = Debug|x64
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.ActiveCfg = Release|Win32
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.Build.0 = Release|Win32
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.ActiveCfg = Release|x64
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/task_group/sudoku/msvs/sudoku.vcxproj b/examples/task_group/sudoku/msvs/sudoku.vcxproj
index d4e1202..0d9ba9e 100644
--- a/examples/task_group/sudoku/msvs/sudoku.vcxproj
+++ b/examples/task_group/sudoku/msvs/sudoku.vcxproj
@@ -1,197 +1,201 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>sudoku</ProjectName>
-    <ProjectGuid>{C931C7A2-074E-4150-9E7A-39A03250411E}</ProjectGuid>
-    <RootNamespace>sudoku</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <Import Project="..\..\..\common\toolset.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\sudoku.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="..\index.html" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>sudoku</ProjectName>
+    <ProjectGuid>{C931C7A2-074E-4150-9E7A-39A03250411E}</ProjectGuid>
+    <RootNamespace>sudoku</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\sudoku.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\readme.html" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/examples/task_group/sudoku/readme.html b/examples/task_group/sudoku/readme.html
new file mode 100644
index 0000000..fdb0f56
--- /dev/null
+++ b/examples/task_group/sudoku/readme.html
@@ -0,0 +1,417 @@
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
+
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
+
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Sudoku sample</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Sudoku sample</h1>
+	</div>
+	
+	<p>
+		This directory contains a simple example that finds all solutions to a
+		Sudoku board.
+	<br><br>
+		It uses a straightforward state-space search algorithm
+		that exhibits OR-parallelism.  It can be optionally run until it
+		obtains just the first solution. The point of the example is to teach
+		how to use the task_group interface.
+	<br><br>
+		The example can be built in the offload version to run on Intel® Many Integrated Core (Intel® MIC) Architecture based coprocessor (see <a href="../../index.html">build instructions</a>).
+	</p>
+
+	<div class="changes">
+		<div class="h3-alike">System Requirements</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				For the most up to date system requirements, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
+			</p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Files</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="sudoku.cpp">sudoku.cpp</a>
+				<dd>Driver.
+				<dt><a href="input1">input1</a>
+				<dd>Sample input file with modest number of solutions.
+				<dt><a href="input2">input2</a>
+				<dd>Sample input file with small number of solutions.
+				<dt><a href="input3">input3</a>
+				<dd>Sample input file with larger number of solutions.
+				<dt><a href="input4">input4</a>
+				<dd>Sample input file with very large number of solutions.
+				<dt><a href="Makefile">Makefile</a>
+				<dd>Makefile for building the example.
+			</dl>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="msvs/">msvs</a>
+				<dd>Contains Microsoft* Visual Studio* workspace for building and running the example with the Intel® C++ Compiler (Windows* systems only).
+				<dt><a href="xcode/">xcode</a>
+				<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).
+			</dl>
+			<p>For information about the minimum supported version of IDE, see <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a></p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Build instructions</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>General build directions can be found <a href="../../index.html">here</a>.</p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Usage</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><tt>sudoku <i>-h</i></tt>
+				<dd>Prints the help for command line options
+				<dt><tt>sudoku [<i>n-of-threads</i>=value] [<i>filename</i>=value] [<i>verbose</i>] [<i>silent</i>] [<i>find-one</i>]</tt>
+				<dt><tt>sudoku [n-of-threads [filename]] [<i>verbose</i>] [<i>silent</i>] [<i>find-one</i>]</tt> 
+				<dd><i>n-of-threads</i> is the number of threads to use; a range of the form <i>low</i>[:<i>high</i>], where low and optional high are non-negative integers or 'auto' for the TBB default.<br>
+					<i>filename</i> is an input filename.<br>
+					<i>verbose</i> - prints the first solution.<br>
+					<i>silent</i> - no output except elapsed time.<br>
+					<i>find-one</i> - stops after finding first solution.<br>
+				<dt>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
+				<dd>Build a <i>debug</i> version of the example
+					(see the <a href="../../index.html">build instructions</a>).
+					<br>Run it with a small problem size and the desired number of threads, e.g., <tt>sudoku 4 input2</tt>.
+			</dl>
+		</div>
+	</div>
+	
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>	
+	
+</body>
+</html>
diff --git a/examples/task_group/sudoku/sudoku.cpp b/examples/task_group/sudoku/sudoku.cpp
index 0da8620..6b3dd4d 100644
--- a/examples/task_group/sudoku/sudoku.cpp
+++ b/examples/task_group/sudoku/sudoku.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "../../common/utility/utility.h"
@@ -35,14 +35,6 @@
 
 #pragma warning(disable: 4996)
 
-#if __INTEL_COMPILER
-#define __TBB_LAMBDAS_PRESENT ( _TBB_CPP0X && __INTEL_COMPILER > 1100 )
-#elif __GNUC__
-#define __TBB_LAMBDAS_PRESENT ( _TBB_CPP0X && __TBB_GCC_VERSION >= 40500 )
-#elif _MSC_VER
-#define __TBB_LAMBDAS_PRESENT ( _MSC_VER>=1600 )
-#endif
-
 const unsigned BOARD_SIZE=81;
 const unsigned BOARD_DIM=9;
 
@@ -201,7 +193,7 @@ bool examine_potentials(board_element *b, bool *progress) {
     return valid_board(b);
 }
 
-#if !__TBB_LAMBDAS_PRESENT
+#if !__TBB_CPP11_LAMBDAS_PRESENT
 void partial_solve(board_element *b, unsigned first_potential_set);
 
 class PartialSolveBoard {
@@ -239,7 +231,7 @@ void partial_solve(board_element *b, unsigned first_potential_set) {
                 new_board = (board_element *)malloc(BOARD_SIZE*sizeof(board_element));
                 copy_board(b, new_board);
                 new_board[first_potential_set].solved_element = potential;
-#if __TBB_LAMBDAS_PRESENT
+#if __TBB_CPP11_LAMBDAS_PRESENT
                 g->run( [=]{ partial_solve(new_board, first_potential_set); } );
 #else
                 g->run(PartialSolveBoard(new_board, first_potential_set));
diff --git a/examples/task_priority/fractal/Makefile b/examples/task_priority/fractal/Makefile
deleted file mode 100644
index 953dae5..0000000
--- a/examples/task_priority/fractal/Makefile
+++ /dev/null
@@ -1,85 +0,0 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-#
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-#
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
-
-# GNU Makefile that builds and runs example.
-NAME=Fractal
-ARGS=auto
-PERF_RUN_ARGS=auto 1 1000000 silent
-LIGHT_ARGS=auto 1 1000
-
-# The C++ compiler
-ifneq (,$(shell which icc 2>/dev/null))
-CXX=icc
-endif # icc
-
-ifeq ($(shell uname), Linux)
-LIBS+= -lrt 
-endif
-
-include ../../common/gui/Makefile.gmake
-
-SOURCES= ../../common/gui/$(UI)video.cpp fractal.cpp main.cpp
-
-override CXXFLAGS += $(UI_CXXFLAGS)
-
-all:	release test
-
-resources:
-ifeq ($(UI),mac)
-	mkdir -p $(APPRES)/en.lproj $(NAME).app/Contents/MacOS
-	cp ../../common/gui/xcode/tbbExample/Info.plist $(NAME).app/Contents
-	cp ../../common/gui/xcode/tbbExample/PkgInfo $(NAME).app/Contents
-	cp ../../common/gui/xcode/tbbExample/en.lproj/* $(APPRES)/en.lproj
-endif # OS X*
-
-release: $(SOURCES) resources
-ifeq ($(UI),mac)
-	$(CXX_UI) -O2 -DNDEBUG $(CXXFLAGS) -c $(MACUISOURCES)
-endif # OS X*
-	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) $(MACUIOBJS) -ltbb $(LIBS)
-
-debug: resources
-ifeq ($(UI),mac)
-	$(CXX_UI) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -c $(MACUISOURCES)
-endif # OS X*
-	$(CXX) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) $(MACUIOBJS) -ltbb_debug $(LIBS)
-
-clean:
-	$(RM) $(EXE) *.o *.d
-ifeq ($(UI),mac)
-	rm -rf $(NAME).app
-endif
-
-test:
-ifeq ($(UI),mac)
-	export DYLD_LIBRARY_PATH="$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)"; $(run_cmd) ./$(EXE) $(ARGS)
-else
-	$(run_cmd) ./$(EXE) $(ARGS)
-endif
-
-light_test:
-ifeq ($(UI),mac)
-	export DYLD_LIBRARY_PATH="$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)"; $(run_cmd) ./$(EXE) $(LIGHT_ARGS)
-else
-	$(run_cmd) ./$(EXE) $(LIGHT_ARGS)
-endif
-
-perf_build: release
-
-perf_run:
-	$(run_cmd) ./$(EXE) $(PERF_RUN_ARGS)
diff --git a/examples/task_priority/fractal/Makefile.windows b/examples/task_priority/fractal/Makefile.windows
deleted file mode 100644
index a443920..0000000
--- a/examples/task_priority/fractal/Makefile.windows
+++ /dev/null
@@ -1,66 +0,0 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-#
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-#
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
-
-# Common Makefile that builds and runs example.
-
-# Just specify your program basename
-PROG=Fractal
-ARGS=auto
-PERF_RUN_ARGS=auto 1 1000000 silent
-LIGHT_ARGS=auto 1 1000
-
-# Trying to find if icl.exe is set
-CXX1 = $(TBB_CXX)-
-CXX2 = $(CXX1:icl.exe-=icl.exe)
-CXX  = $(CXX2:-=cl.exe)
-# Uncomment one of next lines to choose user interface type (console, gdiplus, direct draw)
-#UI = con
-UI = gdi
-#UI = dd
-
-# Machine architecture, auto-detected from TBB_TARGET_ARCH by default
-# Use XARCH variable to change it. See index.html for more information
-ARCH0 = $(TBB_TARGET_ARCH)-
-ARCH1 = $(ARCH0:ia32-=x86)
-ARCH2 = $(ARCH1:intel64-=AMD64)
-XARCH = $(ARCH2:-=x86)
-
-MAKEINC = ../../common/gui/Makefile.win
-SOURCES = fractal.cpp main.cpp 
-
-all: release test
-release: compiler_check
-	@$(MAKE) -f $(MAKEINC) UI=$(UI) CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" LFLAGS="$(LDFLAGS) tbb.lib $(LIBS)" XARCH=$(XARCH) RCNAME=gui SOURCE="$(SOURCES)" EXE=$(PROG).exe build_one
-debug: compiler_check
-	@$(MAKE) -f $(MAKEINC) UI=$(UI) DEBUG=_debug CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS) /D TBB_USE_DEBUG" LFLAGS="$(LDFLAGS) tbb_debug.lib $(LIBS)" XARCH=$(XARCH) RCNAME=gui SOURCE="$(SOURCES)" EXE=$(PROG).exe build_one
-clean:
-	@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest msvs\gui.res
-test:
-	$(PROG) $(ARGS)
-light_test:
-	$(PROG) $(LIGHT_ARGS)
-
-perf_build: compiler_check
-	@$(MAKE) -f $(MAKEINC) UI=con CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" LFLAGS="$(LDFLAGS) tbb.lib $(LIBS)" XARCH=$(XARCH) RCNAME=gui SOURCE="$(SOURCES) " EXE=$(PROG).exe build_one
-perf_run:
-	$(PROG) $(PERF_RUN_ARGS)
-
-compiler_check:
-	@echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1  || echo "$(CXX) command not found. Check if CXX=$(CXX) is set properly"
-	@cmd.exe /C del compiler_test
-
diff --git a/examples/task_priority/fractal/fractal.cpp b/examples/task_priority/fractal/fractal.cpp
deleted file mode 100644
index 8f20d18..0000000
--- a/examples/task_priority/fractal/fractal.cpp
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
-*/
-
-#include "fractal.h"
-
-#include "tbb/parallel_for.h"
-#include "tbb/blocked_range2d.h"
-#include "tbb/task_scheduler_init.h"
-#include "tbb/tick_count.h"
-#if TBB_IMPLEMENT_CPP0X
-#include "tbb/compat/thread"
-#else
-#include <thread>
-#endif
-
-#include <math.h>
-#include <stdio.h>
-
-video *v;
-extern bool silent;
-extern bool schedule_auto;
-extern int grain_size;
-
-color_t fractal::calc_one_pixel(int x0, int y0) {
-    int iter;
-    double fx0, fy0, xtemp, x, y, mu;
-
-    color_t color;
-
-    fx0 = (double)x0 - (double) size_x / 2.0;
-    fy0 = (double)y0 - (double) size_y / 2.0;
-    fx0 = fx0 / magn + cx;
-    fy0 = fy0 / magn + cy;
-
-    iter = 0; x = 0; y = 0;
-
-    while (((x*x + y*y) <= 4) && (iter < max_iterations)) { 
-        xtemp = x*x - y*y + fx0;
-        y = 2*x*y + fy0;
-        x = xtemp;
-        iter++;
-    }
-
-    if (iter == max_iterations) {
-        // point corresponds to the mandelbrot set
-        color = v->get_color(255, 255, 255);
-        return color;
-    }
-
-    // compute again but with exponent calculation at each iteration
-    // it's all for coloring point outside the mandelbrot set
-    iter = 0; x = 0; y = 0;
-    mu = 0;
-    while (((x*x + y*y) <= 4) && (iter < max_iterations)) { 
-        xtemp = x*x - y*y + fx0;
-        y = 2*x*y + fy0;
-        x = xtemp;
-        mu += exp(-sqrt(x*x+y*y));
-        iter++;
-    }
-
-    int b = (int)(256*mu);
-    int g = (b/8);
-    int r = (g/16);
-
-    b = b>255 ? 255 : b;
-    g = g>255 ? 255 : g;
-    r = r>255 ? 255 : r;
-
-    color = v->get_color(r, g, b);
-    return color;
-}
-
-void fractal::clear() {
-    drawing_area area( off_x, off_y, size_x, size_y, dm) ;
-
-    // fill the rendering area with black color
-    for (int y=0; y<size_y; ++y) {
-        area.set_pos( 0, y );
-        for (int x=0; x<size_x; ++x) {
-            area.put_pixel( v->get_color(0, 0, 0) );
-        }
-    }
-}
-
-void fractal::draw_border( bool is_active ) {
-    color_t color = is_active ? v->get_color(0, 255, 0) // green color
-                                : v->get_color(96, 128, 96); // green-gray color
-
-    // top border
-    drawing_area area0( off_x-1, off_y-1, size_x+2, 1, dm );
-    for (int i=-1; i<size_x+1; ++i)
-        area0.put_pixel(color);
-    // bottom border
-    drawing_area area1( off_x-1, off_y+size_y, size_x+2, 1, dm );
-    for (int i=-1; i<size_x+1; ++i)
-        area1.put_pixel(color);
-    // left border
-    drawing_area area2( off_x-1, off_y, 1, size_y+2, dm );
-    for (int i=0; i<size_y; ++i)
-        area2.set_pixel(0, i, color);
-    // right border
-    drawing_area area3( size_x+off_x, off_y, 1, size_y+2, dm );
-    for (int i=0; i<size_y; ++i)
-        area3.set_pixel(0, i, color);
-}
-
-void fractal::render_rect( int x0, int y0, int x1, int y1 ) {
-    // render the specified rectangle area
-    drawing_area area(off_x+x0, off_y+y0, x1-x0, y1-y0, dm);
-    for ( int y=y0; y<y1; ++y ) {
-        area.set_pos( 0, y-y0 );
-        for ( int x=x0; x<x1; ++x ) {
-            area.put_pixel( calc_one_pixel( x, y ) );
-        }
-    }
-}
-
-class fractal_body {
-    fractal &f;
-public:
-    void operator()( tbb::blocked_range2d<int> &r ) const {
-        if ( v->next_frame() )
-            f.render_rect( r.cols().begin(), r.rows().begin(), r.cols().end(), r.rows().end() );
-    }
-
-    fractal_body( fractal &f ) : f(f) {
-    }
-};
-
-void fractal::render( tbb::task_group_context &context ) {
-    // run parallel_for that process the fractal area
-    if( schedule_auto )
-        tbb::parallel_for( tbb::blocked_range2d<int>(0, size_y, grain_size, 0, size_x, grain_size ),
-                fractal_body(*this), tbb::auto_partitioner(), context);
-    else
-        tbb::parallel_for( tbb::blocked_range2d<int>(0, size_y, grain_size, 0, size_x, grain_size ),
-                fractal_body(*this), tbb::simple_partitioner(), context);
-}
-
-void fractal::run( tbb::task_group_context &context ) {
-    clear();
-    render( context );
-}
-
-bool fractal::check_point( int x, int y ) {
-    return x >= off_x && x <= off_x+size_x && 
-            y >= off_y && y <= off_y+size_y;
-}
-
-void fractal_group::calc_fractal( int num ) {
-    // calculate the fractal
-    fractal &f = num ? f1 : f0;
-
-    tbb::tick_count t0 = tbb::tick_count::now();
-    while ( v->next_frame() && num_frames[num] != 0 ) {
-        f.run( context[num] );
-        if ( num_frames[num]>0 ) num_frames[num] -= 1;
-    }
-    tbb::tick_count t1 = tbb::tick_count::now();
-
-    if ( !silent ) {
-        printf("  %s fractal finished. Time: %g\n", num ? "Second" : "First", (t1-t0).seconds());
-    }
-}
-
-void fg_thread_func(fractal_group *fg) {
-    // initialize the task scheduler for the second thread
-    tbb::task_scheduler_init init( fg->get_num_threads() );
-    // calculate the second fractal
-    fg->calc_fractal( 1 );
-}
-
-void fractal_group::set_priorities() {
-    // set the high priority for the active area and the normal priority for another area
-    context[active].set_priority( tbb::priority_high );
-    context[active^1].set_priority( tbb::priority_normal );
-}
-
-void fractal_group::switch_priorities( int new_active ) {
-    if( new_active!=-1 ) active = new_active;
-    else                 active = 1-active; // assumes 'active' is only 0 or 1
-    set_priorities();
-    draw_borders();
-}
-
-void fractal_group::set_num_frames_at_least(int n) {
-    if ( num_frames[0]<n ) num_frames[0] = n;
-    if ( num_frames[1]<n ) num_frames[1] = n;
-}
-
-void fractal_group::run( bool create_second_fractal ) {
-    // initialize task scheduler
-    tbb::task_scheduler_init init( num_threads );
-
-    // create contexts to manage fractal priorities
-    context = new tbb::task_group_context[2];
-
-    set_priorities();
-    draw_borders();
-
-    // the second fractal is calculating on separated thread
-    std::thread *fg_thread = 0;
-    if ( create_second_fractal ) fg_thread = new std::thread( fg_thread_func, this );
-
-    // calculate the first fractal
-    calc_fractal( 0 );
-
-    if ( fg_thread ) {
-        // wait for second fractal
-        fg_thread->join();
-        delete fg_thread;
-    }
-
-    delete[] context;
-}
-
-void fractal_group::draw_borders() {
-    f0.draw_border( active==0 );
-    f1.draw_border( active==1 );
-}
-
-fractal_group::fractal_group( const drawing_memory &_dm, int _num_threads, int _max_iterations, int _num_frames ) : f0(_dm), f1(_dm), num_threads(_num_threads) {
-    // set rendering areas
-    f0.size_x = f1.size_x = _dm.sizex/2-4;
-    f0.size_y = f1.size_y = _dm.sizey-4;
-    f0.off_x = f0.off_y = f1.off_y = 2;
-    f1.off_x = f0.size_x+4+2;
-
-    // set fractals parameters
-    f0.cx = -0.6f; f0.cy = 0.0f; f0.magn = 200.0f;
-    f1.cx = -0.6f; f1.cy = 0.0f; f1.magn = 200.0f;
-    f0.max_iterations = f1.max_iterations = _max_iterations;
-
-    // initially the first fractal is active
-    active = 0;
-
-    num_frames[0] = num_frames[1] = _num_frames;
-}
-
-void fractal_group::mouse_click(int x, int y) {
-    // assumption that the point is not inside any fractal area
-    int new_active = -1;
-
-    if ( f0.check_point( x, y ) ) {
-        // the point is inside the first fractal area
-        new_active = 0;
-    } else if ( f1.check_point( x, y ) ) {
-        // the point is inside the second fractal area
-        new_active = 1;
-    }
-
-    if ( new_active != -1 && new_active != active ) {
-        switch_priorities( new_active );
-    }
-}
diff --git a/examples/task_priority/fractal/fractal.h b/examples/task_priority/fractal/fractal.h
deleted file mode 100644
index 92b3d82..0000000
--- a/examples/task_priority/fractal/fractal.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
-*/
-
-#ifndef FRACTAL_H_
-#define FRACTAL_H_
-
-#include "../../common/gui/video.h"
-
-#include "tbb/task.h"
-#include "tbb/task_scheduler_init.h"
-#include "tbb/atomic.h"
-
-//! Fractal class
-class fractal {
-    //! Left corner of the fractal area
-    int off_x, off_y;
-    //! Size of the fractal area
-    int size_x, size_y;
-
-    //! Fractal properties
-    float cx, cy;
-    float magn;
-    int max_iterations;
-
-    //! Drawing memory object for rendering
-    const drawing_memory &dm;
-
-    //! One pixel calculation routine
-    color_t calc_one_pixel(int x, int y);
-    //! Clears the fractal area
-    void clear();
-    //! Draws the border around the fractal area
-    void draw_border( bool is_active );
-    //! Renders the fractal
-    void render( tbb::task_group_context &context );
-    //! Check if the point is inside the fractal area
-    bool check_point( int x, int y);
-
-public:
-    //! Constructor
-    fractal( const drawing_memory &dm ) : dm(dm) {
-#if _MSC_VER && _WIN64 && !__INTEL_COMPILER
-        // Workaround for MSVC x64 compiler issue
-        volatile int i=0;
-#endif
-    }
-    //! Runs the fractal calculation
-    void run( tbb::task_group_context &context );
-    //! Renders the fractal rectangular area
-    void render_rect(int x0, int y0, int x1, int y1);
-
-    friend class fractal_group;
-};
-
-//! The group of fractals
-class fractal_group {
-    //! Fractals defenition
-    fractal f0, f1;
-    //! Number of frames to calculate
-    tbb::atomic<int> num_frames[2];
-    //! Task group contexts to manage prioroties
-    tbb::task_group_context *context;
-
-    //! Border type enumeration
-    enum BORDER_TYPE {
-        BORDER_INACTIVE = 0,
-        BORDER_ACTIVE
-    };
-
-    //! The number of the threads
-    int num_threads;
-    //! The active (high priority) fractal number
-    int active;
-
-    //! Draws the borders around the fractals
-    void draw_borders();
-    //! Sets priorities for fractals calculations
-    void set_priorities();
-
-public:
-    //! Constructor
-    fractal_group( const drawing_memory &_dm, int num_threads = tbb::task_scheduler_init::automatic, int max_iterations = 100000, int num_frames = 1);
-    //! Run calculation
-    void run( bool create_second_fractal=true );
-    //! Mouse event handler
-    void mouse_click(int x, int y);
-    //! Fractal calculation routine
-    void calc_fractal( int num );
-    //! Get number of threads
-    int get_num_threads() const { return num_threads; }
-    //! Reset the number of frames to be not less than the given value
-    void set_num_frames_at_least(int n);
-    //! Switches the priorities of two fractals
-    void switch_priorities( int new_active=-1 );
-};
-
-#endif /* FRACTAL_H_ */
diff --git a/examples/task_priority/fractal/fractal_video.h b/examples/task_priority/fractal/fractal_video.h
deleted file mode 100644
index 02eda48..0000000
--- a/examples/task_priority/fractal/fractal_video.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
-*/
-
-#ifndef FRACTAL_VIDEO_H_
-#define FRACTAL_VIDEO_H_
-
-#include "../../common/gui/video.h"
-#include "fractal.h"
-
-extern video *v;
-extern bool single;
-
-class fractal_video : public video
-{
-    fractal_group *fg;
-
-private:
-    void on_mouse( int x, int y, int key ) {
-        if( key == 1 ) {
-            if ( fg ) {
-                fg->set_num_frames_at_least(20);
-                fg->mouse_click( x, y );
-            }
-        }
-    }
-
-    void on_key( int key ) {
-        switch ( key&0xff ) {
-        case 27:
-            running = false; break;
-        case ' ': // space
-            if( fg ) fg->switch_priorities();
-        default:
-            if( fg ) fg->set_num_frames_at_least(20);
-        }
-    }
-
-    void on_process() {
-        if ( fg ) {
-            fg->run( !single );
-        }
-    }
-
-public:
-    fractal_video() :fg(0) {
-        title = "Dynamic Priorities in TBB: Fractal Example";
-        v = this;
-    }
-
-    void set_fractal_group( fractal_group &_fg ) {
-        fg = &_fg;
-    }
-};
-
-#endif /* FRACTAL_VIDEO_H_ */
diff --git a/examples/task_priority/fractal/index.html b/examples/task_priority/fractal/index.html
deleted file mode 100644
index 2c3583d..0000000
--- a/examples/task_priority/fractal/index.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<HTML>
-<BODY>
-
-<H2>Overview</H2>
-The example calculates two classical Mandelbrot fractals with different priorities. 
-The application window is divided into two areas where fractals are rendered. With mouse click on an area the user can change the priority of the calculating fractal. In the clicked area the fractal priority is changed to be "high" and the priority of the other fractal is changed to "normal".
-The example also has the console mode but in this mode the priorities could not be changed during execution.
-
-
-<H2>Files</H2>
-<DL>
-<DT><A HREF="main.cpp">main.cpp</A>
-<DD>Main program which parses command line options and runs the fractals calculation in GUI or Console mode.
-<DT><A HREF="fractal.h">fractal.h</A>
-<DD>Interfaces of fractal and fractal_group classes.
-<DT><A HREF="fractal.cpp">fractal.cpp</A>
-<DD>Implementations of fractal and fractal_group classes.
-<DT><A HREF="fractal_video.h">fractal_video.h</A>
-<DD>GUI mode support interface.
-<DT><A HREF="Makefile">Makefile</A>
-<DD>Makefile for building example.
-</DL>
-
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2010 workspace for building and running the example (Windows* systems only).
-<DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example (OS X* systems only).
-</DL>
-
-<H2>To Build</H2>
-General build directions can be found <A HREF=../../index.html#build>here</A>.
-
-<H2>Usage</H2>
-<DL>
-<DT><TT>fractal <I>-h</I></TT>
-<DD>Prints the help for command line options
-<DT><TT>fractal [<I>n-of-threads=value</I>] [<I>n-of-frames=value</I>] [<I>max-of-iterations=value</I>] [<I>grain-size=value</I>] [<I>silent</I>] [<I>single</I>]</TT>
-<DT><TT>fractal [<I>n-of-threads</I> [<I>n-of-frames</I> [<I>max-of-iterations</I> [<I>grain-size</I>]]]] [<I>silent</I>] [<I>single</I>]</TT> 
-<DD><I>n-of-threads</I> is the number of threads to use; a range of the form <I>low</I>[:<I>high</I>], where low and optional high are non-negative integers or 'auto' for the TBB default.<BR>
-    <I>n-of-frames</I> is a number of frames the example processes internally.<BR>
-    <I>max-of-iterations</I> is a maximum number of the fractal iterations.<BR>
-    <I>grain-size</I> is an optional grain size, must be a positive integer. <BR>
-    <I>use-auto-partitioner</I> - use tbb::auto_partitioner.<BR>
-    <I>silent</I> - no output except elapsed time.<BR>
-    <I>single</I> - process only one fractal.<BR>
-
-<DT>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
-<DD>Build a <I>debug</I> version of the example
-    (see the <A HREF=../../index.html#build>build directions</A>).
-    <BR>Run it with a small fractal iterations number and the desired number of threads, e.g., <TT>fractal 4 1 10000</TT>.
-</DL>
-
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
-
diff --git a/examples/task_priority/fractal/main.cpp b/examples/task_priority/fractal/main.cpp
deleted file mode 100644
index 7fa5881..0000000
--- a/examples/task_priority/fractal/main.cpp
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
-*/
-
-#define VIDEO_WINMAIN_ARGS
-
-#include <stdio.h>
-#include <iostream>
-
-#include "fractal.h"
-#include "fractal_video.h"
-
-#include "tbb/tick_count.h"
-#include "tbb/task_scheduler_init.h"
-
-#include "../../common/utility/utility.h"
-
-bool silent = false;
-bool single = false;
-bool schedule_auto = false;
-int grain_size = 8;
-
-int main(int argc, char *argv[])
-{
-    try{
-        tbb::tick_count mainStartTime = tbb::tick_count::now();
-
-        // It is used for console mode for test with different number of threads and also has
-        // meaning for GUI: threads.first  - use separate event/updating loop thread (>0) or not (0).
-        //                  threads.second - initialization value for scheduler
-        utility::thread_number_range threads( tbb::task_scheduler_init::default_num_threads );
-        int num_frames = -1;
-        int max_iterations = 1000000;
-
-        // command line parsing
-        utility::parse_cli_arguments(argc,argv,
-            utility::cli_argument_pack()
-            //"-h" option for displaying help is present implicitly
-            .positional_arg(threads,"n-of-threads",utility::thread_number_range_desc)
-            .positional_arg(num_frames,"n-of-frames","number of frames the example processes internally")
-            .positional_arg(max_iterations,"max-of-iterations","maximum number of the fractal iterations")
-            .positional_arg(grain_size,"grain-size","the grain size value")
-            .arg(schedule_auto, "use-auto-partitioner", "use tbb::auto_partitioner")
-            .arg(silent, "silent", "no output except elapsed time")
-            .arg(single, "single", "process only one fractal")
-        );
-
-        fractal_video video;
-
-        // video layer init
-        if ( video.init_window(1024, 512) ) {
-            video.calc_fps = false;
-            video.threaded = threads.first > 0;
-            // initialize fractal group
-            fractal_group fg( video.get_drawing_memory(), threads.last, max_iterations, num_frames );
-            video.set_fractal_group( fg );
-            // main loop
-            video.main_loop();
-        }
-        else if ( video.init_console() ) {
-            // in console mode we always have limited number of frames
-            num_frames = num_frames<0 ? 1 : num_frames;
-            for(int p = threads.first;  p <= threads.last; p = threads.step(p) ) {
-                if ( !silent ) printf("Threads = %d\n", p);
-                fractal_group fg( video.get_drawing_memory(), p, max_iterations, num_frames );
-                fg.run( !single );
-            }
-        }
-        video.terminate();
-        utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds());
-        return 0;
-    } catch ( std::exception& e ) {
-        std::cerr<<"error occurred. error text is :\"" <<e.what()<<"\"\n";
-        return 1;
-    }
-}
diff --git a/examples/task_priority/fractal/msvs/fractal.sln b/examples/task_priority/fractal/msvs/fractal.sln
deleted file mode 100644
index 12e8882..0000000
--- a/examples/task_priority/fractal/msvs/fractal.sln
+++ /dev/null
@@ -1,38 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fractal", "fractal.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A2527}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		_GDIRelease|Win32 = _GDIRelease|Win32
-		_GDIRelease|x64 = _GDIRelease|x64
-		DDDebug|Win32 = DDDebug|Win32
-		DDDebug|x64 = DDDebug|x64
-		DDRelease|Win32 = DDRelease|Win32
-		DDRelease|x64 = DDRelease|x64
-		GDIDebug|Win32 = GDIDebug|Win32
-		GDIDebug|x64 = GDIDebug|x64
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|Win32.ActiveCfg = GDIRelease|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|Win32.Build.0 = GDIRelease|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|x64.ActiveCfg = GDIRelease|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|x64.Build.0 = GDIRelease|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|Win32.ActiveCfg = DDDebug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|Win32.Build.0 = DDDebug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|x64.ActiveCfg = DDDebug|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|x64.Build.0 = DDDebug|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|Win32.ActiveCfg = DDRelease|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|Win32.Build.0 = DDRelease|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|x64.ActiveCfg = DDRelease|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|x64.Build.0 = DDRelease|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|Win32.ActiveCfg = GDIDebug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|Win32.Build.0 = GDIDebug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|x64.ActiveCfg = GDIDebug|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|x64.Build.0 = GDIDebug|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
diff --git a/examples/task_priority/fractal/msvs/fractal.vcxproj b/examples/task_priority/fractal/msvs/fractal.vcxproj
deleted file mode 100644
index 6f855c9..0000000
--- a/examples/task_priority/fractal/msvs/fractal.vcxproj
+++ /dev/null
@@ -1,442 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="GDIDebug|Win32">
-      <Configuration>GDIDebug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="GDIDebug|x64">
-      <Configuration>GDIDebug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="GDIRelease|Win32">
-      <Configuration>GDIRelease</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="GDIRelease|x64">
-      <Configuration>GDIRelease</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DDDebug|Win32">
-      <Configuration>DDDebug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DDDebug|x64">
-      <Configuration>DDDebug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DDRelease|Win32">
-      <Configuration>DDRelease</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DDRelease|x64">
-      <Configuration>DDRelease</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>fractal</ProjectName>
-    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A2527}</ProjectGuid>
-    <RootNamespace>fractal</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <Import Project="..\..\..\common\toolset.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='GDIRelease|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='GDIDebug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='GDIRelease|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='GDIDebug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='GDIRelease|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='GDIDebug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='GDIRelease|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='GDIDebug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='GDIDebug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='GDIDebug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='GDIDebug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='GDIDebug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='GDIDebug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='GDIDebug|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='GDIRelease|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='GDIRelease|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='GDIRelease|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='GDIRelease|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='GDIRelease|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='GDIRelease|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">false</LinkIncremental>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='GDIDebug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='GDIDebug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='GDIDebug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='GDIDebug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='GDIDebug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='GDIDebug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='GDIRelease|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='GDIRelease|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='GDIRelease|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='GDIRelease|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='GDIRelease|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='GDIRelease|x64'" />
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='GDIDebug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='GDIDebug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='GDIRelease|Win32'">
-    <ClCompile>
-      <Optimization>MaxSpeed</Optimization>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='GDIRelease|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>MaxSpeed</Optimization>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">
-    <PreBuildEvent>
-      <Command>..\..\..\common\gui\dxcheck.bat</Command>
-    </PreBuildEvent>
-    <ClCompile>
-      <Optimization>MaxSpeed</Optimization>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">
-    <PreBuildEvent>
-      <Command>..\..\..\common\gui\dxcheck.bat</Command>
-    </PreBuildEvent>
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>MaxSpeed</Optimization>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">
-    <PreBuildEvent>
-      <Command>..\..\..\common\gui\dxcheck.bat</Command>
-    </PreBuildEvent>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">
-    <PreBuildEvent>
-      <Command>..\..\..\common\gui\dxcheck.bat</Command>
-    </PreBuildEvent>
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\fractal.cpp" />
-    <ClCompile Include="..\main.cpp" />
-    <ClCompile Include="..\..\..\common\gui\d2dvideo.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='GDIDebug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='GDIDebug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='GDIRelease|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='GDIRelease|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\..\common\gui\gdivideo.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DDDebug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DDDebug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DDRelease|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DDRelease|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\fractal.h" />
-    <ClInclude Include="..\fractal_video.h" />
-    <ClInclude Include="resource.h" />
-    <ClInclude Include="..\..\..\common\gui\video.h" />
-    <ClInclude Include="..\..\..\common\gui\winvideo.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="gui.ico" />
-    <None Include="small.ico" />
-    <None Include="..\index.html" />
-  </ItemGroup>
-  <ItemGroup>
-    <ResourceCompile Include="gui.rc" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
diff --git a/examples/task_priority/fractal/msvs/resource.h b/examples/task_priority/fractal/msvs/resource.h
deleted file mode 100644
index ef7ac10..0000000
--- a/examples/task_priority/fractal/msvs/resource.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#define IDC_MYICON                      2
-#define IDD_GUI                         102
-#define IDS_APP_TITLE                   103
-#define IDI_GUI                         107
-#define IDI_SMALL                       108
-#define IDC_GUI                         109
-#define IDR_MAINFRAME                   128
-#define IDC_STATIC                      -1
diff --git a/examples/task_priority/fractal/xcode/fractal.xcodeproj/project.pbxproj b/examples/task_priority/fractal/xcode/fractal.xcodeproj/project.pbxproj
deleted file mode 100644
index df9408d..0000000
--- a/examples/task_priority/fractal/xcode/fractal.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,349 +0,0 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 46;
-	objects = {
-
-/* Begin PBXBuildFile section */
-		84011722152D687A00B07E4D /* fractal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84011720152D687A00B07E4D /* fractal.cpp */; };
-		84B8DA19152C9AC600D59B95 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 84B8DA13152C9AC600D59B95 /* libtbb.dylib */; };
-		84B8DA77152CA90100D59B95 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA6F152CA90100D59B95 /* main.m */; };
-		84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; };
-		84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; };
-		84B8DA7A152CA90100D59B95 /* (null) in Resources */ = {isa = PBXBuildFile; };
-		84B8DA80152CA97B00D59B95 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */; };
-		84B8DA81152CA97B00D59B95 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7E152CA97B00D59B95 /* MainMenu.xib */; };
-		84B8DA87152CA99C00D59B95 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA82152CA99C00D59B95 /* main.cpp */; };
-		84B8DA9A152CADF400D59B95 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; };
-		84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D017551527431F0008A4E0 /* Cocoa.framework */; };
-		84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D01775152744BD0008A4E0 /* OpenGL.framework */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXFileReference section */
-		8401171F152D687A00B07E4D /* fractal_video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fractal_video.h; path = ../fractal_video.h; sourceTree = "<group>"; };
-		84011720152D687A00B07E4D /* fractal.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fractal.cpp; path = ../fractal.cpp; sourceTree = "<group>"; };
-		84011721152D687A00B07E4D /* fractal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fractal.h; path = ../fractal.h; sourceTree = "<group>"; };
-		84B8DA13152C9AC600D59B95 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = "<group>"; };
-		84B8DA6F152CA90100D59B95 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../../../common/gui/xcode/tbbExample/main.m; sourceTree = "<group>"; };
-		84B8DA70152CA90100D59B95 /* OpenGLView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenGLView.h; path = ../../../common/gui/xcode/tbbExample/OpenGLView.h; sourceTree = "<group>"; };
-		84B8DA71152CA90100D59B95 /* OpenGLView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OpenGLView.m; path = ../../../common/gui/xcode/tbbExample/OpenGLView.m; sourceTree = "<group>"; };
-		84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tbbAppDelegate.h; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.h; sourceTree = "<group>"; };
-		84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = tbbAppDelegate.m; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.m; sourceTree = "<group>"; };
-		84B8DA75152CA90100D59B95 /* tbbExample-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "tbbExample-Prefix.pch"; path = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch"; sourceTree = "<group>"; };
-		84B8DA7D152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = InfoPlist.strings; sourceTree = "<group>"; };
-		84B8DA7F152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = MainMenu.xib; sourceTree = "<group>"; };
-		84B8DA82152CA99C00D59B95 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../main.cpp; sourceTree = "<group>"; };
-		84B8DA99152CADF400D59B95 /* macvideo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macvideo.cpp; path = ../../../common/gui/macvideo.cpp; sourceTree = "<group>"; };
-		84D017511527431F0008A4E0 /* tbbExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tbbExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		84D017551527431F0008A4E0 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
-		84D017581527431F0008A4E0 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
-		84D017591527431F0008A4E0 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
-		84D0175A1527431F0008A4E0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
-		84D01775152744BD0008A4E0 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		84D0174E1527431F0008A4E0 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */,
-				84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */,
-				84B8DA19152C9AC600D59B95 /* libtbb.dylib in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		84011727152D68D200B07E4D /* Sources */ = {
-			isa = PBXGroup;
-			children = (
-				8401171F152D687A00B07E4D /* fractal_video.h */,
-				84B8DA82152CA99C00D59B95 /* main.cpp */,
-				84011720152D687A00B07E4D /* fractal.cpp */,
-				84011721152D687A00B07E4D /* fractal.h */,
-			);
-			name = Sources;
-			sourceTree = "<group>";
-		};
-		84B8DA6C152CA8D900D59B95 /* tbbExample */ = {
-			isa = PBXGroup;
-			children = (
-				84011727152D68D200B07E4D /* Sources */,
-				84B8DA98152CAD8600D59B95 /* Gui layer */,
-				84B8DA7B152CA97B00D59B95 /* Resources */,
-			);
-			name = tbbExample;
-			sourceTree = "<group>";
-		};
-		84B8DA7B152CA97B00D59B95 /* Resources */ = {
-			isa = PBXGroup;
-			children = (
-				84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */,
-				84B8DA7E152CA97B00D59B95 /* MainMenu.xib */,
-			);
-			name = Resources;
-			path = ../../../common/gui/xcode/tbbExample/en.lproj;
-			sourceTree = "<group>";
-		};
-		84B8DA98152CAD8600D59B95 /* Gui layer */ = {
-			isa = PBXGroup;
-			children = (
-				84B8DA99152CADF400D59B95 /* macvideo.cpp */,
-				84B8DA6F152CA90100D59B95 /* main.m */,
-				84B8DA70152CA90100D59B95 /* OpenGLView.h */,
-				84B8DA71152CA90100D59B95 /* OpenGLView.m */,
-				84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */,
-				84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */,
-				84B8DA75152CA90100D59B95 /* tbbExample-Prefix.pch */,
-			);
-			name = "Gui layer";
-			sourceTree = "<group>";
-		};
-		84D017461527431F0008A4E0 = {
-			isa = PBXGroup;
-			children = (
-				84B8DA6C152CA8D900D59B95 /* tbbExample */,
-				84D017541527431F0008A4E0 /* Frameworks */,
-				84D017521527431F0008A4E0 /* Products */,
-			);
-			sourceTree = "<group>";
-		};
-		84D017521527431F0008A4E0 /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				84D017511527431F0008A4E0 /* tbbExample.app */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		84D017541527431F0008A4E0 /* Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-				84D01775152744BD0008A4E0 /* OpenGL.framework */,
-				84D017551527431F0008A4E0 /* Cocoa.framework */,
-				84D017571527431F0008A4E0 /* Other Frameworks */,
-			);
-			name = Frameworks;
-			sourceTree = "<group>";
-		};
-		84D017571527431F0008A4E0 /* Other Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-				84B8DA13152C9AC600D59B95 /* libtbb.dylib */,
-				84D017581527431F0008A4E0 /* AppKit.framework */,
-				84D017591527431F0008A4E0 /* CoreData.framework */,
-				84D0175A1527431F0008A4E0 /* Foundation.framework */,
-			);
-			name = "Other Frameworks";
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
-		84D017501527431F0008A4E0 /* tbbExample */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget "tbbExample" */;
-			buildPhases = (
-				84D0174D1527431F0008A4E0 /* Sources */,
-				84D0174E1527431F0008A4E0 /* Frameworks */,
-				84D0174F1527431F0008A4E0 /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = tbbExample;
-			productName = tbbExample;
-			productReference = 84D017511527431F0008A4E0 /* tbbExample.app */;
-			productType = "com.apple.product-type.application";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		84D017481527431F0008A4E0 /* Project object */ = {
-			isa = PBXProject;
-			attributes = {
-				CLASSPREFIX = tbb;
-				LastUpgradeCheck = 0430;
-			};
-			buildConfigurationList = 84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "fractal" */;
-			compatibilityVersion = "Xcode 3.2";
-			developmentRegion = English;
-			hasScannedForEncodings = 0;
-			knownRegions = (
-				en,
-			);
-			mainGroup = 84D017461527431F0008A4E0;
-			productRefGroup = 84D017521527431F0008A4E0 /* Products */;
-			projectDirPath = "";
-			projectRoot = "";
-			targets = (
-				84D017501527431F0008A4E0 /* tbbExample */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
-		84D0174F1527431F0008A4E0 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				84B8DA7A152CA90100D59B95 /* (null) in Resources */,
-				84B8DA80152CA97B00D59B95 /* InfoPlist.strings in Resources */,
-				84B8DA81152CA97B00D59B95 /* MainMenu.xib in Resources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
-		84D0174D1527431F0008A4E0 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				84B8DA77152CA90100D59B95 /* main.m in Sources */,
-				84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */,
-				84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */,
-				84B8DA87152CA99C00D59B95 /* main.cpp in Sources */,
-				84B8DA9A152CADF400D59B95 /* macvideo.cpp in Sources */,
-				84011722152D687A00B07E4D /* fractal.cpp in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXVariantGroup section */
-		84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */ = {
-			isa = PBXVariantGroup;
-			children = (
-				84B8DA7D152CA97B00D59B95 /* en */,
-			);
-			name = InfoPlist.strings;
-			sourceTree = "<group>";
-		};
-		84B8DA7E152CA97B00D59B95 /* MainMenu.xib */ = {
-			isa = PBXVariantGroup;
-			children = (
-				84B8DA7F152CA97B00D59B95 /* en */,
-			);
-			name = MainMenu.xib;
-			sourceTree = "<group>";
-		};
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
-		84D01770152743200008A4E0 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = YES;
-				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
-				CLANG_ENABLE_OBJC_ARC = YES;
-				COPY_PHASE_STRIP = NO;
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PREPROCESSOR_DEFINITIONS = (
-					"DEBUG=1",
-					"$(inherited)",
-				);
-				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				MACOSX_DEPLOYMENT_TARGET = 10.7;
-				ONLY_ACTIVE_ARCH = YES;
-				SDKROOT = macosx;
-			};
-			name = Debug;
-		};
-		84D01771152743200008A4E0 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = YES;
-				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
-				CLANG_ENABLE_OBJC_ARC = YES;
-				COPY_PHASE_STRIP = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				MACOSX_DEPLOYMENT_TARGET = 10.7;
-				SDKROOT = macosx;
-			};
-			name = Release;
-		};
-		84D01773152743200008A4E0 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
-				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
-				INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist";
-				LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib\"";
-				MACOSX_DEPLOYMENT_TARGET = 10.7;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				RUN_CLANG_STATIC_ANALYZER = YES;
-				USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
-				VERSION_INFO_BUILDER = "$(TARGET_NAME)";
-				WRAPPER_EXTENSION = app;
-			};
-			name = Debug;
-		};
-		84D01774152743200008A4E0 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
-				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
-				INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist";
-				LIBRARY_SEARCH_PATHS = (
-					"\"$(SRCROOT)/../../../../lib\"",
-					"\"$(SRCROOT)\"",
-				);
-				MACOSX_DEPLOYMENT_TARGET = 10.7;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				RUN_CLANG_STATIC_ANALYZER = YES;
-				USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
-				VERSION_INFO_BUILDER = "$(TARGET_NAME)";
-				WRAPPER_EXTENSION = app;
-			};
-			name = Release;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "fractal" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				84D01770152743200008A4E0 /* Debug */,
-				84D01771152743200008A4E0 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget "tbbExample" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				84D01773152743200008A4E0 /* Debug */,
-				84D01774152743200008A4E0 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-/* End XCConfigurationList section */
-	};
-	rootObject = 84D017481527431F0008A4E0 /* Project object */;
-}
diff --git a/examples/task_priority/index.html b/examples/task_priority/index.html
deleted file mode 100644
index d280813..0000000
--- a/examples/task_priority/index.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<HTML>
-<BODY>
-
-<H2>Overview</H2>
-This directory has examples of how to use the task priority feature.
-
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="fractal/index.html">fractal</A>
-<DD>The example calculates two classical Mandelbrot fractals with different priorities.
-</DL>
-
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
diff --git a/examples/test_all/fibonacci/Fibonacci.cpp b/examples/test_all/fibonacci/Fibonacci.cpp
index c554939..19a41a5 100644
--- a/examples/test_all/fibonacci/Fibonacci.cpp
+++ b/examples/test_all/fibonacci/Fibonacci.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /* Example program that computes Fibonacci numbers in different ways.
@@ -71,6 +71,8 @@ struct Matrix2x2
     }
     Matrix2x2 operator * (const Matrix2x2 &to) const; //< Multiply two Matrices
 };
+//! Identity matrix
+static const Matrix2x2 MatrixIdentity(1, 0, 0, 1);
 //! Default matrix to multiply
 static const Matrix2x2 Matrix1110(1, 1, 1, 0);
 //! Raw arrays matrices multiply
@@ -191,8 +193,7 @@ public:
     //! constructor
     ConcurrentHashSerialFibTask( NumbersTable &cht, int n ) : Fib(cht), my_n(n) { }
     //! executing task
-    /*override*/ task* execute()
-    {
+    task* execute() /*override*/ {
         for( int i = 2; i <= my_n; ++i ) { // there is no difference in to recycle or to make loop
             NumbersTable::const_accessor f1, f2; // same as iterators
             if( !Fib.find(f1, i-1) || !Fib.find(f2, i-2) ) {
@@ -287,7 +288,7 @@ struct QueueInsertTask: public task {
     //! fill task arguments
     QueueInsertTask( int n, QueueStream &s ) : my_n(n), my_stream(s) { }
     //! executing task
-    /*override*/ task* execute() {
+    task* execute() /*override*/ {
         // Execute of parallel pushing of n-1 initial matrices
         parallel_for( blocked_range<int>( 1, my_n, 10 ), parallel_forFibBody(my_stream) ); 
         my_stream.producer_is_done = true; 
@@ -300,7 +301,7 @@ struct QueueProcessTask: public task {
     //! fill task argument
     QueueProcessTask( QueueStream &s ) : my_stream(s) { }
     //! executing task
-    /*override*/ task* execute() {
+    task* execute() /*override*/ {
         while( !my_stream.producer_is_done || my_stream.Queue.unsafe_size()>1 ) {
             parallel_while<parallel_whileFibBody> w; // run while loop in parallel
             w.run( my_stream, parallel_whileFibBody( w, my_stream ) );
@@ -336,8 +337,7 @@ public:
     //! fill filter arguments
     InputFilter( int n ) : filter(false /*is not serial*/) { N = n; }
     //! executing filter
-    /*override*/ void* operator()(void*)
-    {
+    void* operator()(void*) /*override*/ {
         int n = --N;
         if(n <= 0) return 0;
         Queue.push( Matrix1110 );
@@ -349,8 +349,7 @@ class MultiplyFilter: public filter {
 public:
     MultiplyFilter( ) : filter(false /*is not serial*/) { }
     //! executing filter
-    /*override*/ void* operator()(void*p)
-    {
+    void* operator()(void*p) /*override*/ {
         concurrent_queue<Matrix2x2> &Queue = *static_cast<concurrent_queue<Matrix2x2> *>(p);
         Matrix2x2 m1, m2;
         // get two elements
@@ -417,35 +416,52 @@ value parallel_reduceFib(int n)
 
 //! Functor for parallel_scan
 struct parallel_scanFibBody {
-    Matrix2x2 sum;
-    int first;  // flag to make one less operation for first range
-    //! Constructor fills sum with initial matrix
-    parallel_scanFibBody() : sum( Matrix1110 ), first(1) {}
+    /** Though parallel_scan is usually used to accumulate running sums,
+        it can be used to accumulate running products too. */
+    Matrix2x2 product;
+    /** Pointer to output sequence */
+    value* const output;
+    //! Constructor sets product to identity matrix
+    parallel_scanFibBody(value* output_) : product( MatrixIdentity ), output(output_) {}
     //! Splitting constructor
-    parallel_scanFibBody( parallel_scanFibBody &b, split) : sum( Matrix1110 ), first(1) {}
-    //! Join point
+    parallel_scanFibBody( parallel_scanFibBody &b, split) : product( MatrixIdentity ), output(b.output) {}
+    //! Method for merging summary information from a, which was split off from *this, into *this.
     void reverse_join( parallel_scanFibBody &a ) {
-        sum = sum * a.sum;
+        // When using non-commutative reduction operation, reverse_join
+        // should put argument "a" on the left side of the operation.
+        // The reversal from the argument order is why the method is
+        // called "reverse_join" instead of "join".
+        product = a.product * product;
     }
-    //! Assign point
+    //! Method for assigning final result back to original body.
     void assign( parallel_scanFibBody &b ) {
-        sum = b.sum;
+        product = b.product;
     }
-    //! Process multiplications. For two tags
-    template<typename T>
-    void operator()( const blocked_range<int> &r, T) {
-        // see tag.is_final_scan() for what tag is used
-        for( int k = r.begin() + first; k < r.end(); ++k )
-            sum = sum * Matrix1110;
-        first = 0; // reset flag, because this method can be reused for next range
+    //! Compute matrix running product.
+    /** Tag indicates whether is is the final scan over the range, or
+        just a helper "prescan" that is computing a partial reduction. */
+    template<typename Tag>
+    void operator()( const blocked_range<int> &r, Tag tag) {
+        for( int k = r.begin(); k < r.end(); ++k ) {
+            // Code performs an "exclusive" scan, which outputs a value *before* updating the product.
+            // For an "inclusive" scan, output the value after the update.
+            if( tag.is_final_scan() )
+                output[k] = product.v[0][1];
+            product = product * Matrix1110;
+        }
     }
 };
 //! Root function
 value parallel_scanFib(int n)
 {
-    parallel_scanFibBody b;
-    parallel_scan(blocked_range<int>(1/*one less, because body skip first*/, n, 3), b);
-    return b.sum.v[0][0];
+    value* output = new value[n];
+    parallel_scanFibBody b(output);
+    parallel_scan(blocked_range<int>(0, n, 3), b);
+    // output[0..n-1] now contains the Fibonacci sequence (modulo integer wrap-around).
+    // Check the last two values for correctness.
+    assert( n<2 || output[n-2]+output[n-1]==b.product.v[0][1] );
+    delete[] output;
+    return b.product.v[0][1];
 }
 
 // *** Raw tasks *** //
@@ -461,7 +477,7 @@ struct FibTask: public task {
         n(n_), sum(sum_), second_phase(false)
     {}
     //! Execute task
-    /*override*/ task* execute() {
+    task* execute() /*override*/ {
         // Using Lucas' formula here
         if( second_phase ) { // children finished
             sum = n&1 ? x*x + y*y : x*x - y*y;
diff --git a/examples/test_all/fibonacci/Makefile b/examples/test_all/fibonacci/Makefile
index 17a3e57..e6d9599 100644
--- a/examples/test_all/fibonacci/Makefile
+++ b/examples/test_all/fibonacci/Makefile
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # GNU Makefile that builds and runs example.
 run_cmd=
@@ -33,6 +33,8 @@ run_cmd=../../common/android.linux.launcher.sh
 else
 LIBS+= -lrt 
 endif
+else ifeq ($(shell uname), Darwin)
+override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib
 endif
 
 all:	release test
diff --git a/examples/test_all/fibonacci/Makefile.windows b/examples/test_all/fibonacci/Makefile.windows
index 28387cf..94a1b36 100644
--- a/examples/test_all/fibonacci/Makefile.windows
+++ b/examples/test_all/fibonacci/Makefile.windows
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 # Common Makefile that builds and runs example.
 
diff --git a/examples/test_all/fibonacci/index.html b/examples/test_all/fibonacci/index.html
deleted file mode 100644
index 9e8d71b..0000000
--- a/examples/test_all/fibonacci/index.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<HTML>
-<BODY>
-
-<H2>Overview</H2>
-This directory contains an example that computes Fibonacci numbers in several
-different ways. The purpose of the example is to exercise every include file
-and class in Intel® Threading Building Blocks.
-Most of the computations are deliberately silly and not expected to
-show any speedup on multiprocessors.
-<H2>Files</H2>
-<DL>
-<DT><A HREF="Fibonacci.cpp">Fibonacci.cpp</A>
-<DD>Source code for example.
-<DT><A HREF="Makefile">Makefile</A>
-<DD>Makefile for building example.
-</DL>
-
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="msvs">msvs</A> 
-<DD>Contains Microsoft* Visual Studio* 2010 workspace for building and running the 
-    example (Windows* systems only).<DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example (OS X* 
-    systems only).</DL>
-
-<H2>To Build</H2>
-General build directions can be found <A HREF=../../index.html#build>here</A>.
-
-<H2>Usage</H2>
-<DL>
-<DT><TT>fibonacci <I>K</I> [<I>M</I>[:<I>N</I>]] [<I>R</I>]</TT>
-<DD>Calculates the <I>K</I>-th fibonacci number.
-    <I>M</I> and <I>N</I> are a range of numbers of threads to be used.
-    <I>R</I> is the number of times to repeat the calculation.
-<DT>To run a short version of this example, e.g., for use with Intel® Threading Tools:
-<DD>Build a <I>debug</I> version of the example
-    (see the <A HREF=../../index.html#build>build directions</A>).
-    <BR>Run it with a small fibonacci number and the desired number of threads, e.g., <TT>fibonacci 100 4</TT>.
-</DL>
-
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
diff --git a/examples/test_all/fibonacci/msvs/fibonacci.sln b/examples/test_all/fibonacci/msvs/fibonacci.sln
index 81de2c0..c0b2308 100644
--- a/examples/test_all/fibonacci/msvs/fibonacci.sln
+++ b/examples/test_all/fibonacci/msvs/fibonacci.sln
@@ -1,26 +1,26 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fibonacci", "fibonacci.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A252E}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
-		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|Win32.ActiveCfg = Debug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|Win32.Build.0 = Debug|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|x64.ActiveCfg = Debug|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|x64.Build.0 = Debug|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|Win32.ActiveCfg = Release|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|Win32.Build.0 = Release|Win32
-		{3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|x64.ActiveCfg = Release|x64
-		{3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|x64.Build.0 = Release|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fibonacci", "fibonacci.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A252E}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|Win32.ActiveCfg = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|Win32.Build.0 = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|x64.ActiveCfg = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|x64.Build.0 = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|Win32.ActiveCfg = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|Win32.Build.0 = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|x64.ActiveCfg = Release|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/test_all/fibonacci/msvs/fibonacci.vcxproj b/examples/test_all/fibonacci/msvs/fibonacci.vcxproj
index c746082..526992f 100644
--- a/examples/test_all/fibonacci/msvs/fibonacci.vcxproj
+++ b/examples/test_all/fibonacci/msvs/fibonacci.vcxproj
@@ -1,197 +1,201 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>fibonacci</ProjectName>
-    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A252E}</ProjectGuid>
-    <RootNamespace>fibonacci</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <Import Project="..\..\..\common\toolset.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc10;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX86</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc10;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc10;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <TargetMachine>MachineX64</TargetMachine>
-      <FixedBaseAddress>false</FixedBaseAddress>
-    </Link>
-    <PostBuildEvent>
-      <Message>Copying DLLs and PDBs</Message>
-      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\Fibonacci.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="..\index.html" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>fibonacci</ProjectName>
+    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A252E}</ProjectGuid>
+    <RootNamespace>fibonacci</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="..\..\..\common\toolset.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc11;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc11;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <FixedBaseAddress>false</FixedBaseAddress>
+    </Link>
+    <PostBuildEvent>
+      <Message>Copying DLLs and PDBs</Message>
+      <Command>call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\Fibonacci.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\readme.html" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/examples/test_all/fibonacci/readme.html b/examples/test_all/fibonacci/readme.html
new file mode 100644
index 0000000..7be2c72
--- /dev/null
+++ b/examples/test_all/fibonacci/readme.html
@@ -0,0 +1,402 @@
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
+
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
+
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Fibonacci sample</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Fibonacci sample</h1>
+	</div>
+	
+	<p>
+		This directory contains an example that computes Fibonacci numbers in several
+		different ways.
+	<br><br>
+		The purpose of the example is to exercise every include file
+		and class in Intel® Threading Building Blocks.
+		Most of the computations are deliberately silly and not expected to
+		show any speedup on multiprocessors.
+	</p>
+
+	<div class="changes">
+		<div class="h3-alike">System Requirements</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				For the most up to date system requirements, see the <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a>
+			</p>
+		</div>
+	</div>
+	
+	<div class="changes">
+		<div class="h3-alike">Files</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="Fibonacci.cpp">Fibonacci.cpp</a>
+				<dd>Source code for example.
+				<dt><a href="Makefile">Makefile</a>
+				<dd>Makefile for building the example.
+			</dl>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="msvs/">msvs</a> 
+				<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).
+				<dt><a href="xcode/">xcode</a>
+				<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).
+			</dl>
+			<p>For information about the minimum supported version of IDE, see <a href="http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes">release notes.</a></p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Build instructions</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<p>General build directions can be found <a href="../../index.html">here</a>.</p>
+		</div>
+	</div>
+
+	<div class="changes">
+		<div class="h3-alike">Usage</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><tt>fibonacci <i>K</i> [<i>M</i>[:<i>N</i>]] [<i>R</i>]</tt>
+				<dd>Calculates the <i>K</i>-th fibonacci number.
+					<i>M</i> and <i>N</i> are a range of numbers of threads to be used.
+					<i>R</i> is the number of times to repeat the calculation.
+				<dt>To run a short version of this example, e.g., for use with Intel® Threading Tools:
+				<dd>Build a <i>debug</i> version of the example
+					(see the <a href="../../index.html">build instructions</a>).
+					<br>Run it with a small fibonacci number and the desired number of threads, e.g., <tt>fibonacci 100 4</tt>.
+			</dl>
+		</div>
+	</div>
+	
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>	
+	
+</body>
+</html>
diff --git a/examples/test_all/index.html b/examples/test_all/index.html
index c03c1dc..9e6be12 100644
--- a/examples/test_all/index.html
+++ b/examples/test_all/index.html
@@ -1,24 +1,344 @@
-<HTML>
-<BODY>
+<!DOCTYPE html>
+<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
+<head>
+	<meta charset="UTF-8">
+	<style>
+		::selection {
+			background: #b7ffb7;
+		}
+		::-moz-selection {
+			background: #b7ffb7;
+		}
 
-<H2>Overview</H2>
-This directory contains programs that exercise all the components of Intel® Threading Building Blocks.
+		body {
+			font-family: Arial, Helvetica, sans-serif;
+			font-size: 16px;
+			width: 800px;
+			margin: 0 auto;
+		}
+		#banner {
+			/* Div for banner */
+			float:left;
+			margin: 0px;
+			margin-bottom: 10px;
+			width: 100%;
+			background-color: #0071C5;
+			z-index: 0;
+		}
+		#banner .logo {
+			/* Apply to logo in banner. Add as class to image tag. */
+			float: left;
+			margin-right: 20px;
+			margin-left: 20px;
+			margin-top: 15px;
+			padding-bottom: 5px;
+		}
+		h1 {
+			text-align: center;
+			font-size: 36px;
+		}
+		h1.title {
+			/* Add as class to H1 in banner */
+			font-family: "Intel Clear", Verdana, Arial, sans-serif;
+			font-weight:normal;
+			color: #FFFFFF;
+			font-size: 170%;
+			margin-right: 40px;
+			margin-left: 40px;
+			padding-right: 20px;
+			text-indent: 20px;
+		}
+		.h3-alike {
+			display:inline;
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		h3 {
+			font-size: 1.17em;
+			font-weight: bold;
+			color: #0071C5;
+		}
+		.h4-alike {
+			display:inline;
+			font-size: 1.05em;
+			font-weight: bold;
+		}
+		pre {
+			font-family: "Consolas", Monaco, monospace;
+			font-size:small;
+			background: #fafafa;
+			margin: 0;
+			padding-left:20px;
+		}
+		#footer {
+			font-size: small;
+		}
+		code {
+			font-family: "Consolas", Monaco, monospace;
+		}
+		.code-block
+		{
+			padding-left:20px;
+		}
+		.changes {
+			margin: 1em 0;
+		}
+		.changes input:active {
+			position: relative;
+			top: 1px;
+		}
+		.changes input:hover:after {
+			padding-left: 16px;
+			font-size: 10px;
+			content: 'More';
+		}
+		.changes input:checked:hover:after {
+			content: 'Less';
+		}
+		.changes input + .show-hide {
+			display: none;
+		}
+		.changes input:checked + .show-hide {
+			display: block;
+		}
 
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="fibonacci/index.html">fibonacci</A>
-<DD>Compute Fibonacci numbers in different ways.
-</DL>
+		ul {
+			margin: 0;
+			padding: 0.5em 0 0.5em 2.5em;
+		}
+		ul li {
+			margin-bottom: 3px;
+		}
+		ul li:last-child {
+			margin-bottom: 0;
+		}
+		.disc {
+			list-style-type:disc
+		}
+		.circ {
+			list-style-type:circle
+		}
+		
+		.single {
+			padding: 0 0.5em;
+		}
+		
+		/* ------------------------------------------------- */
+		/* Table styles                                      */
+		table{
+			margin-bottom:5pt;
+			border-collapse:collapse;
+			margin-left:0px;
+			margin-top:0.3em;
+			font-size:10pt;
+		}
+		tr{
+			vertical-align:top;
+		}
+		th,
+		th h3{
+			padding:4px;
+			text-align:left;
+			background-color:#0071C5;
+			font-weight:bold;
+			margin-top:1px;
+			margin-bottom:0;
+			color:#FFFFFF;
+			font-size:10pt;
+			vertical-align:middle;
+		}
+		th{
+			border:1px #dddddd solid;
+			padding-top:2px;	 	 
+			padding-bottom:0px;
+			padding-right:3px;	 	 
+			padding-left:3px;
+		}
+		td{
+			border:1px #dddddd solid;
+			vertical-align:top;
+			font-size:100%;
+			text-align:left;
+			margin-bottom:0;
+		}
+		td,
+		td p{
+			margin-top:0;
+			margin-left:0;
+			text-align:left;
+			font-size:inherit;
+			line-height:120%;
+		}
+		td p{
+			margin-bottom:0;
+			padding-top:5px;
+			padding-bottom:5px;
+			padding-right:5px;
+			padding-left:1px;
+		}
+		.noborder{
+			border:0px none;
+		}
+		.noborder1stcol{
+			border:0px none;
+			padding-left:0pt;
+		}
+		td ol{
+			font-size:inherit;
+			margin-left:28px;
+		}
+		td ul{
+			font-size:inherit;
+			margin-left:24px;
+		}
+		.DefListTbl{
+			width:90%;
+			margin-left:-3pt;
+		}
+		.syntaxdiagramtbl{
+			margin-left:-3pt;
+		}
+		.sdtbl{
+		}
+		.sdrow{
+		}
+		.sdtblp{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		.idepara, .ide_para{
+			border:0px none;
+			font-size:inherit;
+			line-height:120%;
+			margin-bottom:0;
+			padding-bottom:0px;
+			padding-top:5px;
+			padding-left:0px;
+			padding-right:5px;
+			vertical-align:top;
+		}
+		
+		.specs {
+			border-collapse:collapse;
+		}
+		.specs td, .specs th {
+			font-size: 14px;
+		}
+		.specs td {
+			border: 1px solid black;
+		}
+		.specs td td, .specs td th {
+			border: none;
+		}
+		.specs	td, .specs td td, .specs td th {
+			padding: 0 0.2em 0.2em;
+			text-align: center;
+		}
+		.specs td tr:last-child td, 
+		.specs td tr:last-child th {
+			padding: 0 0.2em;
+		}
+		.serial-time {
+		}
+		.modified-time {
+		width: 6.5em;
+		}
+		.compiler {
+		}
+		.comp-opt {
+		}
+		.sys-specs {
+			width: 18em;
+		}
+		.note {
+			font-size:small;
+			font-style: italic;
+		}
+	</style>
+	<title>Intel® Threading Building Blocks. Samples on all features</title>
+</head>
+<body>
+	
+	<div id="banner">
+		<img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx
+				jwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh
+				ZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS
+				NIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L
+				wRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD
+				ngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY
+				zPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4
+				+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD
+				ZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB
+				cW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t
+				qh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4
+				O704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h
+				jXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc
+				z1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM
+				Ue8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3
+				hfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db
+				Ycn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq
+				COyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv
+				QPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT
+				Mjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9
+				f3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80
+				GedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW
+				pQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2
+				k4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb
+				S4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl
+				QBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP
+				sVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+
+				sUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5
+				NKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP
+				pHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq
+				PuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+
+				XtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg
+				T4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X
+				wCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ
+				rx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq
+				E4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq
+				AjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw
+				iIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M
+				76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx
+				9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC">
+		<h1 class="title">Intel® Threading Building Blocks.<br>Samples on various features</h1>
+	</div>
+	
+	<p>
+		This directory contains programs that exercise various components of Intel® Threading Building Blocks.
+	</p>
 
-<HR>
-<A HREF="../index.html">Up to parent directory</A>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
+	<div class="changes">
+		<div class="h3-alike">Directories</div>
+		<input type="checkbox" checked="checked">
+		<div class="show-hide">
+			<dl>
+				<dt><a href="fibonacci/readme.html">fibonacci</a>
+				<dd>Compute Fibonacci numbers in different ways.
+			</dl>
+		</div>
+	</div>
+	<br>
+	<a href="../index.html">Up to parent directory</a>
+	<hr>
+	<div class="changes">
+	<div class="h3-alike">Legal Information:</div>
+		<input type="checkbox">
+		<div class="show-hide">
+			<p>
+				Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
+				<br>* Other names and brands may be claimed as the property of others. 
+				<br>© 2017, Intel Corporation
+			</p>
+		</div>
+	</div>
+</body>
+</html>
 
diff --git a/include/index.html b/include/index.html
index 1ae0167..b0962e0 100644
--- a/include/index.html
+++ b/include/index.html
@@ -8,12 +8,14 @@ Include files for Intel® Threading Building Blocks (Intel® TBB).
 <DL>
 <DT><A HREF="tbb/index.html">tbb</A>
 <DD>Include files for Intel TBB classes and functions.
+<DT><A HREF="serial/tbb/">serial/tbb</A>
+<DD>Include files for a sequential implementation of the parallel_for algorithm.
 </DL>
 
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/include/serial/tbb/parallel_for.h b/include/serial/tbb/parallel_for.h
index 89e5483..c8f9a79 100644
--- a/include/serial/tbb/parallel_for.h
+++ b/include/serial/tbb/parallel_for.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_SERIAL_parallel_for_H
@@ -43,7 +43,7 @@
 
 namespace tbb {
 namespace serial {
-namespace interface7 {
+namespace interface9 {
 
 // parallel_for serial annotated implementation
 
@@ -104,28 +104,35 @@ void start_for< Range, Body, Partitioner >::execute() {
 /** @ingroup algorithms **/
 template<typename Range, typename Body>
 void parallel_for( const Range& range, const Body& body ) {
-    serial::interface7::start_for<Range,Body,const __TBB_DEFAULT_PARTITIONER>::run(range,body,__TBB_DEFAULT_PARTITIONER());
+    serial::interface9::start_for<Range,Body,const __TBB_DEFAULT_PARTITIONER>::run(range,body,__TBB_DEFAULT_PARTITIONER());
 }
 
 //! Parallel iteration over range with simple partitioner.
 /** @ingroup algorithms **/
 template<typename Range, typename Body>
 void parallel_for( const Range& range, const Body& body, const simple_partitioner& partitioner ) {
-    serial::interface7::start_for<Range,Body,const simple_partitioner>::run(range,body,partitioner);
+    serial::interface9::start_for<Range,Body,const simple_partitioner>::run(range,body,partitioner);
 }
 
 //! Parallel iteration over range with auto_partitioner.
 /** @ingroup algorithms **/
 template<typename Range, typename Body>
 void parallel_for( const Range& range, const Body& body, const auto_partitioner& partitioner ) {
-    serial::interface7::start_for<Range,Body,const auto_partitioner>::run(range,body,partitioner);
+    serial::interface9::start_for<Range,Body,const auto_partitioner>::run(range,body,partitioner);
+}
+
+//! Parallel iteration over range with static_partitioner.
+/** @ingroup algorithms **/
+template<typename Range, typename Body>
+void parallel_for( const Range& range, const Body& body, const static_partitioner& partitioner ) {
+    serial::interface9::start_for<Range,Body,const static_partitioner>::run(range,body,partitioner);
 }
 
 //! Parallel iteration over range with affinity_partitioner.
 /** @ingroup algorithms **/
 template<typename Range, typename Body>
 void parallel_for( const Range& range, const Body& body, affinity_partitioner& partitioner ) {
-    serial::interface7::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner);
+    serial::interface9::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner);
 }
 
 //! Implementation of parallel iteration over stepped range of integers with explicit step and partitioner (ignored)
@@ -160,6 +167,11 @@ template <typename Index, typename Function>
 void parallel_for(Index first, Index last, Index step, const Function& f, const auto_partitioner& p) {
     parallel_for_impl<Index,Function,const auto_partitioner>(first, last, step, f, p);
 }
+//! Parallel iteration over a range of integers with explicit step and static partitioner
+template <typename Index, typename Function>
+void parallel_for(Index first, Index last, Index step, const Function& f, const static_partitioner& p) {
+    parallel_for_impl<Index,Function,const static_partitioner>(first, last, step, f, p);
+}
 //! Parallel iteration over a range of integers with explicit step and affinity partitioner
 template <typename Index, typename Function>
 void parallel_for(Index first, Index last, Index step, const Function& f, affinity_partitioner& p) {
@@ -181,20 +193,25 @@ template <typename Index, typename Function>
     void parallel_for(Index first, Index last, const Function& f, const auto_partitioner& p) {
     parallel_for_impl<Index,Function,const auto_partitioner>(first, last, static_cast<Index>(1), f, p);
 }
+//! Parallel iteration over a range of integers with default step and static partitioner
+template <typename Index, typename Function>
+void parallel_for(Index first, Index last, const Function& f, const static_partitioner& p) {
+    parallel_for_impl<Index,Function,const static_partitioner>(first, last, static_cast<Index>(1), f, p);
+}
 //! Parallel iteration over a range of integers with default step and affinity_partitioner
 template <typename Index, typename Function>
 void parallel_for(Index first, Index last, const Function& f, affinity_partitioner& p) {
     parallel_for_impl(first, last, static_cast<Index>(1), f, p);
 }
 
-} // namespace interface7
+} // namespace interfaceX
 
-using interface7::parallel_for;
+using interface9::parallel_for;
 
 } // namespace serial
 
 #ifndef __TBB_NORMAL_EXECUTION
-using serial::interface7::parallel_for;
+using serial::interface9::parallel_for;
 #endif
 
 } // namespace tbb
diff --git a/include/serial/tbb/tbb_annotate.h b/include/serial/tbb/tbb_annotate.h
index e4e321f..81c8d3a 100644
--- a/include/serial/tbb/tbb_annotate.h
+++ b/include/serial/tbb/tbb_annotate.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_annotate_H
diff --git a/include/tbb/aggregator.h b/include/tbb/aggregator.h
index ed908c0..6aecbb7 100644
--- a/include/tbb/aggregator.h
+++ b/include/tbb/aggregator.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB__aggregator_H
@@ -62,7 +62,7 @@ public:
 template<typename Body>
 class basic_operation : public basic_operation_base, no_assign {
     const Body& my_body;
-    /*override*/ void apply_body() { my_body(); }
+    void apply_body() __TBB_override { my_body(); }
 public:
     basic_operation(const Body& b) : basic_operation_base(), my_body(b) {}
 };
@@ -70,13 +70,13 @@ public:
 class basic_handler {
 public:
     basic_handler() {}
-    void operator()(aggregator_operation* op_list) const { 
+    void operator()(aggregator_operation* op_list) const {
         while (op_list) {
             // ITT note: &(op_list->status) tag is used to cover accesses to the operation data.
             // The executing thread "acquires" the tag (see start()) and then performs
             // the associated operation w/o triggering a race condition diagnostics.
             // A thread that created the operation is waiting for its status (see execute_impl()),
-            // so when this thread is done with the operation, it will "release" the tag 
+            // so when this thread is done with the operation, it will "release" the tag
             // and update the status (see finish()) to give control back to the waiting thread.
             basic_operation_base& request = static_cast<basic_operation_base&>(*op_list);
             // IMPORTANT: need to advance op_list to op_list->next() before calling request.finish()
@@ -102,8 +102,8 @@ public:
     /** Details of user-made operations must be handled by user-provided handler */
     void process(aggregator_operation *op) { execute_impl(*op); }
 
- protected:
-    /** Place operation in mailbox, then either handle mailbox or wait for the operation 
+protected:
+    /** Place operation in mailbox, then either handle mailbox or wait for the operation
         to be completed by a different thread. */
     void execute_impl(aggregator_operation& op) {
         aggregator_operation* res;
@@ -114,11 +114,11 @@ public:
         // thus this tag will be acquired just before the operation is handled in the
         // handle_operations functor.
         call_itt_notify(releasing, &(op.status));
-        // insert the operation in the queue
+        // insert the operation into the list
         do {
             // ITT may flag the following line as a race; it is a false positive:
             // This is an atomic read; we don't provide itt_hide_load_word for atomics
-            op.my_next = res = mailbox; // NOT A RACE 
+            op.my_next = res = mailbox; // NOT A RACE
         } while (mailbox.compare_and_swap(&op, res) != res);
         if (!res) { // first in the list; handle the operations
             // ITT note: &mailbox tag covers access to the handler_busy flag, which this
@@ -135,7 +135,7 @@ public:
     }
 
 
- private:
+private:
     //! An atomically updated list (aka mailbox) of aggregator_operations
     atomic<aggregator_operation *> mailbox;
 
@@ -162,8 +162,8 @@ public:
         // acquire fence not necessary here due to causality rule and surrounding atomics
         __TBB_store_with_release(handler_busy, uintptr_t(1));
 
-        // ITT note: &mailbox tag covers access to the handler_busy flag itself. 
-        // Capturing the state of the mailbox signifies that handler_busy has been 
+        // ITT note: &mailbox tag covers access to the handler_busy flag itself.
+        // Capturing the state of the mailbox signifies that handler_busy has been
         // set and a new active handler will now process that list's operations.
         call_itt_notify(releasing, &mailbox);
         // grab pending_operations
diff --git a/include/tbb/aligned_space.h b/include/tbb/aligned_space.h
index 8ee62a0..56fd85f 100644
--- a/include/tbb/aligned_space.h
+++ b/include/tbb/aligned_space.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_aligned_space_H
@@ -42,6 +42,6 @@ public:
     T* end() {return begin()+N;}
 };
 
-} // namespace tbb 
+} // namespace tbb
 
 #endif /* __TBB_aligned_space_H */
diff --git a/include/tbb/atomic.h b/include/tbb/atomic.h
index e3ffa6e..72ec534 100644
--- a/include/tbb/atomic.h
+++ b/include/tbb/atomic.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_atomic_H
@@ -31,8 +31,8 @@
 
 #include "tbb_machine.h"
 
-#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
-    // Workaround for overzealous compiler warnings
+#if _MSC_VER && !__INTEL_COMPILER
+    // Suppress overzealous compiler warnings till the end of the file
     #pragma warning (push)
     #pragma warning (disable: 4244 4267 4512)
 #endif
@@ -54,7 +54,9 @@ enum memory_semantics {
 //! @cond INTERNAL
 namespace internal {
 
-#if __TBB_ATTRIBUTE_ALIGNED_PRESENT
+#if __TBB_ALIGNAS_PRESENT
+    #define __TBB_DECL_ATOMIC_FIELD(t,f,a) alignas(a) t f;
+#elif __TBB_ATTRIBUTE_ALIGNED_PRESENT
     #define __TBB_DECL_ATOMIC_FIELD(t,f,a) t f  __attribute__ ((aligned(a)));
 #elif __TBB_DECLSPEC_ALIGN_PRESENT
     #define __TBB_DECL_ATOMIC_FIELD(t,f,a) __declspec(align(a)) t f;
@@ -551,6 +553,6 @@ inline atomic<T>& as_atomic( T& t ) {
 
 #if _MSC_VER && !__INTEL_COMPILER
     #pragma warning (pop)
-#endif // warnings 4244, 4267 are back
+#endif // warnings are restored
 
 #endif /* __TBB_atomic_H */
diff --git a/include/tbb/blocked_range.h b/include/tbb/blocked_range.h
index 220e695..9f24cd2 100644
--- a/include/tbb/blocked_range.h
+++ b/include/tbb/blocked_range.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_blocked_range_H
diff --git a/include/tbb/blocked_range2d.h b/include/tbb/blocked_range2d.h
index 3a2f383..f1b9f35 100644
--- a/include/tbb/blocked_range2d.h
+++ b/include/tbb/blocked_range2d.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_blocked_range2d_H
diff --git a/include/tbb/blocked_range3d.h b/include/tbb/blocked_range3d.h
index 0e27bba..c62565e 100644
--- a/include/tbb/blocked_range3d.h
+++ b/include/tbb/blocked_range3d.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_blocked_range3d_H
diff --git a/include/tbb/cache_aligned_allocator.h b/include/tbb/cache_aligned_allocator.h
index 2a58dab..d435e78 100644
--- a/include/tbb/cache_aligned_allocator.h
+++ b/include/tbb/cache_aligned_allocator.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_cache_aligned_allocator_H
@@ -76,7 +76,7 @@ public:
 
     pointer address(reference x) const {return &x;}
     const_pointer address(const_reference x) const {return &x;}
-    
+
     //! Allocate space for n objects, starting on a cache/sector line.
     pointer allocate( size_type n, const void* hint=0 ) {
         // The "hint" argument is always ignored in NFS_Allocate thus const_cast shouldn't hurt
@@ -115,7 +115,7 @@ public:
 
 //! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1
 /** @ingroup memory_allocation */
-template<> 
+template<>
 class cache_aligned_allocator<void> {
 public:
     typedef void* pointer;
diff --git a/include/tbb/combinable.h b/include/tbb/combinable.h
index 57fd98c..0063dbb 100644
--- a/include/tbb/combinable.h
+++ b/include/tbb/combinable.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_combinable_H
@@ -31,27 +31,40 @@ namespace tbb {
 //! Thread-local storage with optional reduction
 /** @ingroup containers */
     template <typename T>
-        class combinable {
+    class combinable {
+
     private:
         typedef typename tbb::cache_aligned_allocator<T> my_alloc;
-
         typedef typename tbb::enumerable_thread_specific<T, my_alloc, ets_no_key> my_ets_type;
-        my_ets_type my_ets; 
- 
+        my_ets_type my_ets;
+
     public:
 
         combinable() { }
 
         template <typename finit>
-        combinable( finit _finit) : my_ets(_finit) { }
+        explicit combinable( finit _finit) : my_ets(_finit) { }
 
         //! destructor
-        ~combinable() { 
-        }
+        ~combinable() { }
+
+        combinable( const combinable& other) : my_ets(other.my_ets) { }
 
-        combinable(const combinable& other) : my_ets(other.my_ets) { }
+#if __TBB_ETS_USE_CPP11
+        combinable( combinable&& other) : my_ets( std::move(other.my_ets)) { }
+#endif
 
-        combinable & operator=( const combinable & other) { my_ets = other.my_ets; return *this; }
+        combinable & operator=( const combinable & other) {
+            my_ets = other.my_ets;
+            return *this;
+        }
+
+#if __TBB_ETS_USE_CPP11
+        combinable & operator=( combinable && other) {
+            my_ets=std::move(other.my_ets);
+            return *this;
+        }
+#endif
 
         void clear() { my_ets.clear(); }
 
diff --git a/include/tbb/compat/condition_variable b/include/tbb/compat/condition_variable
index ce9c237..43edfc0 100644
--- a/include/tbb/compat/condition_variable
+++ b/include/tbb/compat/condition_variable
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_condition_variable_H
diff --git a/include/tbb/compat/ppl.h b/include/tbb/compat/ppl.h
index 156fd39..840dfb2 100644
--- a/include/tbb/compat/ppl.h
+++ b/include/tbb/compat/ppl.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_compat_ppl_H
diff --git a/include/tbb/compat/thread b/include/tbb/compat/thread
index fcab1e5..0edd928 100644
--- a/include/tbb/compat/thread
+++ b/include/tbb/compat/thread
@@ -1,30 +1,32 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_thread_H
 #define __TBB_thread_H
 
-#include "../tbb_thread.h"
+#include "../tbb_config.h"
 
 #if TBB_IMPLEMENT_CPP0X
 
+#include "../tbb_thread.h"
+
 namespace std {
 
 typedef tbb::tbb_thread thread;
@@ -36,11 +38,23 @@ namespace this_thread {
     inline void sleep_for(const tbb::tick_count::interval_t& rel_time) {
         tbb::internal::thread_sleep_v3( rel_time );
     }
-
 }
 
-}
+} // namespace std
+
+#else /* TBB_IMPLEMENT_CPP0X */
+
+#define __TBB_COMPAT_THREAD_RECURSION_PROTECTOR 1
+#include <thread>
+#undef __TBB_COMPAT_THREAD_RECURSION_PROTECTOR
 
 #endif /* TBB_IMPLEMENT_CPP0X */
 
+#else /* __TBB_thread_H */
+
+#if __TBB_COMPAT_THREAD_RECURSION_PROTECTOR
+#error The tbb/compat/thread header attempts to include itself. \
+       Please make sure that {TBBROOT}/include/tbb/compat is NOT in include paths.
+#endif
+
 #endif /* __TBB_thread_H */
diff --git a/include/tbb/compat/tuple b/include/tbb/compat/tuple
index 795b2fb..5767c49 100644
--- a/include/tbb/compat/tuple
+++ b/include/tbb/compat/tuple
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_tuple_H
diff --git a/include/tbb/concurrent_hash_map.h b/include/tbb/concurrent_hash_map.h
index 33876b5..09b2765 100644
--- a/include/tbb/concurrent_hash_map.h
+++ b/include/tbb/concurrent_hash_map.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_concurrent_hash_map_H
@@ -32,7 +32,7 @@
 #include <iterator>
 #include <utility>      // Need std::pair
 #include <cstring>      // Need std::memset
-#include <algorithm>    // Need std::swap
+#include __TBB_STD_SWAP_HEADER
 
 #if !TBB_USE_EXCEPTIONS && _MSC_VER
     #pragma warning (pop)
@@ -44,7 +44,7 @@
 #include "atomic.h"
 #include "tbb_exception.h"
 #include "tbb_profiling.h"
-#include "internal/_concurrent_unordered_impl.h" // Need tbb_hasher
+#include "internal/_tbb_hash_compare_impl.h"
 #if __TBB_INITIALIZER_LISTS_PRESENT
 #include <initializer_list>
 #endif
@@ -57,13 +57,6 @@
 
 namespace tbb {
 
-//! hash_compare that is default argument for concurrent_hash_map
-template<typename Key>
-struct tbb_hash_compare {
-    static size_t hash( const Key& a ) { return tbb_hasher(a); }
-    static bool equal( const Key& a, const Key& b ) { return a == b; }
-};
-
 namespace interface5 {
 
     template<typename Key, typename T, typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> > >
@@ -340,9 +333,10 @@ namespace interface5 {
 
         void advance_to_next_bucket() { // TODO?: refactor to iterator_base class
             size_t k = my_index+1;
-            while( my_bucket && k <= my_map->my_mask ) {
+            __TBB_ASSERT( my_bucket, "advancing an invalid iterator?");
+            while( k <= my_map->my_mask ) {
                 // Following test uses 2's-complement wizardry
-                if( k& (k-2) ) // not the beginning of a segment
+                if( k&(k-2) ) // not the beginning of a segment
                     ++my_bucket;
                 else my_bucket = my_map->get_bucket( k );
                 my_node = static_cast<node*>( my_bucket->node_list );
@@ -375,7 +369,7 @@ namespace interface5 {
 
     public:
         //! Construct undefined iterator
-        hash_map_iterator() {}
+        hash_map_iterator(): my_map(), my_index(), my_bucket(), my_node() {}
         hash_map_iterator( const hash_map_iterator<Container,typename Container::value_type> &other ) :
             my_map(other.my_map),
             my_index(other.my_index),
@@ -772,7 +766,7 @@ public:
     };
 
     //! Construct empty table.
-    concurrent_hash_map( const allocator_type &a = allocator_type() )
+    explicit concurrent_hash_map( const allocator_type &a = allocator_type() )
         : internal::hash_map_base(), my_allocator(a)
     {}
 
@@ -798,7 +792,7 @@ public:
         swap(table);
     }
 
-    //! Move constructor 
+    //! Move constructor
     concurrent_hash_map( concurrent_hash_map &&table, const allocator_type &a )
         : internal::hash_map_base(), my_allocator(a)
     {
@@ -1356,7 +1350,12 @@ void concurrent_hash_map<Key,T,HashCompare,A>::rehash(size_type sz) {
     if( !reported && buckets >= 512 && ( 2*empty_buckets > current_size || 2*overpopulated_buckets > current_size ) ) {
         tbb::internal::runtime_warning(
             "Performance is not optimal because the hash function produces bad randomness in lower bits in %s.\nSize: %d  Empties: %d  Overlaps: %d",
-            typeid(*this).name(), current_size, empty_buckets, overpopulated_buckets );
+#if __TBB_USE_OPTIONAL_RTTI
+            typeid(*this).name(),
+#else
+            "concurrent_hash_map",
+#endif
+            current_size, empty_buckets, overpopulated_buckets );
         reported = true;
     }
 #endif
@@ -1407,7 +1406,12 @@ void concurrent_hash_map<Key,T,HashCompare,A>::clear() {
     if( !reported && buckets >= 512 && ( 2*empty_buckets > current_size || 2*overpopulated_buckets > current_size ) ) {
         tbb::internal::runtime_warning(
             "Performance is not optimal because the hash function produces bad randomness in lower bits in %s.\nSize: %d  Empties: %d  Overlaps: %d",
-            typeid(*this).name(), current_size, empty_buckets, overpopulated_buckets );
+#if __TBB_USE_OPTIONAL_RTTI
+            typeid(*this).name(),
+#else
+            "concurrent_hash_map",
+#endif
+            current_size, empty_buckets, overpopulated_buckets );
         reported = true;
     }
 #endif
diff --git a/include/tbb/concurrent_lru_cache.h b/include/tbb/concurrent_lru_cache.h
index db50e25..8aacf24 100644
--- a/include/tbb/concurrent_lru_cache.h
+++ b/include/tbb/concurrent_lru_cache.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_concurrent_lru_cache_H
@@ -126,8 +126,8 @@ private:
         }
         static handle_move_t move(handle_object& h){
             __TBB_ASSERT(h.my_cache_pointer,"move from the same object twice ?");
-            concurrent_lru_cache * cache_pointer = NULL;
-            std::swap(cache_pointer,h.my_cache_pointer);
+            concurrent_lru_cache * cache_pointer = h.my_cache_pointer;
+            h.my_cache_pointer = NULL;
             return handle_move_t(*cache_pointer,h.my_map_record_ref);
         }
     private:
diff --git a/include/tbb/concurrent_priority_queue.h b/include/tbb/concurrent_priority_queue.h
index 3a0ad6f..89297d8 100644
--- a/include/tbb/concurrent_priority_queue.h
+++ b/include/tbb/concurrent_priority_queue.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_concurrent_priority_queue_H
@@ -30,6 +30,7 @@
 #include <vector>
 #include <iterator>
 #include <functional>
+#include __TBB_STD_SWAP_HEADER
 
 #if __TBB_INITIALIZER_LISTS_PRESENT
     #include <initializer_list>
@@ -373,7 +374,7 @@ class concurrent_priority_queue {
                     compare(data[0], data[data.size()-1])) {
                     // there are newly pushed elems and the last one
                     // is higher than top
-                    *(tmp->elem) = move(data[data.size()-1]);
+                    *(tmp->elem) = tbb::internal::move(data[data.size()-1]);
                     __TBB_store_with_release(my_size, my_size-1);
                     itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));
                     data.pop_back();
@@ -389,7 +390,7 @@ class concurrent_priority_queue {
                     if (tmp->type == PUSH_OP) {
                         push_back_helper(*(tmp->elem), typename internal::use_element_copy_constructor<value_type>::type());
                     } else {
-                        data.push_back(move(*(tmp->elem)));
+                        data.push_back(tbb::internal::move(*(tmp->elem)));
                     }
                     __TBB_store_with_release(my_size, my_size + 1);
                     itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));
@@ -413,13 +414,13 @@ class concurrent_priority_queue {
                     compare(data[0], data[data.size()-1])) {
                     // there are newly pushed elems and the last one is
                     // higher than top
-                    *(tmp->elem) = move(data[data.size()-1]);
+                    *(tmp->elem) = tbb::internal::move(data[data.size()-1]);
                     __TBB_store_with_release(my_size, my_size-1);
                     itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));
                     data.pop_back();
                 }
                 else { // extract top and push last element down heap
-                    *(tmp->elem) = move(data[0]);
+                    *(tmp->elem) = tbb::internal::move(data[0]);
                     __TBB_store_with_release(my_size, my_size-1);
                     itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));
                     reheap();
@@ -439,14 +440,14 @@ class concurrent_priority_queue {
         for (; mark<data.size(); ++mark) {
             // for each unheapified element under size
             size_type cur_pos = mark;
-            value_type to_place = move(data[mark]);
+            value_type to_place = tbb::internal::move(data[mark]);
             do { // push to_place up the heap
                 size_type parent = (cur_pos-1)>>1;
                 if (!compare(data[parent], to_place)) break;
-                data[cur_pos] = move(data[parent]);
+                data[cur_pos] = tbb::internal::move(data[parent]);
                 cur_pos = parent;
             } while( cur_pos );
-            data[cur_pos] = move(to_place);
+            data[cur_pos] = tbb::internal::move(to_place);
         }
     }
 
@@ -461,12 +462,12 @@ class concurrent_priority_queue {
                 ++target;
             // target now has the higher priority child
             if (compare(data[target], data[data.size()-1])) break;
-            data[cur_pos] = move(data[target]);
+            data[cur_pos] = tbb::internal::move(data[target]);
             cur_pos = target;
             child = (cur_pos<<1)+1;
         }
         if (cur_pos != data.size()-1)
-            data[cur_pos] = move(data[data.size()-1]);
+            data[cur_pos] = tbb::internal::move(data[data.size()-1]);
         data.pop_back();
         if (mark > data.size()) mark = data.size();
     }
diff --git a/include/tbb/concurrent_queue.h b/include/tbb/concurrent_queue.h
index 4cb0586..81db58a 100644
--- a/include/tbb/concurrent_queue.h
+++ b/include/tbb/concurrent_queue.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_concurrent_queue_H
@@ -31,7 +31,7 @@ namespace strict_ppl {
 /** Multiple threads may each push and pop concurrently.
     Assignment construction is not allowed.
     @ingroup containers */
-template<typename T, typename A = cache_aligned_allocator<T> > 
+template<typename T, typename A = cache_aligned_allocator<T> >
 class concurrent_queue: public internal::concurrent_queue_base_v3<T> {
     template<typename Container, typename Value> friend class internal::concurrent_queue_iterator;
 
@@ -40,15 +40,15 @@ class concurrent_queue: public internal::concurrent_queue_base_v3<T> {
     page_allocator_type my_allocator;
 
     //! Allocates a block of size n (bytes)
-    /*override*/ virtual void *allocate_block( size_t n ) {
+    virtual void *allocate_block( size_t n ) __TBB_override {
         void *b = reinterpret_cast<void*>(my_allocator.allocate( n ));
         if( !b )
-            internal::throw_exception(internal::eid_bad_alloc); 
+            internal::throw_exception(internal::eid_bad_alloc);
         return b;
     }
 
     //! Deallocates block created by allocate_block.
-    /*override*/ virtual void deallocate_block( void *b, size_t n ) {
+    virtual void deallocate_block( void *b, size_t n ) __TBB_override {
         my_allocator.deallocate( reinterpret_cast<char*>(b), n );
     }
 
@@ -185,10 +185,8 @@ concurrent_queue<T,A>::~concurrent_queue() {
 
 template<typename T, class A>
 void concurrent_queue<T,A>::clear() {
-    while( !empty() ) {
-        T value;
-        this->internal_try_pop(&value);
-    }
+    T value;
+    while( !empty() ) try_pop(value);
 }
 
 } // namespace strict_ppl
@@ -223,41 +221,41 @@ class concurrent_bounded_queue: public internal::concurrent_queue_base_v8 {
         return (&static_cast<padded_page*>(static_cast<void*>(&p))->last)[index];
     }
 
-    /*override*/ virtual void copy_item( page& dst, size_t index, const void* src ) {
+    virtual void copy_item( page& dst, size_t index, const void* src ) __TBB_override {
         new( &get_ref(dst,index) ) T(*static_cast<const T*>(src));
     }
 
 #if __TBB_CPP11_RVALUE_REF_PRESENT
-    /*override*/ virtual void move_item( page& dst, size_t index, const void* src ) {
+    virtual void move_item( page& dst, size_t index, const void* src ) __TBB_override {
         new( &get_ref(dst,index) ) T( std::move(*static_cast<T*>(const_cast<void*>(src))) );
     }
 #else
-    /*override*/ virtual void move_item( page&, size_t, const void* ) {
+    virtual void move_item( page&, size_t, const void* ) __TBB_override {
         __TBB_ASSERT( false, "Unreachable code" );
     }
 #endif
 
-    /*override*/ virtual void copy_page_item( page& dst, size_t dindex, const page& src, size_t sindex ) {
+    virtual void copy_page_item( page& dst, size_t dindex, const page& src, size_t sindex ) __TBB_override {
         new( &get_ref(dst,dindex) ) T( get_ref( const_cast<page&>(src), sindex ) );
     }
 
 #if __TBB_CPP11_RVALUE_REF_PRESENT
-    /*override*/ virtual void move_page_item( page& dst, size_t dindex, const page& src, size_t sindex ) {
+    virtual void move_page_item( page& dst, size_t dindex, const page& src, size_t sindex ) __TBB_override {
         new( &get_ref(dst,dindex) ) T( std::move(get_ref( const_cast<page&>(src), sindex )) );
     }
 #else
-    /*override*/ virtual void move_page_item( page&, size_t, const page&, size_t ) {
+    virtual void move_page_item( page&, size_t, const page&, size_t ) __TBB_override {
         __TBB_ASSERT( false, "Unreachable code" );
     }
 #endif
 
-    /*override*/ virtual void assign_and_destroy_item( void* dst, page& src, size_t index ) {
+    virtual void assign_and_destroy_item( void* dst, page& src, size_t index ) __TBB_override {
         T& from = get_ref(src,index);
         destroyer d(from);
         *static_cast<T*>(dst) = tbb::internal::move( from );
     }
 
-    /*override*/ virtual page *allocate_page() {
+    virtual page *allocate_page() __TBB_override {
         size_t n = sizeof(padded_page) + (items_per_page-1)*sizeof(T);
         page *p = reinterpret_cast<page*>(my_allocator.allocate( n ));
         if( !p )
@@ -265,7 +263,7 @@ class concurrent_bounded_queue: public internal::concurrent_queue_base_v8 {
         return p;
     }
 
-    /*override*/ virtual void deallocate_page( page *p ) {
+    virtual void deallocate_page( page *p ) __TBB_override {
         size_t n = sizeof(padded_page) + (items_per_page-1)*sizeof(T);
         my_allocator.deallocate( reinterpret_cast<char*>(p), n );
     }
@@ -292,7 +290,7 @@ public:
     typedef std::ptrdiff_t difference_type;
 
     //! Construct empty queue
-    explicit concurrent_bounded_queue(const allocator_type& a = allocator_type()) : 
+    explicit concurrent_bounded_queue(const allocator_type& a = allocator_type()) :
         concurrent_queue_base_v8( sizeof(T) ), my_allocator( a )
     {
     }
@@ -402,8 +400,8 @@ public:
     }
 
     //! Return number of pushes minus number of pops.
-    /** Note that the result can be negative if there are pops waiting for the 
-        corresponding pushes.  The result can also exceed capacity() if there 
+    /** Note that the result can be negative if there are pops waiting for the
+        corresponding pushes.  The result can also exceed capacity() if there
         are push operations in flight. */
     size_type size() const {return internal_size();}
 
@@ -439,7 +437,7 @@ public:
     const_iterator unsafe_begin() const {return const_iterator(*this);}
     const_iterator unsafe_end() const {return const_iterator();}
 
-}; 
+};
 
 template<typename T, class A>
 concurrent_bounded_queue<T,A>::~concurrent_bounded_queue() {
@@ -449,10 +447,8 @@ concurrent_bounded_queue<T,A>::~concurrent_bounded_queue() {
 
 template<typename T, class A>
 void concurrent_bounded_queue<T,A>::clear() {
-    while( !empty() ) {
-        T value;
-        internal_pop_if_present(&value);
-    }
+    T value;
+    while( try_pop(value) ) /*noop*/;
 }
 
 using strict_ppl::concurrent_queue;
diff --git a/include/tbb/concurrent_unordered_map.h b/include/tbb/concurrent_unordered_map.h
index ab97b3e..c959a7e 100644
--- a/include/tbb/concurrent_unordered_map.h
+++ b/include/tbb/concurrent_unordered_map.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /* Container implementations in this header are based on PPL implementations
@@ -45,22 +45,6 @@ protected:
     concurrent_unordered_map_traits() : my_hash_compare() {}
     concurrent_unordered_map_traits(const hash_compare& hc) : my_hash_compare(hc) {}
 
-    class value_compare : public std::binary_function<value_type, value_type, bool>
-    {
-        friend class concurrent_unordered_map_traits<Key, T, Hash_compare, Allocator, Allow_multimapping>;
-
-    public:
-        bool operator()(const value_type& left, const value_type& right) const
-        {
-            return (my_hash_compare(left.first, right.first));
-        }
-
-        value_compare(const hash_compare& comparator) : my_hash_compare(comparator) {}
-
-    protected:
-        hash_compare my_hash_compare;    // the comparator predicate for keys
-    };
-
     template<class Type1, class Type2>
     static const Key& get_key(const std::pair<Type1, Type2>& value) {
         return (value.first);
@@ -115,12 +99,10 @@ public:
         const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),
         const allocator_type& a = allocator_type())
         : base_type(n_of_buckets, key_compare(_Hasher, _Key_equality), a)
-    {
-    }
+    {}
 
-    concurrent_unordered_map(const Allocator& a) : base_type(base_type::initial_bucket_number, key_compare(), a)
-    {
-    }
+    explicit concurrent_unordered_map(const Allocator& a) : base_type(base_type::initial_bucket_number, key_compare(), a)
+    {}
 
     template <typename Iterator>
     concurrent_unordered_map(Iterator first, Iterator last, size_type n_of_buckets = base_type::initial_bucket_number,
@@ -142,11 +124,11 @@ public:
     }
 #endif //# __TBB_INITIALIZER_LISTS_PRESENT
 
-#if __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_IMPLICIT_MOVE_MEMBERS_GENERATION_FOR_DERIVED_BROKEN
+#if __TBB_CPP11_RVALUE_REF_PRESENT
+#if !__TBB_IMPLICIT_MOVE_PRESENT
     concurrent_unordered_map(const concurrent_unordered_map& table)
         : base_type(table)
-    {
-    }
+    {}
 
     concurrent_unordered_map& operator=(const concurrent_unordered_map& table)
     {
@@ -155,25 +137,22 @@ public:
 
     concurrent_unordered_map(concurrent_unordered_map&& table)
         : base_type(std::move(table))
-    {
-    }
+    {}
 
     concurrent_unordered_map& operator=(concurrent_unordered_map&& table)
     {
         return static_cast<concurrent_unordered_map&>(base_type::operator=(std::move(table)));
     }
-#endif //__TBB_CPP11_IMPLICIT_MOVE_MEMBERS_GENERATION_FOR_DERIVED_BROKEN
+#endif //!__TBB_IMPLICIT_MOVE_PRESENT
+
+    concurrent_unordered_map(concurrent_unordered_map&& table, const Allocator& a) : base_type(std::move(table), a)
+    {}
+#endif //__TBB_CPP11_RVALUE_REF_PRESENT
 
     concurrent_unordered_map(const concurrent_unordered_map& table, const Allocator& a)
         : base_type(table, a)
-    {
-    }
+    {}
 
-#if __TBB_CPP11_RVALUE_REF_PRESENT
-    concurrent_unordered_map(concurrent_unordered_map&& table, const Allocator& a) : base_type(std::move(table), a)
-    {
-    }
-#endif
     // Observers
     mapped_type& operator[](const key_type& key)
     {
@@ -256,12 +235,10 @@ public:
         const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),
         const allocator_type& a = allocator_type())
         : base_type(n_of_buckets, key_compare(_Hasher, _Key_equality), a)
-    {
-    }
+    {}
 
-    concurrent_unordered_multimap(const Allocator& a) : base_type(base_type::initial_bucket_number, key_compare(), a)
-    {
-    }
+    explicit concurrent_unordered_multimap(const Allocator& a) : base_type(base_type::initial_bucket_number, key_compare(), a)
+    {}
 
     template <typename Iterator>
     concurrent_unordered_multimap(Iterator first, Iterator last, size_type n_of_buckets = base_type::initial_bucket_number,
@@ -283,11 +260,11 @@ public:
     }
 #endif //# __TBB_INITIALIZER_LISTS_PRESENT
 
-#if __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_IMPLICIT_MOVE_MEMBERS_GENERATION_FOR_DERIVED_BROKEN
+#if __TBB_CPP11_RVALUE_REF_PRESENT
+#if !__TBB_IMPLICIT_MOVE_PRESENT
     concurrent_unordered_multimap(const concurrent_unordered_multimap& table)
         : base_type(table)
-    {
-    }
+    {}
 
     concurrent_unordered_multimap& operator=(const concurrent_unordered_multimap& table)
     {
@@ -296,25 +273,21 @@ public:
 
     concurrent_unordered_multimap(concurrent_unordered_multimap&& table)
         : base_type(std::move(table))
-    {
-    }
+    {}
 
     concurrent_unordered_multimap& operator=(concurrent_unordered_multimap&& table)
     {
         return static_cast<concurrent_unordered_multimap&>(base_type::operator=(std::move(table)));
     }
-#endif //__TBB_CPP11_IMPLICIT_MOVE_MEMBERS_GENERATION_FOR_DERIVED_BROKEN
+#endif //!__TBB_IMPLICIT_MOVE_PRESENT
+
+    concurrent_unordered_multimap(concurrent_unordered_multimap&& table, const Allocator& a) : base_type(std::move(table), a)
+    {}
+#endif //__TBB_CPP11_RVALUE_REF_PRESENT
 
     concurrent_unordered_multimap(const concurrent_unordered_multimap& table, const Allocator& a)
         : base_type(table, a)
-    {
-    }
-
-#if __TBB_CPP11_RVALUE_REF_PRESENT
-    concurrent_unordered_multimap(concurrent_unordered_multimap&& table, const Allocator& a) : base_type(std::move(table), a)
-    {
-    }
-#endif
+    {}
 };
 } // namespace interface5
 
diff --git a/include/tbb/concurrent_unordered_set.h b/include/tbb/concurrent_unordered_set.h
index 0d0df90..a26fee1 100644
--- a/include/tbb/concurrent_unordered_set.h
+++ b/include/tbb/concurrent_unordered_set.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /* Container implementations in this header are based on PPL implementations
@@ -45,8 +45,6 @@ protected:
     concurrent_unordered_set_traits() : my_hash_compare() {}
     concurrent_unordered_set_traits(const hash_compare& hc) : my_hash_compare(hc) {}
 
-    typedef hash_compare value_compare;
-
     static const Key& get_key(const value_type& value) {
         return value;
     }
@@ -59,8 +57,8 @@ class concurrent_unordered_set : public internal::concurrent_unordered_base< con
 {
     // Base type definitions
     typedef internal::hash_compare<Key, Hasher, Key_equality> hash_compare;
-    typedef internal::concurrent_unordered_base< concurrent_unordered_set_traits<Key, hash_compare, Allocator, false> > base_type;
-    typedef concurrent_unordered_set_traits<Key, internal::hash_compare<Key, Hasher, Key_equality>, Allocator, false> traits_type;
+    typedef concurrent_unordered_set_traits<Key, hash_compare, Allocator, false> traits_type;
+    typedef internal::concurrent_unordered_base< traits_type > base_type;
 #if __TBB_EXTRA_DEBUG
 public:
 #endif
@@ -94,12 +92,10 @@ public:
     explicit concurrent_unordered_set(size_type n_of_buckets = base_type::initial_bucket_number, const hasher& a_hasher = hasher(),
         const key_equal& a_keyeq = key_equal(), const allocator_type& a = allocator_type())
         : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)
-    {
-    }
+    {}
 
-    concurrent_unordered_set(const Allocator& a) : base_type(base_type::initial_bucket_number, key_compare(), a)
-    {
-    }
+    explicit concurrent_unordered_set(const Allocator& a) : base_type(base_type::initial_bucket_number, key_compare(), a)
+    {}
 
     template <typename Iterator>
     concurrent_unordered_set(Iterator first, Iterator last, size_type n_of_buckets = base_type::initial_bucket_number, const hasher& a_hasher = hasher(),
@@ -111,7 +107,7 @@ public:
 
 #if __TBB_INITIALIZER_LISTS_PRESENT
     //! Constructor from initializer_list
-   concurrent_unordered_set(std::initializer_list<value_type> il, size_type n_of_buckets = base_type::initial_bucket_number, const hasher& a_hasher = hasher(),
+    concurrent_unordered_set(std::initializer_list<value_type> il, size_type n_of_buckets = base_type::initial_bucket_number, const hasher& a_hasher = hasher(),
         const key_equal& a_keyeq = key_equal(), const allocator_type& a = allocator_type())
         : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)
     {
@@ -119,11 +115,11 @@ public:
     }
 #endif //# __TBB_INITIALIZER_LISTS_PRESENT
 
-#if __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_IMPLICIT_MOVE_MEMBERS_GENERATION_FOR_DERIVED_BROKEN
+#if __TBB_CPP11_RVALUE_REF_PRESENT
+#if !__TBB_IMPLICIT_MOVE_PRESENT
     concurrent_unordered_set(const concurrent_unordered_set& table)
         : base_type(table)
-    {
-    }
+    {}
 
     concurrent_unordered_set& operator=(const concurrent_unordered_set& table)
     {
@@ -132,27 +128,23 @@ public:
 
     concurrent_unordered_set(concurrent_unordered_set&& table)
         : base_type(std::move(table))
-    {
-    }
+    {}
 
     concurrent_unordered_set& operator=(concurrent_unordered_set&& table)
     {
         return static_cast<concurrent_unordered_set&>(base_type::operator=(std::move(table)));
     }
-#endif //__TBB_CPP11_IMPLICIT_MOVE_MEMBERS_GENERATION_FOR_DERIVED_BROKEN
+#endif //!__TBB_IMPLICIT_MOVE_PRESENT
 
-    concurrent_unordered_set(const concurrent_unordered_set& table, const Allocator& a)
-        : base_type(table, a)
-    {
-    }
-
-#if __TBB_CPP11_RVALUE_REF_PRESENT
     concurrent_unordered_set(concurrent_unordered_set&& table, const Allocator& a)
         : base_type(std::move(table), a)
-    {
-    }
+    {}
 #endif //__TBB_CPP11_RVALUE_REF_PRESENT
 
+    concurrent_unordered_set(const concurrent_unordered_set& table, const Allocator& a)
+        : base_type(table, a)
+    {}
+
 };
 
 template <typename Key, typename Hasher = tbb::tbb_hash<Key>, typename Key_equality = std::equal_to<Key>,
@@ -199,12 +191,10 @@ public:
         const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),
         const allocator_type& a = allocator_type())
         : base_type(n_of_buckets, key_compare(_Hasher, _Key_equality), a)
-    {
-    }
+    {}
 
-    concurrent_unordered_multiset(const Allocator& a) : base_type(base_type::initial_bucket_number, key_compare(), a)
-    {
-    }
+    explicit concurrent_unordered_multiset(const Allocator& a) : base_type(base_type::initial_bucket_number, key_compare(), a)
+    {}
 
     template <typename Iterator>
     concurrent_unordered_multiset(Iterator first, Iterator last, size_type n_of_buckets = base_type::initial_bucket_number,
@@ -217,47 +207,44 @@ public:
 
 #if __TBB_INITIALIZER_LISTS_PRESENT
     //! Constructor from initializer_list
-   concurrent_unordered_multiset(std::initializer_list<value_type> il, size_type n_of_buckets = base_type::initial_bucket_number, const hasher& a_hasher = hasher(),
+    concurrent_unordered_multiset(std::initializer_list<value_type> il, size_type n_of_buckets = base_type::initial_bucket_number, const hasher& a_hasher = hasher(),
         const key_equal& a_keyeq = key_equal(), const allocator_type& a = allocator_type())
         : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)
     {
         this->insert(il.begin(),il.end());
     }
-#endif //# __TBB_INITIALIZER_LISTS_PRESENT    
+#endif //# __TBB_INITIALIZER_LISTS_PRESENT
 
-#if __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_IMPLICIT_MOVE_MEMBERS_GENERATION_FOR_DERIVED_BROKEN
-   concurrent_unordered_multiset(const concurrent_unordered_multiset& table)
+#if __TBB_CPP11_RVALUE_REF_PRESENT
+#if !__TBB_IMPLICIT_MOVE_PRESENT
+    concurrent_unordered_multiset(const concurrent_unordered_multiset& table)
         : base_type(table)
-    {
-    }
+    {}
 
-   concurrent_unordered_multiset& operator=(const concurrent_unordered_multiset& table)
+    concurrent_unordered_multiset& operator=(const concurrent_unordered_multiset& table)
     {
         return static_cast<concurrent_unordered_multiset&>(base_type::operator=(table));
     }
 
-   concurrent_unordered_multiset(concurrent_unordered_multiset&& table)
+    concurrent_unordered_multiset(concurrent_unordered_multiset&& table)
         : base_type(std::move(table))
-    {
-    }
+    {}
 
-   concurrent_unordered_multiset& operator=(concurrent_unordered_multiset&& table)
+    concurrent_unordered_multiset& operator=(concurrent_unordered_multiset&& table)
     {
         return static_cast<concurrent_unordered_multiset&>(base_type::operator=(std::move(table)));
     }
-#endif //__TBB_CPP11_IMPLICIT_MOVE_MEMBERS_GENERATION_FOR_DERIVED_BROKEN
-
-    concurrent_unordered_multiset(const concurrent_unordered_multiset& table, const Allocator& a)
-        : base_type(table, a)
-    {
-    }
+#endif //!__TBB_IMPLICIT_MOVE_PRESENT
 
-#if __TBB_CPP11_RVALUE_REF_PRESENT
     concurrent_unordered_multiset(concurrent_unordered_multiset&& table, const Allocator& a)
         : base_type(std::move(table), a)
     {
     }
 #endif //__TBB_CPP11_RVALUE_REF_PRESENT
+
+    concurrent_unordered_multiset(const concurrent_unordered_multiset& table, const Allocator& a)
+        : base_type(table, a)
+    {}
 };
 } // namespace interface5
 
diff --git a/include/tbb/concurrent_vector.h b/include/tbb/concurrent_vector.h
index 80d56f6..370129e 100644
--- a/include/tbb/concurrent_vector.h
+++ b/include/tbb/concurrent_vector.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_concurrent_vector_H
@@ -30,6 +30,7 @@
 #include "tbb_profiling.h"
 #include <new>
 #include <cstring>   // for memset()
+#include __TBB_STD_SWAP_HEADER
 
 #if !TBB_USE_EXCEPTIONS && _MSC_VER
     // Suppress "C++ exception handler used, but unwind semantics are not enabled" warning in STL headers
@@ -72,19 +73,19 @@ namespace tbb {
 template<typename T, class A = cache_aligned_allocator<T> >
 class concurrent_vector;
 
-template<typename Container, typename Value>
-class vector_iterator;
-
 //! @cond INTERNAL
 namespace internal {
 
+    template<typename Container, typename Value>
+    class vector_iterator;
+
     //! Bad allocation marker
     static void *const vector_allocation_error_flag = reinterpret_cast<void*>(size_t(63));
 
     //! Exception helper function
     template<typename T>
     void handle_unconstructed_elements(T* array, size_t n_of_elements){
-        std::memset(array, 0, n_of_elements * sizeof(T));
+        std::memset( array, 0, n_of_elements * sizeof( T ) );
     }
 
     //! Base class of concurrent vector implementation.
@@ -127,6 +128,12 @@ namespace internal {
             T* pointer() const {  return static_cast<T*>(const_cast<void*>(array)); }
         };
 
+        friend void enforce_segment_allocated(segment_value_t const& s, internal::exception_id exception = eid_bad_last_alloc){
+            if(s != segment_allocated()){
+                internal::throw_exception(exception);
+            }
+        }
+
         // Segment pointer.
         class segment_t {
             atomic<void*> array;
@@ -239,7 +246,7 @@ namespace internal {
             //and 2 is the minimal index for which it's true
             __TBB_ASSERT(element_index, "there should be no need to call "
                                         "is_first_element_in_segment for 0th element" );
-            return is_power_of_two_factor( element_index, 2 );
+            return is_power_of_two_at_least( element_index, 2 );
         }
 
         //! An operation on an n-element array starting at begin.
@@ -1153,8 +1160,9 @@ private:
 
         pointer internal_push_back_result(){ return g.element;}
         iterator return_iterator_and_dismiss(){
+            pointer ptr = g.element;
             g.dismiss();
-            return iterator(v, k, g.element);
+            return iterator(v, k, ptr);
         }
     };
 };
@@ -1235,8 +1243,7 @@ T& concurrent_vector<T, A>::internal_subscript_with_exceptions( size_type index
     //TODO: why not make a load of my_segment relaxed as well ?
     //TODO: add an assertion that my_segment[k] is properly aligned to please ITT
     segment_value_t segment_value =  my_segment[k].template load<relaxed>();
-    if( segment_value != segment_allocated() ) // check for correct segment pointer
-        internal::throw_exception(internal::eid_index_range_error); // throw std::range_error
+    enforce_segment_allocated(segment_value, internal::eid_index_range_error);
     return (segment_value.pointer<T>())[j];
 }
 
diff --git a/include/tbb/critical_section.h b/include/tbb/critical_section.h
index 973dd48..324b3e1 100644
--- a/include/tbb/critical_section.h
+++ b/include/tbb/critical_section.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef _TBB_CRITICAL_SECTION_H_
@@ -48,7 +48,7 @@ public:
 
     void __TBB_EXPORTED_METHOD internal_construct();
 
-    critical_section_v4() { 
+    critical_section_v4() {
 #if _WIN32||_WIN64
         InitializeCriticalSectionEx( &my_impl, 4000, 0 );
 #else
@@ -60,7 +60,7 @@ public:
     ~critical_section_v4() {
         __TBB_ASSERT(my_tid == tbb_thread::id(), "Destroying a still-held critical section");
 #if _WIN32||_WIN64
-        DeleteCriticalSection(&my_impl); 
+        DeleteCriticalSection(&my_impl);
 #else
         pthread_mutex_destroy(&my_impl);
 #endif
@@ -79,7 +79,7 @@ public:
         }
     };
 
-    void lock() { 
+    void lock() {
         tbb_thread::id local_tid = this_tbb_thread::get_id();
         if(local_tid == my_tid) throw_exception( eid_improper_lock );
 #if _WIN32||_WIN64
diff --git a/include/tbb/enumerable_thread_specific.h b/include/tbb/enumerable_thread_specific.h
index 3fca9e3..f31f533 100644
--- a/include/tbb/enumerable_thread_specific.h
+++ b/include/tbb/enumerable_thread_specific.h
@@ -1,33 +1,35 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_enumerable_thread_specific_H
 #define __TBB_enumerable_thread_specific_H
 
+#include "atomic.h"
 #include "concurrent_vector.h"
 #include "tbb_thread.h"
 #include "tbb_allocator.h"
-#include "tbb_profiling.h"
 #include "cache_aligned_allocator.h"
 #include "aligned_space.h"
 #include "internal/_template_helpers.h"
+#include "internal/_tbb_hash_compare_impl.h"
+#include "tbb_profiling.h"
 #include <string.h>  // for memcpy
 
 #if _WIN32||_WIN64
@@ -59,11 +61,7 @@ namespace interface6 {
         template<ets_key_usage_type ETS_key_type>
         class ets_base: tbb::internal::no_copy {
         protected:
-#if _WIN32||_WIN64
-            typedef DWORD key_type;
-#else
-            typedef pthread_t key_type;
-#endif
+            typedef tbb_thread::id key_type;
 #if __TBB_PROTECTED_NESTED_CLASS_BROKEN
         public:
 #endif
@@ -75,7 +73,7 @@ namespace interface6 {
                 slot& at( size_t k ) {
                     return ((slot*)(void*)(this+1))[k];
                 }
-                size_t size() const {return (size_t)1<<lg_size;}
+                size_t size() const {return size_t(1)<<lg_size;}
                 size_t mask() const {return size()-1;}
                 size_t start( size_t h ) const {
                     return h>>(8*sizeof(size_t)-lg_size);
@@ -84,26 +82,17 @@ namespace interface6 {
             struct slot {
                 key_type key;
                 void* ptr;
-                bool empty() const {return !key;}
-                bool match( key_type k ) const {return key==k;}
+                bool empty() const {return key == key_type();}
+                bool match( key_type k ) const {return key == k;}
                 bool claim( key_type k ) {
-                    __TBB_ASSERT(sizeof(tbb::atomic<key_type>)==sizeof(key_type), NULL);
-                    // TODO: maybe claim ptr, because key_type is not guaranteed to match word size
-                    return tbb::internal::punned_cast<tbb::atomic<key_type>*>(&key)->compare_and_swap(k,0)==0;
+                    // TODO: maybe claim ptr, because key_type is not guaranteed to fit into word size
+                    return atomic_compare_and_swap(key, k, key_type()) == key_type();
                 }
             };
 #if __TBB_PROTECTED_NESTED_CLASS_BROKEN
         protected:
 #endif
 
-            static key_type key_of_current_thread() {
-               // TODO: replace key_type with tbb::tbb_thread::id
-               tbb::tbb_thread::id id = tbb::this_tbb_thread::get_id();
-               key_type k;
-               memcpy( &k, &id, sizeof(k) );
-               return k;
-            }
-
             //! Root of linked list of arrays of decreasing size.
             /** NULL if and only if my_count==0.
                 Each array in the list is half the size of its predecessor. */
@@ -113,49 +102,55 @@ namespace interface6 {
             virtual void* create_array(size_t _size) = 0;  // _size in bytes
             virtual void free_array(void* ptr, size_t _size) = 0; // _size in bytes
             array* allocate( size_t lg_size ) {
-                size_t n = 1<<lg_size;
+                size_t n = size_t(1)<<lg_size;
                 array* a = static_cast<array*>(create_array( sizeof(array)+n*sizeof(slot) ));
                 a->lg_size = lg_size;
                 std::memset( a+1, 0, n*sizeof(slot) );
                 return a;
             }
             void free(array* a) {
-                size_t n = 1<<(a->lg_size);
+                size_t n = size_t(1)<<(a->lg_size);
                 free_array( (void *)a, size_t(sizeof(array)+n*sizeof(slot)) );
             }
-            static size_t hash( key_type k ) {
-                // Multiplicative hashing.  Client should use *upper* bits.
-                // casts required for Mac gcc4.* compiler
-                // TODO: casting of key_type to uintptr_t is not portable; implement and use hashing of thread::id
-                return uintptr_t(k)*tbb::internal::select_size_t_constant<0x9E3779B9,0x9E3779B97F4A7C15ULL>::value;
-            }
 
             ets_base() {my_root=NULL; my_count=0;}
-            virtual ~ets_base();  // g++ complains if this is not virtual...
+            virtual ~ets_base();  // g++ complains if this is not virtual
             void* table_lookup( bool& exists );
             void table_clear();
-            // table_find is used in copying ETS, so is not used in concurrent context.  So
-            // we don't need itt annotations for it.
-            slot& table_find( key_type k ) {
-                size_t h = hash(k);
-                array* r = my_root;
-                size_t mask = r->mask();
-                for(size_t i = r->start(h);;i=(i+1)&mask) {
-                    slot& s = r->at(i);
-                    if( s.empty() || s.match(k) )
-                        return s;
-                }
-            }
-            void table_reserve_for_copy( const ets_base& other ) {
+            // The following functions are not used in concurrent context,
+            // so we don't need synchronization and ITT annotations there.
+            void table_elementwise_copy( const ets_base& other,
+                                         void*(*add_element)(ets_base&, void*) ) {
                 __TBB_ASSERT(!my_root,NULL);
                 __TBB_ASSERT(!my_count,NULL);
-                if( other.my_root ) {
-                    array* a = allocate(other.my_root->lg_size);
-                    a->next = NULL;
-                    my_root = a;
-                    my_count = other.my_count;
+                if( !other.my_root ) return;
+                array* root = my_root = allocate(other.my_root->lg_size);
+                root->next = NULL;
+                my_count = other.my_count;
+                size_t mask = root->mask();
+                for( array* r=other.my_root; r; r=r->next ) {
+                    for( size_t i=0; i<r->size(); ++i ) {
+                        slot& s1 = r->at(i);
+                        if( !s1.empty() ) {
+                            for( size_t j = root->start(tbb::tbb_hash<key_type>()(s1.key)); ; j=(j+1)&mask ) {
+                                slot& s2 = root->at(j);
+                                if( s2.empty() ) {
+                                    s2.ptr = add_element(*this, s1.ptr);
+                                    s2.key = s1.key;
+                                    break;
+                                }
+                                else if( s2.match(s1.key) )
+                                    break;
+                            }
+                        }
+                    }
                 }
             }
+            void table_swap( ets_base& other ) {
+               __TBB_ASSERT(this!=&other, "Don't swap an instance with itself");
+               tbb::internal::swap<relaxed>(my_root, other.my_root);
+               tbb::internal::swap<relaxed>(my_count, other.my_count);
+            }
         };
 
         template<ets_key_usage_type ETS_key_type>
@@ -174,11 +169,11 @@ namespace interface6 {
 
         template<ets_key_usage_type ETS_key_type>
         void* ets_base<ETS_key_type>::table_lookup( bool& exists ) {
-            const key_type k = key_of_current_thread();
+            const key_type k = tbb::this_tbb_thread::get_id();
 
-            __TBB_ASSERT(k!=0,NULL);
+            __TBB_ASSERT(k != key_type(),NULL);
             void* found;
-            size_t h = hash(k);
+            size_t h = tbb::tbb_hash<key_type>()(k);
             for( array* r=my_root; r; r=r->next ) {
                 call_itt_notify(acquired,r);
                 size_t mask=r->mask();
@@ -271,10 +266,10 @@ namespace interface6 {
             void* get_tls() const { return pthread_getspecific(my_key); }
 #endif
             tls_key_t my_key;
-            virtual void* create_local() = 0;
-            virtual void* create_array(size_t _size) = 0;  // _size in bytes
-            virtual void free_array(void* ptr, size_t _size) = 0; // size in bytes
-        public:
+            virtual void* create_local() __TBB_override = 0;
+            virtual void* create_array(size_t _size) __TBB_override = 0;  // _size in bytes
+            virtual void free_array(void* ptr, size_t _size) __TBB_override = 0; // size in bytes
+        protected:
             ets_base() {create_key();}
             ~ets_base() {destroy_key();}
             void* table_lookup( bool& exists ) {
@@ -292,6 +287,12 @@ namespace interface6 {
                 create_key();
                 super::table_clear();
             }
+            void table_swap( ets_base& other ) {
+               using std::swap;
+               __TBB_ASSERT(this!=&other, "Don't swap an instance with itself");
+               swap(my_key, other.my_key);
+               super::table_swap(other);
+            }
         };
 
         //! Random access iterator for traversing the thread local copies.
@@ -309,8 +310,8 @@ namespace interface6 {
             mutable Value *my_value;
 
             template<typename C, typename T>
-            friend enumerable_thread_specific_iterator<C,T> operator+( ptrdiff_t offset,
-                                                                       const enumerable_thread_specific_iterator<C,T>& v );
+            friend enumerable_thread_specific_iterator<C,T>
+            operator+( ptrdiff_t offset, const enumerable_thread_specific_iterator<C,T>& v );
 
             template<typename C, typename T, typename U>
             friend bool operator==( const enumerable_thread_specific_iterator<C,T>& i,
@@ -321,7 +322,8 @@ namespace interface6 {
                                    const enumerable_thread_specific_iterator<C,U>& j );
 
             template<typename C, typename T, typename U>
-            friend ptrdiff_t operator-( const enumerable_thread_specific_iterator<C,T>& i, const enumerable_thread_specific_iterator<C,U>& j );
+            friend ptrdiff_t operator-( const enumerable_thread_specific_iterator<C,T>& i,
+                                        const enumerable_thread_specific_iterator<C,U>& j );
 
             template<typename C, typename U>
             friend class enumerable_thread_specific_iterator;
@@ -410,8 +412,8 @@ namespace interface6 {
         };
 
         template<typename Container, typename T>
-        enumerable_thread_specific_iterator<Container,T> operator+( ptrdiff_t offset,
-                                                                    const enumerable_thread_specific_iterator<Container,T>& v ) {
+        enumerable_thread_specific_iterator<Container,T>
+        operator+( ptrdiff_t offset, const enumerable_thread_specific_iterator<Container,T>& v ) {
             return enumerable_thread_specific_iterator<Container,T>( v.my_container, v.my_index + offset );
         }
 
@@ -634,9 +636,10 @@ namespace interface6 {
             }
             construct_by_args( P&& ... args ) : pack(std::forward<P>(args)...) {}
         };
-#endif 
+#endif
 
         // storage for initialization function pointer
+        // TODO: consider removing the template parameter T here and in callback_leaf
         template<typename T>
         class callback_base {
         public:
@@ -657,19 +660,19 @@ namespace interface6 {
 #else
             template<typename X> callback_leaf( const X& x ) : Constructor(x) {}
 #endif
-
+            // TODO: make the construction/destruction consistent (use allocator.construct/destroy)
             typedef typename tbb::tbb_allocator<callback_leaf> my_allocator_type;
 
-            /*override*/ callback_base<T>* clone() const {
+            callback_base<T>* clone() const __TBB_override {
                 return make(*this);
             }
 
-            /*override*/ void destroy() {
+            void destroy() __TBB_override {
                 my_allocator_type().destroy(this);
                 my_allocator_type().deallocate(this,1);
             }
 
-            /*override*/ void construct(void* where) {
+            void construct(void* where) __TBB_override {
                 Constructor::construct(where);
             }
         public:
@@ -694,22 +697,22 @@ namespace interface6 {
             vector is deleted.
 
             The flag is_built is initialized to false.  When the local is
-            successfully-constructed, set the flag to true.  If the constructor
-            throws, the flag will be false.
+            successfully-constructed, set the flag to true or call value_committed().
+            If the constructor throws, the flag will be false.
         */
         template<typename U>
         struct ets_element {
             tbb::aligned_space<U> my_space;
             bool is_built;
             ets_element() { is_built = false; }  // not currently-built
-            U *value() { return my_space.begin(); }
-            void unconstruct() { 
+            U* value() { return my_space.begin(); }
+            U* value_committed() { is_built = true; return my_space.begin(); }
+            ~ets_element() {
                 if(is_built) {
                     my_space.begin()->~U();
                     is_built = false;
                 }
             }
-            ~ets_element() {unconstruct();}
         };
 
         // A predicate that can be used for a compile-time compatibility check of ETS instances
@@ -788,28 +791,39 @@ namespace interface6 {
 
         internal_collection_type my_locals;
 
-        /*override*/ void* create_local() {
-            padded_element* lref = &*my_locals.grow_by(1);
-            my_construct_callback->construct(lref->value());
-            lref->is_built = true;
-            return lref;
+        // TODO: consider unifying the callback mechanism for all create_local* methods below
+        //   (likely non-compatible and requires interface version increase)
+        void* create_local() __TBB_override {
+            padded_element& lref = *my_locals.grow_by(1);
+            my_construct_callback->construct(lref.value());
+            return lref.value_committed();
         }
 
-        void unconstruct_locals() {
-            for(typename internal_collection_type::iterator cvi = my_locals.begin(); cvi != my_locals.end(); ++cvi) {
-                cvi->unconstruct();
-            }
+        static void* create_local_by_copy( internal::ets_base<ets_no_key>& base, void* p ) {
+            enumerable_thread_specific& ets = static_cast<enumerable_thread_specific&>(base);
+            padded_element& lref = *ets.my_locals.grow_by(1);
+            new(lref.value()) T(*static_cast<T*>(p));
+            return lref.value_committed();
         }
 
+#if __TBB_ETS_USE_CPP11
+        static void* create_local_by_move( internal::ets_base<ets_no_key>& base, void* p ) {
+            enumerable_thread_specific& ets = static_cast<enumerable_thread_specific&>(base);
+            padded_element& lref = *ets.my_locals.grow_by(1);
+            new(lref.value()) T(std::move(*static_cast<T*>(p)));
+            return lref.value_committed();
+        }
+#endif
+
         typedef typename Allocator::template rebind< uintptr_t >::other array_allocator_type;
 
         // _size is in bytes
-        /*override*/ void* create_array(size_t _size) {
+        void* create_array(size_t _size) __TBB_override {
             size_t nelements = (_size + sizeof(uintptr_t) -1) / sizeof(uintptr_t);
             return array_allocator_type().allocate(nelements);
         }
 
-        /*override*/ void free_array( void* _ptr, size_t _size) {
+        void free_array( void* _ptr, size_t _size) __TBB_override {
             size_t nelements = (_size + sizeof(uintptr_t) -1) / sizeof(uintptr_t);
             array_allocator_type().deallocate( reinterpret_cast<uintptr_t *>(_ptr),nelements);
         }
@@ -845,17 +859,17 @@ namespace interface6 {
                   , typename = typename internal::enable_if<internal::is_callable_no_args<typename internal::strip<Finit>::type>::value>::type
 #endif
         >
-        enumerable_thread_specific( Finit finit ) : my_construct_callback(
+        explicit enumerable_thread_specific( Finit finit ) : my_construct_callback(
             internal::callback_leaf<T,internal::construct_by_finit<T,Finit> >::make( tbb::internal::move(finit) )
         ){}
 
         //! Constructor with exemplar. Each local instance of T is copy-constructed from the exemplar.
-        enumerable_thread_specific( const T& exemplar ) : my_construct_callback(
+        explicit enumerable_thread_specific( const T& exemplar ) : my_construct_callback(
             internal::callback_leaf<T,internal::construct_by_exemplar<T> >::make( exemplar )
         ){}
 
 #if __TBB_ETS_USE_CPP11
-        enumerable_thread_specific( T&& exemplar ) : my_construct_callback(
+        explicit enumerable_thread_specific( T&& exemplar ) : my_construct_callback(
             internal::callback_leaf<T,internal::construct_by_exemplar<T> >::make( std::move(exemplar) )
         ){}
 
@@ -872,9 +886,9 @@ namespace interface6 {
 
         //! Destructor
         ~enumerable_thread_specific() {
-            my_construct_callback->destroy();
-            this->clear();  // deallocation before the derived class is finished destructing
-            // So free(array *) is still accessible
+            if(my_construct_callback) my_construct_callback->destroy();
+            // Deallocate the hash table before overridden free_array() becomes inaccessible
+            this->internal::ets_base<ets_no_key>::table_clear();
         }
 
         //! returns reference to local, discarding exists
@@ -914,59 +928,116 @@ namespace interface6 {
 
         //! Destroys local copies
         void clear() {
-            unconstruct_locals();
             my_locals.clear();
             this->table_clear();
             // callback is not destroyed
-            // exemplar is not destroyed
         }
 
     private:
 
         template<typename A2, ets_key_usage_type C2>
-        void internal_copy( const enumerable_thread_specific<T, A2, C2>& other);
+        void internal_copy(const enumerable_thread_specific<T, A2, C2>& other) {
+#if __TBB_ETS_USE_CPP11 && TBB_USE_ASSERT
+            // this tests is_compatible_ets
+            __TBB_STATIC_ASSERT( (internal::is_compatible_ets<T, typename internal::strip<decltype(other)>::type>::value), "is_compatible_ets fails" );
+#endif
+            // Initialize my_construct_callback first, so that it is valid even if rest of this routine throws an exception.
+            my_construct_callback = other.my_construct_callback->clone();
+            __TBB_ASSERT(my_locals.size()==0,NULL);
+            my_locals.reserve(other.size());
+            this->table_elementwise_copy( other, create_local_by_copy );
+        }
+
+        void internal_swap(enumerable_thread_specific& other) {
+            using std::swap;
+            __TBB_ASSERT( this!=&other, NULL );
+            swap(my_construct_callback, other.my_construct_callback);
+            // concurrent_vector::swap() preserves storage space,
+            // so addresses to the vector kept in ETS hash table remain valid.
+            swap(my_locals, other.my_locals);
+            this->internal::ets_base<ETS_key_type>::table_swap(other);
+        }
+
+#if __TBB_ETS_USE_CPP11
+        template<typename A2, ets_key_usage_type C2>
+        void internal_move(enumerable_thread_specific<T, A2, C2>&& other) {
+#if TBB_USE_ASSERT
+            // this tests is_compatible_ets
+            __TBB_STATIC_ASSERT( (internal::is_compatible_ets<T, typename internal::strip<decltype(other)>::type>::value), "is_compatible_ets fails" );
+#endif
+            my_construct_callback = other.my_construct_callback;
+            other.my_construct_callback = NULL;
+            __TBB_ASSERT(my_locals.size()==0,NULL);
+            my_locals.reserve(other.size());
+            this->table_elementwise_copy( other, create_local_by_move );
+        }
+#endif
 
     public:
 
-        template<typename Alloc, ets_key_usage_type Cachetype>
-        enumerable_thread_specific( const enumerable_thread_specific<T, Alloc, Cachetype>& other ) : internal::ets_base<ETS_key_type> ()
+        enumerable_thread_specific( const enumerable_thread_specific& other )
+        : internal::ets_base<ETS_key_type>() /* prevents GCC warnings with -Wextra */
         {
             internal_copy(other);
         }
 
-        enumerable_thread_specific( const enumerable_thread_specific& other ) : internal::ets_base<ETS_key_type> ()
+        template<typename Alloc, ets_key_usage_type Cachetype>
+        enumerable_thread_specific( const enumerable_thread_specific<T, Alloc, Cachetype>& other )
         {
             internal_copy(other);
         }
-        // TODO: add move constructors
 
-    private:
+#if __TBB_ETS_USE_CPP11
+        enumerable_thread_specific( enumerable_thread_specific&& other ) : my_construct_callback()
+        {
+            internal_swap(other);
+        }
 
-        template<typename A2, ets_key_usage_type C2>
-        enumerable_thread_specific &
-        internal_assign(const enumerable_thread_specific<T, A2, C2>& other) {
-            if(static_cast<void *>( this ) != static_cast<const void *>( &other )) {
+        template<typename Alloc, ets_key_usage_type Cachetype>
+        enumerable_thread_specific( enumerable_thread_specific<T, Alloc, Cachetype>&& other ) : my_construct_callback()
+        {
+            internal_move(std::move(other));
+        }
+#endif
+
+        enumerable_thread_specific& operator=( const enumerable_thread_specific& other )
+        {
+            if( this != &other ) {
                 this->clear();
                 my_construct_callback->destroy();
-                my_construct_callback = 0;
                 internal_copy( other );
             }
             return *this;
         }
 
-    public:
+        template<typename Alloc, ets_key_usage_type Cachetype>
+        enumerable_thread_specific& operator=( const enumerable_thread_specific<T, Alloc, Cachetype>& other )
+        {
+            __TBB_ASSERT( static_cast<void*>(this)!=static_cast<const void*>(&other), NULL ); // Objects of different types
+            this->clear();
+            my_construct_callback->destroy();
+            internal_copy(other);
+            return *this;
+        }
 
-        // assignment
-        enumerable_thread_specific& operator=(const enumerable_thread_specific& other) {
-            return internal_assign(other);
+#if __TBB_ETS_USE_CPP11
+        enumerable_thread_specific& operator=( enumerable_thread_specific&& other )
+        {
+            if( this != &other )
+                internal_swap(other);
+            return *this;
         }
 
         template<typename Alloc, ets_key_usage_type Cachetype>
-        enumerable_thread_specific& operator=(const enumerable_thread_specific<T, Alloc, Cachetype>& other)
+        enumerable_thread_specific& operator=( enumerable_thread_specific<T, Alloc, Cachetype>&& other )
         {
-            return internal_assign(other);
+            __TBB_ASSERT( static_cast<void*>(this)!=static_cast<const void*>(&other), NULL ); // Objects of different types
+            this->clear();
+            my_construct_callback->destroy();
+            internal_move(std::move(other));
+            return *this;
         }
-        // TODO: add move assignments
+#endif
 
         // combine_func_t has signature T(T,T) or T(const T&, const T&)
         template <typename combine_func_t>
@@ -974,8 +1045,7 @@ namespace interface6 {
             if(begin() == end()) {
                 internal::ets_element<T> location;
                 my_construct_callback->construct(location.value());
-                location.is_built = true;
-                return *location.value();
+                return *location.value_committed();
             }
             const_iterator ci = begin();
             T my_result = *ci;
@@ -994,35 +1064,6 @@ namespace interface6 {
 
     }; // enumerable_thread_specific
 
-    template <typename T, typename Allocator, ets_key_usage_type ETS_key_type>
-    template<typename A2, ets_key_usage_type C2>
-    void enumerable_thread_specific<T,Allocator,ETS_key_type>::internal_copy( const enumerable_thread_specific<T, A2, C2>& other) {
-#if __TBB_ETS_USE_CPP11
-        __TBB_STATIC_ASSERT( (internal::is_compatible_ets<T, typename internal::strip<decltype(other)>::type>::value), "Maybe is_compatible_ets works incorrectly" );
-#endif
-        // Initialize my_construct_callback first, so that it is valid even if rest of this routine throws an exception.
-        my_construct_callback = other.my_construct_callback->clone();
-
-        typedef internal::ets_base<ets_no_key> base;
-        __TBB_ASSERT(my_locals.size()==0,NULL);
-        this->table_reserve_for_copy( other );
-        for( base::array* r=other.my_root; r; r=r->next ) {
-            for( size_t i=0; i<r->size(); ++i ) {
-                base::slot& s1 = r->at(i);
-                if( !s1.empty() ) {
-                    base::slot& s2 = this->table_find(s1.key);
-                    if( s2.empty() ) {
-                        void* lref = &*my_locals.grow_by(1);
-                        s2.ptr = new(lref) T(*(T*)s1.ptr);
-                        s2.key = s1.key;
-                    } else {
-                        // Skip the duplicate
-                    }
-                }
-            }
-        }
-    }
-
     template< typename Container >
     class flattened2d {
 
@@ -1047,7 +1088,7 @@ namespace interface6 {
         flattened2d( const Container &c, typename Container::const_iterator b, typename Container::const_iterator e ) :
             my_container(const_cast<Container*>(&c)), my_begin(b), my_end(e) { }
 
-        flattened2d( const Container &c ) :
+        explicit flattened2d( const Container &c ) :
             my_container(const_cast<Container*>(&c)), my_begin(c.begin()), my_end(c.end()) { }
 
         iterator begin() { return iterator(*my_container) = my_begin; }
diff --git a/include/tbb/flow_graph.h b/include/tbb/flow_graph.h
index 11f2a3d..7b03c0e 100644
--- a/include/tbb/flow_graph.h
+++ b/include/tbb/flow_graph.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_flow_graph_H
@@ -33,6 +33,20 @@
 #include "internal/_template_helpers.h"
 #include "internal/_aggregator_impl.h"
 #include "tbb_profiling.h"
+#include "task_arena.h"
+#include "flow_graph_abstractions.h"
+
+#if __TBB_PREVIEW_ASYNC_MSG
+#include <vector>    // std::vector in internal::async_storage
+#include <memory>    // std::shared_ptr in async_msg
+#endif
+
+#if __TBB_PREVIEW_STREAMING_NODE
+// For streaming_node
+#include <array>            // std::array
+#include <unordered_map>    // std::unordered_map
+#include <type_traits>      // std::decay, std::true_type, std::false_type
+#endif // __TBB_PREVIEW_STREAMING_NODE
 
 #if TBB_DEPRECATED_FLOW_ENQUEUE
 #define FLOW_SPAWN(a) tbb::task::enqueue((a))
@@ -74,16 +88,20 @@ namespace flow {
 //! An enumeration the provides the two most common concurrency levels: unlimited and serial
 enum concurrency { unlimited = 0, serial = 1 };
 
-namespace interface7 {
+namespace internal {
+static tbb::task * const SUCCESSFULLY_ENQUEUED = (task *)-1;
+}
+
+namespace interface9 {
+
+using tbb::flow::internal::SUCCESSFULLY_ENQUEUED;
 
 namespace internal {
     template<typename T, typename M> class successor_cache;
     template<typename T, typename M> class broadcast_cache;
     template<typename T, typename M> class round_robin_cache;
-
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-    template< typename C> class edge_container;
-#endif
+    template<typename T, typename M> class predecessor_cache;
+    template<typename T, typename M> class reservable_predecessor_cache;
 }
 
 //A generic null type
@@ -96,6 +114,255 @@ template< typename T > class sender;
 template< typename T > class receiver;
 class continue_receiver;
 
+template< typename T > class limiter_node;  // needed for resetting decrementer
+template< typename R, typename B > class run_and_put_task;
+
+// flags to modify the behavior of the graph reset().  Can be combined.
+enum reset_flags {
+    rf_reset_protocol   = 0,
+    rf_reset_bodies     = 1<<0,  // delete the current node body, reset to a copy of the initial node body.
+    rf_clear_edges      = 1<<1   // delete edges
+};
+
+#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
+//* holder of edges both for caches and for those nodes which do not have predecessor caches.
+// C == receiver< ... > or sender< ... >, depending.
+namespace internal {
+template<typename C>
+class edge_container {
+
+public:
+    typedef std::list<C *, tbb::tbb_allocator<C *> > edge_list_type;
+
+    void add_edge( C &s) {
+        built_edges.push_back( &s );
+    }
+
+    void delete_edge( C &s) {
+        for ( typename edge_list_type::iterator i = built_edges.begin(); i != built_edges.end(); ++i ) {
+            if ( *i == &s )  {
+                (void)built_edges.erase(i);
+                return;  // only remove one predecessor per request
+            }
+        }
+    }
+
+    void copy_edges( edge_list_type &v) {
+        v = built_edges;
+    }
+
+    size_t edge_count() {
+        return (size_t)(built_edges.size());
+    }
+
+    void clear() {
+        built_edges.clear();
+    }
+
+    // methods remove the statement from all predecessors/successors liste in the edge
+    // container.
+    template< typename S > void sender_extract( S &s ); 
+    template< typename R > void receiver_extract( R &r ); 
+
+private: 
+    edge_list_type built_edges;
+};  // class edge_container
+}  // namespace internal
+#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */
+
+#if __TBB_PREVIEW_ASYNC_MSG
+
+#include "internal/_flow_graph_async_msg_impl.h"
+
+namespace internal {
+
+class untyped_receiver;
+
+class untyped_sender {
+    template< typename, typename > friend class internal::predecessor_cache;
+    template< typename, typename > friend class internal::reservable_predecessor_cache;
+public:
+    //! The successor type for this node
+    typedef untyped_receiver successor_type;
+
+    virtual ~untyped_sender() {}
+
+    // NOTE: Following part of PUBLIC section is copy-paste from original sender<T> class
+
+    // TODO: Prevent untyped successor registration
+
+    //! Add a new successor to this node
+    virtual bool register_successor( successor_type &r ) = 0;
+
+    //! Removes a successor from this node
+    virtual bool remove_successor( successor_type &r ) = 0;
+
+    //! Releases the reserved item
+    virtual bool try_release( ) { return false; }
+
+    //! Consumes the reserved item
+    virtual bool try_consume( ) { return false; }
+
+#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
+    //! interface to record edges for traversal & deletion
+    typedef internal::edge_container<successor_type> built_successors_type;
+    typedef built_successors_type::edge_list_type successor_list_type;
+    virtual built_successors_type &built_successors()                   = 0;
+    virtual void    internal_add_built_successor( successor_type & )    = 0;
+    virtual void    internal_delete_built_successor( successor_type & ) = 0;
+    virtual void    copy_successors( successor_list_type &)             = 0;
+    virtual size_t  successor_count()                                   = 0;
+#endif
+protected:
+    //! Request an item from the sender
+    template< typename X >
+    bool try_get( X &t ) {
+        return try_get_wrapper( internal::async_helpers<X>::to_void_ptr(t), internal::async_helpers<X>::is_async_type );
+    }
+
+    //! Reserves an item in the sender
+    template< typename X >
+    bool try_reserve( X &t ) {
+        return try_reserve_wrapper( internal::async_helpers<X>::to_void_ptr(t), internal::async_helpers<X>::is_async_type );
+    }
+
+    virtual bool try_get_wrapper( void* p, bool is_async ) = 0;
+    virtual bool try_reserve_wrapper( void* p, bool is_async ) = 0;
+};
+
+class untyped_receiver  {
+    template< typename, typename > friend class run_and_put_task;
+    template< typename > friend class limiter_node;
+
+    template< typename, typename > friend class internal::broadcast_cache;
+    template< typename, typename > friend class internal::round_robin_cache;
+    template< typename, typename > friend class internal::successor_cache;
+
+#if __TBB_PREVIEW_OPENCL_NODE
+    template< typename, typename > friend class proxy_dependency_receiver;
+#endif /* __TBB_PREVIEW_OPENCL_NODE */
+public:
+    //! The predecessor type for this node
+    typedef untyped_sender predecessor_type;
+
+    //! Destructor
+    virtual ~untyped_receiver() {}
+
+    //! Put an item to the receiver
+    template<typename X>
+    bool try_put(const X& t) {
+        task *res = try_put_task(t);
+        if (!res) return false;
+        if (res != SUCCESSFULLY_ENQUEUED) FLOW_SPAWN(*res);
+        return true;
+    }
+
+    // NOTE: Following part of PUBLIC section is copy-paste from original receiver<T> class
+
+    // TODO: Prevent untyped predecessor registration
+
+    //! Add a predecessor to the node
+    virtual bool register_predecessor( predecessor_type & ) { return false; }
+
+    //! Remove a predecessor from the node
+    virtual bool remove_predecessor( predecessor_type & ) { return false; }
+
+#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
+    typedef internal::edge_container<predecessor_type> built_predecessors_type;
+    typedef built_predecessors_type::edge_list_type predecessor_list_type;
+    virtual built_predecessors_type &built_predecessors()                  = 0;
+    virtual void   internal_add_built_predecessor( predecessor_type & )    = 0;
+    virtual void   internal_delete_built_predecessor( predecessor_type & ) = 0;
+    virtual void   copy_predecessors( predecessor_list_type & )            = 0;
+    virtual size_t predecessor_count()                                     = 0;
+#endif
+protected:
+    template<typename X>
+    task *try_put_task(const X& t) {
+        return try_put_task_wrapper( internal::async_helpers<X>::to_void_ptr(t), internal::async_helpers<X>::is_async_type );
+    }
+
+    virtual task* try_put_task_wrapper( const void* p, bool is_async ) = 0;
+
+    // NOTE: Following part of PROTECTED and PRIVATE sections is copy-paste from original receiver<T> class
+
+    //! put receiver back in initial state
+    virtual void reset_receiver(reset_flags f = rf_reset_protocol) = 0;
+
+    virtual bool is_continue_receiver() { return false; }
+};
+
+} // namespace internal
+
+//! Pure virtual template class that defines a sender of messages of type T
+template< typename T >
+class sender : public internal::untyped_sender {
+public:
+    //! The output type of this sender
+    typedef T output_type;
+
+    typedef typename internal::async_helpers<T>::filtered_type filtered_type;
+
+    //! Request an item from the sender
+    virtual bool try_get( T & ) { return false; }
+
+    //! Reserves an item in the sender
+    virtual bool try_reserve( T & ) { return false; }
+
+protected:
+    virtual bool try_get_wrapper( void* p, bool is_async ) __TBB_override {
+        // Both async OR both are NOT async
+        if ( internal::async_helpers<T>::is_async_type == is_async ) {
+            return try_get( internal::async_helpers<T>::from_void_ptr(p) );
+        }
+        // Else: this (T) is async OR incoming 't' is async
+        __TBB_ASSERT(false, "async_msg interface does not support 'pull' protocol in try_get()");
+        return false;
+    }
+
+    virtual bool try_reserve_wrapper( void* p, bool is_async ) __TBB_override {
+        // Both async OR both are NOT async
+        if ( internal::async_helpers<T>::is_async_type == is_async ) {
+            return try_reserve( internal::async_helpers<T>::from_void_ptr(p) );
+        }
+        // Else: this (T) is async OR incoming 't' is async
+        __TBB_ASSERT(false, "async_msg interface does not support 'pull' protocol in try_reserve()");
+        return false;
+    }
+};  // class sender<T>
+
+//! Pure virtual template class that defines a receiver of messages of type T
+template< typename T >
+class receiver : public internal::untyped_receiver {
+    template< typename > friend class internal::async_storage;
+    template< typename, typename > friend struct internal::async_helpers;
+public:
+    //! The input type of this receiver
+    typedef T input_type;
+
+    typedef typename internal::async_helpers<T>::filtered_type filtered_type;
+
+    //! Put an item to the receiver
+    bool try_put( const typename internal::async_helpers<T>::filtered_type& t ) {
+        return internal::untyped_receiver::try_put(t);
+    }
+
+    bool try_put( const typename internal::async_helpers<T>::async_type& t ) {
+        return internal::untyped_receiver::try_put(t);
+    }
+
+protected:
+    virtual task* try_put_task_wrapper( const void *p, bool is_async ) __TBB_override {
+        return internal::async_helpers<T>::try_put_task_wrapper_impl(this, p, is_async);
+    }
+
+    //! Put item to successor; return task to run the successor if possible.
+    virtual task *try_put_task(const T& t) = 0;
+
+}; // class receiver<T>
+
+#else // __TBB_PREVIEW_ASYNC_MSG
+
 //! Pure virtual template class that defines a sender of messages of type T
 template< typename T >
 class sender {
@@ -108,6 +375,8 @@ public:
 
     virtual ~sender() {}
 
+    // NOTE: Following part of PUBLIC section is partly copy-pasted in sender<T> under #if __TBB_PREVIEW_ASYNC_MSG
+
     //! Add a new successor to this node
     virtual bool register_successor( successor_type &r ) = 0;
 
@@ -138,42 +407,6 @@ public:
 #endif
 };  // class sender<T>
 
-template< typename T > class limiter_node;  // needed for resetting decrementer
-template< typename R, typename B > class run_and_put_task;
-
-static tbb::task * const SUCCESSFULLY_ENQUEUED = (task *)-1;
-
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-// flags to modify the behavior of the graph reset().  Can be combined.
-enum reset_flags {
-    rf_reset_protocol   = 0,
-    rf_reset_bodies     = 1<<0,  // delete the current node body, reset to a copy of the initial node body.
-    rf_clear_edges          = 1<<1   // delete edges
-};
-
-#define __TBB_PFG_RESET_ARG(exp) exp
-#define __TBB_COMMA ,
-#else
-#define __TBB_PFG_RESET_ARG(exp)  /* nothing */
-#define __TBB_COMMA /* nothing */
-#endif  // TBB_PREVIEW_FLOW_GRAPH_FEATURES
-
-// enqueue left task if necessary.  Returns the non-enqueued task if there is one.
-static inline tbb::task *combine_tasks( tbb::task * left, tbb::task * right) {
-    // if no RHS task, don't change left.
-    if(right == NULL) return left;
-    // right != NULL
-    if(left == NULL) return right;
-    if(left == SUCCESSFULLY_ENQUEUED) return right;
-    // left contains a task
-    if(right != SUCCESSFULLY_ENQUEUED) {
-        // both are valid tasks
-        FLOW_SPAWN(*left);
-        return right;
-    }
-    return left;
-}
-
 //! Pure virtual template class that defines a receiver of messages of type T
 template< typename T >
 class receiver {
@@ -190,7 +423,7 @@ public:
     //! Put an item to the receiver
     bool try_put( const T& t ) {
         task *res = try_put_task(t);
-        if(!res) return false;
+        if (!res) return false;
         if (res != SUCCESSFULLY_ENQUEUED) FLOW_SPAWN(*res);
         return true;
     }
@@ -198,10 +431,11 @@ public:
     //! put item to successor; return task to run the successor if possible.
 protected:
     template< typename R, typename B > friend class run_and_put_task;
-    template<typename X, typename Y> friend class internal::broadcast_cache;
-    template<typename X, typename Y> friend class internal::round_robin_cache;
+    template< typename X, typename Y > friend class internal::broadcast_cache;
+    template< typename X, typename Y > friend class internal::round_robin_cache;
     virtual task *try_put_task(const T& t) = 0;
 public:
+    // NOTE: Following part of PUBLIC and PROTECTED sections is copy-pasted in receiver<T> under #if __TBB_PREVIEW_ASYNC_MSG
 
     //! Add a predecessor to the node
     virtual bool register_predecessor( predecessor_type & ) { return false; }
@@ -222,58 +456,33 @@ public:
 protected:
     //! put receiver back in initial state
     template<typename U> friend class limiter_node;
-    virtual void reset_receiver(__TBB_PFG_RESET_ARG(reset_flags f = rf_reset_protocol ) ) = 0;
+    virtual void reset_receiver(reset_flags f = rf_reset_protocol) = 0;
 
-    template<typename TT, typename M>
-        friend class internal::successor_cache;
+    template<typename TT, typename M> friend class internal::successor_cache;
     virtual bool is_continue_receiver() { return false; }
-};  // class receiver<T>
-
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-//* holder of edges both for caches and for those nodes which do not have predecessor caches.
-// C == receiver< ... > or sender< ... >, depending.
-namespace internal {
-template<typename C>
-class edge_container {
 
-public:
-    typedef std::list<C *, tbb::tbb_allocator<C *> > edge_list_type;
+#if __TBB_PREVIEW_OPENCL_NODE
+    template< typename, typename > friend class proxy_dependency_receiver;
+#endif /* __TBB_PREVIEW_OPENCL_NODE */
+}; // class receiver<T>
 
-    void add_edge( C &s) {
-        built_edges.push_back( &s );
-    }
+#endif // __TBB_PREVIEW_ASYNC_MSG
 
-    void delete_edge( C &s) {
-        for ( typename edge_list_type::iterator i = built_edges.begin(); i != built_edges.end(); ++i ) {
-            if ( *i == &s )  {
-                (void)built_edges.erase(i);
-                return;  // only remove one predecessor per request
-            }
-        }
-    }
-
-    void copy_edges( edge_list_type &v) {
-        v = built_edges;
-    }
-
-    size_t edge_count() {
-        return (size_t)(built_edges.size());
-    }
-
-    void clear() {
-        built_edges.clear();
+// enqueue left task if necessary.  Returns the non-enqueued task if there is one.
+static inline tbb::task *combine_tasks( tbb::task * left, tbb::task * right) {
+    // if no RHS task, don't change left.
+    if(right == NULL) return left;
+    // right != NULL
+    if(left == NULL) return right;
+    if(left == SUCCESSFULLY_ENQUEUED) return right;
+    // left contains a task
+    if(right != SUCCESSFULLY_ENQUEUED) {
+        // both are valid tasks
+        FLOW_SPAWN(*left);
+        return right;
     }
-
-    // methods remove the statement from all predecessors/successors liste in the edge
-    // container.
-    template< typename S > void sender_extract( S &s ); 
-    template< typename R > void receiver_extract( R &r ); 
-    
-private: 
-    edge_list_type built_edges;
-};  // class edge_container
-}  // namespace internal
-#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */
+    return left;
+}
 
 //! Base class for receivers of completion messages
 /** These receivers automatically reset, but cannot be explicitly waited on */
@@ -284,10 +493,10 @@ public:
     typedef continue_msg input_type;
 
     //! The predecessor type for this node
-    typedef sender< continue_msg > predecessor_type;
+    typedef receiver<input_type>::predecessor_type predecessor_type;
 
     //! Constructor
-    continue_receiver( int number_of_predecessors = 0 ) {
+    explicit continue_receiver( int number_of_predecessors = 0 ) {
         my_predecessor_count = my_initial_predecessor_count = number_of_predecessors;
         my_current_count = 0;
     }
@@ -298,11 +507,8 @@ public:
         my_current_count = 0;
     }
 
-    //! Destructor
-    virtual ~continue_receiver() { }
-
     //! Increments the trigger threshold
-    /* override */ bool register_predecessor( predecessor_type & ) {
+    bool register_predecessor( predecessor_type & ) __TBB_override {
         spin_mutex::scoped_lock l(my_mutex);
         ++my_predecessor_count;
         return true;
@@ -312,7 +518,7 @@ public:
     /** Does not check to see if the removal of the predecessor now makes the current count
         exceed the new threshold.  So removing a predecessor while the graph is active can cause
         unexpected results. */
-    /* override */ bool remove_predecessor( predecessor_type & ) {
+    bool remove_predecessor( predecessor_type & ) __TBB_override {
         spin_mutex::scoped_lock l(my_mutex);
         --my_predecessor_count;
         return true;
@@ -321,36 +527,36 @@ public:
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     typedef internal::edge_container<predecessor_type> built_predecessors_type;
     typedef built_predecessors_type::edge_list_type predecessor_list_type;
-    /*override*/ built_predecessors_type &built_predecessors() { return my_built_predecessors; }
+    built_predecessors_type &built_predecessors() __TBB_override { return my_built_predecessors; }
 
-    /*override*/ void internal_add_built_predecessor( predecessor_type &s) {
+    void internal_add_built_predecessor( predecessor_type &s) __TBB_override {
         spin_mutex::scoped_lock l(my_mutex);
         my_built_predecessors.add_edge( s );
     }
 
-    /*override*/ void internal_delete_built_predecessor( predecessor_type &s) {
+    void internal_delete_built_predecessor( predecessor_type &s) __TBB_override {
         spin_mutex::scoped_lock l(my_mutex);
         my_built_predecessors.delete_edge(s);
     }
 
-    /*override*/ void copy_predecessors( predecessor_list_type &v) {
+    void copy_predecessors( predecessor_list_type &v) __TBB_override {
         spin_mutex::scoped_lock l(my_mutex);
         my_built_predecessors.copy_edges(v);
     }
 
-    /*override*/ size_t predecessor_count() {
+    size_t predecessor_count() __TBB_override {
         spin_mutex::scoped_lock l(my_mutex);
         return my_built_predecessors.edge_count();
     }
 
 #endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */
-    
+
 protected:
     template< typename R, typename B > friend class run_and_put_task;
     template<typename X, typename Y> friend class internal::broadcast_cache;
     template<typename X, typename Y> friend class internal::round_robin_cache;
     // execute body is supposed to be too small to create a task for.
-    /* override */ task *try_put_task( const input_type & ) {
+    task *try_put_task( const input_type & ) __TBB_override {
         {
             spin_mutex::scoped_lock l(my_mutex);
             if ( ++my_current_count < my_predecessor_count )
@@ -359,8 +565,7 @@ protected:
                 my_current_count = 0;
         }
         task * res = execute();
-        if(!res) return SUCCESSFULLY_ENQUEUED;
-        return res;
+        return res? res : SUCCESSFULLY_ENQUEUED;
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
@@ -376,38 +581,48 @@ protected:
     // error in gcc 4.1.2
     template<typename U> friend class limiter_node;
 
-    /*override*/void reset_receiver( __TBB_PFG_RESET_ARG(reset_flags f) )
-    {
+    void reset_receiver( reset_flags f ) __TBB_override {
         my_current_count = 0;
+        if (f & rf_clear_edges) {
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-        if(f & rf_clear_edges) {
             my_built_predecessors.clear();
+#endif
             my_predecessor_count = my_initial_predecessor_count;
         }
-#endif
     }
 
     //! Does whatever should happen when the threshold is reached
     /** This should be very fast or else spawn a task.  This is
         called while the sender is blocked in the try_put(). */
     virtual task * execute() = 0;
-    template<typename TT, typename M>
-        friend class internal::successor_cache;
-    /*override*/ bool is_continue_receiver() { return true; }
+    template<typename TT, typename M> friend class internal::successor_cache;
+    bool is_continue_receiver() __TBB_override { return true; }
 
 }; // class continue_receiver
-}  // interface7
+}  // interface9
+
+#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING
+    template <typename K, typename T>
+    K key_from_message( const T &t ) {
+        return t.key();
+    }
+#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */
+
+    using interface9::sender;
+    using interface9::receiver;
+    using interface9::continue_receiver;
 }  // flow
 }  // tbb
 
 #include "internal/_flow_graph_trace_impl.h"
+#include "internal/_tbb_hash_compare_impl.h"
 
 namespace tbb {
 namespace flow {
-namespace interface7 {
+namespace interface9 {
 
-#include "internal/_flow_graph_types_impl.h"
 #include "internal/_flow_graph_impl.h"
+#include "internal/_flow_graph_types_impl.h"
 using namespace internal::graph_policy_namespace;
 
 class graph;
@@ -482,14 +697,14 @@ private:
 
 //! The graph class
 /** This class serves as a handle to the graph */
-class graph : tbb::internal::no_copy {
+class graph : tbb::internal::no_copy, public graph_proxy {
     friend class graph_node;
 
     template< typename Body >
     class run_task : public task {
     public:
         run_task( Body& body ) : my_body(body) {}
-        task *execute() {
+        task *execute() __TBB_override {
             my_body();
             return NULL;
         }
@@ -501,20 +716,42 @@ class graph : tbb::internal::no_copy {
     class run_and_put_task : public task {
     public:
         run_and_put_task( Receiver &r, Body& body ) : my_receiver(r), my_body(body) {}
-        task *execute() {
+        task *execute() __TBB_override {
             task *res = my_receiver.try_put_task( my_body() );
-            if(res == SUCCESSFULLY_ENQUEUED) res = NULL;
+            if (res == SUCCESSFULLY_ENQUEUED) res = NULL;
             return res;
         }
     private:
         Receiver &my_receiver;
         Body my_body;
     };
+    typedef std::list<task *> task_list_type;
+
+    class wait_functor {
+        task* graph_root_task;
+    public:
+        wait_functor( task* t ) : graph_root_task(t) {}
+        void operator()() const { graph_root_task->wait_for_all(); }
+    };
+
+    void prepare_task_arena( bool reinit = false ) {
+        if (reinit) {
+            __TBB_ASSERT( my_task_arena, "task arena is NULL");
+            my_task_arena->terminate();
+            my_task_arena->initialize(tbb::task_arena::attach());
+        } else {
+            __TBB_ASSERT(my_task_arena == NULL, "task arena is not NULL");
+            my_task_arena = new tbb::task_arena(tbb::task_arena::attach());
+        }
+        if (!my_task_arena->is_active()) // failed to attach
+            my_task_arena->initialize(); // create a new, default-initialized arena
+        __TBB_ASSERT(my_task_arena->is_active(), "task arena is not active");
+    }
 
 public:
     //! Constructs a graph with isolated task_group_context
-    explicit graph() : my_nodes(NULL), my_nodes_last(NULL)
-    {
+    graph() : my_nodes(NULL), my_nodes_last(NULL), my_task_arena(NULL) {
+        prepare_task_arena();
         own_context = true;
         cancelled = false;
         caught_exception = false;
@@ -522,22 +759,18 @@ public:
         my_root_task = ( new ( task::allocate_root(*my_context) ) empty_task );
         my_root_task->set_ref_count(1);
         tbb::internal::fgt_graph( this );
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         my_is_active = true;
-#endif
     }
 
     //! Constructs a graph with use_this_context as context
     explicit graph(task_group_context& use_this_context) :
-    my_context(&use_this_context), my_nodes(NULL), my_nodes_last(NULL)
-    {
+      my_context(&use_this_context), my_nodes(NULL), my_nodes_last(NULL), my_task_arena(NULL) {
+        prepare_task_arena();
         own_context = false;
         my_root_task = ( new ( task::allocate_root(*my_context) ) empty_task );
         my_root_task->set_ref_count(1);
         tbb::internal::fgt_graph( this );
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         my_is_active = true;
-#endif
     }
 
     //! Destroys the graph.
@@ -547,6 +780,7 @@ public:
         my_root_task->set_ref_count(0);
         task::destroy( *my_root_task );
         if (own_context) delete my_context;
+        delete my_task_arena;
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
@@ -571,13 +805,23 @@ public:
             my_root_task->decrement_ref_count();
     }
 
+    void reserve_wait() __TBB_override {
+        increment_wait_count();
+    }
+
+    void release_wait() __TBB_override {
+        decrement_wait_count();
+    }
+
     //! Spawns a task that runs a body and puts its output to a specific receiver
     /** The task is spawned as a child of the graph. This is useful for running tasks
         that need to block a wait_for_all() on the graph.  For example a one-off source. */
     template< typename Receiver, typename Body >
         void run( Receiver &r, Body body ) {
-       FLOW_SPAWN( (* new ( task::allocate_additional_child_of( *my_root_task ) )
+            if(is_active()) {
+                FLOW_SPAWN( (* new ( task::allocate_additional_child_of( *root_task() ) )
                    run_and_put_task< Receiver, Body >( r, body )) );
+            }
     }
 
     //! Spawns a task that runs a function object
@@ -585,7 +829,9 @@ public:
         that need to block a wait_for_all() on the graph. For example a one-off source. */
     template< typename Body >
     void run( Body body ) {
-       FLOW_SPAWN( * new ( task::allocate_additional_child_of( *my_root_task ) ) run_task< Body >( body ) );
+        if(is_active()) {
+            FLOW_SPAWN( * new ( task::allocate_additional_child_of( *root_task() ) ) run_task< Body >( body ) );
+        }
     }
 
     //! Wait until graph is idle and decrement_wait_count calls equals increment_wait_count calls.
@@ -597,7 +843,7 @@ public:
 #if TBB_USE_EXCEPTIONS
             try {
 #endif
-                my_root_task->wait_for_all();
+                my_task_arena->execute(wait_functor(my_root_task));
                 cancelled = my_context->is_group_execution_cancelled();
 #if TBB_USE_EXCEPTIONS
             }
@@ -609,22 +855,21 @@ public:
                 throw;
             }
 #endif
-            my_context->reset();  // consistent with behavior in catch()
-            my_root_task->set_ref_count(1);
+            // TODO: the "if" condition below is just a work-around to support the concurrent wait
+            // mode. The cancellation and exception mechanisms are still broken in this mode.
+            // Consider using task group not to re-implement the same functionality.
+            if ( !(my_context->traits() & task_group_context::concurrent_wait) ) {
+                my_context->reset();  // consistent with behavior in catch()
+                my_root_task->set_ref_count(1);
+            }
         }
     }
 
     //! Returns the root task of the graph
     task * root_task() {
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-        if (!my_is_active) 
-            return NULL;
-        else
-#endif
-            return my_root_task;
+        return my_root_task;
     }
 
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     void set_active(bool a = true) {
        my_is_active = a;
     }
@@ -632,7 +877,10 @@ public:
     bool is_active() {
        return my_is_active;
     }
-#endif
+
+    void add_task_to_reset_list(task *tp) {
+        my_reset_task_list.push_back(tp);
+    }
 
     // ITERATORS
     template<typename C, typename N>
@@ -661,7 +909,7 @@ public:
     bool exception_thrown() { return caught_exception; }
 
     // thread-unsafe state reset.
-    void reset(__TBB_PFG_RESET_ARG(reset_flags f = rf_reset_protocol));
+    void reset(reset_flags f = rf_reset_protocol);
 
 private:
     task *my_root_task;
@@ -669,10 +917,8 @@ private:
     bool own_context;
     bool cancelled;
     bool caught_exception;
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     bool my_is_active;
-#endif
-
+    task_list_type my_reset_task_list;
 
     graph_node *my_nodes, *my_nodes_last;
 
@@ -680,6 +926,9 @@ private:
     void register_node(graph_node *n);
     void remove_node(graph_node *n);
 
+    template < typename Input, typename Output, typename Policy, typename Allocator >
+    friend class async_node;
+    task_arena* my_task_arena;
 };  // class graph
 
 template <typename C, typename N>
@@ -700,14 +949,13 @@ typename graph_iterator<C,N>::pointer graph_iterator<C,N>::operator->() const {
     return current_node;
 }
 
-
 template <typename C, typename N>
 void graph_iterator<C,N>::internal_forward() {
     if (current_node) current_node = current_node->next;
 }
 
 //! The base of all graph nodes.
-class graph_node : tbb::internal::no_assign {
+class graph_node : tbb::internal::no_copy {
     friend class graph;
     template<typename C, typename N>
     friend class graph_iterator;
@@ -715,7 +963,7 @@ protected:
     graph& my_graph;
     graph_node *next, *prev;
 public:
-    graph_node(graph& g) : my_graph(g) {
+    explicit graph_node(graph& g) : my_graph(g) {
         my_graph.register_node(this);
     }
     virtual ~graph_node() {
@@ -732,7 +980,7 @@ public:
 
 protected:
     // performs the reset on an individual node.
-    virtual void reset_node(__TBB_PFG_RESET_ARG(reset_flags f=rf_reset_protocol)) = 0;
+    virtual void reset_node(reset_flags f=rf_reset_protocol) = 0;
 };  // class graph_node
 
 inline void graph::register_node(graph_node *n) {
@@ -758,35 +1006,39 @@ inline void graph::remove_node(graph_node *n) {
     n->prev = n->next = NULL;
 }
 
-inline void graph::reset( __TBB_PFG_RESET_ARG( reset_flags f )) {
+inline void graph::reset( reset_flags f ) {
     // reset context
-    task *saved_my_root_task = my_root_task;
-    my_root_task = NULL;
+    set_active(false);
     if(my_context) my_context->reset();
     cancelled = false;
     caught_exception = false;
     // reset all the nodes comprising the graph
     for(iterator ii = begin(); ii != end(); ++ii) {
         graph_node *my_p = &(*ii);
-        my_p->reset_node(__TBB_PFG_RESET_ARG(f));
+        my_p->reset_node(f);
     }
-    my_root_task = saved_my_root_task;
+    // Reattach the arena. Might be useful to run the graph in a particular task_arena
+    // while not limiting graph lifetime to a single task_arena::execute() call.
+    prepare_task_arena( /*reinit=*/true );
+    set_active(true);
+    // now spawn the tasks necessary to start the graph
+    for(task_list_type::iterator rti = my_reset_task_list.begin(); rti != my_reset_task_list.end(); ++rti) {
+        FLOW_SPAWN(*(*rti));
+    }
+    my_reset_task_list.clear();
 }
 
-
 #include "internal/_flow_graph_node_impl.h"
 
 //! An executable node that acts as a source, i.e. it has no predecessors
 template < typename Output >
 class source_node : public graph_node, public sender< Output > {
-protected:
-    using graph_node::my_graph;
 public:
     //! The type of the output message, which is complete
     typedef Output output_type;
 
     //! The type of successors of this node
-    typedef receiver< Output > successor_type;
+    typedef typename sender<output_type>::successor_type successor_type;
 
     //Source node has no input type
     typedef null_type input_type;
@@ -801,6 +1053,7 @@ public:
     source_node( graph &g, Body body, bool is_active = true )
         : graph_node(g), my_active(is_active), init_my_active(is_active),
         my_body( new internal::source_body_leaf< output_type, Body>(body) ),
+        my_init_body( new internal::source_body_leaf< output_type, Body>(body) ),
         my_reserved(false), my_has_cached_item(false)
     {
         my_successors.set_owner(this);
@@ -812,7 +1065,7 @@ public:
     source_node( const source_node& src ) :
         graph_node(src.my_graph), sender<Output>(),
         my_active(src.init_my_active),
-        init_my_active(src.init_my_active), my_body( src.my_body->clone() ),
+        init_my_active(src.init_my_active), my_body( src.my_init_body->clone() ), my_init_body(src.my_init_body->clone() ),
         my_reserved(false), my_has_cached_item(false)
     {
         my_successors.set_owner(this);
@@ -821,16 +1074,16 @@ public:
     }
 
     //! The destructor
-    ~source_node() { delete my_body; }
+    ~source_node() { delete my_body; delete my_init_body; }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_node_desc( this, name );
     }
 #endif
 
     //! Add a new successor to this node
-    /* override */ bool register_successor( successor_type &r ) {
+    bool register_successor( successor_type &r ) __TBB_override {
         spin_mutex::scoped_lock lock(my_mutex);
         my_successors.register_successor(r);
         if ( my_active )
@@ -839,7 +1092,7 @@ public:
     }
 
     //! Removes a successor from this node
-    /* override */ bool remove_successor( successor_type &r ) {
+    bool remove_successor( successor_type &r ) __TBB_override {
         spin_mutex::scoped_lock lock(my_mutex);
         my_successors.remove_successor(r);
         return true;
@@ -847,31 +1100,31 @@ public:
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
 
-    /*override*/ built_successors_type &built_successors() { return my_successors.built_successors(); }
+    built_successors_type &built_successors() __TBB_override { return my_successors.built_successors(); }
 
-    /*override*/void internal_add_built_successor( successor_type &r) {
+    void internal_add_built_successor( successor_type &r) __TBB_override {
         spin_mutex::scoped_lock lock(my_mutex);
         my_successors.internal_add_built_successor(r);
     }
 
-    /*override*/void internal_delete_built_successor( successor_type &r) {
+    void internal_delete_built_successor( successor_type &r) __TBB_override {
         spin_mutex::scoped_lock lock(my_mutex);
         my_successors.internal_delete_built_successor(r);
     }
 
-    /*override*/size_t successor_count() {
+    size_t successor_count() __TBB_override {
         spin_mutex::scoped_lock lock(my_mutex);
         return my_successors.successor_count();
     }
 
-    /*override*/void copy_successors(successor_list_type &v) {
+    void copy_successors(successor_list_type &v) __TBB_override {
         spin_mutex::scoped_lock l(my_mutex);
         my_successors.copy_successors(v);
     }
 #endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */
 
     //! Request an item from the node
-    /*override */ bool try_get( output_type &v ) {
+    bool try_get( output_type &v ) __TBB_override {
         spin_mutex::scoped_lock lock(my_mutex);
         if ( my_reserved )
             return false;
@@ -888,7 +1141,7 @@ public:
     }
 
     //! Reserves an item.
-    /* override */ bool try_reserve( output_type &v ) {
+    bool try_reserve( output_type &v ) __TBB_override {
         spin_mutex::scoped_lock lock(my_mutex);
         if ( my_reserved ) {
             return false;
@@ -905,7 +1158,7 @@ public:
 
     //! Release a reserved item.
     /** true = item has been released and so remains in sender, dest must request or reserve future items */
-    /* override */ bool try_release( ) {
+    bool try_release( ) __TBB_override {
         spin_mutex::scoped_lock lock(my_mutex);
         __TBB_ASSERT( my_reserved && my_has_cached_item, "releasing non-existent reservation" );
         my_reserved = false;
@@ -915,7 +1168,7 @@ public:
     }
 
     //! Consumes a reserved item
-    /* override */ bool try_consume( ) {
+    bool try_consume( ) __TBB_override {
         spin_mutex::scoped_lock lock(my_mutex);
         __TBB_ASSERT( my_reserved && my_has_cached_item, "consuming non-existent reservation" );
         my_reserved = false;
@@ -941,7 +1194,7 @@ public:
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-    /*override*/void extract( ) {
+    void extract( ) __TBB_override {
         my_successors.built_successors().sender_extract(*this);   // removes "my_owner" == this from each successor
         my_active = init_my_active;
         my_reserved = false;
@@ -952,16 +1205,20 @@ public:
 protected:
 
     //! resets the source_node to its initial state
-    /*override*/void reset_node( __TBB_PFG_RESET_ARG(reset_flags f)) {
+    void reset_node( reset_flags f) __TBB_override {
         my_active = init_my_active;
         my_reserved =false;
         if(my_has_cached_item) {
             my_has_cached_item = false;
         }
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         if(f & rf_clear_edges) my_successors.clear();
-        if(f & rf_reset_bodies) my_body->reset_body();
-#endif
+        if(f & rf_reset_bodies) {
+            internal::source_body<output_type> *tmp = my_init_body->clone();
+            delete my_body;
+            my_body = tmp;
+        }
+        if(my_active)
+            this->my_graph.add_task_to_reset_list(create_put_task());
     }
 
 private:
@@ -969,12 +1226,13 @@ private:
     bool my_active;
     bool init_my_active;
     internal::source_body<output_type> *my_body;
+    internal::source_body<output_type> *my_init_body;
     internal::broadcast_cache< output_type > my_successors;
     bool my_reserved;
     bool my_has_cached_item;
     output_type my_cached_item;
 
-    // used by apply_body, can invoke body of node.
+    // used by apply_body_bypass, can invoke body of node.
     bool try_reserve_apply_body(output_type &v) {
         spin_mutex::scoped_lock lock(my_mutex);
         if ( my_reserved ) {
@@ -997,18 +1255,25 @@ private:
         }
     }
 
+    // when resetting, and if the source_node was created with my_active == true, then
+    // when we reset the node we must store a task to run the node, and spawn it only
+    // after the reset is complete and is_active() is again true.  This is why we don't
+    // test for is_active() here.
+    task* create_put_task() {
+        return ( new ( task::allocate_additional_child_of( *(this->my_graph.root_task()) ) )
+                        internal:: source_task_bypass < source_node< output_type > >( *this ) );
+    }
+
     //! Spawns a task that applies the body
-    /* override */ void spawn_put( ) {
-        task* tp = this->my_graph.root_task();
-        if(tp) {
-            FLOW_SPAWN( (* new ( task::allocate_additional_child_of( *tp ) )
-                        internal:: source_task_bypass < source_node< output_type > >( *this ) ) );
+    void spawn_put( ) {
+        if(this->my_graph.is_active()) {
+            FLOW_SPAWN( *create_put_task());
         }
     }
 
     friend class internal::source_task_bypass< source_node< output_type > >;
     //! Applies the body.  Returning SUCCESSFULLY_ENQUEUED okay; forward_task_bypass will handle it.
-    /* override */ task * apply_body_bypass( ) {
+    task * apply_body_bypass( ) {
         output_type v;
         if ( !try_reserve_apply_body(v) )
             return NULL;
@@ -1022,22 +1287,32 @@ private:
     }
 };  // class source_node
 
+template<typename T>
+struct allocate_buffer {
+    static const bool value = false;
+};
+
+template<>
+struct allocate_buffer<queueing> {
+    static const bool value = true;
+};
+
 //! Implements a function node that supports Input -> Output
-template < typename Input, typename Output = continue_msg, graph_buffer_policy G = queueing, typename Allocator=cache_aligned_allocator<Input> >
+template < typename Input, typename Output = continue_msg, typename Policy = queueing, typename Allocator=cache_aligned_allocator<Input> >
 class function_node : public graph_node, public internal::function_input<Input,Output,Allocator>, public internal::function_output<Output> {
 public:
     typedef Input input_type;
     typedef Output output_type;
-    typedef sender< input_type > predecessor_type;
-    typedef receiver< output_type > successor_type;
     typedef internal::function_input<input_type,output_type,Allocator> fInput_type;
     typedef internal::function_input_queue<input_type, Allocator> input_queue_type;
     typedef internal::function_output<output_type> fOutput_type;
+    typedef typename fInput_type::predecessor_type predecessor_type;
+    typedef typename fOutput_type::successor_type successor_type;
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-    using typename fInput_type::predecessor_list_type;
-    using typename fOutput_type::successor_list_type;
-    using fInput_type::my_predecessors;
+    typedef typename fInput_type::predecessor_list_type predecessor_list_type;
+    typedef typename fOutput_type::successor_list_type successor_list_type;
 #endif
+    using fInput_type::my_predecessors;
 
     //! Constructor
     // input_queue_type is allocated here, but destroyed in the function_input_base.
@@ -1045,29 +1320,29 @@ public:
     // be done in one place.  This would be an interface-breaking change.
     template< typename Body >
     function_node( graph &g, size_t concurrency, Body body ) :
-        graph_node(g), fInput_type(g, concurrency, body, G == queueing ?
+        graph_node(g), fInput_type(g, concurrency, body, allocate_buffer<Policy>::value ?
                new input_queue_type( ) : NULL ) {
-        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_FUNCTION_NODE, &this->graph_node::my_graph,
+        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_FUNCTION_NODE, &this->my_graph,
                 static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this), this->my_body );
     }
 
     //! Copy constructor
     function_node( const function_node& src ) :
-        graph_node(src.graph_node::my_graph),
-        fInput_type(src, G == queueing ? new input_queue_type : NULL),
+        graph_node(src.my_graph),
+        fInput_type(src, allocate_buffer<Policy>::value ? new input_queue_type : NULL),
         fOutput_type() {
-        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_FUNCTION_NODE, &this->graph_node::my_graph,
+        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_FUNCTION_NODE, &this->my_graph,
                 static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this), this->my_body );
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_node_desc( this, name );
     }
 #endif
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-    /*override*/void extract( ) {
+    void extract( ) __TBB_override {
         my_predecessors.built_predecessors().receiver_extract(*this);
         successors().built_successors().sender_extract(*this);
     }
@@ -1079,28 +1354,24 @@ protected:
     template<typename X, typename Y> friend class internal::round_robin_cache;
     using fInput_type::try_put_task;
 
-    /* override */ internal::broadcast_cache<output_type> &successors () { return fOutput_type::my_successors; }
+    internal::broadcast_cache<output_type> &successors () __TBB_override { return fOutput_type::my_successors; }
 
-    // override of graph_node's reset.
-    /*override*/void reset_node(__TBB_PFG_RESET_ARG(reset_flags f)) {
-        fInput_type::reset_function_input(__TBB_PFG_RESET_ARG(f));
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
+    void reset_node(reset_flags f) __TBB_override {
+        fInput_type::reset_function_input(f);
         // TODO: use clear() instead.
-        if(f & rf_clear_edges) { 
+        if(f & rf_clear_edges) {
             successors().clear();
             my_predecessors.clear();
         }
         __TBB_ASSERT(!(f & rf_clear_edges) || successors().empty(), "function_node successors not empty");
         __TBB_ASSERT(this->my_predecessors.empty(), "function_node predecessors not empty");
-#endif
     }
 
 };  // class function_node
 
-
 //! implements a function node that supports Input -> (set of outputs)
 // Output is a tuple of output types.
-template < typename Input, typename Output, graph_buffer_policy G = queueing, typename Allocator=cache_aligned_allocator<Input> >
+template < typename Input, typename Output, typename Policy = queueing, typename Allocator=cache_aligned_allocator<Input> >
 class multifunction_node :
     public graph_node,
     public internal::multifunction_input
@@ -1114,7 +1385,6 @@ class multifunction_node :
         Allocator
     > {
 protected:
-    using graph_node::my_graph;
     static const int N = tbb::flow::tuple_size<Output>::value;
 public:
     typedef Input input_type;
@@ -1128,85 +1398,127 @@ private:
 public:
     template<typename Body>
     multifunction_node( graph &g, size_t concurrency, Body body ) :
-        graph_node(g), base_type(g,concurrency, body,  G == queueing ? new input_queue_type : NULL) {
-        tbb::internal::fgt_multioutput_node_with_body<Output,N>( tbb::internal::FLOW_MULTIFUNCTION_NODE,
-                &this->graph_node::my_graph, static_cast<receiver<input_type> *>(this),
+        graph_node(g), base_type(g,concurrency, body,  allocate_buffer<Policy>::value ? new input_queue_type : NULL) {
+        tbb::internal::fgt_multioutput_node_with_body<N>( tbb::internal::FLOW_MULTIFUNCTION_NODE,
+                &this->my_graph, static_cast<receiver<input_type> *>(this),
                 this->output_ports(), this->my_body );
     }
 
     multifunction_node( const multifunction_node &other) :
-        graph_node(other.graph_node::my_graph), base_type(other,  G == queueing ? new input_queue_type : NULL) {
-        tbb::internal::fgt_multioutput_node_with_body<Output,N>( tbb::internal::FLOW_MULTIFUNCTION_NODE,
-                &this->graph_node::my_graph, static_cast<receiver<input_type> *>(this),
+        graph_node(other.my_graph), base_type(other,  allocate_buffer<Policy>::value ? new input_queue_type : NULL) {
+        tbb::internal::fgt_multioutput_node_with_body<N>( tbb::internal::FLOW_MULTIFUNCTION_NODE,
+                &this->my_graph, static_cast<receiver<input_type> *>(this),
                 this->output_ports(), this->my_body );
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_multioutput_node_desc( this, name );
     }
 #endif
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-    void extract( ) {
+    void extract( ) __TBB_override {
         my_predecessors.built_predecessors().receiver_extract(*this);
         base_type::extract();
     }
 #endif
     // all the guts are in multifunction_input...
 protected:
-    /*override*/void reset_node(__TBB_PFG_RESET_ARG(reset_flags f)) { base_type::reset(__TBB_PFG_RESET_ARG(f)); }
+    void reset_node(reset_flags f) __TBB_override { base_type::reset(f); }
 };  // multifunction_node
 
 //! split_node: accepts a tuple as input, forwards each element of the tuple to its
-//  successors.  The node has unlimited concurrency, so though it is marked as
-//  "rejecting" it does not reject inputs.
+//  successors.  The node has unlimited concurrency, so it does not reject inputs.
 template<typename TupleType, typename Allocator=cache_aligned_allocator<TupleType> >
-class split_node : public multifunction_node<TupleType, TupleType, rejecting, Allocator> {
+class split_node : public graph_node, public receiver<TupleType> {
     static const int N = tbb::flow::tuple_size<TupleType>::value;
-    typedef multifunction_node<TupleType,TupleType,rejecting,Allocator> base_type;
-public:
-    typedef typename base_type::output_ports_type output_ports_type;
-    typedef typename base_type::output_type output_type;
-private:
-    struct splitting_body {
-        void operator()(const TupleType& t, output_ports_type &p) {
-            internal::emit_element<N>::emit_this(t, p);
-        }
-    };
+    typedef receiver<TupleType> base_type;
 public:
     typedef TupleType input_type;
     typedef Allocator allocator_type;
-    split_node(graph &g) : base_type(g, unlimited, splitting_body()) {
-        tbb::internal::fgt_multioutput_node<TupleType,N>( tbb::internal::FLOW_SPLIT_NODE, &this->graph_node::my_graph,
-                                                          static_cast<receiver<input_type> *>(this), this->output_ports() );
-    }
+#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
+    typedef typename base_type::predecessor_type predecessor_type;
+    typedef typename base_type::predecessor_list_type predecessor_list_type;
+    typedef internal::predecessor_cache<input_type, null_mutex > predecessor_cache_type;
+    typedef typename predecessor_cache_type::built_predecessors_type built_predecessors_type;
+#endif
 
-    split_node( const split_node & other) : base_type(other) {
-        tbb::internal::fgt_multioutput_node<TupleType,N>( tbb::internal::FLOW_SPLIT_NODE, &this->graph_node::my_graph,
-                                                          static_cast<receiver<input_type> *>(this), this->output_ports() );
+    typedef typename internal::wrap_tuple_elements<
+            N,  // #elements in tuple
+            internal::multifunction_output,  // wrap this around each element
+            TupleType // the tuple providing the types
+        >::type  output_ports_type;
+
+    explicit split_node(graph &g) : graph_node(g)
+    {
+        tbb::internal::fgt_multioutput_node<N>(tbb::internal::FLOW_SPLIT_NODE, &this->my_graph,
+            static_cast<receiver<input_type> *>(this), this->output_ports());
+    }
+    split_node( const split_node & other) : graph_node(other.my_graph), base_type(other)
+    {
+        tbb::internal::fgt_multioutput_node<N>(tbb::internal::FLOW_SPLIT_NODE, &this->my_graph,
+            static_cast<receiver<input_type> *>(this), this->output_ports());
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_multioutput_node_desc( this, name );
     }
 #endif
 
+    output_ports_type &output_ports() { return my_output_ports; }
+
+protected:
+    task *try_put_task(const TupleType& t) __TBB_override {
+        // Sending split messages in parallel is not justified, as overheads would prevail
+        internal::emit_element<N>::emit_this(t, output_ports());
+
+        //we do not have successors here.So we just tell the task is successful.
+        return SUCCESSFULLY_ENQUEUED;
+    }
+    void reset_node(reset_flags f) __TBB_override {
+        if (f & rf_clear_edges)
+            internal::clear_element<N>::clear_this(my_output_ports);
+
+        __TBB_ASSERT(!(f & rf_clear_edges) || internal::clear_element<N>::this_empty(my_output_ports), "split_node reset failed");
+    }
+    void reset_receiver(reset_flags /*f*/) __TBB_override {}
+
+#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
+private: //! split_node doesn't use this "predecessors" functionality; so, we have "dummies" here;
+    void extract() __TBB_override {}
+
+    //! Adds to list of predecessors added by make_edge
+    void internal_add_built_predecessor(predecessor_type&) __TBB_override {}
+
+    //! removes from to list of predecessors (used by remove_edge)
+    void internal_delete_built_predecessor(predecessor_type&) __TBB_override {}
+
+    size_t predecessor_count() __TBB_override { return 0; }
+
+    void copy_predecessors(predecessor_list_type&) __TBB_override {}
+
+    built_predecessors_type &built_predecessors() __TBB_override { return my_predessors; }
+
+    //! dummy member
+    built_predecessors_type my_predessors;
+#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */
+
+private:
+    output_ports_type my_output_ports;
 };
 
 //! Implements an executable node that supports continue_msg -> Output
 template <typename Output>
 class continue_node : public graph_node, public internal::continue_input<Output>, public internal::function_output<Output> {
-protected:
-    using graph_node::my_graph;
 public:
     typedef continue_msg input_type;
     typedef Output output_type;
-    typedef sender< input_type > predecessor_type;
-    typedef receiver< output_type > successor_type;
     typedef internal::continue_input<Output> fInput_type;
     typedef internal::function_output<output_type> fOutput_type;
+    typedef typename fInput_type::predecessor_type predecessor_type;
+    typedef typename fOutput_type::successor_type successor_type;
 
     //! Constructor for executable node with continue_msg -> Output
     template <typename Body >
@@ -1229,7 +1541,7 @@ public:
 
     //! Copy constructor
     continue_node( const continue_node& src ) :
-        graph_node(src.graph_node::my_graph), internal::continue_input<output_type>(src),
+        graph_node(src.my_graph), internal::continue_input<output_type>(src),
         internal::function_output<Output>() {
         tbb::internal::fgt_node_with_body( tbb::internal::FLOW_CONTINUE_NODE, &this->my_graph,
                                            static_cast<receiver<input_type> *>(this),
@@ -1237,13 +1549,13 @@ public:
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_node_desc( this, name );
     }
 #endif
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-    /*override graph_node*/ void extract() {
+    void extract() __TBB_override {
         fInput_type::my_built_predecessors.receiver_extract(*this);
         successors().built_successors().sender_extract(*this);
     }
@@ -1254,27 +1566,22 @@ protected:
     template<typename X, typename Y> friend class internal::broadcast_cache;
     template<typename X, typename Y> friend class internal::round_robin_cache;
     using fInput_type::try_put_task;
-    /* override */ internal::broadcast_cache<output_type> &successors () { return fOutput_type::my_successors; }
+    internal::broadcast_cache<output_type> &successors () __TBB_override { return fOutput_type::my_successors; }
 
-    /*override*/void reset_node(__TBB_PFG_RESET_ARG(reset_flags f)) {
-        fInput_type::reset_receiver(__TBB_PFG_RESET_ARG(f));
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
+    void reset_node(reset_flags f) __TBB_override {
+        fInput_type::reset_receiver(f);
         if(f & rf_clear_edges)successors().clear();
         __TBB_ASSERT(!(f & rf_clear_edges) || successors().empty(), "continue_node not reset");
-#endif
     }
-
 };  // continue_node
 
 template< typename T >
 class overwrite_node : public graph_node, public receiver<T>, public sender<T> {
-protected:
-    using graph_node::my_graph;
 public:
     typedef T input_type;
     typedef T output_type;
-    typedef sender< input_type > predecessor_type;
-    typedef receiver< output_type > successor_type;
+    typedef typename receiver<input_type>::predecessor_type predecessor_type;
+    typedef typename sender<output_type>::successor_type successor_type;
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     typedef typename receiver<input_type>::built_predecessors_type built_predecessors_type;
     typedef typename sender<output_type>::built_successors_type built_successors_type;
@@ -1282,7 +1589,7 @@ public:
     typedef typename sender<output_type>::successor_list_type successor_list_type;
 #endif
 
-    overwrite_node(graph &g) : graph_node(g), my_buffer_is_valid(false) {
+    explicit overwrite_node(graph &g) : graph_node(g), my_buffer_is_valid(false) {
         my_successors.set_owner( this );
         tbb::internal::fgt_node( tbb::internal::FLOW_OVERWRITE_NODE, &this->my_graph,
                                  static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this) );
@@ -1300,15 +1607,14 @@ public:
     ~overwrite_node() {}
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_node_desc( this, name );
     }
 #endif
 
-    /* override */ bool register_successor( successor_type &s ) {
+    bool register_successor( successor_type &s ) __TBB_override {
         spin_mutex::scoped_lock l( my_mutex );
-        task* tp = this->my_graph.root_task();  // just to test if we are resetting
-        if (my_buffer_is_valid && tp) {
+        if (my_buffer_is_valid && this->my_graph.is_active()) {
             // We have a valid value that must be forwarded immediately.
             if ( s.try_put( my_buffer ) || !s.register_predecessor( *this  ) ) {
                 // We add the successor: it accepted our put or it rejected it but won't let us become a predecessor
@@ -1324,57 +1630,57 @@ public:
         return true;
     }
 
-    /* override */ bool remove_successor( successor_type &s ) {
+    bool remove_successor( successor_type &s ) __TBB_override {
         spin_mutex::scoped_lock l( my_mutex );
         my_successors.remove_successor(s);
         return true;
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-    /*override*/built_predecessors_type &built_predecessors() { return my_built_predecessors; }
-    /*override*/built_successors_type   &built_successors()   { return my_successors.built_successors(); }
+    built_predecessors_type &built_predecessors() __TBB_override { return my_built_predecessors; }
+    built_successors_type   &built_successors()   __TBB_override { return my_successors.built_successors(); }
 
-    /*override*/void internal_add_built_successor( successor_type &s) {
+    void internal_add_built_successor( successor_type &s) __TBB_override {
         spin_mutex::scoped_lock l( my_mutex );
         my_successors.internal_add_built_successor(s);
     }
 
-    /*override*/void internal_delete_built_successor( successor_type &s) {
+    void internal_delete_built_successor( successor_type &s) __TBB_override {
         spin_mutex::scoped_lock l( my_mutex );
         my_successors.internal_delete_built_successor(s);
     }
 
-    /*override*/size_t successor_count() {
+    size_t successor_count() __TBB_override {
         spin_mutex::scoped_lock l( my_mutex );
         return my_successors.successor_count();
     }
 
-    /*override*/ void copy_successors(successor_list_type &v) {
+    void copy_successors(successor_list_type &v) __TBB_override {
         spin_mutex::scoped_lock l( my_mutex );
         my_successors.copy_successors(v);
     }
 
-    /*override*/ void internal_add_built_predecessor( predecessor_type &p) {
+    void internal_add_built_predecessor( predecessor_type &p) __TBB_override {
         spin_mutex::scoped_lock l( my_mutex );
         my_built_predecessors.add_edge(p);
     }
 
-    /*override*/ void internal_delete_built_predecessor( predecessor_type &p) {
+    void internal_delete_built_predecessor( predecessor_type &p) __TBB_override {
         spin_mutex::scoped_lock l( my_mutex );
         my_built_predecessors.delete_edge(p);
     }
 
-    /*override*/size_t predecessor_count() {
+    size_t predecessor_count() __TBB_override {
         spin_mutex::scoped_lock l( my_mutex );
         return my_built_predecessors.edge_count();
     }
 
-    /*override*/void copy_predecessors(predecessor_list_type &v) {
+    void copy_predecessors(predecessor_list_type &v) __TBB_override {
         spin_mutex::scoped_lock l( my_mutex );
         my_built_predecessors.copy_edges(v);
     }
 
-    /*override*/ void extract() {
+    void extract() __TBB_override {
         my_buffer_is_valid = false;
         built_successors().sender_extract(*this);
         built_predecessors().receiver_extract(*this);
@@ -1382,7 +1688,7 @@ public:
 
 #endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */
 
-    /* override */ bool try_get( input_type &v ) {
+    bool try_get( input_type &v ) __TBB_override {
         spin_mutex::scoped_lock l( my_mutex );
         if ( my_buffer_is_valid ) {
             v = my_buffer;
@@ -1405,12 +1711,16 @@ protected:
     template< typename R, typename B > friend class run_and_put_task;
     template<typename X, typename Y> friend class internal::broadcast_cache;
     template<typename X, typename Y> friend class internal::round_robin_cache;
-    /* override */ task * try_put_task( const input_type &v ) {
+    task * try_put_task( const input_type &v ) __TBB_override {
         spin_mutex::scoped_lock l( my_mutex );
+        return try_put_task_impl(v);
+    }
+
+    task * try_put_task_impl(const input_type &v) {
         my_buffer = v;
         my_buffer_is_valid = true;
         task * rtask = my_successors.try_put_task(v);
-        if(!rtask) rtask = SUCCESSFULLY_ENQUEUED;
+        if (!rtask) rtask = SUCCESSFULLY_ENQUEUED;
         return rtask;
     }
 
@@ -1421,16 +1731,13 @@ protected:
 #endif
     input_type my_buffer;
     bool my_buffer_is_valid;
-    /*override*/void reset_receiver(__TBB_PFG_RESET_ARG(reset_flags /*f*/)) {}
+    void reset_receiver(reset_flags /*f*/) __TBB_override {}
 
-    /*override*/void reset_node( __TBB_PFG_RESET_ARG(reset_flags f)) {
+    void reset_node( reset_flags f) __TBB_override {
         my_buffer_is_valid = false;
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
        if (f&rf_clear_edges) {
            my_successors.clear();
-           my_built_predecessors.receiver_extract(*this);
        }
-#endif
     }
 };  // overwrite_node
 
@@ -1439,11 +1746,11 @@ class write_once_node : public overwrite_node<T> {
 public:
     typedef T input_type;
     typedef T output_type;
-    typedef sender< input_type > predecessor_type;
-    typedef receiver< output_type > successor_type;
+    typedef typename receiver<input_type>::predecessor_type predecessor_type;
+    typedef typename sender<output_type>::successor_type successor_type;
 
     //! Constructor
-    write_once_node(graph& g) : overwrite_node<T>(g) {
+    explicit write_once_node(graph& g) : overwrite_node<T>(g) {
         tbb::internal::fgt_node( tbb::internal::FLOW_WRITE_ONCE_NODE, &(this->my_graph),
                                  static_cast<receiver<input_type> *>(this),
                                  static_cast<sender<output_type> *>(this) );
@@ -1457,7 +1764,7 @@ public:
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_node_desc( this, name );
     }
 #endif
@@ -1466,30 +1773,20 @@ protected:
     template< typename R, typename B > friend class run_and_put_task;
     template<typename X, typename Y> friend class internal::broadcast_cache;
     template<typename X, typename Y> friend class internal::round_robin_cache;
-    /* override */ task *try_put_task( const T &v ) {
+    task *try_put_task( const T &v ) __TBB_override {
         spin_mutex::scoped_lock l( this->my_mutex );
-        if ( this->my_buffer_is_valid ) {
-            return NULL;
-        } else {
-            this->my_buffer = v;
-            this->my_buffer_is_valid = true;
-            task *res = this->my_successors.try_put_task(v);
-            if(!res) res = SUCCESSFULLY_ENQUEUED;
-            return res;
-        }
+        return this->my_buffer_is_valid ? NULL : this->try_put_task_impl(v);
     }
 };
 
 //! Forwards messages of type T to all successors
 template <typename T>
 class broadcast_node : public graph_node, public receiver<T>, public sender<T> {
-protected:
-    using graph_node::my_graph;
 public:
     typedef T input_type;
     typedef T output_type;
-    typedef sender< input_type > predecessor_type;
-    typedef receiver< output_type > successor_type;
+    typedef typename receiver<input_type>::predecessor_type predecessor_type;
+    typedef typename sender<output_type>::successor_type successor_type;
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;
     typedef typename sender<output_type>::successor_list_type successor_list_type;
@@ -1502,7 +1799,7 @@ private:
 #endif
 public:
 
-    broadcast_node(graph& g) : graph_node(g) {
+    explicit broadcast_node(graph& g) : graph_node(g) {
         my_successors.set_owner( this );
         tbb::internal::fgt_node( tbb::internal::FLOW_BROADCAST_NODE, &this->my_graph,
                                  static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this) );
@@ -1518,19 +1815,19 @@ public:
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_node_desc( this, name );
     }
 #endif
 
     //! Adds a successor
-    virtual bool register_successor( receiver<T> &r ) {
+    bool register_successor( successor_type &r ) __TBB_override {
         my_successors.register_successor( r );
         return true;
     }
 
     //! Removes s as a successor
-    virtual bool remove_successor( receiver<T> &r ) {
+    bool remove_successor( successor_type &r ) __TBB_override {
         my_successors.remove_successor( r );
         return true;
     }
@@ -1538,49 +1835,49 @@ public:
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     typedef typename sender<T>::built_successors_type built_successors_type;
 
-    /*override sender*/ built_successors_type &built_successors() { return my_successors.built_successors(); }
+    built_successors_type &built_successors() __TBB_override { return my_successors.built_successors(); }
 
-    /*override sender*/ void internal_add_built_successor(successor_type &r) {
+    void internal_add_built_successor(successor_type &r) __TBB_override {
         my_successors.internal_add_built_successor(r);
     }
 
-    /*override sender*/ void internal_delete_built_successor(successor_type &r) {
+    void internal_delete_built_successor(successor_type &r) __TBB_override {
         my_successors.internal_delete_built_successor(r);
     }
 
-    /*override sender*/ size_t successor_count() {
+    size_t successor_count() __TBB_override {
         return my_successors.successor_count();
     }
 
-    /*override*/ void copy_successors(successor_list_type &v) {
+    void copy_successors(successor_list_type &v) __TBB_override {
         my_successors.copy_successors(v);
     }
 
     typedef typename receiver<T>::built_predecessors_type built_predecessors_type;
 
-    /*override receiver*/ built_predecessors_type &built_predecessors() { return my_built_predecessors; } 
+    built_predecessors_type &built_predecessors() __TBB_override { return my_built_predecessors; } 
 
-    /*override*/ void internal_add_built_predecessor( predecessor_type &p) {
+    void internal_add_built_predecessor( predecessor_type &p) __TBB_override {
         spin_mutex::scoped_lock l(pred_mutex);
         my_built_predecessors.add_edge(p);
     }
 
-    /*override*/ void internal_delete_built_predecessor( predecessor_type &p) {
+    void internal_delete_built_predecessor( predecessor_type &p) __TBB_override {
         spin_mutex::scoped_lock l(pred_mutex);
         my_built_predecessors.delete_edge(p);
     }
 
-    /*override*/ size_t predecessor_count() {
+    size_t predecessor_count() __TBB_override {
         spin_mutex::scoped_lock l(pred_mutex);
         return my_built_predecessors.edge_count();
     }
 
-    /*override*/ void copy_predecessors(predecessor_list_type &v) {
+    void copy_predecessors(predecessor_list_type &v) __TBB_override {
         spin_mutex::scoped_lock l(pred_mutex);
         my_built_predecessors.copy_edges(v);
     }
 
-    /*override graph_node*/ void extract() {
+    void extract() __TBB_override {
         my_built_predecessors.receiver_extract(*this);
         my_successors.built_successors().sender_extract(*this);
     }
@@ -1591,36 +1888,34 @@ protected:
     template<typename X, typename Y> friend class internal::broadcast_cache;
     template<typename X, typename Y> friend class internal::round_robin_cache;
     //! build a task to run the successor if possible.  Default is old behavior.
-    /*override*/ task *try_put_task(const T& t) {
+    task *try_put_task(const T& t) __TBB_override {
         task *new_task = my_successors.try_put_task(t);
-        if(!new_task) new_task = SUCCESSFULLY_ENQUEUED;
+        if (!new_task) new_task = SUCCESSFULLY_ENQUEUED;
         return new_task;
     }
 
-    /*override*/void reset_receiver(__TBB_PFG_RESET_ARG(reset_flags /*f*/)) {}
+    void reset_receiver(reset_flags /*f*/) __TBB_override {}
 
-    /*override*/void reset_node(__TBB_PFG_RESET_ARG(reset_flags f)) {
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
+    void reset_node(reset_flags f) __TBB_override {
         if (f&rf_clear_edges) {
            my_successors.clear();
+#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
            my_built_predecessors.clear();
+#endif
         }
         __TBB_ASSERT(!(f & rf_clear_edges) || my_successors.empty(), "Error resetting broadcast_node");
-#endif
     }
 };  // broadcast_node
 
 //! Forwards messages in arbitrary order
 template <typename T, typename A=cache_aligned_allocator<T> >
 class buffer_node : public graph_node, public internal::reservable_item_buffer<T, A>, public receiver<T>, public sender<T> {
-protected:
-    using graph_node::my_graph;
 public:
     typedef T input_type;
     typedef T output_type;
-    typedef sender< input_type > predecessor_type;
-    typedef receiver< output_type > successor_type;
-    typedef buffer_node<T, A> my_class;
+    typedef typename receiver<input_type>::predecessor_type predecessor_type;
+    typedef typename sender<output_type>::successor_type successor_type;
+    typedef buffer_node<T, A> class_type;
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;
     typedef typename sender<output_type>::successor_list_type successor_list_type;
@@ -1643,7 +1938,6 @@ protected:
         blt_succ_cpy, blt_pred_cpy   // create vector copies of preds and succs
 #endif
     };
-    enum op_stat {WAIT=0, SUCCEEDED, FAILED};
 
     // implements the aggregator_operation concept
     class buffer_operation : public internal::aggregated_operation< buffer_operation > {
@@ -1676,24 +1970,31 @@ protected:
     };
 
     bool forwarder_busy;
-    typedef internal::aggregating_functor<my_class, buffer_operation> my_handler;
-    friend class internal::aggregating_functor<my_class, buffer_operation>;
-    internal::aggregator< my_handler, buffer_operation> my_aggregator;
+    typedef internal::aggregating_functor<class_type, buffer_operation> handler_type;
+    friend class internal::aggregating_functor<class_type, buffer_operation>;
+    internal::aggregator< handler_type, buffer_operation> my_aggregator;
 
     virtual void handle_operations(buffer_operation *op_list) {
+        handle_operations_impl(op_list, this);
+    }
+
+    template<typename derived_type>
+    void handle_operations_impl(buffer_operation *op_list, derived_type* derived) {
+        __TBB_ASSERT(static_cast<class_type*>(derived) == this, "'this' is not a base class for derived");
+
         buffer_operation *tmp = NULL;
-        bool try_forwarding=false;
+        bool try_forwarding = false;
         while (op_list) {
             tmp = op_list;
             op_list = op_list->next;
             switch (tmp->type) {
-            case reg_succ: internal_reg_succ(tmp);  try_forwarding = true; break;
+            case reg_succ: internal_reg_succ(tmp); try_forwarding = true; break;
             case rem_succ: internal_rem_succ(tmp); break;
             case req_item: internal_pop(tmp); break;
             case res_item: internal_reserve(tmp); break;
-            case rel_res:  internal_release(tmp);  try_forwarding = true; break;
-            case con_res:  internal_consume(tmp);  try_forwarding = true; break;
-            case put_item: internal_push(tmp);  try_forwarding = (tmp->status == SUCCEEDED); break;
+            case rel_res:  internal_release(tmp); try_forwarding = true; break;
+            case con_res:  internal_consume(tmp); try_forwarding = true; break;
+            case put_item: try_forwarding = internal_push(tmp); break;
             case try_fwd_task: internal_forward_task(tmp); break;
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
             // edge recording
@@ -1708,11 +2009,13 @@ protected:
 #endif
             }
         }
+
+        derived->order();
+
         if (try_forwarding && !forwarder_busy) {
-            task* tp = this->my_graph.root_task();
-            if(tp) {
+            if(this->my_graph.is_active()) {
                 forwarder_busy = true;
-                task *new_task = new(task::allocate_additional_child_of(*tp)) internal::
+                task *new_task = new(task::allocate_additional_child_of(*(this->my_graph.root_task()))) internal::
                         forward_task_bypass
                         < buffer_node<input_type, A> >(*this);
                 // tmp should point to the last item handled by the aggregator.  This is the operation
@@ -1741,147 +2044,164 @@ protected:
         buffer_operation op_data(try_fwd_task);
         task *last_task = NULL;
         do {
-            op_data.status = WAIT;
+            op_data.status = internal::WAIT;
             op_data.ltask = NULL;
             my_aggregator.execute(&op_data);
             tbb::task *xtask = op_data.ltask;
             last_task = combine_tasks(last_task, xtask);
-        } while (op_data.status == SUCCEEDED);
+        } while (op_data.status ==internal::SUCCEEDED);
         return last_task;
     }
 
     //! Register successor
     virtual void internal_reg_succ(buffer_operation *op) {
         my_successors.register_successor(*(op->r));
-        __TBB_store_with_release(op->status, SUCCEEDED);
+        __TBB_store_with_release(op->status, internal::SUCCEEDED);
     }
 
     //! Remove successor
     virtual void internal_rem_succ(buffer_operation *op) {
         my_successors.remove_successor(*(op->r));
-        __TBB_store_with_release(op->status, SUCCEEDED);
+        __TBB_store_with_release(op->status, internal::SUCCEEDED);
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     typedef typename sender<T>::built_successors_type built_successors_type;
 
-    /*override sender*/ built_successors_type &built_successors() { return my_successors.built_successors(); }
+    built_successors_type &built_successors() __TBB_override { return my_successors.built_successors(); }
 
     virtual void internal_add_built_succ(buffer_operation *op) {
         my_successors.internal_add_built_successor(*(op->r));
-        __TBB_store_with_release(op->status, SUCCEEDED);
+        __TBB_store_with_release(op->status, internal::SUCCEEDED);
     }
 
     virtual void internal_del_built_succ(buffer_operation *op) {
         my_successors.internal_delete_built_successor(*(op->r));
-        __TBB_store_with_release(op->status, SUCCEEDED);
+        __TBB_store_with_release(op->status, internal::SUCCEEDED);
     }
 
     typedef typename receiver<T>::built_predecessors_type built_predecessors_type;
 
-    /*override receiver*/ built_predecessors_type &built_predecessors() { return my_built_predecessors; } 
+    built_predecessors_type &built_predecessors() __TBB_override { return my_built_predecessors; } 
 
     virtual void internal_add_built_pred(buffer_operation *op) {
         my_built_predecessors.add_edge(*(op->p));
-        __TBB_store_with_release(op->status, SUCCEEDED);
+        __TBB_store_with_release(op->status, internal::SUCCEEDED);
     }
 
     virtual void internal_del_built_pred(buffer_operation *op) {
         my_built_predecessors.delete_edge(*(op->p));
-        __TBB_store_with_release(op->status, SUCCEEDED);
+        __TBB_store_with_release(op->status, internal::SUCCEEDED);
     }
 
     virtual void internal_succ_cnt(buffer_operation *op) {
         op->cnt_val = my_successors.successor_count();
-        __TBB_store_with_release(op->status, SUCCEEDED);
+        __TBB_store_with_release(op->status, internal::SUCCEEDED);
     }
 
     virtual void internal_pred_cnt(buffer_operation *op) {
         op->cnt_val = my_built_predecessors.edge_count();
-        __TBB_store_with_release(op->status, SUCCEEDED);
+        __TBB_store_with_release(op->status, internal::SUCCEEDED);
     }
 
     virtual void internal_copy_succs(buffer_operation *op) {
         my_successors.copy_successors(*(op->svec));
-        __TBB_store_with_release(op->status, SUCCEEDED);
+        __TBB_store_with_release(op->status, internal::SUCCEEDED);
     }
 
     virtual void internal_copy_preds(buffer_operation *op) {
         my_built_predecessors.copy_edges(*(op->pvec));
-        __TBB_store_with_release(op->status, SUCCEEDED);
+        __TBB_store_with_release(op->status, internal::SUCCEEDED);
     }
 
 #endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */
 
+private:
+    void order() {}
+
+    bool is_item_valid() {
+        return this->my_item_valid(this->my_tail - 1);
+    }
+
+    void try_put_and_add_task(task*& last_task) {
+        task *new_task = my_successors.try_put_task(this->back());
+        if (new_task) {
+            last_task = combine_tasks(last_task, new_task);
+            this->destroy_back();
+        }
+    }
+
+protected:
     //! Tries to forward valid items to successors
     virtual void internal_forward_task(buffer_operation *op) {
-        if (this->my_reserved || !this->my_item_valid(this->my_tail-1)) {
-            __TBB_store_with_release(op->status, FAILED);
+        internal_forward_task_impl(op, this);
+    }
+
+    template<typename derived_type>
+    void internal_forward_task_impl(buffer_operation *op, derived_type* derived) {
+        __TBB_ASSERT(static_cast<class_type*>(derived) == this, "'this' is not a base class for derived");
+
+        if (this->my_reserved || !derived->is_item_valid()) {
+            __TBB_store_with_release(op->status, internal::FAILED);
             this->forwarder_busy = false;
             return;
         }
-        T i_copy;
+        // Try forwarding, giving each successor a chance
         task * last_task = NULL;
         size_type counter = my_successors.size();
-        // Try forwarding, giving each successor a chance
-        while (counter>0 && !this->buffer_empty() && this->my_item_valid(this->my_tail-1)) {
-            this->copy_back(i_copy);
-            task *new_task = my_successors.try_put_task(i_copy);
-            if(new_task) {
-                last_task = combine_tasks(last_task, new_task);
-                this->destroy_back();
-            }
-            --counter;
-        }
+        for (; counter > 0 && derived->is_item_valid(); --counter)
+            derived->try_put_and_add_task(last_task);
+
         op->ltask = last_task;  // return task
         if (last_task && !counter) {
-            __TBB_store_with_release(op->status, SUCCEEDED);
+            __TBB_store_with_release(op->status, internal::SUCCEEDED);
         }
         else {
-            __TBB_store_with_release(op->status, FAILED);
+            __TBB_store_with_release(op->status, internal::FAILED);
             forwarder_busy = false;
         }
     }
 
-    virtual void internal_push(buffer_operation *op) {
+    virtual bool internal_push(buffer_operation *op) {
         this->push_back(*(op->elem));
-        __TBB_store_with_release(op->status, SUCCEEDED);
+        __TBB_store_with_release(op->status, internal::SUCCEEDED);
+        return true;
     }
 
     virtual void internal_pop(buffer_operation *op) {
         if(this->pop_back(*(op->elem))) {
-            __TBB_store_with_release(op->status, SUCCEEDED);
+            __TBB_store_with_release(op->status, internal::SUCCEEDED);
         }
         else {
-            __TBB_store_with_release(op->status, FAILED);
+            __TBB_store_with_release(op->status, internal::FAILED);
         }
     }
 
     virtual void internal_reserve(buffer_operation *op) {
         if(this->reserve_front(*(op->elem))) {
-            __TBB_store_with_release(op->status, SUCCEEDED);
+            __TBB_store_with_release(op->status, internal::SUCCEEDED);
         }
         else {
-            __TBB_store_with_release(op->status, FAILED);
+            __TBB_store_with_release(op->status, internal::FAILED);
         }
     }
 
     virtual void internal_consume(buffer_operation *op) {
         this->consume_front();
-        __TBB_store_with_release(op->status, SUCCEEDED);
+        __TBB_store_with_release(op->status, internal::SUCCEEDED);
     }
 
     virtual void internal_release(buffer_operation *op) {
         this->release_front();
-        __TBB_store_with_release(op->status, SUCCEEDED);
+        __TBB_store_with_release(op->status, internal::SUCCEEDED);
     }
 
 public:
     //! Constructor
-    buffer_node( graph &g ) : graph_node(g), internal::reservable_item_buffer<T>(),
+    explicit buffer_node( graph &g ) : graph_node(g), internal::reservable_item_buffer<T>(),
         forwarder_busy(false) {
         my_successors.set_owner(this);
-        my_aggregator.initialize_handler(my_handler(this));
+        my_aggregator.initialize_handler(handler_type(this));
         tbb::internal::fgt_node( tbb::internal::FLOW_BUFFER_NODE, &this->my_graph,
                                  static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this) );
     }
@@ -1891,15 +2211,13 @@ public:
         internal::reservable_item_buffer<T>(), receiver<T>(), sender<T>() {
         forwarder_busy = false;
         my_successors.set_owner(this);
-        my_aggregator.initialize_handler(my_handler(this));
+        my_aggregator.initialize_handler(handler_type(this));
         tbb::internal::fgt_node( tbb::internal::FLOW_BUFFER_NODE, &this->my_graph,
                                  static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this) );
     }
 
-    virtual ~buffer_node() {}
-
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_node_desc( this, name );
     }
 #endif
@@ -1910,7 +2228,7 @@ public:
 
     //! Adds a new successor.
     /** Adds successor r to the list of successors; may forward tasks.  */
-    /* override */ bool register_successor( successor_type &r ) {
+    bool register_successor( successor_type &r ) __TBB_override {
         buffer_operation op_data(reg_succ);
         op_data.r = &r;
         my_aggregator.execute(&op_data);
@@ -1919,49 +2237,49 @@ public:
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-    /*override*/ void internal_add_built_successor( successor_type &r) {
+    void internal_add_built_successor( successor_type &r) __TBB_override {
         buffer_operation op_data(add_blt_succ);
         op_data.r = &r;
         my_aggregator.execute(&op_data);
     }
 
-    /*override*/ void internal_delete_built_successor( successor_type &r) {
+    void internal_delete_built_successor( successor_type &r) __TBB_override {
         buffer_operation op_data(del_blt_succ);
         op_data.r = &r;
         my_aggregator.execute(&op_data);
     }
 
-    /*override*/ void internal_add_built_predecessor( predecessor_type &p) {
+    void internal_add_built_predecessor( predecessor_type &p) __TBB_override {
         buffer_operation op_data(add_blt_pred);
         op_data.p = &p;
         my_aggregator.execute(&op_data);
     }
 
-    /*override*/ void internal_delete_built_predecessor( predecessor_type &p) {
+    void internal_delete_built_predecessor( predecessor_type &p) __TBB_override {
         buffer_operation op_data(del_blt_pred);
         op_data.p = &p;
         my_aggregator.execute(&op_data);
     }
 
-    /*override*/ size_t predecessor_count() {
+    size_t predecessor_count() __TBB_override {
         buffer_operation op_data(blt_pred_cnt);
         my_aggregator.execute(&op_data);
         return op_data.cnt_val;
     }
 
-    /*override*/ size_t successor_count() {
+    size_t successor_count() __TBB_override {
         buffer_operation op_data(blt_succ_cnt);
         my_aggregator.execute(&op_data);
         return op_data.cnt_val;
     }
 
-    /*override*/ void copy_predecessors( predecessor_list_type &v ) {
+    void copy_predecessors( predecessor_list_type &v ) __TBB_override {
         buffer_operation op_data(blt_pred_cpy);
         op_data.pvec = &v;
         my_aggregator.execute(&op_data);
     }
 
-    /*override*/ void copy_successors( successor_list_type &v ) {
+    void copy_successors( successor_list_type &v ) __TBB_override {
         buffer_operation op_data(blt_succ_cpy);
         op_data.svec = &v;
         my_aggregator.execute(&op_data);
@@ -1972,7 +2290,7 @@ public:
     //! Removes a successor.
     /** Removes successor r from the list of successors.
         It also calls r.remove_predecessor(*this) to remove this node as a predecessor. */
-    /* override */ bool remove_successor( successor_type &r ) {
+    bool remove_successor( successor_type &r ) __TBB_override {
         r.remove_predecessor(*this);
         buffer_operation op_data(rem_succ);
         op_data.r = &r;
@@ -1987,28 +2305,28 @@ public:
     //! Request an item from the buffer_node
     /**  true = v contains the returned item<BR>
          false = no item has been returned */
-    /* override */ bool try_get( T &v ) {
+    bool try_get( T &v ) __TBB_override {
         buffer_operation op_data(req_item);
         op_data.elem = &v;
         my_aggregator.execute(&op_data);
         (void)enqueue_forwarding_task(op_data);
-        return (op_data.status==SUCCEEDED);
+        return (op_data.status==internal::SUCCEEDED);
     }
 
     //! Reserves an item.
     /**  false = no item can be reserved<BR>
          true = an item is reserved */
-    /* override */ bool try_reserve( T &v ) {
+    bool try_reserve( T &v ) __TBB_override {
         buffer_operation op_data(res_item);
         op_data.elem = &v;
         my_aggregator.execute(&op_data);
         (void)enqueue_forwarding_task(op_data);
-        return (op_data.status==SUCCEEDED);
+        return (op_data.status==internal::SUCCEEDED);
     }
 
     //! Release a reserved item.
     /**  true = item has been released and so remains in sender */
-    /* override */ bool try_release() {
+    bool try_release() __TBB_override {
         buffer_operation op_data(rel_res);
         my_aggregator.execute(&op_data);
         (void)enqueue_forwarding_task(op_data);
@@ -2017,7 +2335,7 @@ public:
 
     //! Consumes a reserved item.
     /** true = item is removed from sender and reservation removed */
-    /* override */ bool try_consume() {
+    bool try_consume() __TBB_override {
         buffer_operation op_data(con_res);
         my_aggregator.execute(&op_data);
         (void)enqueue_forwarding_task(op_data);
@@ -2030,49 +2348,47 @@ protected:
     template<typename X, typename Y> friend class internal::broadcast_cache;
     template<typename X, typename Y> friend class internal::round_robin_cache;
     //! receive an item, return a task *if possible
-    /* override */ task *try_put_task(const T &t) {
+    task *try_put_task(const T &t) __TBB_override {
         buffer_operation op_data(t, put_item);
         my_aggregator.execute(&op_data);
         task *ft = grab_forwarding_task(op_data);
         // sequencer_nodes can return failure (if an item has been previously inserted)
         // We have to spawn the returned task if our own operation fails.
 
-        if(ft && op_data.status == FAILED) {
+        if(ft && op_data.status ==internal::FAILED) {
             // we haven't succeeded queueing the item, but for some reason the
             // call returned a task (if another request resulted in a successful
             // forward this could happen.)  Queue the task and reset the pointer.
             FLOW_SPAWN(*ft); ft = NULL;
         }
-        else if(!ft && op_data.status == SUCCEEDED) {
+        else if(!ft && op_data.status ==internal::SUCCEEDED) {
             ft = SUCCESSFULLY_ENQUEUED;
         }
         return ft;
     }
 
-    /*override*/void reset_receiver(__TBB_PFG_RESET_ARG(reset_flags /*f*/)) { }
+    void reset_receiver(reset_flags /*f*/) __TBB_override { }
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
 public:
-    /* override*/ void extract() {
+    void extract() __TBB_override {
         my_built_predecessors.receiver_extract(*this);
         my_successors.built_successors().sender_extract(*this);
     }
 #endif
 
 protected:
-    /*override*/void reset_node( __TBB_PFG_RESET_ARG(reset_flags f)) {
+    void reset_node( reset_flags f) __TBB_override {
         internal::reservable_item_buffer<T, A>::reset();
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         // TODO: just clear structures
         if (f&rf_clear_edges) {
             my_successors.clear();
+#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
             my_built_predecessors.clear();
-        }
 #endif
+        }
         forwarder_busy = false;
     }
-
-
 };  // buffer_node
 
 //! Forwards messages in FIFO order
@@ -2081,69 +2397,60 @@ class queue_node : public buffer_node<T, A> {
 protected:
     typedef buffer_node<T, A> base_type;
     typedef typename base_type::size_type size_type;
-    typedef typename base_type::buffer_operation queue_operation;
-
-    enum op_stat {WAIT=0, SUCCEEDED, FAILED};
-
-    /* override */ void internal_forward_task(queue_operation *op) {
-        if (this->my_reserved || !this->my_item_valid(this->my_head)) {
-            __TBB_store_with_release(op->status, FAILED);
-            this->forwarder_busy = false;
-            return;
-        }
-        T i_copy;
-        task *last_task = NULL;
-        size_type counter = this->my_successors.size();
-        // Keep trying to send items while there is at least one accepting successor
-        while (counter>0 && this->my_item_valid(this->my_head)) {
-            this->copy_front(i_copy);
-            task *new_task = this->my_successors.try_put_task(i_copy);
-            if(new_task) {
-                this->destroy_front();
-                last_task = combine_tasks(last_task, new_task);
-            }
-            --counter;
-        }
-        op->ltask = last_task;
-        if (last_task && !counter)
-            __TBB_store_with_release(op->status, SUCCEEDED);
-        else {
-            __TBB_store_with_release(op->status, FAILED);
-            this->forwarder_busy = false;
+    typedef typename base_type::buffer_operation queue_operation;
+    typedef queue_node class_type;
+
+private:
+    template<typename, typename> friend class buffer_node;
+
+    bool is_item_valid() {
+        return this->my_item_valid(this->my_head);
+    }
+
+    void try_put_and_add_task(task*& last_task) {
+        task *new_task = this->my_successors.try_put_task(this->front());
+        if (new_task) {
+            last_task = combine_tasks(last_task, new_task);
+            this->destroy_front();
         }
     }
 
-    /* override */ void internal_pop(queue_operation *op) {
+protected:
+    void internal_forward_task(queue_operation *op) __TBB_override {
+        this->internal_forward_task_impl(op, this);
+    }
+
+    void internal_pop(queue_operation *op) __TBB_override {
         if ( this->my_reserved || !this->my_item_valid(this->my_head)){
-            __TBB_store_with_release(op->status, FAILED);
+            __TBB_store_with_release(op->status, internal::FAILED);
         }
         else {
             this->pop_front(*(op->elem));
-            __TBB_store_with_release(op->status, SUCCEEDED);
+            __TBB_store_with_release(op->status, internal::SUCCEEDED);
         }
     }
-    /* override */ void internal_reserve(queue_operation *op) {
+    void internal_reserve(queue_operation *op) __TBB_override {
         if (this->my_reserved || !this->my_item_valid(this->my_head)) {
-            __TBB_store_with_release(op->status, FAILED);
+            __TBB_store_with_release(op->status, internal::FAILED);
         }
         else {
             this->reserve_front(*(op->elem));
-            __TBB_store_with_release(op->status, SUCCEEDED);
+            __TBB_store_with_release(op->status, internal::SUCCEEDED);
         }
     }
-    /* override */ void internal_consume(queue_operation *op) {
+    void internal_consume(queue_operation *op) __TBB_override {
         this->consume_front();
-        __TBB_store_with_release(op->status, SUCCEEDED);
+        __TBB_store_with_release(op->status, internal::SUCCEEDED);
     }
 
 public:
     typedef T input_type;
     typedef T output_type;
-    typedef sender< input_type > predecessor_type;
-    typedef receiver< output_type > successor_type;
+    typedef typename receiver<input_type>::predecessor_type predecessor_type;
+    typedef typename sender<output_type>::successor_type successor_type;
 
     //! Constructor
-    queue_node( graph &g ) : base_type(g) {
+    explicit queue_node( graph &g ) : base_type(g) {
         tbb::internal::fgt_node( tbb::internal::FLOW_QUEUE_NODE, &(this->my_graph),
                                  static_cast<receiver<input_type> *>(this),
                                  static_cast<sender<output_type> *>(this) );
@@ -2157,14 +2464,14 @@ public:
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_node_desc( this, name );
     }
 #endif
 
 protected:
-    /*override*/void reset_node( __TBB_PFG_RESET_ARG(reset_flags f)) {
-        base_type::reset_node(__TBB_PFG_RESET_ARG(f));
+    void reset_node( reset_flags f) __TBB_override {
+        base_type::reset_node(f);
     }
 };  // queue_node
 
@@ -2177,8 +2484,8 @@ class sequencer_node : public queue_node<T, A> {
 public:
     typedef T input_type;
     typedef T output_type;
-    typedef sender< input_type > predecessor_type;
-    typedef receiver< output_type > successor_type;
+    typedef typename receiver<input_type>::predecessor_type predecessor_type;
+    typedef typename sender<output_type>::successor_type successor_type;
 
     //! Constructor
     template< typename Sequencer >
@@ -2201,7 +2508,7 @@ public:
     ~sequencer_node() { delete my_sequencer; }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_node_desc( this, name );
     }
 #endif
@@ -2210,32 +2517,27 @@ protected:
     typedef typename buffer_node<T, A>::size_type size_type;
     typedef typename buffer_node<T, A>::buffer_operation sequencer_operation;
 
-    enum op_stat {WAIT=0, SUCCEEDED, FAILED};
-
 private:
-    /* override */ void internal_push(sequencer_operation *op) {
+    bool internal_push(sequencer_operation *op) __TBB_override {
         size_type tag = (*my_sequencer)(*(op->elem));
 #if !TBB_DEPRECATED_SEQUENCER_DUPLICATES
-        if(tag < this->my_head) {
+        if (tag < this->my_head) {
             // have already emitted a message with this tag
-            __TBB_store_with_release(op->status, FAILED);
-            return;
+            __TBB_store_with_release(op->status, internal::FAILED);
+            return false;
         }
 #endif
         // cannot modify this->my_tail now; the buffer would be inconsistent.
         size_t new_tail = (tag+1 > this->my_tail) ? tag+1 : this->my_tail;
 
-        if(this->size(new_tail) > this->capacity()) {
+        if (this->size(new_tail) > this->capacity()) {
             this->grow_my_array(this->size(new_tail));
         }
         this->my_tail = new_tail;
-        if(this->place_item(tag,*(op->elem))) {
-            __TBB_store_with_release(op->status, SUCCEEDED);
-        }
-        else {
-            // already have a message with this tag
-            __TBB_store_with_release(op->status, FAILED);
-        }
+
+        const internal::op_stat res = this->place_item(tag, *(op->elem)) ? internal::SUCCEEDED : internal::FAILED;
+        __TBB_store_with_release(op->status, res);
+        return res ==internal::SUCCEEDED;
     }
 };  // sequencer_node
 
@@ -2246,11 +2548,12 @@ public:
     typedef T input_type;
     typedef T output_type;
     typedef buffer_node<T,A> base_type;
-    typedef sender< input_type > predecessor_type;
-    typedef receiver< output_type > successor_type;
+    typedef priority_queue_node class_type;
+    typedef typename receiver<input_type>::predecessor_type predecessor_type;
+    typedef typename sender<output_type>::successor_type successor_type;
 
     //! Constructor
-    priority_queue_node( graph &g ) : buffer_node<T, A>(g), mark(0) {
+    explicit priority_queue_node( graph &g ) : buffer_node<T, A>(g), mark(0) {
         tbb::internal::fgt_node( tbb::internal::FLOW_PRIORITY_QUEUE_NODE, &(this->my_graph),
                                  static_cast<receiver<input_type> *>(this),
                                  static_cast<sender<output_type> *>(this) );
@@ -2264,145 +2567,96 @@ public:
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_node_desc( this, name );
     }
 #endif
 
-
 protected:
 
-    /*override*/void reset_node( __TBB_PFG_RESET_ARG(reset_flags f)) {
+    void reset_node( reset_flags f) __TBB_override {
         mark = 0;
-        base_type::reset_node(__TBB_PFG_RESET_ARG(f));
+        base_type::reset_node(f);
     }
 
     typedef typename buffer_node<T, A>::size_type size_type;
     typedef typename buffer_node<T, A>::item_type item_type;
     typedef typename buffer_node<T, A>::buffer_operation prio_operation;
 
-    enum op_stat {WAIT=0, SUCCEEDED, FAILED};
-
-    /* override */ void handle_operations(prio_operation *op_list) {
-        prio_operation *tmp = op_list /*, *pop_list*/ ;
-        bool try_forwarding=false;
-        while (op_list) {
-            tmp = op_list;
-            op_list = op_list->next;
-            switch (tmp->type) {
-            case buffer_node<T, A>::reg_succ: this->internal_reg_succ(tmp); try_forwarding = true; break;
-            case buffer_node<T, A>::rem_succ: this->internal_rem_succ(tmp); break;
-            case buffer_node<T, A>::put_item: internal_push(tmp); try_forwarding = true; break;
-            case buffer_node<T, A>::try_fwd_task: internal_forward_task(tmp); break;
-            case buffer_node<T, A>::rel_res: internal_release(tmp); try_forwarding = true; break;
-            case buffer_node<T, A>::con_res: internal_consume(tmp); try_forwarding = true; break;
-            case buffer_node<T, A>::req_item: internal_pop(tmp); break;
-            case buffer_node<T, A>::res_item: internal_reserve(tmp); break;
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-            case buffer_node<T, A>::add_blt_succ: this->internal_add_built_succ(tmp); break;
-            case buffer_node<T, A>::del_blt_succ: this->internal_del_built_succ(tmp); break;
-            case buffer_node<T, A>::add_blt_pred: this->internal_add_built_pred(tmp); break;
-            case buffer_node<T, A>::del_blt_pred: this->internal_del_built_pred(tmp); break;
-            case buffer_node<T, A>::blt_succ_cnt: this->internal_succ_cnt(tmp); break;
-            case buffer_node<T, A>::blt_pred_cnt: this->internal_pred_cnt(tmp); break;
-            case buffer_node<T, A>::blt_succ_cpy: this->internal_copy_succs(tmp); break;
-            case buffer_node<T, A>::blt_pred_cpy: this->internal_copy_preds(tmp); break;
-#endif
-            }
-        }
-        // process pops!  for now, no special pop processing
-        // concurrent_priority_queue handles pushes first, then pops.
-        // that is the genesis of this comment
-        if (mark<this->my_tail) heapify();
-        __TBB_ASSERT(mark == this->my_tail, "mark unequal after heapify");
-        if (try_forwarding && !this->forwarder_busy) {  // could we also test for this->my_tail (queue non-empty)?
-            task* tp = this->my_graph.root_task();
-            if(tp) {
-                this->forwarder_busy = true;
-                task *new_task = new(task::allocate_additional_child_of(*tp)) internal::
-                        forward_task_bypass
-                        < buffer_node<input_type, A> >(*this);
-                // tmp should point to the last item handled by the aggregator.  This is the operation
-                // the handling thread enqueued.  So modifying that record will be okay.
-                tbb::task *tmp1 = tmp->ltask;
-                tmp->ltask = combine_tasks(tmp1, new_task);
-            }
-        }
-    }
-
     //! Tries to forward valid items to successors
-    /* override */ void internal_forward_task(prio_operation *op) {
-        T i_copy;
-        task * last_task = NULL; // flagged when a successor accepts
-        size_type counter = this->my_successors.size();
+    void internal_forward_task(prio_operation *op) __TBB_override {
+        this->internal_forward_task_impl(op, this);
+    }
 
-        if (this->my_reserved || this->my_tail == 0) {
-            __TBB_store_with_release(op->status, FAILED);
-            this->forwarder_busy = false;
-            return;
-        }
-        // Keep trying to send while there exists an accepting successor
-        while (counter>0 && this->my_tail > 0) {
-            prio_copy(i_copy);
-            task * new_task = this->my_successors.try_put_task(i_copy);
-            if ( new_task ) {
-                last_task = combine_tasks(last_task, new_task);
-                prio_pop();
-            }
-            --counter;
-        }
-        op->ltask = last_task;
-        if (last_task && !counter)
-            __TBB_store_with_release(op->status, SUCCEEDED);
-        else {
-            __TBB_store_with_release(op->status, FAILED);
-            this->forwarder_busy = false;
-        }
+    void handle_operations(prio_operation *op_list) __TBB_override {
+        this->handle_operations_impl(op_list, this);
     }
 
-    /* override */ void internal_push(prio_operation *op) {
+    bool internal_push(prio_operation *op) __TBB_override {
         prio_push(*(op->elem));
-        __TBB_store_with_release(op->status, SUCCEEDED);
+        __TBB_store_with_release(op->status, internal::SUCCEEDED);
+        return true;
     }
 
-    /* override */ void internal_pop(prio_operation *op) {
+    void internal_pop(prio_operation *op) __TBB_override {
         // if empty or already reserved, don't pop
         if ( this->my_reserved == true || this->my_tail == 0 ) {
-            __TBB_store_with_release(op->status, FAILED);
+            __TBB_store_with_release(op->status, internal::FAILED);
             return;
         }
 
-        prio_copy(*(op->elem));
-        __TBB_store_with_release(op->status, SUCCEEDED);
+        *(op->elem) = prio();
+        __TBB_store_with_release(op->status, internal::SUCCEEDED);
         prio_pop();
 
     }
 
     // pops the highest-priority item, saves copy
-    /* override */ void internal_reserve(prio_operation *op) {
+    void internal_reserve(prio_operation *op) __TBB_override {
         if (this->my_reserved == true || this->my_tail == 0) {
-            __TBB_store_with_release(op->status, FAILED);
+            __TBB_store_with_release(op->status, internal::FAILED);
             return;
         }
         this->my_reserved = true;
-        prio_copy(*(op->elem));
+        *(op->elem) = prio();
         reserved_item = *(op->elem);
-        __TBB_store_with_release(op->status, SUCCEEDED);
+        __TBB_store_with_release(op->status, internal::SUCCEEDED);
         prio_pop();
     }
 
-    /* override */ void internal_consume(prio_operation *op) {
-        __TBB_store_with_release(op->status, SUCCEEDED);
+    void internal_consume(prio_operation *op) __TBB_override {
+        __TBB_store_with_release(op->status, internal::SUCCEEDED);
         this->my_reserved = false;
         reserved_item = input_type();
     }
 
-    /* override */ void internal_release(prio_operation *op) {
-        __TBB_store_with_release(op->status, SUCCEEDED);
+    void internal_release(prio_operation *op) __TBB_override {
+        __TBB_store_with_release(op->status, internal::SUCCEEDED);
         prio_push(reserved_item);
         this->my_reserved = false;
         reserved_item = input_type();
     }
+
+private:
+    template<typename, typename> friend class buffer_node;
+
+    void order() {
+        if (mark < this->my_tail) heapify();
+        __TBB_ASSERT(mark == this->my_tail, "mark unequal after heapify");
+    }
+
+    bool is_item_valid() {
+        return this->my_tail > 0;
+    }
+
+    void try_put_and_add_task(task*& last_task) {
+        task * new_task = this->my_successors.try_put_task(this->prio());
+        if (new_task) {
+            last_task = combine_tasks(last_task, new_task);
+            prio_pop();
+        }
+    }
+
 private:
     Compare compare;
     size_type mark;
@@ -2429,7 +2683,7 @@ private:
     // and mark.  Assumes the array has already been tested for emptiness; no failure.
     void prio_pop()  {
         if (prio_use_tail()) {
-            // there are newly pushed elems; last one higher than top
+            // there are newly pushed elements; last one higher than top
             // copy the data
             this->destroy_item(this->my_tail-1);
             --(this->my_tail);
@@ -2449,13 +2703,8 @@ private:
         __TBB_ASSERT(mark <= this->my_tail, "mark outside bounds after pop");
     }
 
-    void prio_copy(T &res) {
-        if (prio_use_tail()) {
-            res = this->get_my_item(this->my_tail - 1);
-        }
-        else {
-            res = this->get_my_item(0);
-        }
+    const T& prio() {
+        return this->get_my_item(prio_use_tail() ? this->my_tail-1 : 0);
     }
 
     // turn array into heap
@@ -2507,19 +2756,18 @@ private:
     message is dropped. */
 template< typename T >
 class limiter_node : public graph_node, public receiver< T >, public sender< T > {
-protected:
-    using graph_node::my_graph;
 public:
     typedef T input_type;
     typedef T output_type;
-    typedef sender< input_type > predecessor_type;
-    typedef receiver< output_type > successor_type;
+    typedef typename receiver<input_type>::predecessor_type predecessor_type;
+    typedef typename sender<output_type>::successor_type successor_type;
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     typedef typename receiver<input_type>::built_predecessors_type built_predecessors_type;
     typedef typename sender<output_type>::built_successors_type built_successors_type;
     typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;
     typedef typename sender<output_type>::successor_list_type successor_list_type;
 #endif
+    //TODO: There is a lack of predefined types for its controlling "decrementer" port. It should be fixed later.
 
 private:
     size_t my_threshold;
@@ -2552,8 +2800,8 @@ private:
                     return NULL;
             }
 
-        //SUCCESS 
-        // if we can reserve and can put, we consume the reservation 
+        //SUCCESS
+        // if we can reserve and can put, we consume the reservation
         // we increment the count and decrement the tries
         if ( (my_predecessors.try_reserve(v)) == true ){
             reserved=true;
@@ -2564,9 +2812,8 @@ private:
                     --my_tries;
                     my_predecessors.try_consume();
                     if ( check_conditions() ) {
-                        task* tp = this->my_graph.root_task();
-                        if ( tp ) {
-                            task *rtask = new ( task::allocate_additional_child_of( *tp ) )
+                        if ( this->my_graph.is_active() ) {
+                            task *rtask = new ( task::allocate_additional_child_of( *(this->my_graph.root_task()) ) )
                                 internal::forward_task_bypass< limiter_node<T> >( *this );
                             FLOW_SPAWN (*rtask);
                         }
@@ -2583,9 +2830,8 @@ private:
             --my_tries;
             if (reserved) my_predecessors.try_release();
             if ( check_conditions() ) {
-                task* tp = this->my_graph.root_task();
-                if ( tp ) {
-                    task *rtask = new ( task::allocate_additional_child_of( *tp ) )
+                if ( this->my_graph.is_active() ) {
+                    task *rtask = new ( task::allocate_additional_child_of( *(this->my_graph.root_task()) ) )
                         internal::forward_task_bypass< limiter_node<T> >( *this );
                     __TBB_ASSERT(!rval, "Have two tasks to handle");
                     return rtask;
@@ -2642,21 +2888,20 @@ public:
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_node_desc( this, name );
     }
 #endif
 
     //! Replace the current successor with this new successor
-    /* override */ bool register_successor( receiver<output_type> &r ) {
+    bool register_successor( successor_type &r ) __TBB_override {
         spin_mutex::scoped_lock lock(my_mutex);
         bool was_empty = my_successors.empty();
         my_successors.register_successor(r);
         //spawn a forward task if this is the only successor
         if ( was_empty && !my_predecessors.empty() && my_count + my_tries < my_threshold ) {
-            task* tp = this->my_graph.root_task();
-            if ( tp ) {
-                FLOW_SPAWN( (* new ( task::allocate_additional_child_of( *tp ) )
+            if ( this->my_graph.is_active() ) {
+                FLOW_SPAWN( (* new ( task::allocate_additional_child_of( *(this->my_graph.root_task()) ) )
                             internal::forward_task_bypass < limiter_node<T> >( *this ) ) );
             }
         }
@@ -2665,45 +2910,45 @@ public:
 
     //! Removes a successor from this node
     /** r.remove_predecessor(*this) is also called. */
-    /* override */ bool remove_successor( receiver<output_type> &r ) {
+    bool remove_successor( successor_type &r ) __TBB_override {
         r.remove_predecessor(*this);
         my_successors.remove_successor(r);
         return true;
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-    /*override*/ built_successors_type &built_successors() { return my_successors.built_successors(); }
-    /*override*/ built_predecessors_type &built_predecessors() { return my_predecessors.built_predecessors(); }
+    built_successors_type &built_successors() __TBB_override { return my_successors.built_successors(); }
+    built_predecessors_type &built_predecessors() __TBB_override { return my_predecessors.built_predecessors(); }
 
-    /*override*/void internal_add_built_successor(receiver<output_type> &src) {
+    void internal_add_built_successor(successor_type &src) __TBB_override {
         my_successors.internal_add_built_successor(src);
     }
 
-    /*override*/void internal_delete_built_successor(receiver<output_type> &src) {
+    void internal_delete_built_successor(successor_type &src) __TBB_override {
         my_successors.internal_delete_built_successor(src);
     }
 
-    /*override*/size_t successor_count() { return my_successors.successor_count(); }
+    size_t successor_count() __TBB_override { return my_successors.successor_count(); }
 
-    /*override*/ void copy_successors(successor_list_type &v) {
+    void copy_successors(successor_list_type &v) __TBB_override {
         my_successors.copy_successors(v);
     }
 
-    /*override*/void internal_add_built_predecessor(sender<output_type> &src) {
+    void internal_add_built_predecessor(predecessor_type &src) __TBB_override {
         my_predecessors.internal_add_built_predecessor(src);
     }
 
-    /*override*/void internal_delete_built_predecessor(sender<output_type> &src) {
+    void internal_delete_built_predecessor(predecessor_type &src) __TBB_override {
         my_predecessors.internal_delete_built_predecessor(src);
     }
 
-    /*override*/size_t predecessor_count() { return my_predecessors.predecessor_count(); }
+    size_t predecessor_count() __TBB_override { return my_predecessors.predecessor_count(); }
 
-    /*override*/ void copy_predecessors(predecessor_list_type &v) {
+    void copy_predecessors(predecessor_list_type &v) __TBB_override {
         my_predecessors.copy_predecessors(v);
     }
 
-    /*override*/void extract() {
+    void extract() __TBB_override {
         my_count = 0;
         my_successors.built_successors().sender_extract(*this);
         my_predecessors.built_predecessors().receiver_extract(*this);
@@ -2712,19 +2957,18 @@ public:
 #endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */
 
     //! Adds src to the list of cached predecessors.
-    /* override */ bool register_predecessor( predecessor_type &src ) {
+    bool register_predecessor( predecessor_type &src ) __TBB_override {
         spin_mutex::scoped_lock lock(my_mutex);
         my_predecessors.add( src );
-        task* tp = this->my_graph.root_task();
-        if ( my_count + my_tries < my_threshold && !my_successors.empty() && tp ) {
-            FLOW_SPAWN( (* new ( task::allocate_additional_child_of( *tp ) )
+        if ( my_count + my_tries < my_threshold && !my_successors.empty() && this->my_graph.is_active() ) {
+            FLOW_SPAWN( (* new ( task::allocate_additional_child_of( *(this->my_graph.root_task()) ) )
                         internal::forward_task_bypass < limiter_node<T> >( *this ) ) );
         }
         return true;
     }
 
     //! Removes src from the list of cached predecessors.
-    /* override */ bool remove_predecessor( predecessor_type &src ) {
+    bool remove_predecessor( predecessor_type &src ) __TBB_override {
         my_predecessors.remove( src );
         return true;
     }
@@ -2735,7 +2979,7 @@ protected:
     template<typename X, typename Y> friend class internal::broadcast_cache;
     template<typename X, typename Y> friend class internal::round_robin_cache;
     //! Puts an item to this receiver
-    /* override */ task *try_put_task( const T &t ) {
+    task *try_put_task( const T &t ) __TBB_override {
         {
             spin_mutex::scoped_lock lock(my_mutex);
             if ( my_count + my_tries >= my_threshold )
@@ -2749,9 +2993,8 @@ protected:
         if ( !rtask ) {  // try_put_task failed.
             spin_mutex::scoped_lock lock(my_mutex);
             --my_tries;
-            task* tp = this->my_graph.root_task();
-            if ( check_conditions() && tp ) {
-                rtask = new ( task::allocate_additional_child_of( *tp ) )
+            if ( check_conditions() && this->my_graph.is_active() ) {
+                rtask = new ( task::allocate_additional_child_of( *(this->my_graph.root_task()) ) )
                     internal::forward_task_bypass< limiter_node<T> >( *this );
             }
         }
@@ -2763,23 +3006,21 @@ protected:
         return rtask;
     }
 
-    /*override*/void reset_receiver(__TBB_PFG_RESET_ARG(reset_flags /*f*/)) { 
+    void reset_receiver(reset_flags /*f*/) __TBB_override {
         __TBB_ASSERT(false,NULL);  // should never be called
     }
 
-    /*override*/void reset_node( __TBB_PFG_RESET_ARG(reset_flags f)) {
+    void reset_node( reset_flags f) __TBB_override {
         my_count = 0;
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         if(f & rf_clear_edges) {
             my_predecessors.clear();
             my_successors.clear();
         }
         else
-#endif
         {
             my_predecessors.reset( );
         }
-        decrement.reset_receiver(__TBB_PFG_RESET_ARG(f));
+        decrement.reset_receiver(f);
     }
 };  // limiter_node
 
@@ -2787,12 +3028,11 @@ protected:
 
 using internal::reserving_port;
 using internal::queueing_port;
-using internal::tag_matching_port;
+using internal::key_matching_port;
 using internal::input_port;
 using internal::tag_value;
-using internal::NO_TAG;
 
-template<typename OutputTuple, graph_buffer_policy JP=queueing> class join_node;
+template<typename OutputTuple, typename JP=queueing> class join_node;
 
 template<typename OutputTuple>
 class join_node<OutputTuple,reserving>: public internal::unfolded_join_node<tbb::flow::tuple_size<OutputTuple>::value, reserving_port, OutputTuple, reserving> {
@@ -2802,17 +3042,17 @@ private:
 public:
     typedef OutputTuple output_type;
     typedef typename unfolded_type::input_ports_type input_ports_type;
-    join_node(graph &g) : unfolded_type(g) {
-        tbb::internal::fgt_multiinput_node<OutputTuple,N>( tbb::internal::FLOW_JOIN_NODE_RESERVING, &this->my_graph,
+    explicit join_node(graph &g) : unfolded_type(g) {
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_RESERVING, &this->my_graph,
                                             this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
     join_node(const join_node &other) : unfolded_type(other) {
-        tbb::internal::fgt_multiinput_node<OutputTuple,N>( tbb::internal::FLOW_JOIN_NODE_RESERVING, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_RESERVING, &this->my_graph,
                                             this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_node_desc( this, name );
     }
 #endif
@@ -2827,53 +3067,58 @@ private:
 public:
     typedef OutputTuple output_type;
     typedef typename unfolded_type::input_ports_type input_ports_type;
-    join_node(graph &g) : unfolded_type(g) {
-        tbb::internal::fgt_multiinput_node<OutputTuple,N>( tbb::internal::FLOW_JOIN_NODE_QUEUEING, &this->my_graph,
+    explicit join_node(graph &g) : unfolded_type(g) {
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_QUEUEING, &this->my_graph,
                                             this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
     join_node(const join_node &other) : unfolded_type(other) {
-        tbb::internal::fgt_multiinput_node<OutputTuple,N>( tbb::internal::FLOW_JOIN_NODE_QUEUEING, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_QUEUEING, &this->my_graph,
                                             this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_node_desc( this, name );
     }
 #endif
 
 };
 
-// template for tag_matching join_node
-template<typename OutputTuple>
-class join_node<OutputTuple, tag_matching> : public internal::unfolded_join_node<tbb::flow::tuple_size<OutputTuple>::value,
-      tag_matching_port, OutputTuple, tag_matching> {
+// template for key_matching join_node
+// tag_matching join_node is a specialization of key_matching, and is source-compatible.
+template<typename OutputTuple, typename K, typename KHash>
+class join_node<OutputTuple, key_matching<K, KHash> > : public internal::unfolded_join_node<tbb::flow::tuple_size<OutputTuple>::value,
+      key_matching_port, OutputTuple, key_matching<K,KHash> > {
 private:
     static const int N = tbb::flow::tuple_size<OutputTuple>::value;
-    typedef typename internal::unfolded_join_node<N, tag_matching_port, OutputTuple, tag_matching> unfolded_type;
+    typedef typename internal::unfolded_join_node<N, key_matching_port, OutputTuple, key_matching<K,KHash> > unfolded_type;
 public:
     typedef OutputTuple output_type;
     typedef typename unfolded_type::input_ports_type input_ports_type;
 
+#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING
+    join_node(graph &g) : unfolded_type(g) {}
+#endif  /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */
+
     template<typename __TBB_B0, typename __TBB_B1>
     join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1) : unfolded_type(g, b0, b1) {
-        tbb::internal::fgt_multiinput_node<OutputTuple,N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,
                                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
     template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2>
     join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2) : unfolded_type(g, b0, b1, b2) {
-        tbb::internal::fgt_multiinput_node<OutputTuple,N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,
                                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
     template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2, typename __TBB_B3>
     join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3) : unfolded_type(g, b0, b1, b2, b3) {
-        tbb::internal::fgt_multiinput_node<OutputTuple,N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,
                                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
     template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2, typename __TBB_B3, typename __TBB_B4>
     join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4) :
             unfolded_type(g, b0, b1, b2, b3, b4) {
-        tbb::internal::fgt_multiinput_node<OutputTuple,N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,
                                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
 #if __TBB_VARIADIC_MAX >= 6
@@ -2881,7 +3126,7 @@ public:
         typename __TBB_B5>
     join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5) :
             unfolded_type(g, b0, b1, b2, b3, b4, b5) {
-        tbb::internal::fgt_multiinput_node<OutputTuple,N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,
                                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
 #endif
@@ -2890,7 +3135,7 @@ public:
         typename __TBB_B5, typename __TBB_B6>
     join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5, __TBB_B6 b6) :
             unfolded_type(g, b0, b1, b2, b3, b4, b5, b6) {
-        tbb::internal::fgt_multiinput_node<OutputTuple,N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,
                                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
 #endif
@@ -2899,7 +3144,7 @@ public:
         typename __TBB_B5, typename __TBB_B6, typename __TBB_B7>
     join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5, __TBB_B6 b6,
             __TBB_B7 b7) : unfolded_type(g, b0, b1, b2, b3, b4, b5, b6, b7) {
-        tbb::internal::fgt_multiinput_node<OutputTuple,N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,
                                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
 #endif
@@ -2908,7 +3153,7 @@ public:
         typename __TBB_B5, typename __TBB_B6, typename __TBB_B7, typename __TBB_B8>
     join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5, __TBB_B6 b6,
             __TBB_B7 b7, __TBB_B8 b8) : unfolded_type(g, b0, b1, b2, b3, b4, b5, b6, b7, b8) {
-        tbb::internal::fgt_multiinput_node<OutputTuple,N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,
                                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
 #endif
@@ -2917,17 +3162,17 @@ public:
         typename __TBB_B5, typename __TBB_B6, typename __TBB_B7, typename __TBB_B8, typename __TBB_B9>
     join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5, __TBB_B6 b6,
             __TBB_B7 b7, __TBB_B8 b8, __TBB_B9 b9) : unfolded_type(g, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9) {
-        tbb::internal::fgt_multiinput_node<OutputTuple,N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,
                                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
 #endif
     join_node(const join_node &other) : unfolded_type(other) {
-        tbb::internal::fgt_multiinput_node<OutputTuple,N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,
                                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_node_desc( this, name );
     }
 #endif
@@ -2937,6 +3182,7 @@ public:
 // indexer node
 #include "internal/_flow_graph_indexer_impl.h"
 
+// TODO: Implement interface with variadic template or tuple
 template<typename T0, typename T1=null_type, typename T2=null_type, typename T3=null_type,
                       typename T4=null_type, typename T5=null_type, typename T6=null_type,
                       typename T7=null_type, typename T8=null_type, typename T9=null_type> class indexer_node;
@@ -2951,12 +3197,12 @@ public:
     typedef typename internal::tagged_msg<size_t, T0> output_type;
     typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;
     indexer_node(graph& g) : unfolded_type(g) {
-        tbb::internal::fgt_multiinput_node<InputTuple,N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
     // Copy constructor
     indexer_node( const indexer_node& other ) : unfolded_type(other) {
-        tbb::internal::fgt_multiinput_node<InputTuple,N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
 
@@ -2976,12 +3222,12 @@ public:
     typedef typename internal::tagged_msg<size_t, T0, T1> output_type;
     typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;
     indexer_node(graph& g) : unfolded_type(g) {
-        tbb::internal::fgt_multiinput_node<InputTuple,N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
     // Copy constructor
     indexer_node( const indexer_node& other ) : unfolded_type(other) {
-        tbb::internal::fgt_multiinput_node<InputTuple,N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
 
@@ -3001,12 +3247,12 @@ public:
     typedef typename internal::tagged_msg<size_t, T0, T1, T2> output_type;
     typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;
     indexer_node(graph& g) : unfolded_type(g) {
-        tbb::internal::fgt_multiinput_node<InputTuple,N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
     // Copy constructor
     indexer_node( const indexer_node& other ) : unfolded_type(other) {
-        tbb::internal::fgt_multiinput_node<InputTuple,N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
 
@@ -3026,17 +3272,17 @@ public:
     typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3> output_type;
     typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;
     indexer_node(graph& g) : unfolded_type(g) {
-        tbb::internal::fgt_multiinput_node<InputTuple,N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
     // Copy constructor
     indexer_node( const indexer_node& other ) : unfolded_type(other) {
-        tbb::internal::fgt_multiinput_node<InputTuple,N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_node_desc( this, name );
     }
 #endif
@@ -3051,17 +3297,17 @@ public:
     typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3, T4> output_type;
     typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;
     indexer_node(graph& g) : unfolded_type(g) {
-        tbb::internal::fgt_multiinput_node<InputTuple,N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
     // Copy constructor
     indexer_node( const indexer_node& other ) : unfolded_type(other) {
-        tbb::internal::fgt_multiinput_node<InputTuple,N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_node_desc( this, name );
     }
 #endif
@@ -3077,17 +3323,17 @@ public:
     typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3, T4, T5> output_type;
     typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;
     indexer_node(graph& g) : unfolded_type(g) {
-        tbb::internal::fgt_multiinput_node<InputTuple,N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
     // Copy constructor
     indexer_node( const indexer_node& other ) : unfolded_type(other) {
-        tbb::internal::fgt_multiinput_node<InputTuple,N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_node_desc( this, name );
     }
 #endif
@@ -3105,17 +3351,17 @@ public:
     typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3, T4, T5, T6> output_type;
     typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;
     indexer_node(graph& g) : unfolded_type(g) {
-        tbb::internal::fgt_multiinput_node<InputTuple,N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
     // Copy constructor
     indexer_node( const indexer_node& other ) : unfolded_type(other) {
-        tbb::internal::fgt_multiinput_node<InputTuple,N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_node_desc( this, name );
     }
 #endif
@@ -3133,17 +3379,17 @@ public:
     typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3, T4, T5, T6, T7> output_type;
     typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;
     indexer_node(graph& g) : unfolded_type(g) {
-        tbb::internal::fgt_multiinput_node<InputTuple,N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
     // Copy constructor
     indexer_node( const indexer_node& other ) : unfolded_type(other) {
-        tbb::internal::fgt_multiinput_node<InputTuple,N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_node_desc( this, name );
     }
 #endif
@@ -3161,17 +3407,17 @@ public:
     typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3, T4, T5, T6, T7, T8> output_type;
     typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;
     indexer_node(graph& g) : unfolded_type(g) {
-        tbb::internal::fgt_multiinput_node<InputTuple,N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
     // Copy constructor
     indexer_node( const indexer_node& other ) : unfolded_type(other) {
-        tbb::internal::fgt_multiinput_node<InputTuple,N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_node_desc( this, name );
     }
 #endif
@@ -3189,26 +3435,29 @@ public:
     typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> output_type;
     typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;
     indexer_node(graph& g) : unfolded_type(g) {
-        tbb::internal::fgt_multiinput_node<InputTuple,N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
     // Copy constructor
     indexer_node( const indexer_node& other ) : unfolded_type(other) {
-        tbb::internal::fgt_multiinput_node<InputTuple,N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
+        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,
                                            this->input_ports(), static_cast< sender< output_type > *>(this) );
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_node_desc( this, name );
     }
 #endif
 };
 #endif //variadic max 10
 
-//! Makes an edge between a single predecessor and a single successor
+#if __TBB_PREVIEW_ASYNC_MSG
+inline void internal_make_edge( internal::untyped_sender &p, internal::untyped_receiver &s ) {
+#else
 template< typename T >
-inline void make_edge( sender<T> &p, receiver<T> &s ) {
+inline void internal_make_edge( sender<T> &p, receiver<T> &s ) {
+#endif
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     s.internal_add_built_predecessor(p);
     p.internal_add_built_successor(s);
@@ -3217,34 +3466,61 @@ inline void make_edge( sender<T> &p, receiver<T> &s ) {
     tbb::internal::fgt_make_edge( &p, &s );
 }
 
-#if __TBB_PREVIEW_COMPOSITE_NODE
+//! Makes an edge between a single predecessor and a single successor
+template< typename T >
+inline void make_edge( sender<T> &p, receiver<T> &s ) {
+    internal_make_edge( p, s );
+}
+
+#if __TBB_PREVIEW_ASYNC_MSG
+template< typename TS, typename TR,
+    typename = typename tbb::internal::enable_if<tbb::internal::is_same_type<TS, internal::untyped_sender>::value
+                                              || tbb::internal::is_same_type<TR, internal::untyped_receiver>::value>::type>
+inline void make_edge( TS &p, TR &s ) {
+    internal_make_edge( p, s );
+}
+
+template< typename T >
+inline void make_edge( sender<T> &p, receiver<typename T::async_msg_data_type> &s ) {
+    internal_make_edge( p, s );
+}
+
+template< typename T >
+inline void make_edge( sender<typename T::async_msg_data_type> &p, receiver<T> &s ) {
+    internal_make_edge( p, s );
+}
+
+#endif // __TBB_PREVIEW_ASYNC_MSG
+
+#if __TBB_FLOW_GRAPH_CPP11_FEATURES
 //Makes an edge from port 0 of a multi-output predecessor to port 0 of a multi-input successor.
 template< typename T, typename V,
-          bool = tbb::internal::is_same_type< typename tuple_element<0,typename T::output_ports_type>::type,
-                                              typename tuple_element<0,typename V::input_ports_type>::type
-                                            >::value >
+          typename = typename T::output_ports_type, typename = typename V::input_ports_type >
 inline void make_edge( T& output, V& input) {
     make_edge(get<0>(output.output_ports()), get<0>(input.input_ports()));
 }
 
 //Makes an edge from port 0 of a multi-output predecessor to a receiver.
-template< typename T, typename R, 
-          bool = tbb::internal::is_same_type<typename tuple_element<0,typename T::output_ports_type>::type, receiver<R> >::value >
+template< typename T, typename R,
+          typename = typename T::output_ports_type >
 inline void make_edge( T& output, receiver<R>& input) {
      make_edge(get<0>(output.output_ports()), input);
 }
 
 //Makes an edge from a sender to port 0 of a multi-input successor.
-template<typename S,  typename V,
-          bool = tbb::internal::is_same_type<sender<S>, typename tuple_element<0,typename V::input_ports_type>::type >::value >
+template< typename S,  typename V,
+          typename = typename V::input_ports_type >
 inline void make_edge( sender<S>& output, V& input) {
      make_edge(output, get<0>(input.input_ports()));
 }
 #endif
 
-//! Removes an edge between a single predecessor and a single successor
+#if __TBB_PREVIEW_ASYNC_MSG
+inline void internal_remove_edge( internal::untyped_sender &p, internal::untyped_receiver &s ) {
+#else
 template< typename T >
-inline void remove_edge( sender<T> &p, receiver<T> &s ) {
+inline void internal_remove_edge( sender<T> &p, receiver<T> &s ) {
+#endif
     p.remove_successor( s );
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     // TODO: should we try to remove p from the predecessor list of s, in case the edge is reversed?
@@ -3254,25 +3530,48 @@ inline void remove_edge( sender<T> &p, receiver<T> &s ) {
     tbb::internal::fgt_remove_edge( &p, &s );
 }
 
-#if __TBB_PREVIEW_COMPOSITE_NODE
+//! Removes an edge between a single predecessor and a single successor
+template< typename T >
+inline void remove_edge( sender<T> &p, receiver<T> &s ) {
+    internal_remove_edge( p, s );
+}
+
+#if __TBB_PREVIEW_ASYNC_MSG
+template< typename TS, typename TR,
+    typename = typename tbb::internal::enable_if<tbb::internal::is_same_type<TS, internal::untyped_sender>::value
+                                              || tbb::internal::is_same_type<TR, internal::untyped_receiver>::value>::type>
+inline void remove_edge( TS &p, TR &s ) {
+    internal_remove_edge( p, s );
+}
+
+template< typename T >
+inline void remove_edge( sender<T> &p, receiver<typename T::async_msg_data_type> &s ) {
+    internal_remove_edge( p, s );
+}
+
+template< typename T >
+inline void remove_edge( sender<typename T::async_msg_data_type> &p, receiver<T> &s ) {
+    internal_remove_edge( p, s );
+}
+#endif // __TBB_PREVIEW_ASYNC_MSG
+
+#if __TBB_FLOW_GRAPH_CPP11_FEATURES
 //Removes an edge between port 0 of a multi-output predecessor and port 0 of a multi-input successor.
 template< typename T, typename V,
-          bool = tbb::internal::is_same_type< typename tuple_element<0,typename T::output_ports_type>::type,
-                                              typename tuple_element<0,typename V::input_ports_type>::type
-                                            >::value >
+          typename = typename T::output_ports_type, typename = typename V::input_ports_type >
 inline void remove_edge( T& output, V& input) {
     remove_edge(get<0>(output.output_ports()), get<0>(input.input_ports()));
 }
 
 //Removes an edge between port 0 of a multi-output predecessor and a receiver.
 template< typename T, typename R,
-          bool = tbb::internal::is_same_type<typename tuple_element<0,typename T::output_ports_type>::type, receiver<R> >::value >
+          typename = typename T::output_ports_type >
 inline void remove_edge( T& output, receiver<R>& input) {
      remove_edge(get<0>(output.output_ports()), input);
 }
 //Removes an edge between a sender and port 0 of a multi-input successor.
-template<typename S,  typename V,
-          bool = tbb::internal::is_same_type<sender<S>, typename tuple_element<0,typename V::input_ports_type>::type >::value >
+template< typename S,  typename V,
+          typename = typename V::input_ports_type >
 inline void remove_edge( sender<S>& output, V& input) {
      remove_edge(output, get<0>(input.input_ports()));
 }
@@ -3304,126 +3603,77 @@ Body copy_body( Node &n ) {
     return n.template copy_function_object<Body>();
 }
 
-#if __TBB_PREVIEW_COMPOSITE_NODE
+#if __TBB_FLOW_GRAPH_CPP11_FEATURES
 
 //composite_node
 template< typename InputTuple, typename OutputTuple > class composite_node;
 
 template< typename... InputTypes, typename... OutputTypes>
-class composite_node <tbb::flow::tuple<InputTypes...>, tbb::flow::tuple<OutputTypes...> > : public graph_node {
+class composite_node <tbb::flow::tuple<InputTypes...>, tbb::flow::tuple<OutputTypes...> > : public graph_node{
 
 public:
     typedef tbb::flow::tuple< receiver<InputTypes>&... > input_ports_type;
     typedef tbb::flow::tuple< sender<OutputTypes>&... > output_ports_type;
 
 private:
+#if TBB_PREVIEW_FLOW_GRAPH_TRACE
+    const char *my_type_name;
+#endif
     input_ports_type *my_input_ports;
     output_ports_type *my_output_ports;
-    const char *type_name;
 
     static const size_t NUM_INPUTS = sizeof...(InputTypes);
     static const size_t NUM_OUTPUTS = sizeof...(OutputTypes);
 
-#if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    //TODO: extend to include multiinput-multioutput nodes
-    template<typename NodeType>
-    auto sender_cast(const NodeType &n)-> sender< typename NodeType::output_type >* {
-        return dynamic_cast< sender< typename NodeType::output_type > * >(const_cast< NodeType *>(&n));
-    }
-
-    template<typename NodeType>
-    auto receiver_cast(const NodeType &n)-> receiver< typename NodeType::input_type >* {
-        return dynamic_cast< receiver< typename NodeType::input_type > * >(const_cast< NodeType *>(&n)) ;
-    }
-
-    bool add_nodes_impl(bool) {return true; }  
-
-    template< typename NodeType1, typename... NodeTypes >
-    bool add_nodes_impl(bool visible, const NodeType1& n1, const NodeTypes&... n) {
-     //    try to dynamic cast to sender< NodeType::output_type >; if successful, its a single-output node
-        void *addr = sender_cast(n1);       
-     
-        if(!addr)  
-            addr = receiver_cast(n1);
-
-        if(addr) {
-            if (visible)
-                tbb::internal::itt_relation_add( tbb::internal::ITT_DOMAIN_FLOW, this, tbb::internal::FLOW_NODE, tbb::internal::__itt_relation_is_parent_of, addr, tbb::internal::FLOW_NODE );
-            else
-                tbb::internal::itt_relation_add( tbb::internal::ITT_DOMAIN_FLOW, addr, tbb::internal::FLOW_NODE, tbb::internal::__itt_relation_is_child_of, this, tbb::internal::FLOW_NODE );
-            return add_nodes_impl(visible, n...);
-        } else {
-            return false; 
-        }
-    }
-#endif
-
 protected:
-    /*override*/void reset_node(__TBB_PFG_RESET_ARG(reset_flags)) {}
+    void reset_node(reset_flags) __TBB_override {}
 
 public:
-    composite_node( graph &g, const char *my_type_name = " ") : graph_node(g), type_name(my_type_name)  {
-        my_input_ports = NULL;
-        my_output_ports = NULL;
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
+    composite_node( graph &g, const char *type_name = "composite_node") : graph_node(g), my_type_name(type_name), my_input_ports(NULL), my_output_ports(NULL)  {
         tbb::internal::itt_make_task_group( tbb::internal::ITT_DOMAIN_FLOW, this, tbb::internal::FLOW_NODE, &g, tbb::internal::FLOW_GRAPH, tbb::internal::FLOW_COMPOSITE_NODE );
-        tbb::internal::fgt_multiinput_multioutput_node_desc( this, type_name );
-#endif
+        tbb::internal::fgt_multiinput_multioutput_node_desc( this, my_type_name );
     }
-
-   void set_external_ports(input_ports_type&& input_ports_tuple, output_ports_type&& output_ports_tuple) {
-       __TBB_STATIC_ASSERT(NUM_INPUTS == tbb::flow::tuple_size<input_ports_type>::value, "number of arguments does not match number of input ports");
-       __TBB_STATIC_ASSERT(NUM_OUTPUTS == tbb::flow::tuple_size<output_ports_type>::value, "number of arguments does not match number of output ports");
-
-      my_input_ports = new input_ports_type(std::move(input_ports_tuple));
-      my_output_ports = new output_ports_type(std::move(output_ports_tuple));
-
-#if TBB_PREVIEW_FLOW_GRAPH_TRACE
-      tbb::internal::fgt_internal_input_helper<input_ports_type, input_ports_type, NUM_INPUTS>::register_port( this, input_ports_tuple );
-      tbb::internal::fgt_internal_output_helper<output_ports_type, output_ports_type, NUM_OUTPUTS>::register_port( this, output_ports_tuple);
+#else
+    composite_node( graph &g) : graph_node(g), my_input_ports(NULL), my_output_ports(NULL) {}
 #endif
-   }
 
-   void set_external_ports(const input_ports_type& input_ports_tuple, const output_ports_type& output_ports_tuple) {
+   template<typename T1, typename T2>
+   void set_external_ports(T1&& input_ports_tuple, T2&& output_ports_tuple) {
        __TBB_STATIC_ASSERT(NUM_INPUTS == tbb::flow::tuple_size<input_ports_type>::value, "number of arguments does not match number of input ports");
        __TBB_STATIC_ASSERT(NUM_OUTPUTS == tbb::flow::tuple_size<output_ports_type>::value, "number of arguments does not match number of output ports");
-
-      my_input_ports = new input_ports_type(input_ports_tuple);
-      my_output_ports = new output_ports_type(output_ports_tuple);
+      my_input_ports =  new input_ports_type(std::forward<T1>(input_ports_tuple));
+      my_output_ports = new output_ports_type(std::forward<T2>(output_ports_tuple));
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-      tbb::internal::fgt_internal_input_helper<input_ports_type, input_ports_type, NUM_INPUTS>::register_port( this, input_ports_tuple );
-      tbb::internal::fgt_internal_output_helper<output_ports_type, output_ports_type, NUM_OUTPUTS>::register_port( this, output_ports_tuple);
+      tbb::internal::fgt_internal_input_helper<T1, NUM_INPUTS>::register_port( this, input_ports_tuple);
+      tbb::internal::fgt_internal_output_helper<T2, NUM_OUTPUTS>::register_port( this, output_ports_tuple);
 #endif
    }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
     template< typename... NodeTypes >
-    bool add_visible_nodes(const NodeTypes&... n) {
-        return add_nodes_impl(true, n...);
-    }
+    void add_visible_nodes(const NodeTypes&... n) { internal::add_nodes_impl(this, true, n...); }
 
     template< typename... NodeTypes >
-    bool add_nodes(const NodeTypes&... n) {
-        return add_nodes_impl(false, n...);
-    }
+    void add_nodes(const NodeTypes&... n) { internal::add_nodes_impl(this, false, n...); }
 #else
-    template<typename... Nodes> bool add_nodes(Nodes&...) { return true; }
-    template<typename... Nodes> bool add_visible_nodes(Nodes&...) { return true; }
+    template<typename... Nodes> void add_nodes(Nodes&...) { }
+    template<typename... Nodes> void add_visible_nodes(Nodes&...) { }
 #endif
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_multiinput_multioutput_node_desc( this, name );
     }
 #endif
 
-    input_ports_type input_ports() { 
+    input_ports_type input_ports() {
          __TBB_ASSERT(my_input_ports, "input ports not set, call set_external_ports to set input ports");
          return *my_input_ports;
     }
 
-    output_ports_type output_ports() { 
+    output_ports_type output_ports() {
          __TBB_ASSERT(my_output_ports, "output ports not set, call set_external_ports to set output ports");
          return *my_output_ports;
     }
@@ -3434,113 +3684,67 @@ public:
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-    /*override*/void extract() {
+    void extract() __TBB_override {
         __TBB_ASSERT(false, "Current composite_node implementation does not support extract");
     }
 #endif
-
 };  // class composite_node
 
 //composite_node with only input ports
-//TODO: trim specializations
-
 template< typename... InputTypes>
 class composite_node <tbb::flow::tuple<InputTypes...>, tbb::flow::tuple<> > : public graph_node {
 public:
     typedef tbb::flow::tuple< receiver<InputTypes>&... > input_ports_type;
 
 private:
-    input_ports_type *my_input_ports;
-    static const size_t NUM_INPUTS = sizeof...(InputTypes);
-    const char *type_name;
-
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    template<typename NodeType>
-    auto sender_cast(const NodeType &n)-> sender< typename NodeType::output_type >* {
-        return dynamic_cast< sender< typename NodeType::output_type > * >(const_cast< NodeType *>(&n));
-    }
-
-    template<typename NodeType>
-    auto receiver_cast(const NodeType &n)-> receiver< typename NodeType::input_type >* {
-        return dynamic_cast< receiver< typename NodeType::input_type > * >(const_cast< NodeType *>(&n)) ;
-    }
-
-    bool add_nodes_impl(bool) { return true; }
-
-    template< typename NodeType1, typename... NodeTypes >
-    bool add_nodes_impl(bool visible, const NodeType1& n1, const NodeTypes&... n) {
-     //    try to dynamic cast to sender< NodeType::output_type >; if successful, its a single-output node
-        void *addr = sender_cast(n1);
-
-        if(!addr)
-            addr = receiver_cast(n1);
-
-        if(addr) {
-            if (visible)
-                tbb::internal::itt_relation_add( tbb::internal::ITT_DOMAIN_FLOW, this, tbb::internal::FLOW_NODE, tbb::internal::__itt_relation_is_parent_of, addr, tbb::internal::FLOW_NODE );
-            else
-                tbb::internal::itt_relation_add( tbb::internal::ITT_DOMAIN_FLOW, addr, tbb::internal::FLOW_NODE, tbb::internal::__itt_relation_is_child_of, this, tbb::internal::FLOW_NODE );
-             return add_nodes_impl(visible, n...);
-        } else {
-            return false; 
-        }
-    }
+    const char *my_type_name;
 #endif
+    input_ports_type *my_input_ports;
+    static const size_t NUM_INPUTS = sizeof...(InputTypes);
 
 protected:
-    /*override*/void reset_node(__TBB_PFG_RESET_ARG(reset_flags)) {}
+    void reset_node(reset_flags) __TBB_override {}
 
 public:
-    composite_node( graph &g, const char *my_type_name = " ") : graph_node(g), type_name(my_type_name)  {
-        my_input_ports = NULL;
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
+    composite_node( graph &g, const char *type_name = "composite_node") : graph_node(g), my_type_name(type_name), my_input_ports(NULL)  {
         tbb::internal::itt_make_task_group( tbb::internal::ITT_DOMAIN_FLOW, this, tbb::internal::FLOW_NODE, &g, tbb::internal::FLOW_GRAPH, tbb::internal::FLOW_COMPOSITE_NODE );
-        tbb::internal::fgt_multiinput_multioutput_node_desc( this, type_name );
-#endif
+        tbb::internal::fgt_multiinput_multioutput_node_desc( this, my_type_name );
     }
-
-   void set_external_ports(input_ports_type&& input_ports_tuple) {
-       __TBB_STATIC_ASSERT(NUM_INPUTS == tbb::flow::tuple_size<input_ports_type>::value, "number of arguments does not match number of input ports");
-
-      my_input_ports = new input_ports_type(std::move(input_ports_tuple));
-
-#if TBB_PREVIEW_FLOW_GRAPH_TRACE
-      tbb::internal::fgt_internal_input_helper<input_ports_type, input_ports_type, NUM_INPUTS>::register_port( this, input_ports_tuple );
+#else
+    composite_node( graph &g) : graph_node(g), my_input_ports(NULL) {}
 #endif
-   }
 
-   void set_external_ports(const input_ports_type& input_ports_tuple) {
+   template<typename T>
+   void set_external_ports(T&& input_ports_tuple) {
        __TBB_STATIC_ASSERT(NUM_INPUTS == tbb::flow::tuple_size<input_ports_type>::value, "number of arguments does not match number of input ports");
 
-      my_input_ports = new input_ports_type(input_ports_tuple);
+      my_input_ports =  new input_ports_type(std::forward<T>(input_ports_tuple));
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-      tbb::internal::fgt_internal_input_helper<input_ports_type, input_ports_type, NUM_INPUTS>::register_port( this, input_ports_tuple );
+      tbb::internal::fgt_internal_input_helper<T, NUM_INPUTS>::register_port( this, std::forward<T>(input_ports_tuple));
 #endif
    }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
     template< typename... NodeTypes >
-    bool add_visible_nodes(const NodeTypes&... n) {
-        return add_nodes_impl(true, n...);
-    }
+    void add_visible_nodes(const NodeTypes&... n) { internal::add_nodes_impl(this, true, n...); }
 
     template< typename... NodeTypes >
-    bool add_nodes( const NodeTypes&... n) {
-        return add_nodes_impl(false, n...);
-    }
+    void add_nodes( const NodeTypes&... n) { internal::add_nodes_impl(this, false, n...); }
 #else
-    template<typename... Nodes> bool add_nodes(Nodes&...) { return true; }
-    template<typename... Nodes> bool add_visible_nodes(Nodes&...) { return true; }
+    template<typename... Nodes> void add_nodes(Nodes&...) {}
+    template<typename... Nodes> void add_visible_nodes(Nodes&...) {}
 #endif
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_multiinput_multioutput_node_desc( this, name );
     }
 #endif
 
-    input_ports_type input_ports() { 
+    input_ports_type input_ports() {
          __TBB_ASSERT(my_input_ports, "input ports not set, call set_external_ports to set input ports");
          return *my_input_ports;
     }
@@ -3550,7 +3754,7 @@ public:
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-    /*override*/void extract() {
+    void extract() __TBB_override {
         __TBB_ASSERT(false, "Current composite_node implementation does not support extract");
     }
 #endif
@@ -3564,98 +3768,54 @@ public:
     typedef tbb::flow::tuple< sender<OutputTypes>&... > output_ports_type;
 
 private:
-    output_ports_type *my_output_ports;
-    static const size_t NUM_OUTPUTS = sizeof...(OutputTypes);
-    const char *type_name;
-
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    template<typename NodeType>
-    auto sender_cast(const NodeType &n)-> sender< typename NodeType::output_type >* {
-        return dynamic_cast< sender< typename NodeType::output_type > * >(const_cast< NodeType *>(&n));
-    }
-
-    template<typename NodeType>
-    auto receiver_cast(const NodeType &n)-> receiver< typename NodeType::input_type >* {
-        return dynamic_cast< receiver< typename NodeType::input_type > * >(const_cast< NodeType *>(&n)) ;
-    }
-
-    bool add_nodes_impl(bool) {return true;}
-
-    template< typename NodeType1, typename... NodeTypes >
-    bool add_nodes_impl(bool visible, const NodeType1& n1, const NodeTypes&... n) {
-     //    try to dynamic cast to sender< NodeType::output_type >; if successful, its a single-output node
-        void *addr = sender_cast(n1);
-
-        if(!addr)
-            addr = receiver_cast(n1);
-
-        if(addr) {
-            if (visible)
-                tbb::internal::itt_relation_add( tbb::internal::ITT_DOMAIN_FLOW, this, tbb::internal::FLOW_NODE, tbb::internal::__itt_relation_is_parent_of, addr, tbb::internal::FLOW_NODE );
-            else
-                tbb::internal::itt_relation_add( tbb::internal::ITT_DOMAIN_FLOW, addr, tbb::internal::FLOW_NODE, tbb::internal::__itt_relation_is_child_of, this, tbb::internal::FLOW_NODE );
-            return add_nodes_impl(visible, n...);
-        } else {
-            return false; 
-        }
-    }
+    const char *my_type_name;
 #endif
+    output_ports_type *my_output_ports;
+    static const size_t NUM_OUTPUTS = sizeof...(OutputTypes);
 
 protected:
-    /*override*/void reset_node(__TBB_PFG_RESET_ARG(reset_flags)) {}
+    void reset_node(reset_flags) __TBB_override {}
 
 public:
-    composite_node( graph &g, const char *my_type_name = " ") : graph_node(g), type_name(my_type_name)  {
-        my_output_ports = NULL;
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
+    composite_node( graph &g, const char *type_name = "composite_node") : graph_node(g), my_type_name(type_name), my_output_ports(NULL) {
         tbb::internal::itt_make_task_group( tbb::internal::ITT_DOMAIN_FLOW, this, tbb::internal::FLOW_NODE, &g, tbb::internal::FLOW_GRAPH, tbb::internal::FLOW_COMPOSITE_NODE );
-        tbb::internal::fgt_multiinput_multioutput_node_desc( this, type_name );
-#endif
+        tbb::internal::fgt_multiinput_multioutput_node_desc( this, my_type_name );
     }
-
-   void set_external_ports(output_ports_type&& output_ports_tuple) {
-       __TBB_STATIC_ASSERT(NUM_OUTPUTS == tbb::flow::tuple_size<output_ports_type>::value, "number of arguments does not match number of output ports");
-
-      my_output_ports = new output_ports_type(std::move(output_ports_tuple));
-
-#if TBB_PREVIEW_FLOW_GRAPH_TRACE
-      tbb::internal::fgt_internal_output_helper<output_ports_type, output_ports_type, NUM_OUTPUTS>::register_port( this, output_ports_tuple);
+#else
+    composite_node( graph &g) : graph_node(g), my_output_ports(NULL) {}
 #endif
-   }
 
-   void set_external_ports(const output_ports_type& output_ports_tuple) {
+   template<typename T>
+   void set_external_ports(T&& output_ports_tuple) {
        __TBB_STATIC_ASSERT(NUM_OUTPUTS == tbb::flow::tuple_size<output_ports_type>::value, "number of arguments does not match number of output ports");
 
-      my_output_ports = new output_ports_type(output_ports_tuple);
+      my_output_ports = new output_ports_type(std::forward<T>(output_ports_tuple));
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-      tbb::internal::fgt_internal_output_helper<output_ports_type, output_ports_type, NUM_OUTPUTS>::register_port( this, output_ports_tuple);
+      tbb::internal::fgt_internal_output_helper<T, NUM_OUTPUTS>::register_port( this, std::forward<T>(output_ports_tuple));
 #endif
    }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
     template<typename... NodeTypes >
-    bool add_visible_nodes(const NodeTypes&... n) {
-        return add_nodes_impl(true, n...);
-    }
+    void add_visible_nodes(const NodeTypes&... n) { internal::add_nodes_impl(this, true, n...); }
 
     template<typename... NodeTypes >
-    bool add_nodes(const NodeTypes&... n) {
-        return add_nodes_impl(false, n...);
-    }
+    void add_nodes(const NodeTypes&... n) { internal::add_nodes_impl(this, false, n...); }
 #else
-    template<typename... Nodes> bool add_nodes(Nodes&...) { return true; }
-    template<typename... Nodes> bool add_visible_nodes(Nodes&...) { return true; }
+    template<typename... Nodes> void add_nodes(Nodes&...) {}
+    template<typename... Nodes> void add_visible_nodes(Nodes&...) {}
 #endif
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
         tbb::internal::fgt_multiinput_multioutput_node_desc( this, name );
     }
 #endif
 
-
-    output_ports_type output_ports() { 
+    output_ports_type output_ports() {
          __TBB_ASSERT(my_output_ports, "output ports not set, call set_external_ports to set output ports");
          return *my_output_ports;
     }
@@ -3665,168 +3825,247 @@ public:
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-    /*override*/void extract() {
+    void extract() __TBB_override {
         __TBB_ASSERT(false, "Current composite_node implementation does not support extract");
     }
 #endif
 
 };  // class composite_node
 
-#endif // __TBB_PREVIEW_COMPOSITE_NODE
+#endif // __TBB_FLOW_GRAPH_CPP11_FEATURES
 
-#if __TBB_PREVIEW_ASYNC_NODE
 namespace internal {
-//! Pure virtual template class that defines interface for async communication
-template < typename Output >
-class async_gateway {
+
+template<typename Gateway>
+class async_body_base: tbb::internal::no_assign {
 public:
-    typedef Output output_type;
+    typedef Gateway gateway_type;
+
+    async_body_base(gateway_type *gateway): my_gateway(gateway) { }
+    void set_gateway(gateway_type *gateway) {
+        my_gateway = gateway;
+    }
+
+protected:
+    gateway_type *my_gateway;
+};
+
+template<typename Input, typename Ports, typename Gateway, typename Body>
+class async_body: public async_body_base<Gateway> {
+public:
+    typedef async_body_base<Gateway> base_type;
+    typedef Gateway gateway_type;
 
-    //! Submit signal from Async Activity to FG
-    virtual bool async_try_put(const output_type &i ) = 0;
+    async_body(const Body &body, gateway_type *gateway) 
+        : base_type(gateway), my_body(body) { }
 
-    virtual void async_reserve() = 0;
+    void operator()( const Input &v, Ports & ) {
+        my_body(v, *this->my_gateway);
+    }
 
-    virtual void async_commit() = 0;
+    Body get_body() { return my_body; }
 
-    virtual ~async_gateway() {}
+private:
+    Body my_body;
 };
+
 }
 
-//! Implements a async node
-template < typename Input, typename Output, typename Allocator=cache_aligned_allocator<Input> >
-class async_node : public graph_node, public internal::async_input<Input, Allocator, internal::async_gateway<Output> >, public internal::function_output<Output>, public internal::async_gateway<Output> {
-protected:
-    using graph_node::my_graph;
+//! Implements async node
+template < typename Input, typename Output, typename Policy = queueing, typename Allocator=cache_aligned_allocator<Input> >
+class async_node : public multifunction_node< Input, tuple< Output >, Policy, Allocator >, public sender< Output > {
+    typedef multifunction_node< Input, tuple< Output >, Policy, Allocator > base_type;
+    typedef typename internal::multifunction_input<Input, typename base_type::output_ports_type, Allocator> mfn_input_type;
+
 public:
     typedef Input input_type;
     typedef Output output_type;
-    typedef async_node< input_type, output_type, Allocator > my_class;
-    typedef sender< input_type > predecessor_type;
-    typedef receiver< output_type > successor_type;
-    typedef internal::async_gateway< output_type > async_gateway_type;
-    typedef internal::async_input<input_type, Allocator, async_gateway_type > async_input_type;
-    typedef internal::function_output<output_type> async_output_type;
+    typedef receiver<input_type> receiver_type;
+    typedef typename receiver_type::predecessor_type predecessor_type;
+    typedef typename sender<output_type>::successor_type successor_type;
+    typedef receiver_gateway<output_type> gateway_type;
+    typedef internal::async_body_base<gateway_type> async_body_base_type;
+
+private:
+    struct try_put_functor {
+        typedef internal::multifunction_output<Output> output_port_type;
+        output_port_type *port;
+        const Output *value;
+        bool result;
+        try_put_functor(output_port_type &p, const Output &v) : port(&p), value(&v), result(false) { }
+        void operator()() {
+            result = port->try_put(*value);
+        }
+    };
 
+    class receiver_gateway_impl: public receiver_gateway<Output> {
+    public:
+        receiver_gateway_impl(async_node* node): my_node(node) {}
+        void reserve_wait() __TBB_override {
+            my_node->my_graph.reserve_wait();
+            tbb::internal::fgt_async_reserve(static_cast<typename async_node::receiver_type *>(my_node), &my_node->my_graph);
+        }
 
-    //! Constructor
-    template< typename Body >
-    async_node( graph &g, Body body ) : 
-        graph_node( g ), async_input_type( g, body ) {
-        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_ASYNC_NODE, &this->graph_node::my_graph,
-                                           static_cast<receiver<input_type> *>(this),
-                                           static_cast<sender<output_type> *>(this), this->my_body );
+        void release_wait() __TBB_override {
+            my_node->my_graph.release_wait();
+            tbb::internal::fgt_async_commit(static_cast<typename async_node::receiver_type *>(my_node), &my_node->my_graph);
+        }
+
+        //! Implements gateway_type::try_put for an external activity to submit a message to FG
+        bool try_put(const Output &i) __TBB_override {
+            return my_node->try_put_impl(i);
+        }
+
+    private:
+        async_node* my_node;
+    } my_gateway;
+
+    //The substitute of 'this' for member construction, to prevent compiler warnings
+    async_node* self() { return this; }
+
+    //! Implements gateway_type::try_put for an external activity to submit a message to FG
+    bool try_put_impl(const Output &i) {
+        internal::multifunction_output<Output> &port_0 = internal::output_port<0>(*this);
+        tbb::internal::fgt_async_try_put_begin(this, &port_0);
+        __TBB_ASSERT(this->my_graph.my_task_arena && this->my_graph.my_task_arena->is_active(), NULL);
+        try_put_functor tpf(port_0, i);
+        this->my_graph.my_task_arena->execute(tpf);
+        tbb::internal::fgt_async_try_put_end(this, &port_0);
+        return tpf.result;
     }
 
-    //! Copy constructor
-    async_node( const async_node& src ) :
-        graph_node(src.graph_node::my_graph), async_input_type( src ), async_output_type(){
-        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_ASYNC_NODE, &this->graph_node::my_graph,
-                                           static_cast<receiver<input_type> *>(this),
-                                           static_cast<sender<output_type> *>(this), this->my_body );
+public:
+    template<typename Body>
+    async_node( graph &g, size_t concurrency, Body body ) :
+        base_type( g, concurrency, internal::async_body<Input, typename base_type::output_ports_type, gateway_type, Body>(body, &my_gateway) ), my_gateway(self()) {
+        tbb::internal::fgt_multioutput_node<1>( tbb::internal::FLOW_ASYNC_NODE,
+                                                &this->my_graph,
+                                                static_cast<receiver<input_type> *>(this),
+                                                this->output_ports() );
     }
 
-    /* override */ async_gateway_type& async_gateway() {
-        return static_cast< async_gateway_type& >(*this);
-    }   
+    async_node( const async_node &other ) : base_type(other), sender<Output>(), my_gateway(self()) {
+        static_cast<async_body_base_type*>(this->my_body->get_body_ptr())->set_gateway(&my_gateway);
+        static_cast<async_body_base_type*>(this->my_init_body->get_body_ptr())->set_gateway(&my_gateway);
+
+        tbb::internal::fgt_multioutput_node<1>( tbb::internal::FLOW_ASYNC_NODE, &this->my_graph, static_cast<receiver<input_type> *>(this), this->output_ports() );
+    }
+
+    gateway_type& gateway() {
+        return my_gateway;
+    }
 
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
-    /* override */ void set_name( const char *name ) {
+    void set_name( const char *name ) __TBB_override {
             tbb::internal::fgt_node_desc( this, name );
     }
 #endif
 
-protected:
-    template< typename R, typename B > friend class run_and_put_task;
-    template<typename X, typename Y> friend class internal::broadcast_cache;
-    template<typename X, typename Y> friend class internal::round_robin_cache;
-    using async_input_type::try_put_task;
+    // Define sender< Output >
 
-    /*override*/void reset_node( __TBB_PFG_RESET_ARG(reset_flags f)) {
-        async_input_type::reset_async_input(__TBB_PFG_RESET_ARG(f));
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-        if(f & rf_clear_edges) successors().clear();
-        __TBB_ASSERT(!(f & rf_clear_edges) || successors().empty(), "function_node successors not empty");
-        __TBB_ASSERT(!(f & rf_clear_edges) || this->my_predecessors.empty(), "function_node predecessors not empty");
-#endif
+    //! Add a new successor to this node
+    bool register_successor( successor_type &r ) __TBB_override {
+        return internal::output_port<0>(*this).register_successor(r);
     }
+
+    //! Removes a successor from this node
+    bool remove_successor( successor_type &r ) __TBB_override {
+        return internal::output_port<0>(*this).remove_successor(r);
+    }
+
+    template<typename Body>
+    Body copy_function_object() {
+        typedef internal::multifunction_body<input_type, typename base_type::output_ports_type> mfn_body_type;
+        typedef internal::async_body<Input, typename base_type::output_ports_type, gateway_type, Body> async_body_type;
+        mfn_body_type &body_ref = *this->my_body;
+        async_body_type ab = *static_cast<async_body_type*>(dynamic_cast< internal::multifunction_body_leaf<input_type, typename base_type::output_ports_type, async_body_type> & >(body_ref).get_body_ptr());
+        return ab.get_body();
+    }
+
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-    /*override*/void extract() {
-        this->my_predecessors.built_predecessors().receiver_extract(*this);
-        successors().built_successors().sender_extract(*this);
+    //! interface to record edges for traversal & deletion
+    typedef typename  internal::edge_container<successor_type> built_successors_type;
+    typedef typename  built_successors_type::edge_list_type successor_list_type;
+    built_successors_type &built_successors() __TBB_override {
+        return internal::output_port<0>(*this).built_successors();
     }
-#endif
 
-    internal::broadcast_cache<output_type> &successors () { return async_output_type::my_successors; }
+    void internal_add_built_successor( successor_type &r ) __TBB_override {
+        internal::output_port<0>(*this).internal_add_built_successor(r);
+    }
 
-    //! Submit signal from Async Activity to FG
-    /*override*/ bool async_try_put(const output_type &i ) {
-        // TODO: enqueue a task to a FG arena
-        task *res = successors().try_put_task(i);
-        if(!res) return false;
-        if (res != SUCCESSFULLY_ENQUEUED) FLOW_SPAWN(*res);
-        return true;
+    void internal_delete_built_successor( successor_type &r ) __TBB_override {
+        internal::output_port<0>(*this).internal_delete_built_successor(r);
     }
 
-    /*override*/ void async_reserve() {
-        my_graph.increment_wait_count();
+    void copy_successors( successor_list_type &l ) __TBB_override {
+        internal::output_port<0>(*this).copy_successors(l);
     }
 
-    /*override*/ void async_commit() {
-        my_graph.decrement_wait_count();
+    size_t  successor_count() __TBB_override {
+        return internal::output_port<0>(*this).successor_count();
     }
-};
+#endif
+
+protected:
 
-#endif // __TBB_PREVIEW_ASYNC_NODE
+    void reset_node( reset_flags f) __TBB_override {
+       base_type::reset_node(f);
+    }
+};
 
-} // interface7
+#if __TBB_PREVIEW_STREAMING_NODE
+#include "internal/_flow_graph_streaming_node.h"
+#endif // __TBB_PREVIEW_STREAMING_NODE
+
+} // interface9
+
+    using interface9::reset_flags;
+    using interface9::rf_reset_protocol;
+    using interface9::rf_reset_bodies;
+    using interface9::rf_clear_edges;
+
+    using interface9::graph;
+    using interface9::graph_node;
+    using interface9::continue_msg;
+
+    using interface9::source_node;
+    using interface9::function_node;
+    using interface9::multifunction_node;
+    using interface9::split_node;
+    using interface9::internal::output_port;
+    using interface9::indexer_node;
+    using interface9::internal::tagged_msg;
+    using interface9::internal::cast_to;
+    using interface9::internal::is_a;
+    using interface9::continue_node;
+    using interface9::overwrite_node;
+    using interface9::write_once_node;
+    using interface9::broadcast_node;
+    using interface9::buffer_node;
+    using interface9::queue_node;
+    using interface9::sequencer_node;
+    using interface9::priority_queue_node;
+    using interface9::limiter_node;
+    using namespace interface9::internal::graph_policy_namespace;
+    using interface9::join_node;
+    using interface9::input_port;
+    using interface9::copy_body;
+    using interface9::make_edge;
+    using interface9::remove_edge;
+    using interface9::internal::tag_value;
+#if __TBB_FLOW_GRAPH_CPP11_FEATURES
+     using interface9::composite_node;
+#endif
+    using interface9::async_node;
+#if __TBB_PREVIEW_ASYNC_MSG
+    using interface9::async_msg;
+#endif
+#if __TBB_PREVIEW_STREAMING_NODE
+    using interface9::port_ref;
+    using interface9::streaming_node;
+#endif // __TBB_PREVIEW_STREAMING_NODE
 
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-    using interface7::reset_flags;
-    using interface7::rf_reset_protocol;
-    using interface7::rf_reset_bodies;
-    using interface7::rf_clear_edges;
-#endif
-
-    using interface7::graph;
-    using interface7::graph_node;
-    using interface7::continue_msg;
-    using interface7::sender;
-    using interface7::receiver;
-    using interface7::continue_receiver;
-
-    using interface7::source_node;
-    using interface7::function_node;
-    using interface7::multifunction_node;
-    using interface7::split_node;
-    using interface7::internal::output_port;
-    using interface7::indexer_node;
-    using interface7::internal::tagged_msg;
-    using interface7::internal::cast_to;
-    using interface7::internal::is_a;
-    using interface7::continue_node;
-    using interface7::overwrite_node;
-    using interface7::write_once_node;
-    using interface7::broadcast_node;
-    using interface7::buffer_node;
-    using interface7::queue_node;
-    using interface7::sequencer_node;
-    using interface7::priority_queue_node;
-    using interface7::limiter_node;
-    using namespace interface7::internal::graph_policy_namespace;
-    using interface7::join_node;
-    using interface7::input_port;
-    using interface7::copy_body;
-    using interface7::make_edge;
-    using interface7::remove_edge;
-    using interface7::internal::NO_TAG;
-    using interface7::internal::tag_value;
-#if __TBB_PREVIEW_COMPOSITE_NODE
-     using interface7::composite_node;
-#endif
-#if __TBB_PREVIEW_ASYNC_NODE
-    using interface7::async_node;
-#endif
 } // flow
 } // tbb
 
diff --git a/include/tbb/flow_graph_abstractions.h b/include/tbb/flow_graph_abstractions.h
new file mode 100644
index 0000000..f6eb3fb
--- /dev/null
+++ b/include/tbb/flow_graph_abstractions.h
@@ -0,0 +1,57 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+#ifndef __TBB_flow_graph_abstractions_H
+#define __TBB_flow_graph_abstractions_H
+
+namespace tbb {
+namespace flow {
+namespace interface9 {
+
+//! Pure virtual template classes that define interfaces for async communication
+class graph_proxy {
+public:
+    //! Inform a graph that messages may come from outside, to prevent premature graph completion
+    virtual void reserve_wait() = 0;
+
+    //! Inform a graph that a previous call to reserve_wait is no longer in effect
+    virtual void release_wait() = 0;
+
+    virtual ~graph_proxy() {}
+};
+
+template <typename Input>
+class receiver_gateway : public graph_proxy {
+public:
+    //! Type of inputing data into FG.
+    typedef Input input_type;
+
+    //! Submit signal from an asynchronous activity to FG.
+    virtual bool try_put(const input_type&) = 0;
+};
+
+} //interface9
+
+using interface9::graph_proxy;
+using interface9::receiver_gateway;
+
+} //flow
+} //tbb
+#endif
diff --git a/include/tbb/flow_graph_opencl_node.h b/include/tbb/flow_graph_opencl_node.h
new file mode 100644
index 0000000..0a98a77
--- /dev/null
+++ b/include/tbb/flow_graph_opencl_node.h
@@ -0,0 +1,1537 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+#ifndef __TBB_flow_graph_opencl_node_H
+#define __TBB_flow_graph_opencl_node_H
+
+#include "tbb/tbb_config.h"
+#if __TBB_PREVIEW_OPENCL_NODE
+
+#include "flow_graph.h"
+
+#include <vector>
+#include <string>
+#include <algorithm>
+#include <iostream>
+#include <fstream>
+#include <map>
+#include <mutex>
+
+#ifdef __APPLE__
+#include <OpenCL/opencl.h>
+#else
+#include <CL/cl.h>
+#endif
+
+namespace tbb {
+namespace flow {
+
+namespace interface9 {
+
+class opencl_foundation;
+class opencl_device_list;
+
+template <typename Factory>
+class opencl_buffer_impl;
+
+template <typename Factory>
+class opencl_program;
+
+class default_opencl_factory;
+
+class opencl_graph : public graph {
+public:
+    //! Constructs a graph with isolated task_group_context
+    opencl_graph() : my_opencl_foundation( NULL ) {}
+    //! Constructs a graph with an user context
+    explicit opencl_graph( task_group_context& context ) : graph( context ), my_opencl_foundation( NULL ) {}
+    //! Destroys a graph
+    ~opencl_graph();
+    //! Available devices
+    const opencl_device_list& available_devices();
+    default_opencl_factory& opencl_factory();
+protected:
+    opencl_foundation *my_opencl_foundation;
+    opencl_foundation &get_opencl_foundation();
+
+    template <typename T, typename Factory>
+    friend class opencl_buffer;
+    template <cl_channel_order channel_order, cl_channel_type channel_type, typename Factory>
+    friend class opencl_image2d;
+    template<typename... Args>
+    friend class opencl_node;
+    template <typename DeviceFilter>
+    friend class opencl_factory;
+};
+
+template <typename DeviceFilter>
+class opencl_factory;
+
+template <typename T, typename Factory>
+class dependency_msg;
+
+
+inline void enforce_cl_retcode( cl_int err, std::string msg ) {
+    if ( err != CL_SUCCESS ) {
+        std::cerr << msg << "; error code: " << err << std::endl;
+        throw msg;
+    }
+}
+
+template <typename T>
+T event_info( cl_event e, cl_event_info i ) {
+    T res;
+    enforce_cl_retcode( clGetEventInfo( e, i, sizeof( res ), &res, NULL ), "Failed to get OpenCL event information" );
+    return res;
+}
+
+template <typename T>
+T device_info( cl_device_id d, cl_device_info i ) {
+    T res;
+    enforce_cl_retcode( clGetDeviceInfo( d, i, sizeof( res ), &res, NULL ), "Failed to get OpenCL device information" );
+    return res;
+}
+template <>
+std::string device_info<std::string>( cl_device_id d, cl_device_info i ) {
+    size_t required;
+    enforce_cl_retcode( clGetDeviceInfo( d, i, 0, NULL, &required ), "Failed to get OpenCL device information" );
+
+    char *buff = (char*)alloca( required );
+    enforce_cl_retcode( clGetDeviceInfo( d, i, required, buff, NULL ), "Failed to get OpenCL device information" );
+
+    return buff;
+}
+template <typename T>
+T platform_info( cl_platform_id p, cl_platform_info i ) {
+    T res;
+    enforce_cl_retcode( clGetPlatformInfo( p, i, sizeof( res ), &res, NULL ), "Failed to get OpenCL platform information" );
+    return res;
+}
+template <>
+std::string platform_info<std::string>( cl_platform_id p, cl_platform_info  i ) {
+    size_t required;
+    enforce_cl_retcode( clGetPlatformInfo( p, i, 0, NULL, &required ), "Failed to get OpenCL platform information" );
+
+    char *buff = (char*)alloca( required );
+    enforce_cl_retcode( clGetPlatformInfo( p, i, required, buff, NULL ), "Failed to get OpenCL platform information" );
+
+    return buff;
+}
+
+
+class opencl_device {
+public:
+    typedef size_t device_id_type;
+    enum : device_id_type {
+        unknown = device_id_type( -2 ),
+        host = device_id_type( -1 )
+    };
+
+    opencl_device() : my_device_id( unknown ) {}
+
+    opencl_device( cl_device_id cl_d_id, device_id_type device_id ) : my_device_id( device_id ), my_cl_device_id( cl_d_id ) {}
+
+    std::string platform_profile() const {
+        return platform_info<std::string>( platform(), CL_PLATFORM_PROFILE );
+    }
+    std::string platform_version() const {
+        return platform_info<std::string>( platform(), CL_PLATFORM_VERSION );
+    }
+    std::string platform_name() const {
+        return platform_info<std::string>( platform(), CL_PLATFORM_NAME );
+    }
+    std::string platform_vendor() const {
+        return platform_info<std::string>( platform(), CL_PLATFORM_VENDOR );
+    }
+    std::string platform_extensions() const {
+        return platform_info<std::string>( platform(), CL_PLATFORM_EXTENSIONS );
+    }
+
+    template <typename T>
+    void info( cl_device_info i, T &t ) const {
+        t = device_info<T>( my_cl_device_id, i );
+    }
+    std::string version() const {
+        // The version string format: OpenCL<space><major_version.minor_version><space><vendor-specific information>
+        return device_info<std::string>( my_cl_device_id, CL_DEVICE_VERSION );
+    }
+    int major_version() const {
+        int major;
+        std::sscanf( version().c_str(), "OpenCL %d", &major );
+        return major;
+    }
+    int minor_version() const {
+        int major, minor;
+        std::sscanf( version().c_str(), "OpenCL %d.%d", &major, &minor );
+        return minor;
+    }
+    bool out_of_order_exec_mode_on_host_present() const {
+#if CL_VERSION_2_0
+        if ( major_version() >= 2 )
+            return (device_info<cl_command_queue_properties>( my_cl_device_id, CL_DEVICE_QUEUE_ON_HOST_PROPERTIES ) & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE) != 0;
+        else
+#endif /* CL_VERSION_2_0 */
+            return (device_info<cl_command_queue_properties>( my_cl_device_id, CL_DEVICE_QUEUE_PROPERTIES ) & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE) != 0;
+    }
+    bool out_of_order_exec_mode_on_device_present() const {
+#if CL_VERSION_2_0
+        if ( major_version() >= 2 )
+            return (device_info<cl_command_queue_properties>( my_cl_device_id, CL_DEVICE_QUEUE_ON_DEVICE_PROPERTIES ) & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE) != 0;
+        else
+#endif /* CL_VERSION_2_0 */
+            return false;
+    }
+    std::array<size_t, 3> max_work_item_sizes() const {
+        return device_info<std::array<size_t, 3>>( my_cl_device_id, CL_DEVICE_MAX_WORK_ITEM_SIZES );
+    }
+    size_t max_work_group_size() const {
+        return device_info<size_t>( my_cl_device_id, CL_DEVICE_MAX_WORK_GROUP_SIZE );
+    }
+    bool built_in_kernel_available( const std::string& k ) const {
+        const std::string semi = ";";
+        // Added semicolumns to force an exact match (to avoid a partial match, e.g. "add" is partly matched with "madd").
+        return (semi + built_in_kernels() + semi).find( semi + k + semi ) != std::string::npos;
+    }
+    std::string built_in_kernels() const {
+        return device_info<std::string>( my_cl_device_id, CL_DEVICE_BUILT_IN_KERNELS );
+    }
+    std::string name() const {
+        return device_info<std::string>( my_cl_device_id, CL_DEVICE_NAME );
+    }
+    cl_bool available() const {
+        return device_info<cl_bool>( my_cl_device_id, CL_DEVICE_AVAILABLE );
+    }
+    cl_bool compiler_available() const {
+        return device_info<cl_bool>( my_cl_device_id, CL_DEVICE_COMPILER_AVAILABLE );
+    }
+    cl_bool linker_available() const {
+        return device_info<cl_bool>( my_cl_device_id, CL_DEVICE_LINKER_AVAILABLE );
+    }
+    bool extension_available( const std::string &ext ) const {
+        const std::string space = " ";
+        // Added space to force an exact match (to avoid a partial match, e.g. "ext" is partly matched with "ext2").
+        return (space + extensions() + space).find( space + ext + space ) != std::string::npos;
+    }
+    std::string extensions() const {
+        return device_info<std::string>( my_cl_device_id, CL_DEVICE_EXTENSIONS );
+    }
+
+    cl_device_type type() const {
+        return device_info<cl_device_type>( my_cl_device_id, CL_DEVICE_TYPE );
+    }
+
+    std::string vendor() const {
+        return device_info<std::string>( my_cl_device_id, CL_DEVICE_VENDOR );
+    }
+
+    cl_uint address_bits() const {
+        return device_info<cl_uint>( my_cl_device_id, CL_DEVICE_ADDRESS_BITS );
+    }
+
+    cl_device_id device_id() const {
+        return my_cl_device_id;
+    }
+
+    cl_command_queue command_queue() const {
+        return my_cl_command_queue;
+    }
+
+    void set_command_queue( cl_command_queue cmd_queue ) {
+        my_cl_command_queue = cmd_queue;
+    }
+
+private:
+    opencl_device( cl_device_id d_id ) : my_device_id( unknown ), my_cl_device_id( d_id ) {}
+
+    cl_platform_id platform() const {
+        return device_info<cl_platform_id>( my_cl_device_id, CL_DEVICE_PLATFORM );
+    }
+
+    device_id_type my_device_id;
+    cl_device_id my_cl_device_id;
+    cl_command_queue my_cl_command_queue;
+
+    friend bool operator==(opencl_device d1, opencl_device d2) { return d1.my_cl_device_id == d2.my_cl_device_id; }
+
+    template <typename DeviceFilter>
+    friend class opencl_factory;
+    template <typename Factory>
+    friend class opencl_memory;
+    template <typename Factory>
+    friend class opencl_program;
+    friend class opencl_foundation;
+
+#if TBB_USE_ASSERT
+    template <typename T, typename Factory>
+    friend class opencl_buffer;
+#endif
+};
+
+class opencl_device_list {
+    typedef std::vector<opencl_device> container_type;
+public:
+    typedef container_type::iterator iterator;
+    typedef container_type::const_iterator const_iterator;
+    typedef container_type::size_type size_type;
+
+    opencl_device_list() {}
+    opencl_device_list( std::initializer_list<opencl_device> il ) : my_container( il ) {}
+
+    void add( opencl_device d ) { my_container.push_back( d ); }
+    size_type size() const { return my_container.size(); }
+    bool empty() const { return my_container.empty(); }
+    iterator begin() { return my_container.begin(); }
+    iterator end() { return my_container.end(); }
+    const_iterator begin() const { return my_container.begin(); }
+    const_iterator end() const { return my_container.end(); }
+    const_iterator cbegin() const { return my_container.cbegin(); }
+    const_iterator cend() const { return my_container.cend(); }
+private:
+    container_type my_container;
+};
+
+class callback_base : tbb::internal::no_copy {
+public:
+    virtual void call() = 0;
+    virtual ~callback_base() {}
+};
+
+template <typename Callback, typename T>
+class callback : public callback_base {
+    graph &my_graph;
+    Callback my_callback;
+    T my_data;
+public:
+    callback( graph &g, Callback c, const T& t ) : my_graph( g ), my_callback( c ), my_data( t ) {
+        // Extend the graph lifetime until the callback completion.
+        my_graph.increment_wait_count();
+    }
+    ~callback() {
+        // Release the reference to the graph.
+        my_graph.decrement_wait_count();
+    }
+    void call() __TBB_override {
+        my_callback( my_data );
+    }
+};
+
+template <typename T, typename Factory = default_opencl_factory>
+class dependency_msg : public async_msg<T> {
+public:
+    typedef T value_type;
+
+    dependency_msg() : my_callback_flag_ptr( std::make_shared< tbb::atomic<bool>>() ) {
+        my_callback_flag_ptr->store<tbb::relaxed>(false);
+    }
+
+    explicit dependency_msg( const T& data ) : my_data(data), my_callback_flag_ptr( std::make_shared<tbb::atomic<bool>>() ) {
+        my_callback_flag_ptr->store<tbb::relaxed>(false);
+    }
+
+    dependency_msg( opencl_graph &g, const T& data ) : my_data(data), my_graph(&g), my_callback_flag_ptr( std::make_shared<tbb::atomic<bool>>() ) {
+        my_callback_flag_ptr->store<tbb::relaxed>(false);
+    }
+
+    dependency_msg( const T& data, cl_event event ) : my_data(data), my_event(event), my_is_event(true), my_callback_flag_ptr( std::make_shared<tbb::atomic<bool>>() ) {
+        my_callback_flag_ptr->store<tbb::relaxed>(false);
+        enforce_cl_retcode( clRetainEvent( my_event ), "Failed to retain an event" );
+    }
+
+    T& data( bool wait = true ) {
+        if ( my_is_event && wait ) {
+            enforce_cl_retcode( clWaitForEvents( 1, &my_event ), "Failed to wait for an event" );
+            enforce_cl_retcode( clReleaseEvent( my_event ), "Failed to release an event" );
+            my_is_event = false;
+        }
+        return my_data;
+    }
+
+    const T& data( bool wait = true ) const {
+        if ( my_is_event && wait ) {
+            enforce_cl_retcode( clWaitForEvents( 1, &my_event ), "Failed to wait for an event" );
+            enforce_cl_retcode( clReleaseEvent( my_event ), "Failed to release an event" );
+            my_is_event = false;
+        }
+        return my_data;
+    }
+
+    dependency_msg( const dependency_msg &dmsg ) : async_msg<T>(dmsg),
+        my_data(dmsg.my_data), my_event(dmsg.my_event), my_is_event( dmsg.my_is_event ), my_graph( dmsg.my_graph ),
+        my_callback_flag_ptr(dmsg.my_callback_flag_ptr)
+    {
+        if ( my_is_event )
+            enforce_cl_retcode( clRetainEvent( my_event ), "Failed to retain an event" );
+    }
+
+    dependency_msg( dependency_msg &&dmsg ) : async_msg<T>(std::move(dmsg)),
+        my_data(std::move(dmsg.my_data)), my_event(dmsg.my_event), my_is_event(dmsg.my_is_event), my_graph(dmsg.my_graph),
+        my_callback_flag_ptr( std::move(dmsg.my_callback_flag_ptr) )
+    {
+        dmsg.my_is_event = false;
+    }
+
+    dependency_msg& operator=(const dependency_msg &dmsg) {
+        async_msg<T>::operator =(dmsg);
+
+        // Release original event
+        if ( my_is_event )
+            enforce_cl_retcode( clReleaseEvent( my_event ), "Failed to retain an event" );
+
+        my_data = dmsg.my_data;
+        my_event = dmsg.my_event;
+        my_is_event = dmsg.my_is_event;
+        my_graph = dmsg.my_graph;
+
+        // Retain copied event
+        if ( my_is_event )
+            enforce_cl_retcode( clRetainEvent( my_event ), "Failed to retain an event" );
+
+        my_callback_flag_ptr = dmsg.my_callback_flag_ptr;
+        return *this;
+    }
+
+    ~dependency_msg() {
+        if ( my_is_event )
+            enforce_cl_retcode( clReleaseEvent( my_event ), "Failed to release an event" );
+    }
+
+    cl_event const * get_event() const { return my_is_event ? &my_event : NULL; }
+    void set_event( cl_event e ) const {
+        if ( my_is_event ) {
+            cl_command_queue cq = event_info<cl_command_queue>( my_event, CL_EVENT_COMMAND_QUEUE );
+            if ( cq != event_info<cl_command_queue>( e, CL_EVENT_COMMAND_QUEUE ) )
+                enforce_cl_retcode( clFlush( cq ), "Failed to flush an OpenCL command queue" );
+            enforce_cl_retcode( clReleaseEvent( my_event ), "Failed to release an event" );
+        }
+        my_is_event = true;
+        my_event = e;
+        clRetainEvent( my_event );
+    }
+
+    void set_graph( graph &g ) {
+        my_graph = &g;
+    }
+
+    void clear_event() const {
+        if ( my_is_event ) {
+            enforce_cl_retcode( clFlush( event_info<cl_command_queue>( my_event, CL_EVENT_COMMAND_QUEUE ) ), "Failed to flush an OpenCL command queue" );
+            enforce_cl_retcode( clReleaseEvent( my_event ), "Failed to release an event" );
+        }
+        my_is_event = false;
+    }
+
+    template <typename Callback>
+    void register_callback( Callback c ) const {
+        __TBB_ASSERT( my_is_event, "The OpenCL event is not set" );
+        __TBB_ASSERT( my_graph, "The graph is not set" );
+        enforce_cl_retcode( clSetEventCallback( my_event, CL_COMPLETE, register_callback_func, new callback<Callback, T>( *my_graph, c, my_data ) ), "Failed to set an OpenCL callback" );
+    }
+
+    operator T&() { return data(); }
+    operator const T&() const { return data(); }
+
+protected:
+    // Overridden in this derived class to inform that 
+    // async calculation chain is over
+    void finalize() const __TBB_override {
+        receive_if_memory_object(*this);
+        if (! my_callback_flag_ptr->fetch_and_store(true)) {
+            dependency_msg a(*this);
+            if (my_is_event) {
+                register_callback([a](const T& t) mutable {
+                    a.set(t);
+                });
+            }
+            else {
+                a.set(my_data);
+            }
+        }
+        clear_event();
+    }
+
+private:
+    static void CL_CALLBACK register_callback_func( cl_event, cl_int event_command_exec_status, void *data ) {
+        tbb::internal::suppress_unused_warning( event_command_exec_status );
+        __TBB_ASSERT( event_command_exec_status == CL_COMPLETE, NULL );
+        __TBB_ASSERT( data, NULL );
+        callback_base *c = static_cast<callback_base*>(data);
+        c->call();
+        delete c;
+    }
+
+    T my_data;
+    mutable cl_event my_event;
+    mutable bool my_is_event = false;
+    graph *my_graph = NULL;
+
+    std::shared_ptr< tbb::atomic<bool> > my_callback_flag_ptr;
+};
+
+template <typename K, typename T, typename Factory>
+K key_from_message( const dependency_msg<T, Factory> &dmsg ) {
+    using tbb::flow::key_from_message;
+    const T &t = dmsg.data( false );
+    __TBB_STATIC_ASSERT( true, "" );
+    return key_from_message<K, T>( t );
+}
+
+template <typename Factory>
+class opencl_memory {
+public:
+    opencl_memory() {}
+    opencl_memory( Factory &f ) : my_host_ptr( NULL ), my_factory( &f ), my_sending_event_present( false ) {
+        my_curr_device_id = my_factory->devices().begin()->my_device_id;
+    }
+
+    ~opencl_memory() {
+        if ( my_sending_event_present ) enforce_cl_retcode( clReleaseEvent( my_sending_event ), "Failed to release an event for the OpenCL buffer" );
+        enforce_cl_retcode( clReleaseMemObject( my_cl_mem ), "Failed to release an memory object" );
+    }
+
+    cl_mem get_cl_mem() const {
+        return my_cl_mem;
+    }
+
+    void* get_host_ptr() {
+        if ( !my_host_ptr ) {
+            dependency_msg<void*, Factory> d = receive( NULL );
+            d.data();
+            __TBB_ASSERT( d.data() == my_host_ptr, NULL );
+        }
+        return my_host_ptr;
+    }
+
+    Factory *factory() const { return my_factory; }
+
+    dependency_msg<void*, Factory> send( opencl_device d, const cl_event *e );
+    dependency_msg<void*, Factory> receive( const cl_event *e );
+    virtual void map_memory( opencl_device, dependency_msg<void*, Factory> & ) = 0;
+protected:
+    cl_mem my_cl_mem;
+    tbb::atomic<opencl_device::device_id_type> my_curr_device_id;
+    void* my_host_ptr;
+    Factory *my_factory;
+
+    tbb::spin_mutex my_sending_lock;
+    bool my_sending_event_present;
+    cl_event my_sending_event;
+};
+
+template <typename Factory>
+class opencl_buffer_impl : public opencl_memory<Factory> {
+    size_t my_size;
+public:
+    opencl_buffer_impl( size_t size, Factory& f ) : opencl_memory<Factory>( f ), my_size( size ) {
+        cl_int err;
+        this->my_cl_mem = clCreateBuffer( this->my_factory->context(), CL_MEM_ALLOC_HOST_PTR, size, NULL, &err );
+        enforce_cl_retcode( err, "Failed to create an OpenCL buffer" );
+    }
+
+    // The constructor for subbuffers.
+    opencl_buffer_impl( cl_mem m, size_t index, size_t size, Factory& f ) : opencl_memory<Factory>( f ), my_size( size ) {
+        cl_int err;
+        cl_buffer_region region = { index, size };
+        this->my_cl_mem = clCreateSubBuffer( m, 0, CL_BUFFER_CREATE_TYPE_REGION, &region, &err );
+        enforce_cl_retcode( err, "Failed to create an OpenCL subbuffer" );
+    }
+
+    size_t size() const {
+        return my_size;
+    }
+
+    void map_memory( opencl_device device, dependency_msg<void*, Factory> &dmsg ) __TBB_override {
+        this->my_factory->enque_map_buffer( device, *this, dmsg );
+    }
+
+#if TBB_USE_ASSERT
+    template <typename, typename>
+    friend class opencl_buffer;
+#endif
+};
+
+enum access_type {
+    read_write,
+    write_only,
+    read_only
+};
+
+template <typename T, typename Factory = default_opencl_factory>
+class opencl_subbuffer;
+
+template <typename T, typename Factory = default_opencl_factory>
+class opencl_buffer {
+public:
+    typedef cl_mem native_object_type;
+    typedef opencl_buffer memory_object_type;
+    typedef Factory opencl_factory_type;
+
+    template<access_type a> using iterator = T*;
+
+    template <access_type a>
+    iterator<a> access() const {
+        T* ptr = (T*)my_impl->get_host_ptr();
+        __TBB_ASSERT( ptr, NULL );
+        return iterator<a>( ptr );
+    }
+
+    T* data() const { return &access<read_write>()[0]; }
+
+    template <access_type a = read_write>
+    iterator<a> begin() const { return access<a>(); }
+
+    template <access_type a = read_write>
+    iterator<a> end() const { return access<a>()+my_impl->size()/sizeof(T); }
+
+    size_t size() const { return my_impl->size()/sizeof(T); }
+
+    T& operator[] ( ptrdiff_t k ) { return begin()[k]; }
+
+    opencl_buffer() {}
+    opencl_buffer( opencl_graph &g, size_t size );
+    opencl_buffer( Factory &f, size_t size ) : my_impl( std::make_shared<impl_type>( size*sizeof(T), f ) ) {}
+
+    cl_mem native_object() const {
+        return my_impl->get_cl_mem();
+    }
+
+    const opencl_buffer& memory_object() const {
+        return *this;
+    }
+
+    void send( opencl_device device, dependency_msg<opencl_buffer, Factory> &dependency ) const {
+        __TBB_ASSERT( dependency.data( /*wait = */false ) == *this, NULL );
+        dependency_msg<void*, Factory> d = my_impl->send( device, dependency.get_event() );
+        const cl_event *e = d.get_event();
+        if ( e ) dependency.set_event( *e );
+        else dependency.clear_event();
+    }
+    void receive( const dependency_msg<opencl_buffer, Factory> &dependency ) const {
+        __TBB_ASSERT( dependency.data( /*wait = */false ) == *this, NULL );
+        dependency_msg<void*, Factory> d = my_impl->receive( dependency.get_event() );
+        const cl_event *e = d.get_event();
+        if ( e ) dependency.set_event( *e );
+        else dependency.clear_event();
+    }
+
+    opencl_subbuffer<T, Factory> subbuffer( size_t index, size_t size ) const;
+private:
+    // The constructor for subbuffers.
+    opencl_buffer( Factory &f, cl_mem m, size_t index, size_t size ) : my_impl( std::make_shared<impl_type>( m, index*sizeof(T), size*sizeof(T), f ) ) {}
+
+    typedef opencl_buffer_impl<Factory> impl_type;
+
+    std::shared_ptr<impl_type> my_impl;
+
+    friend bool operator==(const opencl_buffer<T, Factory> &lhs, const opencl_buffer<T, Factory> &rhs) {
+        return lhs.my_impl == rhs.my_impl;
+    }
+
+    template <typename>
+    friend class opencl_factory;
+    template <typename, typename>
+    friend class opencl_subbuffer;
+};
+
+template <typename T, typename Factory>
+class opencl_subbuffer : public opencl_buffer<T, Factory> {
+    opencl_buffer<T, Factory> my_owner;
+public:
+    opencl_subbuffer() {}
+    opencl_subbuffer( const opencl_buffer<T, Factory> &owner, size_t index, size_t size ) :
+        opencl_buffer<T, Factory>( *owner.my_impl->factory(), owner.native_object(), index, size ), my_owner( owner ) {}
+};
+
+template <typename T, typename Factory>
+opencl_subbuffer<T, Factory> opencl_buffer<T, Factory>::subbuffer( size_t index, size_t size ) const {
+    return opencl_subbuffer<T, Factory>( *this, index, size );
+}
+
+
+#define is_typedef(type)                                                    \
+    template <typename T>                                                   \
+    struct is_##type {                                                      \
+        template <typename C>                                               \
+        static std::true_type check( typename C::type* );                   \
+        template <typename C>                                               \
+        static std::false_type check( ... );                                \
+                                                                            \
+        static const bool value = decltype(check<T>(0))::value;             \
+    }
+
+is_typedef( native_object_type );
+is_typedef( memory_object_type );
+
+template <typename T>
+typename std::enable_if<is_native_object_type<T>::value, typename T::native_object_type>::type get_native_object( const T &t ) {
+    return t.native_object();
+}
+
+template <typename T>
+typename std::enable_if<!is_native_object_type<T>::value, T>::type get_native_object( T t ) {
+    return t;
+}
+
+// send_if_memory_object checks if the T type has memory_object_type and call the send method for the object.
+template <typename T, typename Factory>
+typename std::enable_if<is_memory_object_type<T>::value>::type send_if_memory_object( opencl_device device, dependency_msg<T, Factory> &dmsg ) {
+    const T &t = dmsg.data( false );
+    typedef typename T::memory_object_type mem_obj_t;
+    mem_obj_t mem_obj = t.memory_object();
+    dependency_msg<mem_obj_t, Factory> d( mem_obj );
+    if ( dmsg.get_event() ) d.set_event( *dmsg.get_event() );
+    mem_obj.send( device, d );
+    if ( d.get_event() ) dmsg.set_event( *d.get_event() );
+}
+
+template <typename T>
+typename std::enable_if<is_memory_object_type<T>::value>::type send_if_memory_object( opencl_device device, T &t ) {
+    typedef typename T::memory_object_type mem_obj_t;
+    mem_obj_t mem_obj = t.memory_object();
+    dependency_msg<mem_obj_t, typename mem_obj_t::opencl_factory_type> dmsg( mem_obj );
+    mem_obj.send( device, dmsg );
+}
+
+template <typename T>
+typename std::enable_if<!is_memory_object_type<T>::value>::type send_if_memory_object( opencl_device, T& ) {};
+
+// receive_if_memory_object checks if the T type has memory_object_type and call the receive method for the object.
+template <typename T, typename Factory>
+typename std::enable_if<is_memory_object_type<T>::value>::type receive_if_memory_object( const dependency_msg<T, Factory> &dmsg ) {
+    const T &t = dmsg.data( false );
+    typedef typename T::memory_object_type mem_obj_t;
+    mem_obj_t mem_obj = t.memory_object();
+    dependency_msg<mem_obj_t, Factory> d( mem_obj );
+    if ( dmsg.get_event() ) d.set_event( *dmsg.get_event() );
+    mem_obj.receive( d );
+    if ( d.get_event() ) dmsg.set_event( *d.get_event() );
+}
+
+template <typename T>
+typename std::enable_if<!is_memory_object_type<T>::value>::type  receive_if_memory_object( const T& ) {}
+
+class opencl_range {
+public:
+    typedef size_t range_index_type;
+    typedef std::array<range_index_type, 3> nd_range_type;
+
+    template <typename G = std::initializer_list<int>, typename L = std::initializer_list<int>,
+        typename = typename std::enable_if<!std::is_same<typename std::decay<G>::type, opencl_range>::value>::type>
+    opencl_range(G&& global_work = std::initializer_list<int>({ 0 }), L&& local_work = std::initializer_list<int>({ 0, 0, 0 })) {
+        auto g_it = global_work.begin();
+        auto l_it = local_work.begin();
+        my_global_work_size = { size_t(-1), size_t(-1), size_t(-1) };
+        // my_local_work_size is still uninitialized
+        for (int s = 0; s < 3 && g_it != global_work.end(); ++g_it, ++l_it, ++s) {
+            __TBB_ASSERT(l_it != local_work.end(), "global_work & local_work must have same size");
+            my_global_work_size[s] = *g_it;
+            my_local_work_size[s] = *l_it;
+        }
+    }
+
+    const nd_range_type& global_range() const { return my_global_work_size; }
+    const nd_range_type& local_range() const { return my_local_work_size; }
+
+private:
+    nd_range_type my_global_work_size;
+    nd_range_type my_local_work_size;
+};
+
+template <typename DeviceFilter>
+class opencl_factory {
+public:
+    template<typename T> using async_msg_type = dependency_msg<T, opencl_factory<DeviceFilter>>;
+    typedef opencl_device device_type;
+
+    class kernel : tbb::internal::no_assign {
+    public:
+        kernel( const kernel& k ) : my_factory( k.my_factory ) {
+            // Clone my_cl_kernel via opencl_program
+            size_t ret_size = 0;
+
+            std::vector<char> kernel_name;
+            for ( size_t curr_size = 32;; curr_size <<= 1 ) {
+                kernel_name.resize( curr_size <<= 1 );
+                enforce_cl_retcode( clGetKernelInfo( k.my_cl_kernel, CL_KERNEL_FUNCTION_NAME, curr_size, kernel_name.data(), &ret_size ), "Failed to get kernel info" );
+                if ( ret_size < curr_size ) break;
+            }
+
+            cl_program program;
+            enforce_cl_retcode( clGetKernelInfo( k.my_cl_kernel, CL_KERNEL_PROGRAM, sizeof(program), &program, &ret_size ), "Failed to get kernel info" );
+            __TBB_ASSERT( ret_size == sizeof(program), NULL );
+
+            my_cl_kernel = opencl_program< factory_type >( my_factory, program ).get_cl_kernel( kernel_name.data() );
+        }
+
+        ~kernel() {
+            enforce_cl_retcode( clReleaseKernel( my_cl_kernel ), "Failed to release a kernel" );
+        }
+
+    private:
+        typedef opencl_factory<DeviceFilter> factory_type;
+
+        kernel( const cl_kernel& k, factory_type& f ) : my_cl_kernel( k ), my_factory( f ) {}
+
+        // Data
+        cl_kernel my_cl_kernel;
+        factory_type& my_factory;
+
+        template <typename DeviceFilter_>
+        friend class opencl_factory;
+
+        template <typename Factory>
+        friend class opencl_program;
+    };
+
+    typedef kernel kernel_type;
+
+    // 'range_type' enables kernel_executor with range support
+    // it affects expectations for enqueue_kernel(.....) interface method
+    typedef opencl_range range_type;
+
+    opencl_factory( opencl_graph &g ) : my_graph( g ) {}
+    ~opencl_factory() {
+        if ( my_devices.size() ) {
+            for ( auto d = my_devices.begin(); d != my_devices.end(); ++d ) {
+                enforce_cl_retcode( clReleaseCommandQueue( (*d).my_cl_command_queue ), "Failed to release a command queue" );
+            }
+            enforce_cl_retcode( clReleaseContext( my_cl_context ), "Failed to release a context" );
+        }
+    }
+
+    bool init( const opencl_device_list &device_list ) {
+        tbb::spin_mutex::scoped_lock lock( my_devices_mutex );
+        if ( !my_devices.size() ) {
+            my_devices = device_list;
+            return true;
+        }
+        return false;
+    }
+
+
+private:
+    template <typename Factory>
+    void enque_map_buffer( opencl_device device, opencl_buffer_impl<Factory> &buffer, dependency_msg<void*, Factory>& dmsg ) {
+        cl_event const* e1 = dmsg.get_event();
+        cl_event e2;
+        cl_int err;
+        void *ptr = clEnqueueMapBuffer( device.my_cl_command_queue, buffer.get_cl_mem(), false, CL_MAP_READ | CL_MAP_WRITE, 0, buffer.size(),
+            e1 == NULL ? 0 : 1, e1, &e2, &err );
+        enforce_cl_retcode( err, "Failed to map a buffer" );
+        dmsg.data( false ) = ptr;
+        dmsg.set_event( e2 );
+        enforce_cl_retcode( clReleaseEvent( e2 ), "Failed to release an event" );
+    }
+
+
+    template <typename Factory>
+    void enque_unmap_buffer( opencl_device device, opencl_memory<Factory> &memory, dependency_msg<void*, Factory>& dmsg ) {
+        cl_event const* e1 = dmsg.get_event();
+        cl_event e2;
+        enforce_cl_retcode(
+            clEnqueueUnmapMemObject( device.my_cl_command_queue, memory.get_cl_mem(), memory.get_host_ptr(), e1 == NULL ? 0 : 1, e1, &e2 ),
+           "Failed to unmap a buffer" );
+        dmsg.set_event( e2 );
+        enforce_cl_retcode( clReleaseEvent( e2 ), "Failed to release an event" );
+    }
+
+    // --------- Kernel argument & event list helpers --------- //
+    template <size_t NUM_ARGS, typename T>
+    void process_one_arg( const kernel_type& kernel, std::array<cl_event, NUM_ARGS>&, int&, int& place, const T& t ) {
+        auto p = get_native_object(t);
+        enforce_cl_retcode( clSetKernelArg(kernel.my_cl_kernel, place++, sizeof(p), &p), "Failed to set a kernel argument" );
+    }
+
+    template <size_t NUM_ARGS, typename T, typename F>
+    void process_one_arg( const kernel_type& kernel, std::array<cl_event, NUM_ARGS>& events, int& num_events, int& place, const dependency_msg<T, F>& msg ) {
+        __TBB_ASSERT((static_cast<typename std::array<cl_event, NUM_ARGS>::size_type>(num_events) < events.size()), NULL);
+
+        const cl_event * const e = msg.get_event();
+        if (e != NULL) {
+            events[num_events++] = *e;
+        }
+
+        process_one_arg( kernel, events, num_events, place, msg.data(false) );
+    }
+
+    template <size_t NUM_ARGS, typename T, typename ...Rest>
+    void process_arg_list( const kernel_type& kernel, std::array<cl_event, NUM_ARGS>& events, int& num_events, int& place, const T& t, const Rest&... args ) {
+        process_one_arg( kernel, events, num_events, place, t );
+        process_arg_list( kernel, events, num_events, place, args... );
+    }
+
+    template <size_t NUM_ARGS>
+    void process_arg_list( const kernel_type&, std::array<cl_event, NUM_ARGS>&, int&, int& ) {}
+    // ------------------------------------------- //
+    template <typename T>
+    void update_one_arg( cl_event, T& ) {}
+
+    template <typename T, typename F>
+    void update_one_arg( cl_event e, dependency_msg<T, F>& msg ) {
+        msg.set_event( e );
+        msg.set_graph( my_graph );
+    }
+
+    template <typename T, typename ...Rest>
+    void update_arg_list( cl_event e, T& t, Rest&... args ) {
+        update_one_arg( e, t );
+        update_arg_list( e, args... );
+    }
+
+    void update_arg_list( cl_event ) {}
+    // ------------------------------------------- //
+public:
+    template <typename ...Args>
+    void send_kernel( opencl_device device, const kernel_type& kernel, const range_type& work_size, Args&... args ) {
+        std::array<cl_event, sizeof...(Args)> events;
+        int num_events = 0;
+        int place = 0;
+        process_arg_list( kernel, events, num_events, place, args... );
+
+        const cl_event e = send_kernel_impl( device, kernel.my_cl_kernel, work_size, num_events, events.data() );
+
+        update_arg_list(e, args...);
+
+        // Release our own reference to cl_event
+        enforce_cl_retcode( clReleaseEvent(e), "Failed to release an event" );
+    }
+
+    // ------------------------------------------- //
+    template <typename T, typename ...Rest>
+    void send_data(opencl_device device, T& t, Rest&... args) {
+        send_if_memory_object( device, t );
+        send_data( device, args... );
+    }
+
+    void send_data(opencl_device) {}
+    // ------------------------------------------- //
+
+private:
+    cl_event send_kernel_impl( opencl_device device, const cl_kernel& kernel,
+        const range_type& work_size, cl_uint num_events, cl_event* event_list ) {
+        const typename range_type::nd_range_type g_offset = { { 0, 0, 0 } };
+        const typename range_type::nd_range_type& g_size = work_size.global_range();
+        const typename range_type::nd_range_type& l_size = work_size.local_range();
+        cl_uint s;
+        for ( s = 1; s < 3 && g_size[s] != size_t(-1); ++s) {}
+        cl_event event;
+        enforce_cl_retcode(
+            clEnqueueNDRangeKernel( device.my_cl_command_queue, kernel, s,
+                g_offset.data(), g_size.data(), l_size[0] ? l_size.data() : NULL, num_events, num_events ? event_list : NULL, &event ),
+            "Failed to enqueue a kernel" );
+        return event;
+    }
+
+    // ------------------------------------------- //
+    template <typename T>
+    bool get_event_from_one_arg( cl_event&, const T& ) {
+        return false;
+    }
+
+    template <typename T, typename F>
+    bool get_event_from_one_arg( cl_event& e, const dependency_msg<T, F>& msg) {
+        cl_event const *e_ptr = msg.get_event();
+
+        if ( e_ptr != NULL ) {
+            e = *e_ptr;
+            return true;
+        }
+
+        return false;
+    }
+
+    template <typename T, typename ...Rest>
+    bool get_event_from_args( cl_event& e, const T& t, const Rest&... args ) {
+        if ( get_event_from_one_arg( e, t ) ) {
+            return true;
+        }
+
+        return get_event_from_args( e, args... );
+    }
+
+    bool get_event_from_args( cl_event& ) {
+        return false;
+    }
+    // ------------------------------------------- //
+
+    struct finalize_fn : tbb::internal::no_assign {
+        virtual ~finalize_fn() {}
+        virtual void operator() () {}
+    };
+
+    template<typename Fn>
+    struct finalize_fn_leaf : public finalize_fn {
+        Fn my_fn;
+        finalize_fn_leaf(Fn fn) : my_fn(fn) {}
+        void operator() () __TBB_override { my_fn(); }
+    };
+
+    static void CL_CALLBACK finalize_callback(cl_event, cl_int event_command_exec_status, void *data) {
+        tbb::internal::suppress_unused_warning(event_command_exec_status);
+        __TBB_ASSERT(event_command_exec_status == CL_COMPLETE, NULL);
+
+        finalize_fn * const fn_ptr = static_cast<finalize_fn*>(data);
+        __TBB_ASSERT(fn_ptr != NULL, "Invalid finalize function pointer");
+        (*fn_ptr)();
+
+        // Function pointer was created by 'new' & this callback must be called once only
+        delete fn_ptr;
+    }
+public:
+    template <typename FinalizeFn, typename ...Args>
+    void finalize( opencl_device device, FinalizeFn fn, Args&... args ) {
+        cl_event e;
+
+        if ( get_event_from_args( e, args... ) ) {
+            enforce_cl_retcode( clSetEventCallback( e, CL_COMPLETE, finalize_callback,
+                new finalize_fn_leaf<FinalizeFn>(fn) ), "Failed to set a callback" );
+        }
+
+        enforce_cl_retcode( clFlush( device.my_cl_command_queue ), "Failed to flush an OpenCL command queue" );
+    }
+
+    const opencl_device_list& devices() {
+        std::call_once( my_once_flag, &opencl_factory::init_once, this );
+        return my_devices;
+    }
+
+private:
+    bool is_same_context( opencl_device::device_id_type d1, opencl_device::device_id_type d2 ) {
+        __TBB_ASSERT( d1 != opencl_device::unknown && d2 != opencl_device::unknown, NULL );
+        // Currently, factory supports only one context so if the both devices are not host it means the are in the same context.
+        if ( d1 != opencl_device::host && d2 != opencl_device::host )
+            return true;
+        return d1 == d2;
+    }
+private:
+    opencl_factory( const opencl_factory& );
+    opencl_factory& operator=(const opencl_factory&);
+
+    cl_context context() {
+        std::call_once( my_once_flag, &opencl_factory::init_once, this );
+        return my_cl_context;
+    }
+
+    void init_once();
+
+    std::once_flag my_once_flag;
+    opencl_device_list my_devices;
+    cl_context my_cl_context;
+    opencl_graph &my_graph;
+
+    tbb::spin_mutex my_devices_mutex;
+
+    template <typename Factory>
+    friend class opencl_program;
+    template <typename Factory>
+    friend class opencl_buffer_impl;
+    template <typename Factory>
+    friend class opencl_memory;
+};
+
+template <typename Factory>
+dependency_msg<void*, Factory> opencl_memory<Factory>::receive( const cl_event *e ) {
+    dependency_msg<void*, Factory> d = e ? dependency_msg<void*, Factory>( my_host_ptr, *e ) : dependency_msg<void*, Factory>( my_host_ptr );
+    // Concurrent receives are prohibited so we do not worry about synchronization.
+    if ( my_curr_device_id.load<tbb::relaxed>() != opencl_device::host ) {
+        map_memory( *my_factory->devices().begin(), d );
+        my_curr_device_id.store<tbb::relaxed>( opencl_device::host );
+        my_host_ptr = d.data( false );
+    }
+    // Release the sending event
+    if ( my_sending_event_present ) {
+        enforce_cl_retcode( clReleaseEvent( my_sending_event ), "Failed to release an event" );
+        my_sending_event_present = false;
+    }
+    return d;
+}
+
+template <typename Factory>
+dependency_msg<void*, Factory> opencl_memory<Factory>::send( opencl_device device, const cl_event *e ) {
+    opencl_device::device_id_type device_id = device.my_device_id;
+    if ( !my_factory->is_same_context( my_curr_device_id.load<tbb::acquire>(), device_id ) ) {
+        {
+            tbb::spin_mutex::scoped_lock lock( my_sending_lock );
+            if ( !my_factory->is_same_context( my_curr_device_id.load<tbb::relaxed>(), device_id ) ) {
+                __TBB_ASSERT( my_host_ptr, "The buffer has not been mapped" );
+                dependency_msg<void*, Factory> d( my_host_ptr );
+                my_factory->enque_unmap_buffer( device, *this, d );
+                my_sending_event = *d.get_event();
+                my_sending_event_present = true;
+                enforce_cl_retcode( clRetainEvent( my_sending_event ), "Failed to retain an event" );
+                my_host_ptr = NULL;
+                my_curr_device_id.store<tbb::release>(device_id);
+            }
+        }
+        __TBB_ASSERT( my_sending_event_present, NULL );
+    }
+
+    // !e means that buffer has come from the host
+    if ( !e && my_sending_event_present ) e = &my_sending_event;
+
+    __TBB_ASSERT( !my_host_ptr, "The buffer has not been unmapped" );
+    return e ? dependency_msg<void*, Factory>( NULL, *e ) : dependency_msg<void*, Factory>( NULL );
+}
+
+struct default_opencl_factory_device_filter {
+    opencl_device_list operator()( const opencl_device_list &devices ) {
+        opencl_device_list dl;
+        dl.add( *devices.begin() );
+        return dl;
+    }
+};
+
+class default_opencl_factory : public opencl_factory < default_opencl_factory_device_filter > {
+public:
+    template<typename T> using async_msg_type = dependency_msg<T, default_opencl_factory>;
+    
+    default_opencl_factory( opencl_graph &g ) : opencl_factory( g ) {}
+private:
+    default_opencl_factory( const default_opencl_factory& );
+    default_opencl_factory& operator=(const default_opencl_factory&);
+};
+
+class opencl_foundation : tbb::internal::no_assign {
+    struct default_device_selector_type {
+        opencl_device operator()( default_opencl_factory& f ) {
+            __TBB_ASSERT( ! f.devices().empty(), "No available devices" );
+            return *( f.devices().begin() );
+        }
+    };
+public:
+    opencl_foundation(opencl_graph &g) : my_default_opencl_factory(g), my_default_device_selector() {
+        cl_uint num_platforms;
+        enforce_cl_retcode(clGetPlatformIDs(0, NULL, &num_platforms), "clGetPlatformIDs failed");
+
+        std::vector<cl_platform_id> platforms(num_platforms);
+        enforce_cl_retcode(clGetPlatformIDs(num_platforms, platforms.data(), NULL), "clGetPlatformIDs failed");
+
+        cl_uint num_devices;
+        std::vector<cl_platform_id>::iterator platforms_it = platforms.begin();
+        cl_uint num_all_devices = 0;
+        while (platforms_it != platforms.end()) {
+            cl_int err = clGetDeviceIDs(*platforms_it, CL_DEVICE_TYPE_ALL, 0, NULL, &num_devices);
+            if (err == CL_DEVICE_NOT_FOUND) {
+                platforms_it = platforms.erase(platforms_it);
+            } else {
+                enforce_cl_retcode(err, "clGetDeviceIDs failed");
+                num_all_devices += num_devices;
+                ++platforms_it;
+            }
+        }
+
+        std::vector<cl_device_id> devices(num_all_devices);
+        std::vector<cl_device_id>::iterator devices_it = devices.begin();
+        for (auto p = platforms.begin(); p != platforms.end(); ++p) {
+            enforce_cl_retcode(clGetDeviceIDs((*p), CL_DEVICE_TYPE_ALL, (cl_uint)std::distance(devices_it, devices.end()), &*devices_it, &num_devices), "clGetDeviceIDs failed");
+            devices_it += num_devices;
+        }
+
+        for (auto d = devices.begin(); d != devices.end(); ++d) {
+            my_devices.add(opencl_device((*d)));
+        }
+    }
+
+    default_opencl_factory &get_default_opencl_factory() {
+        return my_default_opencl_factory;
+    }
+
+    const opencl_device_list &get_all_devices() {
+        return my_devices;
+    }
+
+    default_device_selector_type get_default_device_selector() { return my_default_device_selector; }
+
+private:
+    default_opencl_factory my_default_opencl_factory;
+    opencl_device_list my_devices;
+
+    const default_device_selector_type my_default_device_selector;
+};
+
+opencl_foundation &opencl_graph::get_opencl_foundation() {
+    opencl_foundation* INITIALIZATION = (opencl_foundation*)1;
+    if ( my_opencl_foundation <= INITIALIZATION ) {
+        if ( tbb::internal::as_atomic( my_opencl_foundation ).compare_and_swap( INITIALIZATION, NULL ) == 0 ) {
+            my_opencl_foundation = new opencl_foundation( *this );
+        }
+        else {
+            tbb::internal::spin_wait_while_eq( my_opencl_foundation, INITIALIZATION );
+        }
+    }
+
+    __TBB_ASSERT( my_opencl_foundation > INITIALIZATION, "opencl_foundation is not initialized");
+    return *my_opencl_foundation;
+}
+
+opencl_graph::~opencl_graph() {
+    if ( my_opencl_foundation )
+        delete my_opencl_foundation;
+}
+
+template <typename DeviceFilter>
+void opencl_factory<DeviceFilter>::init_once() {
+        {
+            tbb::spin_mutex::scoped_lock lock( my_devices_mutex );
+            if ( !my_devices.size() )
+                my_devices = DeviceFilter()(my_graph.get_opencl_foundation().get_all_devices());
+        }
+
+    enforce_cl_retcode( my_devices.size() ? CL_SUCCESS : CL_INVALID_DEVICE, "No devices in the device list" );
+    cl_platform_id platform_id = my_devices.begin()->platform();
+    for ( opencl_device_list::iterator it = ++my_devices.begin(); it != my_devices.end(); ++it )
+        enforce_cl_retcode( it->platform() == platform_id ? CL_SUCCESS : CL_INVALID_PLATFORM, "All devices should be in the same platform" );
+
+    std::vector<cl_device_id> cl_device_ids;
+    for (auto d = my_devices.begin(); d != my_devices.end(); ++d) {
+        cl_device_ids.push_back((*d).my_cl_device_id);
+    }
+
+    cl_context_properties context_properties[3] = { CL_CONTEXT_PLATFORM, (cl_context_properties)platform_id, (cl_context_properties)NULL };
+    cl_int err;
+    cl_context ctx = clCreateContext( context_properties,
+        (cl_uint)cl_device_ids.size(),
+        cl_device_ids.data(),
+        NULL, NULL, &err );
+    enforce_cl_retcode( err, "Failed to create context" );
+    my_cl_context = ctx;
+
+    size_t device_counter = 0;
+    for ( auto d = my_devices.begin(); d != my_devices.end(); d++ ) {
+        (*d).my_device_id = device_counter++;
+        cl_int err2;
+        cl_command_queue cq;
+#if CL_VERSION_2_0
+        if ( (*d).major_version() >= 2 ) {
+            if ( (*d).out_of_order_exec_mode_on_host_present() ) {
+                cl_queue_properties props[] = { CL_QUEUE_PROPERTIES, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, 0 };
+                cq = clCreateCommandQueueWithProperties( ctx, (*d).my_cl_device_id, props, &err2 );
+            } else {
+                cl_queue_properties props[] = { 0 };
+                cq = clCreateCommandQueueWithProperties( ctx, (*d).my_cl_device_id, props, &err2 );
+            }
+        } else
+#endif
+        {
+            cl_command_queue_properties props = (*d).out_of_order_exec_mode_on_host_present() ? CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE : 0;
+            // Suppress "declared deprecated" warning for the next line.
+#if __TBB_GCC_WARNING_SUPPRESSION_PRESENT
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+#if _MSC_VER || __INTEL_COMPILER
+#pragma warning( push )
+#if __INTEL_COMPILER
+#pragma warning (disable: 1478)
+#else
+#pragma warning (disable: 4996)
+#endif
+#endif
+            cq = clCreateCommandQueue( ctx, (*d).my_cl_device_id, props, &err2 );
+#if _MSC_VER || __INTEL_COMPILER
+#pragma warning( pop )
+#endif
+#if __TBB_GCC_WARNING_SUPPRESSION_PRESENT
+#pragma GCC diagnostic pop
+#endif
+        }
+        enforce_cl_retcode( err2, "Failed to create command queue" );
+        (*d).my_cl_command_queue = cq;
+    }
+}
+
+const opencl_device_list &opencl_graph::available_devices() {
+    return get_opencl_foundation().get_all_devices();
+}
+
+default_opencl_factory &opencl_graph::opencl_factory() {
+    return get_opencl_foundation().get_default_opencl_factory();
+}
+
+template <typename T, typename Factory>
+opencl_buffer<T, Factory>::opencl_buffer( opencl_graph &g, size_t size ) : my_impl( std::make_shared<impl_type>( size*sizeof(T), g.get_opencl_foundation().get_default_opencl_factory() ) ) {}
+
+    
+enum class opencl_program_type {
+    SOURCE,
+    PRECOMPILED,
+    SPIR
+};
+
+template <typename Factory = default_opencl_factory>
+class opencl_program : tbb::internal::no_assign {
+public:
+    typedef typename Factory::kernel_type kernel_type;
+
+    opencl_program( Factory& factory, opencl_program_type type, const std::string& program_name ) : my_factory( factory ), my_type(type) , my_arg_str( program_name) {}
+    opencl_program( Factory& factory, const char* program_name ) : opencl_program( factory, std::string( program_name ) ) {}
+    opencl_program( Factory& factory, const std::string& program_name ) : opencl_program( factory, opencl_program_type::SOURCE, program_name ) {}
+
+    opencl_program( opencl_graph& graph, opencl_program_type type, const std::string& program_name ) : opencl_program( graph.opencl_factory(), type, program_name ) {}
+    opencl_program( opencl_graph& graph, const char* program_name ) : opencl_program( graph.opencl_factory(), program_name ) {}
+    opencl_program( opencl_graph& graph, const std::string& program_name ) : opencl_program( graph.opencl_factory(), program_name ) {}
+    opencl_program( opencl_graph& graph, opencl_program_type type ) : opencl_program( graph.opencl_factory(), type ) {}
+
+    opencl_program( const opencl_program &src ) : my_factory( src.my_factory ), my_type( src.type ), my_arg_str( src.my_arg_str ), my_cl_program( src.my_cl_program ) {
+        // Set my_do_once_flag to the called state.
+        std::call_once( my_do_once_flag, [](){} );
+    }
+
+    kernel_type get_kernel( const std::string& k ) const {
+        return kernel_type( get_cl_kernel(k), my_factory );
+    }
+
+private:
+    opencl_program( Factory& factory, cl_program program ) : my_factory( factory ), my_cl_program( program ) {
+        // Set my_do_once_flag to the called state.
+        std::call_once( my_do_once_flag, [](){} );
+    }
+
+    cl_kernel get_cl_kernel( const std::string& k ) const {
+        std::call_once( my_do_once_flag, [this, &k](){ this->init( k ); } );
+        cl_int err;
+        cl_kernel kernel = clCreateKernel( my_cl_program, k.c_str(), &err );
+        enforce_cl_retcode( err, std::string( "Failed to create kernel: " ) + k );
+        return kernel;
+    }
+
+    class file_reader {
+    public:
+        file_reader( const std::string& filepath ) {
+            std::ifstream file_descriptor( filepath, std::ifstream::binary );
+            if ( !file_descriptor.is_open() ) {
+                std::string str = std::string( "Could not open file: " ) + filepath;
+                std::cerr << str << std::endl;
+                throw str;
+            }
+            file_descriptor.seekg( 0, file_descriptor.end );
+            size_t length = size_t( file_descriptor.tellg() );
+            file_descriptor.seekg( 0, file_descriptor.beg );
+            my_content.resize( length );
+            char* begin = &*my_content.begin();
+            file_descriptor.read( begin, length );
+            file_descriptor.close();
+        }
+        const char* content() { return &*my_content.cbegin(); }
+        size_t length() { return my_content.length(); }
+    private:
+        std::string my_content;
+    };
+
+    class opencl_program_builder {
+    public:
+        typedef void (CL_CALLBACK *cl_callback_type)(cl_program, void*);
+        opencl_program_builder( Factory& f, const std::string& name, cl_program program,
+                                cl_uint num_devices, cl_device_id* device_list,
+                                const char* options, cl_callback_type callback,
+                                void* user_data ) {
+            cl_int err = clBuildProgram( program, num_devices, device_list, options,
+                                         callback, user_data );
+            if( err == CL_SUCCESS )
+                return;
+            std::string str = std::string( "Failed to build program: " ) + name;
+            if ( err == CL_BUILD_PROGRAM_FAILURE ) {
+                const opencl_device_list &devices = f.devices();
+                for ( auto d = devices.begin(); d != devices.end(); ++d ) {
+                    std::cerr << "Build log for device: " << (*d).name() << std::endl;
+                    size_t log_size;
+                    cl_int query_err = clGetProgramBuildInfo(
+                        program, (*d).my_cl_device_id, CL_PROGRAM_BUILD_LOG, 0, NULL,
+                        &log_size );
+                    enforce_cl_retcode( query_err, "Failed to get build log size" );
+                    if( log_size ) {
+                        std::vector<char> output;
+                        output.resize( log_size );
+                        query_err = clGetProgramBuildInfo(
+                            program, (*d).my_cl_device_id, CL_PROGRAM_BUILD_LOG,
+                            output.size(), output.data(), NULL );
+                        enforce_cl_retcode( query_err, "Failed to get build output" );
+                        std::cerr << output.data() << std::endl;
+                    } else {
+                        std::cerr << "No build log available" << std::endl;
+                    }
+                }
+            }
+            enforce_cl_retcode( err, str );
+        }
+    };
+
+    class opencl_device_filter {
+    public:
+        template<typename Filter>
+        opencl_device_filter( cl_uint& num_devices, cl_device_id* device_list,
+                              Filter filter, const char* message ) {
+            for ( cl_uint i = 0; i < num_devices; ++i )
+                if ( filter(device_list[i]) ) {
+                    device_list[i--] = device_list[--num_devices];
+                }
+            if ( !num_devices )
+                enforce_cl_retcode( CL_DEVICE_NOT_AVAILABLE, message );
+        }
+    };
+
+    void init( const std::string& ) const {
+        cl_uint num_devices;
+        enforce_cl_retcode( clGetContextInfo( my_factory.context(), CL_CONTEXT_NUM_DEVICES, sizeof( num_devices ), &num_devices, NULL ),
+            "Failed to get OpenCL context info" );
+        if ( !num_devices )
+            enforce_cl_retcode( CL_DEVICE_NOT_FOUND, "No supported devices found" );
+        cl_device_id *device_list = (cl_device_id *)alloca( num_devices*sizeof( cl_device_id ) );
+        enforce_cl_retcode( clGetContextInfo( my_factory.context(), CL_CONTEXT_DEVICES, num_devices*sizeof( cl_device_id ), device_list, NULL ),
+            "Failed to get OpenCL context info" );
+        const char *options = NULL;
+        switch ( my_type ) {
+        case opencl_program_type::SOURCE: {
+            file_reader fr( my_arg_str );
+            const char *s[] = { fr.content() };
+            const size_t l[] = { fr.length() };
+            cl_int err;
+            my_cl_program = clCreateProgramWithSource( my_factory.context(), 1, s, l, &err );
+            enforce_cl_retcode( err, std::string( "Failed to create program: " ) + my_arg_str );
+            opencl_device_filter(
+                num_devices, device_list,
+                []( const opencl_device& d ) -> bool {
+                    return !d.compiler_available() || !d.linker_available();
+                }, "No one device supports building program from sources" );
+            opencl_program_builder(
+                my_factory, my_arg_str, my_cl_program, num_devices, device_list,
+                options, /*callback*/ NULL, /*user data*/NULL );
+            break;
+        }
+        case opencl_program_type::SPIR:
+            options = "-x spir";
+        case opencl_program_type::PRECOMPILED: {
+            file_reader fr( my_arg_str );
+            std::vector<const unsigned char*> s(
+                num_devices, reinterpret_cast<const unsigned char*>(fr.content()) );
+            std::vector<size_t> l( num_devices, fr.length() );
+            std::vector<cl_int> bin_statuses( num_devices, -1 );
+            cl_int err;
+            my_cl_program = clCreateProgramWithBinary( my_factory.context(), num_devices,
+                                                       device_list, l.data(), s.data(),
+                                                       bin_statuses.data(), &err );
+            if( err != CL_SUCCESS ) {
+                std::string statuses_str;
+                for (auto st = bin_statuses.begin(); st != bin_statuses.end(); ++st) {
+                    statuses_str += std::to_string((*st));
+                }
+
+                enforce_cl_retcode( err, std::string( "Failed to create program, error " + std::to_string( err ) + " : " ) + my_arg_str +
+                                    std::string( ", binary_statuses = " ) + statuses_str );
+            }
+            opencl_program_builder(
+                my_factory, my_arg_str, my_cl_program, num_devices, device_list,
+                options, /*callback*/ NULL, /*user data*/NULL );
+            break;
+        }
+        default:
+            __TBB_ASSERT( false, "Unsupported program type" );
+        }
+    }
+
+    Factory& my_factory;
+    opencl_program_type my_type;
+    std::string my_arg_str;
+    mutable cl_program my_cl_program;
+    mutable std::once_flag my_do_once_flag;
+
+    template <typename DeviceFilter>
+    friend class opencl_factory;
+
+    template <typename DeviceFilter>
+    friend class opencl_factory<DeviceFilter>::kernel;
+};
+
+template<typename... Args>
+class opencl_node;
+
+template<typename JP, typename Factory, typename... Ports>
+class opencl_node< tuple<Ports...>, JP, Factory > : public streaming_node< tuple<Ports...>, JP, Factory > {
+    typedef streaming_node < tuple<Ports...>, JP, Factory > base_type;
+public:
+    typedef typename base_type::kernel_type kernel_type;
+
+    opencl_node( opencl_graph &g, const kernel_type& kernel )
+        : base_type( g, kernel, g.get_opencl_foundation().get_default_device_selector(), g.get_opencl_foundation().get_default_opencl_factory() )
+    {}
+
+    opencl_node( opencl_graph &g, const kernel_type& kernel, Factory &f )
+        : base_type( g, kernel, g.get_opencl_foundation().get_default_device_selector(), f )
+    {}
+
+    template <typename DeviceSelector>
+    opencl_node( opencl_graph &g, const kernel_type& kernel, DeviceSelector d, Factory &f)
+        : base_type( g, kernel, d, f)
+    {}
+};
+
+template<typename JP, typename... Ports>
+class opencl_node< tuple<Ports...>, JP > : public opencl_node < tuple<Ports...>, JP, default_opencl_factory > {
+    typedef opencl_node < tuple<Ports...>, JP, default_opencl_factory > base_type;
+public:
+    typedef typename base_type::kernel_type kernel_type;
+
+    opencl_node( opencl_graph &g, const kernel_type& kernel )
+        : base_type( g, kernel, g.get_opencl_foundation().get_default_device_selector(), g.get_opencl_foundation().get_default_opencl_factory() )
+    {}
+
+    template <typename DeviceSelector>
+    opencl_node( opencl_graph &g, const kernel_type& kernel, DeviceSelector d )
+        : base_type( g, kernel, d, g.get_opencl_foundation().get_default_opencl_factory() )
+    {}
+};
+
+template<typename... Ports>
+class opencl_node< tuple<Ports...> > : public opencl_node < tuple<Ports...>, queueing, default_opencl_factory > {
+    typedef opencl_node < tuple<Ports...>, queueing, default_opencl_factory > base_type;
+public:
+    typedef typename base_type::kernel_type kernel_type;
+
+    opencl_node( opencl_graph &g, const kernel_type& kernel )
+        : base_type( g, kernel, g.get_opencl_foundation().get_default_device_selector(), g.get_opencl_foundation().get_default_opencl_factory() )
+    {}
+
+    template <typename DeviceSelector>
+    opencl_node( opencl_graph &g, const kernel_type& kernel, DeviceSelector d )
+        : base_type( g, kernel, d, g.get_opencl_foundation().get_default_opencl_factory() )
+    {}
+};
+
+} // namespace interface9
+
+using interface9::opencl_graph;
+using interface9::opencl_node;
+using interface9::read_only;
+using interface9::read_write;
+using interface9::write_only;
+using interface9::opencl_buffer;
+using interface9::opencl_subbuffer;
+using interface9::opencl_device;
+using interface9::opencl_device_list;
+using interface9::opencl_program;
+using interface9::opencl_program_type;
+using interface9::dependency_msg;
+using interface9::opencl_factory;
+using interface9::opencl_range;
+
+} // namespace flow
+} // namespace tbb
+#endif /* __TBB_PREVIEW_OPENCL_NODE */
+
+#endif // __TBB_flow_graph_opencl_node_H
diff --git a/include/tbb/gfx_factory.h b/include/tbb/gfx_factory.h
new file mode 100644
index 0000000..76ca355
--- /dev/null
+++ b/include/tbb/gfx_factory.h
@@ -0,0 +1,359 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+#ifndef __TBB_flow_graph_gfx_factory_H
+#define __TBB_flow_graph_gfx_factory_H
+
+#include "tbb/tbb_config.h"
+
+#if __TBB_PREVIEW_GFX_FACTORY
+
+#include <vector>
+#include <future>
+#include <mutex>
+#include <iostream>
+
+#include <gfx/gfx_rt.h>
+#include <gfx/gfx_intrin.h>
+#include <gfx/gfx_types.h>
+
+namespace tbb {
+
+namespace flow {
+
+namespace interface9 {
+
+template <typename T>
+class gfx_buffer;
+
+namespace gfx_offload {
+
+    typedef GfxTaskId task_id_type;
+
+    //-----------------------------------------------------------------------
+    // GFX errors checkers.
+    // For more debug output, set GFX_LOG_OFFLOAD=2 macro
+    //-----------------------------------------------------------------------
+
+    // TODO: reconsider error handling approach. If exception is the right way
+    // then need to define and document a specific exception type.
+    inline void throw_gfx_exception() {
+        std::string msg = "GFX error occurred: " + std::to_string(_GFX_get_last_error());
+        std::cerr << msg << std::endl;
+        throw msg;
+    }
+
+    inline void check_enqueue_retcode(task_id_type err) {
+        if (err == 0) {
+            throw_gfx_exception();
+        }
+    }
+
+    inline void check_gfx_retcode(task_id_type err) {
+        if (err != GFX_SUCCESS) {
+            throw_gfx_exception();
+        }
+    }
+
+    //---------------------------------------------------------------------
+    // GFX asynchronous offload and share API
+    //---------------------------------------------------------------------
+
+    // Sharing and unsharing data API
+    template<typename DataType, typename SizeType>
+    void share(DataType* p, SizeType n) { check_gfx_retcode(_GFX_share(p, sizeof(*p)*n)); }
+    template<typename DataType>
+    void unshare(DataType* p) { check_gfx_retcode(_GFX_unshare(p)); }
+
+    // Retrieving array pointer from shared gfx_buffer
+    // Other types remain the same
+    template <typename T>
+    T* raw_data(gfx_buffer<T>& buffer) { return buffer.data(); }
+    template <typename T>
+    const T* raw_data(const gfx_buffer<T>& buffer) { return buffer.data(); }
+    template <typename T>
+    T& raw_data(T& data) { return data; }
+    template <typename T>
+    const T& raw_data(const T& data) { return data; }
+
+    // Kernel enqueuing on device with arguments
+    template <typename F, typename ...ArgType>
+    task_id_type run_kernel(F ptr, ArgType&... args) {
+        task_id_type id = _GFX_offload(ptr, raw_data(args)...);
+
+        // Check if something during offload went wrong (ex: driver initialization failure)
+        gfx_offload::check_enqueue_retcode(id);
+
+        return id;
+    }
+
+    // Waiting for tasks completion
+    void wait_for_task(task_id_type id) { check_gfx_retcode(_GFX_wait(id)); }
+
+} // namespace gfx_offload
+
+template <typename T>
+class gfx_buffer {
+public:
+
+    typedef typename std::vector<T>::iterator iterator;
+    typedef typename std::vector<T>::const_iterator const_iterator;
+
+    typedef std::size_t size_type;
+
+    gfx_buffer() : my_vector_ptr(std::make_shared< std::vector<T> >()) {}
+    gfx_buffer(size_type size) : my_vector_ptr(std::make_shared< std::vector<T> >(size)) {}
+
+    T* data() { return &(my_vector_ptr->front()); }
+    const T* data() const { return &(my_vector_ptr->front()); }
+
+    size_type size() const { return my_vector_ptr->size(); }
+
+    const_iterator cbegin() const { return my_vector_ptr->cbegin(); }
+    const_iterator cend() const { return my_vector_ptr->cend(); }
+    iterator begin() { return my_vector_ptr->begin(); }
+    iterator end() { return my_vector_ptr->end(); }
+
+    T& operator[](size_type pos) { return (*my_vector_ptr)[pos]; }
+    const T& operator[](size_type pos) const { return (*my_vector_ptr)[pos]; }
+
+private:
+    std::shared_ptr< std::vector<T> > my_vector_ptr;
+};
+
+template<typename T>
+class gfx_async_msg : public tbb::flow::async_msg<T> {
+public:
+    typedef gfx_offload::task_id_type kernel_id_type;
+
+    gfx_async_msg() : my_task_id(0) {}
+    gfx_async_msg(const T& input_data) : my_data(input_data), my_task_id(0) {}
+
+    T& data() { return my_data; }
+    const T& data() const { return my_data; }
+
+    void set_task_id(kernel_id_type id) { my_task_id = id; }
+    kernel_id_type task_id() const { return my_task_id; }
+
+private:
+    T my_data;
+    kernel_id_type my_task_id;
+};
+
+class gfx_factory {
+private:
+
+    // Wrapper for GFX kernel which is just a function
+    class func_wrapper {
+    public:
+
+        template <typename F>
+        func_wrapper(F ptr) { my_ptr = reinterpret_cast<void*>(ptr); }
+
+        template<typename ...Args>
+        void operator()(Args&&... args) {}
+
+        operator void*() { return my_ptr; }
+
+    private:
+        void* my_ptr;
+    };
+
+public:
+
+    // Device specific types
+    template<typename T> using async_msg_type = gfx_async_msg<T>;
+
+    typedef func_wrapper kernel_type;
+
+    // Empty device type that is needed for Factory Concept
+    // but is not used in gfx_factory
+    typedef struct {} device_type;
+
+    typedef gfx_offload::task_id_type kernel_id_type;
+
+    gfx_factory(tbb::flow::graph& g) : m_graph(g), current_task_id(0) {}
+
+    // Upload data to the device
+    template <typename ...Args>
+    void send_data(device_type /*device*/, Args&... args) {
+        send_data_impl(args...);
+    }
+
+    // Run kernel on the device
+    template <typename ...Args>
+    void send_kernel(device_type /*device*/, const kernel_type& kernel, Args&... args) {
+        // Get packed T data from async_msg<T> and pass it to kernel
+        kernel_id_type id = gfx_offload::run_kernel(kernel, args.data()...);
+
+        // Set id to async_msg
+        set_kernel_id(id, args...);
+
+        // Extend the graph lifetime until the callback completion.
+        m_graph.reserve_wait();
+
+        // Mutex for future assignment
+        std::lock_guard<std::mutex> lock(future_assignment_mutex);
+
+        // Set callback that waits for kernel execution
+        callback_future = std::async(std::launch::async, &gfx_factory::callback<Args...>, this, id, args...);
+    }
+
+    // Finalization action after the kernel run
+    template <typename FinalizeFn, typename ...Args>
+    void finalize(device_type /*device*/, FinalizeFn fn, Args&... /*args*/) {
+        fn();
+    }
+
+    // Empty device selector.
+    // No way to choose a device with GFX API.
+    class dummy_device_selector {
+    public:
+        device_type operator()(gfx_factory& /*factory*/) {
+            return device_type();
+        }
+    };
+
+private:
+
+    //---------------------------------------------------------------------
+    // Callback for kernel result
+    //---------------------------------------------------------------------
+
+    template <typename ...Args>
+    void callback(kernel_id_type id, Args... args) {
+        // Waiting for specific tasks id to complete
+        {
+            std::lock_guard<std::mutex> lock(task_wait_mutex);
+            if (current_task_id < id) {
+                gfx_offload::wait_for_task(id);
+                current_task_id = id;
+            }
+        }
+
+        // Get result from device and set to async_msg (args)
+        receive_data(args...);
+
+        // Data was sent to the graph, release the reference
+        m_graph.release_wait();
+    }
+
+    //---------------------------------------------------------------------
+    // send_data() arguments processing
+    //---------------------------------------------------------------------
+
+    // GFX buffer shared data with device that will be executed on
+    template <typename T>
+    void share_data(T) {}
+
+    template <typename T>
+    void share_data(gfx_buffer<T>& buffer) {
+        gfx_offload::share(buffer.data(), buffer.size());
+    }
+
+    template <typename T>
+    void send_arg(T) {}
+
+    template <typename T>
+    void send_arg(async_msg_type<T>& msg) {
+        share_data(msg.data());
+    }
+
+    void send_data_impl() {}
+
+    template <typename T, typename ...Rest>
+    void send_data_impl(T& arg, Rest&... args) {
+        send_arg(arg);
+        send_data_impl(args...);
+    }
+
+    //----------------------------------------------------------------------
+    // send_kernel() arguments processing
+    //----------------------------------------------------------------------
+
+    template <typename T>
+    void set_kernel_id_arg(kernel_id_type, T) {}
+
+    template <typename T>
+    void set_kernel_id_arg(kernel_id_type id, async_msg_type<T>& msg) {
+        msg.set_task_id(id);
+    }
+
+    void set_kernel_id(kernel_id_type) {}
+
+    template <typename T, typename ...Rest>
+    void set_kernel_id(kernel_id_type id, T& arg, Rest&... args) {
+        set_kernel_id_arg(id, arg);
+        set_kernel_id(id, args...);
+    }
+
+    //-----------------------------------------------------------------------
+    // Arguments processing after kernel execution.
+    // Unsharing buffers and forwarding results to the graph
+    //-----------------------------------------------------------------------
+
+    // After kernel execution the data should be unshared
+    template <typename T>
+    void unshare_data(T) {}
+
+    template <typename T>
+    void unshare_data(gfx_buffer<T>& buffer) {
+        gfx_offload::unshare(buffer.data());
+    }
+
+    template <typename T>
+    void receive_arg(T) {}
+
+    template <typename T>
+    void receive_arg(async_msg_type<T>& msg) {
+        unshare_data(msg.data());
+        msg.set(msg.data());
+    }
+
+    void receive_data() {}
+
+    template <typename T, typename ...Rest>
+    void receive_data(T& arg, Rest&... args) {
+        receive_arg(arg);
+        receive_data(args...);
+    }
+
+    //-----------------------------------------------------------------------
+    int current_task_id;
+
+    std::future<void> callback_future;
+    tbb::flow::graph& m_graph;
+
+    std::mutex future_assignment_mutex;
+    std::mutex task_wait_mutex;
+};
+
+} // namespace interface9
+
+using interface9::gfx_factory;
+using interface9::gfx_buffer;
+
+} // namespace flow
+
+} // namespace tbb
+
+#endif // __TBB_PREVIEW_GFX_FACTORY
+
+#endif // __TBB_flow_graph_gfx_factory_H
diff --git a/include/tbb/global_control.h b/include/tbb/global_control.h
index 9b773d3..fe74202 100644
--- a/include/tbb/global_control.h
+++ b/include/tbb/global_control.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_global_control_H
@@ -50,8 +50,7 @@ public:
             __TBB_ASSERT_RELEASE((unsigned)value == value, "Stack size is limited to unsigned int range");
 #endif
         if (my_param==max_allowed_parallelism)
-            // TODO: support for serialization via max_allowed_parallelism==1
-            __TBB_ASSERT_RELEASE(my_value>1, "Values of 1 and 0 are not supported for max_allowed_parallelism.");
+            __TBB_ASSERT_RELEASE(my_value>0, "max_allowed_parallelism cannot be 0.");
         internal_create();
     }
 
diff --git a/include/tbb/index.html b/include/tbb/index.html
index a403e1f..2eddd45 100644
--- a/include/tbb/index.html
+++ b/include/tbb/index.html
@@ -19,7 +19,7 @@ Include files for Intel® Threading Building Blocks classes and functions.
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/include/tbb/internal/_aggregator_impl.h b/include/tbb/internal/_aggregator_impl.h
index 6782b6a..40bbd49 100644
--- a/include/tbb/internal/_aggregator_impl.h
+++ b/include/tbb/internal/_aggregator_impl.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB__aggregator_impl_H
@@ -36,7 +36,9 @@ using namespace tbb::internal;
 template <typename Derived>
 class aggregated_operation {
  public:
+    //! Zero value means "wait" status, all other values are "user" specified values and are defined into the scope of a class which uses "status".
     uintptr_t status;
+
     Derived *next;
     aggregated_operation() : status(0), next(NULL) {}
 };
@@ -52,19 +54,21 @@ class aggregator_generic {
 public:
     aggregator_generic() : handler_busy(false) { pending_operations = NULL; }
 
-    //! Place operation in list
-    /** Place operation in list and either handle list or wait for operation to
-        complete.
-        long_life_time specifies life time of an operation inserting in an aggregator.
-        "Long" (long_life_time == true) life time operation can be accessed
-        even after executing it.
-        "Short" (long_life_time == false) life time operations can be destroyed
-        during executing so any access to it after executing is invalid.*/
+    //! Execute an operation
+    /** Places an operation into the waitlist (pending_operations), and either handles the list,
+        or waits for the operation to complete, or returns.
+        The long_life_time parameter specifies the life time of the given operation object.
+        Operations with long_life_time == true may be accessed after execution.
+        A "short" life time operation (long_life_time == false) can be destroyed
+        during execution, and so any access to it after it was put into the waitlist,
+        including status check, is invalid. As a consequence, waiting for completion
+        of such operation causes undefined behavior.
+    */
     template < typename handler_type >
     void execute(operation_type *op, handler_type &handle_operations, bool long_life_time = true) {
         operation_type *res;
-        // op->status should be read before inserting the operation in the
-        // aggregator queue since it can become invalid after executing a
+        // op->status should be read before inserting the operation into the
+        // aggregator waitlist since it can become invalid after executing a
         // handler (if the operation has 'short' life time.)
         const uintptr_t status = op->status;
 
@@ -76,7 +80,7 @@ public:
         call_itt_notify(releasing, &(op->status));
         // insert the operation in the queue.
         do {
-            // ITT may flag the following line as a race; it is a false positive:
+            // Tools may flag the following line as a race; it is a false positive:
             // This is an atomic read; we don't provide itt_hide_load_word for atomics
             op->next = res = pending_operations; // NOT A RACE
         } while (pending_operations.compare_and_swap(op, res) != res);
@@ -92,7 +96,7 @@ public:
         }
         // not first; wait for op to be ready.
         else if (!status) { // operation is blocking here.
-            __TBB_ASSERT(long_life_time, "The blocking operation cannot have 'short' life time. Since it can already be destroyed.");
+            __TBB_ASSERT(long_life_time, "Waiting for an operation object that might be destroyed during processing.");
             call_itt_notify(prepare, &(op->status));
             spin_wait_while_eq(op->status, uintptr_t(0));
             itt_load_word_with_acquire(op->status);
diff --git a/include/tbb/internal/_concurrent_queue_impl.h b/include/tbb/internal/_concurrent_queue_impl.h
index 30b738f..a99a68f 100644
--- a/include/tbb/internal/_concurrent_queue_impl.h
+++ b/include/tbb/internal/_concurrent_queue_impl.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB__concurrent_queue_impl_H
@@ -33,7 +33,7 @@
 #include "../tbb_exception.h"
 #include "../tbb_profiling.h"
 #include <new>
-#include <utility>
+#include __TBB_STD_SWAP_HEADER
 
 #if !TBB_USE_EXCEPTIONS && _MSC_VER
     // Suppress "C++ exception handler used, but unwind semantics are not enabled" warning in STL headers
@@ -281,15 +281,15 @@ bool micro_queue<T>::pop( void* dst, ticket k, concurrent_queue_base_v3<T>& base
     call_itt_notify(acquired, &head_counter);
     if( tail_counter==k ) spin_wait_while_eq( tail_counter, k );
     call_itt_notify(acquired, &tail_counter);
-    page& p = *head_page;
-    __TBB_ASSERT( &p, NULL );
+    page *p = head_page;
+    __TBB_ASSERT( p, NULL );
     size_t index = modulo_power_of_two( k/concurrent_queue_rep_base::n_queue, base.my_rep->items_per_page );
     bool success = false;
     {
-        micro_queue_pop_finalizer<T> finalizer( *this, base, k+concurrent_queue_rep_base::n_queue, index==base.my_rep->items_per_page-1 ? &p : NULL );
-        if( p.mask & uintptr_t(1)<<index ) {
+        micro_queue_pop_finalizer<T> finalizer( *this, base, k+concurrent_queue_rep_base::n_queue, index==base.my_rep->items_per_page-1 ? p : NULL );
+        if( p->mask & uintptr_t(1)<<index ) {
             success = true;
-            assign_and_destroy_item( dst, p, index );
+            assign_and_destroy_item( dst, *p, index );
         } else {
             --base.my_rep->n_invalid_entries;
         }
@@ -450,13 +450,13 @@ private:
     typedef typename micro_queue<T>::padded_page padded_page;
     typedef typename micro_queue<T>::item_constructor_t item_constructor_t;
 
-    /* override */ virtual page *allocate_page() {
+    virtual page *allocate_page() __TBB_override {
         concurrent_queue_rep<T>& r = *my_rep;
         size_t n = sizeof(padded_page) + (r.items_per_page-1)*sizeof(T);
         return reinterpret_cast<page*>(allocate_block ( n ));
     }
 
-    /* override */ virtual void deallocate_page( concurrent_queue_rep_base::page *p ) {
+    virtual void deallocate_page( concurrent_queue_rep_base::page *p ) __TBB_override {
         concurrent_queue_rep<T>& r = *my_rep;
         size_t n = sizeof(padded_page) + (r.items_per_page-1)*sizeof(T);
         deallocate_block( reinterpret_cast<void*>(p), n );
@@ -471,7 +471,7 @@ private:
 protected:
     concurrent_queue_base_v3();
 
-    /* override */ virtual ~concurrent_queue_base_v3() {
+    virtual ~concurrent_queue_base_v3() {
 #if TBB_USE_ASSERT
         size_t nq = my_rep->n_queue;
         for( size_t i=0; i<nq; i++ )
@@ -764,7 +764,7 @@ class concurrent_queue_iterator: public concurrent_queue_iterator_base_v3<typena
 public:
 #endif
     //! Construct iterator pointing to head of queue.
-    concurrent_queue_iterator( const concurrent_queue_base_v3<Value>& queue ) :
+    explicit concurrent_queue_iterator( const concurrent_queue_base_v3<typename tbb_remove_cv<Value>::type>& queue ) :
         concurrent_queue_iterator_base_v3<typename tbb_remove_cv<Value>::type>(queue)
     {
     }
@@ -772,6 +772,8 @@ public:
 public:
     concurrent_queue_iterator() {}
 
+    /** If Value==Container::value_type, then this routine is the copy constructor.
+        If Value==const Container::value_type, then this routine is a conversion constructor. */
     concurrent_queue_iterator( const concurrent_queue_iterator<Container,typename Container::value_type>& other ) :
         concurrent_queue_iterator_base_v3<typename tbb_remove_cv<Value>::type>(other)
     {}
@@ -1023,7 +1025,7 @@ public:
 #endif
 
     //! Construct iterator pointing to head of queue.
-    concurrent_queue_iterator( const concurrent_queue_base_v3& queue ) :
+    explicit concurrent_queue_iterator( const concurrent_queue_base_v3& queue ) :
         concurrent_queue_iterator_base_v3(queue,__TBB_offsetof(concurrent_queue_base_v3::padded_page<Value>,last))
     {
     }
diff --git a/include/tbb/internal/_concurrent_unordered_impl.h b/include/tbb/internal/_concurrent_unordered_impl.h
index 1d5ac6a..b34bc16 100644
--- a/include/tbb/internal/_concurrent_unordered_impl.h
+++ b/include/tbb/internal/_concurrent_unordered_impl.h
@@ -1,24 +1,24 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
-/* Container implementations in this header are based on PPL implementations 
+/* Container implementations in this header are based on PPL implementations
    provided by Microsoft. */
 
 #ifndef __TBB__concurrent_unordered_impl_H
@@ -40,7 +40,7 @@
 #include <functional>   // Need std::equal_to (in ../concurrent_unordered_*.h)
 #include <string>       // For tbb_hasher
 #include <cstring>      // Need std::memset
-#include <algorithm>    // Need std::swap
+#include __TBB_STD_SWAP_HEADER
 
 #if !TBB_USE_EXCEPTIONS && _MSC_VER
     #pragma warning (pop)
@@ -54,6 +54,8 @@
     #include <initializer_list>
 #endif
 
+#include "_tbb_hash_compare_impl.h"
+
 namespace tbb {
 namespace interface5 {
 //! @cond INTERNAL
@@ -267,7 +269,8 @@ public:
 
     // Allocate a new node with the given order key and value
     template<typename Arg>
-    nodeptr_t create_node(sokey_t order_key, __TBB_FORWARDING_REF(Arg) t){
+    nodeptr_t create_node(sokey_t order_key, __TBB_FORWARDING_REF(Arg) t,
+                          /*AllowCreate=*/tbb::internal::true_type=tbb::internal::true_type()){
         nodeptr_t pnode = my_node_allocator.allocate(1);
 
         //TODO: use RAII scoped guard instead of explicit catch
@@ -282,6 +285,14 @@ public:
         return (pnode);
     }
 
+    // A helper to avoid excessive requiremens in internal_insert
+    template<typename Arg>
+    nodeptr_t create_node(sokey_t, __TBB_FORWARDING_REF(Arg),
+                          /*AllowCreate=*/tbb::internal::false_type){
+        __TBB_ASSERT(false, "This compile-time helper should never get called");
+        return nodeptr_t();
+    }
+
     // Allocate a new node with the given parameters for constructing value
     template<typename __TBB_PARAMETER_PACK Args>
     nodeptr_t create_node_v( __TBB_FORWARDING_REF(Args) __TBB_PARAMETER_PACK args){
@@ -643,32 +654,6 @@ private:
     nodeptr_t                                             my_head;            // pointer to head node
 };
 
-// Template class for hash compare
-template<typename Key, typename Hasher, typename Key_equality>
-class hash_compare
-{
-public:
-    typedef Hasher hasher;
-    typedef Key_equality key_equal;
-
-    hash_compare() {}
-
-    hash_compare(Hasher a_hasher) : my_hash_object(a_hasher) {}
-
-    hash_compare(Hasher a_hasher, Key_equality a_keyeq) : my_hash_object(a_hasher), my_key_compare_object(a_keyeq) {}
-
-    size_t operator()(const Key& key) const {
-        return ((size_t)my_hash_object(key));
-    }
-
-    bool operator()(const Key& key1, const Key& key2) const {
-        return (!my_key_compare_object(key1, key2));
-    }
-
-    Hasher       my_hash_object;        // The hash object
-    Key_equality my_key_compare_object; // The equality comparator object
-};
-
 #if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
 #pragma warning(push)
 #pragma warning(disable: 4127) // warning C4127: conditional expression is constant
@@ -683,7 +668,6 @@ protected:
     typedef typename Traits::value_type value_type;
     typedef typename Traits::key_type key_type;
     typedef typename Traits::hash_compare hash_compare;
-    typedef typename Traits::value_compare value_compare;
     typedef typename Traits::allocator_type allocator_type;
     typedef typename hash_compare::hasher hasher;
     typedef typename hash_compare::key_equal key_equal;
@@ -732,7 +716,7 @@ protected:
           my_allocator(a), my_maximum_bucket_size((float) initial_bucket_load)
     {
         if( n_of_buckets == 0) ++n_of_buckets;
-        my_number_of_buckets = 1<<__TBB_Log2((uintptr_t)n_of_buckets*2-1); // round up to power of 2
+        my_number_of_buckets = size_type(1)<<__TBB_Log2((uintptr_t)n_of_buckets*2-1); // round up to power of 2
         internal_init();
     }
 
@@ -864,7 +848,7 @@ public:
         return my_solist.max_size();
     }
 
-    // Iterators 
+    // Iterators
     iterator begin() {
         return my_solist.begin();
     }
@@ -911,7 +895,7 @@ public:
             return my_midpoint_node != my_end_node;
         }
         //! Split range.
-        const_range_type( const_range_type &r, split ) : 
+        const_range_type( const_range_type &r, split ) :
             my_table(r.my_table), my_end_node(r.my_end_node)
         {
             r.my_end_node = my_begin_node = r.my_midpoint_node;
@@ -921,7 +905,7 @@ public:
             r.set_midpoint();
         }
         //! Init range with container and grainsize specified
-        const_range_type( const concurrent_unordered_base &a_table ) : 
+        const_range_type( const concurrent_unordered_base &a_table ) :
             my_table(a_table), my_begin_node(a_table.my_solist.begin()),
             my_end_node(a_table.my_solist.end())
         {
@@ -982,7 +966,7 @@ public:
 
     // Modifiers
     std::pair<iterator, bool> insert(const value_type& value) {
-        return internal_insert(value);
+        return internal_insert</*AllowCreate=*/tbb::internal::true_type>(value);
     }
 
     iterator insert(const_iterator, const value_type& value) {
@@ -992,7 +976,7 @@ public:
 
 #if __TBB_CPP11_RVALUE_REF_PRESENT
     std::pair<iterator, bool> insert(value_type&& value) {
-        return internal_insert(std::move(value));
+        return internal_insert</*AllowCreate=*/tbb::internal::true_type>(std::move(value));
     }
 
     iterator insert(const_iterator, value_type&& value) {
@@ -1008,7 +992,7 @@ public:
         const sokey_t order_key = split_order_key_regular(hashed_element_key);
         pnode->init(order_key);
 
-        return internal_insert(pnode->my_element, pnode);
+        return internal_insert</*AllowCreate=*/tbb::internal::false_type>(pnode->my_element, pnode);
     }
 
     template<typename... Args>
@@ -1109,7 +1093,7 @@ public:
         return const_cast<self_type*>(this)->internal_equal_range(key);
     }
 
-    // Bucket interface - for debugging 
+    // Bucket interface - for debugging
     size_type unsafe_bucket_count() const {
         return my_number_of_buckets;
     }
@@ -1162,7 +1146,7 @@ public:
             return end();
 
         raw_iterator it = get_bucket(bucket);
-    
+
         // Find the end of the bucket, denoted by the dummy element
         do ++it;
         while(it != my_solist.raw_end() && !it.get_node_ptr()->is_dummy());
@@ -1179,7 +1163,7 @@ public:
             return end();
 
         raw_const_iterator it = get_bucket(bucket);
-    
+
         // Find the end of the bucket, denoted by the dummy element
         do ++it;
         while(it != my_solist.raw_end() && !it.get_node_ptr()->is_dummy());
@@ -1218,7 +1202,7 @@ public:
         size_type current_buckets = my_number_of_buckets;
         if (current_buckets >= buckets)
             return;
-        my_number_of_buckets = 1<<__TBB_Log2((uintptr_t)buckets*2-1); // round up to power of 2
+        my_number_of_buckets = size_type(1)<<__TBB_Log2((uintptr_t)buckets*2-1); // round up to power of 2
     }
 
 private:
@@ -1284,41 +1268,35 @@ private:
     }
 
     // Insert an element in the hash given its value
-    template< typename ValueType>
-    std::pair<iterator, bool> internal_insert( __TBB_FORWARDING_REF(ValueType) value, nodeptr_t pnode = NULL)
+    template<typename AllowCreate, typename ValueType>
+    std::pair<iterator, bool> internal_insert(__TBB_FORWARDING_REF(ValueType) value, nodeptr_t pnode = NULL)
     {
-        sokey_t order_key = (sokey_t) my_hash_compare(get_key(value));
-        size_type bucket = order_key % my_number_of_buckets;
-
-        //TODO:refactor the get_bucket related stuff into separate function something like acquire_bucket(key_type)
-        // If bucket is empty, initialize it first
-        if (!is_initialized(bucket))
-            init_bucket(bucket);
-
+        const key_type *pkey = &get_key(value);
+        sokey_t hash_key = (sokey_t) my_hash_compare(*pkey);
         size_type new_count = 0;
-        order_key = split_order_key_regular(order_key);
-        raw_iterator it = get_bucket(bucket);
+        sokey_t order_key = split_order_key_regular(hash_key);
+        raw_iterator previous = prepare_bucket(hash_key);
         raw_iterator last = my_solist.raw_end();
-        raw_iterator where = it;
-
-        __TBB_ASSERT(where != last, "Invalid head node");
+        __TBB_ASSERT(previous != last, "Invalid head node");
 
         // First node is a dummy node
-        ++where;
-
-        for (;;)
+        for (raw_iterator where = previous;;)
         {
+            ++where;
             if (where == last || solist_t::get_order_key(where) > order_key ||
-                    // if multimapped, stop at the first item equal to us.
-                    (allow_multimapping && solist_t::get_order_key(where) == order_key &&
-                     !my_hash_compare(get_key(*where), get_key(value))))
+                // if multimapped, stop at the first item equal to us.
+                (allow_multimapping && solist_t::get_order_key(where) == order_key &&
+                 !my_hash_compare(get_key(*where), *pkey))) // TODO: fix negation
             {
-                 if (!pnode)
-                     pnode = my_solist.create_node(order_key, tbb::internal::forward<ValueType>(value));
-            
-                // Try to insert 'pnode' between 'it' and 'where'
-                std::pair<iterator, bool> result = my_solist.try_insert(it, where, pnode, &new_count);
-                
+                if (!pnode) {
+                    pnode = my_solist.create_node(order_key, tbb::internal::forward<ValueType>(value), AllowCreate());
+                    // If the value was moved, the known reference to key might be invalid
+                    pkey = &get_key(pnode->my_element);
+                }
+
+                // Try to insert 'pnode' between 'previous' and 'where'
+                std::pair<iterator, bool> result = my_solist.try_insert(previous, where, pnode, &new_count);
+
                 if (result.second)
                 {
                     // Insertion succeeded, adjust the table size, if needed
@@ -1332,38 +1310,30 @@ private:
                     // Proceed with the search from the previous location where order key was
                     // known to be larger (note: this is legal only because there is no safe
                     // concurrent erase operation supported).
-                    where = it;
-                    ++where;
+                    where = previous;
                     continue;
                 }
             }
             else if (!allow_multimapping && solist_t::get_order_key(where) == order_key &&
-                    my_hash_compare(get_key(*where), get_key(value)) == 0)
+                     !my_hash_compare(get_key(*where), *pkey)) // TODO: fix negation
             { // Element already in the list, return it
                  if (pnode)
-                     my_solist.destroy_node(pnode);            
+                     my_solist.destroy_node(pnode);
                 return std::pair<iterator, bool>(my_solist.get_iterator(where), false);
             }
             // Move the iterator forward
-            it = where;
-            ++where;
+            previous = where;
         }
     }
 
     // Find the element in the split-ordered list
     iterator internal_find(const key_type& key)
     {
-        sokey_t order_key = (sokey_t) my_hash_compare(key);
-        size_type bucket = order_key % my_number_of_buckets;
-
-        // If bucket is empty, initialize it first
-        if (!is_initialized(bucket))
-            init_bucket(bucket);
-
-        order_key = split_order_key_regular(order_key);
+        sokey_t hash_key = (sokey_t) my_hash_compare(key);
+        sokey_t order_key = split_order_key_regular(hash_key);
         raw_iterator last = my_solist.raw_end();
 
-        for (raw_iterator it = get_bucket(bucket); it != last; ++it)
+        for (raw_iterator it = prepare_bucket(hash_key); it != last; ++it)
         {
             if (solist_t::get_order_key(it) > order_key)
             {
@@ -1376,7 +1346,7 @@ private:
                 // The fact that order keys match does not mean that the element is found.
                 // Key function comparison has to be performed to check whether this is the
                 // right element. If not, keep searching while order key is the same.
-                if (!my_hash_compare(get_key(*it), key))
+                if (!my_hash_compare(get_key(*it), key)) // TODO: fix negation
                     return my_solist.get_iterator(it);
             }
         }
@@ -1387,35 +1357,18 @@ private:
     // Erase an element from the list. This is not a concurrency safe function.
     iterator internal_erase(const_iterator it)
     {
-        //const reference extends lifetime of possible temporary coming from get_key
-        const key_type& key = get_key(*it);
-        sokey_t order_key = (sokey_t) my_hash_compare(key);
-        size_type bucket = order_key % my_number_of_buckets;
-
-        // If bucket is empty, initialize it first
-        if (!is_initialized(bucket))
-            init_bucket(bucket);
-
-        order_key = split_order_key_regular(order_key);
-
-        raw_iterator previous = get_bucket(bucket);
+        sokey_t hash_key = (sokey_t) my_hash_compare(get_key(*it));
+        raw_iterator previous = prepare_bucket(hash_key);
         raw_iterator last = my_solist.raw_end();
-        raw_iterator where = previous;
-
-        __TBB_ASSERT(where != last, "Invalid head node");
+        __TBB_ASSERT(previous != last, "Invalid head node");
 
         // First node is a dummy node
-        ++where;
-
-        for (;;) {
+        for (raw_iterator where = previous; ; previous = where) {
+            ++where;
             if (where == last)
                 return end();
             else if (my_solist.get_iterator(where) == it)
                 return my_solist.erase_node(previous, it);
-
-            // Move the iterator forward
-            previous = where;
-            ++where;
         }
     }
 
@@ -1423,24 +1376,19 @@ private:
     // This operation makes sense only if mapping is many-to-one.
     pairii_t internal_equal_range(const key_type& key)
     {
-        sokey_t order_key = (sokey_t) my_hash_compare(key);
-        size_type bucket = order_key % my_number_of_buckets;
-
-        // If bucket is empty, initialize it first
-        if (!is_initialized(bucket))
-            init_bucket(bucket);
-
-        order_key = split_order_key_regular(order_key);
+        sokey_t hash_key = (sokey_t) my_hash_compare(key);
+        sokey_t order_key = split_order_key_regular(hash_key);
         raw_iterator end_it = my_solist.raw_end();
 
-        for (raw_iterator it = get_bucket(bucket); it != end_it; ++it)
+        for (raw_iterator it = prepare_bucket(hash_key); it != end_it; ++it)
         {
             if (solist_t::get_order_key(it) > order_key)
             {
                 // There is no element with the given key
                 return pairii_t(end(), end());
             }
-            else if (solist_t::get_order_key(it) == order_key && !my_hash_compare(get_key(*it), key))
+            else if (solist_t::get_order_key(it) == order_key &&
+                     !my_hash_compare(get_key(*it), key)) // TODO: fix negation; also below
             {
                 iterator first = my_solist.get_iterator(it);
                 iterator last = first;
@@ -1514,6 +1462,15 @@ private:
         return my_buckets[segment][bucket];
     }
 
+    raw_iterator prepare_bucket(sokey_t hash_key) {
+        size_type bucket = hash_key % my_number_of_buckets;
+        size_type segment = segment_index_of(bucket);
+        size_type index = bucket - segment_base(segment);
+        if (my_buckets[segment] == NULL || my_buckets[segment][index].get_node_ptr() == NULL)
+            init_bucket(bucket);
+        return my_buckets[segment][index];
+    }
+
     void set_bucket(size_type bucket, raw_iterator dummy_head) {
         size_type segment = segment_index_of(bucket);
         bucket -= segment_base(segment);
@@ -1564,47 +1521,8 @@ private:
 #pragma warning(pop) // warning 4127 is back
 #endif
 
-//! Hash multiplier
-static const size_t hash_multiplier = tbb::internal::select_size_t_constant<2654435769U, 11400714819323198485ULL>::value;
 } // namespace internal
 //! @endcond
-//! Hasher functions
-template<typename T>
-inline size_t tbb_hasher( const T& t ) {
-    return static_cast<size_t>( t ) * internal::hash_multiplier;
-}
-template<typename P>
-inline size_t tbb_hasher( P* ptr ) {
-    size_t const h = reinterpret_cast<size_t>( ptr );
-    return (h >> 3) ^ h;
-}
-template<typename E, typename S, typename A>
-inline size_t tbb_hasher( const std::basic_string<E,S,A>& s ) {
-    size_t h = 0;
-    for( const E* c = s.c_str(); *c; ++c )
-        h = static_cast<size_t>(*c) ^ (h * internal::hash_multiplier);
-    return h;
-}
-template<typename F, typename S>
-inline size_t tbb_hasher( const std::pair<F,S>& p ) {
-    return tbb_hasher(p.first) ^ tbb_hasher(p.second);
-}
 } // namespace interface5
-using interface5::tbb_hasher;
-
-
-// Template class for hash compare
-template<typename Key>
-class tbb_hash
-{
-public:
-    tbb_hash() {}
-
-    size_t operator()(const Key& key) const
-    {
-        return tbb_hasher(key);
-    }
-};
-
 } // namespace tbb
 #endif // __TBB__concurrent_unordered_impl_H
diff --git a/include/tbb/internal/_flow_graph_async_msg_impl.h b/include/tbb/internal/_flow_graph_async_msg_impl.h
new file mode 100644
index 0000000..7d2c3ae
--- /dev/null
+++ b/include/tbb/internal/_flow_graph_async_msg_impl.h
@@ -0,0 +1,221 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+#ifndef __TBB__flow_graph_async_msg_impl_H
+#define __TBB__flow_graph_async_msg_impl_H
+
+#ifndef __TBB_flow_graph_H
+#error Do not #include this internal file directly; use public TBB headers instead.
+#endif
+
+// included in namespace tbb::flow::interfaceX (in flow_graph.h)
+
+template< typename T > class async_msg;
+
+namespace internal {
+
+template< typename T, typename = void >
+struct async_helpers {
+    typedef async_msg<T> async_type;
+    typedef T filtered_type;
+
+    static const bool is_async_type = false;
+
+    static const void* to_void_ptr(const T& t) {
+        return static_cast<const void*>(&t);
+    }
+
+    static void* to_void_ptr(T& t) {
+        return static_cast<void*>(&t);
+    }
+
+    static const T& from_void_ptr(const void* p) {
+        return *static_cast<const T*>(p);
+    }
+
+    static T& from_void_ptr(void* p) {
+        return *static_cast<T*>(p);
+    }
+
+    static task* try_put_task_wrapper_impl( receiver<T>* const this_recv, const void *p, bool is_async ) {
+        if ( is_async ) {
+            // This (T) is NOT async and incoming 'A<X> t' IS async
+            // Get data from async_msg
+            const async_msg<filtered_type>& msg = async_helpers< async_msg<filtered_type> >::from_void_ptr(p);
+            task* const new_task = msg.my_storage->subscribe(*this_recv);
+            // finalize() must be called after subscribe() because set() can be called in finalize()
+            // and 'this_recv' client must be subscribed by this moment
+            msg.finalize();
+            return new_task;
+        } else {
+            // Incoming 't' is NOT async
+            return this_recv->try_put_task( from_void_ptr(p) );
+        }
+    }
+};
+
+template< typename T >
+struct async_helpers< T, typename std::enable_if< std::is_base_of<async_msg<typename T::async_msg_data_type>, T>::value >::type > {
+    typedef T async_type;
+    typedef typename T::async_msg_data_type filtered_type;
+
+    static const bool is_async_type = true;
+
+    // Receiver-classes use const interfaces
+    static const void* to_void_ptr(const T& t) {
+        return static_cast<const void*>( &static_cast<const async_msg<filtered_type>&>(t) );
+    }
+
+    static void* to_void_ptr(T& t) {
+        return static_cast<void*>( &static_cast<async_msg<filtered_type>&>(t) );
+    }
+
+    // Sender-classes use non-const interfaces
+    static const T& from_void_ptr(const void* p) {
+        return *static_cast<const T*>( static_cast<const async_msg<filtered_type>*>(p) );
+    }
+
+    static T& from_void_ptr(void* p) {
+        return *static_cast<T*>( static_cast<async_msg<filtered_type>*>(p) );
+    }
+
+    // Used in receiver<T> class
+    static task* try_put_task_wrapper_impl(receiver<T>* const this_recv, const void *p, bool is_async) {
+        if ( is_async ) {
+            // Both are async
+            return this_recv->try_put_task( from_void_ptr(p) );
+        } else {
+            // This (T) is async and incoming 'X t' is NOT async
+            // Create async_msg for X
+            const filtered_type& t = async_helpers<filtered_type>::from_void_ptr(p);
+            const T msg(t);
+            return this_recv->try_put_task(msg);
+        }
+    }
+};
+
+template <typename T>
+class async_storage {
+public:
+    typedef receiver<T> async_storage_client;
+
+    async_storage() { my_data_ready.store<tbb::relaxed>(false); }
+
+    template<typename C>
+    async_storage(C&& data) : my_data( std::forward<C>(data) ) {
+        using namespace tbb::internal;
+        __TBB_STATIC_ASSERT( (is_same_type<typename strip<C>::type, typename strip<T>::type>::value), "incoming type must be T" );
+
+        my_data_ready.store<tbb::relaxed>(true);
+    }
+
+    template<typename C>
+    bool set(C&& data) {
+        using namespace tbb::internal;
+        __TBB_STATIC_ASSERT( (is_same_type<typename strip<C>::type, typename strip<T>::type>::value), "incoming type must be T" );
+
+        {
+            tbb::spin_mutex::scoped_lock locker(my_mutex);
+
+            if (my_data_ready.load<tbb::relaxed>()) {
+                __TBB_ASSERT(false, "double set() call");
+                return false;
+            }
+
+            my_data = std::forward<C>(data);
+            my_data_ready.store<tbb::release>(true);
+        }
+
+        // Thread sync is on my_data_ready flag
+        for (typename subscriber_list_type::iterator it = my_clients.begin(); it != my_clients.end(); ++it) {
+            (*it)->try_put(my_data);
+        }
+
+        return true;
+    }
+
+    task* subscribe(async_storage_client& client) {
+        if (! my_data_ready.load<tbb::acquire>())
+        {
+            tbb::spin_mutex::scoped_lock locker(my_mutex);
+
+            if (! my_data_ready.load<tbb::relaxed>()) {
+#if TBB_USE_ASSERT
+                for (typename subscriber_list_type::iterator it = my_clients.begin(); it != my_clients.end(); ++it) {
+                    __TBB_ASSERT(*it != &client, "unexpected double subscription");
+                }
+#endif // TBB_USE_ASSERT
+
+                // Subscribe
+                my_clients.push_back(&client);
+                return SUCCESSFULLY_ENQUEUED;
+            }
+        }
+
+        __TBB_ASSERT(my_data_ready.load<tbb::relaxed>(), "data is NOT ready");
+        return client.try_put_task(my_data);
+    }
+
+private:
+    tbb::spin_mutex my_mutex;
+
+    tbb::atomic<bool> my_data_ready;
+    T my_data;
+
+    typedef std::vector<async_storage_client*> subscriber_list_type;
+    subscriber_list_type my_clients;
+};
+
+} // namespace internal
+
+template <typename T>
+class async_msg {
+    template< typename > friend class receiver;
+    template< typename, typename > friend struct internal::async_helpers;
+public:
+    typedef T async_msg_data_type;
+
+    async_msg() : my_storage(std::make_shared< internal::async_storage<T> >()) {}
+
+    async_msg(const T& t) : my_storage(std::make_shared< internal::async_storage<T> >(t)) {}
+
+    async_msg(T&& t) : my_storage(std::make_shared< internal::async_storage<T> >( std::move(t) )) {}
+
+    virtual ~async_msg() {}
+
+    void set(const T& t) {
+        my_storage->set(t);
+    }
+
+    void set(T&& t) {
+        my_storage->set( std::move(t) );
+    }
+
+protected:
+    // Can be overridden in derived class to inform that 
+    // async calculation chain is over
+    virtual void finalize() const {}
+
+private:
+    typedef std::shared_ptr< internal::async_storage<T> > async_storage_ptr;
+    async_storage_ptr my_storage;
+};
+
+#endif  // __TBB__flow_graph_async_msg_impl_H
diff --git a/include/tbb/internal/_flow_graph_impl.h b/include/tbb/internal/_flow_graph_impl.h
index c5b73f8..92278ca 100644
--- a/include/tbb/internal/_flow_graph_impl.h
+++ b/include/tbb/internal/_flow_graph_impl.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB__flow_graph_impl_H
@@ -25,10 +25,32 @@
 #error Do not #include this internal file directly; use public TBB headers instead.
 #endif
 
+// included in namespace tbb::flow::interfaceX (in flow_graph.h)
+
 namespace internal {
 
+    typedef tbb::internal::uint64_t tag_value;
+
+    using tbb::internal::strip;
+
     namespace graph_policy_namespace {
-        enum graph_buffer_policy { rejecting, reserving, queueing, tag_matching };
+
+        struct rejecting { };
+        struct reserving { };
+        struct queueing  { };
+
+        // K == type of field used for key-matching.  Each tag-matching port will be provided
+        // functor that, given an object accepted by the port, will return the
+        /// field of type K being used for matching.
+        template<typename K, typename KHash=tbb_hash_compare<typename strip<K>::type > >
+        struct key_matching {
+            typedef K key_type;
+            typedef typename strip<K>::type base_key_type;
+            typedef KHash hash_compare_type;
+        };
+
+        // old tag_matching join's new specifier
+        typedef key_matching<tag_value> tag_matching;
     }
 
 // -------------- function_body containers ----------------------
@@ -40,29 +62,20 @@ namespace internal {
         virtual ~source_body() {}
         virtual bool operator()(Output &output) = 0;
         virtual source_body* clone() = 0;
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-        virtual void reset_body() = 0;
-#endif
     };
 
     //! The leaf for source_body
     template< typename Output, typename Body>
     class source_body_leaf : public source_body<Output> {
     public:
-        source_body_leaf( const Body &_body ) : body(_body), init_body(_body) { }
-        /*override*/ bool operator()(Output &output) { return body( output ); }
-        /*override*/ source_body_leaf* clone() {
-            return new source_body_leaf< Output, Body >(init_body);
-        }
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-        /*override*/ void reset_body() {
-            body = init_body;
+        source_body_leaf( const Body &_body ) : body(_body) { }
+        bool operator()(Output &output) __TBB_override { return body( output ); }
+        source_body_leaf* clone() __TBB_override {
+            return new source_body_leaf< Output, Body >(body);
         }
-#endif
         Body get_body() { return body; }
     private:
         Body body;
-        Body init_body;
     };
 
     //! A functor that takes an Input and generates an Output
@@ -72,97 +85,70 @@ namespace internal {
         virtual ~function_body() {}
         virtual Output operator()(const Input &input) = 0;
         virtual function_body* clone() = 0;
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-        virtual void reset_body() = 0;
-#endif
     };
 
     //! the leaf for function_body
     template <typename Input, typename Output, typename B>
     class function_body_leaf : public function_body< Input, Output > {
     public:
-        function_body_leaf( const B &_body ) : body(_body), init_body(_body) { }
-        Output operator()(const Input &i) { return body(i); }
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-        /*override*/ void reset_body() {
-            body = init_body;
-        }
-#endif
+        function_body_leaf( const B &_body ) : body(_body) { }
+        Output operator()(const Input &i) __TBB_override { return body(i); }
         B get_body() { return body; }
-        /*override*/ function_body_leaf* clone() {
-            return new function_body_leaf< Input, Output, B >(init_body);
+        function_body_leaf* clone() __TBB_override {
+            return new function_body_leaf< Input, Output, B >(body);
         }
     private:
         B body;
-        B init_body;
     };
 
     //! the leaf for function_body specialized for Input and output of continue_msg
     template <typename B>
     class function_body_leaf< continue_msg, continue_msg, B> : public function_body< continue_msg, continue_msg > {
     public:
-        function_body_leaf( const B &_body ) : body(_body), init_body(_body) { }
-        continue_msg operator()( const continue_msg &i ) {
+        function_body_leaf( const B &_body ) : body(_body) { }
+        continue_msg operator()( const continue_msg &i ) __TBB_override {
             body(i);
             return i;
         }
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-        /*override*/ void reset_body() {
-            body = init_body;
-        }
-#endif
         B get_body() { return body; }
-        /*override*/ function_body_leaf* clone() {
-           return new function_body_leaf< continue_msg, continue_msg, B >(init_body);
+        function_body_leaf* clone() __TBB_override {
+           return new function_body_leaf< continue_msg, continue_msg, B >(body);
         }
     private:
         B body;
-        B init_body;
     };
 
     //! the leaf for function_body specialized for Output of continue_msg
     template <typename Input, typename B>
     class function_body_leaf< Input, continue_msg, B> : public function_body< Input, continue_msg > {
     public:
-        function_body_leaf( const B &_body ) : body(_body), init_body(_body) { }
-        continue_msg operator()(const Input &i) {
+        function_body_leaf( const B &_body ) : body(_body) { }
+        continue_msg operator()(const Input &i) __TBB_override {
             body(i);
             return continue_msg();
         }
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-        /*override*/ void reset_body() {
-            body = init_body;
-        }
-#endif
         B get_body() { return body; }
-        /*override*/ function_body_leaf* clone() {
-            return new function_body_leaf< Input, continue_msg, B >(init_body);
+        function_body_leaf* clone() __TBB_override {
+            return new function_body_leaf< Input, continue_msg, B >(body);
         }
     private:
         B body;
-        B init_body;
     };
 
     //! the leaf for function_body specialized for Input of continue_msg
     template <typename Output, typename B>
     class function_body_leaf< continue_msg, Output, B > : public function_body< continue_msg, Output > {
     public:
-        function_body_leaf( const B &_body ) : body(_body), init_body(_body) { }
-        Output operator()(const continue_msg &i) {
+        function_body_leaf( const B &_body ) : body(_body) { }
+        Output operator()(const continue_msg &i) __TBB_override {
             return body(i);
         }
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-        /*override*/ void reset_body() {
-            body = init_body;
-        }
-#endif
         B get_body() { return body; }
-        /*override*/ function_body_leaf* clone() {
-            return new function_body_leaf< continue_msg, Output, B >(init_body);
+        function_body_leaf* clone() __TBB_override {
+            return new function_body_leaf< continue_msg, Output, B >(body);
         }
     private:
         B body;
-        B init_body;
     };
 
     //! function_body that takes an Input and a set of output ports
@@ -172,67 +158,72 @@ namespace internal {
         virtual ~multifunction_body () {}
         virtual void operator()(const Input &/* input*/, OutputSet &/*oset*/) = 0;
         virtual multifunction_body* clone() = 0;
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-        virtual void reset_body() = 0;
-#endif
+        virtual void* get_body_ptr() = 0;
     };
 
     //! leaf for multifunction.  OutputSet can be a std::tuple or a vector.
-    template<typename Input, typename OutputSet, typename B>
+    template<typename Input, typename OutputSet, typename B >
     class multifunction_body_leaf : public multifunction_body<Input, OutputSet> {
     public:
-        multifunction_body_leaf(const B &_body) : body(_body), init_body(_body) { }
-        void operator()(const Input &input, OutputSet &oset) {
+        multifunction_body_leaf(const B &_body) : body(_body) { }
+        void operator()(const Input &input, OutputSet &oset) __TBB_override {
             body(input, oset); // body may explicitly put() to one or more of oset.
         }
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-        /*override*/ void reset_body() {
-            body = init_body;
-        }
-#endif
-        B get_body() { return body; }
-        /*override*/ multifunction_body_leaf* clone() {
-            return new multifunction_body_leaf<Input, OutputSet,B>(init_body);
+        void* get_body_ptr() __TBB_override { return &body; }
+        multifunction_body_leaf* clone() __TBB_override {
+            return new multifunction_body_leaf<Input, OutputSet,B>(body);
         }
+
     private:
         B body;
-        B init_body;
     };
 
-#if __TBB_PREVIEW_ASYNC_NODE
+// ------ function bodies for hash_buffers and key-matching joins.
 
-    //! A functor that takes Input and submit it to Asynchronous Activity
-    template< typename Input, typename AsyncGateway >
-    class async_body : tbb::internal::no_assign {
+template<typename Input, typename Output>
+class type_to_key_function_body : tbb::internal::no_assign {
     public:
-        virtual ~async_body() {}
-        virtual void operator()(const Input &output, AsyncGateway& gateway) = 0;
-        virtual async_body* clone() = 0;
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-        virtual void reset_body() = 0;
-#endif
-    };
-
-    //! The leaf for async_body
-    template< typename Input, typename Body, typename AsyncGateway >
-    class async_body_leaf : public async_body< Input, AsyncGateway > {
+        virtual ~type_to_key_function_body() {}
+        virtual Output operator()(const Input &input) = 0;  // returns an Output
+        virtual type_to_key_function_body* clone() = 0;
+};
+
+// specialization for ref output
+template<typename Input, typename Output>
+class type_to_key_function_body<Input,Output&> : tbb::internal::no_assign {
     public:
-        async_body_leaf( const Body &_body ) : body(_body), init_body(_body) { }
-        /*override*/ void operator()(const Input &input, AsyncGateway& gateway) { body( input, gateway ); }
-        /*override*/ async_body_leaf* clone() {
-            return new async_body_leaf< Input, Body, AsyncGateway >(init_body);
-        }
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-        /*override*/ void reset_body() {
-            body = init_body;
-        }
-#endif
-        Body get_body() { return body; }
-    private:
-        Body body;
-        Body init_body;
-    };
-#endif
+        virtual ~type_to_key_function_body() {}
+        virtual const Output & operator()(const Input &input) = 0;  // returns a const Output&
+        virtual type_to_key_function_body* clone() = 0;
+};
+
+template <typename Input, typename Output, typename B>
+class type_to_key_function_body_leaf : public type_to_key_function_body<Input, Output> {
+public:
+    type_to_key_function_body_leaf( const B &_body ) : body(_body) { }
+    Output operator()(const Input &i) __TBB_override { return body(i); }
+    B get_body() { return body; }
+    type_to_key_function_body_leaf* clone() __TBB_override {
+        return new type_to_key_function_body_leaf< Input, Output, B>(body);
+    }
+private:
+    B body;
+};
+
+template <typename Input, typename Output, typename B>
+class type_to_key_function_body_leaf<Input,Output&,B> : public type_to_key_function_body< Input, Output&> {
+public:
+    type_to_key_function_body_leaf( const B &_body ) : body(_body) { }
+    const Output& operator()(const Input &i) __TBB_override {
+        return body(i);
+    }
+    B get_body() { return body; }
+    type_to_key_function_body_leaf* clone() __TBB_override {
+        return new type_to_key_function_body_leaf< Input, Output&, B>(body);
+    }
+private:
+    B body;
+};
 
 // --------------------------- end of function_body containers ------------------------
 
@@ -248,7 +239,7 @@ namespace internal {
 
         forward_task_bypass( NodeType &n ) : my_node(n) {}
 
-        task *execute() {
+        task *execute() __TBB_override {
             task * new_task = my_node.forward_task();
             if (new_task == SUCCESSFULLY_ENQUEUED) new_task = NULL;
             return new_task;
@@ -267,14 +258,14 @@ namespace internal {
 
         apply_body_task_bypass( NodeType &n, const Input &i ) : my_node(n), my_input(i) {}
 
-        task *execute() {
+        task *execute() __TBB_override {
             task * next_task = my_node.apply_body_bypass( my_input );
             if(next_task == SUCCESSFULLY_ENQUEUED) next_task = NULL;
             return next_task;
         }
     };
 
-    //! A task that calls a node's apply_body function with no input
+    //! A task that calls a node's apply_body_bypass function with no input
     template< typename NodeType >
     class source_task_bypass : public task {
 
@@ -284,7 +275,7 @@ namespace internal {
 
         source_task_bypass( NodeType &n ) : my_node(n) {}
 
-        task *execute() {
+        task *execute() __TBB_override {
             task *new_task = my_node.apply_body_bypass( );
             if(new_task == SUCCESSFULLY_ENQUEUED) return NULL;
             return new_task;
@@ -307,17 +298,17 @@ namespace internal {
         typedef size_t size_type;
 
         bool empty() {
-            typename my_mutex_type::scoped_lock lock( my_mutex );
+            typename mutex_type::scoped_lock lock( my_mutex );
             return internal_empty();
         }
 
         void add( T &n ) {
-            typename my_mutex_type::scoped_lock lock( my_mutex );
+            typename mutex_type::scoped_lock lock( my_mutex );
             internal_push(n);
         }
 
         void remove( T &n ) {
-            typename my_mutex_type::scoped_lock lock( my_mutex );
+            typename mutex_type::scoped_lock lock( my_mutex );
             for ( size_t i = internal_size(); i != 0; --i ) {
                 T &s = internal_pop();
                 if ( &s == &n )  return;  // only remove one predecessor per request
@@ -325,41 +316,43 @@ namespace internal {
             }
         }
 
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-        typedef edge_container<T> built_predecessors_type;
         void clear() {
             while( !my_q.empty()) (void)my_q.pop();
+#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
             my_built_predecessors.clear();
+#endif
         }
 
+#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
+        typedef edge_container<T> built_predecessors_type;
         built_predecessors_type &built_predecessors() { return my_built_predecessors; }
 
         typedef typename edge_container<T>::edge_list_type predecessor_list_type;
         void internal_add_built_predecessor( T &n ) {
-            typename my_mutex_type::scoped_lock lock( my_mutex );
+            typename mutex_type::scoped_lock lock( my_mutex );
             my_built_predecessors.add_edge(n);
         }
 
         void internal_delete_built_predecessor( T &n ) {
-            typename my_mutex_type::scoped_lock lock( my_mutex );
+            typename mutex_type::scoped_lock lock( my_mutex );
             my_built_predecessors.delete_edge(n);
         }
 
         void copy_predecessors( predecessor_list_type &v) {
-            typename my_mutex_type::scoped_lock lock( my_mutex );
+            typename mutex_type::scoped_lock lock( my_mutex );
             my_built_predecessors.copy_edges(v);
         }
 
         size_t predecessor_count() {
-            typename my_mutex_type::scoped_lock lock(my_mutex);
+            typename mutex_type::scoped_lock lock(my_mutex);
             return (size_t)(my_built_predecessors.edge_count());
         }
-#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */ 
+#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */
 
     protected:
 
-        typedef M my_mutex_type;
-        my_mutex_type my_mutex;
+        typedef M mutex_type;
+        mutex_type my_mutex;
         std::queue< T * > my_q;
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         built_predecessors_type my_built_predecessors;
@@ -391,12 +384,22 @@ namespace internal {
 
     //! A cache of predecessors that only supports try_get
     template< typename T, typename M=spin_mutex >
+#if __TBB_PREVIEW_ASYNC_MSG
+    // TODO: make predecessor_cache type T-independent when async_msg becomes regular feature
+    class predecessor_cache : public node_cache< untyped_sender, M > {
+#else
     class predecessor_cache : public node_cache< sender<T>, M > {
+#endif // __TBB_PREVIEW_ASYNC_MSG
     public:
-        typedef M my_mutex_type;
+        typedef M mutex_type;
         typedef T output_type;
+#if __TBB_PREVIEW_ASYNC_MSG
+        typedef untyped_sender predecessor_type;
+        typedef untyped_receiver successor_type;
+#else
         typedef sender<output_type> predecessor_type;
         typedef receiver<output_type> successor_type;
+#endif // __TBB_PREVIEW_ASYNC_MSG
 
         predecessor_cache( ) : my_owner( NULL ) { }
 
@@ -409,7 +412,7 @@ namespace internal {
             do {
                 predecessor_type *src;
                 {
-                    typename my_mutex_type::scoped_lock lock(this->my_mutex);
+                    typename mutex_type::scoped_lock lock(this->my_mutex);
                     if ( this->internal_empty() ) {
                         break;
                     }
@@ -421,7 +424,7 @@ namespace internal {
 
                 if (msg == false) {
                     // Relinquish ownership of the edge
-                    if ( my_owner)
+                    if (my_owner)
                         src->register_successor( *my_owner );
                 } else {
                     // Retain ownership of the edge
@@ -433,14 +436,14 @@ namespace internal {
 
         // If we are removing arcs (rf_clear_edges), call clear() rather than reset().
         void reset() {
-            if(my_owner) {
+            if (my_owner) {
                 for(;;) {
                     predecessor_type *src;
                     {
-                        if(this->internal_empty()) break;
+                        if (this->internal_empty()) break;
                         src = &this->internal_pop();
                     }
-                    src->register_successor( *my_owner);
+                    src->register_successor( *my_owner );
                 }
             }
         }
@@ -448,19 +451,25 @@ namespace internal {
     protected:
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-        using node_cache< sender<T>, M >::my_built_predecessors;
+        using node_cache< predecessor_type, M >::my_built_predecessors;
 #endif
         successor_type *my_owner;
     };
 
     //! An cache of predecessors that supports requests and reservations
+    // TODO: make reservable_predecessor_cache type T-independent when async_msg becomes regular feature
     template< typename T, typename M=spin_mutex >
     class reservable_predecessor_cache : public predecessor_cache< T, M > {
     public:
-        typedef M my_mutex_type;
+        typedef M mutex_type;
         typedef T output_type;
+#if __TBB_PREVIEW_ASYNC_MSG
+        typedef untyped_sender predecessor_type;
+        typedef untyped_receiver successor_type;
+#else
         typedef sender<T> predecessor_type;
         typedef receiver<T> successor_type;
+#endif // __TBB_PREVIEW_ASYNC_MSG
 
         reservable_predecessor_cache( ) : reserved_src(NULL) { }
 
@@ -470,7 +479,7 @@ namespace internal {
 
             do {
                 {
-                    typename my_mutex_type::scoped_lock lock(this->my_mutex);
+                    typename mutex_type::scoped_lock lock(this->my_mutex);
                     if ( reserved_src || this->internal_empty() )
                         return false;
 
@@ -481,7 +490,7 @@ namespace internal {
                 msg = reserved_src->try_reserve( v );
 
                 if (msg == false) {
-                    typename my_mutex_type::scoped_lock lock(this->my_mutex);
+                    typename mutex_type::scoped_lock lock(this->my_mutex);
                     // Relinquish ownership of the edge
                     reserved_src->register_successor( *this->my_owner );
                     reserved_src = NULL;
@@ -524,22 +533,30 @@ namespace internal {
 
 
     //! An abstract cache of successors
+    // TODO: make successor_cache type T-independent when async_msg becomes regular feature
     template<typename T, typename M=spin_rw_mutex >
     class successor_cache : tbb::internal::no_copy {
     protected:
 
-        typedef M my_mutex_type;
-        my_mutex_type my_mutex;
+        typedef M mutex_type;
+        mutex_type my_mutex;
 
+#if __TBB_PREVIEW_ASYNC_MSG
+        typedef untyped_receiver successor_type;
+        typedef untyped_receiver *pointer_type;
+        typedef untyped_sender owner_type;
+#else
         typedef receiver<T> successor_type;
         typedef receiver<T> *pointer_type;
-        typedef std::list< pointer_type > my_successors_type;
+        typedef sender<T> owner_type;
+#endif // __TBB_PREVIEW_ASYNC_MSG
+        typedef std::list< pointer_type > successors_type;
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         edge_container<successor_type> my_built_successors;
 #endif
-        my_successors_type my_successors;
+        successors_type my_successors;
 
-        sender<T> *my_owner;
+        owner_type *my_owner;
 
     public:
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
@@ -548,22 +565,22 @@ namespace internal {
         edge_container<successor_type> &built_successors() { return my_built_successors; }
 
         void internal_add_built_successor( successor_type &r) {
-            typename my_mutex_type::scoped_lock l(my_mutex, true);
+            typename mutex_type::scoped_lock l(my_mutex, true);
             my_built_successors.add_edge( r );
         }
 
         void internal_delete_built_successor( successor_type &r) {
-            typename my_mutex_type::scoped_lock l(my_mutex, true);
+            typename mutex_type::scoped_lock l(my_mutex, true);
             my_built_successors.delete_edge(r);
         }
 
         void copy_successors( successor_list_type &v) {
-            typename my_mutex_type::scoped_lock l(my_mutex, false);
+            typename mutex_type::scoped_lock l(my_mutex, false);
             my_built_successors.copy_edges(v);
         }
 
         size_t successor_count() {
-            typename my_mutex_type::scoped_lock l(my_mutex,false);
+            typename mutex_type::scoped_lock l(my_mutex,false);
             return my_built_successors.edge_count();
         }
 
@@ -571,18 +588,18 @@ namespace internal {
 
         successor_cache( ) : my_owner(NULL) {}
 
-        void set_owner( sender<T> *owner ) { my_owner = owner; }
+        void set_owner( owner_type *owner ) { my_owner = owner; }
 
         virtual ~successor_cache() {}
 
         void register_successor( successor_type &r ) {
-            typename my_mutex_type::scoped_lock l(my_mutex, true);
+            typename mutex_type::scoped_lock l(my_mutex, true);
             my_successors.push_back( &r );
         }
 
         void remove_successor( successor_type &r ) {
-            typename my_mutex_type::scoped_lock l(my_mutex, true);
-            for ( typename my_successors_type::iterator i = my_successors.begin();
+            typename mutex_type::scoped_lock l(my_mutex, true);
+            for ( typename successors_type::iterator i = my_successors.begin();
                   i != my_successors.end(); ++i ) {
                 if ( *i == & r ) {
                     my_successors.erase(i);
@@ -592,7 +609,7 @@ namespace internal {
         }
 
         bool empty() {
-            typename my_mutex_type::scoped_lock l(my_mutex, false);
+            typename mutex_type::scoped_lock l(my_mutex, false);
             return my_successors.empty();
         }
 
@@ -603,7 +620,9 @@ namespace internal {
 #endif
         }
 
+#if !__TBB_PREVIEW_ASYNC_MSG
         virtual task * try_put_task( const T &t ) = 0;
+#endif // __TBB_PREVIEW_ASYNC_MSG
      };  // successor_cache<T>
 
     //! An abstract cache of successors, specialized to continue_msg
@@ -611,13 +630,18 @@ namespace internal {
     class successor_cache< continue_msg > : tbb::internal::no_copy {
     protected:
 
-        typedef spin_rw_mutex my_mutex_type;
-        my_mutex_type my_mutex;
+        typedef spin_rw_mutex mutex_type;
+        mutex_type my_mutex;
 
+#if __TBB_PREVIEW_ASYNC_MSG
+        typedef untyped_receiver successor_type;
+        typedef untyped_receiver *pointer_type;
+#else
         typedef receiver<continue_msg> successor_type;
         typedef receiver<continue_msg> *pointer_type;
-        typedef std::list< pointer_type > my_successors_type;
-        my_successors_type my_successors;
+#endif // __TBB_PREVIEW_ASYNC_MSG
+        typedef std::list< pointer_type > successors_type;
+        successors_type my_successors;
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         edge_container<successor_type> my_built_successors;
         typedef edge_container<successor_type>::edge_list_type successor_list_type;
@@ -632,22 +656,22 @@ namespace internal {
         edge_container<successor_type> &built_successors() { return my_built_successors; }
 
         void internal_add_built_successor( successor_type &r) {
-            my_mutex_type::scoped_lock l(my_mutex, true);
+            mutex_type::scoped_lock l(my_mutex, true);
             my_built_successors.add_edge( r );
         }
 
         void internal_delete_built_successor( successor_type &r) {
-            my_mutex_type::scoped_lock l(my_mutex, true);
+            mutex_type::scoped_lock l(my_mutex, true);
             my_built_successors.delete_edge(r);
         }
 
         void copy_successors( successor_list_type &v) {
-            my_mutex_type::scoped_lock l(my_mutex, false);
+            mutex_type::scoped_lock l(my_mutex, false);
             my_built_successors.copy_edges(v);
         }
 
         size_t successor_count() {
-            my_mutex_type::scoped_lock l(my_mutex,false);
+            mutex_type::scoped_lock l(my_mutex,false);
             return my_built_successors.edge_count();
         }
 
@@ -660,7 +684,7 @@ namespace internal {
         virtual ~successor_cache() {}
 
         void register_successor( successor_type &r ) {
-            my_mutex_type::scoped_lock l(my_mutex, true);
+            mutex_type::scoped_lock l(my_mutex, true);
             my_successors.push_back( &r );
             if ( my_owner && r.is_continue_receiver() ) {
                 r.register_predecessor( *my_owner );
@@ -668,8 +692,8 @@ namespace internal {
         }
 
         void remove_successor( successor_type &r ) {
-            my_mutex_type::scoped_lock l(my_mutex, true);
-            for ( my_successors_type::iterator i = my_successors.begin();
+            mutex_type::scoped_lock l(my_mutex, true);
+            for ( successors_type::iterator i = my_successors.begin();
                   i != my_successors.end(); ++i ) {
                 if ( *i == & r ) {
                     // TODO: Check if we need to test for continue_receiver before
@@ -683,7 +707,7 @@ namespace internal {
         }
 
         bool empty() {
-            my_mutex_type::scoped_lock l(my_mutex, false);
+            mutex_type::scoped_lock l(my_mutex, false);
             return my_successors.empty();
         }
 
@@ -694,27 +718,34 @@ namespace internal {
 #endif
         }
 
+#if !__TBB_PREVIEW_ASYNC_MSG
         virtual task * try_put_task( const continue_msg &t ) = 0;
+#endif // __TBB_PREVIEW_ASYNC_MSG
 
     };  // successor_cache< continue_msg >
 
     //! A cache of successors that are broadcast to
+    // TODO: make broadcast_cache type T-independent when async_msg becomes regular feature
     template<typename T, typename M=spin_rw_mutex>
     class broadcast_cache : public successor_cache<T, M> {
-        typedef M my_mutex_type;
-        // typedef std::list< receiver<T> * > my_successors_type;
-        typedef typename successor_cache<T,M>::my_successors_type my_successors_type;
+        typedef M mutex_type;
+        typedef typename successor_cache<T,M>::successors_type successors_type;
 
     public:
 
         broadcast_cache( ) {}
 
         // as above, but call try_put_task instead, and return the last task we received (if any)
-        /*override*/ task * try_put_task( const T &t ) {
+#if __TBB_PREVIEW_ASYNC_MSG
+        template<typename X>
+        task * try_put_task( const X &t ) {
+#else
+        task * try_put_task( const T &t ) __TBB_override {
+#endif // __TBB_PREVIEW_ASYNC_MSG
             task * last_task = NULL;
             bool upgraded = true;
-            typename my_mutex_type::scoped_lock l(this->my_mutex, upgraded);
-            typename my_successors_type::iterator i = this->my_successors.begin();
+            typename mutex_type::scoped_lock l(this->my_mutex, upgraded);
+            typename successors_type::iterator i = this->my_successors.begin();
             while ( i != this->my_successors.end() ) {
                 task *new_task = (*i)->try_put_task(t);
                 last_task = combine_tasks(last_task, new_task);  // enqueue if necessary
@@ -739,26 +770,31 @@ namespace internal {
     };
 
     //! A cache of successors that are put in a round-robin fashion
+    // TODO: make round_robin_cache type T-independent when async_msg becomes regular feature
     template<typename T, typename M=spin_rw_mutex >
     class round_robin_cache : public successor_cache<T, M> {
         typedef size_t size_type;
-        typedef M my_mutex_type;
-        // typedef std::list< receiver<T> * > my_successors_type;
-        typedef typename successor_cache<T,M>::my_successors_type my_successors_type;
+        typedef M mutex_type;
+        typedef typename successor_cache<T,M>::successors_type successors_type;
 
     public:
 
         round_robin_cache( ) {}
 
         size_type size() {
-            typename my_mutex_type::scoped_lock l(this->my_mutex, false);
+            typename mutex_type::scoped_lock l(this->my_mutex, false);
             return this->my_successors.size();
         }
 
-        /*override*/task *try_put_task( const T &t ) {
+#if __TBB_PREVIEW_ASYNC_MSG
+        template<typename X>
+        task * try_put_task( const X &t ) {
+#else
+        task *try_put_task( const T &t ) __TBB_override {
+#endif // __TBB_PREVIEW_ASYNC_MSG
             bool upgraded = true;
-            typename my_mutex_type::scoped_lock l(this->my_mutex, upgraded);
-            typename my_successors_type::iterator i = this->my_successors.begin();
+            typename mutex_type::scoped_lock l(this->my_mutex, upgraded);
+            typename successors_type::iterator i = this->my_successors.begin();
             while ( i != this->my_successors.end() ) {
                 task *new_task = (*i)->try_put_task(t);
                 if ( new_task ) {
@@ -785,7 +821,7 @@ namespace internal {
 
         T *my_node;
 
-        task *execute() {
+        task *execute() __TBB_override {
             return my_node->decrement_counter();
         }
 
diff --git a/include/tbb/internal/_flow_graph_indexer_impl.h b/include/tbb/internal/_flow_graph_indexer_impl.h
index ae47615..1fc6690 100644
--- a/include/tbb/internal/_flow_graph_indexer_impl.h
+++ b/include/tbb/internal/_flow_graph_indexer_impl.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB__flow_graph_indexer_impl_H
@@ -25,15 +25,15 @@
 #error Do not #include this internal file directly; use public TBB headers instead.
 #endif
 
-#include "tbb/internal/_flow_graph_types_impl.h"
+#include "_flow_graph_types_impl.h"
 
 namespace internal {
 
     // Output of the indexer_node is a tbb::flow::tagged_msg, and will be of
     // the form  tagged_msg<tag, result>
     // where the value of tag will indicate which result was put to the
-    // successor.  
-    
+    // successor.
+
     template<typename IndexerNodeBaseType, typename T, size_t K>
     task* do_try_put(const T &v, void *p) {
         typename IndexerNodeBaseType::output_type o(K, v);
@@ -49,12 +49,12 @@ namespace internal {
             tbb::flow::get<N-1>(my_input).set_up(p, indexer_node_put_task);
             indexer_helper<TupleTypes,N-1>::template set_indexer_node_pointer<IndexerNodeBaseType,PortTuple>(my_input, p);
         }
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         template<typename InputTuple>
         static inline void reset_inputs(InputTuple &my_input, reset_flags f) {
             indexer_helper<TupleTypes,N-1>::reset_inputs(my_input, f);
             tbb::flow::get<N-1>(my_input).reset_receiver(f);
         }
+#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         template<typename InputTuple>
         static inline void extract(InputTuple &my_input) {
             indexer_helper<TupleTypes,N-1>::extract(my_input);
@@ -71,11 +71,11 @@ namespace internal {
             task *(*indexer_node_put_task)(const T&, void *) = do_try_put<IndexerNodeBaseType, T, 0>;
             tbb::flow::get<0>(my_input).set_up(p, indexer_node_put_task);
         }
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         template<typename InputTuple>
         static inline void reset_inputs(InputTuple &my_input, reset_flags f) {
             tbb::flow::get<0>(my_input).reset_receiver(f);
         }
+#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         template<typename InputTuple>
         static inline void extract(InputTuple &my_input) {
             tbb::flow::get<0>(my_input).extract_receiver();
@@ -106,48 +106,45 @@ namespace internal {
             }
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         typedef typename receiver<T>::predecessor_list_type predecessor_list_type;
+        typedef typename receiver<T>::predecessor_type predecessor_type;
 
-        /*override*/ built_predecessors_type &built_predecessors() { return my_built_predecessors; }
+        built_predecessors_type &built_predecessors() __TBB_override { return my_built_predecessors; }
 
-        /*override*/size_t predecessor_count() {
+        size_t predecessor_count() __TBB_override {
             spin_mutex::scoped_lock l(my_pred_mutex);
             return my_built_predecessors.edge_count();
         }
-        /*override*/void internal_add_built_predecessor(sender<T> &p) {
+        void internal_add_built_predecessor(predecessor_type &p) __TBB_override {
             spin_mutex::scoped_lock l(my_pred_mutex);
             my_built_predecessors.add_edge(p);
         }
-        /*override*/void internal_delete_built_predecessor(sender<T> &p) {
+        void internal_delete_built_predecessor(predecessor_type &p) __TBB_override {
             spin_mutex::scoped_lock l(my_pred_mutex);
             my_built_predecessors.delete_edge(p);
         }
-        /*override*/void copy_predecessors( predecessor_list_type &v) {
+        void copy_predecessors( predecessor_list_type &v) __TBB_override {
             spin_mutex::scoped_lock l(my_pred_mutex);
-            return my_built_predecessors.copy_edges(v);
-        }
-        /*override*/void clear_predecessors() {
-            spin_mutex::scoped_lock l(my_pred_mutex);
-            my_built_predecessors.clear();
+            my_built_predecessors.copy_edges(v);
         }
 #endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */
     protected:
         template< typename R, typename B > friend class run_and_put_task;
         template<typename X, typename Y> friend class internal::broadcast_cache;
         template<typename X, typename Y> friend class internal::round_robin_cache;
-        task *try_put_task(const T &v) {
+        task *try_put_task(const T &v) __TBB_override {
             return my_try_put_task(v, my_indexer_ptr);
         }
 
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     public:
-        /*override*/void reset_receiver(__TBB_PFG_RESET_ARG(reset_flags f)) {
-            if(f&rf_clear_edges) my_built_predecessors.clear();
-        }
-        void extract_receiver() { my_built_predecessors.receiver_extract(*this); }
+#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
+        void reset_receiver(reset_flags f) __TBB_override { if(f&rf_clear_edges) my_built_predecessors.clear(); }
 #else
-        /*override*/void reset_receiver(__TBB_PFG_RESET_ARG(reset_flags /*f*/)) { }
+        void reset_receiver(reset_flags /*f*/) __TBB_override { }
 #endif
 
+#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
+        void extract_receiver() { my_built_predecessors.receiver_extract(*this); }
+#endif
     };
 
     template<typename InputTuple, typename OutputType, typename StructTypes>
@@ -157,6 +154,9 @@ namespace internal {
         typedef OutputType output_type;
         typedef InputTuple input_type;
 
+        // Some versions of Intel C++ compiler fail to generate an implicit constructor for the class which has std::tuple as a member.
+        indexer_node_FE() : my_inputs() {}
+
         input_type &input_ports() { return my_inputs; }
     protected:
         input_type my_inputs;
@@ -172,7 +172,7 @@ namespace internal {
         static const size_t N = tbb::flow::tuple_size<InputTuple>::value;
         typedef OutputType output_type;
         typedef StructTypes tuple_types;
-        typedef receiver<output_type> successor_type;
+        typedef typename sender<output_type>::successor_type successor_type;
         typedef indexer_node_FE<InputTuple, output_type,StructTypes> input_ports_type;
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         typedef typename sender<output_type>::built_successors_type built_successors_type;
@@ -187,8 +187,7 @@ namespace internal {
              blt_succ_cnt, blt_succ_cpy
 #endif
         };
-        enum op_stat {WAIT=0, SUCCEEDED, FAILED};
-        typedef indexer_node_base<InputTuple,output_type,StructTypes> my_class;
+        typedef indexer_node_base<InputTuple,output_type,StructTypes> class_type;
 
         class indexer_node_base_operation : public aggregated_operation<indexer_node_base_operation> {
         public:
@@ -204,14 +203,14 @@ namespace internal {
             };
             indexer_node_base_operation(const output_type* e, op_type t) :
                 type(char(t)), my_arg(e) {}
-            indexer_node_base_operation(const successor_type &s, op_type t) : type(char(t)), 
+            indexer_node_base_operation(const successor_type &s, op_type t) : type(char(t)),
                 my_succ(const_cast<successor_type *>(&s)) {}
             indexer_node_base_operation(op_type t) : type(char(t)) {}
         };
 
-        typedef internal::aggregating_functor<my_class, indexer_node_base_operation> my_handler;
-        friend class internal::aggregating_functor<my_class, indexer_node_base_operation>;
-        aggregator<my_handler, indexer_node_base_operation> my_aggregator;
+        typedef internal::aggregating_functor<class_type, indexer_node_base_operation> handler_type;
+        friend class internal::aggregating_functor<class_type, indexer_node_base_operation>;
+        aggregator<handler_type, indexer_node_base_operation> my_aggregator;
 
         void handle_operations(indexer_node_base_operation* op_list) {
             indexer_node_base_operation *current;
@@ -260,28 +259,28 @@ namespace internal {
         indexer_node_base(graph& g) : graph_node(g), input_ports_type() {
             indexer_helper<StructTypes,N>::set_indexer_node_pointer(this->my_inputs, this);
             my_successors.set_owner(this);
-            my_aggregator.initialize_handler(my_handler(this));
+            my_aggregator.initialize_handler(handler_type(this));
         }
 
         indexer_node_base(const indexer_node_base& other) : graph_node(other.my_graph), input_ports_type(), sender<output_type>() {
             indexer_helper<StructTypes,N>::set_indexer_node_pointer(this->my_inputs, this);
             my_successors.set_owner(this);
-            my_aggregator.initialize_handler(my_handler(this));
+            my_aggregator.initialize_handler(handler_type(this));
         }
 
-        bool register_successor(successor_type &r) {
+        bool register_successor(successor_type &r) __TBB_override {
             indexer_node_base_operation op_data(r, reg_succ);
             my_aggregator.execute(&op_data);
             return op_data.status == SUCCEEDED;
         }
 
-        bool remove_successor( successor_type &r) {
+        bool remove_successor( successor_type &r) __TBB_override {
             indexer_node_base_operation op_data(r, rem_succ);
             my_aggregator.execute(&op_data);
             return op_data.status == SUCCEEDED;
         }
 
-        task * try_put_task(output_type const *v) {
+        task * try_put_task(output_type const *v) { // not a virtual method in this class
             indexer_node_base_operation op_data(v, try__put_task);
             my_aggregator.execute(&op_data);
             return op_data.bypass_t;
@@ -289,42 +288,40 @@ namespace internal {
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
 
-        built_successors_type &built_successors() { return my_successors.built_successors(); }
+        built_successors_type &built_successors() __TBB_override { return my_successors.built_successors(); }
 
-        void internal_add_built_successor( successor_type &r) {
+        void internal_add_built_successor( successor_type &r) __TBB_override {
             indexer_node_base_operation op_data(r, add_blt_succ);
             my_aggregator.execute(&op_data);
         }
 
-        void internal_delete_built_successor( successor_type &r) {
+        void internal_delete_built_successor( successor_type &r) __TBB_override {
             indexer_node_base_operation op_data(r, del_blt_succ);
             my_aggregator.execute(&op_data);
         }
 
-        size_t successor_count() {
+        size_t successor_count() __TBB_override {
             indexer_node_base_operation op_data(blt_succ_cnt);
             my_aggregator.execute(&op_data);
             return op_data.cnt_val;
         }
 
-        void copy_successors( successor_list_type &v) {
+        void copy_successors( successor_list_type &v) __TBB_override {
             indexer_node_base_operation op_data(blt_succ_cpy);
             op_data.succv = &v;
             my_aggregator.execute(&op_data);
-        } 
-        void extract() {
+        }
+        void extract() __TBB_override {
             my_successors.built_successors().sender_extract(*this);
             indexer_helper<StructTypes,N>::extract(this->my_inputs);
         }
 #endif /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */
     protected:
-        /*override*/void reset_node(__TBB_PFG_RESET_ARG(reset_flags f)) {
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
+        void reset_node(reset_flags f) __TBB_override {
             if(f & rf_clear_edges) {
                 my_successors.clear();
                 indexer_helper<StructTypes,N>::reset_inputs(this->my_inputs,f);
             }
-#endif
         }
 
     private:
@@ -354,7 +351,7 @@ namespace internal {
         typedef typename tuple_element<2, InputTuple>::type third_type;
         typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type> type;
     };
-    
+
     template<typename InputTuple>
     struct input_types<4, InputTuple> {
         typedef typename tuple_element<0, InputTuple>::type first_type;
@@ -364,7 +361,7 @@ namespace internal {
         typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,
                                                       fourth_type> type;
     };
-    
+
     template<typename InputTuple>
     struct input_types<5, InputTuple> {
         typedef typename tuple_element<0, InputTuple>::type first_type;
@@ -375,7 +372,7 @@ namespace internal {
         typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,
                                                       fourth_type, fifth_type> type;
     };
-    
+
     template<typename InputTuple>
     struct input_types<6, InputTuple> {
         typedef typename tuple_element<0, InputTuple>::type first_type;
@@ -387,7 +384,7 @@ namespace internal {
         typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,
                                                       fourth_type, fifth_type, sixth_type> type;
     };
-    
+
     template<typename InputTuple>
     struct input_types<7, InputTuple> {
         typedef typename tuple_element<0, InputTuple>::type first_type;
@@ -418,7 +415,7 @@ namespace internal {
                                                       seventh_type, eighth_type> type;
     };
 
- 
+
     template<typename InputTuple>
     struct input_types<9, InputTuple> {
         typedef typename tuple_element<0, InputTuple>::type first_type;
diff --git a/include/tbb/internal/_flow_graph_item_buffer_impl.h b/include/tbb/internal/_flow_graph_item_buffer_impl.h
index e6bada0..85d2686 100644
--- a/include/tbb/internal/_flow_graph_item_buffer_impl.h
+++ b/include/tbb/internal/_flow_graph_item_buffer_impl.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB__flow_graph_item_buffer_impl_H
@@ -27,7 +27,7 @@
 
 #include "tbb/internal/_flow_graph_types_impl.h"  // for aligned_pair
 
-// in namespace tbb::flow::interface7 (included in _flow_graph_node_impl.h)
+// in namespace tbb::flow::interfaceX (included in _flow_graph_node_impl.h)
 
     //! Expandable buffer of items.  The possible operations are push, pop,
     //* tests for empty and so forth.  No mutual exclusion is built in.
@@ -56,7 +56,7 @@ namespace internal {
         size_type my_head;
         size_type my_tail;
 
-        bool buffer_empty() { return my_head == my_tail; }
+        bool buffer_empty() const { return my_head == my_tail; }
 
         buffer_item_type &item(size_type i) {
             __TBB_ASSERT(!(size_type(&(my_array[i&(my_array_size-1)].second))%alignment_of<buffer_item_state>::value),NULL);
@@ -64,18 +64,24 @@ namespace internal {
             return my_array[i & (my_array_size - 1) ];
         }
 
-        bool my_item_valid(size_type i) { return (i < my_tail) && (i >= my_head) && (item(i).second != no_item); }
-        bool my_item_reserved(size_type i) { return item(i).second == reserved_item; }
+        const buffer_item_type &item(size_type i) const {
+            __TBB_ASSERT(!(size_type(&(my_array[i&(my_array_size-1)].second))%alignment_of<buffer_item_state>::value), NULL);
+            __TBB_ASSERT(!(size_type(&(my_array[i&(my_array_size-1)].first))%alignment_of<item_type>::value), NULL);
+            return my_array[i & (my_array_size-1)];
+        }
+
+        bool my_item_valid(size_type i) const { return (i < my_tail) && (i >= my_head) && (item(i).second != no_item); }
+        bool my_item_reserved(size_type i) const { return item(i).second == reserved_item; }
 
         // object management in buffer
-        const item_type &get_my_item(size_t i) {
+        const item_type &get_my_item(size_t i) const {
             __TBB_ASSERT(my_item_valid(i),"attempt to get invalid item");
             item_type *itm = (tbb::internal::punned_cast<item_type *>(&(item(i).first)));
             return *(const item_type *)itm;
         }
 
         // may be called with an empty slot or a slot that has already been constructed into.
-        void set_my_item(size_t i, const item_type &o) { 
+        void set_my_item(size_t i, const item_type &o) {
             if(item(i).second != no_item) {
                 destroy_item(i);
             }
@@ -124,18 +130,21 @@ namespace internal {
             item(i).second = no_item;
         }
 
-        // returns a copy of the front
-        void copy_front(item_type &v) {
+        // returns the front element
+        const item_type& front() const
+        {
             __TBB_ASSERT(my_item_valid(my_head), "attempt to fetch head non-item");
-            v = get_my_item(my_head);
+            return get_my_item(my_head);
         }
-        // returns a copy of the back
-        void copy_back(item_type &v) {
-            __TBB_ASSERT(my_item_valid(my_tail-1), "attempt to fetch head non-item");
-            v = get_my_item(my_tail-1);
+
+        // returns  the back element
+        const item_type& back() const
+        {
+            __TBB_ASSERT(my_item_valid(my_tail - 1), "attempt to fetch head non-item");
+            return get_my_item(my_tail - 1);
         }
 
-        // following methods are for reservation of the front of a bufffer. 
+        // following methods are for reservation of the front of a bufffer.
         void reserve_item(size_type i) { __TBB_ASSERT(my_item_valid(i) && !my_item_reserved(i), "item cannot be reserved"); item(i).second = reserved_item; }
         void release_item(size_type i) { __TBB_ASSERT(my_item_reserved(i), "item is not reserved"); item(i).second = has_item; }
 
@@ -146,7 +155,7 @@ namespace internal {
         // grow_array doesn't work if we change my_tail when the old array is too small
         size_type size(size_t new_tail = 0) { return (new_tail ? new_tail : my_tail) - my_head; }
         size_type capacity() { return my_array_size; }
-        // sequencer_node does not use this method, so we don't 
+        // sequencer_node does not use this method, so we don't
         // need a version that passes in the new_tail value.
         bool buffer_full() { return size() >= capacity(); }
 
@@ -191,7 +200,7 @@ namespace internal {
             if (!my_item_valid(my_tail-1)) {
                 return false;
             }
-            copy_back(v);
+            v = this->back();
             destroy_back();
             return true;
         }
@@ -200,7 +209,7 @@ namespace internal {
             if(!my_item_valid(my_head)) {
                 return false;
             }
-            copy_front(v);
+            v = this->front();
             destroy_front();
             return true;
         }
@@ -213,7 +222,7 @@ namespace internal {
                     if(my_item_valid(i))
                         destroy_item(i);
                 }
-                allocator_type().deallocate(my_array,my_array_size); 
+                allocator_type().deallocate(my_array,my_array_size);
             }
             my_array = NULL;
             if(reset_pointers) {
@@ -237,7 +246,7 @@ namespace internal {
     };
 
     //! item_buffer with reservable front-end.  NOTE: if reserving, do not
-    //* complete operation with pop_front(); use consume_front().  
+    //* complete operation with pop_front(); use consume_front().
     //* No synchronization built-in.
     template<typename T, typename A=cache_aligned_allocator<T> >
     class reservable_item_buffer : public item_buffer<T, A> {
@@ -251,10 +260,10 @@ namespace internal {
     protected:
 
         bool reserve_front(T &v) {
-            if(my_reserved || !my_item_valid(my_head)) return false;
+            if(my_reserved || !my_item_valid(this->my_head)) return false;
             my_reserved = true;
             // reserving the head
-            this->copy_front(v);
+            v = this->front();
             this->reserve_item(this->my_head);
             return true;
         }
diff --git a/include/tbb/internal/_flow_graph_join_impl.h b/include/tbb/internal/_flow_graph_join_impl.h
index 75f8c43..4999bef 100644
--- a/include/tbb/internal/_flow_graph_join_impl.h
+++ b/include/tbb/internal/_flow_graph_join_impl.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB__flow_graph_join_impl_H
@@ -25,24 +25,27 @@
 #error Do not #include this internal file directly; use public TBB headers instead.
 #endif
 
-#include "_flow_graph_types_impl.h"
-
 namespace internal {
 
-    typedef size_t tag_value;
-    static const tag_value NO_TAG = tag_value(-1);
-
     struct forwarding_base {
-        forwarding_base(graph &g) : my_graph_ptr(&g), current_tag(NO_TAG) {}
+        forwarding_base(graph &g) : graph_pointer(&g) {}
         virtual ~forwarding_base() {}
         // decrement_port_count may create a forwarding task.  If we cannot handle the task
         // ourselves, ask decrement_port_count to deal with it.
         virtual task * decrement_port_count(bool handle_task) = 0;
         virtual void increment_port_count() = 0;
-        virtual task * increment_tag_count(tag_value /*t*/, bool /*handle_task*/) {return NULL;}
         // moved here so input ports can queue tasks
-        graph* my_graph_ptr;
-        tag_value current_tag; // so ports can refer to FE's desired items
+        graph* graph_pointer;
+    };
+
+    // specialization that lets us keep a copy of the current_key for building results.
+    // KeyType can be a reference type.
+    template<typename KeyType>
+    struct matching_forwarding_base :public forwarding_base {
+        typedef typename tbb::internal::strip<KeyType>::type current_key_type;
+        matching_forwarding_base(graph &g) : forwarding_base(g) { }
+        virtual task * increment_key_count(current_key_type const & /*t*/, bool /*handle_task*/) = 0; // {return NULL;}
+        current_key_type current_key; // so ports can refer to FE's desired items
     };
 
     template< int N >
@@ -102,27 +105,25 @@ namespace internal {
             reset_my_port(my_input);
         }
 
-        template<typename InputTuple, typename TagFuncTuple>
-        static inline void set_tag_func(InputTuple &my_input, TagFuncTuple &my_tag_funcs) {
-            tbb::flow::get<N-1>(my_input).set_my_original_tag_func(tbb::flow::get<N-1>(my_tag_funcs));
-            tbb::flow::get<N-1>(my_input).set_my_tag_func(tbb::flow::get<N-1>(my_input).my_original_func()->clone());
-            tbb::flow::get<N-1>(my_tag_funcs) = NULL;
-            join_helper<N-1>::set_tag_func(my_input, my_tag_funcs);
+        template<typename InputTuple, typename KeyFuncTuple>
+        static inline void set_key_functors(InputTuple &my_input, KeyFuncTuple &my_key_funcs) {
+            tbb::flow::get<N-1>(my_input).set_my_key_func(tbb::flow::get<N-1>(my_key_funcs));
+            tbb::flow::get<N-1>(my_key_funcs) = NULL;
+            join_helper<N-1>::set_key_functors(my_input, my_key_funcs);
         }
 
-        template< typename TagFuncTuple1, typename TagFuncTuple2>
-        static inline void copy_tag_functors(TagFuncTuple1 &my_inputs, TagFuncTuple2 &other_inputs) {
-            if(tbb::flow::get<N-1>(other_inputs).my_original_func()) {
-                tbb::flow::get<N-1>(my_inputs).set_my_tag_func(tbb::flow::get<N-1>(other_inputs).my_original_func()->clone());
-                tbb::flow::get<N-1>(my_inputs).set_my_original_tag_func(tbb::flow::get<N-1>(other_inputs).my_original_func()->clone());
+        template< typename KeyFuncTuple>
+        static inline void copy_key_functors(KeyFuncTuple &my_inputs, KeyFuncTuple &other_inputs) {
+            if(tbb::flow::get<N-1>(other_inputs).get_my_key_func()) {
+                tbb::flow::get<N-1>(my_inputs).set_my_key_func(tbb::flow::get<N-1>(other_inputs).get_my_key_func()->clone());
             }
-            join_helper<N-1>::copy_tag_functors(my_inputs, other_inputs);
+            join_helper<N-1>::copy_key_functors(my_inputs, other_inputs);
         }
 
         template<typename InputTuple>
-        static inline void reset_inputs(InputTuple &my_input __TBB_PFG_RESET_ARG(__TBB_COMMA reset_flags f)) {
-            join_helper<N-1>::reset_inputs(my_input __TBB_PFG_RESET_ARG(__TBB_COMMA f));
-            tbb::flow::get<N-1>(my_input).reset_receiver(__TBB_PFG_RESET_ARG(f));
+        static inline void reset_inputs(InputTuple &my_input, reset_flags f) {
+            join_helper<N-1>::reset_inputs(my_input, f);
+            tbb::flow::get<N-1>(my_input).reset_receiver(f);
         }
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
@@ -182,23 +183,21 @@ namespace internal {
             reset_my_port(my_input);
         }
 
-        template<typename InputTuple, typename TagFuncTuple>
-        static inline void set_tag_func(InputTuple &my_input, TagFuncTuple &my_tag_funcs) {
-            tbb::flow::get<0>(my_input).set_my_original_tag_func(tbb::flow::get<0>(my_tag_funcs));
-            tbb::flow::get<0>(my_input).set_my_tag_func(tbb::flow::get<0>(my_input).my_original_func()->clone());
-            tbb::flow::get<0>(my_tag_funcs) = NULL;
+        template<typename InputTuple, typename KeyFuncTuple>
+        static inline void set_key_functors(InputTuple &my_input, KeyFuncTuple &my_key_funcs) {
+            tbb::flow::get<0>(my_input).set_my_key_func(tbb::flow::get<0>(my_key_funcs));
+            tbb::flow::get<0>(my_key_funcs) = NULL;
         }
 
-        template< typename TagFuncTuple1, typename TagFuncTuple2>
-        static inline void copy_tag_functors(TagFuncTuple1 &my_inputs, TagFuncTuple2 &other_inputs) {
-            if(tbb::flow::get<0>(other_inputs).my_original_func()) {
-                tbb::flow::get<0>(my_inputs).set_my_tag_func(tbb::flow::get<0>(other_inputs).my_original_func()->clone());
-                tbb::flow::get<0>(my_inputs).set_my_original_tag_func(tbb::flow::get<0>(other_inputs).my_original_func()->clone());
+        template< typename KeyFuncTuple>
+        static inline void copy_key_functors(KeyFuncTuple &my_inputs, KeyFuncTuple &other_inputs) {
+            if(tbb::flow::get<0>(other_inputs).get_my_key_func()) {
+                tbb::flow::get<0>(my_inputs).set_my_key_func(tbb::flow::get<0>(other_inputs).get_my_key_func()->clone());
             }
         }
         template<typename InputTuple>
-        static inline void reset_inputs(InputTuple &my_input __TBB_PFG_RESET_ARG(__TBB_COMMA reset_flags f)) {
-            tbb::flow::get<0>(my_input).reset_receiver(__TBB_PFG_RESET_ARG(f));
+        static inline void reset_inputs(InputTuple &my_input, reset_flags f) {
+            tbb::flow::get<0>(my_input).reset_receiver(f);
         }
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
@@ -214,7 +213,7 @@ namespace internal {
     class reserving_port : public receiver<T> {
     public:
         typedef T input_type;
-        typedef sender<T> predecessor_type;
+        typedef typename receiver<input_type>::predecessor_type predecessor_type;
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;
         typedef typename receiver<input_type>::built_predecessors_type built_predecessors_type;
@@ -227,7 +226,7 @@ namespace internal {
 #endif
         };
         enum op_stat {WAIT=0, SUCCEEDED, FAILED};
-        typedef reserving_port<T> my_class;
+        typedef reserving_port<T> class_type;
 
         class reserving_port_operation : public aggregated_operation<reserving_port_operation> {
         public:
@@ -247,9 +246,9 @@ namespace internal {
             reserving_port_operation(op_type t) : type(char(t)) {}
         };
 
-        typedef internal::aggregating_functor<my_class, reserving_port_operation> my_handler;
-        friend class internal::aggregating_functor<my_class, reserving_port_operation>;
-        aggregator<my_handler, reserving_port_operation> my_aggregator;
+        typedef internal::aggregating_functor<class_type, reserving_port_operation> handler_type;
+        friend class internal::aggregating_functor<class_type, reserving_port_operation>;
+        aggregator<handler_type, reserving_port_operation> my_aggregator;
 
         void handle_operations(reserving_port_operation* op_list) {
             reserving_port_operation *current;
@@ -321,7 +320,7 @@ namespace internal {
         template< typename R, typename B > friend class run_and_put_task;
         template<typename X, typename Y> friend class internal::broadcast_cache;
         template<typename X, typename Y> friend class internal::round_robin_cache;
-        task *try_put_task( const T & ) {
+        task *try_put_task( const T & ) __TBB_override {
             return NULL;
         }
 
@@ -331,7 +330,7 @@ namespace internal {
         reserving_port() : reserved(false) {
             my_join = NULL;
             my_predecessors.set_owner( this );
-            my_aggregator.initialize_handler(my_handler(this));
+            my_aggregator.initialize_handler(handler_type(this));
         }
 
         // copy constructor
@@ -339,7 +338,7 @@ namespace internal {
             reserved = false;
             my_join = NULL;
             my_predecessors.set_owner( this );
-            my_aggregator.initialize_handler(my_handler(this));
+            my_aggregator.initialize_handler(handler_type(this));
         }
 
         void set_join_node_pointer(forwarding_base *join) {
@@ -347,14 +346,14 @@ namespace internal {
         }
 
         //! Add a predecessor
-        bool register_predecessor( sender<T> &src ) {
+        bool register_predecessor( predecessor_type &src ) __TBB_override {
             reserving_port_operation op_data(src, reg_pred);
             my_aggregator.execute(&op_data);
             return op_data.status == SUCCEEDED;
         }
 
         //! Remove a predecessor
-        bool remove_predecessor( sender<T> &src ) {
+        bool remove_predecessor( predecessor_type &src ) __TBB_override {
             reserving_port_operation op_data(src, rem_pred);
             my_aggregator.execute(&op_data);
             return op_data.status == SUCCEEDED;
@@ -380,24 +379,24 @@ namespace internal {
         }
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-        /*override*/ built_predecessors_type &built_predecessors() { return my_predecessors.built_predecessors(); }
-        /*override*/void internal_add_built_predecessor(predecessor_type &src) {
+        built_predecessors_type &built_predecessors() __TBB_override { return my_predecessors.built_predecessors(); }
+        void internal_add_built_predecessor(predecessor_type &src) __TBB_override {
             reserving_port_operation op_data(src, add_blt_pred);
             my_aggregator.execute(&op_data);
         }
 
-        /*override*/void internal_delete_built_predecessor(predecessor_type &src) {
+        void internal_delete_built_predecessor(predecessor_type &src) __TBB_override {
             reserving_port_operation op_data(src, del_blt_pred);
             my_aggregator.execute(&op_data);
         }
 
-        /*override*/size_t predecessor_count() {
+        size_t predecessor_count() __TBB_override {
             reserving_port_operation op_data(blt_pred_cnt);
             my_aggregator.execute(&op_data);
             return op_data.cnt_val;
         }
 
-        /*override*/void copy_predecessors(predecessor_list_type &l) {
+        void copy_predecessors(predecessor_list_type &l) __TBB_override {
             reserving_port_operation op_data(blt_pred_cpy);
             op_data.plist = &l;
             my_aggregator.execute(&op_data);
@@ -409,16 +408,12 @@ namespace internal {
 
 #endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */
 
-        /*override*/void reset_receiver( __TBB_PFG_RESET_ARG(reset_flags f)) {
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
+        void reset_receiver( reset_flags f) __TBB_override {
             if(f & rf_clear_edges) my_predecessors.clear();
             else
-#endif
             my_predecessors.reset();
             reserved = false;
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
             __TBB_ASSERT(!(f&rf_clear_edges) || my_predecessors.empty(), "port edges not removed");
-#endif
         }
 
     private:
@@ -432,8 +427,8 @@ namespace internal {
     class queueing_port : public receiver<T>, public item_buffer<T> {
     public:
         typedef T input_type;
-        typedef sender<T> predecessor_type;
-        typedef queueing_port<T> my_node_type;
+        typedef typename receiver<input_type>::predecessor_type predecessor_type;
+        typedef queueing_port<T> class_type;
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         typedef typename receiver<input_type>::built_predecessors_type built_predecessors_type;
         typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;
@@ -443,11 +438,10 @@ namespace internal {
     private:
         enum op_type { get__item, res_port, try__put_task
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-            , add_blt_pred, del_blt_pred, blt_pred_cnt, blt_pred_cpy 
+            , add_blt_pred, del_blt_pred, blt_pred_cnt, blt_pred_cpy
 #endif
         };
         enum op_stat {WAIT=0, SUCCEEDED, FAILED};
-        typedef queueing_port<T> my_class;
 
         class queueing_port_operation : public aggregated_operation<queueing_port_operation> {
         public:
@@ -455,7 +449,7 @@ namespace internal {
             T my_val;
             T *my_arg;
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-            sender<T> *pred;
+            predecessor_type *pred;
             size_t cnt_val;
             predecessor_list_type *plist;
 #endif
@@ -476,9 +470,9 @@ namespace internal {
             {}
         };
 
-        typedef internal::aggregating_functor<my_class, queueing_port_operation> my_handler;
-        friend class internal::aggregating_functor<my_class, queueing_port_operation>;
-        aggregator<my_handler, queueing_port_operation> my_aggregator;
+        typedef internal::aggregating_functor<class_type, queueing_port_operation> handler_type;
+        friend class internal::aggregating_functor<class_type, queueing_port_operation>;
+        aggregator<handler_type, queueing_port_operation> my_aggregator;
 
         void handle_operations(queueing_port_operation* op_list) {
             queueing_port_operation *current;
@@ -500,7 +494,7 @@ namespace internal {
                     break;
                 case get__item:
                     if(!this->buffer_empty()) {
-                        this->copy_front(*(current->my_arg));
+                        *(current->my_arg) = this->front();
                         __TBB_store_with_release(current->status, SUCCEEDED);
                     }
                     else {
@@ -542,7 +536,7 @@ namespace internal {
         template< typename R, typename B > friend class run_and_put_task;
         template<typename X, typename Y> friend class internal::broadcast_cache;
         template<typename X, typename Y> friend class internal::round_robin_cache;
-        /*override*/task *try_put_task(const T &v) {
+        task *try_put_task(const T &v) __TBB_override {
             queueing_port_operation op_data(v, try__put_task);
             my_aggregator.execute(&op_data);
             __TBB_ASSERT(op_data.status == SUCCEEDED || !op_data.bypass_t, "inconsistent return from aggregator");
@@ -555,13 +549,13 @@ namespace internal {
         //! Constructor
         queueing_port() : item_buffer<T>() {
             my_join = NULL;
-            my_aggregator.initialize_handler(my_handler(this));
+            my_aggregator.initialize_handler(handler_type(this));
         }
 
         //! copy constructor
         queueing_port(const queueing_port& /* other */) : receiver<T>(), item_buffer<T>() {
             my_join = NULL;
-            my_aggregator.initialize_handler(my_handler(this));
+            my_aggregator.initialize_handler(handler_type(this));
         }
 
         //! record parent for tallying available items
@@ -584,63 +578,87 @@ namespace internal {
         }
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-        /*override*/ built_predecessors_type &built_predecessors() { return my_built_predecessors; }
+        built_predecessors_type &built_predecessors() __TBB_override { return my_built_predecessors; }
 
-        /*override*/void internal_add_built_predecessor(sender<T> &p) {
+        void internal_add_built_predecessor(predecessor_type &p) __TBB_override {
             queueing_port_operation op_data(add_blt_pred);
             op_data.pred = &p;
             my_aggregator.execute(&op_data);
         }
 
-        /*override*/void internal_delete_built_predecessor(sender<T> &p) {
+        void internal_delete_built_predecessor(predecessor_type &p) __TBB_override {
             queueing_port_operation op_data(del_blt_pred);
             op_data.pred = &p;
             my_aggregator.execute(&op_data);
         }
 
-        /*override*/size_t predecessor_count() {
+        size_t predecessor_count() __TBB_override {
             queueing_port_operation op_data(blt_pred_cnt);
             my_aggregator.execute(&op_data);
             return op_data.cnt_val;
         }
 
-        /*override*/void copy_predecessors(predecessor_list_type &l) {
+        void copy_predecessors(predecessor_list_type &l) __TBB_override {
             queueing_port_operation op_data(blt_pred_cpy);
             op_data.plist = &l;
             my_aggregator.execute(&op_data);
         }
 
         void extract_receiver() {
-            item_buffer<T>::reset(); 
+            item_buffer<T>::reset();
             my_built_predecessors.receiver_extract(*this);
         }
+#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */
 
-        /*override*/void reset_receiver(__TBB_PFG_RESET_ARG(reset_flags f)) { 
-            item_buffer<T>::reset(); 
+        void reset_receiver(reset_flags f) __TBB_override {
+            tbb::internal::suppress_unused_warning(f);
+            item_buffer<T>::reset();
+#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
             if (f & rf_clear_edges)
                 my_built_predecessors.clear();
+#endif
         }
-#else
-        /*override*/void reset_receiver(__TBB_PFG_RESET_ARG(reset_flags /*f*/)) { item_buffer<T>::reset(); }
-#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */
 
     private:
         forwarding_base *my_join;
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-        edge_container<sender<T> > my_built_predecessors;
+        edge_container<predecessor_type> my_built_predecessors;
 #endif
     };  // queueing_port
 
 #include "_flow_graph_tagged_buffer_impl.h"
 
-    template< typename T >
-    class tag_matching_port : public receiver<T>, public tagged_buffer< tag_value, T, NO_TAG > {
+    template<typename K>
+    struct count_element {
+        K my_key;
+        size_t my_value;
+    };
+
+    // method to access the key in the counting table
+    // the ref has already been removed from K
+    template< typename K >
+    struct key_to_count_functor {
+        typedef count_element<K> table_item_type;
+        const K& operator()(const table_item_type& v) { return v.my_key; }
+    };
+
+    // the ports can have only one template parameter.  We wrap the types needed in
+    // a traits type
+    template< class TraitsType >
+    class key_matching_port :
+        public receiver<typename TraitsType::T>,
+        public hash_buffer< typename TraitsType::K, typename TraitsType::T, typename TraitsType::TtoK,
+                typename TraitsType::KHash > {
     public:
-        typedef T input_type;
-        typedef sender<T> predecessor_type;
-        typedef tag_matching_port<T> my_node_type;  // for forwarding, if needed
-        typedef function_body<input_type, tag_value> my_tag_func_type;
-        typedef tagged_buffer<tag_value,T,NO_TAG> my_buffer_type;
+        typedef TraitsType traits;
+        typedef key_matching_port<traits> class_type;
+        typedef typename TraitsType::T input_type;
+        typedef typename TraitsType::K key_type;
+        typedef typename tbb::internal::strip<key_type>::type noref_key_type;
+        typedef typename receiver<input_type>::predecessor_type predecessor_type;
+        typedef typename TraitsType::TtoK type_to_key_func_type;
+        typedef typename TraitsType::KHash hash_compare_type;
+        typedef hash_buffer< key_type, input_type, type_to_key_func_type, hash_compare_type > buffer_type;
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         typedef typename receiver<input_type>::built_predecessors_type built_predecessors_type;
         typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;
@@ -648,59 +666,59 @@ namespace internal {
     private:
 // ----------- Aggregator ------------
     private:
-        enum op_type { try__put, get__item, res_port,
-            add_blt_pred, del_blt_pred, blt_pred_cnt, blt_pred_cpy
+        enum op_type { try__put, get__item, res_port
+#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
+           , add_blt_pred, del_blt_pred, blt_pred_cnt, blt_pred_cpy
+#endif
         };
         enum op_stat {WAIT=0, SUCCEEDED, FAILED};
-        typedef tag_matching_port<T> my_class;
 
-        class tag_matching_port_operation : public aggregated_operation<tag_matching_port_operation> {
+        class key_matching_port_operation : public aggregated_operation<key_matching_port_operation> {
         public:
             char type;
-            T my_val;
-            T *my_arg;
+            input_type my_val;
+            input_type *my_arg;
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
             predecessor_type *pred;
             size_t cnt_val;
             predecessor_list_type *plist;
 #endif
-            tag_value my_tag_value;
             // constructor for value parameter
-            tag_matching_port_operation(const T& e, op_type t) :
+            key_matching_port_operation(const input_type& e, op_type t) :
                 type(char(t)), my_val(e) {}
             // constructor for pointer parameter
-            tag_matching_port_operation(const T* p, op_type t) :
-                type(char(t)), my_arg(const_cast<T*>(p)) {}
+            key_matching_port_operation(const input_type* p, op_type t) :
+                type(char(t)), my_arg(const_cast<input_type*>(p)) {}
             // constructor with no parameter
-            tag_matching_port_operation(op_type t) : type(char(t)) {}
+            key_matching_port_operation(op_type t) : type(char(t)) {}
         };
 
-        typedef internal::aggregating_functor<my_class, tag_matching_port_operation> my_handler;
-        friend class internal::aggregating_functor<my_class, tag_matching_port_operation>;
-        aggregator<my_handler, tag_matching_port_operation> my_aggregator;
+        typedef internal::aggregating_functor<class_type, key_matching_port_operation> handler_type;
+        friend class internal::aggregating_functor<class_type, key_matching_port_operation>;
+        aggregator<handler_type, key_matching_port_operation> my_aggregator;
 
-        void handle_operations(tag_matching_port_operation* op_list) {
-            tag_matching_port_operation *current;
+        void handle_operations(key_matching_port_operation* op_list) {
+            key_matching_port_operation *current;
             while(op_list) {
                 current = op_list;
                 op_list = op_list->next;
                 switch(current->type) {
                 case try__put: {
-                        bool was_inserted = this->tagged_insert(current->my_tag_value, current->my_val);
+                        bool was_inserted = this->insert_with_key(current->my_val);
                         // return failure if a duplicate insertion occurs
                         __TBB_store_with_release(current->status, was_inserted ? SUCCEEDED : FAILED);
                     }
                     break;
                 case get__item:
-                    // use current_tag from FE for item
-                    if(!this->tagged_find(my_join->current_tag, *(current->my_arg))) {
-                        __TBB_ASSERT(false, "Failed to find item corresponding to current_tag.");
+                    // use current_key from FE for item
+                    if(!this->find_with_key(my_join->current_key, *(current->my_arg))) {
+                        __TBB_ASSERT(false, "Failed to find item corresponding to current_key.");
                     }
                     __TBB_store_with_release(current->status, SUCCEEDED);
                     break;
                 case res_port:
-                    // use current_tag from FE for item
-                    this->tagged_delete(my_join->current_tag);
+                    // use current_key from FE for item
+                    this->delete_with_key(my_join->current_key);
                     __TBB_store_with_release(current->status, SUCCEEDED);
                     break;
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
@@ -729,13 +747,12 @@ namespace internal {
         template< typename R, typename B > friend class run_and_put_task;
         template<typename X, typename Y> friend class internal::broadcast_cache;
         template<typename X, typename Y> friend class internal::round_robin_cache;
-        /*override*/task *try_put_task(const T& v) {
-            tag_matching_port_operation op_data(v, try__put);
-            op_data.my_tag_value = (*my_tag_func)(v);
+        task *try_put_task(const input_type& v) __TBB_override {
+            key_matching_port_operation op_data(v, try__put);
             task *rtask = NULL;
             my_aggregator.execute(&op_data);
             if(op_data.status == SUCCEEDED) {
-                rtask = my_join->increment_tag_count(op_data.my_tag_value, false);  // may spawn
+                rtask = my_join->increment_key_count((*(this->get_key_func()))(v), false);  // may spawn
                 // rtask has to reflect the return status of the try_put
                 if(!rtask) rtask = SUCCESSFULLY_ENQUEUED;
             }
@@ -744,68 +761,57 @@ namespace internal {
 
     public:
 
-        tag_matching_port() : receiver<T>(), tagged_buffer<tag_value, T, NO_TAG>() {
+        key_matching_port() : receiver<input_type>(), buffer_type() {
             my_join = NULL;
-            my_tag_func = NULL;
-            my_original_tag_func = NULL;
-            my_aggregator.initialize_handler(my_handler(this));
+            my_aggregator.initialize_handler(handler_type(this));
         }
 
         // copy constructor
-        tag_matching_port(const tag_matching_port& /*other*/) : receiver<T>(), tagged_buffer<tag_value,T, NO_TAG>() {
+        key_matching_port(const key_matching_port& /*other*/) : receiver<input_type>(), buffer_type() {
             my_join = NULL;
-            // setting the tag methods is done in the copy-constructor for the front-end.
-            my_tag_func = NULL;
-            my_original_tag_func = NULL;
-            my_aggregator.initialize_handler(my_handler(this));
+            my_aggregator.initialize_handler(handler_type(this));
         }
 
-        ~tag_matching_port() {
-            if (my_tag_func) delete my_tag_func;
-            if (my_original_tag_func) delete my_original_tag_func;
-        }
+        ~key_matching_port() { }
 
         void set_join_node_pointer(forwarding_base *join) {
-            my_join = join;
+            my_join = dynamic_cast<matching_forwarding_base<key_type>*>(join);
         }
 
-        void set_my_original_tag_func(my_tag_func_type *f) {
-            my_original_tag_func = f;
-        }
+        void set_my_key_func(type_to_key_func_type *f) { this->set_key_func(f); }
 
-        void set_my_tag_func(my_tag_func_type *f) {
-            my_tag_func = f;
-        }
+        type_to_key_func_type* get_my_key_func() { return this->get_key_func(); }
 
-        bool get_item( T &v ) {
-            tag_matching_port_operation op_data(&v, get__item);
+        bool get_item( input_type &v ) {
+            // aggregator uses current_key from FE for Key
+            key_matching_port_operation op_data(&v, get__item);
             my_aggregator.execute(&op_data);
             return op_data.status == SUCCEEDED;
         }
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-        /*override*/built_predecessors_type &built_predecessors() { return my_built_predecessors; }
-        
-        /*override*/void internal_add_built_predecessor(sender<T> &p) {
-            tag_matching_port_operation op_data(add_blt_pred);
+        built_predecessors_type &built_predecessors() __TBB_override { return my_built_predecessors; }
+
+        void internal_add_built_predecessor(predecessor_type &p) __TBB_override {
+            key_matching_port_operation op_data(add_blt_pred);
             op_data.pred = &p;
             my_aggregator.execute(&op_data);
         }
 
-        /*override*/void internal_delete_built_predecessor(sender<T> &p) {
-            tag_matching_port_operation op_data(del_blt_pred);
+        void internal_delete_built_predecessor(predecessor_type &p) __TBB_override {
+            key_matching_port_operation op_data(del_blt_pred);
             op_data.pred = &p;
             my_aggregator.execute(&op_data);
         }
 
-        /*override*/size_t predecessor_count() {
-            tag_matching_port_operation op_data(blt_pred_cnt);
+        size_t predecessor_count() __TBB_override {
+            key_matching_port_operation op_data(blt_pred_cnt);
             my_aggregator.execute(&op_data);
             return op_data.cnt_val;
         }
 
-        /*override*/void copy_predecessors(predecessor_list_type &l) {
-            tag_matching_port_operation op_data(blt_pred_cpy);
+        void copy_predecessors(predecessor_list_type &l) __TBB_override {
+            key_matching_port_operation op_data(blt_pred_cpy);
             op_data.plist = &l;
             my_aggregator.execute(&op_data);
         }
@@ -814,46 +820,42 @@ namespace internal {
         // reset_port is called when item is accepted by successor, but
         // is initiated by join_node.
         void reset_port() {
-            tag_matching_port_operation op_data(res_port);
+            key_matching_port_operation op_data(res_port);
             my_aggregator.execute(&op_data);
             return;
         }
 
-        my_tag_func_type *my_func() { return my_tag_func; }
-        my_tag_func_type *my_original_func() { return my_original_tag_func; }
-
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         void extract_receiver() {
-            my_buffer_type::reset();
+            buffer_type::reset();
             my_built_predecessors.receiver_extract(*this);
         }
-
-        /*override*/void reset_receiver(__TBB_PFG_RESET_ARG(reset_flags f)) { 
-            my_buffer_type::reset(); 
+#endif
+        void reset_receiver(reset_flags f ) __TBB_override {
+            tbb::internal::suppress_unused_warning(f);
+            buffer_type::reset();
+#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
            if (f & rf_clear_edges)
               my_built_predecessors.clear();
-        }
-#else
-        /*override*/void reset_receiver(__TBB_PFG_RESET_ARG(reset_flags /*f*/)) { my_buffer_type::reset(); }
 #endif
+        }
 
     private:
-        // need map of tags to values
-        forwarding_base *my_join;
+        // my_join forwarding base used to count number of inputs that
+        // received key.
+        matching_forwarding_base<key_type> *my_join;
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         edge_container<predecessor_type> my_built_predecessors;
 #endif
-        my_tag_func_type *my_tag_func;
-        my_tag_func_type *my_original_tag_func;
-    };  // tag_matching_port
+    };  // key_matching_port
 
     using namespace graph_policy_namespace;
 
-    template<graph_buffer_policy JP, typename InputTuple, typename OutputTuple>
+    template<typename JP, typename InputTuple, typename OutputTuple>
     class join_node_base;
 
     //! join_node_FE : implements input port policy
-    template<graph_buffer_policy JP, typename InputTuple, typename OutputTuple>
+    template<typename JP, typename InputTuple, typename OutputTuple>
     class join_node_FE;
 
     template<typename InputTuple, typename OutputTuple>
@@ -862,31 +864,30 @@ namespace internal {
         static const int N = tbb::flow::tuple_size<OutputTuple>::value;
         typedef OutputTuple output_type;
         typedef InputTuple input_type;
-        typedef join_node_base<reserving, InputTuple, OutputTuple> my_node_type; // for forwarding
+        typedef join_node_base<reserving, InputTuple, OutputTuple> base_node_type; // for forwarding
 
         join_node_FE(graph &g) : forwarding_base(g), my_node(NULL) {
             ports_with_no_inputs = N;
             join_helper<N>::set_join_node_pointer(my_inputs, this);
         }
 
-        join_node_FE(const join_node_FE& other) : forwarding_base(*(other.forwarding_base::my_graph_ptr)), my_node(NULL) {
+        join_node_FE(const join_node_FE& other) : forwarding_base(*(other.forwarding_base::graph_pointer)), my_node(NULL) {
             ports_with_no_inputs = N;
             join_helper<N>::set_join_node_pointer(my_inputs, this);
         }
 
-        void set_my_node(my_node_type *new_my_node) { my_node = new_my_node; }
+        void set_my_node(base_node_type *new_my_node) { my_node = new_my_node; }
 
-       void increment_port_count() {
+       void increment_port_count() __TBB_override {
             ++ports_with_no_inputs;
         }
 
         // if all input_ports have predecessors, spawn forward to try and consume tuples
-        task * decrement_port_count(bool handle_task) {
+        task * decrement_port_count(bool handle_task) __TBB_override {
             if(ports_with_no_inputs.fetch_and_decrement() == 1) {
-                task* tp = this->my_graph_ptr->root_task();
-                if(tp) {
-                    task *rtask = new ( task::allocate_additional_child_of( *tp ) )
-                        forward_task_bypass<my_node_type>(*my_node);
+                if(this->graph_pointer->is_active()) {
+                    task *rtask = new ( task::allocate_additional_child_of( *(this->graph_pointer->root_task()) ) )
+                        forward_task_bypass<base_node_type>(*my_node);
                     if(!handle_task) return rtask;
                     FLOW_SPAWN(*rtask);
                 }
@@ -898,10 +899,10 @@ namespace internal {
 
     protected:
 
-        void reset( __TBB_PFG_RESET_ARG( reset_flags f)) {
+        void reset(  reset_flags f) {
             // called outside of parallel contexts
             ports_with_no_inputs = N;
-            join_helper<N>::reset_inputs(my_inputs __TBB_PFG_RESET_ARG( __TBB_COMMA f));
+            join_helper<N>::reset_inputs(my_inputs, f);
         }
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
@@ -931,7 +932,7 @@ namespace internal {
         }
 
         input_type my_inputs;
-        my_node_type *my_node;
+        base_node_type *my_node;
         atomic<size_t> ports_with_no_inputs;
     };  // join_node_FE<reserving, ... >
 
@@ -941,33 +942,32 @@ namespace internal {
         static const int N = tbb::flow::tuple_size<OutputTuple>::value;
         typedef OutputTuple output_type;
         typedef InputTuple input_type;
-        typedef join_node_base<queueing, InputTuple, OutputTuple> my_node_type; // for forwarding
+        typedef join_node_base<queueing, InputTuple, OutputTuple> base_node_type; // for forwarding
 
         join_node_FE(graph &g) : forwarding_base(g), my_node(NULL) {
             ports_with_no_items = N;
             join_helper<N>::set_join_node_pointer(my_inputs, this);
         }
 
-        join_node_FE(const join_node_FE& other) : forwarding_base(*(other.forwarding_base::my_graph_ptr)), my_node(NULL) {
+        join_node_FE(const join_node_FE& other) : forwarding_base(*(other.forwarding_base::graph_pointer)), my_node(NULL) {
             ports_with_no_items = N;
             join_helper<N>::set_join_node_pointer(my_inputs, this);
         }
 
         // needed for forwarding
-        void set_my_node(my_node_type *new_my_node) { my_node = new_my_node; }
+        void set_my_node(base_node_type *new_my_node) { my_node = new_my_node; }
 
         void reset_port_count() {
             ports_with_no_items = N;
         }
 
         // if all input_ports have items, spawn forward to try and consume tuples
-        task * decrement_port_count(bool handle_task)
+        task * decrement_port_count(bool handle_task) __TBB_override
         {
             if(ports_with_no_items.fetch_and_decrement() == 1) {
-                task* tp = this->my_graph_ptr->root_task();
-                if(tp) {
-                    task *rtask = new ( task::allocate_additional_child_of( *tp ) )
-                        forward_task_bypass <my_node_type>(*my_node);
+                if(this->graph_pointer->is_active()) {
+                    task *rtask = new ( task::allocate_additional_child_of( *(this->graph_pointer->root_task()) ) )
+                        forward_task_bypass <base_node_type>(*my_node);
                     if(!handle_task) return rtask;
                     FLOW_SPAWN( *rtask);
                 }
@@ -975,15 +975,15 @@ namespace internal {
             return NULL;
         }
 
-        void increment_port_count() { __TBB_ASSERT(false, NULL); }  // should never be called
+        void increment_port_count() __TBB_override { __TBB_ASSERT(false, NULL); }  // should never be called
 
         input_type &input_ports() { return my_inputs; }
 
     protected:
 
-        void reset( __TBB_PFG_RESET_ARG( reset_flags f)) {
+        void reset(  reset_flags f) {
             reset_port_count();
-            join_helper<N>::reset_inputs(my_inputs __TBB_PFG_RESET_ARG( __TBB_COMMA f) );
+            join_helper<N>::reset_inputs(my_inputs, f );
         }
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
@@ -1012,22 +1012,43 @@ namespace internal {
         }
 
         input_type my_inputs;
-        my_node_type *my_node;
+        base_node_type *my_node;
         atomic<size_t> ports_with_no_items;
     };  // join_node_FE<queueing, ...>
 
-    // tag_matching join input port.
-    template<typename InputTuple, typename OutputTuple>
-    class join_node_FE<tag_matching, InputTuple, OutputTuple> : public forwarding_base,
-             //     buffer of tag value counts                       buffer of output items
-             public tagged_buffer<tag_value, size_t, NO_TAG>, public item_buffer<OutputTuple> {
+    // key_matching join front-end.
+    template<typename InputTuple, typename OutputTuple, typename K, typename KHash>
+    class join_node_FE<key_matching<K,KHash>, InputTuple, OutputTuple> : public matching_forwarding_base<K>,
+             // buffer of key value counts
+              public hash_buffer<   // typedefed below to key_to_count_buffer_type
+                  typename tbb::internal::strip<K>::type&,        // force ref type on K
+                  count_element<typename tbb::internal::strip<K>::type>,
+                  internal::type_to_key_function_body<
+                      count_element<typename tbb::internal::strip<K>::type>,
+                      typename tbb::internal::strip<K>::type& >,
+                  KHash >,
+             // buffer of output items
+             public item_buffer<OutputTuple> {
     public:
         static const int N = tbb::flow::tuple_size<OutputTuple>::value;
         typedef OutputTuple output_type;
         typedef InputTuple input_type;
-        typedef tagged_buffer<tag_value, size_t, NO_TAG> my_tag_buffer;
+        typedef K key_type;
+        typedef typename tbb::internal::strip<key_type>::type unref_key_type;
+        typedef KHash key_hash_compare;
+        // must use K without ref.
+        typedef count_element<unref_key_type> count_element_type;
+        // method that lets us refer to the key of this type.
+        typedef key_to_count_functor<unref_key_type> key_to_count_func;
+        typedef internal::type_to_key_function_body< count_element_type, unref_key_type&> TtoK_function_body_type;
+        typedef internal::type_to_key_function_body_leaf<count_element_type, unref_key_type&, key_to_count_func> TtoK_function_body_leaf_type;
+        // this is the type of the special table that keeps track of the number of discrete
+        // elements corresponding to each key that we've seen.
+        typedef hash_buffer< unref_key_type&, count_element_type, TtoK_function_body_type, key_hash_compare >
+                 key_to_count_buffer_type;
         typedef item_buffer<output_type> output_buffer_type;
-        typedef join_node_base<tag_matching, InputTuple, OutputTuple> my_node_type; // for forwarding
+        typedef join_node_base<key_matching<key_type,key_hash_compare>, InputTuple, OutputTuple> base_node_type; // for forwarding
+        typedef matching_forwarding_base<key_type> forwarding_base_type;
 
 // ----------- Aggregator ------------
         // the aggregator is only needed to serialize the access to the hash table.
@@ -1035,46 +1056,42 @@ namespace internal {
     private:
         enum op_type { res_count, inc_count, may_succeed, try_make };
         enum op_stat {WAIT=0, SUCCEEDED, FAILED};
-        typedef join_node_FE<tag_matching, InputTuple, OutputTuple> my_class;
+        typedef join_node_FE<key_matching<key_type,key_hash_compare>, InputTuple, OutputTuple> class_type;
 
-        class tag_matching_FE_operation : public aggregated_operation<tag_matching_FE_operation> {
+        class key_matching_FE_operation : public aggregated_operation<key_matching_FE_operation> {
         public:
             char type;
-            union {
-                tag_value my_val;
-                output_type* my_output;
-            };
+            unref_key_type my_val;
+            output_type* my_output;
             task *bypass_t;
             bool enqueue_task;
             // constructor for value parameter
-            tag_matching_FE_operation(const tag_value& e , bool q_task , op_type t) : type(char(t)), my_val(e),
-                 bypass_t(NULL), enqueue_task(q_task) {}
-            tag_matching_FE_operation(output_type *p, op_type t) : type(char(t)), my_output(p), bypass_t(NULL),
+            key_matching_FE_operation(const unref_key_type& e , bool q_task , op_type t) : type(char(t)), my_val(e),
+                 my_output(NULL), bypass_t(NULL), enqueue_task(q_task) {}
+            key_matching_FE_operation(output_type *p, op_type t) : type(char(t)), my_output(p), bypass_t(NULL),
                  enqueue_task(true) {}
             // constructor with no parameter
-            tag_matching_FE_operation(op_type t) : type(char(t)), bypass_t(NULL), enqueue_task(true) {}
+            key_matching_FE_operation(op_type t) : type(char(t)), my_output(NULL), bypass_t(NULL), enqueue_task(true) {}
         };
 
-        typedef internal::aggregating_functor<my_class, tag_matching_FE_operation> my_handler;
-        friend class internal::aggregating_functor<my_class, tag_matching_FE_operation>;
-        aggregator<my_handler, tag_matching_FE_operation> my_aggregator;
+        typedef internal::aggregating_functor<class_type, key_matching_FE_operation> handler_type;
+        friend class internal::aggregating_functor<class_type, key_matching_FE_operation>;
+        aggregator<handler_type, key_matching_FE_operation> my_aggregator;
 
         // called from aggregator, so serialized
-        // construct as many output objects as possible.
         // returns a task pointer if the a task would have been enqueued but we asked that
         // it be returned.  Otherwise returns NULL.
-        task * fill_output_buffer(tag_value t, bool should_enqueue, bool handle_task) {
+        task * fill_output_buffer(unref_key_type &t, bool should_enqueue, bool handle_task) {
             output_type l_out;
             task *rtask = NULL;
-            task* tp = this->my_graph_ptr->root_task();
-            bool do_fwd = should_enqueue && this->buffer_empty() && tp;
-            this->current_tag = t;
-            this->tagged_delete(this->current_tag);   // remove the tag
+            bool do_fwd = should_enqueue && this->buffer_empty() && this->graph_pointer->is_active();
+            this->current_key = t;
+            this->delete_with_key(this->current_key);   // remove the key
             if(join_helper<N>::get_items(my_inputs, l_out)) {  //  <== call back
                 this->push_back(l_out);
                 if(do_fwd) {  // we enqueue if receiving an item from predecessor, not if successor asks for item
-                    rtask = new ( task::allocate_additional_child_of( *tp ) )
-                        forward_task_bypass<my_node_type>(*my_node);
+                    rtask = new ( task::allocate_additional_child_of( *(this->graph_pointer->root_task()) ) )
+                        forward_task_bypass<base_node_type>(*my_node);
                     if(handle_task) {
                         FLOW_SPAWN(*rtask);
                         rtask = NULL;
@@ -1083,7 +1100,6 @@ namespace internal {
                 }
                 // retire the input values
                 join_helper<N>::reset_ports(my_inputs);  //  <== call back
-                this->current_tag = NO_TAG;
             }
             else {
                 __TBB_ASSERT(false, "should have had something to push");
@@ -1091,8 +1107,8 @@ namespace internal {
             return rtask;
         }
 
-        void handle_operations(tag_matching_FE_operation* op_list) {
-            tag_matching_FE_operation *current;
+        void handle_operations(key_matching_FE_operation* op_list) {
+            key_matching_FE_operation *current;
             while(op_list) {
                 current = op_list;
                 op_list = op_list->next;
@@ -1104,16 +1120,19 @@ namespace internal {
                     }
                     break;
                 case inc_count: {  // called from input ports
-                        size_t *p = 0;
-                        tag_value t = current->my_val;
+                        count_element_type *p = 0;
+                        unref_key_type &t = current->my_val;
                         bool do_enqueue = current->enqueue_task;
-                        if(!(this->tagged_find_ref(t,p))) {
-                            this->tagged_insert(t, 0);
-                            if(!(this->tagged_find_ref(t,p))) {
-                                __TBB_ASSERT(false, "should find tag after inserting it");
+                        if(!(this->find_ref_with_key(t,p))) {
+                            count_element_type ev;
+                            ev.my_key = t;
+                            ev.my_value = 0;
+                            this->insert_with_key(ev);
+                            if(!(this->find_ref_with_key(t,p))) {
+                                __TBB_ASSERT(false, "should find key after inserting it");
                             }
                         }
-                        if(++(*p) == size_t(N)) {
+                        if(++(p->my_value) == size_t(N)) {
                             task *rtask = fill_output_buffer(t, true, do_enqueue);
                             __TBB_ASSERT(!rtask || !do_enqueue, "task should not be returned");
                             current->bypass_t = rtask;
@@ -1129,7 +1148,7 @@ namespace internal {
                         __TBB_store_with_release(current->status, FAILED);
                     }
                     else {
-                        this->copy_front(*(current->my_output));
+                        *(current->my_output) = this->front();
                         __TBB_store_with_release(current->status, SUCCEEDED);
                     }
                     break;
@@ -1140,81 +1159,84 @@ namespace internal {
 
     public:
         template<typename FunctionTuple>
-        join_node_FE(graph &g, FunctionTuple tag_funcs) : forwarding_base(g), my_node(NULL) {
+        join_node_FE(graph &g, FunctionTuple &TtoK_funcs) : forwarding_base_type(g), my_node(NULL) {
             join_helper<N>::set_join_node_pointer(my_inputs, this);
-            join_helper<N>::set_tag_func(my_inputs, tag_funcs);
-            my_aggregator.initialize_handler(my_handler(this));
+            join_helper<N>::set_key_functors(my_inputs, TtoK_funcs);
+            my_aggregator.initialize_handler(handler_type(this));
+                    TtoK_function_body_type *cfb = new TtoK_function_body_leaf_type(key_to_count_func());
+            this->set_key_func(cfb);
         }
 
-        join_node_FE(const join_node_FE& other) : forwarding_base(*(other.forwarding_base::my_graph_ptr)), my_tag_buffer(),
+        join_node_FE(const join_node_FE& other) : forwarding_base_type(*(other.forwarding_base_type::graph_pointer)), key_to_count_buffer_type(),
         output_buffer_type() {
             my_node = NULL;
             join_helper<N>::set_join_node_pointer(my_inputs, this);
-            join_helper<N>::copy_tag_functors(my_inputs, const_cast<input_type &>(other.my_inputs));
-            my_aggregator.initialize_handler(my_handler(this));
+            join_helper<N>::copy_key_functors(my_inputs, const_cast<input_type &>(other.my_inputs));
+            my_aggregator.initialize_handler(handler_type(this));
+            TtoK_function_body_type *cfb = new TtoK_function_body_leaf_type(key_to_count_func());
+            this->set_key_func(cfb);
         }
 
         // needed for forwarding
-        void set_my_node(my_node_type *new_my_node) { my_node = new_my_node; }
+        void set_my_node(base_node_type *new_my_node) { my_node = new_my_node; }
 
         void reset_port_count() {  // called from BE
-            tag_matching_FE_operation op_data(res_count);
+            key_matching_FE_operation op_data(res_count);
             my_aggregator.execute(&op_data);
             return;
         }
 
         // if all input_ports have items, spawn forward to try and consume tuples
         // return a task if we are asked and did create one.
-        task *increment_tag_count(tag_value t, bool handle_task) {  // called from input_ports
-            tag_matching_FE_operation op_data(t, handle_task, inc_count);
+        task *increment_key_count(unref_key_type const & t, bool handle_task) __TBB_override {  // called from input_ports
+            key_matching_FE_operation op_data(t, handle_task, inc_count);
             my_aggregator.execute(&op_data);
             return op_data.bypass_t;
         }
 
-        /*override*/ task *decrement_port_count(bool /*handle_task*/) { __TBB_ASSERT(false, NULL); return NULL; }
+        task *decrement_port_count(bool /*handle_task*/) __TBB_override { __TBB_ASSERT(false, NULL); return NULL; }
 
-        void increment_port_count() { __TBB_ASSERT(false, NULL); }  // should never be called
+        void increment_port_count() __TBB_override { __TBB_ASSERT(false, NULL); }  // should never be called
 
         input_type &input_ports() { return my_inputs; }
 
     protected:
 
-        void reset( __TBB_PFG_RESET_ARG( reset_flags f )) {
+        void reset(  reset_flags f ) {
             // called outside of parallel contexts
-            join_helper<N>::reset_inputs(my_inputs __TBB_PFG_RESET_ARG( __TBB_COMMA f));
+            join_helper<N>::reset_inputs(my_inputs, f);
 
-            my_tag_buffer::reset();  // have to reset the tag counts
-            output_buffer_type::reset();  // also the queue of outputs
-            my_node->current_tag = NO_TAG;
+            key_to_count_buffer_type::reset();
+            output_buffer_type::reset();
         }
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         void extract() {
             // called outside of parallel contexts
             join_helper<N>::extract_inputs(my_inputs);
-            my_tag_buffer::reset();  // have to reset the tag counts
+            key_to_count_buffer_type::reset();  // have to reset the tag counts
             output_buffer_type::reset();  // also the queue of outputs
-            my_node->current_tag = NO_TAG;
+            // my_node->current_tag = NO_TAG;
         }
 #endif
         // all methods on input ports should be called under mutual exclusion from join_node_base.
 
         bool tuple_build_may_succeed() {  // called from back-end
-            tag_matching_FE_operation op_data(may_succeed);
+            key_matching_FE_operation op_data(may_succeed);
             my_aggregator.execute(&op_data);
             return op_data.status == SUCCEEDED;
         }
 
-        // cannot lock while calling back to input_ports.  current_tag will only be set
+        // cannot lock while calling back to input_ports.  current_key will only be set
         // and reset under the aggregator, so it will remain consistent.
         bool try_to_make_tuple(output_type &out) {
-            tag_matching_FE_operation op_data(&out,try_make);
+            key_matching_FE_operation op_data(&out,try_make);
             my_aggregator.execute(&op_data);
             return op_data.status == SUCCEEDED;
         }
 
         void tuple_accepted() {
-            reset_port_count();  // reset current_tag after ports reset.
+            reset_port_count();  // reset current_key after ports reset.
         }
 
         void tuple_rejected() {
@@ -1222,11 +1244,11 @@ namespace internal {
         }
 
         input_type my_inputs;  // input ports
-        my_node_type *my_node;
-    }; // join_node_FE<tag_matching, InputTuple, OutputTuple>
+        base_node_type *my_node;
+    }; // join_node_FE<key_matching<K,KHash>, InputTuple, OutputTuple>
 
     //! join_node_base
-    template<graph_buffer_policy JP, typename InputTuple, typename OutputTuple>
+    template<typename JP, typename InputTuple, typename OutputTuple>
     class join_node_base : public graph_node, public join_node_FE<JP, InputTuple, OutputTuple>,
                            public sender<OutputTuple> {
     protected:
@@ -1234,7 +1256,7 @@ namespace internal {
     public:
         typedef OutputTuple output_type;
 
-        typedef receiver<output_type> successor_type;
+        typedef typename sender<output_type>::successor_type successor_type;
         typedef join_node_FE<JP, InputTuple, OutputTuple> input_ports_type;
         using input_ports_type::tuple_build_may_succeed;
         using input_ports_type::try_to_make_tuple;
@@ -1253,7 +1275,7 @@ namespace internal {
 #endif
         };
         enum op_stat {WAIT=0, SUCCEEDED, FAILED};
-        typedef join_node_base<JP,InputTuple,OutputTuple> my_class;
+        typedef join_node_base<JP,InputTuple,OutputTuple> class_type;
 
         class join_node_base_operation : public aggregated_operation<join_node_base_operation> {
         public:
@@ -1274,10 +1296,10 @@ namespace internal {
             join_node_base_operation(op_type t) : type(char(t)), bypass_t(NULL) {}
         };
 
-        typedef internal::aggregating_functor<my_class, join_node_base_operation> my_handler;
-        friend class internal::aggregating_functor<my_class, join_node_base_operation>;
+        typedef internal::aggregating_functor<class_type, join_node_base_operation> handler_type;
+        friend class internal::aggregating_functor<class_type, join_node_base_operation>;
         bool forwarder_busy;
-        aggregator<my_handler, join_node_base_operation> my_aggregator;
+        aggregator<handler_type, join_node_base_operation> my_aggregator;
 
         void handle_operations(join_node_base_operation* op_list) {
             join_node_base_operation *current;
@@ -1287,9 +1309,8 @@ namespace internal {
                 switch(current->type) {
                 case reg_succ: {
                         my_successors.register_successor(*(current->my_succ));
-                        task* tp = this->graph_node::my_graph.root_task();
-                        if(tuple_build_may_succeed() && !forwarder_busy && tp) {
-                            task *rtask = new ( task::allocate_additional_child_of(*tp) )
+                        if(tuple_build_may_succeed() && !forwarder_busy && this->graph_node::my_graph.is_active()) {
+                            task *rtask = new ( task::allocate_additional_child_of(*(this->graph_node::my_graph.root_task())) )
                                     forward_task_bypass
                                     <join_node_base<JP,InputTuple,OutputTuple> >(*this);
                             FLOW_SPAWN(*rtask);
@@ -1316,9 +1337,9 @@ namespace internal {
                         bool build_succeeded;
                         task *last_task = NULL;
                         output_type out;
-                        if(tuple_build_may_succeed()) {
+                        if(tuple_build_may_succeed()) {  // checks output queue of FE
                             do {
-                                build_succeeded = try_to_make_tuple(out);
+                                build_succeeded = try_to_make_tuple(out);  // fetch front_end of queue
                                 if(build_succeeded) {
                                     task *new_task = my_successors.try_put_task(out);
                                     last_task = combine_tasks(last_task, new_task);
@@ -1363,7 +1384,7 @@ namespace internal {
         join_node_base(graph &g) : graph_node(g), input_ports_type(g), forwarder_busy(false) {
             my_successors.set_owner(this);
             input_ports_type::set_my_node(this);
-            my_aggregator.initialize_handler(my_handler(this));
+            my_aggregator.initialize_handler(handler_type(this));
         }
 
         join_node_base(const join_node_base& other) :
@@ -1371,54 +1392,54 @@ namespace internal {
             sender<OutputTuple>(), forwarder_busy(false), my_successors() {
             my_successors.set_owner(this);
             input_ports_type::set_my_node(this);
-            my_aggregator.initialize_handler(my_handler(this));
+            my_aggregator.initialize_handler(handler_type(this));
         }
 
         template<typename FunctionTuple>
         join_node_base(graph &g, FunctionTuple f) : graph_node(g), input_ports_type(g, f), forwarder_busy(false) {
             my_successors.set_owner(this);
             input_ports_type::set_my_node(this);
-            my_aggregator.initialize_handler(my_handler(this));
+            my_aggregator.initialize_handler(handler_type(this));
         }
 
-        bool register_successor(successor_type &r) {
+        bool register_successor(successor_type &r) __TBB_override {
             join_node_base_operation op_data(r, reg_succ);
             my_aggregator.execute(&op_data);
             return op_data.status == SUCCEEDED;
         }
 
-        bool remove_successor( successor_type &r) {
+        bool remove_successor( successor_type &r) __TBB_override {
             join_node_base_operation op_data(r, rem_succ);
             my_aggregator.execute(&op_data);
             return op_data.status == SUCCEEDED;
         }
 
-        bool try_get( output_type &v) {
+        bool try_get( output_type &v) __TBB_override {
             join_node_base_operation op_data(v, try__get);
             my_aggregator.execute(&op_data);
             return op_data.status == SUCCEEDED;
         }
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-        /*override*/built_successors_type &built_successors() { return my_successors.built_successors(); }
+        built_successors_type &built_successors() __TBB_override { return my_successors.built_successors(); }
 
-        /*override*/void internal_add_built_successor( successor_type &r) {
+        void internal_add_built_successor( successor_type &r) __TBB_override {
             join_node_base_operation op_data(r, add_blt_succ);
             my_aggregator.execute(&op_data);
         }
 
-        /*override*/void internal_delete_built_successor( successor_type &r) {
+        void internal_delete_built_successor( successor_type &r) __TBB_override {
             join_node_base_operation op_data(r, del_blt_succ);
             my_aggregator.execute(&op_data);
         }
 
-        /*override*/size_t successor_count() {
+        size_t successor_count() __TBB_override {
             join_node_base_operation op_data(blt_succ_cnt);
             my_aggregator.execute(&op_data);
             return op_data.cnt_val;
         }
 
-        /*override*/ void copy_successors(successor_list_type &l) {
+        void copy_successors(successor_list_type &l) __TBB_override {
             join_node_base_operation op_data(blt_succ_cpy);
             op_data.slist = &l;
             my_aggregator.execute(&op_data);
@@ -1426,7 +1447,7 @@ namespace internal {
 #endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-        /*override*/void extract() {
+        void extract() __TBB_override {
             input_ports_type::extract();
             my_successors.built_successors().sender_extract(*this);
         }
@@ -1434,11 +1455,9 @@ namespace internal {
 
     protected:
 
-        /*override*/void reset_node(__TBB_PFG_RESET_ARG(reset_flags f)) {
-            input_ports_type::reset(__TBB_PFG_RESET_ARG(f));
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
+        void reset_node(reset_flags f) __TBB_override {
+            input_ports_type::reset(f);
             if(f & rf_clear_edges) my_successors.clear();
-#endif
         }
 
     private:
@@ -1451,19 +1470,30 @@ namespace internal {
             return op_data.bypass_t;
         }
 
-    };
+    };  // join_node_base
 
     // join base class type generator
-    template<int N, template<class> class PT, typename OutputTuple, graph_buffer_policy JP>
+    template<int N, template<class> class PT, typename OutputTuple, typename JP>
     struct join_base {
         typedef typename internal::join_node_base<JP, typename wrap_tuple_elements<N,PT,OutputTuple>::type, OutputTuple> type;
     };
 
+    template<int N, typename OutputTuple, typename K, typename KHash>
+    struct join_base<N, key_matching_port, OutputTuple, key_matching<K,KHash> > {
+        typedef key_matching<K, KHash> key_traits_type;
+        typedef K key_type;
+        typedef KHash key_hash_compare;
+        typedef typename internal::join_node_base< key_traits_type,
+                // ports type
+                typename wrap_key_tuple_elements<N,key_matching_port,key_traits_type,OutputTuple>::type,
+                OutputTuple > type;
+    };
+
     //! unfolded_join_node : passes input_ports_type to join_node_base.  We build the input port type
-    //  using tuple_element.  The class PT is the port type (reserving_port, queueing_port, tag_matching_port)
-    //  and should match the graph_buffer_policy.
+    //  using tuple_element.  The class PT is the port type (reserving_port, queueing_port, key_matching_port)
+    //  and should match the typename.
 
-    template<int N, template<class> class PT, typename OutputTuple, graph_buffer_policy JP>
+    template<int N, template<class> class PT, typename OutputTuple, typename JP>
     class unfolded_join_node : public join_base<N,PT,OutputTuple,JP>::type {
     public:
         typedef typename wrap_tuple_elements<N, PT, OutputTuple>::type input_ports_type;
@@ -1475,123 +1505,186 @@ namespace internal {
         unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}
     };
 
-    // tag_matching unfolded_join_node.  This must be a separate specialization because the constructors
+#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING
+    template <typename K, typename T>
+    struct key_from_message_body {
+        K operator()(const T& t) const {
+            using tbb::flow::key_from_message;
+            return key_from_message<K>(t);
+        }
+    };
+    // Adds const to reference type
+    template <typename K, typename T>
+    struct key_from_message_body<K&,T> {
+        const K& operator()(const T& t) const {
+            using tbb::flow::key_from_message;
+            return key_from_message<const K&>(t);
+        }
+    };
+#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */
+    // key_matching unfolded_join_node.  This must be a separate specialization because the constructors
     // differ.
 
-    template<typename OutputTuple>
-    class unfolded_join_node<2,tag_matching_port,OutputTuple,tag_matching> : public
-            join_base<2,tag_matching_port,OutputTuple,tag_matching>::type {
+    template<typename OutputTuple, typename K, typename KHash>
+    class unfolded_join_node<2,key_matching_port,OutputTuple,key_matching<K,KHash> > : public
+            join_base<2,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {
         typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;
         typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;
     public:
-        typedef typename wrap_tuple_elements<2,tag_matching_port,OutputTuple>::type input_ports_type;
+        typedef typename wrap_key_tuple_elements<2,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;
         typedef OutputTuple output_type;
     private:
-        typedef join_node_base<tag_matching, input_ports_type, output_type > base_type;
-        typedef typename internal::function_body<T0, tag_value> *f0_p;
-        typedef typename internal::function_body<T1, tag_value> *f1_p;
+        typedef join_node_base<key_matching<K,KHash>, input_ports_type, output_type > base_type;
+        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;
+        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;
         typedef typename tbb::flow::tuple< f0_p, f1_p > func_initializer_type;
     public:
+#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING
+        unfolded_join_node(graph &g) : base_type(g,
+                func_initializer_type(
+                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),
+                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>())
+                    ) ) {
+        }
+#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */
         template<typename Body0, typename Body1>
         unfolded_join_node(graph &g, Body0 body0, Body1 body1) : base_type(g,
                 func_initializer_type(
-                    new internal::function_body_leaf<T0, tag_value, Body0>(body0),
-                    new internal::function_body_leaf<T1, tag_value, Body1>(body1)
-                    ) ) {}
+                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),
+                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1)
+                    ) ) {
+            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 2, "wrong number of body initializers");
+        }
         unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}
     };
 
-    template<typename OutputTuple>
-    class unfolded_join_node<3,tag_matching_port,OutputTuple,tag_matching> : public
-            join_base<3,tag_matching_port,OutputTuple,tag_matching>::type {
+    template<typename OutputTuple, typename K, typename KHash>
+    class unfolded_join_node<3,key_matching_port,OutputTuple,key_matching<K,KHash> > : public
+            join_base<3,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {
         typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;
         typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;
         typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;
     public:
-        typedef typename wrap_tuple_elements<3, tag_matching_port, OutputTuple>::type input_ports_type;
+        typedef typename wrap_key_tuple_elements<3,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;
         typedef OutputTuple output_type;
     private:
-        typedef join_node_base<tag_matching, input_ports_type, output_type > base_type;
-        typedef typename internal::function_body<T0, tag_value> *f0_p;
-        typedef typename internal::function_body<T1, tag_value> *f1_p;
-        typedef typename internal::function_body<T2, tag_value> *f2_p;
+        typedef join_node_base<key_matching<K,KHash>, input_ports_type, output_type > base_type;
+        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;
+        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;
+        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;
         typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p > func_initializer_type;
     public:
+#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING
+        unfolded_join_node(graph &g) : base_type(g,
+                func_initializer_type(
+                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),
+                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),
+                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>())
+                    ) ) {
+        }
+#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */
         template<typename Body0, typename Body1, typename Body2>
         unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2) : base_type(g,
                 func_initializer_type(
-                    new internal::function_body_leaf<T0, tag_value, Body0>(body0),
-                    new internal::function_body_leaf<T1, tag_value, Body1>(body1),
-                    new internal::function_body_leaf<T2, tag_value, Body2>(body2)
-                    ) ) {}
+                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),
+                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),
+                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2)
+                    ) ) {
+            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 3, "wrong number of body initializers");
+        }
         unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}
     };
 
-    template<typename OutputTuple>
-    class unfolded_join_node<4,tag_matching_port,OutputTuple,tag_matching> : public
-            join_base<4,tag_matching_port,OutputTuple,tag_matching>::type {
+    template<typename OutputTuple, typename K, typename KHash>
+    class unfolded_join_node<4,key_matching_port,OutputTuple,key_matching<K,KHash> > : public
+            join_base<4,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {
         typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;
         typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;
         typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;
         typedef typename tbb::flow::tuple_element<3, OutputTuple>::type T3;
     public:
-        typedef typename wrap_tuple_elements<4, tag_matching_port, OutputTuple>::type input_ports_type;
+        typedef typename wrap_key_tuple_elements<4,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;
         typedef OutputTuple output_type;
     private:
-        typedef join_node_base<tag_matching, input_ports_type, output_type > base_type;
-        typedef typename internal::function_body<T0, tag_value> *f0_p;
-        typedef typename internal::function_body<T1, tag_value> *f1_p;
-        typedef typename internal::function_body<T2, tag_value> *f2_p;
-        typedef typename internal::function_body<T3, tag_value> *f3_p;
+        typedef join_node_base<key_matching<K,KHash>, input_ports_type, output_type > base_type;
+        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;
+        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;
+        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;
+        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;
         typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p > func_initializer_type;
     public:
+#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING
+        unfolded_join_node(graph &g) : base_type(g,
+                func_initializer_type(
+                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),
+                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),
+                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),
+                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>())
+                    ) ) {
+        }
+#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */
         template<typename Body0, typename Body1, typename Body2, typename Body3>
         unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3) : base_type(g,
                 func_initializer_type(
-                    new internal::function_body_leaf<T0, tag_value, Body0>(body0),
-                    new internal::function_body_leaf<T1, tag_value, Body1>(body1),
-                    new internal::function_body_leaf<T2, tag_value, Body2>(body2),
-                    new internal::function_body_leaf<T3, tag_value, Body3>(body3)
-                    ) ) {}
+                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),
+                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),
+                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),
+                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3)
+                    ) ) {
+            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 4, "wrong number of body initializers");
+        }
         unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}
     };
 
-    template<typename OutputTuple>
-    class unfolded_join_node<5,tag_matching_port,OutputTuple,tag_matching> : public
-            join_base<5,tag_matching_port,OutputTuple,tag_matching>::type {
+    template<typename OutputTuple, typename K, typename KHash>
+    class unfolded_join_node<5,key_matching_port,OutputTuple,key_matching<K,KHash> > : public
+            join_base<5,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {
         typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;
         typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;
         typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;
         typedef typename tbb::flow::tuple_element<3, OutputTuple>::type T3;
         typedef typename tbb::flow::tuple_element<4, OutputTuple>::type T4;
     public:
-        typedef typename wrap_tuple_elements<5, tag_matching_port, OutputTuple>::type input_ports_type;
+        typedef typename wrap_key_tuple_elements<5,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;
         typedef OutputTuple output_type;
     private:
-        typedef join_node_base<tag_matching, input_ports_type, output_type > base_type;
-        typedef typename internal::function_body<T0, tag_value> *f0_p;
-        typedef typename internal::function_body<T1, tag_value> *f1_p;
-        typedef typename internal::function_body<T2, tag_value> *f2_p;
-        typedef typename internal::function_body<T3, tag_value> *f3_p;
-        typedef typename internal::function_body<T4, tag_value> *f4_p;
+        typedef join_node_base<key_matching<K,KHash> , input_ports_type, output_type > base_type;
+        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;
+        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;
+        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;
+        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;
+        typedef typename internal::type_to_key_function_body<T4, K> *f4_p;
         typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p, f4_p > func_initializer_type;
     public:
+#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING
+        unfolded_join_node(graph &g) : base_type(g,
+                func_initializer_type(
+                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),
+                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),
+                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),
+                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>()),
+                    new internal::type_to_key_function_body_leaf<T4, K, key_from_message_body<K,T4> >(key_from_message_body<K,T4>())
+                    ) ) {
+        }
+#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */
         template<typename Body0, typename Body1, typename Body2, typename Body3, typename Body4>
         unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3, Body4 body4) : base_type(g,
                 func_initializer_type(
-                    new internal::function_body_leaf<T0, tag_value, Body0>(body0),
-                    new internal::function_body_leaf<T1, tag_value, Body1>(body1),
-                    new internal::function_body_leaf<T2, tag_value, Body2>(body2),
-                    new internal::function_body_leaf<T3, tag_value, Body3>(body3),
-                    new internal::function_body_leaf<T4, tag_value, Body4>(body4)
-                    ) ) {}
+                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),
+                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),
+                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),
+                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3),
+                    new internal::type_to_key_function_body_leaf<T4, K, Body4>(body4)
+                    ) ) {
+            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 5, "wrong number of body initializers");
+        }
         unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}
     };
 
 #if __TBB_VARIADIC_MAX >= 6
-    template<typename OutputTuple>
-    class unfolded_join_node<6,tag_matching_port,OutputTuple,tag_matching> : public
-            join_base<6,tag_matching_port,OutputTuple,tag_matching>::type {
+    template<typename OutputTuple, typename K, typename KHash>
+    class unfolded_join_node<6,key_matching_port,OutputTuple,key_matching<K,KHash> > : public
+            join_base<6,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {
         typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;
         typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;
         typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;
@@ -1599,36 +1692,50 @@ namespace internal {
         typedef typename tbb::flow::tuple_element<4, OutputTuple>::type T4;
         typedef typename tbb::flow::tuple_element<5, OutputTuple>::type T5;
     public:
-        typedef typename wrap_tuple_elements<6, tag_matching_port, OutputTuple>::type input_ports_type;
+        typedef typename wrap_key_tuple_elements<6,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;
         typedef OutputTuple output_type;
     private:
-        typedef join_node_base<tag_matching, input_ports_type, output_type > base_type;
-        typedef typename internal::function_body<T0, tag_value> *f0_p;
-        typedef typename internal::function_body<T1, tag_value> *f1_p;
-        typedef typename internal::function_body<T2, tag_value> *f2_p;
-        typedef typename internal::function_body<T3, tag_value> *f3_p;
-        typedef typename internal::function_body<T4, tag_value> *f4_p;
-        typedef typename internal::function_body<T5, tag_value> *f5_p;
+        typedef join_node_base<key_matching<K,KHash> , input_ports_type, output_type > base_type;
+        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;
+        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;
+        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;
+        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;
+        typedef typename internal::type_to_key_function_body<T4, K> *f4_p;
+        typedef typename internal::type_to_key_function_body<T5, K> *f5_p;
         typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p, f4_p, f5_p > func_initializer_type;
     public:
+#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING
+        unfolded_join_node(graph &g) : base_type(g,
+                func_initializer_type(
+                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),
+                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),
+                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),
+                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>()),
+                    new internal::type_to_key_function_body_leaf<T4, K, key_from_message_body<K,T4> >(key_from_message_body<K,T4>()),
+                    new internal::type_to_key_function_body_leaf<T5, K, key_from_message_body<K,T5> >(key_from_message_body<K,T5>())
+                    ) ) {
+        }
+#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */
         template<typename Body0, typename Body1, typename Body2, typename Body3, typename Body4, typename Body5>
         unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3, Body4 body4, Body5 body5)
                 : base_type(g, func_initializer_type(
-                    new internal::function_body_leaf<T0, tag_value, Body0>(body0),
-                    new internal::function_body_leaf<T1, tag_value, Body1>(body1),
-                    new internal::function_body_leaf<T2, tag_value, Body2>(body2),
-                    new internal::function_body_leaf<T3, tag_value, Body3>(body3),
-                    new internal::function_body_leaf<T4, tag_value, Body4>(body4),
-                    new internal::function_body_leaf<T5, tag_value, Body5>(body5)
-                    ) ) {}
+                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),
+                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),
+                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),
+                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3),
+                    new internal::type_to_key_function_body_leaf<T4, K, Body4>(body4),
+                    new internal::type_to_key_function_body_leaf<T5, K, Body5>(body5)
+                    ) ) {
+            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 6, "wrong number of body initializers");
+        }
         unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}
     };
 #endif
 
 #if __TBB_VARIADIC_MAX >= 7
-    template<typename OutputTuple>
-    class unfolded_join_node<7,tag_matching_port,OutputTuple,tag_matching> : public
-            join_base<7,tag_matching_port,OutputTuple,tag_matching>::type {
+    template<typename OutputTuple, typename K, typename KHash>
+    class unfolded_join_node<7,key_matching_port,OutputTuple,key_matching<K,KHash> > : public
+            join_base<7,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {
         typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;
         typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;
         typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;
@@ -1637,39 +1744,54 @@ namespace internal {
         typedef typename tbb::flow::tuple_element<5, OutputTuple>::type T5;
         typedef typename tbb::flow::tuple_element<6, OutputTuple>::type T6;
     public:
-        typedef typename wrap_tuple_elements<7, tag_matching_port, OutputTuple>::type input_ports_type;
+        typedef typename wrap_key_tuple_elements<7,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;
         typedef OutputTuple output_type;
     private:
-        typedef join_node_base<tag_matching, input_ports_type, output_type > base_type;
-        typedef typename internal::function_body<T0, tag_value> *f0_p;
-        typedef typename internal::function_body<T1, tag_value> *f1_p;
-        typedef typename internal::function_body<T2, tag_value> *f2_p;
-        typedef typename internal::function_body<T3, tag_value> *f3_p;
-        typedef typename internal::function_body<T4, tag_value> *f4_p;
-        typedef typename internal::function_body<T5, tag_value> *f5_p;
-        typedef typename internal::function_body<T6, tag_value> *f6_p;
+        typedef join_node_base<key_matching<K,KHash> , input_ports_type, output_type > base_type;
+        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;
+        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;
+        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;
+        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;
+        typedef typename internal::type_to_key_function_body<T4, K> *f4_p;
+        typedef typename internal::type_to_key_function_body<T5, K> *f5_p;
+        typedef typename internal::type_to_key_function_body<T6, K> *f6_p;
         typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p, f4_p, f5_p, f6_p > func_initializer_type;
     public:
+#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING
+        unfolded_join_node(graph &g) : base_type(g,
+                func_initializer_type(
+                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),
+                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),
+                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),
+                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>()),
+                    new internal::type_to_key_function_body_leaf<T4, K, key_from_message_body<K,T4> >(key_from_message_body<K,T4>()),
+                    new internal::type_to_key_function_body_leaf<T5, K, key_from_message_body<K,T5> >(key_from_message_body<K,T5>()),
+                    new internal::type_to_key_function_body_leaf<T6, K, key_from_message_body<K,T6> >(key_from_message_body<K,T6>())
+                    ) ) {
+        }
+#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */
         template<typename Body0, typename Body1, typename Body2, typename Body3, typename Body4,
                  typename Body5, typename Body6>
         unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3, Body4 body4,
                 Body5 body5, Body6 body6) : base_type(g, func_initializer_type(
-                    new internal::function_body_leaf<T0, tag_value, Body0>(body0),
-                    new internal::function_body_leaf<T1, tag_value, Body1>(body1),
-                    new internal::function_body_leaf<T2, tag_value, Body2>(body2),
-                    new internal::function_body_leaf<T3, tag_value, Body3>(body3),
-                    new internal::function_body_leaf<T4, tag_value, Body4>(body4),
-                    new internal::function_body_leaf<T5, tag_value, Body5>(body5),
-                    new internal::function_body_leaf<T6, tag_value, Body6>(body6)
-                    ) ) {}
+                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),
+                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),
+                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),
+                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3),
+                    new internal::type_to_key_function_body_leaf<T4, K, Body4>(body4),
+                    new internal::type_to_key_function_body_leaf<T5, K, Body5>(body5),
+                    new internal::type_to_key_function_body_leaf<T6, K, Body6>(body6)
+                    ) ) {
+            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 7, "wrong number of body initializers");
+        }
         unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}
     };
 #endif
 
 #if __TBB_VARIADIC_MAX >= 8
-    template<typename OutputTuple>
-    class unfolded_join_node<8,tag_matching_port,OutputTuple,tag_matching> : public
-            join_base<8,tag_matching_port,OutputTuple,tag_matching>::type {
+    template<typename OutputTuple, typename K, typename KHash>
+    class unfolded_join_node<8,key_matching_port,OutputTuple,key_matching<K,KHash> > : public
+            join_base<8,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {
         typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;
         typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;
         typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;
@@ -1679,41 +1801,57 @@ namespace internal {
         typedef typename tbb::flow::tuple_element<6, OutputTuple>::type T6;
         typedef typename tbb::flow::tuple_element<7, OutputTuple>::type T7;
     public:
-        typedef typename wrap_tuple_elements<8, tag_matching_port, OutputTuple>::type input_ports_type;
+        typedef typename wrap_key_tuple_elements<8,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;
         typedef OutputTuple output_type;
     private:
-        typedef join_node_base<tag_matching, input_ports_type, output_type > base_type;
-        typedef typename internal::function_body<T0, tag_value> *f0_p;
-        typedef typename internal::function_body<T1, tag_value> *f1_p;
-        typedef typename internal::function_body<T2, tag_value> *f2_p;
-        typedef typename internal::function_body<T3, tag_value> *f3_p;
-        typedef typename internal::function_body<T4, tag_value> *f4_p;
-        typedef typename internal::function_body<T5, tag_value> *f5_p;
-        typedef typename internal::function_body<T6, tag_value> *f6_p;
-        typedef typename internal::function_body<T7, tag_value> *f7_p;
+        typedef join_node_base<key_matching<K,KHash> , input_ports_type, output_type > base_type;
+        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;
+        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;
+        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;
+        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;
+        typedef typename internal::type_to_key_function_body<T4, K> *f4_p;
+        typedef typename internal::type_to_key_function_body<T5, K> *f5_p;
+        typedef typename internal::type_to_key_function_body<T6, K> *f6_p;
+        typedef typename internal::type_to_key_function_body<T7, K> *f7_p;
         typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p, f4_p, f5_p, f6_p, f7_p > func_initializer_type;
     public:
+#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING
+        unfolded_join_node(graph &g) : base_type(g,
+                func_initializer_type(
+                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),
+                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),
+                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),
+                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>()),
+                    new internal::type_to_key_function_body_leaf<T4, K, key_from_message_body<K,T4> >(key_from_message_body<K,T4>()),
+                    new internal::type_to_key_function_body_leaf<T5, K, key_from_message_body<K,T5> >(key_from_message_body<K,T5>()),
+                    new internal::type_to_key_function_body_leaf<T6, K, key_from_message_body<K,T6> >(key_from_message_body<K,T6>()),
+                    new internal::type_to_key_function_body_leaf<T7, K, key_from_message_body<K,T7> >(key_from_message_body<K,T7>())
+                    ) ) {
+        }
+#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */
         template<typename Body0, typename Body1, typename Body2, typename Body3, typename Body4,
                  typename Body5, typename Body6, typename Body7>
         unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3, Body4 body4,
                 Body5 body5, Body6 body6, Body7 body7) : base_type(g, func_initializer_type(
-                    new internal::function_body_leaf<T0, tag_value, Body0>(body0),
-                    new internal::function_body_leaf<T1, tag_value, Body1>(body1),
-                    new internal::function_body_leaf<T2, tag_value, Body2>(body2),
-                    new internal::function_body_leaf<T3, tag_value, Body3>(body3),
-                    new internal::function_body_leaf<T4, tag_value, Body4>(body4),
-                    new internal::function_body_leaf<T5, tag_value, Body5>(body5),
-                    new internal::function_body_leaf<T6, tag_value, Body6>(body6),
-                    new internal::function_body_leaf<T7, tag_value, Body7>(body7)
-                    ) ) {}
+                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),
+                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),
+                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),
+                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3),
+                    new internal::type_to_key_function_body_leaf<T4, K, Body4>(body4),
+                    new internal::type_to_key_function_body_leaf<T5, K, Body5>(body5),
+                    new internal::type_to_key_function_body_leaf<T6, K, Body6>(body6),
+                    new internal::type_to_key_function_body_leaf<T7, K, Body7>(body7)
+                    ) ) {
+            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 8, "wrong number of body initializers");
+        }
         unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}
     };
 #endif
 
 #if __TBB_VARIADIC_MAX >= 9
-    template<typename OutputTuple>
-    class unfolded_join_node<9,tag_matching_port,OutputTuple,tag_matching> : public
-            join_base<9,tag_matching_port,OutputTuple,tag_matching>::type {
+    template<typename OutputTuple, typename K, typename KHash>
+    class unfolded_join_node<9,key_matching_port,OutputTuple,key_matching<K,KHash> > : public
+            join_base<9,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {
         typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;
         typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;
         typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;
@@ -1724,43 +1862,60 @@ namespace internal {
         typedef typename tbb::flow::tuple_element<7, OutputTuple>::type T7;
         typedef typename tbb::flow::tuple_element<8, OutputTuple>::type T8;
     public:
-        typedef typename wrap_tuple_elements<9, tag_matching_port, OutputTuple>::type input_ports_type;
+        typedef typename wrap_key_tuple_elements<9,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;
         typedef OutputTuple output_type;
     private:
-        typedef join_node_base<tag_matching, input_ports_type, output_type > base_type;
-        typedef typename internal::function_body<T0, tag_value> *f0_p;
-        typedef typename internal::function_body<T1, tag_value> *f1_p;
-        typedef typename internal::function_body<T2, tag_value> *f2_p;
-        typedef typename internal::function_body<T3, tag_value> *f3_p;
-        typedef typename internal::function_body<T4, tag_value> *f4_p;
-        typedef typename internal::function_body<T5, tag_value> *f5_p;
-        typedef typename internal::function_body<T6, tag_value> *f6_p;
-        typedef typename internal::function_body<T7, tag_value> *f7_p;
-        typedef typename internal::function_body<T8, tag_value> *f8_p;
+        typedef join_node_base<key_matching<K,KHash> , input_ports_type, output_type > base_type;
+        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;
+        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;
+        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;
+        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;
+        typedef typename internal::type_to_key_function_body<T4, K> *f4_p;
+        typedef typename internal::type_to_key_function_body<T5, K> *f5_p;
+        typedef typename internal::type_to_key_function_body<T6, K> *f6_p;
+        typedef typename internal::type_to_key_function_body<T7, K> *f7_p;
+        typedef typename internal::type_to_key_function_body<T8, K> *f8_p;
         typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p, f4_p, f5_p, f6_p, f7_p, f8_p > func_initializer_type;
     public:
+#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING
+        unfolded_join_node(graph &g) : base_type(g,
+                func_initializer_type(
+                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),
+                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),
+                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),
+                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>()),
+                    new internal::type_to_key_function_body_leaf<T4, K, key_from_message_body<K,T4> >(key_from_message_body<K,T4>()),
+                    new internal::type_to_key_function_body_leaf<T5, K, key_from_message_body<K,T5> >(key_from_message_body<K,T5>()),
+                    new internal::type_to_key_function_body_leaf<T6, K, key_from_message_body<K,T6> >(key_from_message_body<K,T6>()),
+                    new internal::type_to_key_function_body_leaf<T7, K, key_from_message_body<K,T7> >(key_from_message_body<K,T7>()),
+                    new internal::type_to_key_function_body_leaf<T8, K, key_from_message_body<K,T8> >(key_from_message_body<K,T8>())
+                    ) ) {
+        }
+#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */
         template<typename Body0, typename Body1, typename Body2, typename Body3, typename Body4,
                  typename Body5, typename Body6, typename Body7, typename Body8>
         unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3, Body4 body4,
                 Body5 body5, Body6 body6, Body7 body7, Body8 body8) : base_type(g, func_initializer_type(
-                    new internal::function_body_leaf<T0, tag_value, Body0>(body0),
-                    new internal::function_body_leaf<T1, tag_value, Body1>(body1),
-                    new internal::function_body_leaf<T2, tag_value, Body2>(body2),
-                    new internal::function_body_leaf<T3, tag_value, Body3>(body3),
-                    new internal::function_body_leaf<T4, tag_value, Body4>(body4),
-                    new internal::function_body_leaf<T5, tag_value, Body5>(body5),
-                    new internal::function_body_leaf<T6, tag_value, Body6>(body6),
-                    new internal::function_body_leaf<T7, tag_value, Body7>(body7),
-                    new internal::function_body_leaf<T8, tag_value, Body8>(body8)
-                    ) ) {}
+                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),
+                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),
+                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),
+                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3),
+                    new internal::type_to_key_function_body_leaf<T4, K, Body4>(body4),
+                    new internal::type_to_key_function_body_leaf<T5, K, Body5>(body5),
+                    new internal::type_to_key_function_body_leaf<T6, K, Body6>(body6),
+                    new internal::type_to_key_function_body_leaf<T7, K, Body7>(body7),
+                    new internal::type_to_key_function_body_leaf<T8, K, Body8>(body8)
+                    ) ) {
+            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 9, "wrong number of body initializers");
+        }
         unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}
     };
 #endif
 
 #if __TBB_VARIADIC_MAX >= 10
-    template<typename OutputTuple>
-    class unfolded_join_node<10,tag_matching_port,OutputTuple,tag_matching> : public
-            join_base<10,tag_matching_port,OutputTuple,tag_matching>::type {
+    template<typename OutputTuple, typename K, typename KHash>
+    class unfolded_join_node<10,key_matching_port,OutputTuple,key_matching<K,KHash> > : public
+            join_base<10,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {
         typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;
         typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;
         typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;
@@ -1772,37 +1927,55 @@ namespace internal {
         typedef typename tbb::flow::tuple_element<8, OutputTuple>::type T8;
         typedef typename tbb::flow::tuple_element<9, OutputTuple>::type T9;
     public:
-        typedef typename wrap_tuple_elements<10, tag_matching_port, OutputTuple>::type input_ports_type;
+        typedef typename wrap_key_tuple_elements<10,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;
         typedef OutputTuple output_type;
     private:
-        typedef join_node_base<tag_matching, input_ports_type, output_type > base_type;
-        typedef typename internal::function_body<T0, tag_value> *f0_p;
-        typedef typename internal::function_body<T1, tag_value> *f1_p;
-        typedef typename internal::function_body<T2, tag_value> *f2_p;
-        typedef typename internal::function_body<T3, tag_value> *f3_p;
-        typedef typename internal::function_body<T4, tag_value> *f4_p;
-        typedef typename internal::function_body<T5, tag_value> *f5_p;
-        typedef typename internal::function_body<T6, tag_value> *f6_p;
-        typedef typename internal::function_body<T7, tag_value> *f7_p;
-        typedef typename internal::function_body<T8, tag_value> *f8_p;
-        typedef typename internal::function_body<T9, tag_value> *f9_p;
+        typedef join_node_base<key_matching<K,KHash> , input_ports_type, output_type > base_type;
+        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;
+        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;
+        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;
+        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;
+        typedef typename internal::type_to_key_function_body<T4, K> *f4_p;
+        typedef typename internal::type_to_key_function_body<T5, K> *f5_p;
+        typedef typename internal::type_to_key_function_body<T6, K> *f6_p;
+        typedef typename internal::type_to_key_function_body<T7, K> *f7_p;
+        typedef typename internal::type_to_key_function_body<T8, K> *f8_p;
+        typedef typename internal::type_to_key_function_body<T9, K> *f9_p;
         typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p, f4_p, f5_p, f6_p, f7_p, f8_p, f9_p > func_initializer_type;
     public:
+#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING
+        unfolded_join_node(graph &g) : base_type(g,
+                func_initializer_type(
+                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),
+                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),
+                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),
+                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>()),
+                    new internal::type_to_key_function_body_leaf<T4, K, key_from_message_body<K,T4> >(key_from_message_body<K,T4>()),
+                    new internal::type_to_key_function_body_leaf<T5, K, key_from_message_body<K,T5> >(key_from_message_body<K,T5>()),
+                    new internal::type_to_key_function_body_leaf<T6, K, key_from_message_body<K,T6> >(key_from_message_body<K,T6>()),
+                    new internal::type_to_key_function_body_leaf<T7, K, key_from_message_body<K,T7> >(key_from_message_body<K,T7>()),
+                    new internal::type_to_key_function_body_leaf<T8, K, key_from_message_body<K,T8> >(key_from_message_body<K,T8>()),
+                    new internal::type_to_key_function_body_leaf<T9, K, key_from_message_body<K,T9> >(key_from_message_body<K,T9>())
+                    ) ) {
+        }
+#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */
         template<typename Body0, typename Body1, typename Body2, typename Body3, typename Body4,
             typename Body5, typename Body6, typename Body7, typename Body8, typename Body9>
         unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3, Body4 body4,
                 Body5 body5, Body6 body6, Body7 body7, Body8 body8, Body9 body9) : base_type(g, func_initializer_type(
-                    new internal::function_body_leaf<T0, tag_value, Body0>(body0),
-                    new internal::function_body_leaf<T1, tag_value, Body1>(body1),
-                    new internal::function_body_leaf<T2, tag_value, Body2>(body2),
-                    new internal::function_body_leaf<T3, tag_value, Body3>(body3),
-                    new internal::function_body_leaf<T4, tag_value, Body4>(body4),
-                    new internal::function_body_leaf<T5, tag_value, Body5>(body5),
-                    new internal::function_body_leaf<T6, tag_value, Body6>(body6),
-                    new internal::function_body_leaf<T7, tag_value, Body7>(body7),
-                    new internal::function_body_leaf<T8, tag_value, Body8>(body8),
-                    new internal::function_body_leaf<T9, tag_value, Body9>(body9)
-                    ) ) {}
+                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),
+                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),
+                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),
+                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3),
+                    new internal::type_to_key_function_body_leaf<T4, K, Body4>(body4),
+                    new internal::type_to_key_function_body_leaf<T5, K, Body5>(body5),
+                    new internal::type_to_key_function_body_leaf<T6, K, Body6>(body6),
+                    new internal::type_to_key_function_body_leaf<T7, K, Body7>(body7),
+                    new internal::type_to_key_function_body_leaf<T8, K, Body8>(body8),
+                    new internal::type_to_key_function_body_leaf<T9, K, Body9>(body9)
+                    ) ) {
+            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 10, "wrong number of body initializers");
+        }
         unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}
     };
 #endif
diff --git a/include/tbb/internal/_flow_graph_node_impl.h b/include/tbb/internal/_flow_graph_node_impl.h
index b014857..eeff72b 100644
--- a/include/tbb/internal/_flow_graph_node_impl.h
+++ b/include/tbb/internal/_flow_graph_node_impl.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB__flow_graph_node_impl_H
@@ -37,34 +37,45 @@ namespace internal {
      template< typename T, typename A >
      class function_input_queue : public item_buffer<T,A> {
      public:
+         bool empty() const {
+             return this->buffer_empty();
+         }
+
+         const T& front() const {
+             return this->item_buffer<T, A>::front();
+         }
+
          bool pop( T& t ) {
              return this->pop_front( t );
          }
 
+         void pop() {
+             this->destroy_front();
+         }
+
          bool push( T& t ) {
              return this->push_back( t );
          }
      };
 
     //! Input and scheduling for a function node that takes a type Input as input
-    //  The only up-ref is apply_body_impl, which should implement the function 
+    //  The only up-ref is apply_body_impl, which should implement the function
     //  call and any handling of the result.
     template< typename Input, typename A, typename ImplType >
     class function_input_base : public receiver<Input>, tbb::internal::no_assign {
-        enum op_stat {WAIT=0, SUCCEEDED, FAILED};
         enum op_type {reg_pred, rem_pred, app_body, try_fwd, tryput_bypass, app_body_bypass
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
             , add_blt_pred, del_blt_pred,
             blt_pred_cnt, blt_pred_cpy   // create vector copies of preds and succs
-#endif 
+#endif
         };
-        typedef function_input_base<Input, A, ImplType> my_class;
-        
+        typedef function_input_base<Input, A, ImplType> class_type;
+
     public:
 
         //! The input type of this receiver
         typedef Input input_type;
-        typedef sender<Input> predecessor_type;
+        typedef typename receiver<input_type>::predecessor_type predecessor_type;
         typedef predecessor_cache<input_type, null_mutex > predecessor_cache_type;
         typedef function_input_queue<input_type, A> input_queue_type;
         typedef typename A::template rebind< input_queue_type >::other queue_allocator_type;
@@ -76,38 +87,38 @@ namespace internal {
 
         //! Constructor for function_input_base
         function_input_base( graph &g, size_t max_concurrency, input_queue_type *q = NULL)
-            : my_graph(g), my_max_concurrency(max_concurrency), my_concurrency(0),
+            : my_graph_ptr(&g), my_max_concurrency(max_concurrency), my_concurrency(0),
               my_queue(q), forwarder_busy(false) {
             my_predecessors.set_owner(this);
-            my_aggregator.initialize_handler(my_handler(this));
+            my_aggregator.initialize_handler(handler_type(this));
         }
-        
+
         //! Copy constructor
         function_input_base( const function_input_base& src, input_queue_type *q = NULL) :
             receiver<Input>(), tbb::internal::no_assign(),
-            my_graph(src.my_graph), my_max_concurrency(src.my_max_concurrency),
+            my_graph_ptr(src.my_graph_ptr), my_max_concurrency(src.my_max_concurrency),
             my_concurrency(0), my_queue(q), forwarder_busy(false)
         {
             my_predecessors.set_owner(this);
-            my_aggregator.initialize_handler(my_handler(this));
+            my_aggregator.initialize_handler(handler_type(this));
         }
 
         //! Destructor
         // The queue is allocated by the constructor for {multi}function_node.
         // TODO: pass the graph_buffer_policy to the base so it can allocate the queue instead.
         // This would be an interface-breaking change.
-        virtual ~function_input_base() { 
+        virtual ~function_input_base() {
             if ( my_queue ) delete my_queue;
         }
-        
+
         //! Put to the node, returning a task if available
-        virtual task * try_put_task( const input_type &t ) {
+        task * try_put_task( const input_type &t ) __TBB_override {
            if ( my_max_concurrency == 0 ) {
                return create_body_task( t );
            } else {
-               my_operation op_data(t, tryput_bypass);
+               operation_type op_data(t, tryput_bypass);
                my_aggregator.execute(&op_data);
-               if(op_data.status == SUCCEEDED ) {
+               if(op_data.status == internal::SUCCEEDED) {
                    return op_data.bypass_t;
                }
                return NULL;
@@ -115,16 +126,16 @@ namespace internal {
         }
 
         //! Adds src to the list of cached predecessors.
-        /* override */ bool register_predecessor( predecessor_type &src ) {
-            my_operation op_data(reg_pred);
+        bool register_predecessor( predecessor_type &src ) __TBB_override {
+            operation_type op_data(reg_pred);
             op_data.r = &src;
             my_aggregator.execute(&op_data);
             return true;
         }
-        
+
         //! Removes src from the list of cached predecessors.
-        /* override */ bool remove_predecessor( predecessor_type &src ) {
-            my_operation op_data(rem_pred);
+        bool remove_predecessor( predecessor_type &src ) __TBB_override {
+            operation_type op_data(rem_pred);
             op_data.r = &src;
             my_aggregator.execute(&op_data);
             return true;
@@ -132,70 +143,66 @@ namespace internal {
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         //! Adds to list of predecessors added by make_edge
-        /*override*/ void internal_add_built_predecessor( predecessor_type &src) {
-            my_operation op_data(add_blt_pred);
+        void internal_add_built_predecessor( predecessor_type &src) __TBB_override {
+            operation_type op_data(add_blt_pred);
             op_data.r = &src;
             my_aggregator.execute(&op_data);
         }
 
         //! removes from to list of predecessors (used by remove_edge)
-        /*override*/ void internal_delete_built_predecessor( predecessor_type &src) {
-            my_operation op_data(del_blt_pred);
+        void internal_delete_built_predecessor( predecessor_type &src) __TBB_override {
+            operation_type op_data(del_blt_pred);
             op_data.r = &src;
             my_aggregator.execute(&op_data);
         }
 
-        /*override*/ size_t predecessor_count() {
-            my_operation op_data(blt_pred_cnt);
+        size_t predecessor_count() __TBB_override {
+            operation_type op_data(blt_pred_cnt);
             my_aggregator.execute(&op_data);
             return op_data.cnt_val;
         }
 
-        /*override*/ void copy_predecessors(predecessor_list_type &v) {
-            my_operation op_data(blt_pred_cpy);
+        void copy_predecessors(predecessor_list_type &v) __TBB_override {
+            operation_type op_data(blt_pred_cpy);
             op_data.predv = &v;
             my_aggregator.execute(&op_data);
         }
 
-        /*override*/built_predecessors_type &built_predecessors() {
+        built_predecessors_type &built_predecessors() __TBB_override {
             return my_predecessors.built_predecessors();
         }
 #endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */
 
     protected:
 
-        void reset_function_input_base( __TBB_PFG_RESET_ARG(reset_flags f)) {
+        void reset_function_input_base( reset_flags f) {
             my_concurrency = 0;
             if(my_queue) {
                 my_queue->reset();
             }
-            reset_receiver(__TBB_PFG_RESET_ARG(f));
+            reset_receiver(f);
             forwarder_busy = false;
         }
 
-        graph& my_graph;
+        graph* my_graph_ptr;
         const size_t my_max_concurrency;
         size_t my_concurrency;
         input_queue_type *my_queue;
         predecessor_cache<input_type, null_mutex > my_predecessors;
-        
-        /*override*/void reset_receiver( __TBB_PFG_RESET_ARG(reset_flags f)) {
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
+
+        void reset_receiver( reset_flags f) __TBB_override {
             if( f & rf_clear_edges) my_predecessors.clear();
             else
-#endif
                 my_predecessors.reset();
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
             __TBB_ASSERT(!(f & rf_clear_edges) || my_predecessors.empty(), "function_input_base reset failed");
-#endif
         }
 
     private:
 
-        friend class apply_body_task_bypass< my_class, input_type >;
-        friend class forward_task_bypass< my_class >;
-        
-        class my_operation : public aggregated_operation< my_operation > {
+        friend class apply_body_task_bypass< class_type, input_type >;
+        friend class forward_task_bypass< class_type >;
+
+        class operation_type : public aggregated_operation< operation_type > {
         public:
             char type;
             union {
@@ -207,18 +214,44 @@ namespace internal {
 #endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */
             };
             tbb::task *bypass_t;
-            my_operation(const input_type& e, op_type t) :
+            operation_type(const input_type& e, op_type t) :
                 type(char(t)), elem(const_cast<input_type*>(&e)) {}
-            my_operation(op_type t) : type(char(t)), r(NULL) {}
+            operation_type(op_type t) : type(char(t)), r(NULL) {}
         };
-        
+
         bool forwarder_busy;
-        typedef internal::aggregating_functor<my_class, my_operation> my_handler;
-        friend class internal::aggregating_functor<my_class, my_operation>;
-        aggregator< my_handler, my_operation > my_aggregator;
-        
-        void handle_operations(my_operation *op_list) {
-            my_operation *tmp;
+        typedef internal::aggregating_functor<class_type, operation_type> handler_type;
+        friend class internal::aggregating_functor<class_type, operation_type>;
+        aggregator< handler_type, operation_type > my_aggregator;
+
+        task* create_and_spawn_task(bool spawn) {
+            task* new_task = NULL;
+            if(my_queue) {
+                if(!my_queue->empty()) {
+                    ++my_concurrency;
+                    new_task = create_body_task(my_queue->front());
+
+                    my_queue->pop();
+                }
+            }
+            else {
+                input_type i;
+                if(my_predecessors.get_item(i)) {
+                    ++my_concurrency;
+                    new_task = create_body_task(i);
+                }
+            }
+            //! Spawns a task that applies a body
+            // task == NULL => g.reset(), which shouldn't occur in concurrent context
+            if(spawn && new_task) {
+                FLOW_SPAWN(*new_task);
+                new_task = SUCCESSFULLY_ENQUEUED;
+            }
+
+            return new_task;
+        }
+        void handle_operations(operation_type *op_list) {
+            operation_type *tmp;
             while (op_list) {
                 tmp = op_list;
                 op_list = op_list->next;
@@ -240,35 +273,16 @@ namespace internal {
                     --my_concurrency;
                     __TBB_store_with_release(tmp->status, SUCCEEDED);
                     if (my_concurrency<my_max_concurrency) {
-                        input_type i;
-                        bool item_was_retrieved = false;
-                        if ( my_queue )
-                            item_was_retrieved = my_queue->pop(i);
-                        else
-                            item_was_retrieved = my_predecessors.get_item(i);
-                        if (item_was_retrieved) {
-                            ++my_concurrency;
-                            spawn_body_task(i);
-                        }
+                        create_and_spawn_task(/*spawn=*/true);
                     }
                     break;
                 case app_body_bypass: {
-                        task * new_task = NULL;
+                        tmp->bypass_t = NULL;
                         __TBB_ASSERT(my_max_concurrency != 0, NULL);
                         --my_concurrency;
-                        if (my_concurrency<my_max_concurrency) {
-                            input_type i;
-                            bool item_was_retrieved = false;
-                            if ( my_queue )
-                                item_was_retrieved = my_queue->pop(i);
-                            else 
-                                item_was_retrieved = my_predecessors.get_item(i);
-                            if (item_was_retrieved) {
-                                ++my_concurrency;
-                                new_task = create_body_task(i);
-                            }
-                        }
-                        tmp->bypass_t = new_task;
+                        if(my_concurrency<my_max_concurrency)
+                            tmp->bypass_t = create_and_spawn_task(/*spawn=*/false);
+
                         __TBB_store_with_release(tmp->status, SUCCEEDED);
                     }
                     break;
@@ -296,16 +310,16 @@ namespace internal {
                 }
             }
         }
-        
+
         //! Put to the node, but return the task instead of enqueueing it
-        void internal_try_put_task(my_operation *op) {
+        void internal_try_put_task(operation_type *op) {
             __TBB_ASSERT(my_max_concurrency != 0, NULL);
             if (my_concurrency < my_max_concurrency) {
                ++my_concurrency;
                task * new_task = create_body_task(*(op->elem));
                op->bypass_t = new_task;
                __TBB_store_with_release(op->status, SUCCEEDED);
-           } else if ( my_queue && my_queue->push(*(op->elem)) ) { 
+           } else if ( my_queue && my_queue->push(*(op->elem)) ) {
                op->bypass_t = SUCCESSFULLY_ENQUEUED;
                __TBB_store_with_release(op->status, SUCCEEDED);
            } else {
@@ -313,73 +327,45 @@ namespace internal {
                __TBB_store_with_release(op->status, FAILED);
            }
         }
-        
+
         //! Tries to spawn bodies if available and if concurrency allows
-        void internal_forward(my_operation *op) {
+        void internal_forward(operation_type *op) {
             op->bypass_t = NULL;
-            if (my_concurrency<my_max_concurrency || !my_max_concurrency) {
-                input_type i;
-                bool item_was_retrieved = false;
-                if ( my_queue )
-                    item_was_retrieved = my_queue->pop(i);
-                else
-                    item_was_retrieved = my_predecessors.get_item(i);
-                if (item_was_retrieved) {
-                    ++my_concurrency;
-                    op->bypass_t = create_body_task(i);
-                    __TBB_store_with_release(op->status, SUCCEEDED);
-                    return;
-                }
+            if (my_concurrency < my_max_concurrency || !my_max_concurrency)
+                op->bypass_t = create_and_spawn_task(/*spawn=*/false);
+            if(op->bypass_t)
+                __TBB_store_with_release(op->status, SUCCEEDED);
+            else {
+                forwarder_busy = false;
+                __TBB_store_with_release(op->status, FAILED);
             }
-            __TBB_store_with_release(op->status, FAILED);
-            forwarder_busy = false;
         }
-        
-        //! Applies the body to the provided input
-        //  then decides if more work is available 
-        void apply_body( input_type &i ) {
-            task *new_task = apply_body_bypass(i);
-            if(!new_task) return;
-            if(new_task == SUCCESSFULLY_ENQUEUED) return;
-            FLOW_SPAWN(*new_task);
-            return;
-        }
-        
+
         //! Applies the body to the provided input
-        //  then decides if more work is available 
+        //  then decides if more work is available
         task * apply_body_bypass( input_type &i ) {
             task * new_task = static_cast<ImplType *>(this)->apply_body_impl_bypass(i);
             if ( my_max_concurrency != 0 ) {
-                my_operation op_data(app_body_bypass);  // tries to pop an item or get_item, enqueues another apply_body
+                operation_type op_data(app_body_bypass);  // tries to pop an item or get_item, enqueues another apply_body
                 my_aggregator.execute(&op_data);
                 tbb::task *ttask = op_data.bypass_t;
                 new_task = combine_tasks(new_task, ttask);
             }
             return new_task;
         }
-        
-        //! allocates a task to call apply_body( input )
+
+        //! allocates a task to apply a body
         inline task * create_body_task( const input_type &input ) {
-            
-            task* tp = my_graph.root_task();
-            return (tp) ?
-                new(task::allocate_additional_child_of(*tp))
-                    apply_body_task_bypass < my_class, input_type >(*this, input) :
+
+            return (my_graph_ptr->is_active()) ?
+                new(task::allocate_additional_child_of(*(my_graph_ptr->root_task())))
+                    apply_body_task_bypass < class_type, input_type >(*this, input) :
                 NULL;
         }
 
-       //! Spawns a task that calls apply_body( input )
-       inline void spawn_body_task( const input_type &input ) {
-           task* tp = create_body_task(input);
-           // tp == NULL => g.reset(), which shouldn't occur in concurrent context
-           if(tp) {
-               FLOW_SPAWN(*tp);
-           }
-       }
-        
        //! This is executed by an enqueued task, the "forwarder"
        task *forward_task() {
-           my_operation op_data(try_fwd);
+           operation_type op_data(try_fwd);
            task *rval = NULL;
            do {
                op_data.status = WAIT;
@@ -391,11 +377,10 @@ namespace internal {
            } while (op_data.status == SUCCEEDED);
            return rval;
        }
-        
+
        inline task *create_forward_task() {
-           task* tp = my_graph.root_task();
-           return (tp) ?
-               new(task::allocate_additional_child_of(*tp)) forward_task_bypass< my_class >(*this) :
+           return (my_graph_ptr->is_active()) ?
+               new(task::allocate_additional_child_of(*(my_graph_ptr->root_task()))) forward_task_bypass< class_type >(*this) :
                NULL;
        }
 
@@ -415,6 +400,7 @@ namespace internal {
     public:
         typedef Input input_type;
         typedef Output output_type;
+        typedef function_body<input_type, output_type> function_body_type;
         typedef function_input<Input,Output,A> my_class;
         typedef function_input_base<Input, A, my_class> base_type;
         typedef function_input_queue<input_type, A> input_queue_type;
@@ -423,24 +409,27 @@ namespace internal {
         template<typename Body>
         function_input( graph &g, size_t max_concurrency, Body& body, input_queue_type *q = NULL ) :
             base_type(g, max_concurrency, q),
-            my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ) {
+            my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ),
+            my_init_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ) {
         }
 
         //! Copy constructor
-        function_input( const function_input& src, input_queue_type *q = NULL ) : 
+        function_input( const function_input& src, input_queue_type *q = NULL ) :
                 base_type(src, q),
-                my_body( src.my_body->clone() ) {
+                my_body( src.my_init_body->clone() ),
+                my_init_body(src.my_init_body->clone() ) {
         }
 
         ~function_input() {
             delete my_body;
+            delete my_init_body;
         }
 
         template< typename Body >
         Body copy_function_object() {
-            internal::function_body<input_type, output_type> &body_ref = *this->my_body;
-            return dynamic_cast< internal::function_body_leaf<input_type, output_type, Body> & >(body_ref).get_body(); 
-        } 
+            function_body_type &body_ref = *this->my_body;
+            return dynamic_cast< internal::function_body_leaf<input_type, output_type, Body> & >(body_ref).get_body();
+        }
 
         task * apply_body_impl_bypass( const input_type &i) {
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
@@ -450,7 +439,7 @@ namespace internal {
             output_type v = (*my_body)(i);
             tbb::internal::fgt_end_body( my_body );
             task * new_task = successors().try_put_task( v );
-#else       
+#else
             task * new_task = successors().try_put_task( (*my_body)(i) );
 #endif
             return new_task;
@@ -458,20 +447,22 @@ namespace internal {
 
     protected:
 
-        void reset_function_input(__TBB_PFG_RESET_ARG(reset_flags f)) {
-            base_type::reset_function_input_base(__TBB_PFG_RESET_ARG(f));
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-            if(f & rf_reset_bodies) my_body->reset_body();
-#endif
+        void reset_function_input(reset_flags f) {
+            base_type::reset_function_input_base(f);
+            if(f & rf_reset_bodies) {
+                function_body_type *tmp = my_init_body->clone();
+                delete my_body;
+                my_body = tmp;
+            }
         }
 
-        function_body<input_type, output_type> *my_body;
+        function_body_type *my_body;
+        function_body_type *my_init_body;
         virtual broadcast_cache<output_type > &successors() = 0;
 
     };  // function_input
 
 
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     // helper templates to clear the successor edges of the output ports of an multifunction_node
     template<int N> struct clear_element {
         template<typename P> static void clear_this(P &p) {
@@ -479,7 +470,7 @@ namespace internal {
             clear_element<N-1>::clear_this(p);
         }
         template<typename P> static bool this_empty(P &p) {
-            if(tbb::flow::get<N-1>(p).successors().empty()) 
+            if(tbb::flow::get<N-1>(p).successors().empty())
                 return clear_element<N-1>::this_empty(p);
             return false;
         }
@@ -494,6 +485,7 @@ namespace internal {
         }
     };
 
+#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     // helper templates to extract the output ports of an multifunction_node from graph
     template<int N> struct extract_element {
         template<typename P> static void extract_this(P &p) {
@@ -510,13 +502,14 @@ namespace internal {
 #endif
 
     //! Implements methods for a function node that takes a type Input as input
-    //  and has a tuple of output ports specified.  
+    //  and has a tuple of output ports specified.
     template< typename Input, typename OutputPortSet, typename A>
     class multifunction_input : public function_input_base<Input, A, multifunction_input<Input,OutputPortSet,A> > {
     public:
         static const int N = tbb::flow::tuple_size<OutputPortSet>::value;
         typedef Input input_type;
         typedef OutputPortSet output_ports_type;
+        typedef multifunction_body<input_type, output_ports_type> multifunction_body_type;
         typedef multifunction_input<Input,OutputPortSet,A> my_class;
         typedef function_input_base<Input, A, my_class> base_type;
         typedef function_input_queue<input_type, A> input_queue_type;
@@ -529,24 +522,27 @@ namespace internal {
                 Body& body,
                 input_queue_type *q = NULL ) :
             base_type(g, max_concurrency, q),
-            my_body( new internal::multifunction_body_leaf<input_type, output_ports_type, Body>(body) ) {
+            my_body( new internal::multifunction_body_leaf<input_type, output_ports_type, Body>(body) ),
+            my_init_body( new internal::multifunction_body_leaf<input_type, output_ports_type, Body>(body) ) {
         }
 
         //! Copy constructor
-        multifunction_input( const multifunction_input& src, input_queue_type *q = NULL ) : 
+        multifunction_input( const multifunction_input& src, input_queue_type *q = NULL ) :
                 base_type(src, q),
-                my_body( src.my_body->clone() ) {
+                my_body( src.my_init_body->clone() ),
+                my_init_body(src.my_init_body->clone() ) {
         }
 
         ~multifunction_input() {
             delete my_body;
+            delete my_init_body;
         }
 
         template< typename Body >
         Body copy_function_object() {
-            internal::multifunction_body<input_type, output_ports_type> &body_ref = *this->my_body;
-            return dynamic_cast< internal::multifunction_body_leaf<input_type, output_ports_type, Body> & >(body_ref).get_body(); 
-        } 
+            multifunction_body_type &body_ref = *this->my_body;
+            return *static_cast<Body*>(dynamic_cast< internal::multifunction_body_leaf<input_type, output_ports_type, Body> & >(body_ref).get_body_ptr());
+        }
 
         // for multifunction nodes we do not have a single successor as such.  So we just tell
         // the task we were successful.
@@ -562,21 +558,24 @@ namespace internal {
 
     protected:
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-        /*override*/void extract() {
+        void extract() {
             extract_element<N>::extract_this(my_output_ports);
         }
 #endif
 
-        /*override*/void reset(__TBB_PFG_RESET_ARG(reset_flags f)) { 
-            base_type::reset_function_input_base(__TBB_PFG_RESET_ARG(f));
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
+        void reset(reset_flags f) {
+            base_type::reset_function_input_base(f);
             if(f & rf_clear_edges)clear_element<N>::clear_this(my_output_ports);
-            if(f & rf_reset_bodies) my_body->reset_body();
+            if(f & rf_reset_bodies) {
+                multifunction_body_type *tmp = my_init_body->clone();
+                delete my_body;
+                my_body = tmp;
+            }
             __TBB_ASSERT(!(f & rf_clear_edges) || clear_element<N>::this_empty(my_output_ports), "multifunction_node reset failed");
-#endif
         }
 
-        multifunction_body<input_type, output_ports_type> *my_body;
+        multifunction_body_type *my_body;
+        multifunction_body_type *my_init_body;
         output_ports_type my_output_ports;
 
     };  // multifunction_input
@@ -584,7 +583,7 @@ namespace internal {
     // template to refer to an output port of a multifunction_node
     template<size_t N, typename MOP>
     typename tbb::flow::tuple_element<N, typename MOP::output_ports_type>::type &output_port(MOP &op) {
-        return tbb::flow::get<N>(op.output_ports()); 
+        return tbb::flow::get<N>(op.output_ports());
     }
 
 // helper structs for split_node
@@ -609,54 +608,64 @@ namespace internal {
     template< typename Output >
     class continue_input : public continue_receiver {
     public:
-        
+
         //! The input type of this receiver
         typedef continue_msg input_type;
-            
+
         //! The output type of this receiver
         typedef Output output_type;
-        
+        typedef function_body<input_type, output_type> function_body_type;
+
         template< typename Body >
         continue_input( graph &g, Body& body )
-            : my_graph_ptr(&g), 
-             my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ) { }
-        
+            : my_graph_ptr(&g),
+             my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ),
+             my_init_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ) { }
+
         template< typename Body >
         continue_input( graph &g, int number_of_predecessors, Body& body )
-            : continue_receiver( number_of_predecessors ), my_graph_ptr(&g), 
-             my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ) { }
+            : continue_receiver( number_of_predecessors ), my_graph_ptr(&g),
+             my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ),
+             my_init_body( new internal::function_body_leaf< input_type, output_type, Body>(body) )
+        { }
 
-        continue_input( const continue_input& src ) : continue_receiver(src), 
-            my_graph_ptr(src.my_graph_ptr), my_body( src.my_body->clone() ) {}
+        continue_input( const continue_input& src ) : continue_receiver(src),
+            my_graph_ptr(src.my_graph_ptr),
+            my_body( src.my_init_body->clone() ),
+            my_init_body( src.my_init_body->clone() ) {}
 
         ~continue_input() {
             delete my_body;
+            delete my_init_body;
         }
 
         template< typename Body >
         Body copy_function_object() {
-            internal::function_body<input_type, output_type> &body_ref = *my_body;
-            return dynamic_cast< internal::function_body_leaf<input_type, output_type, Body> & >(body_ref).get_body(); 
-        } 
+            function_body_type &body_ref = *my_body;
+            return dynamic_cast< internal::function_body_leaf<input_type, output_type, Body> & >(body_ref).get_body();
+        }
 
-        /*override*/void reset_receiver( __TBB_PFG_RESET_ARG(reset_flags f)) {
-            continue_receiver::reset_receiver(__TBB_PFG_RESET_ARG(f));
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-            if(f & rf_reset_bodies) my_body->reset_body();
-#endif
+        void reset_receiver( reset_flags f) __TBB_override {
+            continue_receiver::reset_receiver(f);
+            if(f & rf_reset_bodies) {
+                function_body_type *tmp = my_init_body->clone();
+                delete my_body;
+                my_body = tmp;
+            }
         }
 
     protected:
-        
+
         graph* my_graph_ptr;
-        function_body<input_type, output_type> *my_body;
-        
-        virtual broadcast_cache<output_type > &successors() = 0; 
-        
+        function_body_type *my_body;
+        function_body_type *my_init_body;
+
+        virtual broadcast_cache<output_type > &successors() = 0;
+
         friend class apply_body_task_bypass< continue_input< Output >, continue_msg >;
-        
+
         //! Applies the body to the provided input
-        /* override */ task *apply_body_bypass( input_type ) {
+        task *apply_body_bypass( input_type ) {
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
             // There is an extra copied needed to capture the
             // body execution without the try_put
@@ -664,131 +673,69 @@ namespace internal {
             output_type v = (*my_body)( continue_msg() );
             tbb::internal::fgt_end_body( my_body );
             return successors().try_put_task( v );
-#else   
+#else
             return successors().try_put_task( (*my_body)( continue_msg() ) );
 #endif
         }
-        
+
         //! Spawns a task that applies the body
-        /* override */ task *execute( ) {
-            task* tp = my_graph_ptr->root_task();
-            return (tp) ?
-                new ( task::allocate_additional_child_of( *tp ) ) 
+        task *execute( ) __TBB_override {
+            return (my_graph_ptr->is_active()) ?
+                new ( task::allocate_additional_child_of( *(my_graph_ptr->root_task()) ) )
                     apply_body_task_bypass< continue_input< Output >, continue_msg >( *this, continue_msg() ) :
                 NULL;
         }
 
     };  // continue_input
 
-#if __TBB_PREVIEW_ASYNC_NODE
-
-    //! Implements methods for a async node that takes a type Input as input and 
-    //  submit it to Asynchronous activity
-    template < typename Input, typename A, typename AsyncGatewayType >
-    class async_input : public function_input_base<Input, A, async_input<Input, A, AsyncGatewayType> > {
-    public:
-        typedef Input input_type;
-        typedef AsyncGatewayType async_gateway_type;
-        typedef async_input< Input, A, async_gateway_type > my_class;
-        typedef function_input_base<Input, A, my_class> base_type;
-
-        // constructor
-        template<typename Body>
-        async_input( graph &g, Body& body ) : 
-            base_type( g, unlimited ),
-            my_body( new internal::async_body_leaf< input_type, Body, async_gateway_type >(body) ){
-        }
-
-        //! Copy constructor
-        async_input( const async_input& src ) : 
-            base_type( src ),
-            my_body( src.my_body->clone() ) {
-        }
-
-        ~async_input() {
-            delete my_body;
-        }
-
-        template< typename Body >
-        Body copy_function_object() {
-            internal::async_body<input_type, async_gateway_type> &body_ref = *this->my_body;
-            return dynamic_cast< internal::async_body_leaf<input_type, Body, async_gateway_type> & >(body_ref).get_body(); 
-        }
-
-        task * apply_body_impl_bypass( const input_type &i) {
-            // TODO: This FGT instrumentation only captures the submission of the work
-            // but not the async thread activity.
-            // We will have to think about the best way to capture that.
-            tbb::internal::fgt_begin_body( my_body );
-            (*my_body)( i, async_gateway() );
-            tbb::internal::fgt_end_body( my_body );
-            return NULL;
-        }
-
-        virtual async_gateway_type& async_gateway() = 0;
-
-    protected:
-        void reset_async_input(__TBB_PFG_RESET_ARG(reset_flags f)) {
-            base_type::reset_function_input_base(__TBB_PFG_RESET_ARG(f));
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-            if(f & rf_reset_bodies) my_body->reset_body();
-#endif
-        }
-
-        async_body< input_type, async_gateway_type > *my_body;
-    };
-#endif // __TBB_PREVIEW_ASYNC_NODE
-        
     //! Implements methods for both executable and function nodes that puts Output to its successors
     template< typename Output >
     class function_output : public sender<Output> {
     public:
-        
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
+
         template<int N> friend struct clear_element;
-#endif
         typedef Output output_type;
-        typedef receiver<output_type> successor_type;
+        typedef typename sender<output_type>::successor_type successor_type;
         typedef broadcast_cache<output_type> broadcast_cache_type;
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         typedef typename sender<output_type>::built_successors_type built_successors_type;
         typedef typename sender<output_type>::successor_list_type successor_list_type;
 #endif
-        
+
         function_output() { my_successors.set_owner(this); }
         function_output(const function_output & /*other*/) : sender<output_type>() {
             my_successors.set_owner(this);
         }
-        
+
         //! Adds a new successor to this node
-        /* override */ bool register_successor( receiver<output_type> &r ) {
+        bool register_successor( successor_type &r ) __TBB_override {
             successors().register_successor( r );
             return true;
         }
-        
+
         //! Removes a successor from this node
-        /* override */ bool remove_successor( receiver<output_type> &r ) {
+        bool remove_successor( successor_type &r ) __TBB_override {
             successors().remove_successor( r );
             return true;
         }
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-        built_successors_type &built_successors() { return successors().built_successors(); }
+        built_successors_type &built_successors() __TBB_override { return successors().built_successors(); }
 
 
-        /*override*/ void internal_add_built_successor( receiver<output_type> &r) {
+        void internal_add_built_successor( successor_type &r) __TBB_override {
             successors().internal_add_built_successor( r );
         }
 
-        /*override*/ void internal_delete_built_successor( receiver<output_type> &r) {
+        void internal_delete_built_successor( successor_type &r) __TBB_override {
             successors().internal_delete_built_successor( r );
         }
 
-        /*override*/ size_t successor_count() {
+        size_t successor_count() __TBB_override {
             return successors().successor_count();
         }
 
-        /*override*/ void  copy_successors( successor_list_type &v) {
+        void  copy_successors( successor_list_type &v) __TBB_override {
             successors().copy_successors(v);
         }
 #endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */
@@ -801,12 +748,14 @@ namespace internal {
         //
         // if task pointer is returned will always spawn and return true, else
         // return value will be bool returned from successors.try_put.
-        task *try_put_task(const output_type &i) { return my_successors.try_put_task(i); }
-          
-        broadcast_cache_type &successors() { return my_successors; } 
+        task *try_put_task(const output_type &i) { // not a virtual method in this class
+            return my_successors.try_put_task(i);
+        }
+
+        broadcast_cache_type &successors() { return my_successors; }
     protected:
         broadcast_cache_type my_successors;
-        
+
     };  // function_output
 
     template< typename Output >
@@ -815,7 +764,7 @@ namespace internal {
         typedef Output output_type;
         typedef function_output<output_type> base_type;
         using base_type::my_successors;
-        
+
         multifunction_output() : base_type() {my_successors.set_owner(this);}
         multifunction_output( const multifunction_output &/*other*/) : base_type() { my_successors.set_owner(this); }
 
@@ -827,6 +776,23 @@ namespace internal {
         }
     };  // multifunction_output
 
+//composite_node
+#if TBB_PREVIEW_FLOW_GRAPH_TRACE && __TBB_FLOW_GRAPH_CPP11_FEATURES
+    template<typename CompositeType>
+    void add_nodes_impl(CompositeType*, bool) {}
+
+    template< typename CompositeType, typename NodeType1, typename... NodeTypes >
+    void add_nodes_impl(CompositeType *c_node, bool visible, const NodeType1& n1, const NodeTypes&... n) {
+        void *addr = const_cast<NodeType1 *>(&n1);
+
+        if(visible)
+            tbb::internal::itt_relation_add( tbb::internal::ITT_DOMAIN_FLOW, c_node, tbb::internal::FLOW_NODE, tbb::internal::__itt_relation_is_parent_of, addr, tbb::internal::FLOW_NODE );
+        else
+            tbb::internal::itt_relation_add( tbb::internal::ITT_DOMAIN_FLOW, addr, tbb::internal::FLOW_NODE, tbb::internal::__itt_relation_is_child_of, c_node, tbb::internal::FLOW_NODE );
+        add_nodes_impl(c_node, visible, n...);
+    }
+#endif
+
 }  // internal
 
 #endif // __TBB__flow_graph_node_impl_H
diff --git a/include/tbb/internal/_flow_graph_streaming_node.h b/include/tbb/internal/_flow_graph_streaming_node.h
new file mode 100644
index 0000000..493f76e
--- /dev/null
+++ b/include/tbb/internal/_flow_graph_streaming_node.h
@@ -0,0 +1,745 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+#ifndef __TBB_flow_graph_streaming_H
+#define __TBB_flow_graph_streaming_H
+
+#ifndef __TBB_flow_graph_H
+#error Do not #include this internal file directly; use public TBB headers instead.
+#endif
+
+#if __TBB_PREVIEW_STREAMING_NODE
+
+// Included in namespace tbb::flow::interfaceX (in flow_graph.h)
+
+namespace internal {
+
+template <int N1, int N2>
+struct port_ref_impl {
+    // "+1" since the port_ref range is a closed interval (includes its endpoints).
+    static const int size = N2 - N1 + 1;
+};
+
+} // internal
+
+// The purpose of the port_ref_impl is the pretty syntax: the deduction of a compile-time constant is processed from the return type.
+// So it is possible to use this helper without parentheses, e.g. "port_ref<0>".
+template <int N1, int N2 = N1>
+internal::port_ref_impl<N1,N2> port_ref() {
+    return internal::port_ref_impl<N1,N2>();
+};
+
+namespace internal {
+
+template <typename T>
+struct num_arguments {
+    static const int value = 1;
+};
+
+template <int N1, int N2>
+struct num_arguments<port_ref_impl<N1,N2>(*)()> {
+    static const int value = port_ref_impl<N1,N2>::size;
+};
+
+template <int N1, int N2>
+struct num_arguments<port_ref_impl<N1,N2>> {
+    static const int value = port_ref_impl<N1,N2>::size;
+};
+
+template <typename... Args>
+void ignore_return_values( Args&&... ) {}
+
+template <typename T>
+T or_return_values( T&& t ) { return t; }
+template <typename T, typename... Rest>
+T or_return_values( T&& t, Rest&&... rest ) {
+    return t | or_return_values( std::forward<Rest>(rest)... );
+}
+
+template<typename JP>
+struct key_from_policy {
+    typedef size_t type;
+    typedef std::false_type is_key_matching;
+};
+
+template<typename Key>
+struct key_from_policy< key_matching<Key> > {
+    typedef Key type;
+    typedef std::true_type is_key_matching;
+};
+
+template<typename Key>
+struct key_from_policy< key_matching<Key&> > {
+    typedef const Key &type;
+    typedef std::true_type is_key_matching;
+};
+
+template<typename Device, typename Key>
+class streaming_device_with_key {
+    Device my_device;
+    typename std::decay<Key>::type my_key;
+public:
+    // TODO: investigate why default constructor is required
+    streaming_device_with_key() {}
+    streaming_device_with_key( const Device& d, Key k ) : my_device( d ), my_key( k ) {}
+    Key key() const { return my_key; }
+    const Device& device() const { return my_device; }
+};
+
+// --------- Kernel argument helpers --------- //
+template <typename T>
+struct is_port_ref_impl {
+    typedef std::false_type type;
+};
+
+template <int N1, int N2>
+struct is_port_ref_impl< port_ref_impl<N1, N2> > {
+    typedef std::true_type type;
+};
+
+template <int N1, int N2>
+struct is_port_ref_impl< port_ref_impl<N1, N2>( * )()  > {
+    typedef std::true_type type;
+};
+
+template <typename T>
+struct is_port_ref {
+    typedef typename is_port_ref_impl< typename tbb::internal::strip<T>::type >::type type;
+};
+
+template <typename ...Args1>
+struct convert_and_call_impl;
+
+template <typename A1, typename ...Args1>
+struct convert_and_call_impl<A1, Args1...> {
+    static const size_t my_delta = 1; // Index 0 contains device
+
+    template <typename F, typename Tuple, typename ...Args2>
+    static void doit(F& f, Tuple& t, A1& a1, Args1&... args1, Args2&... args2) {
+        convert_and_call_impl<A1, Args1...>::doit_impl(typename is_port_ref<A1>::type(), f, t, a1, args1..., args2...);
+    }
+    template <typename F, typename Tuple, typename ...Args2>
+    static void doit_impl(std::false_type, F& f, Tuple& t, A1& a1, Args1&... args1, Args2&... args2) {
+        convert_and_call_impl<Args1...>::doit(f, t, args1..., args2..., a1);
+    }
+    template <typename F, typename Tuple, int N1, int N2, typename ...Args2>
+    static void doit_impl(std::true_type x, F& f, Tuple& t, port_ref_impl<N1, N2>, Args1&... args1, Args2&... args2) {
+        convert_and_call_impl<port_ref_impl<N1 + 1,N2>, Args1...>::doit_impl(x, f, t, port_ref<N1 + 1, N2>(), args1...,
+            args2..., std::get<N1 + my_delta>(t));
+    }
+    template <typename F, typename Tuple, int N, typename ...Args2>
+    static void doit_impl(std::true_type, F& f, Tuple& t, port_ref_impl<N, N>, Args1&... args1, Args2&... args2) {
+        convert_and_call_impl<Args1...>::doit(f, t, args1..., args2..., std::get<N + my_delta>(t));
+    }
+
+    template <typename F, typename Tuple, int N1, int N2, typename ...Args2>
+    static void doit_impl(std::true_type x, F& f, Tuple& t, port_ref_impl<N1, N2>(* fn)(), Args1&... args1, Args2&... args2) {
+        doit_impl(x, f, t, fn(), args1..., args2...);
+    }
+    template <typename F, typename Tuple, int N, typename ...Args2>
+    static void doit_impl(std::true_type x, F& f, Tuple& t, port_ref_impl<N, N>(* fn)(), Args1&... args1, Args2&... args2) {
+        doit_impl(x, f, t, fn(), args1..., args2...);
+    }
+};
+
+template <>
+struct convert_and_call_impl<> {
+    template <typename F, typename Tuple, typename ...Args2>
+    static void doit(F& f, Tuple&, Args2&... args2) {
+        f(args2...);
+    }
+};
+// ------------------------------------------- //
+
+template<typename JP, typename StreamFactory, typename... Ports>
+struct streaming_node_traits {
+    // Do not use 'using' instead of 'struct' because Microsoft Visual C++ 12.0 fails to compile.
+    template <typename T>
+    struct async_msg_type {
+        typedef typename StreamFactory::template async_msg_type<T> type;
+    };
+
+    typedef tuple< typename async_msg_type<Ports>::type... > input_tuple;
+    typedef input_tuple output_tuple;
+    typedef tuple< streaming_device_with_key< typename StreamFactory::device_type, typename key_from_policy<JP>::type >,
+        typename async_msg_type<Ports>::type... > kernel_input_tuple;
+
+    // indexer_node parameters pack expansion workaround for VS2013 for streaming_node
+    typedef indexer_node< typename async_msg_type<Ports>::type... > indexer_node_type;
+};
+
+// Default empty implementation
+template<typename StreamFactory, typename KernelInputTuple, typename = void>
+class kernel_executor_helper {
+    typedef typename StreamFactory::device_type device_type;
+    typedef typename StreamFactory::kernel_type kernel_type;
+    typedef KernelInputTuple kernel_input_tuple;
+protected:
+    template <typename ...Args>
+    void enqueue_kernel_impl( kernel_input_tuple&, StreamFactory& factory, device_type device, const kernel_type& kernel, Args&... args ) const {
+        factory.send_kernel( device, kernel, args... );
+    }
+};
+
+// Implementation for StreamFactory supporting range
+template<typename StreamFactory, typename KernelInputTuple>
+class kernel_executor_helper<StreamFactory, KernelInputTuple, typename tbb::internal::void_t< typename StreamFactory::range_type >::type > {
+    typedef typename StreamFactory::device_type device_type;
+    typedef typename StreamFactory::kernel_type kernel_type;
+    typedef KernelInputTuple kernel_input_tuple;
+
+    typedef typename StreamFactory::range_type range_type;
+
+    // Container for randge. It can contain either port references or real range.
+    struct range_wrapper {
+        virtual range_type get_range( const kernel_input_tuple &ip ) const = 0;
+        virtual range_wrapper *clone() const = 0;
+        virtual ~range_wrapper() {}
+    };
+
+    struct range_value : public range_wrapper {
+        range_value( const range_type& value ) : my_value(value) {}
+
+        range_value( range_type&& value ) : my_value(std::move(value)) {}
+
+        range_type get_range( const kernel_input_tuple & ) const __TBB_override {
+            return my_value;
+        }
+
+        range_wrapper *clone() const __TBB_override {
+            return new range_value(my_value);
+        }
+    private:
+        range_type my_value;
+    };
+
+    template <int N>
+    struct range_mapper : public range_wrapper {
+        range_mapper() {}
+
+        range_type get_range( const kernel_input_tuple &ip ) const __TBB_override {
+            // "+1" since get<0>(ip) is StreamFactory::device.
+            return get<N + 1>(ip).data(false);
+        }
+
+        range_wrapper *clone() const __TBB_override {
+            return new range_mapper<N>;
+        }
+    };
+
+protected:
+    template <typename ...Args>
+    void enqueue_kernel_impl( kernel_input_tuple& ip, StreamFactory& factory, device_type device, const kernel_type& kernel, Args&... args ) const {
+        __TBB_ASSERT(my_range_wrapper, "Range is not set. Call set_range() before running streaming_node.");
+        factory.send_kernel( device, kernel, my_range_wrapper->get_range(ip), args... );
+    }
+
+public:
+    kernel_executor_helper() : my_range_wrapper(NULL) {}
+
+    kernel_executor_helper(const kernel_executor_helper& executor) : my_range_wrapper(executor.my_range_wrapper ? executor.my_range_wrapper->clone() : NULL) {}
+
+    kernel_executor_helper(kernel_executor_helper&& executor) : my_range_wrapper(executor.my_range_wrapper) {
+        // Set moving holder mappers to NULL to prevent double deallocation
+        executor.my_range_wrapper = NULL;
+    }
+
+    ~kernel_executor_helper() {
+        if (my_range_wrapper) delete my_range_wrapper;
+    }
+
+    void set_range(const range_type& work_size) {
+        my_range_wrapper = new range_value(work_size);
+    }
+
+    void set_range(range_type&& work_size) {
+        my_range_wrapper = new range_value(std::move(work_size));
+    }
+
+    template <int N>
+    void set_range(port_ref_impl<N, N>) {
+        my_range_wrapper = new range_mapper<N>;
+    }
+
+    template <int N>
+    void set_range(port_ref_impl<N, N>(*)()) {
+        my_range_wrapper = new range_mapper<N>;
+    }
+
+private:
+    range_wrapper* my_range_wrapper;
+};
+
+} // internal
+
+/*
+/---------------------------------------- streaming_node ------------------------------------\
+|                                                                                            |
+|   /--------------\   /----------------------\   /-----------\   /----------------------\   |
+|   |              |   |    (device_with_key) O---O           |   |                      |   |
+|   |              |   |                      |   |           |   |                      |   |
+O---O indexer_node O---O device_selector_node O---O join_node O---O      kernel_node     O---O
+|   |              |   | (multifunction_node) |   |           |   | (multifunction_node) |   |
+O---O              |   |                      O---O           |   |                      O---O
+|   \--------------/   \----------------------/   \-----------/   \----------------------/   |
+|                                                                                            |
+\--------------------------------------------------------------------------------------------/
+*/
+template<typename... Args>
+class streaming_node;
+
+template<typename... Ports, typename JP, typename StreamFactory>
+class streaming_node< tuple<Ports...>, JP, StreamFactory >
+    : public composite_node < typename internal::streaming_node_traits<JP, StreamFactory, Ports...>::input_tuple,
+                              typename internal::streaming_node_traits<JP, StreamFactory, Ports...>::output_tuple >
+    , public internal::kernel_executor_helper< StreamFactory, typename internal::streaming_node_traits<JP, StreamFactory, Ports...>::kernel_input_tuple >
+{
+    typedef typename internal::streaming_node_traits<JP, StreamFactory, Ports...>::input_tuple input_tuple;
+    typedef typename internal::streaming_node_traits<JP, StreamFactory, Ports...>::output_tuple output_tuple;
+    typedef typename internal::key_from_policy<JP>::type key_type;
+protected:
+    typedef typename StreamFactory::device_type device_type;
+    typedef typename StreamFactory::kernel_type kernel_type;
+private:
+    typedef internal::streaming_device_with_key<device_type, key_type> device_with_key_type;
+    typedef composite_node<input_tuple, output_tuple> base_type;
+    static const size_t NUM_INPUTS = tuple_size<input_tuple>::value;
+    static const size_t NUM_OUTPUTS = tuple_size<output_tuple>::value;
+
+    typedef typename internal::make_sequence<NUM_INPUTS>::type input_sequence;
+    typedef typename internal::make_sequence<NUM_OUTPUTS>::type output_sequence;
+
+    typedef typename internal::streaming_node_traits<JP, StreamFactory, Ports...>::indexer_node_type indexer_node_type;
+    typedef typename indexer_node_type::output_type indexer_node_output_type;
+    typedef typename internal::streaming_node_traits<JP, StreamFactory, Ports...>::kernel_input_tuple kernel_input_tuple;
+    typedef multifunction_node<indexer_node_output_type, kernel_input_tuple> device_selector_node;
+    typedef multifunction_node<kernel_input_tuple, output_tuple> kernel_multifunction_node;
+
+    template <int... S>
+    typename base_type::input_ports_type get_input_ports( internal::sequence<S...> ) {
+        return std::tie( internal::input_port<S>( my_indexer_node )... );
+    }
+
+    template <int... S>
+    typename base_type::output_ports_type get_output_ports( internal::sequence<S...> ) {
+        return std::tie( internal::output_port<S>( my_kernel_node )... );
+    }
+
+    typename base_type::input_ports_type get_input_ports() {
+        return get_input_ports( input_sequence() );
+    }
+
+    typename base_type::output_ports_type get_output_ports() {
+        return get_output_ports( output_sequence() );
+    }
+
+    template <int N>
+    int make_Nth_edge() {
+        make_edge( internal::output_port<N>( my_device_selector_node ), internal::input_port<N>( my_join_node ) );
+        return 0;
+    }
+
+    template <int... S>
+    void make_edges( internal::sequence<S...> ) {
+        make_edge( my_indexer_node, my_device_selector_node );
+        make_edge( my_device_selector_node, my_join_node );
+        internal::ignore_return_values( make_Nth_edge<S + 1>()... );
+        make_edge( my_join_node, my_kernel_node );
+    }
+
+    void make_edges() {
+        make_edges( input_sequence() );
+    }
+
+    class device_selector_base {
+    public:
+        virtual void operator()( const indexer_node_output_type &v, typename device_selector_node::output_ports_type &op ) = 0;
+        virtual device_selector_base *clone( streaming_node &n ) const = 0;
+        virtual ~device_selector_base() {}
+    };
+
+    template <typename UserFunctor>
+    class device_selector : public device_selector_base, tbb::internal::no_assign {
+    public:
+        device_selector( UserFunctor uf, streaming_node &n, StreamFactory &f )
+            : my_dispatch_funcs( create_dispatch_funcs( input_sequence() ) )
+            , my_user_functor( uf ), my_node(n), my_factory( f )
+        {
+            my_port_epoches.fill( 0 );
+        }
+
+        void operator()( const indexer_node_output_type &v, typename device_selector_node::output_ports_type &op ) __TBB_override {
+            (this->*my_dispatch_funcs[ v.tag() ])( my_port_epoches[ v.tag() ], v, op );
+            __TBB_ASSERT( (tbb::internal::is_same_type<typename internal::key_from_policy<JP>::is_key_matching, std::false_type>::value)
+                || my_port_epoches[v.tag()] == 0, "Epoch is changed when key matching is requested" );
+        }
+
+        device_selector_base *clone( streaming_node &n ) const __TBB_override {
+            return new device_selector( my_user_functor, n, my_factory );
+        }
+    private:
+        typedef void(device_selector<UserFunctor>::*send_and_put_fn_type)(size_t &, const indexer_node_output_type &, typename device_selector_node::output_ports_type &);
+        typedef std::array < send_and_put_fn_type, NUM_INPUTS > dispatch_funcs_type;
+
+        template <int... S>
+        static dispatch_funcs_type create_dispatch_funcs( internal::sequence<S...> ) {
+            dispatch_funcs_type dispatch = { { &device_selector<UserFunctor>::send_and_put_impl<S>... } };
+            return dispatch;
+        }
+
+        template <typename T>
+        key_type get_key( std::false_type, const T &, size_t &epoch ) {
+            __TBB_STATIC_ASSERT( (tbb::internal::is_same_type<key_type, size_t>::value), "" );
+            return epoch++;
+        }
+
+        template <typename T>
+        key_type get_key( std::true_type, const T &t, size_t &/*epoch*/ ) {
+            using tbb::flow::key_from_message;
+            return key_from_message<key_type>( t );
+        }
+
+        template <int N>
+        void send_and_put_impl( size_t &epoch, const indexer_node_output_type &v, typename device_selector_node::output_ports_type &op ) {
+            typedef typename tuple_element<N + 1, typename device_selector_node::output_ports_type>::type::output_type elem_type;
+            elem_type e = internal::cast_to<elem_type>( v );
+            device_type device = get_device( get_key( typename internal::key_from_policy<JP>::is_key_matching(), e, epoch ), get<0>( op ) );
+            my_factory.send_data( device, e );
+            get<N + 1>( op ).try_put( e );
+        }
+
+        template< typename DevicePort >
+        device_type get_device( key_type key, DevicePort& dp ) {
+            typename std::unordered_map<typename std::decay<key_type>::type, epoch_desc>::iterator it = my_devices.find( key );
+            if ( it == my_devices.end() ) {
+                device_type d = my_user_functor( my_factory );
+                std::tie( it, std::ignore ) = my_devices.insert( std::make_pair( key, d ) );
+                bool res = dp.try_put( device_with_key_type( d, key ) );
+                __TBB_ASSERT_EX( res, NULL );
+                my_node.notify_new_device( d );
+            }
+            epoch_desc &e = it->second;
+            device_type d = e.my_device;
+            if ( ++e.my_request_number == NUM_INPUTS ) my_devices.erase( it );
+            return d;
+        }
+
+        struct epoch_desc {
+            epoch_desc(device_type d ) : my_device( d ), my_request_number( 0 ) {}
+            device_type my_device;
+            size_t my_request_number;
+        };
+
+        std::unordered_map<typename std::decay<key_type>::type, epoch_desc> my_devices;
+        std::array<size_t, NUM_INPUTS> my_port_epoches;
+        dispatch_funcs_type my_dispatch_funcs;
+        UserFunctor my_user_functor;
+        streaming_node &my_node;
+        StreamFactory &my_factory;
+    };
+
+    class device_selector_body {
+    public:
+        device_selector_body( device_selector_base *d ) : my_device_selector( d ) {}
+
+        void operator()( const indexer_node_output_type &v, typename device_selector_node::output_ports_type &op ) {
+            (*my_device_selector)(v, op);
+        }
+    private:
+        device_selector_base *my_device_selector;
+    };
+
+    class args_storage_base : tbb::internal::no_copy {
+    public:
+        typedef typename kernel_multifunction_node::output_ports_type output_ports_type;
+
+        virtual void enqueue( kernel_input_tuple &ip, output_ports_type &op, const streaming_node &n ) = 0;
+        virtual void send( device_type d ) = 0;
+        virtual args_storage_base *clone() const = 0;
+        virtual ~args_storage_base () {}
+
+    protected:
+        args_storage_base( const kernel_type& kernel, StreamFactory &f )
+            : my_kernel( kernel ), my_factory( f )
+        {}
+
+        args_storage_base( const args_storage_base &k )
+            : my_kernel( k.my_kernel ), my_factory( k.my_factory )
+        {}
+
+        const kernel_type my_kernel;
+        StreamFactory &my_factory;
+    };
+
+    template <typename... Args>
+    class args_storage : public args_storage_base {
+        typedef typename args_storage_base::output_ports_type output_ports_type;
+
+        // ---------- Update events helpers ---------- //
+        template <int N>
+        bool do_try_put( const kernel_input_tuple& ip, output_ports_type &op ) const {
+            const auto& t = get<N + 1>( ip );
+            auto &port = get<N>( op );
+            return port.try_put( t );
+        }
+
+        template <int... S>
+        bool do_try_put( const kernel_input_tuple& ip, output_ports_type &op, internal::sequence<S...> ) const {
+            return internal::or_return_values( do_try_put<S>( ip, op )... );
+        }
+
+        // ------------------------------------------- //
+        class run_kernel_func : tbb::internal::no_assign {
+        public:
+            run_kernel_func( kernel_input_tuple &ip, const streaming_node &node, const args_storage& storage )
+                : my_kernel_func( ip, node, storage, get<0>(ip).device() ) {}
+
+            // It is immpossible to use Args... because a function pointer cannot be casted to a function reference implicitly.
+            // Allow the compiler to deduce types for function pointers automatically.
+            template <typename... FnArgs>
+            void operator()( FnArgs&... args ) {
+                internal::convert_and_call_impl<FnArgs...>::doit( my_kernel_func, my_kernel_func.my_ip, args... );
+            }
+        private:
+            struct kernel_func : tbb::internal::no_copy {
+                kernel_input_tuple &my_ip;
+                const streaming_node &my_node;
+                const args_storage& my_storage;
+                device_type my_device;
+
+                kernel_func( kernel_input_tuple &ip, const streaming_node &node, const args_storage& storage, device_type device )
+                    : my_ip( ip ), my_node( node ), my_storage( storage ), my_device( device )
+                {}
+
+                template <typename... FnArgs>
+                void operator()( FnArgs&... args ) {
+                    my_node.enqueue_kernel( my_ip, my_storage.my_factory, my_device, my_storage.my_kernel, args... );
+                }
+            } my_kernel_func;
+        };
+
+        template<typename FinalizeFn>
+        class run_finalize_func : tbb::internal::no_assign {
+        public:
+            run_finalize_func( kernel_input_tuple &ip, StreamFactory &factory, FinalizeFn fn )
+                : my_ip( ip ), my_finalize_func( factory, get<0>(ip).device(), fn ) {}
+
+            // It is immpossible to use Args... because a function pointer cannot be casted to a function reference implicitly.
+            // Allow the compiler to deduce types for function pointers automatically.
+            template <typename... FnArgs>
+            void operator()( FnArgs&... args ) {
+                internal::convert_and_call_impl<FnArgs...>::doit( my_finalize_func, my_ip, args... );
+            }
+        private:
+            kernel_input_tuple &my_ip;
+
+            struct finalize_func : tbb::internal::no_assign {
+                StreamFactory &my_factory;
+                device_type my_device;
+                FinalizeFn my_fn;
+
+                finalize_func( StreamFactory &factory, device_type device, FinalizeFn fn )
+                    : my_factory(factory), my_device(device), my_fn(fn) {}
+
+                template <typename... FnArgs>
+                void operator()( FnArgs&... args ) {
+                    my_factory.finalize( my_device, my_fn, args... );
+                }
+            } my_finalize_func;
+        };
+
+        template<typename FinalizeFn>
+        static run_finalize_func<FinalizeFn> make_run_finalize_func( kernel_input_tuple &ip, StreamFactory &factory, FinalizeFn fn ) {
+            return run_finalize_func<FinalizeFn>( ip, factory, fn );
+        }
+
+        class send_func : tbb::internal::no_assign {
+        public:
+            send_func( StreamFactory &factory, device_type d )
+                : my_factory(factory), my_device( d ) {}
+
+            template <typename... FnArgs>
+            void operator()( FnArgs&... args ) {
+                my_factory.send_data( my_device, args... );
+            }
+        private:
+            StreamFactory &my_factory;
+            device_type my_device;
+        };
+
+    public:
+        args_storage( const kernel_type& kernel, StreamFactory &f, Args&&... args )
+            : args_storage_base( kernel, f )
+            , my_args_pack( std::forward<Args>(args)... )
+        {}
+
+        args_storage( const args_storage &k ) : args_storage_base( k ), my_args_pack( k.my_args_pack ) {}
+
+        args_storage( const args_storage_base &k, Args&&... args ) : args_storage_base( k ), my_args_pack( std::forward<Args>(args)... ) {}
+
+        void enqueue( kernel_input_tuple &ip, output_ports_type &op, const streaming_node &n ) __TBB_override {
+            // Make const qualified args_pack (from non-const)
+            const args_pack_type& const_args_pack = my_args_pack;
+            // factory.enqure_kernel() gets
+            //  - 'ip' tuple elements by reference and updates it (and 'ip') with dependencies
+            //  - arguments (from my_args_pack) by const-reference via const_args_pack
+            tbb::internal::call( run_kernel_func( ip, n, *this ), const_args_pack );
+
+            if (! do_try_put( ip, op, input_sequence() ) ) {
+                graph& g = n.my_graph;
+                // No one message was passed to successors so set a callback to extend the graph lifetime until the kernel completion.
+                g.increment_wait_count();
+
+                // factory.finalize() gets
+                //  - 'ip' tuple elements by reference, so 'ip' might be changed
+                //  - arguments (from my_args_pack) by const-reference via const_args_pack
+                tbb::internal::call( make_run_finalize_func(ip, this->my_factory, [&g] {
+                    g.decrement_wait_count();
+                }), const_args_pack );
+            }
+        }
+
+        void send( device_type d ) __TBB_override {
+            // factory.send() gets arguments by reference and updates these arguments with dependencies
+            // (it gets but usually ignores port_ref-s)
+            tbb::internal::call( send_func( this->my_factory, d ), my_args_pack );
+        }
+
+        args_storage_base *clone() const __TBB_override {
+            // Create new args_storage with copying constructor.
+            return new args_storage<Args...>( *this );
+        }
+
+    private:
+        typedef tbb::internal::stored_pack<Args...> args_pack_type;
+        args_pack_type my_args_pack;
+    };
+
+    // Body for kernel_multifunction_node.
+    class kernel_body : tbb::internal::no_assign {
+    public:
+        kernel_body( const streaming_node &node ) : my_node( node ) {}
+
+        void operator()( kernel_input_tuple ip, typename args_storage_base::output_ports_type &op ) {
+            __TBB_ASSERT( (my_node.my_args_storage != NULL), "No arguments storage" );
+            // 'ip' is passed by value to create local copy for updating inside enqueue_kernel()
+            my_node.my_args_storage->enqueue( ip, op, my_node );
+        }
+    private:
+        const streaming_node &my_node;
+    };
+
+    template <typename T, typename U = typename internal::is_port_ref<T>::type >
+    struct wrap_to_async {
+        typedef T type; // Keep port_ref as it is
+    };
+
+    template <typename T>
+    struct wrap_to_async<T, std::false_type> {
+        typedef typename StreamFactory::template async_msg_type< typename tbb::internal::strip<T>::type > type;
+    };
+
+    template <typename... Args>
+    args_storage_base *make_args_storage(const args_storage_base& storage, Args&&... args) const {
+        // In this variadic template convert all simple types 'T' into 'async_msg_type<T>'
+        return new args_storage<Args...>(storage, std::forward<Args>(args)...);
+    }
+
+    void notify_new_device( device_type d ) {
+        my_args_storage->send( d );
+    }
+
+    template <typename ...Args>
+    void enqueue_kernel( kernel_input_tuple& ip, StreamFactory& factory, device_type device, const kernel_type& kernel, Args&... args ) const {
+        this->enqueue_kernel_impl( ip, factory, device, kernel, args... );
+    }
+
+public:
+    template <typename DeviceSelector>
+    streaming_node( graph &g, const kernel_type& kernel, DeviceSelector d, StreamFactory &f )
+        : base_type( g )
+        , my_indexer_node( g )
+        , my_device_selector( new device_selector<DeviceSelector>( d, *this, f ) )
+        , my_device_selector_node( g, serial, device_selector_body( my_device_selector ) )
+        , my_join_node( g )
+        , my_kernel_node( g, serial, kernel_body( *this ) )
+        // By default, streaming_node maps all its ports to the kernel arguments on a one-to-one basis.
+        , my_args_storage( make_args_storage( args_storage<>(kernel, f), port_ref<0, NUM_INPUTS - 1>() ) )
+    {
+        base_type::set_external_ports( get_input_ports(), get_output_ports() );
+        make_edges();
+    }
+
+    streaming_node( const streaming_node &node )
+        : base_type( node.my_graph )
+        , my_indexer_node( node.my_indexer_node )
+        , my_device_selector( node.my_device_selector->clone( *this ) )
+        , my_device_selector_node( node.my_graph, serial, device_selector_body( my_device_selector ) )
+        , my_join_node( node.my_join_node )
+        , my_kernel_node( node.my_graph, serial, kernel_body( *this ) )
+        , my_args_storage( node.my_args_storage->clone() )
+    {
+        base_type::set_external_ports( get_input_ports(), get_output_ports() );
+        make_edges();
+    }
+
+    streaming_node( streaming_node &&node )
+        : base_type( node.my_graph )
+        , my_indexer_node( std::move( node.my_indexer_node ) )
+        , my_device_selector( node.my_device_selector->clone(*this) )
+        , my_device_selector_node( node.my_graph, serial, device_selector_body( my_device_selector ) )
+        , my_join_node( std::move( node.my_join_node ) )
+        , my_kernel_node( node.my_graph, serial, kernel_body( *this ) )
+        , my_args_storage( node.my_args_storage )
+    {
+        base_type::set_external_ports( get_input_ports(), get_output_ports() );
+        make_edges();
+        // Set moving node mappers to NULL to prevent double deallocation.
+        node.my_args_storage = NULL;
+    }
+
+    ~streaming_node() {
+        if ( my_args_storage ) delete my_args_storage;
+        if ( my_device_selector ) delete my_device_selector;
+    }
+
+    template <typename... Args>
+    void set_args( Args&&... args ) {
+        // Copy the base class of args_storage and create new storage for "Args...".
+        args_storage_base * const new_args_storage = make_args_storage( *my_args_storage, typename wrap_to_async<Args>::type(std::forward<Args>(args))...);
+        delete my_args_storage;
+        my_args_storage = new_args_storage;
+    }
+
+protected:
+    void reset_node( reset_flags = rf_reset_protocol ) __TBB_override { __TBB_ASSERT( false, "Not implemented yet" ); }
+
+private:
+    indexer_node_type my_indexer_node;
+    device_selector_base *my_device_selector;
+    device_selector_node my_device_selector_node;
+    join_node<kernel_input_tuple, JP> my_join_node;
+    kernel_multifunction_node my_kernel_node;
+
+    args_storage_base *my_args_storage;
+};
+
+#endif // __TBB_PREVIEW_STREAMING_NODE
+#endif // __TBB_flow_graph_streaming_H
diff --git a/include/tbb/internal/_flow_graph_tagged_buffer_impl.h b/include/tbb/internal/_flow_graph_tagged_buffer_impl.h
index 2223416..46755fe 100644
--- a/include/tbb/internal/_flow_graph_tagged_buffer_impl.h
+++ b/include/tbb/internal/_flow_graph_tagged_buffer_impl.h
@@ -1,70 +1,68 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
-// tagged buffer that can expand, and can support as many deletions as additions
-// list-based, with elements of list held in array (for destruction management),
-// multiplicative hashing (like ets).  No synchronization built-in.
+// a hash table buffer that can expand, and can support as many deletions as
+// additions, list-based, with elements of list held in array (for destruction
+// management), multiplicative hashing (like ets).  No synchronization built-in.
 //
 
-#ifndef __TBB__flow_graph_tagged_buffer_impl_H
-#define __TBB__flow_graph_tagged_buffer_impl_H
+#ifndef __TBB__flow_graph_hash_buffer_impl_H
+#define __TBB__flow_graph_hash_buffer_impl_H
 
 #ifndef __TBB_flow_graph_H
 #error Do not #include this internal file directly; use public TBB headers instead.
 #endif
 
-// included in namespace tbb::flow::interface7::internal
+// included in namespace tbb::flow::interfaceX::internal
 
-template<typename T, typename U, size_t NoTagMark>
-struct otherData {
-    T t;
-    U next;
-    otherData() : t(NoTagMark), next(NULL) {}
-};
-
-template<typename TagType, typename ValueType, size_t NoTagMark>
+// elements in the table are a simple list; we need pointer to next element to
+// traverse the chain
+template<typename ValueType>
 struct buffer_element_type {
     // the second parameter below is void * because we can't forward-declare the type
     // itself, so we just reinterpret_cast below.
-    typedef typename aligned_pair<ValueType, otherData<TagType, void *, NoTagMark> >::type type;
+    typedef typename aligned_pair<ValueType, void *>::type type;
 };
 
 template
     <
-     typename TagType, 
-     typename ValueType, 
-     size_t   NoTagMark = 0,
-     typename Allocator=tbb::cache_aligned_allocator< typename buffer_element_type<TagType, ValueType, NoTagMark>::type >
+     typename Key,         // type of key within ValueType
+     typename ValueType,
+     typename ValueToKey,  // abstract method that returns "const Key" or "const Key&" given ValueType
+     typename HashCompare, // has hash and equal
+     typename Allocator=tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >
     >
-class tagged_buffer {
+class hash_buffer : public HashCompare {
 public:
     static const size_t INITIAL_SIZE = 8;  // initial size of the hash pointer table
-    static const TagType NO_TAG = TagType(NoTagMark);
     typedef ValueType value_type;
-    typedef typename buffer_element_type<TagType, ValueType, NO_TAG>::type element_type;
+    typedef typename buffer_element_type< value_type >::type element_type;
     typedef value_type *pointer_type;
     typedef element_type *list_array_type;  // array we manage manually
     typedef list_array_type *pointer_array_type;
     typedef typename Allocator::template rebind<list_array_type>::other pointer_array_allocator_type;
     typedef typename Allocator::template rebind<element_type>::other elements_array_allocator;
+    typedef typename tbb::internal::strip<Key>::type Knoref;
+
 private:
+    ValueToKey *my_key;
     size_t my_size;
     size_t nelements;
     pointer_array_type pointer_array;    // pointer_array[my_size]
@@ -73,17 +71,12 @@ private:
 
     size_t mask() { return my_size - 1; }
 
-    static size_t hash(TagType t) {
-        return uintptr_t(t)*tbb::internal::select_size_t_constant<0x9E3779B9,0x9E3779B97F4A7C15ULL>::value;
-    }
-
     void set_up_free_list( element_type **p_free_list, list_array_type la, size_t sz) {
         for(size_t i=0; i < sz - 1; ++i ) {  // construct free list
-            la[i].second.next = &(la[i+1]);
-            la[i].second.t = NO_TAG;
+            la[i].second = &(la[i+1]);
         }
-        la[sz-1].second.next = NULL;
-        *p_free_list = &(la[0]);
+        la[sz-1].second = NULL;
+        *p_free_list = (element_type *)&(la[0]);
     }
 
     // cleanup for exceptions
@@ -117,10 +110,10 @@ private:
             set_up_free_list(&new_free_list, new_elements_array, my_size );
 
             for(size_t i=0; i < my_size; ++i) {
-                for( element_type* op = pointer_array[i]; op; op = (element_type *)(op->second.next)) {
+                for( element_type* op = pointer_array[i]; op; op = (element_type *)(op->second)) {
                     value_type *ov = reinterpret_cast<value_type *>(&(op->first));
                     // could have std::move semantics
-                    internal_tagged_insert(new_pointer_array, new_size, new_free_list, op->second.t, *ov);
+                    internal_insert_with_key(new_pointer_array, new_size, new_free_list, *ov);
                 }
             }
             my_cleanup.my_pa = NULL;
@@ -137,15 +130,15 @@ private:
 
     // v should have perfect forwarding if std::move implemented.
     // we use this method to move elements in grow_array, so can't use class fields
-    void internal_tagged_insert( element_type **p_pointer_array, size_t p_sz, list_array_type &p_free_list,
-            const TagType t, const value_type &v) {
+    void internal_insert_with_key( element_type **p_pointer_array, size_t p_sz, list_array_type &p_free_list,
+            const value_type &v) {
         size_t l_mask = p_sz-1;
-        size_t h = hash(t) & l_mask;
+        __TBB_ASSERT(my_key, "Error: value-to-key functor not provided");
+        size_t h = this->hash((*my_key)(v)) & l_mask;
         __TBB_ASSERT(p_free_list, "Error: free list not set up.");
-        element_type* my_elem = p_free_list; p_free_list = (element_type *)(p_free_list->second.next);
-        my_elem->second.t = t;
+        element_type* my_elem = p_free_list; p_free_list = (element_type *)(p_free_list->second);
         (void) new(&(my_elem->first)) value_type(v);
-        my_elem->second.next = p_pointer_array[h];
+        my_elem->second = p_pointer_array[h];
         p_pointer_array[h] = my_elem;
     }
 
@@ -162,12 +155,11 @@ private:
             for(size_t i = 0; i < sz; ++i ) {
                 element_type *p_next;
                 for( element_type *p = pa[i]; p; p = p_next) {
-                    p_next = (element_type *)p->second.next;
-                    value_type *vp = reinterpret_cast<value_type *>(&(p->first));
-                    vp->~value_type();
+                    p_next = (element_type *)p->second;
+                    internal::punned_cast<value_type *>(&(p->first))->~value_type();
                 }
             }
-            pointer_array_allocator_type().deallocate(pa, sz); 
+            pointer_array_allocator_type().deallocate(pa, sz);
             pa = NULL;
         }
         // Separate test (if allocation of pa throws, el may be allocated.
@@ -181,12 +173,13 @@ private:
     }
 
 public:
-    tagged_buffer() : my_size(INITIAL_SIZE), nelements(0) {
+    hash_buffer() : my_key(NULL), my_size(INITIAL_SIZE), nelements(0) {
         internal_initialize_buffer();
     }
 
-    ~tagged_buffer() {
+    ~hash_buffer() {
         internal_free_buffer(pointer_array, elements_array, my_size, nelements);
+        if(my_key) delete my_key;
     }
 
     void reset() {
@@ -194,34 +187,43 @@ public:
         internal_initialize_buffer();
     }
 
-    bool tagged_insert(const TagType t, const value_type &v) {
-        pointer_type p;
-        if(tagged_find_ref(t, p)) {
+    // Take ownership of func object allocated with new.
+    // This method is only used internally, so can't be misused by user.
+    void set_key_func(ValueToKey *vtk) { my_key = vtk; }
+    // pointer is used to clone()
+    ValueToKey* get_key_func() { return my_key; }
+
+    bool insert_with_key(const value_type &v) {
+        pointer_type p = NULL;
+        __TBB_ASSERT(my_key, "Error: value-to-key functor not provided");
+        if(find_ref_with_key((*my_key)(v), p)) {
             p->~value_type();
             (void) new(p) value_type(v);  // copy-construct into the space
             return false;
         }
         ++nelements;
         if(nelements*2 > my_size) grow_array();
-        internal_tagged_insert(pointer_array, my_size, free_list, t, v);
+        internal_insert_with_key(pointer_array, my_size, free_list, v);
         return true;
     }
 
-    // returns reference to array element.v
-    bool tagged_find_ref(const TagType t, pointer_type &v) {
-        size_t i = hash(t) & mask();
-        for(element_type* p = pointer_array[i]; p; p = (element_type *)(p->second.next)) {
-            if(p->second.t == t) {
-                v = reinterpret_cast<pointer_type>(&(p->first));
+    // returns true and sets v to array element if found, else returns false.
+    bool find_ref_with_key(const Knoref& k, pointer_type &v) {
+        size_t i = this->hash(k) & mask();
+        for(element_type* p = pointer_array[i]; p; p = (element_type *)(p->second)) {
+            pointer_type pv = reinterpret_cast<pointer_type>(&(p->first));
+            __TBB_ASSERT(my_key, "Error: value-to-key functor not provided");
+            if(this->equal((*my_key)(*pv), k)) {
+                v = pv;
                 return true;
             }
         }
         return false;
     }
 
-    bool tagged_find( const TagType t, value_type &v) {
+    bool find_with_key( const Knoref& k, value_type &v) {
         value_type *p;
-        if(tagged_find_ref(t, p)) {
+        if(find_ref_with_key(k, p)) {
             v = *p;
             return true;
         }
@@ -229,23 +231,23 @@ public:
             return false;
     }
 
-    void tagged_delete(const TagType t) {
-        size_t h = hash(t) & mask();
+    void delete_with_key(const Knoref& k) {
+        size_t h = this->hash(k) & mask();
         element_type* prev = NULL;
-        for(element_type* p = pointer_array[h]; p; prev = p, p = (element_type *)(p->second.next)) {
-            if(p->second.t == t) {
-                value_type *vp = reinterpret_cast<value_type *>(&(p->first));
+        for(element_type* p = pointer_array[h]; p; prev = p, p = (element_type *)(p->second)) {
+            value_type *vp = reinterpret_cast<value_type *>(&(p->first));
+            __TBB_ASSERT(my_key, "Error: value-to-key functor not provided");
+            if(this->equal((*my_key)(*vp), k)) {
                 vp->~value_type();
-                p->second.t = NO_TAG;
-                if(prev) prev->second.next = p->second.next;
-                else pointer_array[h] = (element_type *)(p->second.next);
-                p->second.next = free_list;
+                if(prev) prev->second = p->second;
+                else pointer_array[h] = (element_type *)(p->second);
+                p->second = free_list;
                 free_list = p;
                 --nelements;
                 return;
             }
         }
-        __TBB_ASSERT(false, "tag not found for delete");
+        __TBB_ASSERT(false, "key not found for delete");
     }
 };
-#endif // __TBB__flow_graph_tagged_buffer_impl_H
+#endif // __TBB__flow_graph_hash_buffer_impl_H
diff --git a/include/tbb/internal/_flow_graph_trace_impl.h b/include/tbb/internal/_flow_graph_trace_impl.h
index 3493e89..b798888 100644
--- a/include/tbb/internal/_flow_graph_trace_impl.h
+++ b/include/tbb/internal/_flow_graph_trace_impl.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef _FGT_GRAPH_TRACE_IMPL_H
@@ -36,129 +36,104 @@ static inline void fgt_internal_create_output_port( void *node, void *p, string_
     itt_make_task_group( ITT_DOMAIN_FLOW, p, FLOW_OUTPUT_PORT, node, FLOW_NODE, name_index );
 }
 
-template < typename TypesTuple, typename PortsTuple, int N >
-struct fgt_internal_input_helper {
-    static void register_port( void *node, PortsTuple &ports ) {
-        fgt_internal_create_input_port( node, (void*)static_cast< tbb::flow::interface7::receiver< typename tbb::flow::tuple_element<N-1,TypesTuple>::type > * >(&(tbb::flow::get<N-1>(ports))),
-                                        static_cast<tbb::internal::string_index>(FLOW_INPUT_PORT_0 + N - 1) );
-        fgt_internal_input_helper<TypesTuple, PortsTuple, N-1>::register_port( node, ports );
-    } 
-};
-
-template < typename TypesTuple, typename PortsTuple >
-struct fgt_internal_input_helper<TypesTuple,PortsTuple,1> {
-    static void register_port( void *node, PortsTuple &ports ) {
-        fgt_internal_create_input_port( node, (void*)static_cast< tbb::flow::interface7::receiver< typename tbb::flow::tuple_element<0,TypesTuple>::type > * >(&(tbb::flow::get<0>(ports))),
-                                        FLOW_INPUT_PORT_0 );
-    } 
-};
+template<typename InputType>
+void register_input_port(void *node, tbb::flow::receiver<InputType>* port, string_index name_index) {
+    //TODO: Make fgt_internal_create_input_port a function template?
+    fgt_internal_create_input_port( node, port, name_index);
+}
 
-//for cases where the ports tuple are already receivers
 template < typename PortsTuple, int N >
-struct fgt_internal_input_helper< PortsTuple, PortsTuple, N> {
+struct fgt_internal_input_helper {
     static void register_port( void *node, PortsTuple &ports ) {
-        fgt_internal_create_input_port( node,&(tbb::flow::get<N-1>(ports)), static_cast<tbb::internal::string_index>(FLOW_INPUT_PORT_0 + N - 1) );
-        fgt_internal_input_helper<PortsTuple, PortsTuple, N-1>::register_port( node, ports );
-    } 
+        register_input_port( node, &(tbb::flow::get<N-1>(ports)), static_cast<tbb::internal::string_index>(FLOW_INPUT_PORT_0 + N - 1) );
+        fgt_internal_input_helper<PortsTuple, N-1>::register_port( node, ports );
+    }
 };
 
 template < typename PortsTuple >
-struct fgt_internal_input_helper<PortsTuple, PortsTuple,1> {
-    static void register_port( void *node, PortsTuple &ports ) {
-        fgt_internal_create_input_port( node, &(tbb::flow::get<0>(ports)), FLOW_INPUT_PORT_0 );
-    } 
-};
-
-template < typename TypesTuple, typename PortsTuple, int N >
-struct fgt_internal_output_helper {
+struct fgt_internal_input_helper<PortsTuple, 1> {
     static void register_port( void *node, PortsTuple &ports ) {
-        fgt_internal_create_output_port( node, (void*)static_cast< tbb::flow::interface7::sender< typename tbb::flow::tuple_element<N-1,TypesTuple>::type > * >(&(tbb::flow::get<N-1>(ports))),
-                                         static_cast<tbb::internal::string_index>(FLOW_OUTPUT_PORT_0 + N - 1) ); 
-        fgt_internal_output_helper<TypesTuple, PortsTuple, N-1>::register_port( node, ports );
-    } 
+        register_input_port( node, &(tbb::flow::get<0>(ports)), FLOW_INPUT_PORT_0 );
+    }
 };
 
-template < typename TypesTuple, typename PortsTuple >
-struct fgt_internal_output_helper<TypesTuple,PortsTuple,1> {
-    static void register_port( void *node, PortsTuple &ports ) {
-        fgt_internal_create_output_port( node, (void*)static_cast< tbb::flow::interface7::sender< typename tbb::flow::tuple_element<0,TypesTuple>::type > * >(&(tbb::flow::get<0>(ports))),
-                                         FLOW_OUTPUT_PORT_0 ); 
-    } 
-};
+template<typename OutputType>
+void register_output_port(void *node, tbb::flow::sender<OutputType>* port, string_index name_index) {
+    //TODO: Make fgt_internal_create_output_port a function template?
+    fgt_internal_create_output_port( node, static_cast<void *>(port), name_index);
+}
 
-//for cases where the ports tuple are already senders
 template < typename PortsTuple, int N >
-struct fgt_internal_output_helper<PortsTuple, PortsTuple, N> {
+struct fgt_internal_output_helper {
     static void register_port( void *node, PortsTuple &ports ) {
-        fgt_internal_create_output_port( node,&(tbb::flow::get<N-1>(ports)),  static_cast<tbb::internal::string_index>(FLOW_OUTPUT_PORT_0 + N - 1) ); 
-        fgt_internal_output_helper<PortsTuple, PortsTuple, N-1>::register_port( node, ports );
-    } 
+        register_output_port( node, &(tbb::flow::get<N-1>(ports)), static_cast<tbb::internal::string_index>(FLOW_OUTPUT_PORT_0 + N - 1) );
+        fgt_internal_output_helper<PortsTuple, N-1>::register_port( node, ports );
+    }
 };
 
 template < typename PortsTuple >
-struct fgt_internal_output_helper<PortsTuple,PortsTuple,1> {
+struct fgt_internal_output_helper<PortsTuple,1> {
     static void register_port( void *node, PortsTuple &ports ) {
-        fgt_internal_create_output_port( node,&(tbb::flow::get<0>(ports)), FLOW_OUTPUT_PORT_0 ); 
-    } 
+        register_output_port( node, &(tbb::flow::get<0>(ports)), FLOW_OUTPUT_PORT_0 );
+    }
 };
 
 template< typename NodeType >
 void fgt_multioutput_node_desc( const NodeType *node, const char *desc ) {
-    void *addr =  (void *)( static_cast< tbb::flow::interface7::receiver< typename NodeType::input_type > * >(const_cast< NodeType *>(node)) ); 
-    itt_metadata_str_add( ITT_DOMAIN_FLOW, addr, FLOW_NODE, FLOW_OBJECT_NAME, desc ); 
+    void *addr =  (void *)( static_cast< tbb::flow::receiver< typename NodeType::input_type > * >(const_cast< NodeType *>(node)) );
+    itt_metadata_str_add( ITT_DOMAIN_FLOW, addr, FLOW_NODE, FLOW_OBJECT_NAME, desc );
 }
 
 template< typename NodeType >
 void fgt_multiinput_multioutput_node_desc( const NodeType *node, const char *desc ) {
-    void *addr =  (void *)(node); 
-    itt_metadata_str_add( ITT_DOMAIN_FLOW, addr, FLOW_NODE, FLOW_OBJECT_NAME, desc ); 
+    void *addr =  const_cast<NodeType *>(node);
+    itt_metadata_str_add( ITT_DOMAIN_FLOW, addr, FLOW_NODE, FLOW_OBJECT_NAME, desc );
 }
 
 template< typename NodeType >
 static inline void fgt_node_desc( const NodeType *node, const char *desc ) {
-    void *addr =  (void *)( static_cast< tbb::flow::interface7::sender< typename NodeType::output_type > * >(const_cast< NodeType *>(node)) ); 
-    itt_metadata_str_add( ITT_DOMAIN_FLOW, addr, FLOW_NODE, FLOW_OBJECT_NAME, desc ); 
+    void *addr =  (void *)( static_cast< tbb::flow::sender< typename NodeType::output_type > * >(const_cast< NodeType *>(node)) );
+    itt_metadata_str_add( ITT_DOMAIN_FLOW, addr, FLOW_NODE, FLOW_OBJECT_NAME, desc );
 }
 
 static inline void fgt_graph_desc( void *g, const char *desc ) {
-    itt_metadata_str_add( ITT_DOMAIN_FLOW, g, FLOW_GRAPH, FLOW_OBJECT_NAME, desc ); 
+    itt_metadata_str_add( ITT_DOMAIN_FLOW, g, FLOW_GRAPH, FLOW_OBJECT_NAME, desc );
 }
 
 static inline void fgt_body( void *node, void *body ) {
     itt_relation_add( ITT_DOMAIN_FLOW, body, FLOW_BODY, __itt_relation_is_child_of, node, FLOW_NODE );
 }
 
-template< typename OutputTuple, int N, typename PortsTuple >
+template< int N, typename PortsTuple >
 static inline void fgt_multioutput_node( string_index t, void *g, void *input_port, PortsTuple &ports ) {
-    itt_make_task_group( ITT_DOMAIN_FLOW, input_port, FLOW_NODE, g, FLOW_GRAPH, t ); 
-    fgt_internal_create_input_port( input_port, input_port, FLOW_INPUT_PORT_0 ); 
-    fgt_internal_output_helper<OutputTuple, PortsTuple, N>::register_port( input_port, ports ); 
+    itt_make_task_group( ITT_DOMAIN_FLOW, input_port, FLOW_NODE, g, FLOW_GRAPH, t );
+    fgt_internal_create_input_port( input_port, input_port, FLOW_INPUT_PORT_0 );
+    fgt_internal_output_helper<PortsTuple, N>::register_port( input_port, ports );
 }
 
-template< typename OutputTuple, int N, typename PortsTuple >
+template< int N, typename PortsTuple >
 static inline void fgt_multioutput_node_with_body( string_index t, void *g, void *input_port, PortsTuple &ports, void *body ) {
-    itt_make_task_group( ITT_DOMAIN_FLOW, input_port, FLOW_NODE, g, FLOW_GRAPH, t ); 
-    fgt_internal_create_input_port( input_port, input_port, FLOW_INPUT_PORT_0 ); 
-    fgt_internal_output_helper<OutputTuple, PortsTuple, N>::register_port( input_port, ports ); 
+    itt_make_task_group( ITT_DOMAIN_FLOW, input_port, FLOW_NODE, g, FLOW_GRAPH, t );
+    fgt_internal_create_input_port( input_port, input_port, FLOW_INPUT_PORT_0 );
+    fgt_internal_output_helper<PortsTuple, N>::register_port( input_port, ports );
     fgt_body( input_port, body );
 }
 
-
-template< typename InputTuple, int N, typename PortsTuple >
+template< int N, typename PortsTuple >
 static inline void fgt_multiinput_node( string_index t, void *g, PortsTuple &ports, void *output_port) {
-    itt_make_task_group( ITT_DOMAIN_FLOW, output_port, FLOW_NODE, g, FLOW_GRAPH, t ); 
-    fgt_internal_create_output_port( output_port, output_port, FLOW_OUTPUT_PORT_0 ); 
-    fgt_internal_input_helper<InputTuple, PortsTuple, N>::register_port( output_port, ports ); 
+    itt_make_task_group( ITT_DOMAIN_FLOW, output_port, FLOW_NODE, g, FLOW_GRAPH, t );
+    fgt_internal_create_output_port( output_port, output_port, FLOW_OUTPUT_PORT_0 );
+    fgt_internal_input_helper<PortsTuple, N>::register_port( output_port, ports );
 }
 
 static inline void fgt_node( string_index t, void *g, void *output_port ) {
-    itt_make_task_group( ITT_DOMAIN_FLOW, output_port, FLOW_NODE, g, FLOW_GRAPH, t ); 
-    fgt_internal_create_output_port( output_port, output_port, FLOW_OUTPUT_PORT_0 ); 
+    itt_make_task_group( ITT_DOMAIN_FLOW, output_port, FLOW_NODE, g, FLOW_GRAPH, t );
+    fgt_internal_create_output_port( output_port, output_port, FLOW_OUTPUT_PORT_0 );
 }
 
 static inline void fgt_node_with_body( string_index t, void *g, void *output_port, void *body ) {
-    itt_make_task_group( ITT_DOMAIN_FLOW, output_port, FLOW_NODE, g, FLOW_GRAPH, t ); 
-    fgt_internal_create_output_port( output_port, output_port, FLOW_OUTPUT_PORT_0 ); 
+    itt_make_task_group( ITT_DOMAIN_FLOW, output_port, FLOW_NODE, g, FLOW_GRAPH, t );
+    fgt_internal_create_output_port( output_port, output_port, FLOW_OUTPUT_PORT_0 );
     fgt_body( output_port, body );
 }
 
@@ -170,13 +145,13 @@ static inline void fgt_node( string_index t, void *g, void *input_port, void *ou
 
 static inline void fgt_node_with_body( string_index t, void *g, void *input_port, void *output_port, void *body ) {
     fgt_node_with_body( t, g, output_port, body );
-    fgt_internal_create_input_port( output_port, input_port, FLOW_INPUT_PORT_0 ); 
+    fgt_internal_create_input_port( output_port, input_port, FLOW_INPUT_PORT_0 );
 }
 
 
 static inline void  fgt_node( string_index t, void *g, void *input_port, void *decrement_port, void *output_port ) {
     fgt_node( t, g, input_port, output_port );
-    fgt_internal_create_input_port( output_port, decrement_port, FLOW_INPUT_PORT_1 ); 
+    fgt_internal_create_input_port( output_port, decrement_port, FLOW_INPUT_PORT_1 );
 }
 
 static inline void fgt_make_edge( void *output_port, void *input_port ) {
@@ -188,17 +163,33 @@ static inline void fgt_remove_edge( void *output_port, void *input_port ) {
 }
 
 static inline void fgt_graph( void *g ) {
-    itt_make_task_group( ITT_DOMAIN_FLOW, g, FLOW_GRAPH, NULL, FLOW_NULL, FLOW_GRAPH ); 
+    itt_make_task_group( ITT_DOMAIN_FLOW, g, FLOW_GRAPH, NULL, FLOW_NULL, FLOW_GRAPH );
 }
 
 static inline void fgt_begin_body( void *body ) {
-    itt_task_begin( ITT_DOMAIN_FLOW, body, FLOW_BODY, NULL, FLOW_NULL, FLOW_NULL );
+    itt_task_begin( ITT_DOMAIN_FLOW, body, FLOW_BODY, NULL, FLOW_NULL, FLOW_BODY );
 }
 
 static inline void fgt_end_body( void * ) {
     itt_task_end( ITT_DOMAIN_FLOW );
 }
 
+static inline void fgt_async_try_put_begin( void *node, void *port ) {
+    itt_task_begin( ITT_DOMAIN_FLOW, port, FLOW_OUTPUT_PORT, node, FLOW_NODE, FLOW_OUTPUT_PORT );
+}
+
+static inline void fgt_async_try_put_end( void *, void * ) {
+    itt_task_end( ITT_DOMAIN_FLOW );
+}
+
+static inline void fgt_async_reserve( void *node, void *graph ) {
+    itt_region_begin( ITT_DOMAIN_FLOW, node, FLOW_NODE, graph, FLOW_GRAPH, FLOW_NULL );
+}
+
+static inline void fgt_async_commit( void *node, void *graph ) {
+    itt_region_end( ITT_DOMAIN_FLOW, node, FLOW_NODE );
+}
+
 #else // TBB_PREVIEW_FLOW_GRAPH_TRACE
 
 static inline void fgt_graph( void * /*g*/ ) { }
@@ -213,17 +204,17 @@ static inline void fgt_graph_desc( void * /*g*/, const char * /*desc*/ ) { }
 
 static inline void fgt_body( void * /*node*/, void * /*body*/ ) { }
 
-template< typename OutputTuple, int N, typename PortsTuple > 
+template< int N, typename PortsTuple >
 static inline void fgt_multioutput_node( string_index /*t*/, void * /*g*/, void * /*input_port*/, PortsTuple & /*ports*/ ) { }
 
-template< typename OutputTuple, int N, typename PortsTuple >
+template< int N, typename PortsTuple >
 static inline void fgt_multioutput_node_with_body( string_index /*t*/, void * /*g*/, void * /*input_port*/, PortsTuple & /*ports*/, void * /*body*/ ) { }
 
-template< typename InputTuple, int N, typename PortsTuple >
+template< int N, typename PortsTuple >
 static inline void fgt_multiinput_node( string_index /*t*/, void * /*g*/, PortsTuple & /*ports*/, void * /*output_port*/ ) { }
 
-static inline void fgt_node( string_index /*t*/, void * /*g*/, void * /*output_port*/ ) { } 
-static inline void fgt_node( string_index /*t*/, void * /*g*/, void * /*input_port*/, void * /*output_port*/ ) { } 
+static inline void fgt_node( string_index /*t*/, void * /*g*/, void * /*output_port*/ ) { }
+static inline void fgt_node( string_index /*t*/, void * /*g*/, void * /*input_port*/, void * /*output_port*/ ) { }
 static inline void  fgt_node( string_index /*t*/, void * /*g*/, void * /*input_port*/, void * /*decrement_port*/, void * /*output_port*/ ) { }
 
 static inline void fgt_node_with_body( string_index /*t*/, void * /*g*/, void * /*output_port*/, void * /*body*/ ) { }
@@ -234,6 +225,10 @@ static inline void fgt_remove_edge( void * /*output_port*/, void * /*input_port*
 
 static inline void fgt_begin_body( void * /*body*/ ) { }
 static inline void fgt_end_body( void *  /*body*/) { }
+static inline void fgt_async_try_put_begin( void * /*node*/, void * /*port*/ ) { }
+static inline void fgt_async_try_put_end( void * /*node*/ , void * /*port*/ ) { }
+static inline void fgt_async_reserve( void * /*node*/, void * /*graph*/ ) { }
+static inline void fgt_async_commit( void * /*node*/, void * /*graph*/ ) { }
 
 #endif // TBB_PREVIEW_FLOW_GRAPH_TRACE
 
diff --git a/include/tbb/internal/_flow_graph_types_impl.h b/include/tbb/internal/_flow_graph_types_impl.h
index 23cddec..73b5f54 100644
--- a/include/tbb/internal/_flow_graph_types_impl.h
+++ b/include/tbb/internal/_flow_graph_types_impl.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB__flow_graph_types_impl_H
@@ -25,14 +25,38 @@
 #error Do not #include this internal file directly; use public TBB headers instead.
 #endif
 
-// included in namespace tbb::flow::interface7
+// included in namespace tbb::flow::interfaceX
 
 namespace internal {
-// wrap each element of a tuple in a template, and make a tuple of the result.
 
+    // the change to key_matching (adding a K and KHash template parameter, making it a class)
+    // means we have to pass this data to the key_matching_port.  All the ports have only one
+    // template parameter, so we have to wrap the following types in a trait:
+    //
+    //    . K == key_type
+    //    . KHash == hash and compare for Key
+    //    . TtoK == function_body that given an object of T, returns its K
+    //    . T == type accepted by port, and stored in the hash table
+    //
+    // The port will have an additional parameter on node construction, which is a function_body
+    // that accepts a const T& and returns a K which is the field in T which is its K.
+    template<typename Kp, typename KHashp, typename Tp>
+    struct KeyTrait {
+        typedef Kp K;
+        typedef Tp T;
+        typedef internal::type_to_key_function_body<T,K> TtoK;
+        typedef KHashp KHash;
+    };
+
+// wrap each element of a tuple in a template, and make a tuple of the result.
     template<int N, template<class> class PT, typename TypeTuple>
     struct wrap_tuple_elements;
 
+    // A wrapper that generates the traits needed for each port of a key-matching join,
+    // and the type of the tuple of input ports.
+    template<int N, template<class> class PT, typename KeyTraits, typename TypeTuple>
+    struct wrap_key_tuple_elements;
+
     template<template<class> class PT, typename TypeTuple>
     struct wrap_tuple_elements<1, PT, TypeTuple> {
         typedef typename tbb::flow::tuple<
@@ -40,6 +64,14 @@ namespace internal {
             type;
     };
 
+    template<template<class> class PT, typename KeyTraits, typename TypeTuple>
+    struct wrap_key_tuple_elements<1, PT, KeyTraits, TypeTuple > {
+        typedef typename KeyTraits::key_type K;
+        typedef typename KeyTraits::hash_compare_type KHash;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;
+        typedef typename tbb::flow::tuple< PT<KeyTrait0> > type;
+    };
+
     template<template<class> class PT, typename TypeTuple>
     struct wrap_tuple_elements<2, PT, TypeTuple> {
         typedef typename tbb::flow::tuple<
@@ -48,6 +80,15 @@ namespace internal {
             type;
     };
 
+    template<template<class> class PT, typename KeyTraits, typename TypeTuple>
+    struct wrap_key_tuple_elements<2, PT, KeyTraits, TypeTuple> {
+        typedef typename KeyTraits::key_type K;
+        typedef typename KeyTraits::hash_compare_type KHash;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;
+        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1> > type;
+    };
+
     template<template<class> class PT, typename TypeTuple>
     struct wrap_tuple_elements<3, PT, TypeTuple> {
         typedef typename tbb::flow::tuple<
@@ -57,6 +98,16 @@ namespace internal {
             type;
     };
 
+    template<template<class> class PT, typename KeyTraits, typename TypeTuple>
+    struct wrap_key_tuple_elements<3, PT, KeyTraits, TypeTuple> {
+        typedef typename KeyTraits::key_type K;
+        typedef typename KeyTraits::hash_compare_type KHash;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;
+        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2> > type;
+    };
+
     template<template<class> class PT, typename TypeTuple>
     struct wrap_tuple_elements<4, PT, TypeTuple> {
         typedef typename tbb::flow::tuple<
@@ -67,6 +118,18 @@ namespace internal {
             type;
     };
 
+    template<template<class> class PT, typename KeyTraits, typename TypeTuple>
+    struct wrap_key_tuple_elements<4, PT, KeyTraits, TypeTuple> {
+        typedef typename KeyTraits::key_type K;
+        typedef typename KeyTraits::hash_compare_type KHash;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;
+        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>,
+                PT<KeyTrait3> > type;
+    };
+
     template<template<class> class PT, typename TypeTuple>
     struct wrap_tuple_elements<5, PT, TypeTuple> {
         typedef typename tbb::flow::tuple<
@@ -78,6 +141,19 @@ namespace internal {
             type;
     };
 
+    template<template<class> class PT, typename KeyTraits, typename TypeTuple>
+    struct wrap_key_tuple_elements<5, PT, KeyTraits, TypeTuple> {
+        typedef typename KeyTraits::key_type K;
+        typedef typename KeyTraits::hash_compare_type KHash;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<4,TypeTuple>::type> KeyTrait4;
+        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>,
+                PT<KeyTrait3>, PT<KeyTrait4> > type;
+    };
+
 #if __TBB_VARIADIC_MAX >= 6
     template<template<class> class PT, typename TypeTuple>
     struct wrap_tuple_elements<6, PT, TypeTuple> {
@@ -90,6 +166,20 @@ namespace internal {
                 PT<typename tbb::flow::tuple_element<5,TypeTuple>::type> >
             type;
     };
+
+    template<template<class> class PT, typename KeyTraits, typename TypeTuple>
+    struct wrap_key_tuple_elements<6, PT, KeyTraits, TypeTuple> {
+        typedef typename KeyTraits::key_type K;
+        typedef typename KeyTraits::hash_compare_type KHash;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<4,TypeTuple>::type> KeyTrait4;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<5,TypeTuple>::type> KeyTrait5;
+        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,
+                PT<KeyTrait4>, PT<KeyTrait5> > type;
+    };
 #endif
 
 #if __TBB_VARIADIC_MAX >= 7
@@ -105,6 +195,21 @@ namespace internal {
                 PT<typename tbb::flow::tuple_element<6,TypeTuple>::type> >
             type;
     };
+
+    template<template<class> class PT, typename KeyTraits, typename TypeTuple>
+    struct wrap_key_tuple_elements<7, PT, KeyTraits, TypeTuple> {
+        typedef typename KeyTraits::key_type K;
+        typedef typename KeyTraits::hash_compare_type KHash;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<4,TypeTuple>::type> KeyTrait4;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<5,TypeTuple>::type> KeyTrait5;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<6,TypeTuple>::type> KeyTrait6;
+        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,
+                PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6> > type;
+    };
 #endif
 
 #if __TBB_VARIADIC_MAX >= 8
@@ -121,6 +226,22 @@ namespace internal {
                 PT<typename tbb::flow::tuple_element<7,TypeTuple>::type> >
             type;
     };
+
+    template<template<class> class PT, typename KeyTraits, typename TypeTuple>
+    struct wrap_key_tuple_elements<8, PT, KeyTraits, TypeTuple> {
+        typedef typename KeyTraits::key_type K;
+        typedef typename KeyTraits::hash_compare_type KHash;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<4,TypeTuple>::type> KeyTrait4;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<5,TypeTuple>::type> KeyTrait5;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<6,TypeTuple>::type> KeyTrait6;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<7,TypeTuple>::type> KeyTrait7;
+        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,
+                PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6>, PT<KeyTrait7> > type;
+    };
 #endif
 
 #if __TBB_VARIADIC_MAX >= 9
@@ -138,6 +259,23 @@ namespace internal {
                 PT<typename tbb::flow::tuple_element<8,TypeTuple>::type> >
             type;
     };
+
+    template<template<class> class PT, typename KeyTraits, typename TypeTuple>
+    struct wrap_key_tuple_elements<9, PT, KeyTraits, TypeTuple> {
+        typedef typename KeyTraits::key_type K;
+        typedef typename KeyTraits::hash_compare_type KHash;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<4,TypeTuple>::type> KeyTrait4;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<5,TypeTuple>::type> KeyTrait5;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<6,TypeTuple>::type> KeyTrait6;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<7,TypeTuple>::type> KeyTrait7;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<8,TypeTuple>::type> KeyTrait8;
+        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,
+                PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6>, PT<KeyTrait7>, PT<KeyTrait8> > type;
+    };
 #endif
 
 #if __TBB_VARIADIC_MAX >= 10
@@ -156,8 +294,87 @@ namespace internal {
                 PT<typename tbb::flow::tuple_element<9,TypeTuple>::type> >
             type;
     };
+
+    template<template<class> class PT, typename KeyTraits, typename TypeTuple>
+    struct wrap_key_tuple_elements<10, PT, KeyTraits, TypeTuple> {
+        typedef typename KeyTraits::key_type K;
+        typedef typename KeyTraits::hash_compare_type KHash;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<4,TypeTuple>::type> KeyTrait4;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<5,TypeTuple>::type> KeyTrait5;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<6,TypeTuple>::type> KeyTrait6;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<7,TypeTuple>::type> KeyTrait7;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<8,TypeTuple>::type> KeyTrait8;
+        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<9,TypeTuple>::type> KeyTrait9;
+        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,
+                PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6>, PT<KeyTrait7>, PT<KeyTrait8>,
+                PT<KeyTrait9> > type;
+    };
 #endif
 
+#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT
+    template< int... S > class sequence {};
+
+    template< int N, int... S >
+    struct make_sequence : make_sequence < N - 1, N - 1, S... > {};
+
+    template< int... S >
+    struct make_sequence < 0, S... > {
+        typedef sequence<S...> type;
+    };
+#endif /* __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT */
+
+#if __TBB_INITIALIZER_LISTS_PRESENT
+    // Until C++14 std::initializer_list does not guarantee life time of contained objects.
+    template <typename T>
+    class initializer_list_wrapper {
+    public:
+        typedef T value_type;
+        typedef const T& reference;
+        typedef const T& const_reference;
+        typedef size_t size_type;
+
+        typedef T* iterator;
+        typedef const T* const_iterator;
+
+        initializer_list_wrapper( std::initializer_list<T> il ) __TBB_NOEXCEPT( true ) : my_begin( static_cast<T*>(malloc( il.size()*sizeof( T ) )) ) {
+            iterator dst = my_begin;
+            for ( typename std::initializer_list<T>::const_iterator src = il.begin(); src != il.end(); ++src )
+                new (dst++) T( *src );
+            my_end = dst;
+        }
+
+        initializer_list_wrapper( const initializer_list_wrapper<T>& ilw ) __TBB_NOEXCEPT( true ) : my_begin( static_cast<T*>(malloc( ilw.size()*sizeof( T ) )) ) {
+            iterator dst = my_begin;
+            for ( typename std::initializer_list<T>::const_iterator src = ilw.begin(); src != ilw.end(); ++src )
+                new (dst++) T( *src );
+            my_end = dst;
+        }
+
+#if __TBB_CPP11_RVALUE_REF_PRESENT
+        initializer_list_wrapper( initializer_list_wrapper<T>&& ilw ) __TBB_NOEXCEPT( true ) : my_begin( ilw.my_begin ), my_end( ilw.my_end ) {
+            ilw.my_begin = ilw.my_end = NULL;
+        }
+#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */
+
+        ~initializer_list_wrapper() {
+            if ( my_begin )
+                free( my_begin );
+        }
+
+        const_iterator begin() const __TBB_NOEXCEPT(true) { return my_begin; }
+        const_iterator end() const __TBB_NOEXCEPT(true) { return my_end; }
+        size_t size() const __TBB_NOEXCEPT(true) { return (size_t)(my_end - my_begin); }
+
+    private:
+        iterator my_begin;
+        iterator my_end;
+    };
+#endif /* __TBB_INITIALIZER_LISTS_PRESENT */
+
 //! type mimicking std::pair but with trailing fill to ensure each element of an array
 //* will have the correct alignment
     template<typename T1, typename T2, size_t REM>
@@ -234,12 +451,12 @@ public:
     explicit Wrapper( const T& other ) : value_space(other) { }
     explicit Wrapper(const Wrapper& other) : value_space(other.value_space) { }
 
-    /*override*/void CopyTo(void* newSpace) const {
+    void CopyTo(void* newSpace) const __TBB_override {
         _unwind_space guard((pointer_type)newSpace);
         (void) new(newSpace) Wrapper(value_space);
         guard.space = NULL;
     }
-    /*override*/~Wrapper() { }
+    ~Wrapper() { }
 };
 
 // specialization for array objects
@@ -302,11 +519,11 @@ public:
         guard.space = NULL;
     }
 
-    /*override*/void CopyTo(void* newSpace) const {
+    void CopyTo(void* newSpace) const __TBB_override {
         (void) new(newSpace) Wrapper(*this);  // exceptions handled in copy constructor
     }
 
-    /*override*/~Wrapper() {
+    ~Wrapper() {
         // have to destroy explicitly in reverse order
         pointer_type vp = reinterpret_cast<pointer_type>(&value_space);
         for(size_t i = N; i > 0 ; --i ) vp[i-1].~value_type();
@@ -379,7 +596,7 @@ struct do_if<T, false> {
 
 using tbb::internal::punned_cast;
 struct tagged_null_type {};
-template<typename TagType, typename T0, typename T1=tagged_null_type, typename T2=tagged_null_type, typename T3=tagged_null_type, 
+template<typename TagType, typename T0, typename T1=tagged_null_type, typename T2=tagged_null_type, typename T3=tagged_null_type,
                            typename T4=tagged_null_type, typename T5=tagged_null_type, typename T6=tagged_null_type,
                            typename T7=tagged_null_type, typename T8=tagged_null_type, typename T9=tagged_null_type>
 class tagged_msg {
@@ -400,7 +617,7 @@ class tagged_msg {
                   #if __TBB_VARIADIC_MAX >= 10
                   , T9
                   #endif
-                  > Tuple;   
+                  > Tuple;
 
 private:
     class variant {
@@ -460,11 +677,11 @@ private:
     variant my_msg;
 
 public:
-    tagged_msg(): my_tag(TagType(~0)), my_msg(){} 
+    tagged_msg(): my_tag(TagType(~0)), my_msg(){}
 
     template<typename T, typename R>
     tagged_msg(T const &index, R const &value) : my_tag(index), my_msg(value) {}
-    
+
     #if __TBB_CONST_REF_TO_ARRAY_TEMPLATE_PARAM_BROKEN
     template<typename T, typename R, size_t N>
     tagged_msg(T const &index,  R (&value)[N]) : my_tag(index), my_msg(value) {}
@@ -489,6 +706,8 @@ const V& cast_to(T const &t) { return t.template cast_to<V>(); }
 template<typename V, typename T>
 bool is_a(T const &t) { return t.template is_a<V>(); }
 
+enum op_stat { WAIT = 0, SUCCEEDED, FAILED };
+
 }  // namespace internal
 
 #endif  /* __TBB__flow_graph_types_impl_H */
diff --git a/include/tbb/internal/_mutex_padding.h b/include/tbb/internal/_mutex_padding.h
index 53d164f..6c1d9b5 100644
--- a/include/tbb/internal/_mutex_padding.h
+++ b/include/tbb/internal/_mutex_padding.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_mutex_padding_H
diff --git a/include/tbb/internal/_range_iterator.h b/include/tbb/internal/_range_iterator.h
index 37cd616..5ebc42e 100644
--- a/include/tbb/internal/_range_iterator.h
+++ b/include/tbb/internal/_range_iterator.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_range_iterator_H
diff --git a/include/tbb/internal/_tbb_hash_compare_impl.h b/include/tbb/internal/_tbb_hash_compare_impl.h
new file mode 100644
index 0000000..6381e2d
--- /dev/null
+++ b/include/tbb/internal/_tbb_hash_compare_impl.h
@@ -0,0 +1,109 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+// must be included outside namespaces.
+#ifndef __TBB_tbb_hash_compare_impl_H
+#define __TBB_tbb_hash_compare_impl_H
+
+#include <string>
+
+namespace tbb {
+namespace interface5 {
+namespace internal {
+
+// Template class for hash compare
+template<typename Key, typename Hasher, typename Key_equality>
+class hash_compare
+{
+public:
+    typedef Hasher hasher;
+    typedef Key_equality key_equal;
+
+    hash_compare() {}
+
+    hash_compare(Hasher a_hasher) : my_hash_object(a_hasher) {}
+
+    hash_compare(Hasher a_hasher, Key_equality a_keyeq) : my_hash_object(a_hasher), my_key_compare_object(a_keyeq) {}
+
+    size_t operator()(const Key& key) const {
+        return ((size_t)my_hash_object(key));
+    }
+
+    bool operator()(const Key& key1, const Key& key2) const {
+        // TODO: get rid of the result invertion
+        return (!my_key_compare_object(key1, key2));
+    }
+
+    Hasher       my_hash_object;        // The hash object
+    Key_equality my_key_compare_object; // The equality comparator object
+};
+
+//! Hash multiplier
+static const size_t hash_multiplier = tbb::internal::select_size_t_constant<2654435769U, 11400714819323198485ULL>::value;
+
+} // namespace internal
+
+//! Hasher functions
+template<typename T>
+inline size_t tbb_hasher( const T& t ) {
+    return static_cast<size_t>( t ) * internal::hash_multiplier;
+}
+template<typename P>
+inline size_t tbb_hasher( P* ptr ) {
+    size_t const h = reinterpret_cast<size_t>( ptr );
+    return (h >> 3) ^ h;
+}
+template<typename E, typename S, typename A>
+inline size_t tbb_hasher( const std::basic_string<E,S,A>& s ) {
+    size_t h = 0;
+    for( const E* c = s.c_str(); *c; ++c )
+        h = static_cast<size_t>(*c) ^ (h * internal::hash_multiplier);
+    return h;
+}
+template<typename F, typename S>
+inline size_t tbb_hasher( const std::pair<F,S>& p ) {
+    return tbb_hasher(p.first) ^ tbb_hasher(p.second);
+}
+
+} // namespace interface5
+using interface5::tbb_hasher;
+
+// Template class for hash compare
+template<typename Key>
+class tbb_hash
+{
+public:
+    tbb_hash() {}
+
+    size_t operator()(const Key& key) const
+    {
+        return tbb_hasher(key);
+    }
+};
+
+//! hash_compare that is default argument for concurrent_hash_map
+template<typename Key>
+struct tbb_hash_compare {
+    static size_t hash( const Key& a ) { return tbb_hasher(a); }
+    static bool equal( const Key& a, const Key& b ) { return a == b; }
+};
+
+}  // namespace tbb
+#endif  /*  __TBB_tbb_hash_compare_impl_H */
diff --git a/include/tbb/internal/_tbb_strings.h b/include/tbb/internal/_tbb_strings.h
index 101a521..1aa532f 100644
--- a/include/tbb/internal/_tbb_strings.h
+++ b/include/tbb/internal/_tbb_strings.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 TBB_STRING_RESOURCE(FLOW_BROADCAST_NODE, "broadcast_node")
diff --git a/include/tbb/internal/_tbb_windef.h b/include/tbb/internal/_tbb_windef.h
index 2eddc52..e798dee 100644
--- a/include/tbb/internal/_tbb_windef.h
+++ b/include/tbb/internal/_tbb_windef.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 #ifndef __TBB_tbb_windef_H
@@ -43,7 +43,7 @@ namespace std {
 
 // Default setting of TBB_USE_DEBUG
 #ifdef TBB_USE_DEBUG
-#    if TBB_USE_DEBUG 
+#    if TBB_USE_DEBUG
 #        if !defined(_DEBUG)
 #            pragma message(__FILE__ "(" __TBB_STRING(__LINE__) ") : Warning: Recommend using /MDd if compiling with TBB_USE_DEBUG!=0")
 #        endif
diff --git a/include/tbb/internal/_template_helpers.h b/include/tbb/internal/_template_helpers.h
index e126f9b..1e0abbe 100644
--- a/include/tbb/internal/_template_helpers.h
+++ b/include/tbb/internal/_template_helpers.h
@@ -1,27 +1,28 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_template_helpers_H
 #define __TBB_template_helpers_H
 
 #include <utility>
+#include <cstddef>
 
 namespace tbb { namespace internal {
 
@@ -38,6 +39,8 @@ template<typename T> struct strip<T&>                 { typedef T type; };
 template<typename T> struct strip<const T&>           { typedef T type; };
 template<typename T> struct strip<volatile T&>        { typedef T type; };
 template<typename T> struct strip<const volatile T&>  { typedef T type; };
+//! Specialization for function pointers
+template<typename T> struct strip<T(&)()>             { typedef T(*type)(); };
 #if __TBB_CPP11_RVALUE_REF_PRESENT
 template<typename T> struct strip<T&&>                { typedef T type; };
 template<typename T> struct strip<const T&&>          { typedef T type; };
@@ -45,15 +48,23 @@ template<typename T> struct strip<volatile T&&>       { typedef T type; };
 template<typename T> struct strip<const volatile T&&> { typedef T type; };
 #endif
 //! Specialization for arrays converts to a corresponding pointer
-template<typename T, size_t N> struct strip<T(&)[N]>                { typedef T* type; };
-template<typename T, size_t N> struct strip<const T(&)[N]>          { typedef const T* type; };
-template<typename T, size_t N> struct strip<volatile T(&)[N]>       { typedef volatile T* type; };
-template<typename T, size_t N> struct strip<const volatile T(&)[N]> { typedef const volatile T* type; };
+template<typename T, std::size_t N> struct strip<T(&)[N]>                { typedef T* type; };
+template<typename T, std::size_t N> struct strip<const T(&)[N]>          { typedef const T* type; };
+template<typename T, std::size_t N> struct strip<volatile T(&)[N]>       { typedef volatile T* type; };
+template<typename T, std::size_t N> struct strip<const volatile T(&)[N]> { typedef const volatile T* type; };
 
 //! Detects whether two given types are the same
 template<class U, class V> struct is_same_type      { static const bool value = false; };
 template<class W>          struct is_same_type<W,W> { static const bool value = true; };
 
+template<typename T> struct is_ref { static const bool value = false; };
+template<typename U> struct is_ref<U&> { static const bool value = true; };
+
+#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT
+//! std::void_t internal implementation (to avoid GCC < 4.7 "template aliases" absence)
+template<typename...> struct void_t { typedef void type; };
+#endif
+
 #if __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT
 
 //! Allows to store a function parameter pack as a variable and later pass it to another function
@@ -103,6 +114,13 @@ struct stored_pack<T, Types...> : stored_pack<Types...>
 
 protected:
     template< typename Ret, typename F, typename... Preceding >
+    static Ret call( F&& f, pack_type& pack, Preceding&&... params ) {
+        return pack_remainder::template call<Ret>(
+            std::forward<F>(f), static_cast<pack_remainder&>(pack),
+            std::forward<Preceding>(params)... , pack.leftmost_value
+        );
+    }
+    template< typename Ret, typename F, typename... Preceding >
     static Ret call( F&& f, const pack_type& pack, Preceding&&... params ) {
         return pack_remainder::template call<Ret>(
             std::forward<F>(f), static_cast<const pack_remainder&>(pack),
diff --git a/include/tbb/internal/_x86_eliding_mutex_impl.h b/include/tbb/internal/_x86_eliding_mutex_impl.h
index 4b54939..ef5f922 100644
--- a/include/tbb/internal/_x86_eliding_mutex_impl.h
+++ b/include/tbb/internal/_x86_eliding_mutex_impl.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB__x86_eliding_mutex_impl_H
diff --git a/include/tbb/internal/_x86_rtm_rw_mutex_impl.h b/include/tbb/internal/_x86_rtm_rw_mutex_impl.h
index 6b4fbff..b08c233 100644
--- a/include/tbb/internal/_x86_rtm_rw_mutex_impl.h
+++ b/include/tbb/internal/_x86_rtm_rw_mutex_impl.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB__x86_rtm_rw_mutex_impl_H
@@ -58,7 +58,7 @@ public:
 private:
 #endif
     friend class interface7::internal::padded_mutex<x86_rtm_rw_mutex,true>;
-    class scoped_lock;   // should be private 
+    class scoped_lock;   // should be private
     friend class scoped_lock;
 private:
     //! @cond INTERNAL
diff --git a/include/tbb/machine/gcc_armv7.h b/include/tbb/machine/gcc_armv7.h
index 6fa8536..642c14f 100644
--- a/include/tbb/machine/gcc_armv7.h
+++ b/include/tbb/machine/gcc_armv7.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
@@ -83,7 +83,7 @@ static inline int32_t __TBB_machine_cmpswp4(volatile void *ptr, int32_t value, i
         "it         eq\n"
         "strexeq    %0, %5, [%3]\n"
         : "=&r" (res), "=&r" (oldval), "+Qo" (*(volatile int32_t*)ptr)
-        : "r" ((int32_t *)ptr), "Ir" (comparand), "r" (value)
+        : "r" ((volatile int32_t *)ptr), "Ir" (comparand), "r" (value)
         : "cc");
     } while (res);
 
@@ -116,7 +116,7 @@ static inline int64_t __TBB_machine_cmpswp8(volatile void *ptr, int64_t value, i
             "it         eq\n"
             "strexdeq   %0, %5, %H5, [%3]"
         : "=&r" (res), "=&r" (oldval), "+Qo" (*(volatile int64_t*)ptr)
-        : "r" ((int64_t *)ptr), "r" (comparand), "r" (value)
+        : "r" ((volatile int64_t *)ptr), "r" (comparand), "r" (value)
         : "cc");
     } while (res);
 
@@ -139,7 +139,7 @@ static inline int32_t __TBB_machine_fetchadd4(volatile void* ptr, int32_t addend
 "       cmp     %1, #0\n"
 "       bne     1b\n"
     : "=&r" (result), "=&r" (tmp), "+Qo" (*(volatile int32_t*)ptr), "=&r"(tmp2)
-    : "r" ((int32_t *)ptr), "Ir" (addend)
+    : "r" ((volatile int32_t *)ptr), "Ir" (addend)
     : "cc");
 
     __TBB_full_memory_fence();
@@ -162,7 +162,7 @@ static inline int64_t __TBB_machine_fetchadd8(volatile void *ptr, int64_t addend
 "       cmp     %1, #0\n"
 "       bne     1b"
     : "=&r" (result), "=&r" (tmp), "+Qo" (*(volatile int64_t*)ptr), "=&r"(tmp2)
-    : "r" ((int64_t *)ptr), "r" (addend)
+    : "r" ((volatile int64_t *)ptr), "r" (addend)
     : "cc");
 
 
diff --git a/include/tbb/machine/gcc_generic.h b/include/tbb/machine/gcc_generic.h
index 257af96..5fc2a90 100644
--- a/include/tbb/machine/gcc_generic.h
+++ b/include/tbb/machine/gcc_generic.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if !defined(__TBB_machine_H) || defined(__TBB_machine_gcc_generic_H)
@@ -27,14 +27,14 @@
 #include <stdint.h>
 #include <unistd.h>
 
-#define __TBB_WORDSIZE      __SIZEOF_POINTER__
+#define __TBB_WORDSIZE __SIZEOF_POINTER__
 
 #if __TBB_GCC_64BIT_ATOMIC_BUILTINS_BROKEN
     #define __TBB_64BIT_ATOMICS 0
 #endif
 
 /** FPU control setting not available for non-Intel architectures on Android **/
-#if __ANDROID__ && __TBB_generic_arch 
+#if __ANDROID__ && __TBB_generic_arch
     #define __TBB_CPU_CTL_ENV_PRESENT 0
 #endif
 
@@ -50,6 +50,9 @@
     #define __TBB_ENDIANNESS __TBB_ENDIAN_DETECT
 #endif
 
+#if __TBB_GCC_VERSION < 40700
+// Use __sync_* builtins
+
 /** As this generic implementation has absolutely no information about underlying
     hardware, its performance most likely will be sub-optimal because of full memory
     fence usages where a more lightweight synchronization means (or none at all)
@@ -64,10 +67,37 @@
 inline T __TBB_machine_cmpswp##S( volatile void *ptr, T value, T comparand ) {                    \
     return __sync_val_compare_and_swap(reinterpret_cast<volatile T *>(ptr),comparand,value);      \
 }                                                                                                 \
-                                                                                                  \
 inline T __TBB_machine_fetchadd##S( volatile void *ptr, T value ) {                               \
     return __sync_fetch_and_add(reinterpret_cast<volatile T *>(ptr),value);                       \
+}
+
+#define __TBB_USE_GENERIC_FETCH_STORE 1
+
+#else
+// __TBB_GCC_VERSION >= 40700; use __atomic_* builtins available since gcc 4.7
+
+#define __TBB_compiler_fence()              __asm__ __volatile__("": : :"memory")
+// Acquire and release fence intrinsics in GCC might miss compiler fence.
+// Adding it at both sides of an intrinsic, as we do not know what reordering can be made.
+#define __TBB_acquire_consistency_helper()  __TBB_compiler_fence(); __atomic_thread_fence(__ATOMIC_ACQUIRE); __TBB_compiler_fence()
+#define __TBB_release_consistency_helper()  __TBB_compiler_fence(); __atomic_thread_fence(__ATOMIC_RELEASE); __TBB_compiler_fence()
+#define __TBB_full_memory_fence()           __atomic_thread_fence(__ATOMIC_SEQ_CST)
+#define __TBB_control_consistency_helper()  __TBB_acquire_consistency_helper()
+
+#define __TBB_MACHINE_DEFINE_ATOMICS(S,T)                                                         \
+inline T __TBB_machine_cmpswp##S( volatile void *ptr, T value, T comparand ) {                    \
+    (void)__atomic_compare_exchange_n(reinterpret_cast<volatile T *>(ptr), &comparand, value,     \
+                                      false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);                 \
+    return comparand;                                                                             \
 }                                                                                                 \
+inline T __TBB_machine_fetchadd##S( volatile void *ptr, T value ) {                               \
+    return __atomic_fetch_add(reinterpret_cast<volatile T *>(ptr), value, __ATOMIC_SEQ_CST);      \
+}                                                                                                 \
+inline T __TBB_machine_fetchstore##S( volatile void *ptr, T value ) {                             \
+    return __atomic_exchange_n(reinterpret_cast<volatile T *>(ptr), value, __ATOMIC_SEQ_CST);     \
+}
+
+#endif // __TBB_GCC_VERSION < 40700
 
 __TBB_MACHINE_DEFINE_ATOMICS(1,int8_t)
 __TBB_MACHINE_DEFINE_ATOMICS(2,int16_t)
@@ -86,6 +116,13 @@ static inline intptr_t __TBB_machine_lg( uintptr_t x ) {
     return sizeof(x)*8 - tbb::internal::gcc_builtins::clz(x) -1 ;
 }
 
+
+typedef unsigned char __TBB_Flag;
+typedef __TBB_atomic __TBB_Flag __TBB_atomic_flag;
+
+#if __TBB_GCC_VERSION < 40700
+// Use __sync_* builtins
+
 static inline void __TBB_machine_or( volatile void *ptr, uintptr_t addend ) {
     __sync_fetch_and_or(reinterpret_cast<volatile uintptr_t *>(ptr),addend);
 }
@@ -94,19 +131,35 @@ static inline void __TBB_machine_and( volatile void *ptr, uintptr_t addend ) {
     __sync_fetch_and_and(reinterpret_cast<volatile uintptr_t *>(ptr),addend);
 }
 
+inline bool __TBB_machine_try_lock_byte( __TBB_atomic_flag &flag ) {
+    return __sync_lock_test_and_set(&flag,1)==0;
+}
 
-typedef unsigned char __TBB_Flag;
+inline void __TBB_machine_unlock_byte( __TBB_atomic_flag &flag ) {
+    __sync_lock_release(&flag);
+}
 
-typedef __TBB_atomic __TBB_Flag __TBB_atomic_flag;
+#else
+// __TBB_GCC_VERSION >= 40700; use __atomic_* builtins available since gcc 4.7
+
+static inline void __TBB_machine_or( volatile void *ptr, uintptr_t addend ) {
+    __atomic_fetch_or(reinterpret_cast<volatile uintptr_t *>(ptr),addend,__ATOMIC_SEQ_CST);
+}
+
+static inline void __TBB_machine_and( volatile void *ptr, uintptr_t addend ) {
+    __atomic_fetch_and(reinterpret_cast<volatile uintptr_t *>(ptr),addend,__ATOMIC_SEQ_CST);
+}
 
 inline bool __TBB_machine_try_lock_byte( __TBB_atomic_flag &flag ) {
-    return __sync_lock_test_and_set(&flag,1)==0;
+    return !__atomic_test_and_set(&flag,__ATOMIC_ACQUIRE);
 }
 
 inline void __TBB_machine_unlock_byte( __TBB_atomic_flag &flag ) {
-    __sync_lock_release(&flag);
+    __atomic_clear(&flag,__ATOMIC_RELEASE);
 }
 
+#endif // __TBB_GCC_VERSION < 40700
+
 // Machine specific atomic operations
 #define __TBB_AtomicOR(P,V)     __TBB_machine_or(P,V)
 #define __TBB_AtomicAND(P,V)    __TBB_machine_and(P,V)
@@ -117,7 +170,7 @@ inline void __TBB_machine_unlock_byte( __TBB_atomic_flag &flag ) {
 // Definition of other functions
 #define __TBB_Log2(V)           __TBB_machine_lg(V)
 
-#define __TBB_USE_GENERIC_FETCH_STORE                       1
+// TODO: implement with __atomic_* builtins where available
 #define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1
 #define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1
 #define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1
diff --git a/include/tbb/machine/gcc_ia32_common.h b/include/tbb/machine/gcc_ia32_common.h
index c919287..f5efc37 100644
--- a/include/tbb/machine/gcc_ia32_common.h
+++ b/include/tbb/machine/gcc_ia32_common.h
@@ -1,27 +1,27 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 #ifndef __TBB_machine_gcc_ia32_common_H
 #define __TBB_machine_gcc_ia32_common_H
 
-//TODO: Add a higher-level function, e.g. tbb::interal::log2(), into tbb_stddef.h, which
+//TODO: Add a higher-level function, e.g. tbb::internal::log2(), into tbb_stddef.h, which
 //uses __TBB_Log2 and contains the assert and remove the assert from here and all other
 //platform-specific headers.
 //TODO: Check if use of gcc intrinsic gives a better chance for cross call optimizations
@@ -53,6 +53,18 @@ static inline void __TBB_machine_pause( int32_t delay ) {
 #define __TBB_Pause(V) __TBB_machine_pause(V)
 #endif /* !__TBB_Pause */
 
+namespace tbb { namespace internal { typedef uint64_t machine_tsc_t; } }
+static inline tbb::internal::machine_tsc_t __TBB_machine_time_stamp() {
+#if __INTEL_COMPILER
+    return _rdtsc();
+#else
+    tbb::internal::uint32_t hi, lo;
+    __asm__ __volatile__("rdtsc" : "=d"(hi), "=a"(lo));
+    return (tbb::internal::machine_tsc_t( hi ) << 32) | lo;
+#endif
+}
+#define __TBB_time_stamp() __TBB_machine_time_stamp()
+
 // API to retrieve/update FPU control setting
 #ifndef __TBB_CPU_CTL_ENV_PRESENT
 #define __TBB_CPU_CTL_ENV_PRESENT 1
diff --git a/include/tbb/machine/gcc_itsx.h b/include/tbb/machine/gcc_itsx.h
index af1b530..caa3544 100644
--- a/include/tbb/machine/gcc_itsx.h
+++ b/include/tbb/machine/gcc_itsx.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if !defined(__TBB_machine_H) || defined(__TBB_machine_gcc_itsx_H)
@@ -53,7 +53,7 @@ inline static void __TBB_machine_try_lock_elided_cancel()
 
 inline static void __TBB_machine_unlock_elided( volatile uint8_t* lk )
 {
-    __asm__ volatile (".byte " __TBB_STRINGIZE(__TBB_OP_XRELEASE)"; movb $0, %0" 
+    __asm__ volatile (".byte " __TBB_STRINGIZE(__TBB_OP_XRELEASE)"; movb $0, %0"
                       : "=m"(*lk) : "m"(*lk) : "memory" );
 }
 
@@ -92,7 +92,7 @@ inline static uint32_t __TBB_machine_begin_transaction()
 {
     uint32_t res = ~uint32_t(0);   // success value
     __asm__ volatile ("1: .byte  0xC7; .byte 0xF8;\n"           //  XBEGIN <abort-offset>
-                      "   .long  2f-1b-6\n"                     //  2f-1b == difference in addresses of start 
+                      "   .long  2f-1b-6\n"                     //  2f-1b == difference in addresses of start
                                                                 //  of XBEGIN and the MOVL
                                                                 //  2f - 1b - 6 == that difference minus the size of the
                                                                 //  XBEGIN instruction.  This is the abort offset to
@@ -105,7 +105,7 @@ inline static uint32_t __TBB_machine_begin_transaction()
 }
 
 /*!
- * Attempt to commit/end transaction 
+ * Attempt to commit/end transaction
  */
 inline static void __TBB_machine_end_transaction()
 {
diff --git a/include/tbb/machine/ibm_aix51.h b/include/tbb/machine/ibm_aix51.h
index 65be8dc..a905b4e 100644
--- a/include/tbb/machine/ibm_aix51.h
+++ b/include/tbb/machine/ibm_aix51.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // TODO: revise by comparing with mac_ppc.h
diff --git a/include/tbb/machine/icc_generic.h b/include/tbb/machine/icc_generic.h
index 0ebe724..0486300 100644
--- a/include/tbb/machine/icc_generic.h
+++ b/include/tbb/machine/icc_generic.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if !defined(__TBB_machine_H) || defined(__TBB_machine_icc_generic_H)
@@ -46,6 +46,7 @@
 #define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE
 
 //__TBB_compiler_fence() defined just in case, as it seems not to be used on its own anywhere else
+#ifndef __TBB_compiler_fence
 #if _MSC_VER
     //TODO: any way to use same intrinsics on windows and linux?
     #pragma intrinsic(_ReadWriteBarrier)
@@ -53,9 +54,10 @@
 #else
     #define __TBB_compiler_fence()    __asm__ __volatile__("": : :"memory")
 #endif
+#endif
 
 #ifndef __TBB_full_memory_fence
-#if _MSC_VER 
+#if _MSC_VER
     //TODO: any way to use same intrinsics on windows and linux?
     #pragma intrinsic(_mm_mfence)
     #define __TBB_full_memory_fence() _mm_mfence()
@@ -64,7 +66,9 @@
 #endif
 #endif
 
+#ifndef __TBB_control_consistency_helper
 #define __TBB_control_consistency_helper() __TBB_compiler_fence()
+#endif
 
 namespace tbb { namespace internal {
 //TODO: is there any way to reuse definition of memory_order enum from ICC instead of copy paste.
diff --git a/include/tbb/machine/linux_common.h b/include/tbb/machine/linux_common.h
index 7d64e3a..4d2d355 100644
--- a/include/tbb/machine/linux_common.h
+++ b/include/tbb/machine/linux_common.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_machine_H
diff --git a/include/tbb/machine/linux_ia32.h b/include/tbb/machine/linux_ia32.h
index fecbe02..932d343 100644
--- a/include/tbb/machine/linux_ia32.h
+++ b/include/tbb/machine/linux_ia32.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if !defined(__TBB_machine_H) || defined(__TBB_machine_linux_ia32_H)
@@ -73,7 +73,7 @@ static inline  T __TBB_machine_fetchstore##S(volatile void *ptr, T value)
                           : "memory");                                               \
     return result;                                                                   \
 }                                                                                    \
-                                                                                     
+
 __TBB_MACHINE_DEFINE_ATOMICS(1,int8_t,"","=q")
 __TBB_MACHINE_DEFINE_ATOMICS(2,int16_t,"","=r")
 __TBB_MACHINE_DEFINE_ATOMICS(4,int32_t,"l","=r")
@@ -102,7 +102,7 @@ static inline __TBB_IA32_CAS8_NOINLINE int64_t __TBB_machine_cmpswp8 (volatile v
         int32_t i32[2];
     };
     i64 = value;
-#if __PIC__ 
+#if __PIC__
     /* compiling position-independent code */
     // EBX register preserved for compliance with position-independent code rules on IA32
     int32_t tmp;
@@ -218,7 +218,7 @@ static inline void __TBB_machine_store8(volatile void *ptr, int64_t value) {
     }
 #endif
 }
- 
+
 // Machine specific atomic operations
 #define __TBB_AtomicOR(P,V) __TBB_machine_or(P,V)
 #define __TBB_AtomicAND(P,V) __TBB_machine_and(P,V)
diff --git a/include/tbb/machine/linux_ia64.h b/include/tbb/machine/linux_ia64.h
index b7d2f1c..f477228 100644
--- a/include/tbb/machine/linux_ia64.h
+++ b/include/tbb/machine/linux_ia64.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if !defined(__TBB_machine_H) || defined(__TBB_machine_linux_ia64_H)
@@ -39,7 +39,7 @@
 #else
     #define __TBB_compiler_fence() __asm__ __volatile__("": : :"memory")
     #define __TBB_control_consistency_helper() __TBB_compiler_fence()
-    // Even though GCC imbues volatile loads with acquire semantics, it sometimes moves 
+    // Even though GCC imbues volatile loads with acquire semantics, it sometimes moves
     // loads over the acquire fence. The following helpers stop such incorrect code motion.
     #define __TBB_acquire_consistency_helper() __TBB_compiler_fence()
     #define __TBB_release_consistency_helper() __TBB_compiler_fence()
@@ -82,21 +82,21 @@ extern "C" {
     int64_t __TBB_machine_fetchstore8acquire(volatile void *ptr, int64_t value);
     int64_t __TBB_machine_fetchstore8release(volatile void *ptr, int64_t value);
 
-    int8_t __TBB_machine_cmpswp1__TBB_full_fence (volatile void *ptr, int8_t value, int8_t comparand); 
-    int8_t __TBB_machine_cmpswp1acquire(volatile void *ptr, int8_t value, int8_t comparand); 
-    int8_t __TBB_machine_cmpswp1release(volatile void *ptr, int8_t value, int8_t comparand); 
+    int8_t __TBB_machine_cmpswp1__TBB_full_fence (volatile void *ptr, int8_t value, int8_t comparand);
+    int8_t __TBB_machine_cmpswp1acquire(volatile void *ptr, int8_t value, int8_t comparand);
+    int8_t __TBB_machine_cmpswp1release(volatile void *ptr, int8_t value, int8_t comparand);
 
     int16_t __TBB_machine_cmpswp2__TBB_full_fence (volatile void *ptr, int16_t value, int16_t comparand);
-    int16_t __TBB_machine_cmpswp2acquire(volatile void *ptr, int16_t value, int16_t comparand); 
-    int16_t __TBB_machine_cmpswp2release(volatile void *ptr, int16_t value, int16_t comparand); 
+    int16_t __TBB_machine_cmpswp2acquire(volatile void *ptr, int16_t value, int16_t comparand);
+    int16_t __TBB_machine_cmpswp2release(volatile void *ptr, int16_t value, int16_t comparand);
 
     int32_t __TBB_machine_cmpswp4__TBB_full_fence (volatile void *ptr, int32_t value, int32_t comparand);
-    int32_t __TBB_machine_cmpswp4acquire(volatile void *ptr, int32_t value, int32_t comparand); 
-    int32_t __TBB_machine_cmpswp4release(volatile void *ptr, int32_t value, int32_t comparand); 
+    int32_t __TBB_machine_cmpswp4acquire(volatile void *ptr, int32_t value, int32_t comparand);
+    int32_t __TBB_machine_cmpswp4release(volatile void *ptr, int32_t value, int32_t comparand);
 
     int64_t __TBB_machine_cmpswp8__TBB_full_fence (volatile void *ptr, int64_t value, int64_t comparand);
-    int64_t __TBB_machine_cmpswp8acquire(volatile void *ptr, int64_t value, int64_t comparand); 
-    int64_t __TBB_machine_cmpswp8release(volatile void *ptr, int64_t value, int64_t comparand); 
+    int64_t __TBB_machine_cmpswp8acquire(volatile void *ptr, int64_t value, int64_t comparand);
+    int64_t __TBB_machine_cmpswp8release(volatile void *ptr, int64_t value, int64_t comparand);
 
     int64_t __TBB_machine_lg(uint64_t value);
     void __TBB_machine_pause(int32_t delay);
@@ -127,7 +127,7 @@ extern "C" {
 #define __TBB_machine_fetchstore4full_fence __TBB_machine_fetchstore4__TBB_full_fence
 #define __TBB_machine_fetchstore8full_fence __TBB_machine_fetchstore8__TBB_full_fence
 #define __TBB_machine_cmpswp1full_fence     __TBB_machine_cmpswp1__TBB_full_fence
-#define __TBB_machine_cmpswp2full_fence     __TBB_machine_cmpswp2__TBB_full_fence 
+#define __TBB_machine_cmpswp2full_fence     __TBB_machine_cmpswp2__TBB_full_fence
 #define __TBB_machine_cmpswp4full_fence     __TBB_machine_cmpswp4__TBB_full_fence
 #define __TBB_machine_cmpswp8full_fence     __TBB_machine_cmpswp8__TBB_full_fence
 
@@ -143,7 +143,7 @@ extern "C" {
 #define __TBB_machine_fetchstore4relaxed    __TBB_machine_fetchstore4acquire
 #define __TBB_machine_fetchstore8relaxed    __TBB_machine_fetchstore8acquire
 #define __TBB_machine_cmpswp1relaxed        __TBB_machine_cmpswp1acquire
-#define __TBB_machine_cmpswp2relaxed        __TBB_machine_cmpswp2acquire 
+#define __TBB_machine_cmpswp2relaxed        __TBB_machine_cmpswp2acquire
 #define __TBB_machine_cmpswp4relaxed        __TBB_machine_cmpswp4acquire
 #define __TBB_machine_cmpswp8relaxed        __TBB_machine_cmpswp8acquire
 
diff --git a/include/tbb/machine/linux_intel64.h b/include/tbb/machine/linux_intel64.h
index f63b916..02153c2 100644
--- a/include/tbb/machine/linux_intel64.h
+++ b/include/tbb/machine/linux_intel64.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if !defined(__TBB_machine_H) || defined(__TBB_machine_linux_intel64_H)
diff --git a/include/tbb/machine/mac_ppc.h b/include/tbb/machine/mac_ppc.h
index f1d8e67..13f387b 100644
--- a/include/tbb/machine/mac_ppc.h
+++ b/include/tbb/machine/mac_ppc.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if !defined(__TBB_machine_H) || defined(__TBB_machine_gcc_power_H)
diff --git a/include/tbb/machine/macos_common.h b/include/tbb/machine/macos_common.h
index 05cfd74..119ad97 100644
--- a/include/tbb/machine/macos_common.h
+++ b/include/tbb/machine/macos_common.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if !defined(__TBB_machine_H) || defined(__TBB_machine_macos_common_H)
@@ -54,7 +54,7 @@ static inline int __TBB_macos_available_cpu() {
 
 static inline int64_t __TBB_machine_cmpswp8_OsX(volatile void *ptr, int64_t value, int64_t comparand)
 {
-    __TBB_ASSERT( tbb::internal::is_aligned(ptr,8), "address not properly aligned for OS X* atomics");
+    __TBB_ASSERT( tbb::internal::is_aligned(ptr,8), "address not properly aligned for macOS* atomics");
     int64_t* address = (int64_t*)ptr;
     while( !OSAtomicCompareAndSwap64Barrier(comparand, value, address) ){
 #if __TBB_WORDSIZE==8
@@ -74,7 +74,7 @@ static inline int64_t __TBB_machine_cmpswp8_OsX(volatile void *ptr, int64_t valu
 #if __TBB_UnknownArchitecture
 
 #ifndef __TBB_WORDSIZE
-#define __TBB_WORDSIZE 4
+#define __TBB_WORDSIZE __SIZEOF_POINTER__
 #endif
 
 #ifdef __TBB_ENDIANNESS
@@ -99,7 +99,7 @@ static inline int64_t __TBB_machine_cmpswp8_OsX(volatile void *ptr, int64_t valu
 
 static inline int32_t __TBB_machine_cmpswp4(volatile void *ptr, int32_t value, int32_t comparand)
 {
-    __TBB_ASSERT( tbb::internal::is_aligned(ptr,4), "address not properly aligned for OS X* atomics");
+    __TBB_ASSERT( tbb::internal::is_aligned(ptr,4), "address not properly aligned for macOS atomics");
     int32_t* address = (int32_t*)ptr;
     while( !OSAtomicCompareAndSwap32Barrier(comparand, value, address) ){
         int32_t snapshot = *address;
@@ -110,13 +110,13 @@ static inline int32_t __TBB_machine_cmpswp4(volatile void *ptr, int32_t value, i
 
 static inline int32_t __TBB_machine_fetchadd4(volatile void *ptr, int32_t addend)
 {
-    __TBB_ASSERT( tbb::internal::is_aligned(ptr,4), "address not properly aligned for OS X* atomics");
+    __TBB_ASSERT( tbb::internal::is_aligned(ptr,4), "address not properly aligned for macOS atomics");
     return OSAtomicAdd32Barrier(addend, (int32_t*)ptr) - addend;
 }
 
 static inline int64_t __TBB_machine_fetchadd8(volatile void *ptr, int64_t addend)
 {
-    __TBB_ASSERT( tbb::internal::is_aligned(ptr,8), "address not properly aligned for OS X* atomics");
+    __TBB_ASSERT( tbb::internal::is_aligned(ptr,8), "address not properly aligned for macOS atomics");
     return OSAtomicAdd64Barrier(addend, (int64_t*)ptr) - addend;
 }
 
diff --git a/include/tbb/machine/mic_common.h b/include/tbb/machine/mic_common.h
index 3a5bdae..8765d39 100644
--- a/include/tbb/machine/mic_common.h
+++ b/include/tbb/machine/mic_common.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_mic_common_H
@@ -45,10 +45,6 @@
 #include <sched.h>
 #define __TBB_Yield() sched_yield()
 
-// low-level timing intrinsic and its type
-#define __TBB_machine_time_stamp() _rdtsc()
-typedef uint64_t machine_tsc_t;
-
 /** Specifics **/
 #define __TBB_STEALING_ABORT_ON_CONTENTION 1
 #define __TBB_YIELD2P 1
diff --git a/include/tbb/machine/msvc_armv7.h b/include/tbb/machine/msvc_armv7.h
index de9b02e..40d2202 100644
--- a/include/tbb/machine/msvc_armv7.h
+++ b/include/tbb/machine/msvc_armv7.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if !defined(__TBB_machine_H) || defined(__TBB_msvc_armv7_H)
diff --git a/include/tbb/machine/msvc_ia32_common.h b/include/tbb/machine/msvc_ia32_common.h
index 605d996..8b4814b 100644
--- a/include/tbb/machine/msvc_ia32_common.h
+++ b/include/tbb/machine/msvc_ia32_common.h
@@ -1,60 +1,115 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
-#ifndef __TBB_machine_msvc_ia32_common_H
+#if !defined(__TBB_machine_H) || defined(__TBB_machine_msvc_ia32_common_H)
+#error Do not #include this internal file directly; use public TBB headers instead.
+#endif
+
 #define __TBB_machine_msvc_ia32_common_H
 
 #include <intrin.h>
 
-//TODO: consider moving this macro to tbb_config.h and used there MSVC asm is used
+//TODO: consider moving this macro to tbb_config.h and using where MSVC asm is used
 #if  !_M_X64 || __INTEL_COMPILER
     #define __TBB_X86_MSVC_INLINE_ASM_AVAILABLE 1
-
-    #if _M_X64
-        #define __TBB_r(reg_name) r##reg_name
-    #else
-        #define __TBB_r(reg_name) e##reg_name
-    #endif
 #else
     //MSVC in x64 mode does not accept inline assembler
     #define __TBB_X86_MSVC_INLINE_ASM_AVAILABLE 0
+    #define __TBB_NO_X86_MSVC_INLINE_ASM_MSG "The compiler being used is not supported (outdated?)"
 #endif
 
-#define __TBB_NO_X86_MSVC_INLINE_ASM_MSG "The compiler being used is not supported (outdated?)"
+#if _M_X64
+    #define __TBB_r(reg_name) r##reg_name
+    #define __TBB_W(name) name##64
+    namespace tbb { namespace internal { namespace msvc_intrinsics {
+        typedef __int64 word;
+    }}}
+#else
+    #define __TBB_r(reg_name) e##reg_name
+    #define __TBB_W(name) name
+    namespace tbb { namespace internal { namespace msvc_intrinsics {
+        typedef long word;
+    }}}
+#endif
 
-#if (_MSC_VER >= 1300) || (__INTEL_COMPILER) //Use compiler intrinsic when available
-    #define __TBB_PAUSE_USE_INTRINSIC 1
+#if _MSC_VER>=1600 && (!__INTEL_COMPILER || __INTEL_COMPILER>=1310)
+    // S is the operand size in bytes, B is the suffix for intrinsics for that size
+    #define __TBB_MACHINE_DEFINE_ATOMICS(S,B,T,U)                                           \
+    __pragma(intrinsic( _InterlockedCompareExchange##B ))                                   \
+    static inline T __TBB_machine_cmpswp##S ( volatile void * ptr, U value, U comparand ) { \
+        return _InterlockedCompareExchange##B ( (T*)ptr, value, comparand );                \
+    }                                                                                       \
+    __pragma(intrinsic( _InterlockedExchangeAdd##B ))                                       \
+    static inline T __TBB_machine_fetchadd##S ( volatile void * ptr, U addend ) {           \
+        return _InterlockedExchangeAdd##B ( (T*)ptr, addend );                              \
+    }                                                                                       \
+    __pragma(intrinsic( _InterlockedExchange##B ))                                          \
+    static inline T __TBB_machine_fetchstore##S ( volatile void * ptr, U value ) {          \
+        return _InterlockedExchange##B ( (T*)ptr, value );                                  \
+    }
+
+    // Atomic intrinsics for 1, 2, and 4 bytes are available for x86 & x64
+    __TBB_MACHINE_DEFINE_ATOMICS(1,8,char,__int8)
+    __TBB_MACHINE_DEFINE_ATOMICS(2,16,short,__int16)
+    __TBB_MACHINE_DEFINE_ATOMICS(4,,long,__int32)
+
+    #if __TBB_WORDSIZE==8
+    __TBB_MACHINE_DEFINE_ATOMICS(8,64,__int64,__int64)
+    #endif
+
+    #undef __TBB_MACHINE_DEFINE_ATOMICS
+    #define __TBB_ATOMIC_PRIMITIVES_DEFINED
+#endif /*_MSC_VER>=1600*/
+
+#if _MSC_VER>=1300 || __INTEL_COMPILER>=1100
+    #pragma intrinsic(_ReadWriteBarrier)
+    #pragma intrinsic(_mm_mfence)
+    #define __TBB_compiler_fence()    _ReadWriteBarrier()
+    #define __TBB_full_memory_fence() _mm_mfence()
+#elif __TBB_X86_MSVC_INLINE_ASM_AVAILABLE
+    #define __TBB_compiler_fence()    __asm { __asm nop }
+    #define __TBB_full_memory_fence() __asm { __asm mfence }
+#else
+    #error Unsupported compiler; define __TBB_{control,acquire,release}_consistency_helper to support it
+#endif
+
+#define __TBB_control_consistency_helper() __TBB_compiler_fence()
+#define __TBB_acquire_consistency_helper() __TBB_compiler_fence()
+#define __TBB_release_consistency_helper() __TBB_compiler_fence()
+
+#if (_MSC_VER>=1300) || (__INTEL_COMPILER)
     #pragma intrinsic(_mm_pause)
-    namespace tbb { namespace internal { namespace intrinsics { namespace msvc {
-        static inline void __TBB_machine_pause (uintptr_t delay ) {
+    namespace tbb { namespace internal { namespace msvc_intrinsics {
+        static inline void pause (uintptr_t delay ) {
             for (;delay>0; --delay )
                 _mm_pause();
         }
-    }}}}
+    }}}
+    #define __TBB_Pause(V) tbb::internal::msvc_intrinsics::pause(V)
+    #define __TBB_SINGLE_PAUSE _mm_pause()
 #else
     #if !__TBB_X86_MSVC_INLINE_ASM_AVAILABLE
         #error __TBB_NO_X86_MSVC_INLINE_ASM_MSG
     #endif
-
-    namespace tbb { namespace internal { namespace inline_asm { namespace msvc {
-        static inline void __TBB_machine_pause (uintptr_t delay ) {
+    namespace tbb { namespace internal { namespace msvc_inline_asm
+        static inline void pause (uintptr_t delay ) {
             _asm
             {
                 mov __TBB_r(ax), delay
@@ -65,52 +120,29 @@
             }
             return;
         }
-    }}}}
+    }}}
+    #define __TBB_Pause(V) tbb::internal::msvc_inline_asm::pause(V)
+    #define __TBB_SINGLE_PAUSE __asm pause
 #endif
 
-static inline void __TBB_machine_pause (uintptr_t delay ){
-    #if __TBB_PAUSE_USE_INTRINSIC
-        tbb::internal::intrinsics::msvc::__TBB_machine_pause(delay);
-    #else
-        tbb::internal::inline_asm::msvc::__TBB_machine_pause(delay);
-    #endif
-}
-
-//TODO: move this function to windows_api.h or to place where it is used
-#if (_MSC_VER<1400) && (!_WIN64) && (__TBB_X86_MSVC_INLINE_ASM_AVAILABLE)
-    static inline void* __TBB_machine_get_current_teb () {
-        void* pteb;
-        __asm mov eax, fs:[0x18]
-        __asm mov pteb, eax
-        return pteb;
-    }
-#endif
-
-#if ( _MSC_VER>=1400 && !defined(__INTEL_COMPILER) ) ||  (__INTEL_COMPILER>=1200)
+#if (_MSC_VER>=1400 && !__INTEL_COMPILER) || (__INTEL_COMPILER>=1200)
 // MSVC did not have this intrinsic prior to VC8.
 // ICL 11.1 fails to compile a TBB example if __TBB_Log2 uses the intrinsic.
-    #define __TBB_LOG2_USE_BSR_INTRINSIC 1
-    #if _M_X64
-        #define __TBB_BSR_INTRINSIC _BitScanReverse64
-    #else
-        #define __TBB_BSR_INTRINSIC _BitScanReverse
-    #endif
-    #pragma intrinsic(__TBB_BSR_INTRINSIC)
-
-    namespace tbb { namespace internal { namespace intrinsics { namespace msvc {
-        inline uintptr_t __TBB_machine_lg( uintptr_t i ){
+    #pragma intrinsic(__TBB_W(_BitScanReverse))
+    namespace tbb { namespace internal { namespace msvc_intrinsics {
+        static inline uintptr_t lg_bsr( uintptr_t i ){
             unsigned long j;
-            __TBB_BSR_INTRINSIC( &j, i );
+            __TBB_W(_BitScanReverse)( &j, i );
             return j;
         }
-    }}}}
+    }}}
+    #define __TBB_Log2(V) tbb::internal::msvc_intrinsics::lg_bsr(V)
 #else
     #if !__TBB_X86_MSVC_INLINE_ASM_AVAILABLE
         #error __TBB_NO_X86_MSVC_INLINE_ASM_MSG
     #endif
-
-    namespace tbb { namespace internal { namespace inline_asm { namespace msvc {
-        inline uintptr_t __TBB_machine_lg( uintptr_t i ){
+    namespace tbb { namespace internal { namespace msvc_inline_asm {
+        static inline uintptr_t lg_bsr( uintptr_t i ){
             uintptr_t j;
             __asm
             {
@@ -119,16 +151,55 @@ static inline void __TBB_machine_pause (uintptr_t delay ){
             }
             return j;
         }
-    }}}}
+    }}}
+    #define __TBB_Log2(V) tbb::internal::msvc_inline_asm::lg_bsr(V)
 #endif
 
-static inline intptr_t __TBB_machine_lg( uintptr_t i ) {
-#if __TBB_LOG2_USE_BSR_INTRINSIC
-    return tbb::internal::intrinsics::msvc::__TBB_machine_lg(i);
+#if _MSC_VER>=1400
+    #pragma intrinsic(__TBB_W(_InterlockedOr))
+    #pragma intrinsic(__TBB_W(_InterlockedAnd))
+    namespace tbb { namespace internal { namespace msvc_intrinsics {
+        static inline void lock_or( volatile void *operand, intptr_t addend ){
+            __TBB_W(_InterlockedOr)((volatile word*)operand, addend);
+        }
+        static inline void lock_and( volatile void *operand, intptr_t addend ){
+            __TBB_W(_InterlockedAnd)((volatile word*)operand, addend);
+        }
+    }}}
+    #define __TBB_AtomicOR(P,V)  tbb::internal::msvc_intrinsics::lock_or(P,V)
+    #define __TBB_AtomicAND(P,V) tbb::internal::msvc_intrinsics::lock_and(P,V)
 #else
-    return tbb::internal::inline_asm::msvc::__TBB_machine_lg(i);
+    #if !__TBB_X86_MSVC_INLINE_ASM_AVAILABLE
+        #error __TBB_NO_X86_MSVC_INLINE_ASM_MSG
+    #endif
+    namespace tbb { namespace internal { namespace msvc_inline_asm {
+        static inline void lock_or( volatile void *operand, __int32 addend ) {
+            __asm
+            {
+                mov eax, addend
+                mov edx, [operand]
+                lock or [edx], eax
+            }
+         }
+         static inline void lock_and( volatile void *operand, __int32 addend ) {
+            __asm
+            {
+                mov eax, addend
+                mov edx, [operand]
+                lock and [edx], eax
+            }
+         }
+    }}}
+    #define __TBB_AtomicOR(P,V)  tbb::internal::msvc_inline_asm::lock_or(P,V)
+    #define __TBB_AtomicAND(P,V) tbb::internal::msvc_inline_asm::lock_and(P,V)
 #endif
+
+#pragma intrinsic(__rdtsc)
+namespace tbb { namespace internal { typedef uint64_t machine_tsc_t; } }
+static inline tbb::internal::machine_tsc_t __TBB_machine_time_stamp() {
+    return __rdtsc();
 }
+#define __TBB_time_stamp() __TBB_machine_time_stamp()
 
 // API to retrieve/update FPU control setting
 #define __TBB_CPU_CTL_ENV_PRESENT 1
@@ -182,21 +253,16 @@ extern "C" __declspec(dllimport) int __stdcall SwitchToThread( void );
 #define __TBB_Yield()  std::this_thread::yield()
 #endif
 
-#define __TBB_Pause(V) __TBB_machine_pause(V)
-#define __TBB_Log2(V)  __TBB_machine_lg(V)
-
 #undef __TBB_r
+#undef __TBB_W
+#undef __TBB_word
 
 extern "C" {
     __int8 __TBB_EXPORTED_FUNC __TBB_machine_try_lock_elided (volatile void* ptr);
     void   __TBB_EXPORTED_FUNC __TBB_machine_unlock_elided (volatile void* ptr);
 
     // 'pause' instruction aborts HLE/RTM transactions
-#if __TBB_PAUSE_USE_INTRINSIC
-    inline static void __TBB_machine_try_lock_elided_cancel() { _mm_pause(); }
-#else
-    inline static void __TBB_machine_try_lock_elided_cancel() { _asm pause; }
-#endif
+    inline static void __TBB_machine_try_lock_elided_cancel() { __TBB_SINGLE_PAUSE; }
 
 #if __TBB_TSX_INTRINSICS_PRESENT
     #define __TBB_machine_is_in_transaction _xtest
@@ -212,5 +278,3 @@ extern "C" {
     void             __TBB_EXPORTED_FUNC __TBB_machine_transaction_conflict_abort();
 #endif /* __TBB_TSX_INTRINSICS_PRESENT */
 }
-
-#endif /* __TBB_machine_msvc_ia32_common_H */
diff --git a/include/tbb/machine/sunos_sparc.h b/include/tbb/machine/sunos_sparc.h
index a6d8cbd..9119f40 100644
--- a/include/tbb/machine/sunos_sparc.h
+++ b/include/tbb/machine/sunos_sparc.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 
@@ -30,7 +30,7 @@
 
 #define __TBB_WORDSIZE 8
 // Big endian is assumed for SPARC.
-// While hardware may support page-specific bi-endianness, only big endian pages may be exposed to TBB  
+// While hardware may support page-specific bi-endianness, only big endian pages may be exposed to TBB
 #define __TBB_ENDIANNESS __TBB_ENDIAN_BIG
 
 /** To those working on SPARC hardware. Consider relaxing acquire and release
diff --git a/include/tbb/machine/windows_api.h b/include/tbb/machine/windows_api.h
index 32386e5..d362abc 100644
--- a/include/tbb/machine/windows_api.h
+++ b/include/tbb/machine/windows_api.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 #ifndef __TBB_machine_windows_api_H
@@ -23,18 +23,8 @@
 
 #if _WIN32 || _WIN64
 
-#if _XBOX
-
-#define NONET
-#define NOD3D
-#include <xtl.h>
-
-#else // Assume "usual" Windows
-
 #include <windows.h>
 
-#endif // _XBOX
-
 #if _WIN32_WINNT < 0x0600
 // The following Windows API function is declared explicitly;
 // otherwise it fails to compile by VS2005.
diff --git a/include/tbb/machine/windows_ia32.h b/include/tbb/machine/windows_ia32.h
index b25cb49..8db0d2b 100644
--- a/include/tbb/machine/windows_ia32.h
+++ b/include/tbb/machine/windows_ia32.h
@@ -1,49 +1,28 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
-*/
+    Copyright (c) 2005-2017 Intel Corporation
 
-#if !defined(__TBB_machine_H) || defined(__TBB_machine_windows_ia32_H)
-#error Do not #include this internal file directly; use public TBB headers instead.
-#endif
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
 
-#define __TBB_machine_windows_ia32_H
 
-#include "msvc_ia32_common.h"
 
-#define __TBB_WORDSIZE 4
-#define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE
 
-#if __INTEL_COMPILER && (__INTEL_COMPILER < 1100)
-    #define __TBB_compiler_fence()    __asm { __asm nop }
-    #define __TBB_full_memory_fence() __asm { __asm mfence }
-#elif _MSC_VER >= 1300 || __INTEL_COMPILER
-    #pragma intrinsic(_ReadWriteBarrier)
-    #pragma intrinsic(_mm_mfence)
-    #define __TBB_compiler_fence()    _ReadWriteBarrier()
-    #define __TBB_full_memory_fence() _mm_mfence()
-#else
-    #error Unsupported compiler - need to define __TBB_{control,acquire,release}_consistency_helper to support it
+*/
+
+#if !defined(__TBB_machine_H) || defined(__TBB_machine_windows_ia32_H)
+#error Do not #include this internal file directly; use public TBB headers instead.
 #endif
 
-#define __TBB_control_consistency_helper() __TBB_compiler_fence()
-#define __TBB_acquire_consistency_helper() __TBB_compiler_fence()
-#define __TBB_release_consistency_helper() __TBB_compiler_fence()
+#define __TBB_machine_windows_ia32_H
 
 #if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
     // Workaround for overzealous compiler warnings in /Wp64 mode
@@ -51,6 +30,11 @@
     #pragma warning (disable: 4244 4267)
 #endif
 
+#include "msvc_ia32_common.h"
+
+#define __TBB_WORDSIZE 4
+#define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE
+
 extern "C" {
     __int64 __TBB_EXPORTED_FUNC __TBB_machine_cmpswp8 (volatile void *ptr, __int64 value, __int64 comparand );
     __int64 __TBB_EXPORTED_FUNC __TBB_machine_fetchadd8 (volatile void *ptr, __int64 addend );
@@ -59,7 +43,8 @@ extern "C" {
     __int64 __TBB_EXPORTED_FUNC __TBB_machine_load8 (const volatile void *ptr);
 }
 
-//TODO: use _InterlockedXXX intrinsics as they available since VC 2005
+#ifndef __TBB_ATOMIC_PRIMITIVES_DEFINED
+
 #define __TBB_MACHINE_DEFINE_ATOMICS(S,T,U,A,C) \
 static inline T __TBB_machine_cmpswp##S ( volatile void * ptr, U value, U comparand ) { \
     T result; \
@@ -108,26 +93,7 @@ __TBB_MACHINE_DEFINE_ATOMICS(4, ptrdiff_t, ptrdiff_t, eax, ecx)
 
 #undef __TBB_MACHINE_DEFINE_ATOMICS
 
-static inline void __TBB_machine_OR( volatile void *operand, __int32 addend ) {
-   __asm 
-   {
-       mov eax, addend
-       mov edx, [operand]
-       lock or [edx], eax
-   }
-}
-
-static inline void __TBB_machine_AND( volatile void *operand, __int32 addend ) {
-   __asm 
-   {
-       mov eax, addend
-       mov edx, [operand]
-       lock and [edx], eax
-   }
-}
-
-#define __TBB_AtomicOR(P,V) __TBB_machine_OR(P,V)
-#define __TBB_AtomicAND(P,V) __TBB_machine_AND(P,V)
+#endif /*__TBB_ATOMIC_PRIMITIVES_DEFINED*/
 
 //TODO: Check if it possible and profitable for IA-32 architecture on (Linux and Windows)
 //to use of 64-bit load/store via floating point registers together with full fence
@@ -141,4 +107,3 @@ static inline void __TBB_machine_AND( volatile void *operand, __int32 addend ) {
 #if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
     #pragma warning (pop)
 #endif // warnings 4244, 4267 are back
-
diff --git a/include/tbb/machine/windows_intel64.h b/include/tbb/machine/windows_intel64.h
index 963178f..86abd6a 100644
--- a/include/tbb/machine/windows_intel64.h
+++ b/include/tbb/machine/windows_intel64.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if !defined(__TBB_machine_H) || defined(__TBB_machine_windows_intel64_H)
@@ -27,34 +27,13 @@
 #define __TBB_WORDSIZE 8
 #define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE
 
-#include <intrin.h>
 #include "msvc_ia32_common.h"
 
-//TODO: Use _InterlockedXXX16 intrinsics for 2 byte operations
-#if !__INTEL_COMPILER
-    #pragma intrinsic(_InterlockedOr64)
-    #pragma intrinsic(_InterlockedAnd64)
-    #pragma intrinsic(_InterlockedCompareExchange)
-    #pragma intrinsic(_InterlockedCompareExchange64)
-    #pragma intrinsic(_InterlockedExchangeAdd)
-    #pragma intrinsic(_InterlockedExchangeAdd64)
-    #pragma intrinsic(_InterlockedExchange)
-    #pragma intrinsic(_InterlockedExchange64)
-#endif /* !(__INTEL_COMPILER) */
-
-#if __INTEL_COMPILER && (__INTEL_COMPILER < 1100)
-    #define __TBB_compiler_fence()    __asm { __asm nop }
-    #define __TBB_full_memory_fence() __asm { __asm mfence }
-#elif _MSC_VER >= 1300 || __INTEL_COMPILER
-    #pragma intrinsic(_ReadWriteBarrier)
-    #pragma intrinsic(_mm_mfence)
-    #define __TBB_compiler_fence()    _ReadWriteBarrier()
-    #define __TBB_full_memory_fence() _mm_mfence()
-#endif
+#ifndef __TBB_ATOMIC_PRIMITIVES_DEFINED
 
-#define __TBB_control_consistency_helper() __TBB_compiler_fence()
-#define __TBB_acquire_consistency_helper() __TBB_compiler_fence()
-#define __TBB_release_consistency_helper() __TBB_compiler_fence()
+#include <intrin.h>
+#pragma intrinsic(_InterlockedCompareExchange,_InterlockedExchangeAdd,_InterlockedExchange)
+#pragma intrinsic(_InterlockedCompareExchange64,_InterlockedExchangeAdd64,_InterlockedExchange64)
 
 // ATTENTION: if you ever change argument types in machine-specific primitives,
 // please take care of atomic_word<> specializations in tbb/atomic.h
@@ -87,19 +66,9 @@ inline __int64 __TBB_machine_fetchstore8 (volatile void *ptr, __int64 value ) {
     return _InterlockedExchange64( (__int64*)ptr, value );
 }
 
+#endif /*__TBB_ATOMIC_PRIMITIVES_DEFINED*/
+
 #define __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE           1
 #define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1
 #define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1
 #define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1
-
-inline void __TBB_machine_OR( volatile void *operand, intptr_t addend ) {
-    _InterlockedOr64((__int64*)operand, addend); 
-}
-
-inline void __TBB_machine_AND( volatile void *operand, intptr_t addend ) {
-    _InterlockedAnd64((__int64*)operand, addend); 
-}
-
-#define __TBB_AtomicOR(P,V) __TBB_machine_OR(P,V)
-#define __TBB_AtomicAND(P,V) __TBB_machine_AND(P,V)
-
diff --git a/include/tbb/machine/xbox360_ppc.h b/include/tbb/machine/xbox360_ppc.h
deleted file mode 100644
index 4893627..0000000
--- a/include/tbb/machine/xbox360_ppc.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
-*/
-
-// TODO: revise by comparing with mac_ppc.h
-
-#if !defined(__TBB_machine_H) || defined(__TBB_machine_xbox360_ppc_H)
-#error Do not #include this internal file directly; use public TBB headers instead.
-#endif
-
-#define __TBB_machine_xbox360_ppc_H
-
-#define NONET
-#define NOD3D
-#include "xtl.h"    
-#include "ppcintrinsics.h"
-
-#if _MSC_VER >= 1300
-extern "C" void _MemoryBarrier();
-#pragma intrinsic(_MemoryBarrier)
-#define __TBB_control_consistency_helper() __isync()
-#define __TBB_acquire_consistency_helper() _MemoryBarrier()
-#define __TBB_release_consistency_helper() _MemoryBarrier()
-#endif
-
-#define __TBB_full_memory_fence() __sync()
-
-#define __TBB_WORDSIZE 4
-#define __TBB_ENDIANNESS __TBB_ENDIAN_BIG
-
-//todo: define __TBB_USE_FENCED_ATOMICS and define acquire/release primitives to maximize performance
-
-inline __int32 __TBB_machine_cmpswp4(volatile void *ptr, __int32 value, __int32 comparand ) {                               
- __sync();
- __int32 result = InterlockedCompareExchange((volatile LONG*)ptr, value, comparand);
- __isync();
- return result;
-}
-
-inline __int64 __TBB_machine_cmpswp8(volatile void *ptr, __int64 value, __int64 comparand )
-{
- __sync();
- __int64 result = InterlockedCompareExchange64((volatile LONG64*)ptr, value, comparand);
- __isync();
- return result;
-}
-
-#define __TBB_USE_GENERIC_PART_WORD_CAS                     1
-#define __TBB_USE_GENERIC_FETCH_ADD                         1
-#define __TBB_USE_GENERIC_FETCH_STORE                       1
-#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1
-#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1
-#define __TBB_USE_GENERIC_DWORD_LOAD_STORE                  1
-#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1
-
-#pragma optimize( "", off )
-inline void __TBB_machine_pause (__int32 delay ) 
-{
- for (__int32 i=0; i<delay; i++) {;};
-}
-#pragma optimize( "", on ) 
-
-#define __TBB_Yield()  Sleep(0)
-#define __TBB_Pause(V) __TBB_machine_pause(V)
-
-// This port uses only 2 hardware threads for TBB on XBOX 360. 
-// Others are left to sound etc.
-// Change the following mask to allow TBB use more HW threads.
-static const int __TBB_XBOX360_HARDWARE_THREAD_MASK = 0x0C;
-
-static inline int __TBB_XBOX360_DetectNumberOfWorkers() 
-{
-     char a[__TBB_XBOX360_HARDWARE_THREAD_MASK];  //compile time assert - at least one bit should be set always
-     a[0]=0;
-
-     return ((__TBB_XBOX360_HARDWARE_THREAD_MASK >> 0) & 1) +
-            ((__TBB_XBOX360_HARDWARE_THREAD_MASK >> 1) & 1) +
-            ((__TBB_XBOX360_HARDWARE_THREAD_MASK >> 2) & 1) +
-            ((__TBB_XBOX360_HARDWARE_THREAD_MASK >> 3) & 1) +
-            ((__TBB_XBOX360_HARDWARE_THREAD_MASK >> 4) & 1) +
-            ((__TBB_XBOX360_HARDWARE_THREAD_MASK >> 5) & 1) + 1;  // +1 accommodates for the master thread
-}
-
-static inline int __TBB_XBOX360_GetHardwareThreadIndex(int workerThreadIndex)
-{
-    workerThreadIndex %= __TBB_XBOX360_DetectNumberOfWorkers()-1;
-    int m = __TBB_XBOX360_HARDWARE_THREAD_MASK;
-    int index = 0;
-    int skipcount = workerThreadIndex;
-    while (true)
-    {
-        if ((m & 1)!=0) 
-        {
-            if (skipcount==0) break;
-            skipcount--;
-        }
-        m >>= 1;
-       index++;
-    }
-    return index; 
-}
-
-#define __TBB_HardwareConcurrency() __TBB_XBOX360_DetectNumberOfWorkers()
diff --git a/include/tbb/memory_pool.h b/include/tbb/memory_pool.h
index 1ddec4f..b3bba39 100644
--- a/include/tbb/memory_pool.h
+++ b/include/tbb/memory_pool.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_memory_pool_H
@@ -107,14 +107,14 @@ public:
         typedef memory_pool_allocator<U, P> other;
     };
 
-    memory_pool_allocator(pool_type &pool) throw() : my_pool(&pool) {}
+    explicit memory_pool_allocator(pool_type &pool) throw() : my_pool(&pool) {}
     memory_pool_allocator(const memory_pool_allocator& src) throw() : my_pool(src.my_pool) {}
     template<typename U>
     memory_pool_allocator(const memory_pool_allocator<U,P>& src) throw() : my_pool(src.my_pool) {}
 
     pointer address(reference x) const { return &x; }
     const_pointer address(const_reference x) const { return &x; }
-    
+
     //! Allocate space for n objects.
     pointer allocate( size_type n, const void* /*hint*/ = 0) {
         pointer p = static_cast<pointer>( my_pool->malloc( n*sizeof(value_type) ) );
@@ -154,7 +154,7 @@ public:
 
 //! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1
 /** @ingroup memory_allocation */
-template<typename P> 
+template<typename P>
 class memory_pool_allocator<void, P> {
 public:
     typedef P pool_type;
@@ -165,7 +165,7 @@ public:
         typedef memory_pool_allocator<U, P> other;
     };
 
-    memory_pool_allocator( pool_type &pool) throw() : my_pool(&pool) {}
+    explicit memory_pool_allocator( pool_type &pool) throw() : my_pool(&pool) {}
     memory_pool_allocator( const memory_pool_allocator& src) throw() : my_pool(src.my_pool) {}
     template<typename U>
     memory_pool_allocator(const memory_pool_allocator<U,P>& src) throw() : my_pool(src.my_pool) {}
@@ -196,7 +196,7 @@ class memory_pool : public internal::pool_base {
 
 public:
     //! construct pool with underlying allocator
-    memory_pool(const Alloc &src = Alloc());
+    explicit memory_pool(const Alloc &src = Alloc());
 
     //! destroy pool
     ~memory_pool() { destroy(); } // call the callbacks first and destroy my_alloc latter
diff --git a/include/tbb/mutex.h b/include/tbb/mutex.h
index df328fd..e40b4cd 100644
--- a/include/tbb/mutex.h
+++ b/include/tbb/mutex.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_mutex_H
@@ -34,9 +34,8 @@
 
 namespace tbb {
 
-//! Wrapper around the platform's native reader-writer lock.
-/** For testing purposes only.
-    @ingroup synchronization */
+//! Wrapper around the platform's native lock.
+/** @ingroup synchronization */
 class mutex : internal::mutex_copy_deprecated_and_disabled {
 public:
     //! Construct unacquired mutex.
@@ -61,7 +60,7 @@ public:
   #if _WIN32||_WIN64
         DeleteCriticalSection(&impl);
   #else
-        pthread_mutex_destroy(&impl); 
+        pthread_mutex_destroy(&impl);
 
   #endif /* _WIN32||_WIN64 */
 #endif /* TBB_USE_ASSERT */
@@ -75,7 +74,7 @@ public:
         It also nicely provides the "node" for queuing locks. */
     class scoped_lock : internal::no_copy {
     public:
-        //! Construct lock that has not acquired a mutex. 
+        //! Construct lock that has not acquired a mutex.
         scoped_lock() : my_mutex(NULL) {};
 
         //! Acquire lock on given mutex.
@@ -85,7 +84,7 @@ public:
 
         //! Release lock (if lock is held).
         ~scoped_lock() {
-            if( my_mutex ) 
+            if( my_mutex )
                 release();
         }
 
@@ -208,7 +207,7 @@ public:
     };
 private:
 #if _WIN32||_WIN64
-    CRITICAL_SECTION impl;    
+    CRITICAL_SECTION impl;
     enum state_t state;
 #else
     pthread_mutex_t impl;
@@ -229,6 +228,6 @@ public:
 
 __TBB_DEFINE_PROFILING_SET_NAME(mutex)
 
-} // namespace tbb 
+} // namespace tbb
 
 #endif /* __TBB_mutex_H */
diff --git a/include/tbb/null_mutex.h b/include/tbb/null_mutex.h
index 78a16b7..85c660e 100644
--- a/include/tbb/null_mutex.h
+++ b/include/tbb/null_mutex.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_null_mutex_H
@@ -24,30 +24,30 @@
 #include "tbb_stddef.h"
 
 namespace tbb {
-    
+
 //! A mutex which does nothing
 /** A null_mutex does no operation and simulates success.
     @ingroup synchronization */
 class null_mutex : internal::mutex_copy_deprecated_and_disabled {
-public:   
+public:
     //! Represents acquisition of a mutex.
-    class scoped_lock : internal::no_copy {   
-    public:   
+    class scoped_lock : internal::no_copy {
+    public:
         scoped_lock() {}
-        scoped_lock( null_mutex& ) {}   
+        scoped_lock( null_mutex& ) {}
         ~scoped_lock() {}
         void acquire( null_mutex& ) {}
         bool try_acquire( null_mutex& ) { return true; }
         void release() {}
     };
-  
+
     null_mutex() {}
-    
-    // Mutex traits   
-    static const bool is_rw_mutex = false;   
+
+    // Mutex traits
+    static const bool is_rw_mutex = false;
     static const bool is_recursive_mutex = true;
     static const bool is_fair_mutex = true;
-};  
+};
 
 }
 
diff --git a/include/tbb/null_rw_mutex.h b/include/tbb/null_rw_mutex.h
index 390a85b..fa0c803 100644
--- a/include/tbb/null_rw_mutex.h
+++ b/include/tbb/null_rw_mutex.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_null_rw_mutex_H
@@ -24,15 +24,15 @@
 #include "tbb_stddef.h"
 
 namespace tbb {
-    
+
 //! A rw mutex which does nothing
 /** A null_rw_mutex is a rw mutex that does nothing and simulates successful operation.
     @ingroup synchronization */
 class null_rw_mutex : internal::mutex_copy_deprecated_and_disabled {
-public:   
+public:
     //! Represents acquisition of a mutex.
-    class scoped_lock : internal::no_copy {   
-    public:   
+    class scoped_lock : internal::no_copy {
+    public:
         scoped_lock() {}
         scoped_lock( null_rw_mutex& , bool = true ) {}
         ~scoped_lock() {}
@@ -42,14 +42,14 @@ public:
         bool try_acquire( null_rw_mutex& , bool = true ) { return true; }
         void release() {}
     };
-  
+
     null_rw_mutex() {}
-    
-    // Mutex traits   
-    static const bool is_rw_mutex = true;   
+
+    // Mutex traits
+    static const bool is_rw_mutex = true;
     static const bool is_recursive_mutex = true;
     static const bool is_fair_mutex = true;
-};  
+};
 
 }
 
diff --git a/include/tbb/parallel_do.h b/include/tbb/parallel_do.h
index 1bae6b4..1527568 100644
--- a/include/tbb/parallel_do.h
+++ b/include/tbb/parallel_do.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_parallel_do_H
@@ -28,30 +28,37 @@
 #include <iterator>
 
 namespace tbb {
-
+namespace interface9 {
 //! @cond INTERNAL
 namespace internal {
     template<typename Body, typename Item> class parallel_do_feeder_impl;
-    template<typename Body> class do_group_task;
 } // namespace internal
 //! @endcond
 
 //! Class the user supplied algorithm body uses to add new tasks
 /** \param Item Work item type **/
-template<typename Item>
-class parallel_do_feeder: internal::no_copy
-{
-    parallel_do_feeder() {}
-    virtual ~parallel_do_feeder () {}
-    virtual void internal_add( const Item& item ) = 0;
-    template<typename Body_, typename Item_> friend class internal::parallel_do_feeder_impl;
-public:
-    //! Add a work item to a running parallel_do.
-    void add( const Item& item ) {internal_add(item);}
-};
+    template<typename Item>
+    class parallel_do_feeder: ::tbb::internal::no_copy
+    {
+        parallel_do_feeder() {}
+        virtual ~parallel_do_feeder () {}
+        virtual void internal_add_copy( const Item& item ) = 0;
+#if __TBB_CPP11_RVALUE_REF_PRESENT
+        virtual void internal_add_move( Item&& item ) = 0;
+#endif
+        template<typename Body_, typename Item_> friend class internal::parallel_do_feeder_impl;
+    public:
+        //! Add a work item to a running parallel_do.
+        void add( const Item& item ) {internal_add_copy(item);}
+#if __TBB_CPP11_RVALUE_REF_PRESENT
+        void add( Item&& item ) {internal_add_move(std::move(item));}
+#endif
+    };
 
 //! @cond INTERNAL
 namespace internal {
+    template<typename Body> class do_group_task;
+
     //! For internal use only.
     /** Selects one of the two possible forms of function call member operator.
         @ingroup algorithms **/
@@ -60,19 +67,26 @@ namespace internal {
     {
         typedef parallel_do_feeder<Item> Feeder;
         template<typename A1, typename A2, typename CvItem >
-        static void internal_call( const Body& obj, A1& arg1, A2&, void (Body::*)(CvItem) const ) {
+        static void internal_call( const Body& obj, __TBB_FORWARDING_REF(A1) arg1, A2&, void (Body::*)(CvItem) const ) {
+            obj(tbb::internal::forward<A1>(arg1));
+        }
+        template<typename A1, typename A2, typename CvItem >
+        static void internal_call( const Body& obj, __TBB_FORWARDING_REF(A1) arg1, A2& arg2, void (Body::*)(CvItem, parallel_do_feeder<Item>&) const ) {
+            obj(tbb::internal::forward<A1>(arg1), arg2);
+        }
+        template<typename A1, typename A2, typename CvItem >
+        static void internal_call( const Body& obj, __TBB_FORWARDING_REF(A1) arg1, A2&, void (Body::*)(CvItem&) const ) {
             obj(arg1);
         }
         template<typename A1, typename A2, typename CvItem >
-        static void internal_call( const Body& obj, A1& arg1, A2& arg2, void (Body::*)(CvItem, parallel_do_feeder<Item>&) const ) {
+        static void internal_call( const Body& obj, __TBB_FORWARDING_REF(A1) arg1, A2& arg2, void (Body::*)(CvItem&, parallel_do_feeder<Item>&) const ) {
             obj(arg1, arg2);
         }
-
     public:
-        template<typename A1, typename A2 >
-        static void call( const Body& obj, A1& arg1, A2& arg2 )
+        template<typename A1, typename A2>
+        static void call( const Body& obj, __TBB_FORWARDING_REF(A1) arg1, A2& arg2 )
         {
-            internal_call( obj, arg1, arg2, &Body::operator() );
+            internal_call( obj, tbb::internal::forward<A1>(arg1), arg2, &Body::operator() );
         }
     };
 
@@ -87,14 +101,19 @@ namespace internal {
         Item my_value;
         feeder_type& my_feeder;
 
-        do_iteration_task( const Item& value, feeder_type& feeder ) : 
+        do_iteration_task( const Item& value, feeder_type& feeder ) :
             my_value(value), my_feeder(feeder)
         {}
 
-        /*override*/ 
-        task* execute()
+#if __TBB_CPP11_RVALUE_REF_PRESENT
+        do_iteration_task( Item&& value, feeder_type& feeder ) :
+            my_value(std::move(value)), my_feeder(feeder)
+        {}
+#endif
+
+        task* execute() __TBB_override
         {
-            parallel_do_operator_selector<Body, Item>::call(*my_feeder.my_body, my_value, my_feeder);
+            parallel_do_operator_selector<Body, Item>::call(*my_feeder.my_body, tbb::internal::move(my_value), my_feeder);
             return NULL;
         }
 
@@ -109,20 +128,19 @@ namespace internal {
         Iterator my_iter;
         feeder_type& my_feeder;
 
-        do_iteration_task_iter( const Iterator& iter, feeder_type& feeder ) : 
+        do_iteration_task_iter( const Iterator& iter, feeder_type& feeder ) :
             my_iter(iter), my_feeder(feeder)
         {}
 
-        /*override*/ 
-        task* execute()
+        task* execute() __TBB_override
         {
             parallel_do_operator_selector<Body, Item>::call(*my_feeder.my_body, *my_iter, my_feeder);
             return NULL;
         }
 
-        template<typename Iterator_, typename Body_, typename Item_> friend class do_group_task_forward;    
-        template<typename Body_, typename Item_> friend class do_group_task_input;    
-        template<typename Iterator_, typename Body_, typename Item_> friend class do_task_iter;    
+        template<typename Iterator_, typename Body_, typename Item_> friend class do_group_task_forward;
+        template<typename Body_, typename Item_> friend class do_group_task_input;
+        template<typename Iterator_, typename Body_, typename Item_> friend class do_task_iter;
     }; // class do_iteration_task_iter
 
     //! For internal use only.
@@ -131,15 +149,37 @@ namespace internal {
     template<class Body, typename Item>
     class parallel_do_feeder_impl : public parallel_do_feeder<Item>
     {
-        /*override*/ 
-        void internal_add( const Item& item )
+#if __TBB_CPP11_RVALUE_REF_PRESENT
+        //Avoiding use of copy constructor in a virtual method if the type does not support it
+        void internal_add_copy_impl(std::true_type, const Item& item) {
+            typedef do_iteration_task<Body, Item> iteration_type;
+            iteration_type& t = *new (task::allocate_additional_child_of(*my_barrier)) iteration_type(item, *this);
+            task::spawn(t);
+        }
+        void internal_add_copy_impl(std::false_type, const Item&) {
+            __TBB_ASSERT(false, "Overloading for r-value reference doesn't work or it's not movable and not copyable object");
+        }
+        void internal_add_copy( const Item& item ) __TBB_override
+        {
+#if __TBB_CPP11_IS_COPY_CONSTRUCTIBLE_PRESENT
+            internal_add_copy_impl(typename std::is_copy_constructible<Item>::type(), item);
+#else
+            internal_add_copy_impl(std::true_type(), item);
+#endif
+        }
+        void internal_add_move( Item&& item ) __TBB_override
         {
             typedef do_iteration_task<Body, Item> iteration_type;
-
+            iteration_type& t = *new (task::allocate_additional_child_of(*my_barrier)) iteration_type(std::move(item), *this);
+            task::spawn(t);
+        }
+#else /* ! __TBB_CPP11_RVALUE_REF_PRESENT */
+        void internal_add_copy(const Item& item) __TBB_override {
+            typedef do_iteration_task<Body, Item> iteration_type;
             iteration_type& t = *new (task::allocate_additional_child_of(*my_barrier)) iteration_type(item, *this);
-
-            t.spawn( t );
+            task::spawn(t);
         }
+#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */
     public:
         const Body* my_body;
         empty_task* my_barrier;
@@ -168,29 +208,29 @@ namespace internal {
     //! For internal use only
     /** Unpacks a block of iterations.
         @ingroup algorithms */
-    
+
     template<typename Iterator, typename Body, typename Item>
     class do_group_task_forward: public task
     {
-        static const size_t max_arg_size = 4;         
+        static const size_t max_arg_size = 4;
 
         typedef parallel_do_feeder_impl<Body, Item> feeder_type;
 
         feeder_type& my_feeder;
         Iterator my_first;
         size_t my_size;
-        
-        do_group_task_forward( Iterator first, size_t size, feeder_type& feeder ) 
+
+        do_group_task_forward( Iterator first, size_t size, feeder_type& feeder )
             : my_feeder(feeder), my_first(first), my_size(size)
         {}
 
-        /*override*/ task* execute()
+        task* execute() __TBB_override
         {
             typedef do_iteration_task_iter<Iterator, Body, Item> iteration_type;
             __TBB_ASSERT( my_size>0, NULL );
             task_list list;
-            task* t; 
-            size_t k=0; 
+            task* t;
+            size_t k=0;
             for(;;) {
                 t = new( allocate_child() ) iteration_type( my_first, my_feeder );
                 ++my_first;
@@ -209,27 +249,32 @@ namespace internal {
     template<typename Body, typename Item>
     class do_group_task_input: public task
     {
-        static const size_t max_arg_size = 4;         
-        
+        static const size_t max_arg_size = 4;
+
         typedef parallel_do_feeder_impl<Body, Item> feeder_type;
 
         feeder_type& my_feeder;
         size_t my_size;
         aligned_space<Item, max_arg_size> my_arg;
 
-        do_group_task_input( feeder_type& feeder ) 
+        do_group_task_input( feeder_type& feeder )
             : my_feeder(feeder), my_size(0)
         {}
 
-        /*override*/ task* execute()
+        task* execute() __TBB_override
         {
-            typedef do_iteration_task_iter<Item*, Body, Item> iteration_type;
+#if __TBB_CPP11_RVALUE_REF_PRESENT
+            typedef std::move_iterator<Item*> Item_iterator;
+#else
+            typedef Item* Item_iterator;
+#endif
+            typedef do_iteration_task_iter<Item_iterator, Body, Item> iteration_type;
             __TBB_ASSERT( my_size>0, NULL );
             task_list list;
-            task* t; 
-            size_t k=0; 
+            task* t;
+            size_t k=0;
             for(;;) {
-                t = new( allocate_child() ) iteration_type( my_arg.begin() + k, my_feeder );
+                t = new( allocate_child() ) iteration_type( Item_iterator(my_arg.begin() + k), my_feeder );
                 if( ++k==my_size ) break;
                 list.push_back(*t);
             }
@@ -246,7 +291,7 @@ namespace internal {
 
         template<typename Iterator_, typename Body_, typename Item_> friend class do_task_iter;
     }; // class do_group_task_input
-    
+
     //! For internal use only.
     /** Gets block of iterations and packages them into a do_group_task.
         @ingroup algorithms */
@@ -256,7 +301,7 @@ namespace internal {
         typedef parallel_do_feeder_impl<Body, Item> feeder_type;
 
     public:
-        do_task_iter( Iterator first, Iterator last , feeder_type& feeder ) : 
+        do_task_iter( Iterator first, Iterator last , feeder_type& feeder ) :
             my_first(first), my_last(last), my_feeder(feeder)
         {}
 
@@ -267,15 +312,15 @@ namespace internal {
 
         /* Do not merge run(xxx) and run_xxx() methods. They are separated in order
             to make sure that compilers will eliminate unused argument of type xxx
-            (that is will not put it on stack). The sole purpose of this argument 
+            (that is will not put it on stack). The sole purpose of this argument
             is overload resolution.
-            
-            An alternative could be using template functions, but explicit specialization 
-            of member function templates is not supported for non specialized class 
-            templates. Besides template functions would always fall back to the least 
-            efficient variant (the one for input iterators) in case of iterators having 
+
+            An alternative could be using template functions, but explicit specialization
+            of member function templates is not supported for non specialized class
+            templates. Besides template functions would always fall back to the least
+            efficient variant (the one for input iterators) in case of iterators having
             custom tags derived from basic ones. */
-        /*override*/ task* execute()
+        task* execute() __TBB_override
         {
             typedef typename std::iterator_traits<Iterator>::iterator_category iterator_tag;
             return run( (iterator_tag*)NULL );
@@ -284,13 +329,14 @@ namespace internal {
         /** This is the most restricted variant that operates on input iterators or
             iterators with unknown tags (tags not derived from the standard ones). **/
         inline task* run( void* ) { return run_for_input_iterator(); }
-        
+
         task* run_for_input_iterator() {
             typedef do_group_task_input<Body, Item> block_type;
 
             block_type& t = *new( allocate_additional_child_of(*my_feeder.my_barrier) ) block_type(my_feeder);
-            size_t k=0; 
+            size_t k=0;
             while( !(my_first == my_last) ) {
+                // Move semantics are automatically used when supported by the iterator
                 new (t.my_arg.begin() + k) Item(*my_first);
                 ++my_first;
                 if( ++k==block_type::max_arg_size ) {
@@ -314,7 +360,7 @@ namespace internal {
             typedef do_group_task_forward<Iterator, Body, Item> block_type;
 
             Iterator first = my_first;
-            size_t k=0; 
+            size_t k=0;
             while( !(my_first==my_last) ) {
                 ++my_first;
                 if( ++k==block_type::max_arg_size ) {
@@ -325,14 +371,14 @@ namespace internal {
             }
             return k==0 ? NULL : new( allocate_additional_child_of(*my_feeder.my_barrier) ) block_type(first, k, my_feeder);
         }
-        
+
         inline task* run( std::random_access_iterator_tag* ) { return run_for_random_access_iterator(); }
 
         task* run_for_random_access_iterator() {
             typedef do_group_task_forward<Iterator, Body, Item> block_type;
             typedef do_iteration_task_iter<Iterator, Body, Item> iteration_type;
-            
-            size_t k = static_cast<size_t>(my_last-my_first); 
+
+            size_t k = static_cast<size_t>(my_last-my_first);
             if( k > block_type::max_arg_size ) {
                 Iterator middle = my_first + k/2;
 
@@ -346,8 +392,8 @@ namespace internal {
                 return this;
             }else if( k != 0 ) {
                 task_list list;
-                task* t; 
-                size_t k1=0; 
+                task* t;
+                size_t k1=0;
                 for(;;) {
                     t = new( allocate_child() ) iteration_type(my_first, my_feeder);
                     ++my_first;
@@ -365,7 +411,7 @@ namespace internal {
     //! For internal use only.
     /** Implements parallel iteration over a range.
         @ingroup algorithms */
-    template<typename Iterator, typename Body, typename Item> 
+    template<typename Iterator, typename Body, typename Item>
     void run_parallel_do( Iterator first, Iterator last, const Body& body
 #if __TBB_TASK_GROUP_CONTEXT
         , task_group_context& context
@@ -389,57 +435,57 @@ namespace internal {
     //! For internal use only.
     /** Detects types of Body's operator function arguments.
         @ingroup algorithms **/
-    template<typename Iterator, typename Body, typename Item> 
+    template<typename Iterator, typename Body, typename Item>
     void select_parallel_do( Iterator first, Iterator last, const Body& body, void (Body::*)(Item) const
 #if __TBB_TASK_GROUP_CONTEXT
-        , task_group_context& context 
-#endif // __TBB_TASK_GROUP_CONTEXT 
+        , task_group_context& context
+#endif
         )
     {
-        run_parallel_do<Iterator, Body, typename strip<Item>::type>( first, last, body
+        run_parallel_do<Iterator, Body, typename ::tbb::internal::strip<Item>::type>( first, last, body
 #if __TBB_TASK_GROUP_CONTEXT
             , context
-#endif // __TBB_TASK_GROUP_CONTEXT 
+#endif
             );
     }
 
     //! For internal use only.
     /** Detects types of Body's operator function arguments.
         @ingroup algorithms **/
-    template<typename Iterator, typename Body, typename Item, typename _Item> 
+    template<typename Iterator, typename Body, typename Item, typename _Item>
     void select_parallel_do( Iterator first, Iterator last, const Body& body, void (Body::*)(Item, parallel_do_feeder<_Item>&) const
 #if __TBB_TASK_GROUP_CONTEXT
-        , task_group_context& context 
-#endif // __TBB_TASK_GROUP_CONTEXT
+        , task_group_context& context
+#endif
         )
     {
-        run_parallel_do<Iterator, Body, typename strip<Item>::type>( first, last, body
+        run_parallel_do<Iterator, Body, typename ::tbb::internal::strip<Item>::type>( first, last, body
 #if __TBB_TASK_GROUP_CONTEXT
             , context
-#endif // __TBB_TASK_GROUP_CONTEXT
+#endif
             );
     }
 
 } // namespace internal
+} // namespace interface9
 //! @endcond
 
-
 /** \page parallel_do_body_req Requirements on parallel_do body
     Class \c Body implementing the concept of parallel_do body must define:
-    - \code 
-        B::operator()( 
+    - \code
+        B::operator()(
                 cv_item_type item,
                 parallel_do_feeder<item_type>& feeder
         ) const
-        
+
         OR
 
         B::operator()( cv_item_type& item ) const
-      \endcode                                                      Process item. 
-                                                                    May be invoked concurrently  for the same \c this but different \c item.
-                                                        
-    - \code item_type( const item_type& ) \endcode 
-                                                                    Copy a work item.
+      \endcode                                               Process item.
+                                                             May be invoked concurrently  for the same \c this but different \c item.
+
+    - \code item_type( const item_type& ) \endcode
+                                                             Copy a work item.
     - \code ~item_type() \endcode                            Destroy a work item
 **/
 
@@ -448,18 +494,18 @@ namespace internal {
 //@{
 //! Parallel iteration over a range, with optional addition of more work.
 /** @ingroup algorithms */
-template<typename Iterator, typename Body> 
+template<typename Iterator, typename Body>
 void parallel_do( Iterator first, Iterator last, const Body& body )
 {
     if ( first == last )
         return;
 #if __TBB_TASK_GROUP_CONTEXT
     task_group_context context;
-#endif // __TBB_TASK_GROUP_CONTEXT
-    internal::select_parallel_do( first, last, body, &Body::operator()
+#endif
+    interface9::internal::select_parallel_do( first, last, body, &Body::operator()
 #if __TBB_TASK_GROUP_CONTEXT
         , context
-#endif // __TBB_TASK_GROUP_CONTEXT
+#endif
         );
 }
 
@@ -476,12 +522,12 @@ void parallel_do(const Range& rng, const Body& body) {
 #if __TBB_TASK_GROUP_CONTEXT
 //! Parallel iteration over a range, with optional addition of more work and user-supplied context
 /** @ingroup algorithms */
-template<typename Iterator, typename Body> 
+template<typename Iterator, typename Body>
 void parallel_do( Iterator first, Iterator last, const Body& body, task_group_context& context  )
 {
     if ( first == last )
         return;
-    internal::select_parallel_do( first, last, body, &Body::operator(), context );
+    interface9::internal::select_parallel_do( first, last, body, &Body::operator(), context );
 }
 
 template<typename Range, typename Body>
@@ -498,6 +544,8 @@ void parallel_do(const Range& rng, const Body& body, task_group_context& context
 
 //@}
 
-} // namespace 
+using interface9::parallel_do_feeder;
+
+} // namespace
 
 #endif /* __TBB_parallel_do_H */
diff --git a/include/tbb/parallel_for.h b/include/tbb/parallel_for.h
index dd6eb99..2cab658 100644
--- a/include/tbb/parallel_for.h
+++ b/include/tbb/parallel_for.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_parallel_for_H
@@ -29,7 +29,7 @@
 
 namespace tbb {
 
-namespace interface7 {
+namespace interface9 {
 //! @cond INTERNAL
 namespace internal {
 
@@ -43,10 +43,10 @@ namespace internal {
         Range my_range;
         const Body my_body;
         typename Partitioner::task_partition_type my_partition;
-        /*override*/ task* execute();
+        task* execute() __TBB_override;
 
         //! Update affinity info, if any.
-        /*override*/ void note_affinity( affinity_id id ) {
+        void note_affinity( affinity_id id ) __TBB_override {
             my_partition.note_affinity( id );
         }
 
@@ -133,7 +133,7 @@ namespace internal {
 
 //! @cond INTERNAL
 namespace internal {
-    using interface7::internal::start_for;
+    using interface9::internal::start_for;
 
     //! Calls the function with values from range [begin, end) with a step provided
     template<typename Function, typename Index>
@@ -200,6 +200,13 @@ void parallel_for( const Range& range, const Body& body, const auto_partitioner&
     internal::start_for<Range,Body,const auto_partitioner>::run(range,body,partitioner);
 }
 
+//! Parallel iteration over range with static_partitioner.
+/** @ingroup algorithms **/
+template<typename Range, typename Body>
+void parallel_for( const Range& range, const Body& body, const static_partitioner& partitioner ) {
+    internal::start_for<Range,Body,const static_partitioner>::run(range,body,partitioner);
+}
+
 //! Parallel iteration over range with affinity_partitioner.
 /** @ingroup algorithms **/
 template<typename Range, typename Body>
@@ -229,6 +236,13 @@ void parallel_for( const Range& range, const Body& body, const auto_partitioner&
     internal::start_for<Range,Body,const auto_partitioner>::run(range, body, partitioner, context);
 }
 
+//! Parallel iteration over range with static_partitioner and user-supplied context.
+/** @ingroup algorithms **/
+template<typename Range, typename Body>
+void parallel_for( const Range& range, const Body& body, const static_partitioner& partitioner, task_group_context& context ) {
+    internal::start_for<Range,Body,const static_partitioner>::run(range, body, partitioner, context);
+}
+
 //! Parallel iteration over range with affinity_partitioner and user-supplied context.
 /** @ingroup algorithms **/
 template<typename Range, typename Body>
@@ -270,6 +284,11 @@ template <typename Index, typename Function>
 void parallel_for(Index first, Index last, Index step, const Function& f, const auto_partitioner& partitioner) {
     parallel_for_impl<Index,Function,const auto_partitioner>(first, last, step, f, partitioner);
 }
+//! Parallel iteration over a range of integers with a step provided and static partitioner
+template <typename Index, typename Function>
+void parallel_for(Index first, Index last, Index step, const Function& f, const static_partitioner& partitioner) {
+    parallel_for_impl<Index,Function,const static_partitioner>(first, last, step, f, partitioner);
+}
 //! Parallel iteration over a range of integers with a step provided and affinity partitioner
 template <typename Index, typename Function>
 void parallel_for(Index first, Index last, Index step, const Function& f, affinity_partitioner& partitioner) {
@@ -291,6 +310,11 @@ template <typename Index, typename Function>
 void parallel_for(Index first, Index last, const Function& f, const auto_partitioner& partitioner) {
     parallel_for_impl<Index,Function,const auto_partitioner>(first, last, static_cast<Index>(1), f, partitioner);
 }
+//! Parallel iteration over a range of integers with a default step value and static partitioner
+template <typename Index, typename Function>
+void parallel_for(Index first, Index last, const Function& f, const static_partitioner& partitioner) {
+    parallel_for_impl<Index,Function,const static_partitioner>(first, last, static_cast<Index>(1), f, partitioner);
+}
 //! Parallel iteration over a range of integers with a default step value and affinity partitioner
 template <typename Index, typename Function>
 void parallel_for(Index first, Index last, const Function& f, affinity_partitioner& partitioner) {
@@ -327,6 +351,11 @@ void parallel_for(Index first, Index last, Index step, const Function& f, const
 void parallel_for(Index first, Index last, Index step, const Function& f, const auto_partitioner& partitioner, tbb::task_group_context &context) {
     parallel_for_impl<Index,Function,const auto_partitioner>(first, last, step, f, partitioner, context);
 }
+//! Parallel iteration over a range of integers with explicit step, task group context, and static partitioner
+template <typename Index, typename Function>
+void parallel_for(Index first, Index last, Index step, const Function& f, const static_partitioner& partitioner, tbb::task_group_context &context) {
+    parallel_for_impl<Index,Function,const static_partitioner>(first, last, step, f, partitioner, context);
+}
 //! Parallel iteration over a range of integers with explicit step, task group context, and affinity partitioner
  template <typename Index, typename Function>
 void parallel_for(Index first, Index last, Index step, const Function& f, affinity_partitioner& partitioner, tbb::task_group_context &context) {
@@ -340,17 +369,22 @@ void parallel_for(Index first, Index last, const Function& f, tbb::task_group_co
     parallel_for_impl<Index,Function,const auto_partitioner>(first, last, static_cast<Index>(1), f, auto_partitioner(), context);
 }
 //! Parallel iteration over a range of integers with a default step value, explicit task group context, and simple partitioner
- template <typename Index, typename Function, typename Partitioner>
+ template <typename Index, typename Function>
 void parallel_for(Index first, Index last, const Function& f, const simple_partitioner& partitioner, tbb::task_group_context &context) {
     parallel_for_impl<Index,Function,const simple_partitioner>(first, last, static_cast<Index>(1), f, partitioner, context);
 }
 //! Parallel iteration over a range of integers with a default step value, explicit task group context, and auto partitioner
- template <typename Index, typename Function, typename Partitioner>
+ template <typename Index, typename Function>
 void parallel_for(Index first, Index last, const Function& f, const auto_partitioner& partitioner, tbb::task_group_context &context) {
     parallel_for_impl<Index,Function,const auto_partitioner>(first, last, static_cast<Index>(1), f, partitioner, context);
 }
+//! Parallel iteration over a range of integers with a default step value, explicit task group context, and static partitioner
+template <typename Index, typename Function>
+void parallel_for(Index first, Index last, const Function& f, const static_partitioner& partitioner, tbb::task_group_context &context) {
+    parallel_for_impl<Index,Function,const static_partitioner>(first, last, static_cast<Index>(1), f, partitioner, context);
+}
 //! Parallel iteration over a range of integers with a default step value, explicit task group context, and affinity_partitioner
- template <typename Index, typename Function, typename Partitioner>
+ template <typename Index, typename Function>
 void parallel_for(Index first, Index last, const Function& f, affinity_partitioner& partitioner, tbb::task_group_context &context) {
     parallel_for_impl(first, last, static_cast<Index>(1), f, partitioner, context);
 }
diff --git a/include/tbb/parallel_for_each.h b/include/tbb/parallel_for_each.h
index e0527dd..6c2ec9f 100644
--- a/include/tbb/parallel_for_each.h
+++ b/include/tbb/parallel_for_each.h
@@ -1,27 +1,28 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_parallel_for_each_H
 #define __TBB_parallel_for_each_H
 
 #include "parallel_do.h"
+#include "parallel_for.h"
 
 namespace tbb {
 
@@ -29,16 +30,59 @@ namespace tbb {
 namespace internal {
     // The class calls user function in operator()
     template <typename Function, typename Iterator>
-    class parallel_for_each_body : internal::no_assign {
+    class parallel_for_each_body_do : internal::no_assign {
         const Function &my_func;
     public:
-        parallel_for_each_body(const Function &_func) : my_func(_func) {}
-        parallel_for_each_body(const parallel_for_each_body<Function, Iterator> &_caller) : my_func(_caller.my_func) {}
+        parallel_for_each_body_do(const Function &_func) : my_func(_func) {}
 
-        void operator() ( typename std::iterator_traits<Iterator>::reference value ) const {
+        void operator()(typename std::iterator_traits<Iterator>::reference value) const {
             my_func(value);
         }
     };
+
+    // The class calls user function in operator()
+    template <typename Function, typename Iterator>
+    class parallel_for_each_body_for : internal::no_assign {
+        const Function &my_func;
+    public:
+        parallel_for_each_body_for(const Function &_func) : my_func(_func) {}
+
+        void operator()(tbb::blocked_range<Iterator> range) const {
+#if __INTEL_COMPILER
+#pragma ivdep
+#endif
+            for(Iterator it = range.begin(), end = range.end(); it != end; ++it) {
+                my_func(*it);
+            }
+        }
+    };
+
+    template<typename Iterator, typename Function, typename Generic>
+    struct parallel_for_each_impl {
+#if __TBB_TASK_GROUP_CONTEXT
+        static void doit(Iterator first, Iterator last, const Function& f, task_group_context &context) {
+            internal::parallel_for_each_body_do<Function, Iterator> body(f);
+            tbb::parallel_do(first, last, body, context);
+        }
+#endif
+        static void doit(Iterator first, Iterator last, const Function& f) {
+            internal::parallel_for_each_body_do<Function, Iterator> body(f);
+            tbb::parallel_do(first, last, body);
+        }
+    };
+    template<typename Iterator, typename Function>
+    struct parallel_for_each_impl<Iterator, Function, std::random_access_iterator_tag> {
+#if __TBB_TASK_GROUP_CONTEXT
+        static void doit(Iterator first, Iterator last, const Function& f, task_group_context &context) {
+            internal::parallel_for_each_body_for<Function, Iterator> body(f);
+            tbb::parallel_for(tbb::blocked_range<Iterator>(first, last), body, context);
+        }
+#endif
+        static void doit(Iterator first, Iterator last, const Function& f) {
+            internal::parallel_for_each_body_for<Function, Iterator> body(f);
+            tbb::parallel_for(tbb::blocked_range<Iterator>(first, last), body);
+        }
+    };
 } // namespace internal
 //! @endcond
 
@@ -48,10 +92,9 @@ namespace internal {
 //! Calls function f for all items from [first, last) interval using user-supplied context
 /** @ingroup algorithms */
 #if __TBB_TASK_GROUP_CONTEXT
-template<typename InputIterator, typename Function>
-void parallel_for_each(InputIterator first, InputIterator last, const Function& f, task_group_context &context) {
-    internal::parallel_for_each_body<Function, InputIterator> body(f);
-    tbb::parallel_do (first, last, body, context);
+template<typename Iterator, typename Function>
+void parallel_for_each(Iterator first, Iterator last, const Function& f, task_group_context &context) {
+    internal::parallel_for_each_impl<Iterator, Function, typename std::iterator_traits<Iterator>::iterator_category>::doit(first, last, f, context);
 }
 
 //! Calls function f for all items from rng using user-supplied context
@@ -70,10 +113,9 @@ void parallel_for_each(const Range& rng, const Function& f, task_group_context&
 #endif /* __TBB_TASK_GROUP_CONTEXT */
 
 //! Uses default context
-template<typename InputIterator, typename Function>
-void parallel_for_each(InputIterator first, InputIterator last, const Function& f) {
-    internal::parallel_for_each_body<Function, InputIterator> body(f);
-    tbb::parallel_do (first, last, body);
+template<typename Iterator, typename Function>
+void parallel_for_each(Iterator first, Iterator last, const Function& f) {
+    internal::parallel_for_each_impl<Iterator, Function, typename std::iterator_traits<Iterator>::iterator_category>::doit(first, last, f);
 }
 
 //! Uses default context
diff --git a/include/tbb/parallel_invoke.h b/include/tbb/parallel_invoke.h
index 14c0764..0dd7590 100644
--- a/include/tbb/parallel_invoke.h
+++ b/include/tbb/parallel_invoke.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_parallel_invoke_H
@@ -24,7 +24,7 @@
 #include "task.h"
 
 #if __TBB_VARIADIC_PARALLEL_INVOKE
-    #include <utility>
+    #include <utility> // std::forward
 #endif
 
 namespace tbb {
@@ -43,8 +43,7 @@ namespace internal {
         function_invoker(const function& _function) : my_function(_function) {}
     private:
         const function &my_function;
-        /*override*/
-        task* execute()
+        task* execute() __TBB_override
         {
             my_function();
             return NULL;
@@ -60,7 +59,7 @@ namespace internal {
         const function3& my_func3;
         bool is_recycled;
 
-        task* execute (){
+        task* execute () __TBB_override {
             if(is_recycled){
                 return NULL;
             }else{
diff --git a/include/tbb/parallel_reduce.h b/include/tbb/parallel_reduce.h
index b0e9357..0596ae0 100644
--- a/include/tbb/parallel_reduce.h
+++ b/include/tbb/parallel_reduce.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_parallel_reduce_H
@@ -29,7 +29,7 @@
 
 namespace tbb {
 
-namespace interface7 {
+namespace interface9 {
 //! @cond INTERNAL
 namespace internal {
 
@@ -62,7 +62,7 @@ namespace internal {
             if( has_right_zombie )
                 zombie_space.begin()->~Body();
         }
-        task* execute() {
+        task* execute() __TBB_override {
             if( has_right_zombie ) {
                 // Right child was stolen.
                 Body* s = zombie_space.begin();
@@ -89,9 +89,9 @@ namespace internal {
         Range my_range;
         typename Partitioner::task_partition_type my_partition;
         reduction_context my_context;
-        /*override*/ task* execute();
+        task* execute() __TBB_override;
         //! Update affinity info, if any
-        /*override*/ void note_affinity( affinity_id id ) {
+        void note_affinity( affinity_id id ) __TBB_override {
             my_partition.note_affinity( id );
         }
         template<typename Body_>
@@ -209,7 +209,7 @@ public:
             my_right_body( body, split() )
         {
         }
-        task* execute() {
+        task* execute() __TBB_override {
             my_left_body.join( my_right_body );
             return NULL;
         }
@@ -224,7 +224,7 @@ public:
         typedef finish_deterministic_reduce<Body> finish_type;
         Body &my_body;
         Range my_range;
-        /*override*/ task* execute();
+        task* execute() __TBB_override;
 
         //! Constructor used for root task
         start_deterministic_reduce( const Range& range, Body& body ) :
@@ -281,8 +281,8 @@ public:
 
 //! @cond INTERNAL
 namespace internal {
-    using interface7::internal::start_reduce;
-    using interface7::internal::start_deterministic_reduce;
+    using interface9::internal::start_reduce;
+    using interface9::internal::start_deterministic_reduce;
     //! Auxiliary class for parallel_reduce; for internal use only.
     /** The adaptor class that implements \ref parallel_reduce_body_req "parallel_reduce Body"
         using given \ref parallel_reduce_lambda_req "anonymous function objects".
@@ -374,6 +374,13 @@ void parallel_reduce( const Range& range, Body& body, const auto_partitioner& pa
     internal::start_reduce<Range,Body,const auto_partitioner>::run( range, body, partitioner );
 }
 
+//! Parallel iteration with reduction and static_partitioner
+/** @ingroup algorithms **/
+template<typename Range, typename Body>
+void parallel_reduce( const Range& range, Body& body, const static_partitioner& partitioner ) {
+    internal::start_reduce<Range,Body,const static_partitioner>::run( range, body, partitioner );
+}
+
 //! Parallel iteration with reduction and affinity_partitioner
 /** @ingroup algorithms **/
 template<typename Range, typename Body>
@@ -396,6 +403,13 @@ void parallel_reduce( const Range& range, Body& body, const auto_partitioner& pa
     internal::start_reduce<Range,Body,const auto_partitioner>::run( range, body, partitioner, context );
 }
 
+//! Parallel iteration with reduction, static_partitioner and user-supplied context
+/** @ingroup algorithms **/
+template<typename Range, typename Body>
+void parallel_reduce( const Range& range, Body& body, const static_partitioner& partitioner, task_group_context& context ) {
+    internal::start_reduce<Range,Body,const static_partitioner>::run( range, body, partitioner, context );
+}
+
 //! Parallel iteration with reduction, affinity_partitioner and user-supplied context
 /** @ingroup algorithms **/
 template<typename Range, typename Body>
@@ -439,6 +453,17 @@ Value parallel_reduce( const Range& range, const Value& identity, const RealBody
     return body.result();
 }
 
+//! Parallel iteration with reduction and static_partitioner
+/** @ingroup algorithms **/
+template<typename Range, typename Value, typename RealBody, typename Reduction>
+Value parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,
+                       const static_partitioner& partitioner ) {
+    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const static_partitioner>
+                                        ::run( range, body, partitioner );
+    return body.result();
+}
+
 //! Parallel iteration with reduction and affinity_partitioner
 /** @ingroup algorithms **/
 template<typename Range, typename Value, typename RealBody, typename Reduction>
@@ -473,6 +498,17 @@ Value parallel_reduce( const Range& range, const Value& identity, const RealBody
     return body.result();
 }
 
+//! Parallel iteration with reduction, static_partitioner and user-supplied context
+/** @ingroup algorithms **/
+template<typename Range, typename Value, typename RealBody, typename Reduction>
+Value parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,
+                       const static_partitioner& partitioner, task_group_context& context ) {
+    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const static_partitioner>
+                                        ::run( range, body, partitioner, context );
+    return body.result();
+}
+
 //! Parallel iteration with reduction, affinity_partitioner and user-supplied context
 /** @ingroup algorithms **/
 template<typename Range, typename Value, typename RealBody, typename Reduction>
diff --git a/include/tbb/parallel_scan.h b/include/tbb/parallel_scan.h
index 716338b..faf6b31 100644
--- a/include/tbb/parallel_scan.h
+++ b/include/tbb/parallel_scan.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_parallel_scan_H
@@ -43,7 +43,7 @@ struct final_scan_tag {
 //! @cond INTERNAL
 namespace internal {
 
-    //! Performs final scan for a leaf 
+    //! Performs final scan for a leaf
     /** @ingroup algorithms */
     template<typename Range, typename Body>
     class final_sum: public task {
@@ -61,19 +61,19 @@ namespace internal {
         }
         ~final_sum() {
             my_range.begin()->~Range();
-        }     
+        }
         void finish_construction( const Range& range_, Body* stuff_last_ ) {
             new( my_range.begin() ) Range(range_);
             my_stuff_last = stuff_last_;
         }
     private:
-        /*override*/ task* execute() {
+        task* execute() __TBB_override {
             my_body( *my_range.begin(), final_scan_tag() );
             if( my_stuff_last )
                 my_stuff_last->assign(my_body);
             return NULL;
         }
-    };       
+    };
 
     //! Split work to be done in the scan.
     /** @ingroup algorithms */
@@ -81,20 +81,21 @@ namespace internal {
     class sum_node: public task {
         typedef final_sum<Range,Body> final_sum_type;
     public:
-        final_sum_type *my_incoming; 
+        final_sum_type *my_incoming;
         final_sum_type *my_body;
         Body *my_stuff_last;
     private:
         final_sum_type *my_left_sum;
         sum_node *my_left;
-        sum_node *my_right;     
+        sum_node *my_right;
         bool my_left_is_final;
         Range my_range;
-        sum_node( const Range range_, bool left_is_final_ ) : 
-            my_left_sum(NULL), 
-            my_left(NULL), 
-            my_right(NULL), 
-            my_left_is_final(left_is_final_), 
+        sum_node( const Range range_, bool left_is_final_ ) :
+            my_stuff_last(NULL),
+            my_left_sum(NULL),
+            my_left(NULL),
+            my_right(NULL),
+            my_left_is_final(left_is_final_),
             my_range(range_)
         {
             // Poison fields that will be set by second pass.
@@ -113,7 +114,7 @@ namespace internal {
                 return n;
             }
         }
-        /*override*/ task* execute() {
+        task* execute() __TBB_override {
             if( my_body ) {
                 if( my_incoming )
                     my_left_sum->my_body.reverse_join( my_incoming->my_body );
@@ -122,7 +123,7 @@ namespace internal {
                 task* b = c.create_child(Range(my_range,split()),*my_left_sum,my_right,my_left_sum,my_stuff_last);
                 task* a = my_left_is_final ? NULL : c.create_child(my_range,*my_body,my_left,my_incoming,NULL);
                 set_ref_count( (a!=NULL)+(b!=NULL) );
-                my_body = NULL; 
+                my_body = NULL;
                 if( a ) spawn(*b);
                 else a = b;
                 return a;
@@ -149,11 +150,11 @@ namespace internal {
         final_sum_type* my_right_zombie;
         sum_node_type& my_result;
 
-        /*override*/ task* execute() {
+        task* execute() __TBB_override {
             __TBB_ASSERT( my_result.ref_count()==(my_result.my_left!=NULL)+(my_result.my_right!=NULL), NULL );
             if( my_result.my_left )
                 my_result.my_left_is_final = false;
-            if( my_right_zombie && my_sum ) 
+            if( my_right_zombie && my_sum )
                 ((*my_sum)->my_body).reverse_join(my_result.my_left_sum->my_body);
             __TBB_ASSERT( !my_return_slot, NULL );
             if( my_right_zombie || my_result.my_right ) {
@@ -168,9 +169,9 @@ namespace internal {
             return NULL;
         }
 
-        finish_scan( sum_node_type*& return_slot_, final_sum_type** sum_, sum_node_type& result_ ) : 
+        finish_scan( sum_node_type*& return_slot_, final_sum_type** sum_, sum_node_type& result_ ) :
             my_sum(sum_),
-            my_return_slot(return_slot_), 
+            my_return_slot(return_slot_),
             my_right_zombie(NULL),
             my_result(result_)
         {
@@ -186,7 +187,7 @@ namespace internal {
         typedef final_sum<Range,Body> final_sum_type;
         final_sum_type* my_body;
         /** Non-null if caller is requesting total. */
-        final_sum_type** my_sum; 
+        final_sum_type** my_sum;
         sum_node_type** my_return_slot;
         /** Null if computing root. */
         sum_node_type* my_parent_sum;
@@ -194,7 +195,7 @@ namespace internal {
         bool my_is_right_child;
         Range my_range;
         typename Partitioner::partition_type my_partition;
-        /*override*/ task* execute();
+        task* execute() __TBB_override ;
     public:
         start_scan( sum_node_type*& return_slot_, start_scan& parent_, sum_node_type* parent_sum_ ) :
             my_body(parent_.my_body),
@@ -233,6 +234,7 @@ namespace internal {
                     range_,
                     *temp_body,
                     partitioner_ );
+                temp_body->my_body.reverse_join(body_);
                 task::spawn_root_and_wait( pass1 );
                 if( root ) {
                     root->my_body = temp_body;
@@ -267,20 +269,20 @@ namespace internal {
                 (my_body->my_body)( my_range, final_scan_tag() );
             else if( my_sum )
                 (my_body->my_body)( my_range, pre_scan_tag() );
-            if( my_sum ) 
+            if( my_sum )
                 *my_sum = my_body;
             __TBB_ASSERT( !*my_return_slot, NULL );
         } else {
             sum_node_type* result;
-            if( my_parent_sum ) 
+            if( my_parent_sum )
                 result = new(allocate_additional_child_of(*my_parent_sum)) sum_node_type(my_range,/*my_left_is_final=*/my_is_final);
             else
                 result = new(task::allocate_root()) sum_node_type(my_range,/*my_left_is_final=*/my_is_final);
             finish_pass1_type& c = *new( allocate_continuation()) finish_pass1_type(*my_return_slot,my_sum,*result);
             // Split off right child
             start_scan& b = *new( c.allocate_child() ) start_scan( /*my_return_slot=*/result->my_right, *this, result );
-            b.my_is_right_child = true;    
-            // Left child is recycling of *this.  Must recycle this before spawning b, 
+            b.my_is_right_child = true;
+            // Left child is recycling of *this.  Must recycle this before spawning b,
             // otherwise b might complete and decrement c.ref_count() to zero, which
             // would cause c.execute() to run prematurely.
             recycle_as_child_of(c);
@@ -290,11 +292,11 @@ namespace internal {
             my_return_slot = &result->my_left;
             my_is_right_child = false;
             next_task = this;
-            my_parent_sum = result; 
+            my_parent_sum = result;
             __TBB_ASSERT( !*my_return_slot, NULL );
         }
         return next_task;
-    } 
+    }
 } // namespace internal
 //! @endcond
 
@@ -307,10 +309,10 @@ namespace internal {
     - \code Body::~Body(); \endcode                 Destructor
     - \code void Body::operator()( const Range& r, pre_scan_tag ); \endcode
                                                     Preprocess iterations for range \c r
-    - \code void Body::operator()( const Range& r, final_scan_tag ); \endcode 
+    - \code void Body::operator()( const Range& r, final_scan_tag ); \endcode
                                                     Do final processing for iterations of range \c r
     - \code void Body::reverse_join( Body& a ); \endcode
-                                                    Merge preprocessing state of \c a into \c this, where \c a was 
+                                                    Merge preprocessing state of \c a into \c this, where \c a was
                                                     created earlier from \c b by b's splitting constructor
 **/
 
diff --git a/include/tbb/parallel_sort.h b/include/tbb/parallel_sort.h
index 34f373a..07d3907 100644
--- a/include/tbb/parallel_sort.h
+++ b/include/tbb/parallel_sort.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_parallel_sort_H
@@ -30,49 +30,39 @@
 
 namespace tbb {
 
+namespace interface9 {
 //! @cond INTERNAL
 namespace internal {
 
+using tbb::internal::no_assign;
+
 //! Range used in quicksort to split elements into subranges based on a value.
-/** The split operation selects a splitter and places all elements less than or equal 
+/** The split operation selects a splitter and places all elements less than or equal
     to the value in the first range and the remaining elements in the second range.
     @ingroup algorithms */
 template<typename RandomAccessIterator, typename Compare>
 class quick_sort_range: private no_assign {
 
     inline size_t median_of_three(const RandomAccessIterator &array, size_t l, size_t m, size_t r) const {
-        return comp(array[l], array[m]) ? ( comp(array[m], array[r]) ? m : ( comp( array[l], array[r]) ? r : l ) ) 
+        return comp(array[l], array[m]) ? ( comp(array[m], array[r]) ? m : ( comp( array[l], array[r]) ? r : l ) )
                                         : ( comp(array[r], array[m]) ? m : ( comp( array[r], array[l] ) ? r : l ) );
     }
 
     inline size_t pseudo_median_of_nine( const RandomAccessIterator &array, const quick_sort_range &range ) const {
         size_t offset = range.size/8u;
-        return median_of_three(array, 
+        return median_of_three(array,
                                median_of_three(array, 0, offset, offset*2),
                                median_of_three(array, offset*3, offset*4, offset*5),
                                median_of_three(array, offset*6, offset*7, range.size - 1) );
 
     }
 
-public:
-
-    static const size_t grainsize = 500;
-    const Compare ∁
-    RandomAccessIterator begin;
-    size_t size;
-
-    quick_sort_range( RandomAccessIterator begin_, size_t size_, const Compare &comp_ ) :
-        comp(comp_), begin(begin_), size(size_) {}
-
-    bool empty() const {return size==0;}
-    bool is_divisible() const {return size>=grainsize;}
-
-    quick_sort_range( quick_sort_range& range, split ) : comp(range.comp) {
-        using std::swap;
+    size_t split_range( quick_sort_range& range ) {
+        using std::iter_swap;
         RandomAccessIterator array = range.begin;
-        RandomAccessIterator key0 = range.begin; 
+        RandomAccessIterator key0 = range.begin;
         size_t m = pseudo_median_of_nine(array, range);
-        if (m) swap ( array[0], array[m] );
+        if (m) iter_swap ( array, array+m );
 
         size_t i=0;
         size_t j=range.size;
@@ -90,26 +80,46 @@ public:
                 ++i;
             } while( comp( array[i],*key0 ));
             if( i==j ) goto partition;
-            swap( array[i], array[j] );
+            iter_swap( array+i, array+j );
         }
 partition:
         // Put the partition key were it belongs
-        swap( array[j], *key0 );
+        iter_swap( array+j, key0 );
         // array[l..j) is less or equal to key.
         // array(j..r) is greater or equal to key.
         // array[j] is equal to key
         i=j+1;
-        begin = array+i;
-        size = range.size-i;
+        size_t new_range_size = range.size-i;
         range.size = j;
+        return new_range_size;
     }
+
+public:
+
+    static const size_t grainsize = 500;
+    const Compare ∁
+    size_t size;
+    RandomAccessIterator begin;
+
+    quick_sort_range( RandomAccessIterator begin_, size_t size_, const Compare &comp_ ) :
+        comp(comp_), size(size_), begin(begin_) {}
+
+    bool empty() const {return size==0;}
+    bool is_divisible() const {return size>=grainsize;}
+
+    quick_sort_range( quick_sort_range& range, split )
+        : comp(range.comp)
+        , size(split_range(range))
+          // +1 accounts for the pivot element, which is at its correct place
+          // already and, therefore, is not included into subranges.
+        , begin(range.begin+range.size+1) {}
 };
 
 #if __TBB_TASK_GROUP_CONTEXT
 //! Body class used to test if elements in a range are presorted
 /** @ingroup algorithms */
 template<typename RandomAccessIterator, typename Compare>
-class quick_sort_pretest_body : internal::no_assign {
+class quick_sort_pretest_body : no_assign {
     const Compare ∁
 
 public:
@@ -122,7 +132,7 @@ public:
         int i = 0;
         for (RandomAccessIterator k = range.begin(); k != my_end; ++k, ++i) {
             if ( i%64 == 0 && my_task.is_cancelled() ) break;
-          
+
             // The k-1 is never out-of-range because the first chunk starts at begin+serial_cutoff+1
             if ( comp( *(k), *(k-1) ) ) {
                 my_task.cancel_group_execution();
@@ -153,8 +163,8 @@ void parallel_quick_sort( RandomAccessIterator begin, RandomAccessIterator end,
     const int serial_cutoff = 9;
 
     __TBB_ASSERT( begin + serial_cutoff < end, "min_parallel_size is smaller than serial cutoff?" );
-    RandomAccessIterator k;
-    for ( k = begin ; k != begin + serial_cutoff; ++k ) {
+    RandomAccessIterator k = begin;
+    for ( ; k != begin + serial_cutoff; ++k ) {
         if ( comp( *(k+1), *k ) ) {
             goto do_parallel_quick_sort;
         }
@@ -168,37 +178,40 @@ void parallel_quick_sort( RandomAccessIterator begin, RandomAccessIterator end,
     if (my_context.is_group_execution_cancelled())
 do_parallel_quick_sort:
 #endif /* __TBB_TASK_GROUP_CONTEXT */
-        parallel_for( quick_sort_range<RandomAccessIterator,Compare>(begin, end-begin, comp ), 
+        parallel_for( quick_sort_range<RandomAccessIterator,Compare>(begin, end-begin, comp ),
                       quick_sort_body<RandomAccessIterator,Compare>(),
                       auto_partitioner() );
 }
 
 } // namespace internal
 //! @endcond
+} // namespace interfaceX
 
 /** \page parallel_sort_iter_req Requirements on iterators for parallel_sort
-    Requirements on value type \c T of \c RandomAccessIterator for \c parallel_sort:
-    - \code void swap( T& x, T& y ) \endcode        Swaps \c x and \c y
-    - \code bool Compare::operator()( const T& x, const T& y ) \endcode
-                                                    True if x comes before y;
+    Requirements on the iterator type \c It and its value type \c T for \c parallel_sort:
+
+    - \code void iter_swap( It a, It b ) \endcode Swaps the values of the elements the given
+    iterators \c a and \c b are pointing to. \c It should be a random access iterator.
+
+    - \code bool Compare::operator()( const T& x, const T& y ) \endcode True if x comes before y;
 **/
 
 /** \name parallel_sort
     See also requirements on \ref parallel_sort_iter_req "iterators for parallel_sort". **/
 //@{
 
-//! Sorts the data in [begin,end) using the given comparator 
+//! Sorts the data in [begin,end) using the given comparator
 /** The compare function object is used for all comparisons between elements during sorting.
     The compare object must define a bool operator() function.
     @ingroup algorithms **/
 template<typename RandomAccessIterator, typename Compare>
-void parallel_sort( RandomAccessIterator begin, RandomAccessIterator end, const Compare& comp) { 
-    const int min_parallel_size = 500; 
+void parallel_sort( RandomAccessIterator begin, RandomAccessIterator end, const Compare& comp) {
+    const int min_parallel_size = 500;
     if( end > begin ) {
-        if (end - begin < min_parallel_size) { 
+        if (end - begin < min_parallel_size) {
             std::sort(begin, end, comp);
         } else {
-            internal::parallel_quick_sort(begin, end, comp);
+            interface9::internal::parallel_quick_sort(begin, end, comp);
         }
     }
 }
@@ -206,7 +219,7 @@ void parallel_sort( RandomAccessIterator begin, RandomAccessIterator end, const
 //! Sorts the data in [begin,end) with a default comparator \c std::less<RandomAccessIterator>
 /** @ingroup algorithms **/
 template<typename RandomAccessIterator>
-inline void parallel_sort( RandomAccessIterator begin, RandomAccessIterator end ) { 
+inline void parallel_sort( RandomAccessIterator begin, RandomAccessIterator end ) {
     parallel_sort( begin, end, std::less< typename std::iterator_traits<RandomAccessIterator>::value_type >() );
 }
 
@@ -243,7 +256,7 @@ void parallel_sort(const Range& rng) {
 template<typename T>
 inline void parallel_sort( T * begin, T * end ) {
     parallel_sort( begin, end, std::less< T >() );
-}   
+}
 //@}
 
 
diff --git a/include/tbb/parallel_while.h b/include/tbb/parallel_while.h
index bf49953..2f37a41 100644
--- a/include/tbb/parallel_while.h
+++ b/include/tbb/parallel_while.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_parallel_while
@@ -41,11 +41,11 @@ namespace internal {
     class while_iteration_task: public task {
         const Body& my_body;
         typename Body::argument_type my_value;
-        /*override*/ task* execute() {
-            my_body(my_value); 
+        task* execute() __TBB_override {
+            my_body(my_value);
             return NULL;
         }
-        while_iteration_task( const typename Body::argument_type& value, const Body& body ) : 
+        while_iteration_task( const typename Body::argument_type& value, const Body& body ) :
             my_body(body), my_value(value)
         {}
         template<typename Body_> friend class while_group_task;
@@ -57,19 +57,19 @@ namespace internal {
         @ingroup algorithms */
     template<typename Body>
     class while_group_task: public task {
-        static const size_t max_arg_size = 4;         
+        static const size_t max_arg_size = 4;
         const Body& my_body;
         size_t size;
         typename Body::argument_type my_arg[max_arg_size];
-        while_group_task( const Body& body ) : my_body(body), size(0) {} 
-        /*override*/ task* execute() {
+        while_group_task( const Body& body ) : my_body(body), size(0) {}
+        task* execute() __TBB_override {
             typedef while_iteration_task<Body> iteration_type;
             __TBB_ASSERT( size>0, NULL );
             task_list list;
-            task* t; 
-            size_t k=0; 
+            task* t;
+            size_t k=0;
             for(;;) {
-                t = new( allocate_child() ) iteration_type(my_arg[k],my_body); 
+                t = new( allocate_child() ) iteration_type(my_arg[k],my_body);
                 if( ++k==size ) break;
                 list.push_back(*t);
             }
@@ -80,7 +80,7 @@ namespace internal {
         }
         template<typename Stream, typename Body_> friend class while_task;
     };
-    
+
     //! For internal use only.
     /** Gets block of iterations from a stream and packages them into a while_group_task.
         @ingroup algorithms */
@@ -89,10 +89,10 @@ namespace internal {
         Stream& my_stream;
         const Body& my_body;
         empty_task& my_barrier;
-        /*override*/ task* execute() {
+        task* execute() __TBB_override {
             typedef while_group_task<Body> block_type;
             block_type& t = *new( allocate_additional_child_of(my_barrier) ) block_type(my_body);
-            size_t k=0; 
+            size_t k=0;
             while( my_stream.pop_if_present(t.my_arg[k]) ) {
                 if( ++k==block_type::max_arg_size ) {
                     // There might be more iterations.
@@ -108,11 +108,11 @@ namespace internal {
                 return &t;
             }
         }
-        while_task( Stream& stream, const Body& body, empty_task& barrier ) : 
+        while_task( Stream& stream, const Body& body, empty_task& barrier ) :
             my_stream(stream),
             my_body(body),
             my_barrier(barrier)
-        {} 
+        {}
         friend class tbb::parallel_while<Body>;
     };
 
@@ -134,7 +134,7 @@ public:
     //! Destructor cleans up data members before returning.
     ~parallel_while() {
         if( my_barrier ) {
-            my_barrier->destroy(*my_barrier);    
+            my_barrier->destroy(*my_barrier);
             my_barrier = NULL;
         }
     }
@@ -181,6 +181,6 @@ void parallel_while<Body>::add( const value_type& item ) {
     task::self().spawn( i );
 }
 
-} // namespace 
+} // namespace
 
 #endif /* __TBB_parallel_while */
diff --git a/include/tbb/partitioner.h b/include/tbb/partitioner.h
index 6ee98fd..96a0b75 100644
--- a/include/tbb/partitioner.h
+++ b/include/tbb/partitioner.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_partitioner_H
@@ -35,7 +35,7 @@
 #endif
 #ifndef __TBB_DEMAND_DEPTH_ADD
 // when imbalance is found range splits this value times more
-#define __TBB_DEMAND_DEPTH_ADD 2
+#define __TBB_DEMAND_DEPTH_ADD 1
 #endif
 #ifndef __TBB_STATIC_THRESHOLD
 // necessary number of clocks for the work to be distributed among all tasks
@@ -43,7 +43,7 @@
 #endif
 #if __TBB_DEFINE_MIC
 #define __TBB_NONUNIFORM_TASK_CREATION 1
-#ifdef __TBB_machine_time_stamp
+#ifdef __TBB_time_stamp
 #define __TBB_USE_MACHINE_TIME_STAMPS 1
 #define __TBB_task_duration() __TBB_STATIC_THRESHOLD
 #endif // __TBB_machine_time_stamp
@@ -64,8 +64,10 @@ namespace tbb {
 
 class auto_partitioner;
 class simple_partitioner;
+class static_partitioner;
 class affinity_partitioner;
-namespace interface7 {
+
+namespace interface9 {
     namespace internal {
         class affinity_partition_type;
     }
@@ -77,7 +79,7 @@ size_t __TBB_EXPORTED_FUNC get_initial_auto_partitioner_divisor();
 //! Defines entry point for affinity partitioner into tbb run-time library.
 class affinity_partitioner_base_v3: no_copy {
     friend class tbb::affinity_partitioner;
-    friend class tbb::interface7::internal::affinity_partition_type;
+    friend class tbb::interface9::internal::affinity_partition_type;
     //! Array that remembers affinities of tree positions to affinity_id.
     /** NULL if my_size==0. */
     affinity_id* my_array;
@@ -109,12 +111,12 @@ template<typename Range, typename Body, typename Partitioner> class start_scan;
 } //< namespace internal @endcond
 
 namespace serial {
-namespace interface7 {
+namespace interface9 {
 template<typename Range, typename Body, typename Partitioner> class start_for;
 }
 }
 
-namespace interface7 {
+namespace interface9 {
 //! @cond INTERNAL
 namespace internal {
 using namespace tbb::internal;
@@ -126,7 +128,7 @@ class flag_task: public task {
 public:
     tbb::atomic<bool> my_child_stolen;
     flag_task() { my_child_stolen = false; }
-    task* execute() { return NULL; }
+    task* execute() __TBB_override { return NULL; }
     static void mark_task_stolen(task &t) {
         tbb::atomic<bool> &flag = static_cast<flag_task*>(t.parent())->my_child_stolen;
 #if TBB_USE_THREADING_TOOLS
@@ -226,9 +228,13 @@ struct partition_type_base {
     depth_t max_depth() { return 0; }
     void align_depth(depth_t) { }
     template <typename Range> split_type get_split() { return split(); }
-
-    // common function blocks
     Partition& self() { return *static_cast<Partition*>(this); } // CRTP helper
+
+    template<typename StartType, typename Range>
+    void work_balance(StartType &start, Range &range) {
+        start.run_body( range ); // simple partitioner goes always here
+    }
+
     template<typename StartType, typename Range>
     void execute(StartType &start, Range &range) {
         // The algorithm in a few words ([]-denotes calls to decision methods of partitioner):
@@ -246,93 +252,66 @@ struct partition_type_base {
                 } while ( range.is_divisible() && self().is_divisible() );
             }
         }
-        if( !range.is_divisible() || !self().max_depth() )
-            start.run_body( range ); // simple partitioner goes always here
-        else { // do range pool
-            internal::range_vector<Range, Partition::range_pool_size> range_pool(range);
-            do {
-                range_pool.split_to_fill(self().max_depth()); // fill range pool
-                if( self().check_for_demand( start ) ) {
-                    if( range_pool.size() > 1 ) {
-                        start.offer_work( range_pool.front(), range_pool.front_depth() );
-                        range_pool.pop_front();
-                        continue;
-                    }
-                    if( range_pool.is_divisible(self().max_depth()) ) // was not enough depth to fork a task
-                        continue; // note: next split_to_fill() should split range at least once
-                }
-                start.run_body( range_pool.back() );
-                range_pool.pop_back();
-            } while( !range_pool.empty() && !start.is_cancelled() );
-        }
+        self().work_balance(start, range);
     }
 };
 
-//! Provides default methods for auto (adaptive) partition objects.
+//! Provides default splitting strategy for partition objects.
 template <typename Partition>
-struct adaptive_partition_type_base : partition_type_base<Partition> {
+struct adaptive_mode : partition_type_base<Partition> {
+    typedef Partition my_partition;
+    using partition_type_base<Partition>::self; // CRTP helper to get access to derived classes
     size_t my_divisor;
-    depth_t my_max_depth;
+    // For affinity_partitioner, my_divisor indicates the number of affinity array indices the task reserves.
+    // A task which has only one index must produce the right split without reserved index in order to avoid
+    // it to be overwritten in note_affinity() of the created (right) task.
+    // I.e. a task created deeper than the affinity array can remember must not save its affinity (LIFO order)
     static const unsigned factor = 1;
-    adaptive_partition_type_base() : my_max_depth(__TBB_INIT_DEPTH) {
-        my_divisor = tbb::internal::get_initial_auto_partitioner_divisor() / 4 * Partition::factor;
-        __TBB_ASSERT(my_divisor, "initial value of get_initial_auto_partitioner_divisor() is not valid");
-    }
-    adaptive_partition_type_base(adaptive_partition_type_base &src, split) {
-        my_max_depth = src.my_max_depth;
-#if TBB_USE_ASSERT
-        size_t old_divisor = src.my_divisor;
-#endif
-
-#if __TBB_INITIAL_TASK_IMBALANCE
-        if( src.my_divisor <= 1 ) my_divisor = 0;
-        else my_divisor = src.my_divisor = (src.my_divisor + 1u) / 2u;
+    adaptive_mode() : my_divisor(tbb::internal::get_initial_auto_partitioner_divisor() / 4 * my_partition::factor) {}
+    adaptive_mode(adaptive_mode &src, split) : my_divisor(do_split(src, split())) {}
+    adaptive_mode(adaptive_mode &src, const proportional_split& split_obj) : my_divisor(do_split(src, split_obj)) {}
+    /*! Override do_split methods in order to specify splitting strategy */
+    size_t do_split(adaptive_mode &src, split) {
+        return src.my_divisor /= 2u;
+    }
+    size_t do_split(adaptive_mode &src, const proportional_split& split_obj) {
+#if __TBB_ENABLE_RANGE_FEEDBACK
+        size_t portion = size_t(float(src.my_divisor) * float(split_obj.right())
+                                / float(split_obj.left() + split_obj.right()) + 0.5f);
 #else
-        my_divisor = src.my_divisor / 2u;
-        src.my_divisor = src.my_divisor - my_divisor; // TODO: check the effect separately
-        if (my_divisor) src.my_max_depth += static_cast<depth_t>(__TBB_Log2(src.my_divisor / my_divisor));
+        size_t portion = split_obj.right() * my_partition::factor;
 #endif
-        // For affinity_partitioner, my_divisor indicates the number of affinity array indices the task reserves.
-        // A task which has only one index must produce the right split without reserved index in order to avoid
-        // it to be overwritten in note_affinity() of the created (right) task.
-        // I.e. a task created deeper than the affinity array can remember must not save its affinity (LIFO order)
-        __TBB_ASSERT( (old_divisor <= 1 && my_divisor == 0) ||
-                      (old_divisor > 1 && my_divisor != 0), NULL);
-    }
-    adaptive_partition_type_base(adaptive_partition_type_base &src, const proportional_split& split_obj) {
-        my_max_depth = src.my_max_depth;
+        portion = (portion + my_partition::factor/2) & (0ul - my_partition::factor);
 #if __TBB_ENABLE_RANGE_FEEDBACK
-        my_divisor = size_t(float(src.my_divisor) * float(split_obj.right())
-                            / float(split_obj.left() + split_obj.right()));
-#else
-        my_divisor = split_obj.right() * Partition::factor;
+        /** Corner case handling */
+        if (!portion)
+            portion = my_partition::factor;
+        else if (portion == src.my_divisor)
+            portion = src.my_divisor - my_partition::factor;
 #endif
-        src.my_divisor -= my_divisor;
+        src.my_divisor -= portion;
+        return portion;
     }
-    bool check_being_stolen( task &t) { // part of old should_execute_range()
-        if( !my_divisor ) { // if not from the top P tasks of binary tree
-            my_divisor = 1; // TODO: replace by on-stack flag (partition_state's member)?
-            if( t.is_stolen_task() && t.parent()->ref_count() >= 2 ) { // runs concurrently with the left task
-#if TBB_USE_EXCEPTIONS
-                // RTTI is available, check whether the cast is valid
-                __TBB_ASSERT(dynamic_cast<flag_task*>(t.parent()), 0);
-                // correctness of the cast relies on avoiding the root task for which:
-                // - initial value of my_divisor != 0 (protected by separate assertion)
-                // - is_stolen_task() always returns false for the root task.
-#endif
-                flag_task::mark_task_stolen(t);
-                if( !my_max_depth ) my_max_depth++;
-                my_max_depth += __TBB_DEMAND_DEPTH_ADD;
-                return true;
-            }
-        }
-        return false;
+    bool is_divisible() { // part of old should_execute_range()
+        return my_divisor > my_partition::factor;
     }
-    void align_depth(depth_t base) {
-        __TBB_ASSERT(base <= my_max_depth, 0);
-        my_max_depth -= base;
+};
+
+//! Provides default linear indexing of partitioner's sequence
+template <typename Partition>
+struct linear_affinity_mode : adaptive_mode<Partition> {
+    using adaptive_mode<Partition>::my_divisor;
+    size_t my_head;
+    using adaptive_mode<Partition>::self;
+    linear_affinity_mode() : adaptive_mode<Partition>(), my_head(0) {}
+    linear_affinity_mode(linear_affinity_mode &src, split) : adaptive_mode<Partition>(src, split())
+        , my_head(src.my_head + src.my_divisor) {}
+    linear_affinity_mode(linear_affinity_mode &src, const proportional_split& split_obj) : adaptive_mode<Partition>(src, split_obj)
+        , my_head(src.my_head + src.my_divisor) {}
+    void set_affinity( task &t ) {
+        if( my_divisor )
+            t.set_affinity( affinity_id(my_head) + 1 );
     }
-    depth_t max_depth() { return my_max_depth; }
 };
 
 //! Class determines whether template parameter has static boolean constant
@@ -354,101 +333,141 @@ public:
     static const bool value = (sizeof(decide<Range>(0)) == sizeof(yes));
 };
 
-//! Provides default methods for affinity (adaptive) partition objects.
-class affinity_partition_type : public adaptive_partition_type_base<affinity_partition_type> {
-    static const unsigned factor_power = 4;
+//! Provides default methods for non-balancing partition objects.
+template<class Mode>
+struct unbalancing_partition_type : Mode {
+    using Mode::self;
+    unbalancing_partition_type() : Mode() {}
+    unbalancing_partition_type(unbalancing_partition_type& p, split) : Mode(p, split()) {}
+    unbalancing_partition_type(unbalancing_partition_type& p, const proportional_split& split_obj) : Mode(p, split_obj) {}
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    // Suppress "conditional expression is constant" warning.
+    #pragma warning( push )
+    #pragma warning( disable: 4127 )
+#endif
+    template <typename Range>
+    proportional_split get_split() {
+        if (is_splittable_in_proportion<Range>::value) {
+            size_t size = self().my_divisor / Mode::my_partition::factor;
+#if __TBB_NONUNIFORM_TASK_CREATION
+            size_t right = (size + 2) / 3;
+#else
+            size_t right = size / 2;
+#endif
+            size_t left = size - right;
+            return proportional_split(left, right);
+        } else {
+            return proportional_split(1, 1);
+        }
+    }
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    #pragma warning( pop )
+#endif // warning 4127 is back
+};
+
+/*! Determine work-balance phase implementing splitting & stealing actions */
+template<class Mode>
+struct balancing_partition_type : unbalancing_partition_type<Mode> {
+    using Mode::self;
+#ifdef __TBB_USE_MACHINE_TIME_STAMPS
+    tbb::internal::machine_tsc_t my_dst_tsc;
+#endif
     enum {
-        start = 0,
+        begin = 0,
         run,
         pass
     } my_delay;
-#ifdef __TBB_USE_MACHINE_TIME_STAMPS
-    machine_tsc_t my_dst_tsc;
-#endif
-    size_t my_begin;
-    tbb::internal::affinity_id* my_array;
-public:
-    static const unsigned factor = 1 << factor_power; // number of slots in affinity array per task
-    typedef proportional_split split_type;
-
-    affinity_partition_type( tbb::internal::affinity_partitioner_base_v3& ap )
-        : adaptive_partition_type_base<affinity_partition_type>(), my_delay(start)
+    depth_t my_max_depth;
+    static const unsigned range_pool_size = __TBB_RANGE_POOL_CAPACITY;
+    balancing_partition_type(): unbalancing_partition_type<Mode>()
 #ifdef __TBB_USE_MACHINE_TIME_STAMPS
         , my_dst_tsc(0)
 #endif
-    {
-        __TBB_ASSERT( (factor&(factor-1))==0, "factor must be power of two" );
-        ap.resize(factor);
-        my_array = ap.my_array;
-        my_begin = 0;
-        my_max_depth = factor_power + 1; // the first factor_power ranges will be spawned, and >=1 ranges should be left
-        __TBB_ASSERT( my_max_depth < __TBB_RANGE_POOL_CAPACITY, 0 );
-    }
-    affinity_partition_type(affinity_partition_type& p, split)
-        : adaptive_partition_type_base<affinity_partition_type>(p, split()),
-          my_delay(pass),
+        , my_delay(begin)
+        , my_max_depth(__TBB_INIT_DEPTH) {}
+    balancing_partition_type(balancing_partition_type& p, split)
+        : unbalancing_partition_type<Mode>(p, split())
 #ifdef __TBB_USE_MACHINE_TIME_STAMPS
-          my_dst_tsc(0),
+        , my_dst_tsc(0)
 #endif
-          my_array(p.my_array) {
-        // the sum of the divisors represents original value of p.my_divisor before split
-        __TBB_ASSERT(my_divisor + p.my_divisor <= factor, NULL);
-        my_begin = p.my_begin + p.my_divisor;
-    }
-    affinity_partition_type(affinity_partition_type& p, const proportional_split& split_obj)
-        : adaptive_partition_type_base<affinity_partition_type>(p, split_obj),
-          my_delay(start),
+        , my_delay(pass)
+        , my_max_depth(p.my_max_depth) {}
+    balancing_partition_type(balancing_partition_type& p, const proportional_split& split_obj)
+        : unbalancing_partition_type<Mode>(p, split_obj)
 #ifdef __TBB_USE_MACHINE_TIME_STAMPS
-          my_dst_tsc(0),
+        , my_dst_tsc(0)
 #endif
-          my_array(p.my_array) {
-        size_t total_divisor = my_divisor + p.my_divisor;
-        __TBB_ASSERT(total_divisor % factor == 0, NULL);
-        my_divisor = (my_divisor + factor/2) & (0u - factor);
-#if __TBB_ENABLE_RANGE_FEEDBACK
-        if (!my_divisor)
-            my_divisor = factor;
-        else if (my_divisor == total_divisor)
-            my_divisor = total_divisor - factor;
+        , my_delay(begin)
+        , my_max_depth(p.my_max_depth) {}
+    bool check_being_stolen( task &t) { // part of old should_execute_range()
+        if( !(self().my_divisor / Mode::my_partition::factor) ) { // if not from the top P tasks of binary tree
+            self().my_divisor = 1; // TODO: replace by on-stack flag (partition_state's member)?
+            if( t.is_stolen_task() && t.parent()->ref_count() >= 2 ) { // runs concurrently with the left task
+#if __TBB_USE_OPTIONAL_RTTI
+                // RTTI is available, check whether the cast is valid
+                __TBB_ASSERT(dynamic_cast<flag_task*>(t.parent()), 0);
+                // correctness of the cast relies on avoiding the root task for which:
+                // - initial value of my_divisor != 0 (protected by separate assertion)
+                // - is_stolen_task() always returns false for the root task.
 #endif
-        p.my_divisor = total_divisor - my_divisor;
-        __TBB_ASSERT(my_divisor && p.my_divisor, NULL);
-        my_begin = p.my_begin + p.my_divisor;
-    }
-    void set_affinity( task &t ) {
-        if( my_divisor ) {
-            if( !my_array[my_begin] )
-                // TODO: consider code reuse for static_paritioner
-                t.set_affinity( affinity_id(my_begin / factor + 1) );
-            else
-                t.set_affinity( my_array[my_begin] );
+                flag_task::mark_task_stolen(t);
+                if( !my_max_depth ) my_max_depth++;
+                my_max_depth += __TBB_DEMAND_DEPTH_ADD;
+                return true;
+            }
         }
+        return false;
     }
-    void note_affinity( task::affinity_id id ) {
-        if( my_divisor )
-            my_array[my_begin] = id;
+    depth_t max_depth() { return my_max_depth; }
+    void align_depth(depth_t base) {
+        __TBB_ASSERT(base <= my_max_depth, 0);
+        my_max_depth -= base;
+    }
+    template<typename StartType, typename Range>
+    void work_balance(StartType &start, Range &range) {
+        if( !range.is_divisible() || !self().max_depth() ) {
+            start.run_body( range ); // simple partitioner goes always here
+        }
+        else { // do range pool
+            internal::range_vector<Range, range_pool_size> range_pool(range);
+            do {
+                range_pool.split_to_fill(self().max_depth()); // fill range pool
+                if( self().check_for_demand( start ) ) {
+                    if( range_pool.size() > 1 ) {
+                        start.offer_work( range_pool.front(), range_pool.front_depth() );
+                        range_pool.pop_front();
+                        continue;
+                    }
+                    if( range_pool.is_divisible(self().max_depth()) ) // was not enough depth to fork a task
+                        continue; // note: next split_to_fill() should split range at least once
+                }
+                start.run_body( range_pool.back() );
+                range_pool.pop_back();
+            } while( !range_pool.empty() && !start.is_cancelled() );
+        }
     }
     bool check_for_demand( task &t ) {
         if( pass == my_delay ) {
-            if( my_divisor > 1 ) // produce affinitized tasks while they have slot in array
+            if( self().my_divisor > 1 ) // produce affinitized tasks while they have slot in array
                 return true; // do not do my_max_depth++ here, but be sure range_pool is splittable once more
-            else if( my_divisor && my_max_depth ) { // make balancing task
-                my_divisor = 0; // once for each task; depth will be decreased in align_depth()
+            else if( self().my_divisor && my_max_depth ) { // make balancing task
+                self().my_divisor = 0; // once for each task; depth will be decreased in align_depth()
                 return true;
             }
             else if( flag_task::is_peer_stolen(t) ) {
                 my_max_depth += __TBB_DEMAND_DEPTH_ADD;
                 return true;
             }
-        } else if( start == my_delay ) {
+        } else if( begin == my_delay ) {
 #ifndef __TBB_USE_MACHINE_TIME_STAMPS
             my_delay = pass;
 #else
-            my_dst_tsc = __TBB_machine_time_stamp() + __TBB_task_duration();
+            my_dst_tsc = __TBB_time_stamp() + __TBB_task_duration();
             my_delay = run;
         } else if( run == my_delay ) {
-            if( __TBB_machine_time_stamp() < my_dst_tsc ) {
+            if( __TBB_time_stamp() < my_dst_tsc ) {
                 __TBB_ASSERT(my_max_depth > 0, NULL);
+                 my_max_depth--; // increase granularity since tasks seem having too small work
                 return false;
             }
             my_delay = pass;
@@ -457,45 +476,16 @@ public:
         }
         return false;
     }
-    bool is_divisible() { // part of old should_execute_range()
-        return my_divisor > factor;
-    }
-
-#if _MSC_VER && !defined(__INTEL_COMPILER)
-    // Suppress "conditional expression is constant" warning.
-    #pragma warning( push )
-    #pragma warning( disable: 4127 )
-#endif
-    template <typename Range>
-    split_type get_split() {
-        if (is_splittable_in_proportion<Range>::value) {
-            size_t size = my_divisor / factor;
-#if __TBB_NONUNIFORM_TASK_CREATION
-            size_t right = (size + 2) / 3;
-#else
-            size_t right = size / 2;
-#endif
-            size_t left = size - right;
-            return split_type(left, right);
-        } else {
-            return split_type(1, 1);
-        }
-    }
-#if _MSC_VER && !defined(__INTEL_COMPILER)
-    #pragma warning( pop )
-#endif // warning 4127 is back
-
-    static const unsigned range_pool_size = __TBB_RANGE_POOL_CAPACITY;
 };
 
-class auto_partition_type: public adaptive_partition_type_base<auto_partition_type> {
+class auto_partition_type: public balancing_partition_type<adaptive_mode<auto_partition_type> > {
 public:
-    auto_partition_type( const auto_partitioner& ) {
+    auto_partition_type( const auto_partitioner& )
+        : balancing_partition_type<adaptive_mode<auto_partition_type> >() {
         my_divisor *= __TBB_INITIAL_CHUNKS;
     }
     auto_partition_type( auto_partition_type& src, split)
-      : adaptive_partition_type_base<auto_partition_type>(src, split()) {}
-
+        : balancing_partition_type<adaptive_mode<auto_partition_type> >(src, split()) {}
     bool is_divisible() { // part of old should_execute_range()
         if( my_divisor > 1 ) return true;
         if( my_divisor && my_max_depth ) { // can split the task. TODO: on-stack flag instead
@@ -511,8 +501,6 @@ public:
             return true;
         } else return false;
     }
-
-    static const unsigned range_pool_size = __TBB_RANGE_POOL_CAPACITY;
 };
 
 class simple_partition_type: public partition_type_base<simple_partition_type> {
@@ -527,7 +515,52 @@ public:
             start.offer_work( split_obj );
         start.run_body( range );
     }
-    //static const unsigned range_pool_size = 1; - not necessary because execute() is overridden
+};
+
+class static_partition_type : public unbalancing_partition_type<linear_affinity_mode<static_partition_type> > {
+public:
+    typedef proportional_split split_type;
+    static_partition_type( const static_partitioner& )
+        : unbalancing_partition_type<linear_affinity_mode<static_partition_type> >() {}
+    static_partition_type( static_partition_type& p, split )
+        : unbalancing_partition_type<linear_affinity_mode<static_partition_type> >(p, split()) {}
+    static_partition_type( static_partition_type& p, const proportional_split& split_obj )
+        : unbalancing_partition_type<linear_affinity_mode<static_partition_type> >(p, split_obj) {}
+};
+
+class affinity_partition_type : public balancing_partition_type<linear_affinity_mode<affinity_partition_type> > {
+    static const unsigned factor_power = 4; // TODO: get a unified formula based on number of computing units
+    tbb::internal::affinity_id* my_array;
+public:
+    static const unsigned factor = 1 << factor_power; // number of slots in affinity array per task
+    typedef proportional_split split_type;
+    affinity_partition_type( tbb::internal::affinity_partitioner_base_v3& ap )
+        : balancing_partition_type<linear_affinity_mode<affinity_partition_type> >() {
+        __TBB_ASSERT( (factor&(factor-1))==0, "factor must be power of two" );
+        ap.resize(factor);
+        my_array = ap.my_array;
+        my_max_depth = factor_power + 1;
+        __TBB_ASSERT( my_max_depth < __TBB_RANGE_POOL_CAPACITY, 0 );
+    }
+    affinity_partition_type(affinity_partition_type& p, split)
+        : balancing_partition_type<linear_affinity_mode<affinity_partition_type> >(p, split())
+        , my_array(p.my_array) {}
+    affinity_partition_type(affinity_partition_type& p, const proportional_split& split_obj)
+        : balancing_partition_type<linear_affinity_mode<affinity_partition_type> >(p, split_obj)
+        , my_array(p.my_array) {}
+    void set_affinity( task &t ) {
+        if( my_divisor ) {
+            if( !my_array[my_head] )
+                // TODO: consider new ideas with my_array for both affinity and static partitioner's, then code reuse
+                t.set_affinity( affinity_id(my_head / factor + 1) );
+            else
+                t.set_affinity( my_array[my_head] );
+        }
+    }
+    void note_affinity( task::affinity_id id ) {
+        if( my_divisor )
+            my_array[my_head] = id;
+    }
 };
 
 //! Backward-compatible partition for auto and affinity partition objects.
@@ -560,9 +593,9 @@ class simple_partitioner {
 public:
     simple_partitioner() {}
 private:
-    template<typename Range, typename Body, typename Partitioner> friend class serial::interface7::start_for;
-    template<typename Range, typename Body, typename Partitioner> friend class interface7::internal::start_for;
-    template<typename Range, typename Body, typename Partitioner> friend class interface7::internal::start_reduce;
+    template<typename Range, typename Body, typename Partitioner> friend class serial::interface9::start_for;
+    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_for;
+    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_reduce;
     template<typename Range, typename Body, typename Partitioner> friend class internal::start_scan;
     // backward compatibility
     class partition_type: public internal::partition_type_base {
@@ -572,10 +605,10 @@ private:
         partition_type( const partition_type&, split ) {}
     };
     // new implementation just extends existing interface
-    typedef interface7::internal::simple_partition_type task_partition_type;
+    typedef interface9::internal::simple_partition_type task_partition_type;
 
     // TODO: consider to make split_type public
-    typedef interface7::internal::simple_partition_type::split_type split_type;
+    typedef interface9::internal::simple_partition_type::split_type split_type;
 };
 
 //! An auto partitioner
@@ -587,17 +620,35 @@ public:
     auto_partitioner() {}
 
 private:
-    template<typename Range, typename Body, typename Partitioner> friend class serial::interface7::start_for;
-    template<typename Range, typename Body, typename Partitioner> friend class interface7::internal::start_for;
-    template<typename Range, typename Body, typename Partitioner> friend class interface7::internal::start_reduce;
+    template<typename Range, typename Body, typename Partitioner> friend class serial::interface9::start_for;
+    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_for;
+    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_reduce;
+    template<typename Range, typename Body, typename Partitioner> friend class internal::start_scan;
+    // backward compatibility
+    typedef interface9::internal::old_auto_partition_type partition_type;
+    // new implementation just extends existing interface
+    typedef interface9::internal::auto_partition_type task_partition_type;
+
+    // TODO: consider to make split_type public
+    typedef interface9::internal::auto_partition_type::split_type split_type;
+};
+
+//! A static partitioner
+class static_partitioner {
+public:
+    static_partitioner() {}
+private:
+    template<typename Range, typename Body, typename Partitioner> friend class serial::interface9::start_for;
+    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_for;
+    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_reduce;
     template<typename Range, typename Body, typename Partitioner> friend class internal::start_scan;
     // backward compatibility
-    typedef interface7::internal::old_auto_partition_type partition_type;
+    typedef interface9::internal::old_auto_partition_type partition_type;
     // new implementation just extends existing interface
-    typedef interface7::internal::auto_partition_type task_partition_type;
+    typedef interface9::internal::static_partition_type task_partition_type;
 
     // TODO: consider to make split_type public
-    typedef interface7::internal::auto_partition_type::split_type split_type;
+    typedef interface9::internal::static_partition_type::split_type split_type;
 };
 
 //! An affinity partitioner
@@ -606,17 +657,17 @@ public:
     affinity_partitioner() {}
 
 private:
-    template<typename Range, typename Body, typename Partitioner> friend class serial::interface7::start_for;
-    template<typename Range, typename Body, typename Partitioner> friend class interface7::internal::start_for;
-    template<typename Range, typename Body, typename Partitioner> friend class interface7::internal::start_reduce;
+    template<typename Range, typename Body, typename Partitioner> friend class serial::interface9::start_for;
+    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_for;
+    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_reduce;
     template<typename Range, typename Body, typename Partitioner> friend class internal::start_scan;
     // backward compatibility - for parallel_scan only
-    typedef interface7::internal::old_auto_partition_type partition_type;
+    typedef interface9::internal::old_auto_partition_type partition_type;
     // new implementation just extends existing interface
-    typedef interface7::internal::affinity_partition_type task_partition_type;
+    typedef interface9::internal::affinity_partition_type task_partition_type;
 
     // TODO: consider to make split_type public
-    typedef interface7::internal::affinity_partition_type::split_type split_type;
+    typedef interface9::internal::affinity_partition_type::split_type split_type;
 };
 
 } // namespace tbb
diff --git a/include/tbb/pipeline.h b/include/tbb/pipeline.h
index 2d7c385..20a8ec9 100644
--- a/include/tbb/pipeline.h
+++ b/include/tbb/pipeline.h
@@ -1,25 +1,25 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
-#ifndef __TBB_pipeline_H 
-#define __TBB_pipeline_H 
+#ifndef __TBB_pipeline_H
+#define __TBB_pipeline_H
 
 #include "atomic.h"
 #include "task.h"
@@ -66,17 +66,17 @@ class filter: internal::no_copy {
 private:
     //! Value used to mark "not in pipeline"
     static filter* not_in_pipeline() {return reinterpret_cast<filter*>(intptr_t(-1));}
-protected:    
+protected:
     //! The lowest bit 0 is for parallel vs. serial
-    static const unsigned char filter_is_serial = 0x1; 
+    static const unsigned char filter_is_serial = 0x1;
 
     //! 4th bit distinguishes ordered vs unordered filters.
     /** The bit was not set for parallel filters in TBB 2.1 and earlier,
         but is_ordered() function always treats parallel filters as out of order. */
-    static const unsigned char filter_is_out_of_order = 0x1<<4;  
+    static const unsigned char filter_is_out_of_order = 0x1<<4;
 
     //! 5th bit distinguishes thread-bound and regular filters.
-    static const unsigned char filter_is_bound = 0x1<<5;  
+    static const unsigned char filter_is_bound = 0x1<<5;
 
     //! 6th bit marks input filters emitting small objects
     static const unsigned char filter_may_emit_null = 0x1<<6;
@@ -94,7 +94,7 @@ protected:
 public:
     enum mode {
         //! processes multiple items in parallel and in no particular order
-        parallel = current_version | filter_is_out_of_order, 
+        parallel = current_version | filter_is_out_of_order,
         //! processes items one at a time; all such filters process items in the same order
         serial_in_order = current_version | filter_is_serial,
         //! processes items one at a time and in no particular order
@@ -103,7 +103,7 @@ public:
         serial = serial_in_order
     };
 protected:
-    filter( bool is_serial_ ) : 
+    explicit filter( bool is_serial_ ) :
         next_filter_in_pipeline(not_in_pipeline()),
         my_input_buffer(NULL),
         my_filter_mode(static_cast<unsigned char>((is_serial_ ? serial : parallel) | exact_exception_propagation)),
@@ -111,8 +111,8 @@ protected:
         my_pipeline(NULL),
         next_segment(NULL)
     {}
-    
-    filter( mode filter_mode ) :
+
+    explicit filter( mode filter_mode ) :
         next_filter_in_pipeline(not_in_pipeline()),
         my_input_buffer(NULL),
         my_filter_mode(static_cast<unsigned char>(filter_mode | exact_exception_propagation)),
@@ -128,8 +128,8 @@ public:
     //! True if filter is serial.
     bool is_serial() const {
         return bool( my_filter_mode & filter_is_serial );
-    }  
-    
+    }
+
     //! True if filter must receive stream in order.
     bool is_ordered() const {
         return (my_filter_mode & (filter_is_out_of_order|filter_is_serial))==filter_is_serial;
@@ -141,7 +141,7 @@ public:
     }
 
     //! true if an input filter can emit null
-    bool object_may_be_null() { 
+    bool object_may_be_null() {
         return ( my_filter_mode & filter_may_emit_null ) == filter_may_emit_null;
     }
 
@@ -149,7 +149,7 @@ public:
     /** Returns NULL if filter is a sink. */
     virtual void* operator()( void* item ) = 0;
 
-    //! Destroy filter.  
+    //! Destroy filter.
     /** If the filter was added to a pipeline, the pipeline must be destroyed first. */
     virtual __TBB_EXPORTED_METHOD ~filter();
 
@@ -164,7 +164,7 @@ private:
     //! Pointer to next filter in the pipeline.
     filter* next_filter_in_pipeline;
 
-    //! has the filter not yet processed all the tokens it will ever see?  
+    //! has the filter not yet processed all the tokens it will ever see?
     //  (pipeline has not yet reached end_of_input or this filter has not yet
     //  seen the last token produced by input_filter)
     bool has_more_work();
@@ -205,19 +205,19 @@ public:
         end_of_stream
     };
 protected:
-    thread_bound_filter(mode filter_mode): 
+    explicit thread_bound_filter(mode filter_mode):
          filter(static_cast<mode>(filter_mode | filter::filter_is_bound))
     {
         __TBB_ASSERT(filter_mode & filter::filter_is_serial, "thread-bound filters must be serial");
     }
 public:
-    //! If a data item is available, invoke operator() on that item.  
+    //! If a data item is available, invoke operator() on that item.
     /** This interface is non-blocking.
         Returns 'success' if an item was processed.
-        Returns 'item_not_available' if no item can be processed now 
-        but more may arrive in the future, or if token limit is reached. 
+        Returns 'item_not_available' if no item can be processed now
+        but more may arrive in the future, or if token limit is reached.
         Returns 'end_of_stream' if there are no more items to process. */
-    result_type __TBB_EXPORTED_METHOD try_process_item(); 
+    result_type __TBB_EXPORTED_METHOD try_process_item();
 
     //! Wait until a data item becomes available, and invoke operator() on that item.
     /** This interface is blocking.
@@ -238,7 +238,7 @@ public:
     //! Construct empty pipeline.
     __TBB_EXPORTED_METHOD pipeline();
 
-    /** Though the current implementation declares the destructor virtual, do not rely on this 
+    /** Though the current implementation declares the destructor virtual, do not rely on this
         detail.  The virtualness is deprecated and may disappear in future versions of TBB. */
     virtual __TBB_EXPORTED_METHOD ~pipeline();
 
@@ -276,7 +276,7 @@ private:
     //! Number of idle tokens waiting for input stage.
     atomic<internal::Token> input_tokens;
 
-    //! Global counter of tokens 
+    //! Global counter of tokens
     atomic<internal::Token> token_counter;
 
     //! False until fetch_input returns NULL.
@@ -390,13 +390,13 @@ class token_helper<T, false> {
     static pointer create_token(const value_type & source) {
         return source; }
     static value_type & token(pointer & t) { return t;}
-    static void * cast_to_void_ptr(pointer ref) { 
-        type_to_void_ptr_map mymap; 
+    static void * cast_to_void_ptr(pointer ref) {
+        type_to_void_ptr_map mymap;
         mymap.void_overlay = NULL;
-        mymap.actual_value = ref; 
-        return mymap.void_overlay; 
+        mymap.actual_value = ref;
+        return mymap.void_overlay;
     }
-    static pointer cast_from_void_ptr(void * ref) { 
+    static pointer cast_from_void_ptr(void * ref) {
         type_to_void_ptr_map mymap;
         mymap.void_overlay = ref;
         return mymap.actual_value;
@@ -412,14 +412,14 @@ class concrete_filter: public tbb::filter {
     typedef token_helper<U,is_large_object<U>::value > u_helper;
     typedef typename u_helper::pointer u_pointer;
 
-    /*override*/ void* operator()(void* input) {
+    void* operator()(void* input) __TBB_override {
         t_pointer temp_input = t_helper::cast_from_void_ptr(input);
         u_pointer output_u = u_helper::create_token(my_body(t_helper::token(temp_input)));
         t_helper::destroy_token(temp_input);
         return u_helper::cast_to_void_ptr(output_u);
     }
 
-    /*override*/ void finalize(void * input) {
+    void finalize(void * input) __TBB_override {
         t_pointer temp_input = t_helper::cast_from_void_ptr(input);
         t_helper::destroy_token(temp_input);
     }
@@ -428,14 +428,14 @@ public:
     concrete_filter(tbb::filter::mode filter_mode, const Body& body) : filter(filter_mode), my_body(body) {}
 };
 
-// input 
+// input
 template<typename U, typename Body>
 class concrete_filter<void,U,Body>: public filter {
     const Body& my_body;
     typedef token_helper<U, is_large_object<U>::value > u_helper;
     typedef typename u_helper::pointer u_pointer;
 
-    /*override*/void* operator()(void*) {
+    void* operator()(void*) __TBB_override {
         flow_control control;
         u_pointer output_u = u_helper::create_token(my_body(control));
         if(control.is_pipeline_stopped) {
@@ -447,7 +447,7 @@ class concrete_filter<void,U,Body>: public filter {
     }
 
 public:
-    concrete_filter(tbb::filter::mode filter_mode, const Body& body) : 
+    concrete_filter(tbb::filter::mode filter_mode, const Body& body) :
         filter(static_cast<tbb::filter::mode>(filter_mode | filter_may_emit_null)),
         my_body(body)
     {}
@@ -458,14 +458,14 @@ class concrete_filter<T,void,Body>: public filter {
     const Body& my_body;
     typedef token_helper<T, is_large_object<T>::value > t_helper;
     typedef typename t_helper::pointer t_pointer;
-   
-    /*override*/ void* operator()(void* input) {
+
+    void* operator()(void* input) __TBB_override {
         t_pointer temp_input = t_helper::cast_from_void_ptr(input);
         my_body(t_helper::token(temp_input));
         t_helper::destroy_token(temp_input);
         return NULL;
     }
-    /*override*/ void finalize(void* input) {
+    void finalize(void* input) __TBB_override {
         t_pointer temp_input = t_helper::cast_from_void_ptr(input);
         t_helper::destroy_token(temp_input);
     }
@@ -477,12 +477,12 @@ public:
 template<typename Body>
 class concrete_filter<void,void,Body>: public filter {
     const Body& my_body;
-    
+
     /** Override privately because it is always called virtually */
-    /*override*/ void* operator()(void*) {
+    void* operator()(void*) __TBB_override {
         flow_control control;
         my_body(control);
-        void* output = control.is_pipeline_stopped ? NULL : (void*)(intptr_t)-1; 
+        void* output = control.is_pipeline_stopped ? NULL : (void*)(intptr_t)-1;
         return output;
     }
 public:
@@ -496,7 +496,7 @@ class pipeline_proxy {
 public:
     pipeline_proxy( const filter_t<void,void>& filter_chain );
     ~pipeline_proxy() {
-        while( filter* f = my_pipe.filter_list ) 
+        while( filter* f = my_pipe.filter_list )
             delete f; // filter destructor removes it from the pipeline
     }
     tbb::pipeline* operator->() { return &my_pipe; }
@@ -515,14 +515,14 @@ protected:
 #endif
     }
 public:
-    //! Add concrete_filter to pipeline 
+    //! Add concrete_filter to pipeline
     virtual void add_to( pipeline& ) = 0;
     //! Increment reference count
     void add_ref() {++ref_count;}
     //! Decrement reference count and delete if it becomes zero.
     void remove_ref() {
         __TBB_ASSERT(ref_count>0,"ref_count underflow");
-        if( --ref_count==0 ) 
+        if( --ref_count==0 )
             delete this;
     }
     virtual ~filter_node() {
@@ -537,7 +537,7 @@ template<typename T, typename U, typename Body>
 class filter_node_leaf: public filter_node  {
     const tbb::filter::mode mode;
     const Body body;
-    /*override*/void add_to( pipeline& p ) {
+    void add_to( pipeline& p ) __TBB_override {
         concrete_filter<T,U,Body>* f = new concrete_filter<T,U,Body>(mode,body);
         p.add_filter( *f );
     }
@@ -550,11 +550,11 @@ class filter_node_join: public filter_node {
     friend class filter_node; // to suppress GCC 3.2 warnings
     filter_node& left;
     filter_node& right;
-    /*override*/~filter_node_join() {
+    ~filter_node_join() {
        left.remove_ref();
        right.remove_ref();
     }
-    /*override*/void add_to( pipeline& p ) {
+    void add_to( pipeline& p ) __TBB_override {
         left.add_to(p);
         right.add_to(p);
     }
@@ -610,7 +610,7 @@ public:
         // Order of operations below carefully chosen so that reference counts remain correct
         // in unlikely event that remove_ref throws exception.
         filter_node* old = root;
-        root = rhs.root; 
+        root = rhs.root;
         if( root ) root->add_ref();
         if( old ) old->remove_ref();
     }
diff --git a/include/tbb/queuing_mutex.h b/include/tbb/queuing_mutex.h
index 44bd306..0fe4b3e 100644
--- a/include/tbb/queuing_mutex.h
+++ b/include/tbb/queuing_mutex.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_queuing_mutex_H
diff --git a/include/tbb/queuing_rw_mutex.h b/include/tbb/queuing_rw_mutex.h
index de1fc0f..e0224ed 100644
--- a/include/tbb/queuing_rw_mutex.h
+++ b/include/tbb/queuing_rw_mutex.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_queuing_rw_mutex_H
diff --git a/include/tbb/reader_writer_lock.h b/include/tbb/reader_writer_lock.h
index 86b1af4..353beec 100644
--- a/include/tbb/reader_writer_lock.h
+++ b/include/tbb/reader_writer_lock.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_reader_writer_lock_H
diff --git a/include/tbb/recursive_mutex.h b/include/tbb/recursive_mutex.h
index f430a38..5a23c09 100644
--- a/include/tbb/recursive_mutex.h
+++ b/include/tbb/recursive_mutex.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_recursive_mutex_H
@@ -68,7 +68,7 @@ public:
   #if _WIN32||_WIN64
         DeleteCriticalSection(&impl);
   #else
-        pthread_mutex_destroy(&impl); 
+        pthread_mutex_destroy(&impl);
 
   #endif /* _WIN32||_WIN64 */
 #endif /* TBB_USE_ASSERT */
@@ -82,20 +82,20 @@ public:
         It also nicely provides the "node" for queuing locks. */
     class scoped_lock: internal::no_copy {
     public:
-        //! Construct lock that has not acquired a recursive_mutex. 
+        //! Construct lock that has not acquired a recursive_mutex.
         scoped_lock() : my_mutex(NULL) {};
 
         //! Acquire lock on given mutex.
         scoped_lock( recursive_mutex& mutex ) {
 #if TBB_USE_ASSERT
-            my_mutex = &mutex; 
+            my_mutex = &mutex;
 #endif /* TBB_USE_ASSERT */
             acquire( mutex );
         }
 
         //! Release lock (if lock is held).
         ~scoped_lock() {
-            if( my_mutex ) 
+            if( my_mutex )
                 release();
         }
 
@@ -153,7 +153,7 @@ public:
     static const bool is_fair_mutex = false;
 
     // C++0x compatibility interface
-    
+
     //! Acquire lock
     void lock() {
 #if TBB_USE_ASSERT
@@ -176,7 +176,7 @@ public:
 #if TBB_USE_ASSERT
         aligned_space<scoped_lock> tmp;
         return (new(tmp.begin()) scoped_lock)->internal_try_acquire(*this);
-#else        
+#else
   #if _WIN32||_WIN64
         return TryEnterCriticalSection(&impl)!=0;
   #else
@@ -229,6 +229,6 @@ private:
 
 __TBB_DEFINE_PROFILING_SET_NAME(recursive_mutex)
 
-} // namespace tbb 
+} // namespace tbb
 
 #endif /* __TBB_recursive_mutex_H */
diff --git a/include/tbb/runtime_loader.h b/include/tbb/runtime_loader.h
index 5dc8bab..df28464 100644
--- a/include/tbb/runtime_loader.h
+++ b/include/tbb/runtime_loader.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_runtime_loader_H
diff --git a/include/tbb/scalable_allocator.h b/include/tbb/scalable_allocator.h
index 686d771..c2a8149 100644
--- a/include/tbb/scalable_allocator.h
+++ b/include/tbb/scalable_allocator.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_scalable_allocator_H
@@ -129,6 +129,7 @@ namespace rml {
 class MemoryPool;
 
 typedef void *(*rawAllocType)(intptr_t pool_id, size_t &bytes);
+// returns non-zero in case of error
 typedef int   (*rawFreeType)(intptr_t pool_id, void* raw_ptr, size_t raw_bytes);
 
 /*
@@ -191,6 +192,7 @@ void *pool_aligned_malloc(MemoryPool* mPool, size_t size, size_t alignment);
 void *pool_aligned_realloc(MemoryPool* mPool, void *ptr, size_t size, size_t alignment);
 bool  pool_reset(MemoryPool* memPool);
 bool  pool_free(MemoryPool *memPool, void *object);
+MemoryPool *pool_identify(void *object);
 }
 
 #include <new>      /* To use new with the placement argument */
@@ -280,18 +282,18 @@ public:
     template<typename U, typename... Args>
     void construct(U *p, Args&&... args)
         { ::new((void *)p) U(std::forward<Args>(args)...); }
-#else // __TBB_ALLOCATOR_CONSTRUCT_VARIADIC
+#else /* __TBB_ALLOCATOR_CONSTRUCT_VARIADIC */
 #if __TBB_CPP11_RVALUE_REF_PRESENT
     void construct( pointer p, value_type&& value ) { ::new((void*)(p)) value_type( std::move( value ) ); }
 #endif
     void construct( pointer p, const value_type& value ) {::new((void*)(p)) value_type(value);}
-#endif // __TBB_ALLOCATOR_CONSTRUCT_VARIADIC
+#endif /* __TBB_ALLOCATOR_CONSTRUCT_VARIADIC */
     void destroy( pointer p ) {p->~value_type();}
 };
 
 #if _MSC_VER && !defined(__INTEL_COMPILER)
     #pragma warning (pop)
-#endif // warning 4100 is back
+#endif /* warning 4100 is back */
 
 //! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1
 /** @ingroup memory_allocation */
@@ -334,6 +336,6 @@ inline bool operator!=( const scalable_allocator<T>&, const scalable_allocator<U
 
 #if !defined(__cplusplus) && __ICC==1100
     #pragma warning (pop)
-#endif // ICC 11.0 warning 991 is back
+#endif /* ICC 11.0 warning 991 is back */
 
 #endif /* __TBB_scalable_allocator_H */
diff --git a/include/tbb/spin_mutex.h b/include/tbb/spin_mutex.h
index 70ddbd8..99ef15c 100644
--- a/include/tbb/spin_mutex.h
+++ b/include/tbb/spin_mutex.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_spin_mutex_H
@@ -173,7 +173,7 @@ public:
         s.my_mutex = this;
         s.internal_release();
 #else
-        __TBB_store_with_release(flag, 0);
+        __TBB_UnlockByte(flag);
 #endif /* TBB_USE_THREADING_TOOLS */
     }
 
diff --git a/include/tbb/spin_rw_mutex.h b/include/tbb/spin_rw_mutex.h
index 593a4ab..b20f4eb 100644
--- a/include/tbb/spin_rw_mutex.h
+++ b/include/tbb/spin_rw_mutex.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_spin_rw_mutex_H
@@ -130,13 +130,13 @@ public:
         //! Release lock.
         void release() {
             __TBB_ASSERT( mutex, "lock is not acquired" );
-            spin_rw_mutex *m = mutex; 
+            spin_rw_mutex *m = mutex;
             mutex = NULL;
 #if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
             if( is_writer ) m->internal_release_writer();
             else            m->internal_release_reader();
 #else
-            if( is_writer ) __TBB_AtomicAND( &m->state, READERS ); 
+            if( is_writer ) __TBB_AtomicAND( &m->state, READERS );
             else            __TBB_FetchAndAddWrelease( &m->state, -(intptr_t)ONE_READER);
 #endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */
         }
@@ -158,10 +158,10 @@ public:
         bool try_acquire( spin_rw_mutex& m, bool write = true ) {
             __TBB_ASSERT( !mutex, "holding mutex already" );
             bool result;
-            is_writer = write; 
+            is_writer = write;
             result = write? m.internal_try_acquire_writer()
                           : m.internal_try_acquire_reader();
-            if( result ) 
+            if( result )
                 mutex = &m;
             return result;
         }
@@ -196,7 +196,7 @@ public:
         if( state&WRITER ) internal_release_writer();
         else               internal_release_reader();
 #else
-        if( state&WRITER ) __TBB_AtomicAND( &state, READERS ); 
+        if( state&WRITER ) __TBB_AtomicAND( &state, READERS );
         else               __TBB_FetchAndAddWrelease( &state, -(intptr_t)ONE_READER);
 #endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */
     }
@@ -243,7 +243,7 @@ namespace interface8 {
     ensure atomicity of the critical sections. In particular, it uses
     Intel(R) Transactional Synchronization Extensions (Intel(R) TSX).
     Without such HW support, it behaves like a spin_rw_mutex.
-    It should be used for locking short critical sections where the lock is 
+    It should be used for locking short critical sections where the lock is
     contended but the data it protects are not.
     @ingroup synchronization */
 #if __TBB_TSX_AVAILABLE
diff --git a/include/tbb/task.h b/include/tbb/task.h
index a416f3e..246684a 100644
--- a/include/tbb/task.h
+++ b/include/tbb/task.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_task_H
@@ -121,6 +121,12 @@ namespace internal {
     //! An id as used for specifying affinity.
     typedef unsigned short affinity_id;
 
+#if __TBB_TASK_ISOLATION
+    //! A tag for task isolation.
+    typedef intptr_t isolation_tag;
+    const isolation_tag no_isolation = 0;
+#endif /* __TBB_TASK_ISOLATION */
+
 #if __TBB_TASK_GROUP_CONTEXT
     class generic_scheduler;
 
@@ -160,7 +166,9 @@ namespace internal {
     /** This class is internal to the library.
         Do not reference it directly, except within the library itself.
         Fields are ordered in way that preserves backwards compatibility and yields
-        good packing on typical 32-bit and 64-bit platforms.
+        good packing on typical 32-bit and 64-bit platforms. New fields should be
+        added at the beginning for backward compatibility with accesses to the task
+        prefix inlined into application code.
 
         In case task prefix size exceeds 32 or 64 bytes on IA32 and Intel64
         architectures correspondingly, consider dynamic setting of task_alignment
@@ -179,6 +187,11 @@ namespace internal {
         friend class internal::allocate_continuation_proxy;
         friend class internal::allocate_additional_child_of_proxy;
 
+#if __TBB_TASK_ISOLATION
+        //! The tag used for task isolation.
+        isolation_tag isolation;
+#endif /* __TBB_TASK_ISOLATION */
+
 #if __TBB_TASK_GROUP_CONTEXT
         //! Shared context that is used to communicate asynchronous state changes
         /** Currently it is used to broadcast cancellation requests generated both
@@ -443,9 +456,9 @@ public:
         introduced in the currently unused padding areas and these fields are updated
         by inline methods. **/
     task_group_context ( kind_type relation_with_parent = bound,
-                         uintptr_t traits = default_traits )
+                         uintptr_t t = default_traits )
         : my_kind(relation_with_parent)
-        , my_version_and_traits(2 | traits)
+        , my_version_and_traits(2 | t)
     {
         init();
     }
@@ -505,6 +518,9 @@ public:
     priority_t priority () const;
 #endif /* __TBB_TASK_PRIORITY */
 
+    //! Returns the context's trait
+    uintptr_t traits() const { return my_version_and_traits & traits_mask; }
+
 protected:
     //! Out-of-line part of the constructor.
     /** Singled out to ensure backward binary compatibility of the future versions. **/
@@ -892,7 +908,7 @@ private:
 //! task that does nothing.  Useful for synchronization.
 /** @ingroup task_scheduling */
 class empty_task: public task {
-    /*override*/ task* execute() {
+    task* execute() __TBB_override {
         return NULL;
     }
 };
@@ -901,8 +917,12 @@ class empty_task: public task {
 namespace internal {
     template<typename F>
     class function_task : public task {
+#if __TBB_ALLOW_MUTABLE_FUNCTORS
         F my_func;
-        /*override*/ task* execute() {
+#else
+        const F my_func;
+#endif
+        task* execute() __TBB_override {
             my_func();
             return NULL;
         }
diff --git a/include/tbb/task_arena.h b/include/tbb/task_arena.h
index 2f26d94..f33135b 100644
--- a/include/tbb/task_arena.h
+++ b/include/tbb/task_arena.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_task_arena_H
@@ -27,10 +27,12 @@
 #include "atomic.h" // for as_atomic
 #endif
 
-#if __TBB_TASK_ARENA
-
 namespace tbb {
 
+namespace this_task_arena {
+    int max_concurrency();
+} // namespace this_task_arena
+
 //! @cond INTERNAL
 namespace internal {
     //! Internal to library. Should not be used by clients.
@@ -41,6 +43,8 @@ namespace internal {
 //! @endcond
 
 namespace interface7 {
+class task_arena;
+
 //! @cond INTERNAL
 namespace internal {
 using namespace tbb::internal; //e.g. function_task from task.h
@@ -54,7 +58,7 @@ public:
 template<typename F>
 class delegated_function : public delegate_base {
     F &my_func;
-    /*override*/ void operator()() const {
+    void operator()() const __TBB_override {
         my_func();
     }
 public:
@@ -98,18 +102,24 @@ protected:
         , my_version_and_traits(default_flags)
         {}
 
-    void __TBB_EXPORTED_METHOD internal_initialize( );
-    void __TBB_EXPORTED_METHOD internal_terminate( );
+    void __TBB_EXPORTED_METHOD internal_initialize();
+    void __TBB_EXPORTED_METHOD internal_terminate();
+    void __TBB_EXPORTED_METHOD internal_attach();
     void __TBB_EXPORTED_METHOD internal_enqueue( task&, intptr_t ) const;
     void __TBB_EXPORTED_METHOD internal_execute( delegate_base& ) const;
     void __TBB_EXPORTED_METHOD internal_wait() const;
     static int __TBB_EXPORTED_FUNC internal_current_slot();
+    static int __TBB_EXPORTED_FUNC internal_max_concurrency( const task_arena * );
 public:
     //! Typedef for number of threads that is automatic.
-    static const int automatic = -1; // any value < 1 means 'automatic'
+    static const int automatic = -1;
+    static const int not_initialized = -2;
 
 };
 
+#if __TBB_TASK_ISOLATION
+void __TBB_EXPORTED_FUNC isolate_within_arena( delegate_base& d, intptr_t reserved = 0 );
+#endif /* __TBB_TASK_ISOLATION */
 } // namespace internal
 //! @endcond
 
@@ -120,7 +130,21 @@ public:
  */
 class task_arena : public internal::task_arena_base {
     friend class tbb::internal::task_scheduler_observer_v3;
+    friend int tbb::this_task_arena::max_concurrency();
     bool my_initialized;
+    void mark_initialized() {
+        __TBB_ASSERT( my_arena, "task_arena initialization is incomplete" );
+#if __TBB_TASK_GROUP_CONTEXT
+        __TBB_ASSERT( my_context, "task_arena initialization is incomplete" );
+#endif
+#if TBB_USE_THREADING_TOOLS
+        // Actual synchronization happens in internal_initialize & internal_attach.
+        // The race on setting my_initialized is benign, but should be hidden from Intel(R) Inspector
+        internal::as_atomic(my_initialized).fetch_and_store<release>(true);
+#else
+        my_initialized = true;
+#endif
+    }
 
 public:
     //! Creates task_arena with certain concurrency limits
@@ -129,8 +153,8 @@ public:
      *  @arg reserved_for_masters specifies number of slots to be used by master threads only.
      *       Value of 1 is default and reflects behavior of implicit arenas.
      **/
-    task_arena(int max_concurrency = automatic, unsigned reserved_for_masters = 1)
-        : task_arena_base(max_concurrency, reserved_for_masters)
+    task_arena(int max_concurrency_ = automatic, unsigned reserved_for_masters = 1)
+        : task_arena_base(max_concurrency_, reserved_for_masters)
         , my_initialized(false)
     {}
 
@@ -140,29 +164,48 @@ public:
         , my_initialized(false)
     {}
 
+    //! Tag class used to indicate the "attaching" constructor
+    struct attach {};
+
+    //! Creates an instance of task_arena attached to the current arena of the thread
+    explicit task_arena( attach )
+        : task_arena_base(automatic, 1) // use default settings if attach fails
+        , my_initialized(false)
+    {
+        internal_attach();
+        if( my_arena ) my_initialized = true;
+    }
+
     //! Forces allocation of the resources for the task_arena as specified in constructor arguments
     inline void initialize() {
         if( !my_initialized ) {
             internal_initialize();
-#if TBB_USE_THREADING_TOOLS
-            // Threading tools respect lock prefix but report false-positive data-race via plain store
-            internal::as_atomic(my_initialized).fetch_and_store<release>(true);
-#else
-            my_initialized = true;
-#endif //TBB_USE_THREADING_TOOLS
+            mark_initialized();
         }
     }
 
     //! Overrides concurrency level and forces initialization of internal representation
-    inline void initialize(int max_concurrency, unsigned reserved_for_masters = 1) {
+    inline void initialize(int max_concurrency_, unsigned reserved_for_masters = 1) {
+        // TODO: decide if this call must be thread-safe
         __TBB_ASSERT( !my_arena, "Impossible to modify settings of an already initialized task_arena");
         if( !my_initialized ) {
-            my_max_concurrency = max_concurrency;
+            my_max_concurrency = max_concurrency_;
             my_master_slots = reserved_for_masters;
             initialize();
         }
     }
 
+    //! Attaches this instance to the current arena of the thread
+    inline void initialize(attach) {
+        // TODO: decide if this call must be thread-safe
+        __TBB_ASSERT( !my_arena, "Impossible to modify settings of an already initialized task_arena");
+        if( !my_initialized ) {
+            internal_attach();
+            if( !my_arena ) internal_initialize();
+            mark_initialized();
+        }
+    }
+
     //! Removes the reference to the internal arena representation.
     //! Not thread safe wrt concurrent invocations of other methods.
     inline void terminate() {
@@ -188,7 +231,6 @@ public:
     void enqueue( const F& f ) {
         initialize();
 #if __TBB_TASK_GROUP_CONTEXT
-        __TBB_ASSERT(my_context, NULL);
         internal_enqueue( *new( task::allocate_root(*my_context) ) internal::function_task<F>(f), 0 );
 #else
         internal_enqueue( *new( task::allocate_root() ) internal::function_task<F>(f), 0 );
@@ -241,17 +283,51 @@ public:
 #endif //__TBB_EXTRA_DEBUG
 
     //! Returns the index, aka slot number, of the calling thread in its current arena
+    //! This method is deprecated and replaced with this_task_arena::current_thread_index()
     inline static int current_thread_index() {
         return internal_current_slot();
     }
+
+    //! Returns the maximal number of threads that can work inside the arena
+    inline int max_concurrency() const {
+        // Handle special cases inside the library
+        return (my_max_concurrency>1) ? my_max_concurrency : internal_max_concurrency(this);
+    }
 };
 
+#if __TBB_TASK_ISOLATION
+namespace this_task_arena {
+    template<typename F>
+    void isolate( const F& f ) {
+        internal::delegated_function<const F> d(f);
+        internal::isolate_within_arena( d );
+    }
+}
+#endif /* __TBB_TASK_ISOLATION */
+
 } // namespace interfaceX
 
 using interface7::task_arena;
+#if __TBB_TASK_ISOLATION
+namespace this_task_arena {
+    using namespace interface7::this_task_arena;
+}
+#endif /* __TBB_TASK_ISOLATION */
 
-} // namespace tbb
+namespace this_task_arena {
+    //! Returns the index, aka slot number, of the calling thread in its current arena
+    inline int current_thread_index() {
+        int idx = tbb::task_arena::current_thread_index();
+        return idx == -1 ? tbb::task_arena::not_initialized : idx;
+    }
+
+    //! Returns the maximal number of threads that can work inside the arena
+    inline int max_concurrency() {
+        return tbb::task_arena::internal_max_concurrency(NULL);
+    }
 
-#endif /* __TBB_TASK_ARENA */
+} // namespace this_task_arena
+
+} // namespace tbb
 
 #endif /* __TBB_task_arena_H */
diff --git a/include/tbb/task_group.h b/include/tbb/task_group.h
index b3fd2fa..bf6922b 100644
--- a/include/tbb/task_group.h
+++ b/include/tbb/task_group.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_task_group_H
@@ -69,7 +69,7 @@ namespace internal {
 template<typename F>
 class task_handle_task : public task {
     task_handle<F>& my_handle;
-    /*override*/ task* execute() {
+    task* execute() __TBB_override {
         my_handle();
         return NULL;
     }
@@ -111,7 +111,7 @@ public:
     ~task_group_base() __TBB_NOEXCEPT(false) {
         if( my_root->ref_count() > 1 ) {
             bool stack_unwinding_in_progress = std::uncaught_exception();
-            // Always attempt to do proper cleanup to avoid inevitable memory corruption 
+            // Always attempt to do proper cleanup to avoid inevitable memory corruption
             // in case of missing wait (for the sake of better testability & debuggability)
             if ( !is_canceling() )
                 cancel();
@@ -143,6 +143,7 @@ public:
             __TBB_RETHROW();
         }
         if ( my_context.is_group_execution_cancelled() ) {
+            // TODO: the reset method is not thread-safe. Ensure the correct behavior.
             my_context.reset();
             return canceled;
         }
@@ -205,7 +206,7 @@ public:
     }
 }; // class structured_task_group
 
-inline 
+inline
 bool is_current_task_group_canceling() {
     return task::self().is_cancelled();
 }
diff --git a/include/tbb/task_scheduler_init.h b/include/tbb/task_scheduler_init.h
index e98abbf..928e7a4 100644
--- a/include/tbb/task_scheduler_init.h
+++ b/include/tbb/task_scheduler_init.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_task_scheduler_init_H
@@ -23,6 +23,9 @@
 
 #include "tbb_stddef.h"
 #include "limits.h"
+#if __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE
+#include <new> // nothrow_t
+#endif
 
 namespace tbb {
 
@@ -56,14 +59,14 @@ class task_scheduler_init: internal::no_copy {
         propagation_mode_captured = 2u,
         propagation_mode_mask = propagation_mode_exact | propagation_mode_captured
     };
-#if __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE
-    enum {
-        wait_workers_in_terminate_flag = 128u
-    };
-#endif
 
     /** NULL if not currently initialized. */
     internal::scheduler* my_scheduler;
+
+    bool internal_terminate( bool blocking );
+#if __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE
+    bool __TBB_EXPORTED_METHOD internal_blocking_terminate( bool throwing );
+#endif
 public:
 
     //! Typedef for number of threads that is automatic.
@@ -81,8 +84,8 @@ public:
         TBB based components run side-by-side or in a nested fashion inside the same
         process.
 
-        The number_of_threads is ignored if any other task_scheduler_inits 
-        currently exist.  A thread may construct multiple task_scheduler_inits.  
+        The number_of_threads is ignored if any other task_scheduler_inits
+        currently exist.  A thread may construct multiple task_scheduler_inits.
         Doing so does no harm because the underlying scheduler is reference counted. */
     void __TBB_EXPORTED_METHOD initialize( int number_of_threads=automatic );
 
@@ -93,52 +96,57 @@ public:
     //! Inverse of method initialize.
     void __TBB_EXPORTED_METHOD terminate();
 
-    //! Shorthand for default constructor followed by call to initialize(number_of_threads).
 #if __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE
-    task_scheduler_init( int number_of_threads=automatic, stack_size_type thread_stack_size=0, bool wait_workers_in_terminate = false ) : my_scheduler(NULL)
-#else
-    task_scheduler_init( int number_of_threads=automatic, stack_size_type thread_stack_size=0 ) : my_scheduler(NULL)
+#if TBB_USE_EXCEPTIONS
+    //! terminate() that waits for worker threads termination. Throws exception on error.
+    void blocking_terminate() {
+        internal_blocking_terminate( /*throwing=*/true );
+    }
 #endif
+    //! terminate() that waits for worker threads termination. Returns false on error.
+    bool blocking_terminate(const std::nothrow_t&) __TBB_NOEXCEPT(true) {
+        return internal_blocking_terminate( /*throwing=*/false );
+    }
+#endif // __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE
+
+    //! Shorthand for default constructor followed by call to initialize(number_of_threads).
+    task_scheduler_init( int number_of_threads=automatic, stack_size_type thread_stack_size=0 ) : my_scheduler(NULL)
     {
         // Two lowest order bits of the stack size argument may be taken to communicate
         // default exception propagation mode of the client to be used when the
         // client manually creates tasks in the master thread and does not use
-        // explicit task group context object. This is necessary because newer 
-        // TBB binaries with exact propagation enabled by default may be used 
+        // explicit task group context object. This is necessary because newer
+        // TBB binaries with exact propagation enabled by default may be used
         // by older clients that expect tbb::captured_exception wrapper.
-        // All zeros mean old client - no preference. 
+        // All zeros mean old client - no preference.
         __TBB_ASSERT( !(thread_stack_size & propagation_mode_mask), "Requested stack size is not aligned" );
 #if TBB_USE_EXCEPTIONS
         thread_stack_size |= TBB_USE_CAPTURED_EXCEPTION ? propagation_mode_captured : propagation_mode_exact;
 #endif /* TBB_USE_EXCEPTIONS */
-#if __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE
-        if (wait_workers_in_terminate)
-            my_scheduler = (internal::scheduler*)wait_workers_in_terminate_flag;
-#endif
         initialize( number_of_threads, thread_stack_size );
     }
 
     //! Destroy scheduler for this thread if thread has no other live task_scheduler_inits.
     ~task_scheduler_init() {
-        if( my_scheduler ) 
+        if( my_scheduler )
             terminate();
         internal::poison_pointer( my_scheduler );
     }
     //! Returns the number of threads TBB scheduler would create if initialized by default.
-    /** Result returned by this method does not depend on whether the scheduler 
+    /** Result returned by this method does not depend on whether the scheduler
         has already been initialized.
-        
+
         Because tbb 2.0 does not support blocking tasks yet, you may use this method
-        to boost the number of threads in the tbb's internal pool, if your tasks are 
+        to boost the number of threads in the tbb's internal pool, if your tasks are
         doing I/O operations. The optimal number of additional threads depends on how
         much time your tasks spend in the blocked state.
-        
+
         Before TBB 3.0 U4 this method returned the number of logical CPU in the
         system. Currently on Windows, Linux and FreeBSD it returns the number of
         logical CPUs available to the current process in accordance with its affinity
         mask.
-        
-        NOTE: The return value of this method never changes after its first invocation. 
+
+        NOTE: The return value of this method never changes after its first invocation.
         This means that changes in the process affinity mask that took place after
         this method was first invoked will not affect the number of worker threads
         in the TBB worker threads pool. */
diff --git a/include/tbb/task_scheduler_observer.h b/include/tbb/task_scheduler_observer.h
index 4865dd3..5586ad4 100644
--- a/include/tbb/task_scheduler_observer.h
+++ b/include/tbb/task_scheduler_observer.h
@@ -1,30 +1,30 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_task_scheduler_observer_H
 #define __TBB_task_scheduler_observer_H
 
 #include "atomic.h"
-#if __TBB_TASK_ARENA
+#if __TBB_ARENA_OBSERVER || __TBB_SLEEP_PERMISSION
 #include "task_arena.h"
-#endif //__TBB_TASK_ARENA
+#endif
 
 #if __TBB_SCHEDULER_OBSERVER
 
@@ -65,14 +65,14 @@ public:
     task_scheduler_observer_v3() : my_proxy(NULL) { my_busy_count.store<relaxed>(0); }
 
     //! Entry notification
-    /** Invoked from inside observe(true) call and whenever a worker enters the arena 
+    /** Invoked from inside observe(true) call and whenever a worker enters the arena
         this observer is associated with. If a thread is already in the arena when
         the observer is activated, the entry notification is called before it
         executes the first stolen task.
 
         Obsolete semantics. For global observers it is called by a thread before
         the first steal since observation became enabled. **/
-    virtual void on_scheduler_entry( bool /*is_worker*/ ) {} 
+    virtual void on_scheduler_entry( bool /*is_worker*/ ) {}
 
     //! Exit notification
     /** Invoked from inside observe(false) call and whenever a worker leaves the
@@ -88,7 +88,7 @@ public:
 
 } // namespace internal
 
-#if __TBB_ARENA_OBSERVER
+#if __TBB_ARENA_OBSERVER || __TBB_SLEEP_PERMISSION
 namespace interface6 {
 class task_scheduler_observer : public internal::task_scheduler_observer_v3 {
     friend class internal::task_scheduler_observer_v3;
@@ -115,19 +115,24 @@ public:
         guarantees and is not composable. Thus the current default behavior of the
         constructor is obsolete too and will be changed in one of the future versions
         of the library. **/
-    task_scheduler_observer( bool local = false ) {
+    explicit task_scheduler_observer( bool local = false ) {
+#if  __TBB_ARENA_OBSERVER
         my_context_tag = local? implicit_tag : global_tag;
+#else
+        __TBB_ASSERT_EX( !local, NULL );
+        my_context_tag = global_tag;
+#endif
     }
 
-#if __TBB_TASK_ARENA
+#if  __TBB_ARENA_OBSERVER
     //! Construct local observer for a given arena in inactive state (observation disabled).
     /** entry/exit notifications are invoked whenever a thread joins/leaves arena.
         If a thread is already in the arena when the observer is activated, the entry notification
         is called before it executes the first stolen task. **/
-    task_scheduler_observer( task_arena & a) {
+    explicit task_scheduler_observer( task_arena & a) {
         my_context_tag = (intptr_t)&a;
     }
-#endif //__TBB_TASK_ARENA
+#endif /* __TBB_ARENA_OBSERVER */
 
     /** Destructor protects instance of the observer from concurrent notification.
        It is recommended to disable observation before destructor of a derived class starts,
@@ -145,6 +150,7 @@ public:
         internal::task_scheduler_observer_v3::observe(state);
     }
 
+#if  __TBB_SLEEP_PERMISSION
     //! Return commands for may_sleep()
     enum { keep_awake = false, allow_sleep = true };
 
@@ -152,13 +158,14 @@ public:
     /** If it returns false ('keep_awake'), the thread will keep spinning and looking for work.
         It will not be called for master threads. **/
     virtual bool may_sleep() { return allow_sleep; }
+#endif /*__TBB_SLEEP_PERMISSION*/
 };
 
 } //namespace interface6
 using interface6::task_scheduler_observer;
-#else /*__TBB_ARENA_OBSERVER*/
+#else /*__TBB_ARENA_OBSERVER || __TBB_SLEEP_PERMISSION*/
 typedef tbb::internal::task_scheduler_observer_v3 task_scheduler_observer;
-#endif /*__TBB_ARENA_OBSERVER*/
+#endif /*__TBB_ARENA_OBSERVER || __TBB_SLEEP_PERMISSION*/
 
 } // namespace tbb
 
diff --git a/include/tbb/tbb.h b/include/tbb/tbb.h
index 9e830f4..5e385ea 100644
--- a/include/tbb/tbb.h
+++ b/include/tbb/tbb.h
@@ -1,29 +1,29 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 #ifndef __TBB_tbb_H
 #define __TBB_tbb_H
 
-/** 
-    This header bulk-includes declarations or definitions of all the functionality 
-    provided by TBB (save for malloc dependent headers). 
+/**
+    This header bulk-includes declarations or definitions of all the functionality
+    provided by TBB (save for malloc dependent headers).
 
     If you use only a few TBB constructs, consider including specific headers only.
     Any header listed below can be included independently of others.
@@ -51,6 +51,9 @@
 #include "critical_section.h"
 #include "enumerable_thread_specific.h"
 #include "flow_graph.h"
+#if TBB_PREVIEW_GLOBAL_CONTROL
+#include "global_control.h"
+#endif
 #include "mutex.h"
 #include "null_mutex.h"
 #include "null_rw_mutex.h"
diff --git a/include/tbb/tbb_allocator.h b/include/tbb/tbb_allocator.h
index 33d09de..6346d86 100644
--- a/include/tbb/tbb_allocator.h
+++ b/include/tbb/tbb_allocator.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_tbb_allocator_H
@@ -64,7 +64,7 @@ namespace internal {
 #endif
 
 //! Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5
-/** The class selects the best memory allocation mechanism available 
+/** The class selects the best memory allocation mechanism available
     from scalable_malloc and standard malloc.
     The members are ordered the same way they are in section 20.4.1
     of the ISO C++ standard.
@@ -85,7 +85,7 @@ public:
 
     //! Specifies current allocator
     enum malloc_type {
-        scalable, 
+        scalable,
         standard
     };
 
@@ -95,7 +95,7 @@ public:
 
     pointer address(reference x) const {return &x;}
     const_pointer address(const_reference x) const {return &x;}
-    
+
     //! Allocate space for n objects.
     pointer allocate( size_type n, const void* /*hint*/ = 0) {
         return pointer(internal::allocate_via_handler_v3( n * sizeof(value_type) ));
@@ -103,7 +103,7 @@ public:
 
     //! Free previously allocated block of memory.
     void deallocate( pointer p, size_type ) {
-        internal::deallocate_via_handler_v3(p);        
+        internal::deallocate_via_handler_v3(p);
     }
 
     //! Largest value for which method allocate might succeed.
@@ -111,7 +111,7 @@ public:
         size_type max = static_cast<size_type>(-1) / sizeof (value_type);
         return (max > 0 ? max : 1);
     }
-    
+
     //! Copy-construct value at location pointed to by p.
 #if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC
     template<typename U, typename... Args>
@@ -139,7 +139,7 @@ public:
 
 //! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1
 /** @ingroup memory_allocation */
-template<> 
+template<>
 class tbb_allocator<void> {
 public:
     typedef void* pointer;
@@ -192,7 +192,7 @@ public:
 
 //! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1
 /** @ingroup memory_allocation */
-template<template<typename T> class Allocator> 
+template<template<typename T> class Allocator>
 class zero_allocator<void, Allocator> : public Allocator<void> {
 public:
     typedef Allocator<void> base_allocator_type;
@@ -213,6 +213,6 @@ inline bool operator!=( const zero_allocator<T1,B1> &a, const zero_allocator<T2,
     return static_cast< B1<T1> >(a) != static_cast< B2<T2> >(b);
 }
 
-} // namespace tbb 
+} // namespace tbb
 
 #endif /* __TBB_tbb_allocator_H */
diff --git a/include/tbb/tbb_config.h b/include/tbb/tbb_config.h
index ddbe5c7..25f9f24 100644
--- a/include/tbb/tbb_config.h
+++ b/include/tbb/tbb_config.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_tbb_config_H
@@ -34,20 +34,37 @@
  */
 #define __TBB_TODO 0
 
-/*Check which standard library we use on OS X.*/
+/*Check which standard library we use on macOS*.*/
 /*__TBB_SYMBOL is defined only while processing exported symbols list where C++ is not allowed.*/
-#if !defined(__TBB_SYMBOL) && __APPLE__
+#if !defined(__TBB_SYMBOL) && (__APPLE__ || __ANDROID__)
     #include <cstddef>
 #endif
 
-// note that when ICC is in use __TBB_GCC_VERSION might not closely match GCC version on the machine
+// note that when ICC or Clang is in use, __TBB_GCC_VERSION might not fully match
+// the actual GCC version on the system.
 #define __TBB_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
 
+// Since GNU libstdc++ does not have a convenient macro for its version,
+// we rely on the version of GCC or the user-specified macro below.
+// The format of TBB_USE_GLIBCXX_VERSION should match the __TBB_GCC_VERSION above,
+// e.g. it should be set to 40902 for libstdc++ coming with GCC 4.9.2.
+#ifdef TBB_USE_GLIBCXX_VERSION
+#define __TBB_GLIBCXX_VERSION TBB_USE_GLIBCXX_VERSION
+#else
+#define __TBB_GLIBCXX_VERSION __TBB_GCC_VERSION
+//TODO: analyze __GLIBCXX__ instead of __TBB_GCC_VERSION ?
+#endif
+
 #if __clang__
     /**according to clang documentation version can be vendor specific **/
     #define __TBB_CLANG_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__)
 #endif
 
+/** Target OS is either iOS* or iOS* simulator **/
+#if __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__
+    #define __TBB_IOS 1
+#endif
+
 /** Preprocessor symbols to determine HW architecture **/
 
 #if _WIN32||_WIN64
@@ -64,7 +81,9 @@
 #   if !__linux__ && !__APPLE__
 #       define __TBB_generic_os 1
 #   endif
-#   if __x86_64__
+#   if __TBB_IOS
+#       define __TBB_generic_arch 1
+#   elif __x86_64__
 #       define __TBB_x86_64 1
 #   elif __ia64__
 #       define __TBB_ipf 1
@@ -79,7 +98,7 @@
 #define __TBB_DEFINE_MIC 1
 #endif
 
-#define __TBB_TSX_AVAILABLE  (__TBB_x86_32 || __TBB_x86_64) && !__TBB_DEFINE_MIC
+#define __TBB_TSX_AVAILABLE  ((__TBB_x86_32 || __TBB_x86_64) && !__TBB_DEFINE_MIC)
 
 /** Presence of compiler features **/
 
@@ -95,7 +114,7 @@
 #endif
 
 /* Select particular features of C++11 based on compiler version.
-   ICC 12.1 (Linux), GCC 4.3 and higher, clang 2.9 and higher
+   ICC 12.1 (Linux*), GCC 4.3 and higher, clang 2.9 and higher
    set __GXX_EXPERIMENTAL_CXX0X__ in c++11 mode.
 
    Compilers that mimics other compilers (ICC, clang) must be processed before
@@ -105,145 +124,194 @@
    support added.
  */
 
-#if __INTEL_COMPILER
-    /** C++11 mode detection macros for Intel C++ compiler (enabled by -std=c++0x option):
-          __INTEL_CXX11_MODE__ for version >=13.0
-          __STDC_HOSTED__ for version >=12.0 on Windows,
-          __GXX_EXPERIMENTAL_CXX0X__ for version >=12.0 on Linux and OS X. **/
-    //  On Windows, C++11 features supported by Visual Studio 2010 and higher are enabled by default
-    #ifndef __INTEL_CXX11_MODE__
-        #define __INTEL_CXX11_MODE__ ((_MSC_VER && __STDC_HOSTED__) || __GXX_EXPERIMENTAL_CXX0X__)
-        // TODO: check if more conditions can be simplified with the above macro
-    #endif
-    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT    (__INTEL_CXX11_MODE__ && __VARIADIC_TEMPLATES)
+/** C++11 mode detection macros for Intel(R) C++ compiler (enabled by -std=c++XY option):
+    __INTEL_CXX11_MODE__ for version >=13.0 (not available for ICC 15.0 if -std=c++14 is used),
+    __STDC_HOSTED__ for version >=12.0 (useful only on Windows),
+    __GXX_EXPERIMENTAL_CXX0X__ for version >=12.0 on Linux and macOS. **/
+#if __INTEL_COMPILER &&  !__INTEL_CXX11_MODE__
+    // __INTEL_CXX11_MODE__ is not set, try to deduce it
+    #define __INTEL_CXX11_MODE__ (__GXX_EXPERIMENTAL_CXX0X__ || (_MSC_VER && __STDC_HOSTED__))
+#endif
+
+// Intel(R) C++ Compiler offloading API to the Intel(R) Graphics Technology presence macro
+// TODO: add support for ICC 15.00 _GFX_enqueue API and then decrease Intel compiler supported version
+// TODO: add linux support and restict it with (__linux__ && __TBB_x86_64 && !__ANDROID__) macro
+#if __INTEL_COMPILER >= 1600 && _WIN32
+#define __TBB_GFX_PRESENT 1
+#endif
+
+#if __INTEL_COMPILER && (!_MSC_VER || __INTEL_CXX11_MODE__)
+    //  On Windows, C++11 features supported by Visual Studio 2010 and higher are enabled by default,
+    //  so in absence of /Qstd= use MSVC branch for __TBB_CPP11_* detection.
+    //  On other platforms, no -std= means C++03.
+
+    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT          (__INTEL_CXX11_MODE__ && __VARIADIC_TEMPLATES)
     // Both r-value reference support in compiler and std::move/std::forward
     // presence in C++ standard library is checked.
-    #define __TBB_CPP11_RVALUE_REF_PRESENT            ((__GXX_EXPERIMENTAL_CXX0X__ && (__TBB_GCC_VERSION >= 40300 || _LIBCPP_VERSION) || _MSC_VER >= 1600) && __INTEL_COMPILER >= 1200)
+    #define __TBB_CPP11_RVALUE_REF_PRESENT                  ((_MSC_VER >= 1700 || __GXX_EXPERIMENTAL_CXX0X__ && (__TBB_GLIBCXX_VERSION >= 40500 || _LIBCPP_VERSION)) && __INTEL_COMPILER >= 1400)
+    #define __TBB_IMPLICIT_MOVE_PRESENT                     (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1400 && (_MSC_VER >= 1900 || __TBB_GCC_VERSION >= 40600 || __clang__))
     #if  _MSC_VER >= 1600
-        #define __TBB_EXCEPTION_PTR_PRESENT           ( __INTEL_COMPILER > 1300                                                \
-                                                      /*ICC 12.1 Upd 10 and 13 beta Upd 2 fixed exception_ptr linking  issue*/ \
-                                                      || (__INTEL_COMPILER == 1300 && __INTEL_COMPILER_BUILD_DATE >= 20120530) \
-                                                      || (__INTEL_COMPILER == 1210 && __INTEL_COMPILER_BUILD_DATE >= 20120410) )
+        #define __TBB_EXCEPTION_PTR_PRESENT                 ( __INTEL_COMPILER > 1300                                                \
+                                                            /*ICC 12.1 Upd 10 and 13 beta Upd 2 fixed exception_ptr linking  issue*/ \
+                                                            || (__INTEL_COMPILER == 1300 && __INTEL_COMPILER_BUILD_DATE >= 20120530) \
+                                                            || (__INTEL_COMPILER == 1210 && __INTEL_COMPILER_BUILD_DATE >= 20120410) )
     /** libstdc++ that comes with GCC 4.6 use C++11 features not supported by ICC 12.1.
-     *  Because of that ICC 12.1 does not support C++11 mode with with gcc 4.6 (or higher),
-     *  and therefore does not  define __GXX_EXPERIMENTAL_CXX0X__ macro **/
-    #elif __TBB_GCC_VERSION >= 40404 && __TBB_GCC_VERSION < 40600
-        #define __TBB_EXCEPTION_PTR_PRESENT           (__GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1200)
-    #elif __TBB_GCC_VERSION >= 40600
-        #define __TBB_EXCEPTION_PTR_PRESENT           (__GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1300)
+     *  Because of that ICC 12.1 does not support C++11 mode with gcc 4.6 (or higher),
+     *  and therefore does not define __GXX_EXPERIMENTAL_CXX0X__ macro **/
+    #elif __TBB_GLIBCXX_VERSION >= 40404 && __TBB_GLIBCXX_VERSION < 40600
+        #define __TBB_EXCEPTION_PTR_PRESENT                 (__GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1200)
+    #elif __TBB_GLIBCXX_VERSION >= 40600
+        #define __TBB_EXCEPTION_PTR_PRESENT                 (__GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1300)
     #elif _LIBCPP_VERSION
-        #define __TBB_EXCEPTION_PTR_PRESENT           __GXX_EXPERIMENTAL_CXX0X__
+        #define __TBB_EXCEPTION_PTR_PRESENT                 __GXX_EXPERIMENTAL_CXX0X__
     #else
-        #define __TBB_EXCEPTION_PTR_PRESENT           0
+        #define __TBB_EXCEPTION_PTR_PRESENT                 0
     #endif
-    #define __TBB_STATIC_ASSERT_PRESENT               (__INTEL_CXX11_MODE__ || _MSC_VER >= 1600)
-    #define __TBB_CPP11_TUPLE_PRESENT                 (_MSC_VER >= 1600 || (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40300))
-    /**Intel C++ compiler 14.0 crashes on using __has_include. When it fixed, condition will need to be updated. **/
+    #define __TBB_STATIC_ASSERT_PRESENT                     (__INTEL_CXX11_MODE__ || _MSC_VER >= 1600)
+    #define __TBB_CPP11_TUPLE_PRESENT                       (_MSC_VER >= 1600 || __GXX_EXPERIMENTAL_CXX0X__ && (__TBB_GLIBCXX_VERSION >= 40300 || _LIBCPP_VERSION))
     #if (__clang__ && __INTEL_COMPILER > 1400)
+        /* Older versions of Intel Compiler do not have __has_include */
         #if (__has_feature(__cxx_generalized_initializers__) && __has_include(<initializer_list>))
-            #define __TBB_INITIALIZER_LISTS_PRESENT   1
+            #define __TBB_INITIALIZER_LISTS_PRESENT         1
         #endif
     #else
-        /** TODO: when MSVC2013 is supported by Intel C++ compiler, it will be enabled silently by compiler, so rule will need to be updated.**/
-        #define __TBB_INITIALIZER_LISTS_PRESENT       __INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1400 && (_MSC_VER >= 1800 || __TBB_GCC_VERSION >= 40400 || _LIBCPP_VERSION)
+        #define __TBB_INITIALIZER_LISTS_PRESENT             (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1400 && (_MSC_VER >= 1800 || __TBB_GLIBCXX_VERSION >= 40400 || _LIBCPP_VERSION))
     #endif
-    
-    #define __TBB_CONSTEXPR_PRESENT                   __INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1400
-    #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT  __INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1200
+    #define __TBB_CONSTEXPR_PRESENT                         (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1400)
+    #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT        (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1200)
     /** ICC seems to disable support of noexcept event in c++11 when compiling in compatibility mode for gcc <4.6 **/
-    #define __TBB_NOEXCEPT_PRESENT                    __INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1300 && (__TBB_GCC_VERSION >= 40600 || _LIBCPP_VERSION || _MSC_VER)
-    #define __TBB_CPP11_STD_BEGIN_END_PRESENT         (_MSC_VER >= 1700 || __GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1310 && (__TBB_GCC_VERSION >= 40600 || _LIBCPP_VERSION))
-    #define __TBB_CPP11_AUTO_PRESENT                  (_MSC_VER >= 1600 || __GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1210)
-    #define __TBB_CPP11_DECLTYPE_PRESENT              (_MSC_VER >= 1600 || __GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1210)
-    #define __TBB_CPP11_LAMBDAS_PRESENT               (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1200)
+    #define __TBB_NOEXCEPT_PRESENT                          (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1300 && (__TBB_GLIBCXX_VERSION >= 40600 || _LIBCPP_VERSION || _MSC_VER))
+    #define __TBB_CPP11_STD_BEGIN_END_PRESENT               (_MSC_VER >= 1700 || __GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1310 && (__TBB_GLIBCXX_VERSION >= 40600 || _LIBCPP_VERSION))
+    #define __TBB_CPP11_AUTO_PRESENT                        (_MSC_VER >= 1600 || __GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1210)
+    #define __TBB_CPP11_DECLTYPE_PRESENT                    (_MSC_VER >= 1600 || __GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1210)
+    #define __TBB_CPP11_LAMBDAS_PRESENT                     (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1200)
+    #define __TBB_CPP11_DEFAULT_FUNC_TEMPLATE_ARGS_PRESENT  (_MSC_VER >= 1800 || __GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1210)
+    #define __TBB_OVERRIDE_PRESENT                          (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1400)
+    #define __TBB_ALIGNAS_PRESENT                           (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1500)
+    #define __TBB_CPP11_TEMPLATE_ALIASES_PRESENT            (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1210)
 #elif __clang__
-//TODO: these options need to be rechecked
-/** on OS X* the only way to get C++11 is to use clang. For library features (e.g. exception_ptr) libc++ is also
+/** TODO: these options need to be rechecked **/
+/** on macOS the only way to get C++11 is to use clang. For library features (e.g. exception_ptr) libc++ is also
  *  required. So there is no need to check GCC version for clang**/
-    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT    (__has_feature(__cxx_variadic_templates__))
-    #define __TBB_CPP11_RVALUE_REF_PRESENT            (__has_feature(__cxx_rvalue_references__) && (__TBB_GCC_VERSION >= 40300 || _LIBCPP_VERSION))
+    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT          __has_feature(__cxx_variadic_templates__)
+    #define __TBB_CPP11_RVALUE_REF_PRESENT                  (__has_feature(__cxx_rvalue_references__) && (_LIBCPP_VERSION || __TBB_GLIBCXX_VERSION >= 40500))
+    #define __TBB_IMPLICIT_MOVE_PRESENT                     __has_feature(cxx_implicit_moves)
 /** TODO: extend exception_ptr related conditions to cover libstdc++ **/
-    #define __TBB_EXCEPTION_PTR_PRESENT               (__cplusplus >= 201103L && _LIBCPP_VERSION)
-    #define __TBB_STATIC_ASSERT_PRESENT               __has_feature(__cxx_static_assert__)
+    #define __TBB_EXCEPTION_PTR_PRESENT                     (__cplusplus >= 201103L && (_LIBCPP_VERSION || __TBB_GLIBCXX_VERSION >= 40600))
+    #define __TBB_STATIC_ASSERT_PRESENT                     __has_feature(__cxx_static_assert__)
     /**Clang (preprocessor) has problems with dealing with expression having __has_include in #ifs
      * used inside C++ code. (At least version that comes with OS X 10.8 : Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)) **/
     #if (__GXX_EXPERIMENTAL_CXX0X__ && __has_include(<tuple>))
-        #define __TBB_CPP11_TUPLE_PRESENT             1
+        #define __TBB_CPP11_TUPLE_PRESENT                   1
     #endif
     #if (__has_feature(__cxx_generalized_initializers__) && __has_include(<initializer_list>))
-        #define __TBB_INITIALIZER_LISTS_PRESENT       1
+        #define __TBB_INITIALIZER_LISTS_PRESENT             1
     #endif
-    #define __TBB_CONSTEXPR_PRESENT                   __has_feature(__cxx_constexpr__)
-    #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT  (__has_feature(__cxx_defaulted_functions__) && __has_feature(__cxx_deleted_functions__))
+    #define __TBB_CONSTEXPR_PRESENT                         __has_feature(__cxx_constexpr__)
+    #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT        (__has_feature(__cxx_defaulted_functions__) && __has_feature(__cxx_deleted_functions__))
     /**For some unknown reason  __has_feature(__cxx_noexcept) does not yield true for all cases. Compiler bug ? **/
-    #define __TBB_NOEXCEPT_PRESENT                    (__cplusplus >= 201103L)
-    #define __TBB_CPP11_STD_BEGIN_END_PRESENT         (__has_feature(__cxx_range_for__) && _LIBCPP_VERSION)
-    #define __TBB_CPP11_AUTO_PRESENT                  __has_feature(__cxx_auto_type__)
-    #define __TBB_CPP11_DECLTYPE_PRESENT              __has_feature(__cxx_decltype__)
-    #define __TBB_CPP11_LAMBDAS_PRESENT               __has_feature(cxx_lambdas)
+    #define __TBB_NOEXCEPT_PRESENT                          (__cplusplus >= 201103L)
+    #define __TBB_CPP11_STD_BEGIN_END_PRESENT               (__has_feature(__cxx_range_for__) && (_LIBCPP_VERSION || __TBB_GLIBCXX_VERSION >= 40600))
+    #define __TBB_CPP11_AUTO_PRESENT                        __has_feature(__cxx_auto_type__)
+    #define __TBB_CPP11_DECLTYPE_PRESENT                    __has_feature(__cxx_decltype__)
+    #define __TBB_CPP11_LAMBDAS_PRESENT                     __has_feature(cxx_lambdas)
+    #define __TBB_CPP11_DEFAULT_FUNC_TEMPLATE_ARGS_PRESENT  __has_feature(cxx_default_function_template_args)
+    #define __TBB_OVERRIDE_PRESENT                          __has_feature(cxx_override_control)
+    #define __TBB_ALIGNAS_PRESENT                           __has_feature(cxx_alignas)
+    #define __TBB_CPP11_TEMPLATE_ALIASES_PRESENT            __has_feature(cxx_alias_templates)
 #elif __GNUC__
-    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT    __GXX_EXPERIMENTAL_CXX0X__
-    #define __TBB_CPP11_RVALUE_REF_PRESENT            __GXX_EXPERIMENTAL_CXX0X__
-    /** __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 here is a substitution for _GLIBCXX_ATOMIC_BUILTINS_4, which is a prerequisite 
-        for exception_ptr but cannot be used in this file because it is defined in a header, not by the compiler. 
+    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT          __GXX_EXPERIMENTAL_CXX0X__
+    #define __TBB_CPP11_VARIADIC_FIXED_LENGTH_EXP_PRESENT   (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40700)
+    #define __TBB_CPP11_RVALUE_REF_PRESENT                  (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40500)
+    #define __TBB_IMPLICIT_MOVE_PRESENT                     (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40600)
+    /** __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 here is a substitution for _GLIBCXX_ATOMIC_BUILTINS_4, which is a prerequisite
+        for exception_ptr but cannot be used in this file because it is defined in a header, not by the compiler.
         If the compiler has no atomic intrinsics, the C++ library should not expect those as well. **/
-    #define __TBB_EXCEPTION_PTR_PRESENT               (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40404 && __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)
-    #define __TBB_STATIC_ASSERT_PRESENT               (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40300)
-    #define __TBB_CPP11_TUPLE_PRESENT                 (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40300)
-    #define __TBB_INITIALIZER_LISTS_PRESENT           (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400)
+    #define __TBB_EXCEPTION_PTR_PRESENT                     (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40404 && __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)
+    #define __TBB_STATIC_ASSERT_PRESENT                     (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40300)
+    #define __TBB_CPP11_TUPLE_PRESENT                       (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40300)
+    #define __TBB_INITIALIZER_LISTS_PRESENT                 (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400)
     /** gcc seems have to support constexpr from 4.4 but tests in (test_atomic) seeming reasonable fail to compile prior 4.6**/
-    #define __TBB_CONSTEXPR_PRESENT                   (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400)
-    #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT  (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400)
-    #define __TBB_NOEXCEPT_PRESENT                    (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40600)
-    #define __TBB_CPP11_STD_BEGIN_END_PRESENT         (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40600)
-    #define __TBB_CPP11_AUTO_PRESENT                  (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400)
-    #define __TBB_CPP11_DECLTYPE_PRESENT              (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400)
-    #define __TBB_CPP11_LAMBDAS_PRESENT               (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40500)
+    #define __TBB_CONSTEXPR_PRESENT                         (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400)
+    #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT        (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400)
+    #define __TBB_NOEXCEPT_PRESENT                          (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40600)
+    #define __TBB_CPP11_STD_BEGIN_END_PRESENT               (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40600)
+    #define __TBB_CPP11_AUTO_PRESENT                        (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400)
+    #define __TBB_CPP11_DECLTYPE_PRESENT                    (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400)
+    #define __TBB_CPP11_LAMBDAS_PRESENT                     (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40500)
+    #define __TBB_CPP11_DEFAULT_FUNC_TEMPLATE_ARGS_PRESENT  (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40300)
+    #define __TBB_OVERRIDE_PRESENT                          (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40700)
+    #define __TBB_ALIGNAS_PRESENT                           (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40800)
+    #define __TBB_CPP11_TEMPLATE_ALIASES_PRESENT            (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40700)
 #elif _MSC_VER
-    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT    (_MSC_VER >= 1800)
-    #define __TBB_CPP11_RVALUE_REF_PRESENT            (_MSC_VER >= 1600)
-    #define __TBB_EXCEPTION_PTR_PRESENT               (_MSC_VER >= 1600)
-    #define __TBB_STATIC_ASSERT_PRESENT               (_MSC_VER >= 1600)
-    #define __TBB_CPP11_TUPLE_PRESENT                 (_MSC_VER >= 1600)
-    #define __TBB_INITIALIZER_LISTS_PRESENT           (_MSC_VER >= 1800)
-    #define __TBB_CONSTEXPR_PRESENT                   0
-    #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT  (_MSC_VER >= 1800)
-    #define __TBB_NOEXCEPT_PRESENT                    (_MSC_VER >= 1900)
-    #define __TBB_CPP11_STD_BEGIN_END_PRESENT         (_MSC_VER >= 1700)
-    #define __TBB_CPP11_AUTO_PRESENT                  (_MSC_VER >= 1600)
-    #define __TBB_CPP11_DECLTYPE_PRESENT              (_MSC_VER >= 1600)
-    #define __TBB_CPP11_LAMBDAS_PRESENT               (_MSC_VER >= 1600)
+    // These definitions are also used with Intel Compiler in "default" mode; see a comment above.
+
+    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT          (_MSC_VER >= 1800)
+    // Contains a workaround for ICC 13
+    #define __TBB_CPP11_RVALUE_REF_PRESENT                  (_MSC_VER >= 1700 && (!__INTEL_COMPILER || __INTEL_COMPILER >= 1400))
+    #define __TBB_IMPLICIT_MOVE_PRESENT                     (_MSC_VER >= 1900)
+    #define __TBB_EXCEPTION_PTR_PRESENT                     (_MSC_VER >= 1600)
+    #define __TBB_STATIC_ASSERT_PRESENT                     (_MSC_VER >= 1600)
+    #define __TBB_CPP11_TUPLE_PRESENT                       (_MSC_VER >= 1600)
+    #define __TBB_INITIALIZER_LISTS_PRESENT                 (_MSC_VER >= 1800)
+    #define __TBB_CONSTEXPR_PRESENT                         (_MSC_VER >= 1900)
+    #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT        (_MSC_VER >= 1800)
+    #define __TBB_NOEXCEPT_PRESENT                          (_MSC_VER >= 1900)
+    #define __TBB_CPP11_STD_BEGIN_END_PRESENT               (_MSC_VER >= 1700)
+    #define __TBB_CPP11_AUTO_PRESENT                        (_MSC_VER >= 1600)
+    #define __TBB_CPP11_DECLTYPE_PRESENT                    (_MSC_VER >= 1600)
+    #define __TBB_CPP11_LAMBDAS_PRESENT                     (_MSC_VER >= 1600)
+    #define __TBB_CPP11_DEFAULT_FUNC_TEMPLATE_ARGS_PRESENT  (_MSC_VER >= 1800)
+    #define __TBB_OVERRIDE_PRESENT                          (_MSC_VER >= 1700)
+    #define __TBB_ALIGNAS_PRESENT                           (_MSC_VER >= 1900)
+    #define __TBB_CPP11_TEMPLATE_ALIASES_PRESENT            (_MSC_VER >= 1800)
 #else
-    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT    0
-    #define __TBB_CPP11_RVALUE_REF_PRESENT            0
-    #define __TBB_EXCEPTION_PTR_PRESENT               0
-    #define __TBB_STATIC_ASSERT_PRESENT               0
-    #define __TBB_CPP11_TUPLE_PRESENT                 0
-    #define __TBB_INITIALIZER_LISTS_PRESENT           0
-    #define __TBB_CONSTEXPR_PRESENT                   0
-    #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT  0
-    #define __TBB_NOEXCEPT_PRESENT                    0
-    #define __TBB_CPP11_STD_BEGIN_END_PRESENT         0
-    #define __TBB_CPP11_AUTO_PRESENT                  0
-    #define __TBB_CPP11_DECLTYPE_PRESENT              0
-    #define __TBB_CPP11_LAMBDAS_PRESENT               0
+    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT          0
+    #define __TBB_CPP11_RVALUE_REF_PRESENT                  0
+    #define __TBB_IMPLICIT_MOVE_PRESENT                     0
+    #define __TBB_EXCEPTION_PTR_PRESENT                     0
+    #define __TBB_STATIC_ASSERT_PRESENT                     0
+    #define __TBB_CPP11_TUPLE_PRESENT                       0
+    #define __TBB_INITIALIZER_LISTS_PRESENT                 0
+    #define __TBB_CONSTEXPR_PRESENT                         0
+    #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT        0
+    #define __TBB_NOEXCEPT_PRESENT                          0
+    #define __TBB_CPP11_STD_BEGIN_END_PRESENT               0
+    #define __TBB_CPP11_AUTO_PRESENT                        0
+    #define __TBB_CPP11_DECLTYPE_PRESENT                    0
+    #define __TBB_CPP11_LAMBDAS_PRESENT                     0
+    #define __TBB_CPP11_DEFAULT_FUNC_TEMPLATE_ARGS_PRESENT  0
+    #define __TBB_OVERRIDE_PRESENT                          0
+    #define __TBB_ALIGNAS_PRESENT                           0
+    #define __TBB_CPP11_TEMPLATE_ALIASES_PRESENT            0
 #endif
 
 // C++11 standard library features
 
+#ifndef __TBB_CPP11_VARIADIC_FIXED_LENGTH_EXP_PRESENT
+#define __TBB_CPP11_VARIADIC_FIXED_LENGTH_EXP_PRESENT       __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT
+#endif
 #define __TBB_CPP11_VARIADIC_TUPLE_PRESENT          (!_MSC_VER || _MSC_VER >=1800)
-#define __TBB_CPP11_TYPE_PROPERTIES_PRESENT         (_LIBCPP_VERSION || _MSC_VER >= 1700)
-#define __TBB_TR1_TYPE_PROPERTIES_IN_STD_PRESENT    (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40300 || _MSC_VER >= 1600)
-// GCC has a partial support of type properties
-#define __TBB_CPP11_IS_COPY_CONSTRUCTIBLE_PRESENT   (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40700 || __TBB_CPP11_TYPE_PROPERTIES_PRESENT)
-
-// In GCC and MSVC, implementation of std::move_if_noexcept is not aligned with noexcept
-#define __TBB_MOVE_IF_NOEXCEPT_PRESENT          (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40700 || _MSC_VER >= 1800 || __clang__ && _LIBCPP_VERSION && __TBB_NOEXCEPT_PRESENT)
-//TODO: Probably more accurate way is to analyze version of stdlibc++ via__GLIBCXX__ instead of __TBB_GCC_VERSION
-#define __TBB_ALLOCATOR_TRAITS_PRESENT              (__cplusplus >= 201103L && _LIBCPP_VERSION  || _MSC_VER >= 1700 ||                                             \
-                                                     __GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40700 && !(__TBB_GCC_VERSION == 40700 && __TBB_DEFINE_MIC) \
-                                                    )
-#define __TBB_MAKE_EXCEPTION_PTR_PRESENT         (__TBB_EXCEPTION_PTR_PRESENT && (_MSC_VER >= 1700 || __TBB_GCC_VERSION >= 40600 || _LIBCPP_VERSION))
+
+#define __TBB_CPP11_TYPE_PROPERTIES_PRESENT         (_LIBCPP_VERSION || _MSC_VER >= 1700 || (__TBB_GLIBCXX_VERSION >= 50000 && __GXX_EXPERIMENTAL_CXX0X__))
+#define __TBB_TR1_TYPE_PROPERTIES_IN_STD_PRESENT    (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GLIBCXX_VERSION >= 40300 || _MSC_VER >= 1600)
+// GCC supported some of type properties since 4.7
+#define __TBB_CPP11_IS_COPY_CONSTRUCTIBLE_PRESENT   (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GLIBCXX_VERSION >= 40700 || __TBB_CPP11_TYPE_PROPERTIES_PRESENT)
+
+// In GCC, std::move_if_noexcept appeared later than noexcept
+#define __TBB_MOVE_IF_NOEXCEPT_PRESENT     (__TBB_NOEXCEPT_PRESENT && (__TBB_GLIBCXX_VERSION >= 40700 || _MSC_VER >= 1900 || _LIBCPP_VERSION))
+#define __TBB_ALLOCATOR_TRAITS_PRESENT     (__cplusplus >= 201103L && _LIBCPP_VERSION  || _MSC_VER >= 1700 ||  \
+                                            __GXX_EXPERIMENTAL_CXX0X__ && __TBB_GLIBCXX_VERSION >= 40700 && !(__TBB_GLIBCXX_VERSION == 40700 && __TBB_DEFINE_MIC))
+#define __TBB_MAKE_EXCEPTION_PTR_PRESENT   (__TBB_EXCEPTION_PTR_PRESENT && (_MSC_VER >= 1700 || __TBB_GLIBCXX_VERSION >= 40600 || _LIBCPP_VERSION))
+
+#define __TBB_CPP11_FUTURE_PRESENT (_MSC_VER >= 1700 || __TBB_GLIBCXX_VERSION >= 40600 && _GXX_EXPERIMENTAL_CXX0X__ || _LIBCPP_VERSION)
+
+// std::swap is in <utility> only since C++11, though MSVC had it at least since VS2005
+#if _MSC_VER>=1400 || _LIBCPP_VERSION || __GXX_EXPERIMENTAL_CXX0X__
+#define __TBB_STD_SWAP_HEADER <utility>
+#else
+#define __TBB_STD_SWAP_HEADER <algorithm>
+#endif
 
 //TODO: not clear how exactly this macro affects exception_ptr - investigate
 // On linux ICC fails to find existing std::exception_ptr in libstdc++ without this define
@@ -266,7 +334,8 @@
 /* Actually ICC supports gcc __sync_* intrinsics starting 11.1,
  * but 64 bit support for 32 bit target comes in later ones*/
 /* TODO: change the version back to 4.1.2 once macro __TBB_WORD_SIZE become optional */
-#if __TBB_GCC_VERSION >= 40306 || __INTEL_COMPILER >= 1200
+/* Assumed that all clang versions have these gcc compatible intrinsics. */
+#if __TBB_GCC_VERSION >= 40306 || __INTEL_COMPILER >= 1200 || __clang__
     /** built-in atomics available in GCC since 4.1.2 **/
     #define __TBB_GCC_BUILTIN_ATOMICS_PRESENT 1
 #endif
@@ -278,11 +347,32 @@
 
 #define __TBB_TSX_INTRINSICS_PRESENT ((__RTM__ || _MSC_VER>=1700 || __INTEL_COMPILER>=1300) && !__TBB_DEFINE_MIC && !__ANDROID__)
 
-/** User controlled TBB features & modes **/
+/** Macro helpers **/
+#define __TBB_CONCAT_AUX(A,B) A##B
+// The additional level of indirection is needed to expand macros A and B (not to get the AB macro).
+// See [cpp.subst] and [cpp.concat] for more details.
+#define __TBB_CONCAT(A,B) __TBB_CONCAT_AUX(A,B)
+// The IGNORED argument and comma are needed to always have 2 arguments (even when A is empty).
+#define __TBB_IS_MACRO_EMPTY(A,IGNORED) __TBB_CONCAT_AUX(__TBB_MACRO_EMPTY,A)
+#define __TBB_MACRO_EMPTY 1
 
+/** User controlled TBB features & modes **/
 #ifndef TBB_USE_DEBUG
+/*
+There are four cases that are supported:
+  1. "_DEBUG is undefined" means "no debug";
+  2. "_DEBUG defined to something that is evaluated to 0 (the "garbage" is also evaluated to 0 [cpp.cond])" means "no debug";
+  3. "_DEBUG defined to something that is evaluated to non-zero value" means "debug";
+  4. "_DEBUG defined to nothing (empty)" means "debug".
+*/
 #ifdef _DEBUG
+// Check if _DEBUG is empty.
+#define __TBB_IS__DEBUG_EMPTY (__TBB_IS_MACRO_EMPTY(_DEBUG,IGNORED)==__TBB_MACRO_EMPTY)
+#if __TBB_IS__DEBUG_EMPTY
+#define TBB_USE_DEBUG 1
+#else
 #define TBB_USE_DEBUG _DEBUG
+#endif /* __TBB_IS__DEBUG_EMPTY */
 #else
 #define TBB_USE_DEBUG 0
 #endif
@@ -304,40 +394,46 @@
 #endif /* TBB_PEFORMANCE_WARNINGS */
 #endif /* TBB_USE_PERFORMANCE_WARNINGS */
 
-#if !defined(__EXCEPTIONS) && !defined(_CPPUNWIND) && !defined(__SUNPRO_CC) || defined(_XBOX)
+#if __TBB_DEFINE_MIC
+    #if TBB_USE_EXCEPTIONS
+        #error The platform does not properly support exception handling. Please do not set TBB_USE_EXCEPTIONS macro or set it to 0.
+    #elif !defined(TBB_USE_EXCEPTIONS)
+        #define TBB_USE_EXCEPTIONS 0
+    #endif
+#elif !(__EXCEPTIONS || defined(_CPPUNWIND) || __SUNPRO_CC)
     #if TBB_USE_EXCEPTIONS
         #error Compilation settings do not support exception handling. Please do not set TBB_USE_EXCEPTIONS macro or set it to 0.
     #elif !defined(TBB_USE_EXCEPTIONS)
         #define TBB_USE_EXCEPTIONS 0
     #endif
 #elif !defined(TBB_USE_EXCEPTIONS)
-    #if __TBB_DEFINE_MIC
-    #define TBB_USE_EXCEPTIONS 0
-    #else
     #define TBB_USE_EXCEPTIONS 1
-    #endif
-#elif TBB_USE_EXCEPTIONS && __TBB_DEFINE_MIC
-    #error Please do not set TBB_USE_EXCEPTIONS macro or set it to 0.
+#endif
+
+#if __clang__ && !__INTEL_COMPILER
+#define __TBB_USE_OPTIONAL_RTTI __has_feature(cxx_rtti)
+#elif defined(_CPPRTTI)
+#define __TBB_USE_OPTIONAL_RTTI 1
+#else
+#define __TBB_USE_OPTIONAL_RTTI (__GXX_RTTI || __RTTI || __INTEL_RTTI__)
 #endif
 
 #ifndef TBB_IMPLEMENT_CPP0X
-    /** By default, use C++11 classes if available **/
-    #if __GNUC__==4 && __GNUC_MINOR__>=4 && __GXX_EXPERIMENTAL_CXX0X__
-        #define TBB_IMPLEMENT_CPP0X 0
-    #elif __clang__ && __cplusplus >= 201103L
-        //TODO: consider introducing separate macros for each file?
-        //prevent injection of corresponding tbb names into std:: namespace if native headers are present
-        #if __has_include(<thread>) || __has_include(<condition_variable>)
-            #define TBB_IMPLEMENT_CPP0X 0
+/** By default, use C++11 classes if available **/
+    #if __clang__
+        /* Old versions of Intel Compiler do not have __has_include or cannot use it in #define */
+        #if (__INTEL_COMPILER && (__INTEL_COMPILER < 1500 || __INTEL_COMPILER == 1500 && __INTEL_COMPILER_UPDATE <= 1))
+            #define TBB_IMPLEMENT_CPP0X (__cplusplus < 201103L || !_LIBCPP_VERSION)
         #else
-            #define TBB_IMPLEMENT_CPP0X 1
+            #define TBB_IMPLEMENT_CPP0X (__cplusplus < 201103L || (!__has_include(<thread>) && !__has_include(<condition_variable>)))
         #endif
-    #elif _MSC_VER>=1700
-        #define TBB_IMPLEMENT_CPP0X 0
-    #elif __STDCPP_THREADS__
-        #define TBB_IMPLEMENT_CPP0X 0
+    #elif __GNUC__
+        #define TBB_IMPLEMENT_CPP0X (__TBB_GCC_VERSION < 40400 || !__GXX_EXPERIMENTAL_CXX0X__)
+    #elif _MSC_VER
+        #define TBB_IMPLEMENT_CPP0X (_MSC_VER < 1700)
     #else
-        #define TBB_IMPLEMENT_CPP0X 1
+        // TODO: Reconsider general approach to be more reliable, e.g. (!(__cplusplus >= 201103L && __ STDC_HOSTED__))
+        #define TBB_IMPLEMENT_CPP0X (!__STDCPP_THREADS__)
     #endif
 #endif /* TBB_IMPLEMENT_CPP0X */
 
@@ -400,15 +496,7 @@
     #error __TBB_FP_CONTEXT requires __TBB_TASK_GROUP_CONTEXT to be enabled
 #endif
 
-#ifndef __TBB_TASK_ARENA
-    #define __TBB_TASK_ARENA 1
-#endif /* __TBB_TASK_ARENA  */
-#if __TBB_TASK_ARENA
-    #define __TBB_RECYCLE_TO_ENQUEUE __TBB_BUILD // keep non-official
-    #if !__TBB_SCHEDULER_OBSERVER
-        #error __TBB_TASK_ARENA requires __TBB_SCHEDULER_OBSERVER to be enabled
-    #endif
-#endif /* __TBB_TASK_ARENA */
+#define __TBB_RECYCLE_TO_ENQUEUE __TBB_BUILD // keep non-official
 
 #ifndef __TBB_ARENA_OBSERVER
     #define __TBB_ARENA_OBSERVER ((__TBB_BUILD||TBB_PREVIEW_LOCAL_OBSERVER)&& __TBB_SCHEDULER_OBSERVER)
@@ -418,7 +506,15 @@
     #define __TBB_SLEEP_PERMISSION ((__TBB_CPF_BUILD||TBB_PREVIEW_LOCAL_OBSERVER)&& __TBB_SCHEDULER_OBSERVER)
 #endif /* __TBB_SLEEP_PERMISSION */
 
+#ifndef __TBB_TASK_ISOLATION
+    #define __TBB_TASK_ISOLATION (__TBB_CPF_BUILD||TBB_PREVIEW_TASK_ISOLATION)
+#endif /* __TBB_TASK_ISOLATION */
+
 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
+// Users of flow-graph trace need to explicitly link against the preview library.  This
+// prevents the linker from implicitly linking an application with a preview version of
+// TBB and unexpectedly bringing in other community preview features, which might change
+// the behavior of the application.
 #define __TBB_NO_IMPLICIT_LINKAGE 1
 #endif /* TBB_PREVIEW_FLOW_GRAPH_TRACE */
 
@@ -442,6 +538,10 @@
     #define __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE 1
 #endif
 
+#ifndef __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+    #define __TBB_ENQUEUE_ENFORCED_CONCURRENCY 1
+#endif
+
 #if !defined(__TBB_SURVIVE_THREAD_SWITCH) && \
           (_WIN32 || _WIN64 || __APPLE__ || (__linux__ && !__ANDROID__))
     #define __TBB_SURVIVE_THREAD_SWITCH 1
@@ -473,7 +573,7 @@
     #elif _MSC_VER == 1600
         #define __TBB_VARIADIC_MAX 10 // VS10 setting
     #else
-        #define __TBB_VARIADIC_MAX 15 
+        #define __TBB_VARIADIC_MAX 15
     #endif
 #endif
 
@@ -491,7 +591,7 @@
     versions go out of the support list.
 **/
 
-#if __ANDROID__ && __TBB_GCC_VERSION <= 40403 && !__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8
+#if __SIZEOF_POINTER__ < 8 && __ANDROID__ && __TBB_GCC_VERSION <= 40403 && !__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8
     /** Necessary because on Android 8-byte CAS and F&A are not available for some processor architectures,
         but no mandatory warning message appears from GCC 4.4.3. Instead, only a linkage error occurs when
         these atomic operations are used (such as in unit test test_atomic.exe). **/
@@ -514,23 +614,20 @@
     #define __TBB_DEFAULT_DTOR_THROW_SPEC_BROKEN 1
 #endif
 
-#if !__INTEL_COMPILER && (_MSC_VER && _MSC_VER < 1500 || __TBB_GCC_VERSION && __TBB_GCC_VERSION < 40102)
+#if !__INTEL_COMPILER && (_MSC_VER && _MSC_VER < 1500 || __GNUC__ && __TBB_GCC_VERSION < 40102)
     /** gcc 3.4.6 (and earlier) and VS2005 (and earlier) do not allow declaring template class as a friend
         of classes defined in other namespaces. **/
     #define __TBB_TEMPLATE_FRIENDS_BROKEN 1
 #endif
 
-//TODO: recheck for different clang versions 
 #if __GLIBC__==2 && __GLIBC_MINOR__==3 ||  (__APPLE__ && ( __INTEL_COMPILER==1200 && !TBB_USE_DEBUG))
     /** Macro controlling EH usages in TBB tests.
         Some older versions of glibc crash when exception handling happens concurrently. **/
     #define __TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN 1
-#else
-    #define __TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN 0
 #endif
 
 #if (_WIN32||_WIN64) && __INTEL_COMPILER == 1110
-    /** That's a bug in Intel compiler 11.1.044/IA-32/Windows, that leads to a worker thread crash on the thread's startup. **/
+    /** That's a bug in Intel(R) C++ Compiler 11.1.044/IA-32 architecture/Windows* OS, that leads to a worker thread crash on the thread's startup. **/
     #define __TBB_ICL_11_1_CODE_GEN_BROKEN 1
 #endif
 
@@ -543,11 +640,9 @@
     /** MinGW has a bug with stack alignment for routines invoked from MS RTLs.
         Since GCC 4.2, the bug can be worked around via a special attribute. **/
     #define __TBB_SSE_STACK_ALIGNMENT_BROKEN 1
-#else
-    #define __TBB_SSE_STACK_ALIGNMENT_BROKEN 0
 #endif
 
-#if __GNUC__==4 && __GNUC_MINOR__==3 && __GNUC_PATCHLEVEL__==0
+#if __TBB_GCC_VERSION==40300 && !__INTEL_COMPILER && !__clang__
     /* GCC of this version may rashly ignore control dependencies */
     #define __TBB_GCC_OPTIMIZER_ORDERING_BROKEN 1
 #endif
@@ -563,7 +658,7 @@
 #endif /* __FreeBSD__ */
 
 #if (__linux__ || __APPLE__) && __i386__ && defined(__INTEL_COMPILER)
-    /** The Intel compiler for IA-32 (Linux|OS X) crashes or generates
+    /** The Intel(R) C++ Compiler for IA-32 architecture (Linux* OS|macOS) crashes or generates
         incorrect code when __asm__ arguments have a cast to volatile. **/
     #define __TBB_ICC_ASM_VOLATILE_BROKEN 1
 #endif
@@ -581,26 +676,22 @@
 
 #if __GXX_EXPERIMENTAL_CXX0X__ && !defined(__EXCEPTIONS) && \
     ((!__INTEL_COMPILER && !__clang__ && (__TBB_GCC_VERSION>=40400 && __TBB_GCC_VERSION<40600)) || \
-     (__INTEL_COMPILER<=1400 && (__TBB_GCC_VERSION>=40400 && __TBB_GCC_VERSION<=40801)))
+     (__INTEL_COMPILER<=1400 && (__TBB_GLIBCXX_VERSION>=40400 && __TBB_GLIBCXX_VERSION<=40801)))
 /* There is an issue for specific GCC toolchain when C++11 is enabled
    and exceptions are disabled:
    exceprion_ptr.h/nested_exception.h use throw unconditionally.
    GCC can ignore 'throw' since 4.6; but with ICC the issue still exists.
  */
     #define __TBB_LIBSTDCPP_EXCEPTION_HEADERS_BROKEN 1
-#else
-    #define __TBB_LIBSTDCPP_EXCEPTION_HEADERS_BROKEN 0
 #endif
 
-#if __INTEL_COMPILER==1300 && __TBB_GCC_VERSION>=40700 && defined(__GXX_EXPERIMENTAL_CXX0X__)
+#if __INTEL_COMPILER==1300 && __TBB_GLIBCXX_VERSION>=40700 && defined(__GXX_EXPERIMENTAL_CXX0X__)
 /* Some C++11 features used inside libstdc++ are not supported by Intel compiler.
  * Checking version of gcc instead of libstdc++ because
  *  - they are directly connected,
  *  - for now it is not possible to check version of any standard library in this file
  */
     #define __TBB_ICC_13_0_CPP11_STDLIB_SUPPORT_BROKEN 1
-#else
-    #define __TBB_ICC_13_0_CPP11_STDLIB_SUPPORT_BROKEN 0
 #endif
 
 #if (__GNUC__==4 && __GNUC_MINOR__==4 ) && !defined(__INTEL_COMPILER) && !defined(__clang__)
@@ -617,17 +708,19 @@
     #define __TBB_GCC_CAS8_BUILTIN_INLINING_BROKEN 1
 #endif
 
-#if __TBB_x86_32 && (__linux__ || __APPLE__ || _WIN32 || __sun || __ANDROID__) &&  (__INTEL_COMPILER || (__GNUC__==3 && __GNUC_MINOR__==3 )||(__MINGW32__ ) && (__GNUC__==4 && __GNUC_MINOR__==5 ) || __SUNPRO_CC)
-    // Some compilers for IA-32 fail to provide 8-byte alignment of objects on the stack,
-    // even if the object specifies 8-byte alignment.  On such platforms, the IA-32 implementation
-    // of 64 bit atomics (e.g. atomic<long long>) use different tactics depending upon
-    // whether the object is properly aligned or not.
+#if __TBB_x86_32 && ( __INTEL_COMPILER || (__GNUC__==5 && __GNUC_MINOR__>=2 && __GXX_EXPERIMENTAL_CXX0X__) \
+    || (__GNUC__==3 && __GNUC_MINOR__==3) || (__MINGW32__ && __GNUC__==4 && __GNUC_MINOR__==5) || __SUNPRO_CC )
+    // Some compilers for IA-32 architecture fail to provide 8-byte alignment of objects on the stack,
+    // even if the object specifies 8-byte alignment. On such platforms, the implementation
+    // of 64 bit atomics for IA-32 architecture (e.g. atomic<long long>) use different tactics
+    // depending upon whether the object is properly aligned or not.
     #define __TBB_FORCE_64BIT_ALIGNMENT_BROKEN 1
 #else
+    // Define to 0 explicitly because the macro is used in a compiled code of test_atomic
     #define __TBB_FORCE_64BIT_ALIGNMENT_BROKEN 0
 #endif
 
-#if __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT && __TBB_GCC_VERSION < 40700 && !defined(__INTEL_COMPILER) && !defined (__clang__)
+#if __GNUC__ && !__INTEL_COMPILER && !__clang__ && __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT && __TBB_GCC_VERSION < 40700
     #define __TBB_ZERO_INIT_WITH_DEFAULTED_CTOR_BROKEN 1
 #endif
 
@@ -640,18 +733,15 @@
 // A compiler bug: a disabled copy constructor prevents use of the moving constructor
 #define __TBB_IF_NO_COPY_CTOR_MOVE_SEMANTICS_BROKEN (_MSC_VER && (__INTEL_COMPILER >= 1300 && __INTEL_COMPILER <= 1310) && !__INTEL_CXX11_MODE__)
 
-// MSVC 2013 and ICC 15 seems do not generate implicit move constructor for empty derived class while should
-#define __TBB_CPP11_IMPLICIT_MOVE_MEMBERS_GENERATION_FOR_DERIVED_BROKEN  (__TBB_CPP11_RVALUE_REF_PRESENT &&  \
-      ( !__INTEL_COMPILER && _MSC_VER && _MSC_VER <= 1800 || __INTEL_COMPILER && __INTEL_COMPILER <= 1500 ))
-
 #define __TBB_CPP11_DECLVAL_BROKEN (_MSC_VER == 1600 || (__GNUC__ && __TBB_GCC_VERSION < 40500) )
 
 // Intel C++ compiler has difficulties with copying std::pair with VC11 std::reference_wrapper being a const member
 #define __TBB_COPY_FROM_NON_CONST_REF_BROKEN (_MSC_VER == 1700 && __INTEL_COMPILER && __INTEL_COMPILER < 1600)
-//The implicit upcasting of the tuple of a reference of a derived class to a base class fails on icc 13.X 
-//if the system's gcc environment is 4.8
-#if (__INTEL_COMPILER >=1300 && __INTEL_COMPILER <=1310) && __TBB_GCC_VERSION>=40700 && __GXX_EXPERIMENTAL_CXX0X__
-    #define __TBB_UPCAST_OF_TUPLE_OF_REF_BROKEN 1 
+
+// The implicit upcasting of the tuple of a reference of a derived class to a base class fails on icc 13.X if the system's gcc environment is 4.8
+// Also in gcc 4.4 standard library the implementation of the tuple<&> conversion (tuple<A&> a = tuple<B&>, B is inherited from A) is broken.
+#if __GXX_EXPERIMENTAL_CXX0X__ && ((__INTEL_COMPILER >=1300 && __INTEL_COMPILER <=1310 && __TBB_GLIBCXX_VERSION>=40700) || (__TBB_GLIBCXX_VERSION < 40500))
+#define __TBB_UPCAST_OF_TUPLE_OF_REF_BROKEN 1
 #endif
 
 /** End of __TBB_XXX_BROKEN macro section **/
@@ -663,11 +753,27 @@
 
 #define __TBB_ATOMIC_CTORS     (__TBB_CONSTEXPR_PRESENT && __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT && (!__TBB_ZERO_INIT_WITH_DEFAULTED_CTOR_BROKEN))
 
+// Many OS versions (Android 4.0.[0-3] for example) need workaround for dlopen to avoid non-recursive loader lock hang
+// Setting the workaround for all compile targets ($APP_PLATFORM) below Android 4.4 (android-19)
+#if __ANDROID__
+#include <android/api-level.h>
+#define __TBB_USE_DLOPEN_REENTRANCY_WORKAROUND  (__ANDROID_API__ < 19)
+#endif
+
 #define __TBB_ALLOCATOR_CONSTRUCT_VARIADIC      (__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT)
 
 #define __TBB_VARIADIC_PARALLEL_INVOKE          (TBB_PREVIEW_VARIADIC_PARALLEL_INVOKE && __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT)
-#define __TBB_PREVIEW_COMPOSITE_NODE            (TBB_PREVIEW_FLOW_GRAPH_NODES && __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT \
-                                                 && __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_AUTO_PRESENT) \
-                                                 && __TBB_CPP11_VARIADIC_TUPLE_PRESENT && !__TBB_UPCAST_OF_TUPLE_OF_REF_BROKEN
-#define __TBB_PREVIEW_ASYNC_NODE TBB_PREVIEW_FLOW_GRAPH_NODES
+#define __TBB_FLOW_GRAPH_CPP11_FEATURES         (__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT \
+                                                && __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_AUTO_PRESENT) \
+                                                && __TBB_CPP11_VARIADIC_TUPLE_PRESENT && __TBB_CPP11_DEFAULT_FUNC_TEMPLATE_ARGS_PRESENT \
+                                                && !__TBB_UPCAST_OF_TUPLE_OF_REF_BROKEN
+#define __TBB_PREVIEW_STREAMING_NODE            (__TBB_CPP11_VARIADIC_FIXED_LENGTH_EXP_PRESENT && __TBB_FLOW_GRAPH_CPP11_FEATURES \
+                                                && TBB_PREVIEW_FLOW_GRAPH_NODES && !TBB_IMPLEMENT_CPP0X && !__TBB_UPCAST_OF_TUPLE_OF_REF_BROKEN)
+#define __TBB_PREVIEW_OPENCL_NODE               (__TBB_PREVIEW_STREAMING_NODE && __TBB_CPP11_TEMPLATE_ALIASES_PRESENT)
+#define __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING (TBB_PREVIEW_FLOW_GRAPH_FEATURES || __TBB_PREVIEW_OPENCL_NODE)
+#define __TBB_PREVIEW_ASYNC_MSG                 (TBB_PREVIEW_FLOW_GRAPH_FEATURES && __TBB_FLOW_GRAPH_CPP11_FEATURES)
+
+#define __TBB_PREVIEW_GFX_FACTORY               (__TBB_GFX_PRESENT && TBB_PREVIEW_FLOW_GRAPH_FEATURES && !__TBB_MIC_OFFLOAD \
+                                                && __TBB_FLOW_GRAPH_CPP11_FEATURES && __TBB_CPP11_TEMPLATE_ALIASES_PRESENT \
+                                                && __TBB_CPP11_FUTURE_PRESENT)
 #endif /* __TBB_tbb_config_H */
diff --git a/include/tbb/tbb_exception.h b/include/tbb/tbb_exception.h
index 75423d0..1c84330 100644
--- a/include/tbb/tbb_exception.h
+++ b/include/tbb/tbb_exception.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_exception_H
@@ -42,34 +42,34 @@ namespace tbb {
 //! Exception for concurrent containers
 class bad_last_alloc : public std::bad_alloc {
 public:
-    /*override*/ const char* what() const throw();
+    const char* what() const throw() __TBB_override;
 #if __TBB_DEFAULT_DTOR_THROW_SPEC_BROKEN
-    /*override*/ ~bad_last_alloc() throw() {}
+    ~bad_last_alloc() throw() __TBB_override {}
 #endif
 };
 
 //! Exception for PPL locks
 class improper_lock : public std::exception {
 public:
-    /*override*/ const char* what() const throw();
+    const char* what() const throw() __TBB_override;
 };
 
 //! Exception for user-initiated abort
 class user_abort : public std::exception {
 public:
-    /*override*/ const char* what() const throw();
+    const char* what() const throw() __TBB_override;
 };
 
 //! Exception for missing wait on structured_task_group
 class missing_wait : public std::exception {
 public:
-    /*override*/ const char* what() const throw();
+    const char* what() const throw() __TBB_override;
 };
 
 //! Exception for repeated scheduling of the same task_handle
 class invalid_multiple_scheduling : public std::exception {
 public:
-    /*override*/ const char* what() const throw();
+    const char* what() const throw() __TBB_override;
 };
 
 namespace internal {
@@ -97,9 +97,9 @@ enum exception_id {
     eid_user_abort,
     eid_reserved1,
 #if __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE
-    // This id is used only inside library and only for support of CPF functionality.
+    // This id is used only from inside the library and only for support of CPF functionality.
     // So, if we drop the functionality, eid_reserved1 can be safely renamed and reused.
-    eid_blocking_sch_init = eid_reserved1,
+    eid_blocking_thread_join_impossible = eid_reserved1,
 #endif
     eid_bad_tagged_msg_cast,
     //! The last enumerator tracks the number of defined IDs. It must remain the last one.
@@ -182,7 +182,7 @@ public:
     virtual const char* name() const throw() = 0;
 
     //! Returns the result of originally intercepted exception's what() method.
-    virtual const char* what() const throw() = 0;
+    virtual const char* what() const throw() __TBB_override = 0;
 
     /** Operator delete is provided only to allow using existing smart pointers
         with TBB exception objects obtained as the result of applying move()
@@ -225,20 +225,15 @@ public:
         return *this;
     }
 
-    /*override*/
-    captured_exception* __TBB_EXPORTED_METHOD move () throw();
+    captured_exception* __TBB_EXPORTED_METHOD move () throw() __TBB_override;
 
-    /*override*/
-    void __TBB_EXPORTED_METHOD destroy () throw();
+    void __TBB_EXPORTED_METHOD destroy () throw() __TBB_override;
 
-    /*override*/
-    void throw_self () { __TBB_THROW(*this); }
+    void throw_self () __TBB_override { __TBB_THROW(*this); }
 
-    /*override*/
-    const char* __TBB_EXPORTED_METHOD name() const throw();
+    const char* __TBB_EXPORTED_METHOD name() const throw() __TBB_override;
 
-    /*override*/
-    const char* __TBB_EXPORTED_METHOD what() const throw();
+    const char* __TBB_EXPORTED_METHOD what() const throw() __TBB_override;
 
     void __TBB_EXPORTED_METHOD set ( const char* name, const char* info ) throw();
     void __TBB_EXPORTED_METHOD clear () throw();
@@ -299,12 +294,11 @@ public:
 
     const ExceptionData& data () const throw() { return my_exception_data; }
 
-    /*override*/ const char* name () const throw() { return my_exception_name; }
+    const char* name () const throw() __TBB_override { return my_exception_name; }
 
-    /*override*/ const char* what () const throw() { return "tbb::movable_exception"; }
+    const char* what () const throw() __TBB_override { return "tbb::movable_exception"; }
 
-    /*override*/
-    movable_exception* move () throw() {
+    movable_exception* move () throw() __TBB_override {
         void* e = internal::allocate_via_handler_v3(sizeof(movable_exception));
         if ( e ) {
             ::new (e) movable_exception(*this);
@@ -312,16 +306,14 @@ public:
         }
         return (movable_exception*)e;
     }
-    /*override*/
-    void destroy () throw() {
+    void destroy () throw() __TBB_override {
         __TBB_ASSERT ( my_dynamic, "Method destroy can be called only on dynamically allocated movable_exceptions" );
         if ( my_dynamic ) {
             this->~movable_exception();
             internal::deallocate_via_handler_v3(this);
         }
     }
-    /*override*/
-    void throw_self () { __TBB_THROW( *this ); }
+    void throw_self () __TBB_override { __TBB_THROW( *this ); }
 
 protected:
     //! User data
diff --git a/include/tbb/tbb_machine.h b/include/tbb/tbb_machine.h
index fb8a80a..68d1d5d 100644
--- a/include/tbb/tbb_machine.h
+++ b/include/tbb/tbb_machine.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_machine_H
@@ -34,11 +34,11 @@
     __TBB_USE_GENERIC_DWORD_FETCH_ADD
     __TBB_USE_GENERIC_DWORD_FETCH_STORE
     __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE
-    __TBB_USE_GENERIC_FULL_FENCED_LOAD_STORE
+    __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE
     __TBB_USE_GENERIC_RELAXED_LOAD_STORE
     __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE
 
-    In this case tbb_machine.h will add missing functionality based on a minimal set 
+    In this case tbb_machine.h will add missing functionality based on a minimal set
     of APIs that are required to be implemented by all plug-n headers as described
     further.
     Note that these generic implementations may be sub-optimal for a particular
@@ -102,7 +102,7 @@
         data-dependent, and will then make subsequent code behave as if the
         original data dependency were acquired.
         It needs only a compiler fence where implied by the architecture
-        either specifically (like IA-64 architecture) or because generally stronger 
+        either specifically (like IA-64 architecture) or because generally stronger
         "acquire" semantics are enforced (like x86).
         It is always valid, though potentially suboptimal, to replace
         control with acquire on the load and then remove the helper.
@@ -208,10 +208,8 @@ template<> struct atomic_selector<8> {
         #include "machine/icc_generic.h"
     #elif defined(_M_IX86) && !defined(__TBB_WIN32_USE_CL_BUILTINS)
         #include "machine/windows_ia32.h"
-    #elif defined(_M_X64) 
+    #elif defined(_M_X64)
         #include "machine/windows_intel64.h"
-    #elif defined(_XBOX)
-        #include "machine/xbox360_ppc.h"
     #elif defined(_M_ARM) || defined(__TBB_WIN32_USE_CL_BUILTINS)
         #include "machine/msvc_armv7.h"
     #endif
@@ -243,7 +241,7 @@ template<> struct atomic_selector<8> {
         #include "machine/linux_ia64.h"
     #elif __powerpc__
         #include "machine/mac_ppc.h"
-    #elif __arm__
+    #elif __ARM_ARCH_7A__
         #include "machine/gcc_armv7.h"
     #elif __TBB_GCC_BUILTIN_ATOMICS_PRESENT
         #include "machine/gcc_generic.h"
@@ -254,9 +252,9 @@ template<> struct atomic_selector<8> {
     //TODO:  TBB_USE_GCC_BUILTINS is not used for Mac, Sun, Aix
     #if (TBB_USE_ICC_BUILTINS && __TBB_ICC_BUILTIN_ATOMICS_PRESENT)
         #include "machine/icc_generic.h"
-    #elif __i386__
+    #elif __TBB_x86_32
         #include "machine/linux_ia32.h"
-    #elif __x86_64__
+    #elif __TBB_x86_64
         #include "machine/linux_intel64.h"
     #elif __POWERPC__
         #include "machine/mac_ppc.h"
@@ -351,7 +349,7 @@ namespace internal { //< @cond INTERNAL
 class atomic_backoff : no_copy {
     //! Time delay, in units of "pause" instructions.
     /** Should be equal to approximately the number of "pause" instructions
-        that take the same time as an context switch. */
+        that take the same time as an context switch. Must be a power of two.*/
     static const int32_t LOOPS_BEFORE_YIELD = 16;
     int32_t count;
 public:
@@ -374,10 +372,10 @@ public:
         }
     }
 
-    // pause for a few times and then return false immediately.
+    //! Pause for a few times and return false if saturated.
     bool bounded_pause() {
-        if( count<=LOOPS_BEFORE_YIELD ) {
-            __TBB_Pause(count);
+        __TBB_Pause(count);
+        if( count<LOOPS_BEFORE_YIELD ) {
             // Pause twice as long the next time.
             count*=2;
             return true;
@@ -751,7 +749,16 @@ inline void __TBB_store_relaxed ( volatile size_t& location, size_t value ) {
 // strictest alignment is 64.
 #ifndef __TBB_TypeWithAlignmentAtLeastAsStrict
 
-#if __TBB_ATTRIBUTE_ALIGNED_PRESENT
+#if __TBB_ALIGNAS_PRESENT
+
+// Use C++11 keywords alignas and alignof
+#define __TBB_DefineTypeWithAlignment(PowerOf2)       \
+struct alignas(PowerOf2) __TBB_machine_type_with_alignment_##PowerOf2 { \
+    uint32_t member[PowerOf2/sizeof(uint32_t)];       \
+};
+#define __TBB_alignof(T) alignof(T)
+
+#elif __TBB_ATTRIBUTE_ALIGNED_PRESENT
 
 #define __TBB_DefineTypeWithAlignment(PowerOf2)       \
 struct __TBB_machine_type_with_alignment_##PowerOf2 { \
@@ -850,9 +857,9 @@ inline intptr_t __TBB_Log2( uintptr_t x ) {
     if( x==0 ) return -1;
     intptr_t result = 0;
 
-#if !defined(_M_ARM) 
-    uintptr_t tmp;
-    if( sizeof(x)>4 && (tmp = ((uint64_t)x)>>32) ) { x=tmp; result += 32; }
+#if !defined(_M_ARM)
+    uintptr_t tmp_;
+    if( sizeof(x)>4 && (tmp_ = ((uint64_t)x)>>32) ) { x=tmp_; result += 32; }
 #endif
     if( uintptr_t tmp = x>>16 ) { x=tmp; result += 16; }
     if( uintptr_t tmp = x>>8 )  { x=tmp; result += 8; }
@@ -916,7 +923,7 @@ inline __TBB_Flag __TBB_LockByte( __TBB_atomic_flag& flag ) {
 #define __TBB_UnlockByte(addr) __TBB_store_with_release((addr),0)
 #endif
 
-// lock primitives with TSX
+// lock primitives with Intel(R) Transactional Synchronization Extensions (Intel(R) TSX)
 #if ( __TBB_x86_32 || __TBB_x86_64 )  /* only on ia32/intel64 */
 inline void __TBB_TryLockByteElidedCancel() { __TBB_machine_try_lock_elided_cancel(); }
 
diff --git a/include/tbb/tbb_profiling.h b/include/tbb/tbb_profiling.h
index 63355ec..ffaf98b 100644
--- a/include/tbb/tbb_profiling.h
+++ b/include/tbb/tbb_profiling.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_profiling_H
@@ -25,9 +25,9 @@ namespace tbb {
     namespace internal {
 
         //
-        // This is not under __TBB_ITT_STRUCTURE_API because these values are used directly in flow_graph.h.  
+        // This is not under __TBB_ITT_STRUCTURE_API because these values are used directly in flow_graph.h.
         //
-       
+
         // include list of index names
         #define TBB_STRING_RESOURCE(index_name,str) index_name,
         enum string_index {
@@ -47,7 +47,7 @@ namespace tbb {
         __itt_relation_is_continued_by,         /**< "A is continued by B" means that B assumes the dependencies of A (inverse of is_continuation_of) */
         __itt_relation_is_predecessor_to        /**< "A is predecessor to B" means that B cannot start until A completes (inverse of is_dependent_on) */
         };
-    
+
     }
 }
 
@@ -141,15 +141,19 @@ namespace tbb {
 #if __TBB_ITT_STRUCTURE_API
         enum itt_domain_enum { ITT_DOMAIN_FLOW=0 };
 
-        void __TBB_EXPORTED_FUNC itt_make_task_group_v7( itt_domain_enum domain, void *group, unsigned long long group_extra, 
-                                                         void *parent, unsigned long long parent_extra, string_index name_index ); 
-        void __TBB_EXPORTED_FUNC itt_metadata_str_add_v7( itt_domain_enum domain, void *addr, unsigned long long addr_extra, 
-                                                          string_index key, const char *value ); 
-        void __TBB_EXPORTED_FUNC itt_relation_add_v7( itt_domain_enum domain, void *addr0, unsigned long long addr0_extra, 
+        void __TBB_EXPORTED_FUNC itt_make_task_group_v7( itt_domain_enum domain, void *group, unsigned long long group_extra,
+                                                         void *parent, unsigned long long parent_extra, string_index name_index );
+        void __TBB_EXPORTED_FUNC itt_metadata_str_add_v7( itt_domain_enum domain, void *addr, unsigned long long addr_extra,
+                                                          string_index key, const char *value );
+        void __TBB_EXPORTED_FUNC itt_relation_add_v7( itt_domain_enum domain, void *addr0, unsigned long long addr0_extra,
                                                       itt_relation relation, void *addr1, unsigned long long addr1_extra );
-        void __TBB_EXPORTED_FUNC itt_task_begin_v7( itt_domain_enum domain, void *task, unsigned long long task_extra, 
+        void __TBB_EXPORTED_FUNC itt_task_begin_v7( itt_domain_enum domain, void *task, unsigned long long task_extra,
                                                     void *parent, unsigned long long parent_extra, string_index name_index );
         void __TBB_EXPORTED_FUNC itt_task_end_v7( itt_domain_enum domain );
+
+        void __TBB_EXPORTED_FUNC itt_region_begin_v9( itt_domain_enum domain, void *region, unsigned long long region_extra,
+                                                      void *parent, unsigned long long parent_extra, string_index name_index );
+        void __TBB_EXPORTED_FUNC itt_region_end_v9( itt_domain_enum domain, void *region, unsigned long long region_extra );
 #endif // __TBB_ITT_STRUCTURE_API
 
         // two template arguments are to workaround /Wp64 warning with tbb::atomic specialized for unsigned type
@@ -191,7 +195,7 @@ namespace tbb {
             __TBB_ASSERT(sizeof(T) == sizeof(void *), "Type must be word-sized.");
             itt_store_pointer_with_release_v3(&dst, (void *)src);
 #else
-            __TBB_store_with_release(dst, src); 
+            __TBB_store_with_release(dst, src);
 #endif // TBB_USE_THREADING_TOOLS
         }
 
@@ -240,22 +244,22 @@ namespace tbb {
 #endif // TBB_USE_THREADING_TOOLS
 
 #if __TBB_ITT_STRUCTURE_API
-        inline void itt_make_task_group( itt_domain_enum domain, void *group, unsigned long long group_extra, 
+        inline void itt_make_task_group( itt_domain_enum domain, void *group, unsigned long long group_extra,
                                          void *parent, unsigned long long parent_extra, string_index name_index ) {
-            itt_make_task_group_v7( domain, group, group_extra, parent, parent_extra, name_index ); 
+            itt_make_task_group_v7( domain, group, group_extra, parent, parent_extra, name_index );
         }
 
-        inline void itt_metadata_str_add( itt_domain_enum domain, void *addr, unsigned long long addr_extra, 
+        inline void itt_metadata_str_add( itt_domain_enum domain, void *addr, unsigned long long addr_extra,
                                           string_index key, const char *value ) {
-            itt_metadata_str_add_v7( domain, addr, addr_extra, key, value ); 
+            itt_metadata_str_add_v7( domain, addr, addr_extra, key, value );
         }
 
-        inline void itt_relation_add( itt_domain_enum domain, void *addr0, unsigned long long addr0_extra, 
+        inline void itt_relation_add( itt_domain_enum domain, void *addr0, unsigned long long addr0_extra,
                                       itt_relation relation, void *addr1, unsigned long long addr1_extra ) {
             itt_relation_add_v7( domain, addr0, addr0_extra, relation, addr1, addr1_extra );
         }
 
-        inline void itt_task_begin( itt_domain_enum domain, void *task, unsigned long long task_extra, 
+        inline void itt_task_begin( itt_domain_enum domain, void *task, unsigned long long task_extra,
                                                         void *parent, unsigned long long parent_extra, string_index name_index ) {
             itt_task_begin_v7( domain, task, task_extra, parent, parent_extra, name_index );
         }
@@ -263,6 +267,15 @@ namespace tbb {
         inline void itt_task_end( itt_domain_enum domain ) {
             itt_task_end_v7( domain );
         }
+
+        inline void itt_region_begin( itt_domain_enum domain, void *region, unsigned long long region_extra,
+                                      void *parent, unsigned long long parent_extra, string_index name_index ) {
+            itt_region_begin_v9( domain, region, region_extra, parent, parent_extra, name_index );
+        }
+
+        inline void itt_region_end( itt_domain_enum domain, void *region, unsigned long long region_extra  ) {
+            itt_region_end_v9( domain, region, region_extra );
+        }
 #endif // __TBB_ITT_STRUCTURE_API
 
     } // namespace internal
diff --git a/include/tbb/tbb_stddef.h b/include/tbb/tbb_stddef.h
index 379f6c9..236f3d8 100644
--- a/include/tbb/tbb_stddef.h
+++ b/include/tbb/tbb_stddef.h
@@ -1,32 +1,32 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_tbb_stddef_H
 #define __TBB_tbb_stddef_H
 
 // Marketing-driven product version
-#define TBB_VERSION_MAJOR 4
-#define TBB_VERSION_MINOR 3
+#define TBB_VERSION_MAJOR 2017
+#define TBB_VERSION_MINOR 0
 
 // Engineering-focused interface version
-#define TBB_INTERFACE_VERSION 8006
+#define TBB_INTERFACE_VERSION 9107
 #define TBB_INTERFACE_VERSION_MAJOR TBB_INTERFACE_VERSION/1000
 
 // The oldest major interface version still supported
@@ -175,8 +175,8 @@ namespace tbb {
 //! The namespace tbb contains all components of the library.
 namespace tbb {
 
-#if _MSC_VER && _MSC_VER<1600
     namespace internal {
+#if _MSC_VER && _MSC_VER<1600
         typedef __int8 int8_t;
         typedef __int16 int16_t;
         typedef __int32 int32_t;
@@ -185,9 +185,7 @@ namespace tbb {
         typedef unsigned __int16 uint16_t;
         typedef unsigned __int32 uint32_t;
         typedef unsigned __int64 uint64_t;
-    } // namespace internal
 #else /* Posix */
-    namespace internal {
         using ::int8_t;
         using ::int16_t;
         using ::int32_t;
@@ -196,8 +194,8 @@ namespace tbb {
         using ::uint16_t;
         using ::uint32_t;
         using ::uint64_t;
-    } // namespace internal
 #endif /* Posix */
+    } // namespace internal
 
     using std::size_t;
     using std::ptrdiff_t;
@@ -242,6 +240,12 @@ const size_t NFS_MaxLineSize = 128;
     TODO: apply wherever relevant **/
 #define __TBB_atomic // intentionally empty, see above
 
+#if __TBB_OVERRIDE_PRESENT
+#define __TBB_override override
+#else
+#define __TBB_override // formal comment only
+#endif
+
 template<class T, size_t S, size_t R>
 struct padded_base : T {
     char pad[S - R];
@@ -351,20 +355,18 @@ inline bool is_power_of_two(integer_type arg) {
 //! A function to compute arg modulo divisor where divisor is a power of 2.
 template<typename argument_integer_type, typename divisor_integer_type>
 inline argument_integer_type modulo_power_of_two(argument_integer_type arg, divisor_integer_type divisor) {
-    // Divisor is assumed to be a power of two (which is valid for current uses).
     __TBB_ASSERT( is_power_of_two(divisor), "Divisor should be a power of two" );
     return (arg & (divisor - 1));
 }
 
 
-//! A function to determine if "arg is a multiplication of a number and a power of 2".
-// i.e. for strictly positive i and j, with j a power of 2,
+//! A function to determine if arg is a power of 2 at least as big as another power of 2.
+// i.e. for strictly positive i and j, with j being a power of 2,
 // determines whether i==j<<k for some nonnegative k (so i==j yields true).
-template<typename argument_integer_type, typename divisor_integer_type>
-inline bool is_power_of_two_factor(argument_integer_type arg, divisor_integer_type divisor) {
-    // Divisor is assumed to be a power of two (which is valid for current uses).
-    __TBB_ASSERT( is_power_of_two(divisor), "Divisor should be a power of two" );
-    return 0 == (arg & (arg - divisor));
+template<typename argument_integer_type, typename power2_integer_type>
+inline bool is_power_of_two_at_least(argument_integer_type arg, power2_integer_type power2) {
+    __TBB_ASSERT( is_power_of_two(power2), "Divisor should be a power of two" );
+    return 0 == (arg & (arg - power2));
 }
 
 //! Utility template function to prevent "unused" warnings by various compilers.
@@ -499,7 +501,7 @@ T& forward( T& x ) { return x; }
 #define __TBB_PARAMETER_PACK ...
 #define __TBB_PACK_EXPANSION(A) A...
 #else
-#define __TBB_PARAMETER_PACK 
+#define __TBB_PARAMETER_PACK
 #define __TBB_PACK_EXPANSION(A) A
 #endif /* __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT */
 
@@ -532,7 +534,7 @@ struct STATIC_ASSERTION_FAILED<true>; //intentionally left undefined to cause co
     enum {static_assert_on_line_##line = tbb::internal::STATIC_ASSERTION_FAILED<!(condition)>::value}
 
 #define __TBB_STATIC_ASSERT_IMPL(condition,msg,line) __TBB_STATIC_ASSERT_IMPL1(condition,msg,line)
-//! Verify at compile time that passed in condition is hold
+//! Verify condition, at compile time
 #define __TBB_STATIC_ASSERT(condition,msg) __TBB_STATIC_ASSERT_IMPL(condition,msg,__LINE__)
 #endif
 
diff --git a/include/tbb/tbb_thread.h b/include/tbb/tbb_thread.h
index 10562b3..d1cafd6 100644
--- a/include/tbb/tbb_thread.h
+++ b/include/tbb/tbb_thread.h
@@ -1,42 +1,50 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_tbb_thread_H
 #define __TBB_tbb_thread_H
 
 #include "tbb_stddef.h"
+
 #if _WIN32||_WIN64
 #include "machine/windows_api.h"
 #define __TBB_NATIVE_THREAD_ROUTINE unsigned WINAPI
 #define __TBB_NATIVE_THREAD_ROUTINE_PTR(r) unsigned (WINAPI* r)( void* )
+namespace tbb { namespace internal {
 #if __TBB_WIN8UI_SUPPORT
-typedef size_t thread_id_type;
+    typedef size_t thread_id_type;
 #else  // __TBB_WIN8UI_SUPPORT
-typedef DWORD thread_id_type;
+    typedef DWORD thread_id_type;
 #endif // __TBB_WIN8UI_SUPPORT
+}} //namespace tbb::internal
 #else
 #define __TBB_NATIVE_THREAD_ROUTINE void*
 #define __TBB_NATIVE_THREAD_ROUTINE_PTR(r) void* (*r)( void* )
 #include <pthread.h>
+namespace tbb { namespace internal {
+    typedef pthread_t thread_id_type;
+}} //namespace tbb::internal
 #endif // _WIN32||_WIN64
 
+#include "atomic.h"
+#include "internal/_tbb_hash_compare_impl.h"
 #include "tick_count.h"
 
 #if !TBB_USE_EXCEPTIONS && _MSC_VER
@@ -45,6 +53,7 @@ typedef DWORD thread_id_type;
     #pragma warning (disable: 4530)
 #endif
 
+#include __TBB_STD_SWAP_HEADER
 #include <iosfwd>
 
 #if !TBB_USE_EXCEPTIONS && _MSC_VER
@@ -65,7 +74,7 @@ namespace internal {
     void* __TBB_EXPORTED_FUNC allocate_closure_v3( size_t size );
     //! Free a closure allocated by allocate_closure_v3
     void __TBB_EXPORTED_FUNC free_closure_v3( void* );
-   
+
     struct thread_closure_base {
         void* operator new( size_t size ) {return allocate_closure_v3(size);}
         void operator delete( void* ptr ) {free_closure_v3(ptr);}
@@ -82,7 +91,7 @@ namespace internal {
         }
         thread_closure_0( const F& f ) : function(f) {}
     };
-    //! Structure used to pass user function with 1 argument to thread.  
+    //! Structure used to pass user function with 1 argument to thread.
     template<class F, class X> struct thread_closure_1: thread_closure_base {
         F function;
         X arg1;
@@ -120,19 +129,19 @@ namespace internal {
         tbb_thread_v3(const tbb_thread_v3&); // = delete;   // Deny access
     public:
 #if _WIN32||_WIN64
-        typedef HANDLE native_handle_type; 
+        typedef HANDLE native_handle_type;
 #else
-        typedef pthread_t native_handle_type; 
+        typedef pthread_t native_handle_type;
 #endif // _WIN32||_WIN64
 
         class id;
-        //! Constructs a thread object that does not represent a thread of execution. 
+        //! Constructs a thread object that does not represent a thread of execution.
         tbb_thread_v3() __TBB_NOEXCEPT(true) : my_handle(0)
 #if _WIN32||_WIN64
             , my_thread_id(0)
 #endif // _WIN32||_WIN64
         {}
-        
+
         //! Constructs an object and executes f() in a new thread
         template <class F> explicit tbb_thread_v3(F f) {
             typedef internal::thread_closure_0<F> closure_type;
@@ -181,20 +190,20 @@ namespace internal {
         ~tbb_thread_v3() {if( joinable() ) detach();}
         inline id get_id() const __TBB_NOEXCEPT(true);
         native_handle_type native_handle() { return my_handle; }
-    
+
         //! The number of hardware thread contexts.
         /** Before TBB 3.0 U4 this methods returned the number of logical CPU in
             the system. Currently on Windows, Linux and FreeBSD it returns the
             number of logical CPUs available to the current process in accordance
             with its affinity mask.
-            
+
             NOTE: The return value of this method never changes after its first
             invocation. This means that changes in the process affinity mask that
             took place after this method was first invoked will not affect the
             number of worker threads in the TBB worker threads pool. **/
         static unsigned __TBB_EXPORTED_FUNC hardware_concurrency() __TBB_NOEXCEPT(true);
     private:
-        native_handle_type my_handle; 
+        native_handle_type my_handle;
 #if _WIN32||_WIN64
         thread_id_type my_thread_id;
 #endif // _WIN32||_WIN64
@@ -215,20 +224,16 @@ namespace internal {
         }
 
         /** Runs start_routine(closure) on another thread and sets my_handle to the handle of the created thread. */
-        void __TBB_EXPORTED_METHOD internal_start( __TBB_NATIVE_THREAD_ROUTINE_PTR(start_routine), 
+        void __TBB_EXPORTED_METHOD internal_start( __TBB_NATIVE_THREAD_ROUTINE_PTR(start_routine),
                              void* closure );
         friend void __TBB_EXPORTED_FUNC move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );
         friend void tbb::swap( tbb_thread_v3& t1, tbb_thread_v3& t2 ) __TBB_NOEXCEPT(true);
     };
-        
-    class tbb_thread_v3::id { 
-#if _WIN32||_WIN64
+
+    class tbb_thread_v3::id {
         thread_id_type my_id;
         id( thread_id_type id_ ) : my_id(id_) {}
-#else
-        pthread_t my_id;
-        id( pthread_t id_ ) : my_id(id_) {}
-#endif // _WIN32||_WIN64
+
         friend class tbb_thread_v3;
     public:
         id() __TBB_NOEXCEPT(true) : my_id(0) {}
@@ -239,16 +244,26 @@ namespace internal {
         friend bool operator<=( tbb_thread_v3::id x, tbb_thread_v3::id y ) __TBB_NOEXCEPT(true);
         friend bool operator>( tbb_thread_v3::id x, tbb_thread_v3::id y ) __TBB_NOEXCEPT(true);
         friend bool operator>=( tbb_thread_v3::id x, tbb_thread_v3::id y ) __TBB_NOEXCEPT(true);
-        
+
         template<class charT, class traits>
         friend std::basic_ostream<charT, traits>&
-        operator<< (std::basic_ostream<charT, traits> &out, 
+        operator<< (std::basic_ostream<charT, traits> &out,
                     tbb_thread_v3::id id)
         {
             out << id.my_id;
             return out;
         }
         friend tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();
+
+        friend inline size_t tbb_hasher( const tbb_thread_v3::id& id ) {
+            __TBB_STATIC_ASSERT(sizeof(id.my_id) <= sizeof(size_t), "Implementaion assumes that thread_id_type fits into machine word");
+            return tbb::tbb_hasher(id.my_id);
+        }
+
+        // A workaround for lack of tbb::atomic<id> (which would require id to be POD in C++03).
+        friend id atomic_compare_and_swap(id& location, const id& value, const id& comparand){
+            return as_atomic(location.my_id).compare_and_swap(value.my_id, comparand.my_id);
+        }
     }; // tbb_thread_v3::id
 
     tbb_thread_v3::id tbb_thread_v3::get_id() const __TBB_NOEXCEPT(true) {
@@ -258,6 +273,7 @@ namespace internal {
         return id(my_handle);
 #endif // _WIN32||_WIN64
     }
+
     void __TBB_EXPORTED_FUNC move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );
     tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();
     void __TBB_EXPORTED_FUNC thread_yield_v3();
@@ -305,13 +321,9 @@ inline void move( tbb_thread& t1, tbb_thread& t2 ) {
 }
 
 inline void swap( internal::tbb_thread_v3& t1, internal::tbb_thread_v3& t2 )  __TBB_NOEXCEPT(true) {
-    tbb::tbb_thread::native_handle_type h = t1.my_handle;
-    t1.my_handle = t2.my_handle;
-    t2.my_handle = h;
+    std::swap(t1.my_handle, t2.my_handle);
 #if _WIN32||_WIN64
-    thread_id_type i = t1.my_thread_id;
-    t1.my_thread_id  = t2.my_thread_id;
-    t2.my_thread_id  = i;
+    std::swap(t1.my_thread_id, t2.my_thread_id);
 #endif /* _WIN32||_WIN64 */
 }
 
@@ -320,8 +332,8 @@ namespace this_tbb_thread {
     //! Offers the operating system the opportunity to schedule another thread.
     inline void yield() { internal::thread_yield_v3(); }
     //! The current thread blocks at least until the time specified.
-    inline void sleep(const tick_count::interval_t &i) { 
-        internal::thread_sleep_v3(i);  
+    inline void sleep(const tick_count::interval_t &i) {
+        internal::thread_sleep_v3(i);
     }
 }  // namespace this_tbb_thread
 
diff --git a/include/tbb/tbbmalloc_proxy.h b/include/tbb/tbbmalloc_proxy.h
index 81d7a2b..76cbd6d 100644
--- a/include/tbb/tbbmalloc_proxy.h
+++ b/include/tbb/tbbmalloc_proxy.h
@@ -1,33 +1,33 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*
-Replacing the standard memory allocation routines in Microsoft* C/C++ RTL 
-(malloc/free, global new/delete, etc.) with the TBB memory allocator. 
+Replacing the standard memory allocation routines in Microsoft* C/C++ RTL
+(malloc/free, global new/delete, etc.) with the TBB memory allocator.
 
-Include the following header to a source of any binary which is loaded during 
+Include the following header to a source of any binary which is loaded during
 application startup
 
 #include "tbb/tbbmalloc_proxy.h"
 
-or add following parameters to the linker options for the binary which is 
+or add following parameters to the linker options for the binary which is
 loaded during application startup. It can be either exe-file or dll.
 
 For win32
diff --git a/include/tbb/tick_count.h b/include/tbb/tick_count.h
index 10f5390..a7f4e0f 100644
--- a/include/tbb/tick_count.h
+++ b/include/tbb/tick_count.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_tick_count_H
@@ -85,13 +85,13 @@ public:
 #endif /* (choice of OS) */
         }
     };
-    
+
     //! Construct an absolute timestamp initialized to zero.
     tick_count() : my_count(0) {};
 
     //! Return current time.
     static tick_count now();
-    
+
     //! Subtract two timestamps to get the time interval between
     friend interval_t operator-( const tick_count& t1, const tick_count& t0 );
 
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..e04ce65
--- /dev/null
+++ b/index.html
@@ -0,0 +1,46 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+Top level directory for Intel® Threading Building Blocks (Intel® TBB).
+<P>
+To build Intel TBB, use the <A HREF=Makefile>top-level Makefile</A>; see also the <A HREF=build/index.html#build>build directions</A>.
+To port Intel TBB to a new platform, operating system or architecture, see the <A HREF=build/index.html#port>porting directions</A>.
+</P>
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Top-level Makefile for Intel TBB.  See also the <A HREF=build/index.html#build>build directions</A>.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="bin">bin</A>
+<DD>Start-up scripts for sourcing library.
+<DT><A HREF="include/index.html">include</A>
+<DD>Include files required for compiling code that uses the library.
+<DT><A HREF="examples/index.html">examples</A>
+<DD>Examples of how to use the library. Available in the open-source version only.
+For the commercial version, you can download Intel TBB Samples at the <a href="https://software.intel.com/en-us/product-code-samples?topic=20828">Intel® Software Product Samples and Tutorials</a> website.
+<DT><A HREF="lib">lib</A>
+<DD>Platform-specific binary files for the library.
+<DT><A HREF="src/index.html">src</A>
+<DD>Source code for the library.
+<DT><A HREF="build/index.html">build</A>, <A HREF="jni/">jni</A>
+<DD>Internal Makefile infrastructure for Intel TBB. Do not use directly; see the <A HREF=build/index.html#build>build directions</A>.
+<DT><A HREF="python/index.html">python</A>
+<DD>Python* API for Intel TBB.
+</DL>
+
+<HR>
+<p></p>
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
+<P></P>
+Intel is a registered trademark or trademark of Intel Corporation
+or its subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/index.src.html b/index.src.html
deleted file mode 100644
index 1f815e5..0000000
--- a/index.src.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<HTML>
-<BODY>
-
-<H2>Overview</H2>
-Top level directory for Intel® Threading Building Blocks.
-<P>
-To build Intel TBB, use the <A HREF=Makefile>top-level Makefile</A>; see also the <A HREF=build/index.html#build>build directions</A>.
-To port Intel TBB to a new platform, operating system or architecture, see the <A HREF=build/index.html#port>porting directions</A>.
-</P>
-
-<H2>Files</H2>
-<DL>
-<DT><A HREF="Makefile">Makefile</A>
-<DD>Top-level Makefile for Intel TBB.  See also the <A HREF=build/index.html#build>build directions</A>.
-</DL>
-
-<H2>Directories</H2>
-<DL>
-<DT><A HREF="doc/html/index.html">doc</A>
-<DD>Documentation for the library.
-<DT><A HREF="include/index.html">include</A>
-<DD>Include files required for compiling code that uses the library.
-<DT><A HREF="examples/index.html">examples</A>
-<DD>Examples of how to use the library.
-<DT><A HREF="src/index.html">src</A>
-<DD>Source code for the library.
-<DT><A HREF="build/index.html">build</A>
-<DD>Internal Makefile infrastructure for Intel TBB.  Do not use directly; see the <A HREF=build/index.html#build>build directions</A>.
-</DL>
-
-<HR>
-<p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
-<P></P>
-Intel is a registered trademark or trademark of Intel Corporation
-or its subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
-</BODY>
-</HTML>
-
diff --git a/jni/Android.mk b/jni/Android.mk
index b5e48b2..2ab57d2 100644
--- a/jni/Android.mk
+++ b/jni/Android.mk
@@ -1,39 +1,66 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 export tbb_root?=$(NDK_PROJECT_PATH)
 
 ifeq (armeabi-v7a,$(APP_ABI))
 	export SYSROOT:=$(NDK_ROOT)/platforms/$(APP_PLATFORM)/arch-arm
+else ifeq (arm64-v8a,$(APP_ABI))
+	export SYSROOT:=$(NDK_ROOT)/platforms/$(APP_PLATFORM)/arch-arm64
 else
 	export SYSROOT:=$(NDK_ROOT)/platforms/$(APP_PLATFORM)/arch-$(APP_ABI)
 endif
+
 ifeq (windows,$(tbb_os))
 	export CPATH_SEPARATOR :=;
 else
 	export CPATH_SEPARATOR :=:
 endif
-export CPATH := $(SYSROOT)/usr/include$(CPATH_SEPARATOR)$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/$(NDK_TOOLCHAIN_VERSION)/include$(CPATH_SEPARATOR)$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/$(NDK_TOOLCHAIN_VERSION)/libs/$(APP_ABI)/include
-#LIB_GNU_STL_ANDROID is required to be set up for copying Android specific library libgnustl_shared.so to '.'
-export LIB_GNU_STL_ANDROID := $(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/$(NDK_TOOLCHAIN_VERSION)/libs/$(APP_ABI)
-export CPLUS_LIB_PATH := $(SYSROOT)/usr/lib -L$(LIB_GNU_STL_ANDROID)
+
 export ANDROID_NDK_ROOT:=$(NDK_ROOT)
+export ndk_version:=$(lastword $(subst -, ,$(ANDROID_NDK_ROOT)))
+ndk_version:= $(firstword $(subst /, ,$(ndk_version)))
+ndk_version:= $(firstword $(subst \, ,$(ndk_version)))
+
+ifeq (clang,$(compiler))
+	ifneq (,$(findstring $(ndk_version),r13 r13b r14 r14b))
+	TBB_RTL :=llvm-libc++
+	else
+	TBB_RTL :=llvm-libc++/libcxx
+	endif
+	TBB_RTL_LIB :=llvm-libc++
+	TBB_RTL_FILE :=libc++_shared.so
+else
+	TBB_RTL :=gnu-libstdc++/$(NDK_TOOLCHAIN_VERSION)
+	TBB_RTL_LIB :=$(TBB_RTL)
+	TBB_RTL_FILE :=libgnustl_shared.so
+endif
+
+export CPATH := $(SYSROOT)/usr/include$(CPATH_SEPARATOR)$(NDK_ROOT)/sources/cxx-stl/$(TBB_RTL)/include$(CPATH_SEPARATOR)$(NDK_ROOT)/sources/cxx-stl/$(TBB_RTL)/libs/$(APP_ABI)/include$(CPATH_SEPARATOR)$(NDK_ROOT)/sources/android/support/include
+
+LIB_STL_ANDROID_DIR := $(NDK_ROOT)/sources/cxx-stl/$(TBB_RTL_LIB)/libs/$(APP_ABI)
+#LIB_STL_ANDROID is required to be set up for copying Android specific library to a device next to test
+export LIB_STL_ANDROID := $(LIB_STL_ANDROID_DIR)/$(TBB_RTL_FILE)
+export CPLUS_LIB_PATH := $(SYSROOT)/usr/lib -L$(LIB_STL_ANDROID_DIR)
 export target_os_version:=$(APP_PLATFORM)
 export tbb_tool_prefix:=$(TOOLCHAIN_PREFIX)
+export TARGET_CXX
+export TARGET_CC
+export TARGET_CFLAGS
 
 include $(NDK_PROJECT_PATH)/src/Makefile
diff --git a/jni/Application.mk b/jni/Application.mk
index feee666..b9474c2 100644
--- a/jni/Application.mk
+++ b/jni/Application.mk
@@ -1,45 +1,68 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
-
-export tbb_os?=linux
-export compiler?=gcc
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+ifndef tbb_os
+
+  # Windows sets environment variable OS; for other systems, ask uname
+  ifeq ($(OS),)
+    OS:=$(shell uname)
+    ifeq ($(OS),)
+      $(error "Cannot detect operating system")
+    endif
+    export tbb_os=$(OS)
+  endif
+
+  ifeq ($(OS), Windows_NT)
+    export tbb_os=windows
+  endif
+  ifeq ($(OS), Linux)
+    export tbb_os=linux
+  endif
+  ifeq ($(OS), Darwin)
+    export tbb_os=macos
+  endif
+
+endif
+
+export compiler?=clang
 export arch?=ia32
 export target?=android
 
 ifeq (ia32,$(arch))
     APP_ABI:=x86
-else 
-ifeq (intel64,$(arch))
+else ifeq (intel64,$(arch))
     APP_ABI:=x86_64
-else 
-ifeq (arm,$(arch))
+else ifeq (arm,$(arch))
     APP_ABI:=armeabi-v7a
-else 
+else ifeq (arm64,$(arch))
+    APP_ABI:=arm64-v8a
+else
     APP_ABI:=$(arch)
 endif
-endif
-endif
 
-APP_PLATFORM:=android-20
-NDK_TOOLCHAIN_VERSION:=4.9
+APP_PLATFORM:=android-21
+ifneq ("","$(api_version)")
+    APP_PLATFORM:=$(api_version)
+endif
 
-# Intel(R) C++ Compiler does not support ndk r10 version yet.
-ifeq (icc,$(compiler))
-    APP_PLATFORM:=android-9
-    NDK_TOOLCHAIN_VERSION:=4.8
+ifeq (clang,$(compiler))
+    NDK_TOOLCHAIN_VERSION:=clang
+    APP_STL:=c++_shared
+else
+    NDK_TOOLCHAIN_VERSION:=4.9
 endif
diff --git a/python/Makefile b/python/Makefile
new file mode 100644
index 0000000..dca4a12
--- /dev/null
+++ b/python/Makefile
@@ -0,0 +1,38 @@
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+all: release test
+
+clean:
+	python setup.py clean
+	-rm -rf build/ tbb_wrap.* _TBB.* *.pyc TBB.py*
+
+release: TBB.py
+
+TBB.py: tbb.i tbb.src.py setup.py
+	python setup.py build_ext -f --inplace
+
+test: TBB.py
+	python TBB.py test
+
+install:
+	python setup.py install
+
+test-install:
+	@echo Testing installed module
+	python -m TBB test
diff --git a/python/index.html b/python/index.html
new file mode 100644
index 0000000..14b47af
--- /dev/null
+++ b/python/index.html
@@ -0,0 +1,75 @@
+<HTML>
+<BODY>
+<H2>Python* API for Intel® Threading Building Blocks (Intel® TBB).
+</H2>
+
+<H2>Overview</H2>
+It is a preview Python* module which unlocks opportunities for additional performance in multi-threaded Python programs by enabling threading composability
+between two or more thread-enabled libraries like Numpy, Scipy, Sklearn, Dask, Joblib, and etc.
+<p></p>
+The biggest improvement can be achieved when a task pool like the ThreadPool from the Python standard library or libraries like Dask or Joblib (used in multi-threading mode)
+execute tasks calling compute-intensive functions of Numpy/Scipy/Sklearn/PyDAAL which in turn are parallelized using Intel® Math Kernel Library or/and Intel® TBB.
+<p></p>
+The module implements Pool class with the standard interface using Intel® TBB which can be used to replace Python's ThreadPool.
+Thanks to the monkey-patching technique implemented in class Monkey, no source code change is needed in order to enable threading composability in Python programs.
+<p></p>
+For more information and examples, please refer to <A HREF="http://software.intel.com/en-us/blogs/2016/04/04/unleash-parallel-performance-of-python-programs">online blog</A>.
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="setup.py">setup.py</A>
+<DD>Standard Python setup script.
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building, installing, and testing. See below.
+<DT><A HREF="tbb.i">tbb.i</A>
+<DD>SWIG interface description file.
+<DT><A HREF="tbb.src.py">tbb.src.py</A>
+<DD>Python part of module implementation.
+</DL>
+
+<A NAME=build><H2>Build and install</H2></A>
+Prior to building it, please set up the environment using corresponding tbbvars script, e.g. `source tbbvars.sh intel64`
+<DL>
+<DT><TT>make</TT>
+<DD>Default build and run. Equivalent to 'make release test'.
+<DT><TT>make release</TT>
+<DD>Compile and link against the release version of Intel TBB runtime library. The resulting executable is left in the directory for the example.
+<DT><TT>make test</TT>
+<DD>Run local build of the module previously produced by one of the above commands.
+<DT><TT>make install</TT>
+<DD>Install module into Python.
+<DT><TT>make <B>[</B>(above options or targets)<B>]</B> CXX=<B>{</B>icl, icc<B>}</B></TT>
+<DD>Build and run as above, but use Intel® C++ compiler instead of default, native compilers
+(e.g., icl instead of cl.exe on Windows* systems, or icc instead of g++ on Linux* or macOS* systems).
+Please note, CXX=icl works on Windows only with Intel® Distribution for Python*.
+<DT><TT>make clean</TT>
+<DD>Remove any intermediate files produced by the above commands.
+</DL>
+
+<H2>Command-line interface</H2>
+<DL>
+<DT><TT>pydoc TBB</TT>
+<DD>Read built-in documentation for Python interfaces.
+<DT><TT>python -m TBB your_script.py</TT>
+<DD>Run your_script.py in context of `with TBB.Monkey():` when Intel TBB is enabled.
+</DL>
+
+<H2>System Requirements</H2>
+The Python module was not tested on older versions of Python thus we require at least Python versions 2.7 and 3.5 or higher.<BR>
+SWIG must be of version 3.0.6 or higher<BR>
+OS versions:
+Microsoft* Windows* Server 2012,
+Microsoft* Windows* 10,
+Ubuntu* 14.04 LTS,
+Red Hat* Enterprise Linux* 7.
+<HR>
+<A href="../index.html">Up to parent directory</A>
+<p></p>
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
+<P></P>
+Intel is a registered trademark or trademark of Intel Corporation
+or its subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
diff --git a/python/setup.py b/python/setup.py
new file mode 100644
index 0000000..eac5a3f
--- /dev/null
+++ b/python/setup.py
@@ -0,0 +1,117 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+
+# System imports
+from __future__ import print_function
+import platform
+import os
+
+from distutils.core import *
+from distutils.command.build import build
+
+if any(i in os.environ for i in ["CC", "CXX"]):
+    if "CC" not in os.environ:
+        os.environ['CC'] = os.environ['CXX']
+    if "CXX" not in os.environ:
+        os.environ['CXX'] = os.environ['CC']
+    if platform.system() == 'Linux':
+        os.environ['LDSHARED'] = os.environ['CXX'] + " -shared"
+
+intel_compiler = os.getenv('CC', '') in ['icl', 'icpc', 'icc']
+try:
+    tbb_root = os.environ['TBBROOT']
+    print("Using TBBROOT=", tbb_root)
+except:
+    tbb_root = '.'
+    if not intel_compiler:
+        print("Warning: TBBROOT env var is not set and Intel's compiler is not used. It might lead\n"
+              "    !!!: to compile/link problems. Source tbbvars.sh/.csh file to set environment")
+use_compiler_tbb = intel_compiler and tbb_root == '.'
+if use_compiler_tbb:
+    print("Using Intel TBB from Intel's compiler")
+if platform.system() == 'Windows':
+    if intel_compiler:
+        os.environ['DISTUTILS_USE_SDK'] = '1'  # Enable environment settings in distutils
+        os.environ['MSSdk'] = '1'
+        print("Using compiler settings from environment")
+    tbb_flag = ['/Qtbb'] if use_compiler_tbb else []
+    compile_flags = ['/Qstd=c++11'] if intel_compiler else []
+else:
+    tbb_flag = ['-tbb'] if use_compiler_tbb else []
+    compile_flags = ['-std=c++11', '-Wno-unused-variable']
+
+_tbb = Extension("_TBB", ["tbb.i"],
+        include_dirs=[os.path.join(tbb_root, 'include')] if not use_compiler_tbb else [],
+        swig_opts   =['-c++', '-O', '-threads'] + (  # add '-builtin' later
+              ['-I' + os.path.join(tbb_root, 'include')] if not use_compiler_tbb else []),
+        extra_compile_args=compile_flags + tbb_flag,
+        extra_link_args=tbb_flag,
+        libraries   =['tbb'] if not use_compiler_tbb else [],
+        library_dirs=[os.path.join(tbb_root, 'lib', 'intel64', 'gcc4.4'),  # for Linux
+                      os.path.join(tbb_root, 'lib'),                       # for MacOS
+                      os.path.join(tbb_root, 'lib', 'intel64', 'vc_mt'),   # for Windows
+                     ] if not use_compiler_tbb else [],
+        language    ='c++',
+        )
+
+
+class TBBBuild(build):
+    sub_commands = [  # define build order
+        ('build_ext', build.has_ext_modules),
+        ('build_py', build.has_pure_modules),
+    ]
+
+
+setup(  name        ="TBB",
+        description ="Python API for Intel TBB",
+        long_description="Python API to Intel(R) Threading Building Blocks library (Intel(R) TBB) "
+                         "extended with standard Pool implementation and monkey-patching",
+        url         ="https://software.intel.com/en-us/intel-tbb",
+        author      ="Intel Corporation",
+        author_email="inteltbbdevelopers at intel.com",
+        license     ="Dual license: Apache or Proprietary",
+        version     ="0.1",
+        classifiers =[
+            'Development Status :: 4 - Beta',
+            'Environment :: Console',
+            'Environment :: Plugins',
+            'Intended Audience :: Developers',
+            'Intended Audience :: System Administrators',
+            'Intended Audience :: Other Audience',
+            'Intended Audience :: Science/Research',
+            'License :: OSI Approved :: Apache Software License',
+            'License :: Other/Proprietary License',
+            'Operating System :: MacOS :: MacOS X',
+            'Operating System :: Microsoft :: Windows',
+            'Operating System :: POSIX',
+            'Operating System :: Unix',
+            'Programming Language :: Python',
+            'Programming Language :: Python :: 2',
+            'Programming Language :: Python :: 3',
+            'Programming Language :: C++',
+            'Topic :: System :: Hardware :: Symmetric Multi-processing',
+            'Topic :: Software Development :: Libraries',
+          ],
+        keywords='tbb multiprocessing multithreading composable parallelism',
+        ext_modules=[_tbb],
+        py_modules=['TBB'],
+        cmdclass={'build': TBBBuild}
+)
diff --git a/python/tbb.i b/python/tbb.i
new file mode 100644
index 0000000..6d0c765
--- /dev/null
+++ b/python/tbb.i
@@ -0,0 +1,146 @@
+%pythonbegin %{
+#
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+
+# Based on the software developed by:
+# Copyright (c) 2008,2016 david decotigny (Pool of threads)
+# Copyright (c) 2006-2008, R Oudkerk (multiprocessing.Pool)
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. Neither the name of author nor the names of any contributors may be
+#    used to endorse or promote products derived from this software
+#    without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+from __future__ import print_function
+%}
+%begin %{
+/* Defines Python wrappers for Intel(R) Threading Building Blocks (Intel TBB).*/
+%}
+%module TBB
+
+#if SWIG_VERSION < 0x030001
+#error SWIG version 3.0.6 or newer is required for correct functioning
+#endif
+
+%{
+#include <tbb/tbb.h>
+using namespace tbb;
+
+class PyCaller : public swig::SwigPtr_PyObject {
+public:
+    // icpc 2013 does not support simple using SwigPtr_PyObject::SwigPtr_PyObject;
+    PyCaller(const PyCaller& s) : SwigPtr_PyObject(s) {}
+    PyCaller(PyObject *p, bool initial = true) : SwigPtr_PyObject(p, initial) {}
+
+    void operator()() const {
+        SWIG_PYTHON_THREAD_BEGIN_BLOCK;
+        PyObject* r = PyObject_CallFunctionObjArgs((PyObject*)*this, NULL);
+        if(r) Py_DECREF(r);
+        SWIG_PYTHON_THREAD_END_BLOCK;
+    }
+};
+
+struct ArenaPyCaller {
+    task_arena *my_arena;
+    PyObject *my_callable;
+    ArenaPyCaller(task_arena *a, PyObject *c) : my_arena(a), my_callable(c) {
+        SWIG_PYTHON_THREAD_BEGIN_BLOCK;
+        Py_XINCREF(c);
+        SWIG_PYTHON_THREAD_END_BLOCK;
+    }
+    void operator()() const {
+        my_arena->execute(PyCaller(my_callable, false));
+    }
+};
+
+%}
+
+namespace tbb {
+    class task_scheduler_init {
+    public:
+        //! Typedef for number of threads that is automatic.
+        static const int automatic = -1;
+        //! Argument to initialize() or constructor that causes initialization to be deferred.
+        static const int deferred = -2;
+        task_scheduler_init( int max_threads=automatic, 
+                             size_t thread_stack_size=0 );
+        ~task_scheduler_init();
+        void initialize( int max_threads=automatic );
+        void terminate();
+        static int default_num_threads();
+        bool is_active() const;
+    };
+
+    class task_arena {
+    public:
+        static const int automatic = -1;
+        static int current_thread_index();
+        task_arena(int max_concurrency = automatic, unsigned reserved_for_masters = 1);
+        task_arena(const task_arena &s);
+        ~task_arena();
+        void initialize();
+        void initialize(int max_concurrency, unsigned reserved_for_masters = 1);
+        void terminate();
+        bool is_active();
+        %extend {
+        void enqueue( PyObject *c ) { $self->enqueue(PyCaller(c)); }
+        void execute( PyObject *c ) { $self->execute(PyCaller(c)); }
+        };
+    };
+
+    class task_group {
+    public:
+        task_group();
+        ~task_group();
+        void wait(); 
+        bool is_canceling();
+        void cancel();
+        %extend {
+        void run( PyObject *c ) { $self->run(PyCaller(c)); }
+        void run( PyObject *c, task_arena *a ) { $self->run(ArenaPyCaller(a, c)); }
+        };
+    };
+
+}
+
+// Python part of the module
+%pythoncode "tbb.src.py"
diff --git a/python/tbb.src.py b/python/tbb.src.py
new file mode 100644
index 0000000..9d89f02
--- /dev/null
+++ b/python/tbb.src.py
@@ -0,0 +1,840 @@
+
+#
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
+
+# Based on the software developed by:
+# Copyright (c) 2008,2016 david decotigny (Pool of threads)
+# Copyright (c) 2006-2008, R Oudkerk (multiprocessing.Pool)
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. Neither the name of author nor the names of any contributors may be
+#    used to endorse or promote products derived from this software
+#    without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+# @brief Python Pool implementation based on TBB with monkey-patching
+#
+# See http://docs.python.org/dev/library/multiprocessing.html
+# Differences: added imap_async and imap_unordered_async, and terminate()
+# has to be called explicitly (it's not registered by atexit).
+#
+# The general idea is that we submit works to a workqueue, either as
+# single Jobs (one function to call), or JobSequences (batch of
+# Jobs). Each Job is associated with an ApplyResult object which has 2
+# states: waiting for the Job to complete, or Ready. Instead of
+# waiting for the jobs to finish, we wait for their ApplyResult object
+# to become ready: an event mechanism is used for that.
+# When we apply a function to several arguments in "parallel", we need
+# a way to wait for all/part of the Jobs to be processed: that's what
+# "collectors" are for; they group and wait for a set of ApplyResult
+# objects. Once a collector is ready to be used, we can use a
+# CollectorIterator to iterate over the result values it's collecting.
+#
+# The methods of a Pool object use all these concepts and expose
+# them to their caller in a very simple way.
+
+import sys
+import threading
+import traceback
+
+__all__ = ["Pool", "Monkey", "task_arena", "task_group", "task_scheduler_init"]
+__doc__ = """
+Python API to Intel(R) Threading Building Blocks library (Intel TBB)
+extended with standard Pool implementation and monkey-patching.
+
+Command-line interface:
+$ python -m TBB $your_script.py
+
+Runs your_script.py in context of `with Monkey():`
+"""
+
+default_num_threads = task_scheduler_init_default_num_threads
+
+
+class TimeoutError(Exception):
+    """Raised when a result is not available within the given timeout"""
+    pass
+
+
+class Pool(object):
+    """
+    The Pool class provides standard multiprocessing.Pool interface
+    which is mapped onto Intel TBB tasks executing in its thread pool
+    """
+
+    def __init__(self, nworkers=0, name="Pool"):
+        """
+        \param nworkers (integer) number of worker threads to start
+        \param name (string) prefix for the worker threads' name
+        """
+        self._closed = False
+        self._tasks = task_group()
+        self._pool = [None,]*default_num_threads()  # Dask asks for len(_pool)
+
+    def apply(self, func, args=(), kwds=dict()):
+        """Equivalent of the apply() builtin function. It blocks till
+        the result is ready."""
+        return self.apply_async(func, args, kwds).get()
+
+    def map(self, func, iterable, chunksize=None):
+        """A parallel equivalent of the map() builtin function. It
+        blocks till the result is ready.
+
+        This method chops the iterable into a number of chunks which
+        it submits to the process pool as separate tasks. The
+        (approximate) size of these chunks can be specified by setting
+        chunksize to a positive integer."""
+        return self.map_async(func, iterable, chunksize).get()
+
+    def imap(self, func, iterable, chunksize=1):
+        """
+        An equivalent of itertools.imap().
+
+        The chunksize argument is the same as the one used by the
+        map() method. For very long iterables using a large value for
+        chunksize can make the job complete much faster than
+        using the default value of 1.
+
+        Also if chunksize is 1 then the next() method of the iterator
+        returned by the imap() method has an optional timeout
+        parameter: next(timeout) will raise processing.TimeoutError if
+        the result cannot be returned within timeout seconds.
+        """
+        collector = OrderedResultCollector(as_iterator=True)
+        self._create_sequences(func, iterable, chunksize, collector)
+        return iter(collector)
+
+    def imap_unordered(self, func, iterable, chunksize=1):
+        """The same as imap() except that the ordering of the results
+        from the returned iterator should be considered
+        arbitrary. (Only when there is only one worker process is the
+        order guaranteed to be "correct".)"""
+        collector = UnorderedResultCollector()
+        self._create_sequences(func, iterable, chunksize, collector)
+        return iter(collector)
+
+    def apply_async(self, func, args=(), kwds=dict(), callback=None):
+        """A variant of the apply() method which returns an
+        ApplyResult object.
+
+        If callback is specified then it should be a callable which
+        accepts a single argument. When the result becomes ready,
+        callback is applied to it (unless the call failed). callback
+        should complete immediately since otherwise the thread which
+        handles the results will get blocked."""
+        assert not self._closed  # No lock here. We assume it's atomic...
+        apply_result = ApplyResult(callback=callback)
+        job = Job(func, args, kwds, apply_result)
+        self._tasks.run(job)
+        return apply_result
+
+    def map_async(self, func, iterable, chunksize=None, callback=None):
+        """A variant of the map() method which returns a ApplyResult
+        object.
+
+        If callback is specified then it should be a callable which
+        accepts a single argument. When the result becomes ready
+        callback is applied to it (unless the call failed). callback
+        should complete immediately since otherwise the thread which
+        handles the results will get blocked."""
+        apply_result = ApplyResult(callback=callback)
+        collector    = OrderedResultCollector(apply_result, as_iterator=False)
+        if not self._create_sequences(func, iterable, chunksize, collector):
+          apply_result._set_value([])
+        return apply_result
+
+    def imap_async(self, func, iterable, chunksize=None, callback=None):
+        """A variant of the imap() method which returns an ApplyResult
+        object that provides an iterator (next method(timeout)
+        available).
+
+        If callback is specified then it should be a callable which
+        accepts a single argument. When the resulting iterator becomes
+        ready, callback is applied to it (unless the call
+        failed). callback should complete immediately since otherwise
+        the thread which handles the results will get blocked."""
+        apply_result = ApplyResult(callback=callback)
+        collector    = OrderedResultCollector(apply_result, as_iterator=True)
+        if not self._create_sequences(func, iterable, chunksize, collector):
+          apply_result._set_value(iter([]))
+        return apply_result
+
+    def imap_unordered_async(self, func, iterable, chunksize=None,
+                             callback=None):
+        """A variant of the imap_unordered() method which returns an
+        ApplyResult object that provides an iterator (next
+        method(timeout) available).
+
+        If callback is specified then it should be a callable which
+        accepts a single argument. When the resulting iterator becomes
+        ready, callback is applied to it (unless the call
+        failed). callback should complete immediately since otherwise
+        the thread which handles the results will get blocked."""
+        apply_result = ApplyResult(callback=callback)
+        collector    = UnorderedResultCollector(apply_result)
+        if not self._create_sequences(func, iterable, chunksize, collector):
+          apply_result._set_value(iter([]))
+        return apply_result
+
+    def close(self):
+        """Prevents any more tasks from being submitted to the
+        pool. Once all the tasks have been completed the worker
+        processes will exit."""
+        # No lock here. We assume it's sufficiently atomic...
+        self._closed = True
+
+    def terminate(self):
+        """Stops the worker processes immediately without completing
+        outstanding work. When the pool object is garbage collected
+        terminate() will be called immediately."""
+        self.close()
+        self._tasks.cancel()
+
+    def join(self):
+        """Wait for the worker processes to exit. One must call
+        close() or terminate() before using join()."""
+        self._tasks.wait()
+
+    def __enter__(self):
+        return self
+
+    def __exit__(self, exc_type, exc_value, traceback):
+        self.join()
+
+    def __del__(self):
+        self.terminate()
+        self.join()
+
+    def _create_sequences(self, func, iterable, chunksize, collector):
+        """
+        Create callable objects to process and pushes them on the
+        work queue. Each work unit is meant to process a slice of
+        iterable of size chunksize. If collector is specified, then
+        the ApplyResult objects associated with the jobs will notify
+        collector when their result becomes ready.
+
+        \return the list callable objects (basically: JobSequences)
+        pushed onto the work queue
+        """
+        assert not self._closed  # No lock here. We assume it's atomic...
+        it_ = iter(iterable)
+        exit_loop = False
+        sequences = []
+        while not exit_loop:
+            seq = []
+            for _ in range(chunksize or 1):
+                try:
+                    arg = next(it_)
+                except StopIteration:
+                    exit_loop = True
+                    break
+                apply_result = ApplyResult(collector)
+                job = Job(func, (arg,), {}, apply_result)
+                seq.append(job)
+            if seq:
+                sequences.append(JobSequence(seq))
+        for t in sequences:
+            self._tasks.run(t)
+        return sequences
+
+
+class Job:
+    """A work unit that corresponds to the execution of a single function"""
+
+    def __init__(self, func, args, kwds, apply_result):
+        """
+        \param func/args/kwds used to call the function
+        \param apply_result ApplyResult object that holds the result
+        of the function call
+        """
+        self._func = func
+        self._args = args
+        self._kwds = kwds
+        self._result = apply_result
+
+    def __call__(self):
+        """
+        Call the function with the args/kwds and tell the ApplyResult
+        that its result is ready. Correctly handles the exceptions
+        happening during the execution of the function
+        """
+        try:
+            result = self._func(*self._args, **self._kwds)
+        except:
+            self._result._set_exception()
+        else:
+            self._result._set_value(result)
+
+
+class JobSequence:
+    """A work unit that corresponds to the processing of a continuous
+    sequence of Job objects"""
+
+    def __init__(self, jobs):
+        self._jobs = jobs
+
+    def __call__(self):
+        """
+        Call all the Job objects that have been specified
+        """
+        for job in self._jobs:
+            job()
+
+
+class ApplyResult(object):
+    """An object associated with a Job object that holds its result:
+    it's available during the whole life the Job and after, even when
+    the Job didn't process yet. It's possible to use this object to
+    wait for the result/exception of the job to be available.
+
+    The result objects returns by the Pool::*_async() methods are of
+    this type"""
+
+    def __init__(self, collector=None, callback=None):
+        """
+        \param collector when not None, the notify_ready() method of
+        the collector will be called when the result from the Job is
+        ready
+        \param callback when not None, function to call when the
+        result becomes available (this is the paramater passed to the
+        Pool::*_async() methods.
+        """
+        self._success = False
+        self._event = threading.Event()
+        self._data = None
+        self._collector = None
+        self._callback = callback
+
+        if collector is not None:
+            collector.register_result(self)
+            self._collector = collector
+
+    def get(self, timeout=None):
+        """
+        Returns the result when it arrives. If timeout is not None and
+        the result does not arrive within timeout seconds then
+        TimeoutError is raised. If the remote call raised an exception
+        then that exception will be reraised by get().
+        """
+        if not self.wait(timeout):
+            raise TimeoutError("Result not available within %fs" % timeout)
+        if self._success:
+            return self._data
+        if sys.version_info[0] == 3:
+            raise self._data[0](self._data[1]).with_traceback(self._data[2])
+        else:
+            exec("raise self._data[0], self._data[1], self._data[2]")
+
+    def wait(self, timeout=None):
+        """Waits until the result is available or until timeout
+        seconds pass."""
+        self._event.wait(timeout)
+        return self._event.isSet()
+
+    def ready(self):
+        """Returns whether the call has completed."""
+        return self._event.isSet()
+
+    def successful(self):
+        """Returns whether the call completed without raising an
+        exception. Will raise AssertionError if the result is not
+        ready."""
+        assert self.ready()
+        return self._success
+
+    def _set_value(self, value):
+        """Called by a Job object to tell the result is ready, and
+        provides the value of this result. The object will become
+        ready and successful. The collector's notify_ready() method
+        will be called, and the callback method too"""
+        assert not self.ready()
+        self._data = value
+        self._success = True
+        self._event.set()
+        if self._collector is not None:
+            self._collector.notify_ready(self)
+        if self._callback is not None:
+            try:
+                self._callback(value)
+            except:
+                traceback.print_exc()
+
+    def _set_exception(self):
+        """Called by a Job object to tell that an exception occurred
+        during the processing of the function. The object will become
+        ready but not successful. The collector's notify_ready()
+        method will be called, but NOT the callback method"""
+        # traceback.print_exc()
+        assert not self.ready()
+        self._data = sys.exc_info()
+        self._success = False
+        self._event.set()
+        if self._collector is not None:
+            self._collector.notify_ready(self)
+
+
+class AbstractResultCollector(object):
+    """ABC to define the interface of a ResultCollector object. It is
+    basically an object which knows whuich results it's waiting for,
+    and which is able to get notify when they get available. It is
+    also able to provide an iterator over the results when they are
+    available"""
+
+    def __init__(self, to_notify):
+        """
+        \param to_notify ApplyResult object to notify when all the
+        results we're waiting for become available. Can be None.
+        """
+        self._to_notify = to_notify
+
+    def register_result(self, apply_result):
+        """Used to identify which results we're waiting for. Will
+        always be called BEFORE the Jobs get submitted to the work
+        queue, and BEFORE the __iter__ and _get_result() methods can
+        be called
+        \param apply_result ApplyResult object to add in our collection
+        """
+        raise NotImplementedError("Children classes must implement it")
+
+    def notify_ready(self, apply_result):
+        """Called by the ApplyResult object (already registered via
+        register_result()) that it is now ready (ie. the Job's result
+        is available or an exception has been raised).
+        \param apply_result ApplyResult object telling us that the job
+        has been processed
+        """
+        raise NotImplementedError("Children classes must implement it")
+
+    def _get_result(self, idx, timeout=None):
+        """Called by the CollectorIterator object to retrieve the
+        result's values one after another (order defined by the
+        implementation)
+        \param idx The index of the result we want, wrt collector's order
+        \param timeout integer telling how long to wait (in seconds)
+        for the result at index idx to be available, or None (wait
+        forever)
+        """
+        raise NotImplementedError("Children classes must implement it")
+
+    def __iter__(self):
+        """Return a new CollectorIterator object for this collector"""
+        return CollectorIterator(self)
+
+
+class CollectorIterator(object):
+    """An iterator that allows to iterate over the result values
+    available in the given collector object. Equipped with an extended
+    next() method accepting a timeout argument. Created by the
+    AbstractResultCollector::__iter__() method"""
+
+    def __init__(self, collector):
+        """\param AbstractResultCollector instance"""
+        self._collector = collector
+        self._idx = 0
+
+    def __iter__(self):
+        return self
+
+    def next(self, timeout=None):
+        """Return the next result value in the sequence. Raise
+        StopIteration at the end. Can raise the exception raised by
+        the Job"""
+        try:
+            apply_result = self._collector._get_result(self._idx, timeout)
+        except IndexError:
+            # Reset for next time
+            self._idx = 0
+            raise StopIteration
+        except:
+            self._idx = 0
+            raise
+        self._idx += 1
+        assert apply_result.ready()
+        return apply_result.get(0)
+
+    def __next__(self):
+        return self.next()
+
+
+class UnorderedResultCollector(AbstractResultCollector):
+    """An AbstractResultCollector implementation that collects the
+    values of the ApplyResult objects in the order they become ready. The
+    CollectorIterator object returned by __iter__() will iterate over
+    them in the order they become ready"""
+
+    def __init__(self, to_notify=None):
+        """
+        \param to_notify ApplyResult object to notify when all the
+        results we're waiting for become available. Can be None.
+        """
+        AbstractResultCollector.__init__(self, to_notify)
+        self._cond = threading.Condition()
+        self._collection = []
+        self._expected = 0
+
+    def register_result(self, apply_result):
+        """Used to identify which results we're waiting for. Will
+        always be called BEFORE the Jobs get submitted to the work
+        queue, and BEFORE the __iter__ and _get_result() methods can
+        be called
+        \param apply_result ApplyResult object to add in our collection
+        """
+        self._expected += 1
+
+    def _get_result(self, idx, timeout=None):
+        """Called by the CollectorIterator object to retrieve the
+        result's values one after another, in the order the results have
+        become available.
+        \param idx The index of the result we want, wrt collector's order
+        \param timeout integer telling how long to wait (in seconds)
+        for the result at index idx to be available, or None (wait
+        forever)
+        """
+        self._cond.acquire()
+        try:
+            if idx >= self._expected:
+                raise IndexError
+            elif idx < len(self._collection):
+                return self._collection[idx]
+            elif idx != len(self._collection):
+                # Violation of the sequence protocol
+                raise IndexError()
+            else:
+                self._cond.wait(timeout=timeout)
+                try:
+                    return self._collection[idx]
+                except IndexError:
+                    # Still not added !
+                    raise TimeoutError("Timeout while waiting for results")
+        finally:
+            self._cond.release()
+
+    def notify_ready(self, apply_result=None):
+        """Called by the ApplyResult object (already registered via
+        register_result()) that it is now ready (ie. the Job's result
+        is available or an exception has been raised).
+        \param apply_result ApplyResult object telling us that the job
+        has been processed
+        """
+        first_item = False
+        self._cond.acquire()
+        try:
+            self._collection.append(apply_result)
+            first_item = (len(self._collection) == 1)
+
+            self._cond.notifyAll()
+        finally:
+            self._cond.release()
+
+        if first_item and self._to_notify is not None:
+            self._to_notify._set_value(iter(self))
+
+
+class OrderedResultCollector(AbstractResultCollector):
+    """An AbstractResultCollector implementation that collects the
+    values of the ApplyResult objects in the order they have been
+    submitted. The CollectorIterator object returned by __iter__()
+    will iterate over them in the order they have been submitted"""
+
+    def __init__(self, to_notify=None, as_iterator=True):
+        """
+        \param to_notify ApplyResult object to notify when all the
+        results we're waiting for become available. Can be None.
+        \param as_iterator boolean telling whether the result value
+        set on to_notify should be an iterator (available as soon as 1
+        result arrived) or a list (available only after the last
+        result arrived)
+        """
+        AbstractResultCollector.__init__(self, to_notify)
+        self._results = []
+        self._lock = threading.Lock()
+        self._remaining = 0
+        self._as_iterator = as_iterator
+
+    def register_result(self, apply_result):
+        """Used to identify which results we're waiting for. Will
+        always be called BEFORE the Jobs get submitted to the work
+        queue, and BEFORE the __iter__ and _get_result() methods can
+        be called
+        \param apply_result ApplyResult object to add in our collection
+        """
+        self._results.append(apply_result)
+        self._remaining += 1
+
+    def _get_result(self, idx, timeout=None):
+        """Called by the CollectorIterator object to retrieve the
+        result's values one after another (order defined by the
+        implementation)
+        \param idx The index of the result we want, wrt collector's order
+        \param timeout integer telling how long to wait (in seconds)
+        for the result at index idx to be available, or None (wait
+        forever)
+        """
+        res = self._results[idx]
+        res.wait(timeout)
+        return res
+
+    def notify_ready(self, apply_result):
+        """Called by the ApplyResult object (already registered via
+        register_result()) that it is now ready (ie. the Job's result
+        is available or an exception has been raised).
+        \param apply_result ApplyResult object telling us that the job
+        has been processed
+        """
+        got_first = False
+        got_last = False
+        self._lock.acquire()
+        try:
+            assert self._remaining > 0
+            got_first = (len(self._results) == self._remaining)
+            self._remaining -= 1
+            got_last = (self._remaining == 0)
+        finally:
+            self._lock.release()
+
+        if self._to_notify is not None:
+            if self._as_iterator and got_first:
+                self._to_notify._set_value(iter(self))
+            elif not self._as_iterator and got_last:
+                try:
+                    lst = [r.get(0) for r in self._results]
+                except:
+                    self._to_notify._set_exception()
+                else:
+                    self._to_notify._set_value(lst)
+
+
+def _test(arg=None):
+    """Some tests"""
+    if arg == "-v":
+        def say(*x):
+            print(*x)
+    else:
+        def say(*x):
+            pass
+    say("Start Pool testing")
+    import time
+    
+    get_tid = lambda: threading.current_thread().ident
+
+    def return42():
+        return 42
+
+    def f(x):
+        return x * x
+
+    def work(mseconds):
+        res = str(mseconds)
+        if mseconds < 0:
+            mseconds = -mseconds
+        say("[%d] Start to work for %fms..." % (get_tid(), mseconds*10))
+        time.sleep(mseconds/100.)
+        say("[%d] Work done (%fms)." % (get_tid(), mseconds*10))
+        return res
+
+    ### Test copy/pasted from multiprocessing
+    pool = Pool(4)  # start worker threads
+
+    # edge cases
+    assert pool.map(return42, []) == []
+    assert pool.apply_async(return42, []).get() == 42
+    assert pool.apply(return42, []) == 42
+    assert list(pool.imap(return42, iter([]))) == []
+    assert list(pool.imap_unordered(return42, iter([]))) == []
+    assert pool.map_async(return42, []).get() == []
+    assert list(pool.imap_async(return42, iter([])).get()) == []
+    assert list(pool.imap_unordered_async(return42, iter([])).get()) == []
+
+    # basic tests
+    result = pool.apply_async(f, (10,))  # evaluate "f(10)" asynchronously
+    assert result.get(timeout=1) == 100  # ... unless slow computer
+    assert list(pool.map(f, range(10))) == list(map(f, range(10)))
+    it = pool.imap(f, range(10))
+    assert next(it) == 0
+    assert next(it) == 1
+    assert next(it) == 4
+
+    # Test apply_sync exceptions
+    result = pool.apply_async(time.sleep, (3,))
+    try:
+        say(result.get(timeout=1))  # raises `TimeoutError`
+    except TimeoutError:
+        say("Good. Got expected timeout exception.")
+    else:
+        assert False, "Expected exception !"
+    assert result.get() is None  # sleep() returns None
+
+    def cb(s):
+        say("Result ready: %s" % s)
+
+    # Test imap()
+    assert list(pool.imap(work, range(10, 3, -1), chunksize=4)) == list(map(
+        str, range(10, 3, -1)))
+
+    # Test imap_unordered()
+    assert sorted(pool.imap_unordered(work, range(10, 3, -1))) == sorted(map(
+        str, range(10, 3, -1)))
+
+    # Test map_async()
+    result = pool.map_async(work, range(10), callback=cb)
+    try:
+        result.get(timeout=0.01)  # raises `TimeoutError`
+    except TimeoutError:
+        say("Good. Got expected timeout exception.")
+    else:
+        assert False, "Expected exception !"
+    say(result.get())
+
+    # Test imap_async()
+    result = pool.imap_async(work, range(3, 10), callback=cb)
+    try:
+        result.get(timeout=0.01)  # raises `TimeoutError`
+    except TimeoutError:
+        say("Good. Got expected timeout exception.")
+    else:
+        assert False, "Expected exception !"
+    for i in result.get():
+        say("Item:", i)
+    say("### Loop again:")
+    for i in result.get():
+        say("Item2:", i)
+
+    # Test imap_unordered_async()
+    result = pool.imap_unordered_async(work, range(10, 3, -1), callback=cb)
+    try:
+        say(result.get(timeout=0.01))  # raises `TimeoutError`
+    except TimeoutError:
+        say("Good. Got expected timeout exception.")
+    else:
+        assert False, "Expected exception !"
+    for i in result.get():
+        say("Item1:", i)
+    for i in result.get():
+        say("Item2:", i)
+    r = result.get()
+    for i in r:
+        say("Item3:", i)
+    for i in r:
+        say("Item4:", i)
+    for i in r:
+        say("Item5:", i)
+
+    #
+    # The case for the exceptions
+    #
+
+    # Exceptions in imap_unordered_async()
+    result = pool.imap_unordered_async(work, range(2, -10, -1), callback=cb)
+    time.sleep(3)
+    try:
+        for i in result.get():
+            say("Got item:", i)
+    except (IOError, ValueError):
+        say("Good. Got expected exception")
+
+    # Exceptions in imap_async()
+    result = pool.imap_async(work, range(2, -10, -1), callback=cb)
+    time.sleep(3)
+    try:
+        for i in result.get():
+            say("Got item:", i)
+    except (IOError, ValueError):
+        say("Good. Got expected exception")
+
+    # Stop the test: need to stop the pool !!!
+    pool.terminate()
+    pool.join()
+    print("done")
+
+
+# End of david's derived file content
+
+class Monkey:
+    """
+    Context manager which replaces standard multiprocessing.pool.ThreadPool
+    implementation with TBB.Pool using monkey-patching. It also enables TBB
+    threading for Intel MKL. For example:
+
+        with TBB.Monkey():
+            run_my_numpy_code()
+
+    """
+    _items = {'ThreadPool': None}
+
+    def __init__(self):
+        pass
+
+    def __enter__(self):
+        import os
+        self.env = os.getenv('MKL_THREADING_LAYER')
+        os.environ['MKL_THREADING_LAYER'] = 'TBB'
+        self.module = __import__('multiprocessing.pool', globals(), locals(), self._items.keys())
+        for name in self._items.keys():
+            oldattr = getattr(self.module, name)
+            self._items[name] = oldattr
+            setattr(self.module, name, Pool)
+        return self
+
+    def __exit__(self, exc_type, exc_value, traceback):
+        import os
+        if self.env is None:
+            del os.environ['MKL_THREADING_LAYER']
+        else:
+            os.environ['MKL_THREADING_LAYER'] = self.env
+        for name in self._items.keys():
+            setattr(self.module, name, self._items[name])
+
+
+def _main():
+    # Run the module specified as the next command line argument
+    # python -m TBB user_app.py
+    del sys.argv[0]  # shift arguments
+    if len(sys.argv) < 1:
+        print("No file name specified for execution", file=sys.stderr)
+    elif '_' + sys.argv[0] in globals():
+        globals()['_' + sys.argv[0]](*sys.argv[1:])
+    else:
+        import runpy
+        with Monkey():
+            runpy.run_path(sys.argv[0], run_name='__main__')
+
+
+if __name__ == "__main__":
+    sys.exit(_main())
diff --git a/src/Makefile b/src/Makefile
index 5ea3063..195304d 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,20 +1,20 @@
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
 #
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 #
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
 
 tbb_root?=..
 examples_root:=$(tbb_root)/examples
@@ -94,6 +94,9 @@ else
 	@$(MAKE) -C "$(work_dir)_$(cfg)"  -r -f $(tbb_root)/build/Makefile.test $@
 endif
 
+python_%: tbb_release
+	bash -c ". $(work_dir)_release$(SLASH)tbbvars.sh && $(MAKE) -rC '$(full_tbb_root)/python' CXX=$(compiler) $(subst python_,,$@)"
+
 .PHONY: test_release test_debug test_release_no_depends test_debug_no_depends
 .PHONY: tbb_release tbb_debug tbb_test_release tbb_test_debug tbb_test_release_no_depends tbb_test_debug_no_depends
 # do not delete double-space after -C option
diff --git a/src/index.html b/src/index.html
index 9ace483..e828987 100644
--- a/src/index.html
+++ b/src/index.html
@@ -23,50 +23,50 @@ This directory contains the source code and unit tests for Intel® Threading
 <h2>Files</h2>
 <dl>
 <dt><a href="Makefile">Makefile</a>
-</dt><dd>Advanced Makefile for developing and debugging of TBB. See the <a href="../build/index.html#build">basic build directions</a>. Additional targets and options:
-    <dl>
+<dd>Advanced Makefile for developing and debugging of TBB. See the <a href="../build/index.html#build">basic build directions</a>. Additional targets and options:
     <dt><tt>make test_{name} time_{name}</tt>
-    </dt><dd>Make and run individual test or benchmark.</dd>
+    <dd>Make and run individual test or benchmark.
     <dt><tt>make stress_{name}</tt>
-    </dt><dd>Equivalent to 'make test_{name}' but runs until a failure detected or terminated by user.</dd>
+    <dd>Equivalent to 'make test_{name}' but runs until a failure detected or terminated by user.
     <dt><tt>make run_cmd="{command}" [(above options or targets)]</tt>
-    </dt><dd>Command prefix for tests execution. Also, "run_cmd=-" will ignore test execution failures. See also -k and -i options of the GNU make for more options to keep building and testing despite of failures.</dd>
+    <dd>Command prefix for tests execution. Also, "run_cmd=-" will ignore test execution failures. See also -k and -i options of the GNU make for more options to keep building and testing despite of failures.
     <dt><tt>make debug_{name}</tt>
-    </dt><dd>Equivalent to 'make test_{name}' but compiles in debug mode and runs under debugger ("run_cmd=$(debugger)").</dd>
+    <dd>Equivalent to 'make test_{name}' but compiles in debug mode and runs under debugger ("run_cmd=$(debugger)").
     <dt><tt>make args="{command-line arguments}" [(above options or targets)]</tt>
-    </dt><dd>Additional arguments for the run.</dd>
+    <dd>Additional arguments for the run.
     <dt><tt>make repeat="{N}" [(above options or targets)]</tt>
-    </dt><dd>Repeats execution N times.</dd>
+    <dd>Repeats execution N times.
     <dt><tt>make clean_{filename}</tt>
-    </dt><dd>Removes executable, object, and other intermediate files with specified filename ('*' also works).</dd>
+    <dd>Removes executable, object, and other intermediate files with specified filename ('*' also works).
     <dt><tt>make cfg={debug|release} [(above options or targets)]</tt>
-    </dt><dd>Specifies a build mode or corresponding directory to work in.</dd>
+    <dd>Specifies a build mode or corresponding directory to work in.
     <dt><tt>make tbb_strict=1 [(above options or targets)]</tt>
-    </dt><dd>Enables warnings as errors.</dd>
+    <dd>Enables warnings as errors.
     <dt><tt>make examples/{target}</tt>
-    </dt><dd>Invokes examples/Makefile with specified target.</dd>
+    <dd>Invokes examples/Makefile with specified target. Available in the open-source version only.
+        For the commercial version, you can download Intel TBB Samples at the <a href="https://software.intel.com/en-us/product-code-samples?topic=20828">Intel® Software Product Samples and Tutorials</a> website.
+    <dt><tt>make python_{target} [compiler={icl, icc}]</tt>
+    <dd>Invokes Makefile with the specified target in <a href="../python/index.html">python</a> directory. E.g. 'python_install' target builds and installs the module into Python.
     <dt><tt>make clean_release clean_debug clean_examples</tt>
-    </dt><dd>Removes release or debug build directories, or cleans all examples.</dd>
+    <dd>Removes release or debug build directories, or cleans all examples. The target <tt>clean_examples</tt> is available in the open-source version only.
     <dt><tt>make test_no_depends</tt>
-    </dt><dd>Equivalent to 'make test' but does not check for libraries updates.</dd>
+    <dd>Equivalent to 'make test' but does not check for libraries updates.
     <dt><tt>make info</tt>
-    </dt><dd>Output information about build configuration and directories.</dd>
+    <dd>Output information about build configuration and directories.
     <dt><tt>make cpp0x=1 [(above options or targets)]</tt>
-    </dt><dd>Enables C++0x extensions like lambdas for compilers that implement them as experimental features.</dd>
+    <dd>Enables C++0x extensions like lambdas for compilers that implement them as experimental features.
     <dt><tt>make CXXFLAGS={Flags} [(above options or targets)]</tt>
-    </dt><dd>Specifies additional options for compiler.</dd>
+    <dd>Specifies additional options for compiler.
     <dt><tt>make target={name} [(above options or targets)]</tt>
-    </dt><dd>Includes additional build/{name}.inc file after OS-specific one.</dd>
+    <dd>Includes additional build/{name}.inc file after OS-specific one.
     <dt><tt>make extra_inc={filename} [(above options or targets)]</tt>
-    </dt><dd>Includes additional makefile.</dd>
+    <dd>Includes additional makefile.
+    </dl>
 
-    </dd></dl>
-</dd></dl>
-
-<HR>
+<HR/>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/src/old/concurrent_queue_v2.cpp b/src/old/concurrent_queue_v2.cpp
index e019494..bf7e6e6 100644
--- a/src/old/concurrent_queue_v2.cpp
+++ b/src/old/concurrent_queue_v2.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "concurrent_queue_v2.h"
@@ -176,15 +176,15 @@ bool micro_queue::pop( void* dst, ticket k, concurrent_queue_base& base ) {
     k &= -concurrent_queue_rep::n_queue;
     spin_wait_until_eq( head_counter, k );
     spin_wait_while_eq( tail_counter, k );
-    page& p = *head_page;
-    __TBB_ASSERT( &p, NULL );
+    page *p = head_page;
+    __TBB_ASSERT( p, NULL );
     size_t index = modulo_power_of_two( k/concurrent_queue_rep::n_queue, base.items_per_page );
     bool success = false;
     {
-        pop_finalizer finalizer( *this, k+concurrent_queue_rep::n_queue, index==base.items_per_page-1 ? &p : NULL );
-        if( p.mask & uintptr_t(1)<<index ) {
+        pop_finalizer finalizer( *this, k+concurrent_queue_rep::n_queue, index==base.items_per_page-1 ? p : NULL );
+        if( p->mask & uintptr_t(1)<<index ) {
             success = true;
-            base.assign_and_destroy_item( dst, p, index );
+            base.assign_and_destroy_item( dst, *p, index );
         }
     }
     return success;
diff --git a/src/old/concurrent_queue_v2.h b/src/old/concurrent_queue_v2.h
index 662c066..54dd822 100644
--- a/src/old/concurrent_queue_v2.h
+++ b/src/old/concurrent_queue_v2.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_concurrent_queue_H
@@ -215,11 +215,11 @@ class concurrent_queue: public internal::concurrent_queue_base {
         return static_cast<T*>(static_cast<void*>(&pg+1))[index];
     }
 
-    /*override*/ virtual void copy_item( page& dst, size_t index, const void* src ) {
-        new( &get_ref(dst,index) ) T(*static_cast<const T*>(src)); 
+    virtual void copy_item( page& dst, size_t index, const void* src ) __TBB_override {
+        new( &get_ref(dst,index) ) T(*static_cast<const T*>(src));
     }
 
-    /*override*/ virtual void assign_and_destroy_item( void* dst, page& src, size_t index ) {
+    virtual void assign_and_destroy_item( void* dst, page& src, size_t index ) __TBB_override {
         T& from = get_ref(src,index);
         destroyer d(from);
         *static_cast<T*>(dst) = from;
diff --git a/src/old/concurrent_vector_v2.cpp b/src/old/concurrent_vector_v2.cpp
index e65f4f4..9d930d1 100644
--- a/src/old/concurrent_vector_v2.cpp
+++ b/src/old/concurrent_vector_v2.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 #include "concurrent_vector_v2.h"
diff --git a/src/old/concurrent_vector_v2.h b/src/old/concurrent_vector_v2.h
index 5ea35cd..28fa2e1 100644
--- a/src/old/concurrent_vector_v2.h
+++ b/src/old/concurrent_vector_v2.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_concurrent_vector_H
diff --git a/src/old/spin_rw_mutex_v2.cpp b/src/old/spin_rw_mutex_v2.cpp
index 4be6cfd..02cf633 100644
--- a/src/old/spin_rw_mutex_v2.cpp
+++ b/src/old/spin_rw_mutex_v2.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "spin_rw_mutex_v2.h"
diff --git a/src/old/spin_rw_mutex_v2.h b/src/old/spin_rw_mutex_v2.h
index ff0657c..12e097d 100644
--- a/src/old/spin_rw_mutex_v2.h
+++ b/src/old/spin_rw_mutex_v2.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_spin_rw_mutex_H
diff --git a/src/old/task_v2.cpp b/src/old/task_v2.cpp
index 92f8bad..9b569c3 100644
--- a/src/old/task_v2.cpp
+++ b/src/old/task_v2.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /*  This compilation unit provides definition of task::destroy( task& )
diff --git a/src/old/test_concurrent_queue_v2.cpp b/src/old/test_concurrent_queue_v2.cpp
index 7e8cc96..986e722 100644
--- a/src/old/test_concurrent_queue_v2.cpp
+++ b/src/old/test_concurrent_queue_v2.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 #include "old/concurrent_queue_v2.h"
diff --git a/src/old/test_concurrent_vector_v2.cpp b/src/old/test_concurrent_vector_v2.cpp
index a473874..1d0fd2a 100644
--- a/src/old/test_concurrent_vector_v2.cpp
+++ b/src/old/test_concurrent_vector_v2.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "concurrent_vector_v2.h"
diff --git a/src/old/test_mutex_v2.cpp b/src/old/test_mutex_v2.cpp
index 3f6a010..e6d9c3d 100644
--- a/src/old/test_mutex_v2.cpp
+++ b/src/old/test_mutex_v2.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #define HARNESS_DEFAULT_MIN_THREADS 1
diff --git a/src/old/test_task_scheduler_observer_v3.cpp b/src/old/test_task_scheduler_observer_v3.cpp
index 7867d9f..cfd772b 100644
--- a/src/old/test_task_scheduler_observer_v3.cpp
+++ b/src/old/test_task_scheduler_observer_v3.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 //TODO: when removing TBB_PREVIEW_LOCAL_OBSERVER, change the header or defines here
@@ -26,8 +26,8 @@ const int MaxFlagIndex = sizeof(FlagType)*8-1;
 
 class MyObserver: public tbb::task_scheduler_observer {
     FlagType flags;
-    /*override*/ void on_scheduler_entry( bool is_worker );
-    /*override*/ void on_scheduler_exit( bool is_worker );
+    void on_scheduler_entry( bool is_worker ) __TBB_override;
+    void on_scheduler_exit( bool is_worker ) __TBB_override;
 public:
     MyObserver( FlagType flags_ ) : flags(flags_) {
         observe(true);
@@ -70,7 +70,7 @@ class FibTask: public tbb::task {
     FlagType flags;
 public:
     FibTask( int n_, FlagType flags_ ) : n(n_), flags(flags_) {}
-    /*override*/ tbb::task* execute() {
+    tbb::task* execute() __TBB_override {
         ASSERT( !(~LocalState->MyFlags & flags), NULL );
         if( n>=2 ) {
             set_ref_count(3);
diff --git a/src/perf/coarse_grained_raii_lru_cache.h b/src/perf/coarse_grained_raii_lru_cache.h
index cce4d58..9b11400 100644
--- a/src/perf/coarse_grained_raii_lru_cache.h
+++ b/src/perf/coarse_grained_raii_lru_cache.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 #ifndef coarse_grained_raii_lru_cache_H
@@ -23,6 +23,8 @@
 
 #include <map>
 #include <list>
+#include <utility>
+#include <algorithm>
 
 #include "tbb/spin_mutex.h"
 #include "tbb/tbb_stddef.h"
diff --git a/src/perf/cpq_pdes.cpp b/src/perf/cpq_pdes.cpp
index 2d84ce0..c54eb8f 100644
--- a/src/perf/cpq_pdes.cpp
+++ b/src/perf/cpq_pdes.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include <cstdlib>
@@ -73,13 +73,12 @@ unsigned int one_us_iters = 429; // default value
 // if user wants to calibrate to microseconds on particular machine, call this at beginning of program
 // sets one_us_iters to number of iters to busy_wait for approx. 1 us
 void calibrate_busy_wait() {
-    tbb::tick_count t0, t1;
+    const unsigned niter = 1000000;
+    tbb::tick_count t0 = tbb::tick_count::now();
+    for (volatile unsigned int i=0; i<niter; ++i) continue;
+    tbb::tick_count t1 = tbb::tick_count::now();
 
-    t0 = tbb::tick_count::now();
-    for (volatile unsigned int i=0; i<1000000; ++i) continue;
-    t1 = tbb::tick_count::now();
-    
-    one_us_iters = (1000000.0/(t1-t0).seconds())*0.000001;
+    one_us_iters = (unsigned int)(niter/(t1-t0).seconds())*1e-6;
     printf("one_us_iters: %d\n", one_us_iters);
 }
 
diff --git a/src/perf/fibonacci_impl_tbb.cpp b/src/perf/fibonacci_impl_tbb.cpp
index 41643f6..158ddb4 100644
--- a/src/perf/fibonacci_impl_tbb.cpp
+++ b/src/perf/fibonacci_impl_tbb.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 #include <cstdio>
diff --git a/src/perf/perf.cpp b/src/perf/perf.cpp
index f239639..36a3ba8 100644
--- a/src/perf/perf.cpp
+++ b/src/perf/perf.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "perf.h"
diff --git a/src/perf/perf.h b/src/perf/perf.h
index 5a9fb25..fb5f2ce 100644
--- a/src/perf/perf.h
+++ b/src/perf/perf.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __tbb_perf_h__
diff --git a/src/perf/perf_sched.cpp b/src/perf/perf_sched.cpp
index 29a58b4..321fed6 100644
--- a/src/perf/perf_sched.cpp
+++ b/src/perf/perf_sched.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "perf.h"
diff --git a/src/perf/run_statistics.sh b/src/perf/run_statistics.sh
index f17124e..ac7ffd7 100644
--- a/src/perf/run_statistics.sh
+++ b/src/perf/run_statistics.sh
@@ -1,22 +1,22 @@
 #!/bin/bash
 #
-# Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-#
-# This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-# you can redistribute it and/or modify it under the terms of the GNU General Public License
-# version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-# Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-#
-# As a special exception,  you may use this file  as part of a free software library without
-# restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-# functions from this file, or you compile this file and link it with other files to produce
-# an executable,  this file does not by itself cause the resulting executable to be covered
-# by the GNU General Public License. This exception does not however invalidate any other
-# reasons why the executable file might be covered by the GNU General Public License.
+# Copyright (c) 2005-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+#
 
 export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
 #setting output format .csv, 'pivot' - is pivot table mode, ++ means append
diff --git a/src/perf/statistics.cpp b/src/perf/statistics.cpp
index 3c4159b..f0c190b 100644
--- a/src/perf/statistics.cpp
+++ b/src/perf/statistics.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 #include "statistics.h"
diff --git a/src/perf/statistics.h b/src/perf/statistics.h
index 6e93575..7113a7e 100644
--- a/src/perf/statistics.h
+++ b/src/perf/statistics.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Internal Intel tool
diff --git a/src/perf/statistics_xml.h b/src/perf/statistics_xml.h
index 017b674..396241d 100644
--- a/src/perf/statistics_xml.h
+++ b/src/perf/statistics_xml.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 const char XMLBRow[]=
diff --git a/src/perf/time_cpq_throughput_test.cpp b/src/perf/time_cpq_throughput_test.cpp
index 0e8a650..02f9bfd 100644
--- a/src/perf/time_cpq_throughput_test.cpp
+++ b/src/perf/time_cpq_throughput_test.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #define HARNESS_CUSTOM_MAIN 1
@@ -107,13 +107,12 @@ unsigned int one_us_iters = 345; // default value
 // this at beginning of program; sets one_us_iters to number of iters to 
 // busy_wait for approx. 1 us
 void calibrate_busy_wait() {
-    tbb::tick_count t0, t1;
+    const unsigned niter = 1000000;
+    tbb::tick_count t0 = tbb::tick_count::now();
+    for (volatile unsigned int i=0; i<niter; ++i) continue;
+    tbb::tick_count t1 = tbb::tick_count::now();
 
-    t0 = tbb::tick_count::now();
-    for (volatile unsigned int i=0; i<1000000; ++i) continue;
-    t1 = tbb::tick_count::now();
-    
-    one_us_iters = (unsigned int)((1000000.0/(t1-t0).seconds())*0.000001);
+    one_us_iters = (unsigned int)(niter/(t1-t0).seconds())*1e-6;
     printf("one_us_iters: %d\n", one_us_iters);
 }
 
diff --git a/src/perf/time_fibonacci_cutoff.cpp b/src/perf/time_fibonacci_cutoff.cpp
index 9874b3c..2a9e74d 100644
--- a/src/perf/time_fibonacci_cutoff.cpp
+++ b/src/perf/time_fibonacci_cutoff.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include <cstdio>
diff --git a/src/perf/time_framework.h b/src/perf/time_framework.h
index d5e340d..a749dff 100644
--- a/src/perf/time_framework.h
+++ b/src/perf/time_framework.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TIME_FRAMEWORK_H__
@@ -143,7 +143,7 @@ class NanosecPerValue : public Tester {
         Timer timer;
         Tester::test(testn, threadn);
         // return time (ns) per value
-        return timer.get_time()*1000000.0/double(Tester::value);
+        return timer.get_time()*1e+9/double(Tester::value);
     }
 };
 
diff --git a/src/perf/time_hash_map.cpp b/src/perf/time_hash_map.cpp
index 851e2fc..690d092 100644
--- a/src/perf/time_hash_map.cpp
+++ b/src/perf/time_hash_map.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // configuration:
@@ -45,8 +45,8 @@
 // needed by hash_maps
 #include <stdexcept>
 #include <iterator>
-#include <algorithm>                 // std::swap
-#include <utility>      // Need std::pair from here
+#include <algorithm>    // Need std::swap
+#include <utility>      // Need std::pair
 #include "tbb/cache_aligned_allocator.h"
 #include "tbb/tbb_allocator.h"
 #include "tbb/spin_rw_mutex.h"
diff --git a/src/perf/time_hash_map_fill.cpp b/src/perf/time_hash_map_fill.cpp
index 13efc41..f091937 100644
--- a/src/perf/time_hash_map_fill.cpp
+++ b/src/perf/time_hash_map_fill.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // configuration:
@@ -26,19 +26,21 @@ int MAX_TABLE_SIZE = 2000000;
 // Specify list of unique percents (5-30,100) to test against. Max 10 values
 #define UNIQUE_PERCENTS PERCENT(5); PERCENT(10); PERCENT(20); PERCENT(30); PERCENT(100)
 
+#define SECONDS_RATIO 1000000 // microseconds
+
 // enable/disable tests for:
 #define BOX1 "CHMap"
-#define BOX1TEST ValuePerSecond<Uniques<tbb::concurrent_hash_map<int,int> >, 1000000/*ns*/>
+#define BOX1TEST ValuePerSecond<Uniques<tbb::concurrent_hash_map<int,int> >, SECONDS_RATIO>
 #define BOX1HEADER "tbb/concurrent_hash_map.h"
 
 // enable/disable tests for:
 #define BOX2 "CUMap"
-#define BOX2TEST ValuePerSecond<Uniques<tbb::concurrent_unordered_map<int,int> >, 1000000/*ns*/>
+#define BOX2TEST ValuePerSecond<Uniques<tbb::concurrent_unordered_map<int,int> >, SECONDS_RATIO>
 #define BOX2HEADER "tbb/concurrent_unordered_map.h"
 
 // enable/disable tests for:
 //#define BOX3 "OLD"
-#define BOX3TEST ValuePerSecond<Uniques<tbb::concurrent_hash_map<int,int> >, 1000000/*ns*/>
+#define BOX3TEST ValuePerSecond<Uniques<tbb::concurrent_hash_map<int,int> >, SECONDS_RATIO>
 #define BOX3HEADER "tbb/concurrent_hash_map-5468.h"
 
 #define TBB_USE_THREADING_TOOLS 0
@@ -52,7 +54,7 @@ int MAX_TABLE_SIZE = 2000000;
 // needed by hash_maps
 #include <stdexcept>
 #include <iterator>
-#include <algorithm>                 // std::swap
+#include <algorithm>    // Need std::swap
 #include <utility>      // Need std::pair
 #include <cstring>      // Need std::memset
 #include <typeinfo>
@@ -108,8 +110,8 @@ struct Uniques : TesterBase {
     // Executes test mode for a given thread. Return value is ignored when used with timing wrappers.
     /*override*/ double test(int testn, int t)
     {
-        if( testn != 1 ) { // do insertions
-            for(int i = testn*value+t*n_items, e = testn*value+(t+1)*n_items; i < e; i++) {
+        if( testn == 0 ) { // do insertions
+            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
                 Table.insert( std::make_pair(Data[i],t) );
             }
         } else { // do last finds
@@ -138,7 +140,7 @@ void execute_percent(test_sandbox &the_test, int p) {
     int uniques = p==100?std::numeric_limits<int>::max() : MAX_TABLE_SIZE;
     ASSERT(p==100 || p <= 30, "Function is broken for %% > 30 except for 100%%");
     for(int i = 0; i < input_size; i++)
-        Data[i] = rand()%uniques;
+        Data[i] = (rand()*rand())%uniques;
     for(int t = MinThread; t <= MaxThread; t++)
         the_test.factory(input_size, t); // executes the tests specified in BOX-es for given 'value' and threads
     the_test.report.SetRoundTitle(rounds++, "%d%%", p);
@@ -158,7 +160,7 @@ int main(int argc, char* argv[]) {
     test_sandbox the_test("time_hash_map_fill"/*, StatisticsCollector::ByThreads*/);
     srand(10101);
     UNIQUE_PERCENTS; // test the percents
-    the_test.report.SetTitle("Operations per nanosecond");
+    the_test.report.SetTitle("Operations per microsecond");
     the_test.report.SetRunInfo("Items", MAX_TABLE_SIZE);
     the_test.report.Print(StatisticsCollector::HTMLFile|StatisticsCollector::ExcelXML); // Write files
     return 0;
diff --git a/src/perf/time_hash_map_fill.html b/src/perf/time_hash_map_fill.html
index fda62d1..766e85e 100644
--- a/src/perf/time_hash_map_fill.html
+++ b/src/perf/time_hash_map_fill.html
@@ -5,16 +5,18 @@ It was derived from the Count Strings example that counts the number of unique w
 it was simplified to build just a set of unique numbers from an input array. The array is filled evenly by using a pseudo-random number generator from the standard C library for various proportions of unique numbers.
 For example, for 5% of unique numbers, the same number is repeated 20 times on average. Together, it gives 5% of actual insertions and 95% are just lookups. However, in the beginning, there are more new keys occur than in the end.
 In addition, a size of the source array correlates with input rates in order to produce the same number of unique keys at the end, and so exclude cache effects from the equation.
-<H2>Diagram</H2><img src="time_hash_map_fill.gif">
+</P>
+<H2>Diagram</H2><img src="time_hash_map_fill.gif"/>
 <H3>Prepare results</H3>
 <P>This benchmark outputs results in Excel* and html file formats by default. To generate text (CSV) file instead, specify STAT_FORMAT=pivot-csv evironment variable. To change the default table size, set TABLE_SIZE.
 <code><b><pre>src$    make time_hash_map_fill args=-v STAT_FORMAT=pivot-csv TABLE_SIZE=250000</pre></b></code>Or to get statistics from different runs:
 <code><b><pre>src$    make time_hash_map_fill TABLE_SIZE=50000 run_cmd="bash ../../src/perf/<a href=run_statistics.sh>run_statistics.sh</a>"</pre></b></code>
+</P>
 <H3>Build diagram</H3>You can use <a href="http://ploticus.sourceforge.net/">Ploticus</a> to build diagram from the prepared data using this html file as a script. But first, the input data file should be sorted to join lines from different runs together, e.g.:
 <code><b><pre>src$    sort -t , -k 1dr,2 -k 3n,4 -k 7n,7 ../build/<i>{scrambled_path}</i>/time_hash_map_fill.csv -o perf/time_hash_map_fill.csv</pre></b></code>Here, field 7 is "Column" field that contains input rates because run_statistics.sh adds hostname and number of the run as 5 and 6 fields. Now, to build gif diagram, run:
 <code><b><pre>perf$   pl -maxrows 200000 -maxfields 1500000 -maxvector 1200000 -gif -scale 1.8 time_hash_map_fill.html</pre></b></code>
 <H3>Script body</H3>
-<hr><pre>
+<hr/><pre>
 
 #setifnotgiven NAMES = $makelist("1.CHMap 2.CUMap 3.OLD")
 #setifnotgiven LABLESIZE = 0.06
@@ -107,10 +109,10 @@ In addition, a size of the source array correlates with input rates in order to
   seglen: 0.2
 #endproc
 </pre>
-<HR>
+<HR/>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/src/perf/time_locked_work.cpp b/src/perf/time_locked_work.cpp
index 42db238..3a966bb 100644
--- a/src/perf/time_locked_work.cpp
+++ b/src/perf/time_locked_work.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 ////// Test configuration ////////////////////////////////////////////////////
@@ -52,8 +52,8 @@ int inner_work[] = {32, 8, 0 };
 
 #include <cstdlib>
 #include <math.h>
-#include <algorithm>                 // std::swap
-#include <utility>      // Need std::pair from here
+#include <algorithm>    // Need std::swap
+#include <utility>      // Need std::pair
 #include <sstream>
 #include "tbb/tbb_stddef.h"
 #include "tbb/null_mutex.h"
diff --git a/src/perf/time_lru_cache_throughput.cpp b/src/perf/time_lru_cache_throughput.cpp
index c310ff9..151ef06 100644
--- a/src/perf/time_lru_cache_throughput.cpp
+++ b/src/perf/time_lru_cache_throughput.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "../examples/common/utility/utility.h"
@@ -54,11 +54,12 @@ namespace utils{
     // this at beginning of program; sets one_us_iters to number of iters to
     // busy_wait for approx. 1 us
     void calibrate_busy_wait() {
+        const unsigned niter = 1000000;
         tbb::tick_count t0 = tbb::tick_count::now();
-        for (volatile unsigned int i=0; i<1000000; ++i) continue;
+        for (volatile unsigned int i=0; i<niter; ++i) continue;
         tbb::tick_count t1 = tbb::tick_count::now();
 
-        one_us_iters = (unsigned int)((1000000.0/(t1-t0).seconds())*0.000001);
+        one_us_iters = (unsigned int)(niter/(t1-t0).seconds())*1e-6;
     }
 
     void busy_wait(int us)
diff --git a/src/perf/time_parallel_for_each.cpp b/src/perf/time_parallel_for_each.cpp
new file mode 100644
index 0000000..10e99c0
--- /dev/null
+++ b/src/perf/time_parallel_for_each.cpp
@@ -0,0 +1,70 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+#include <vector>
+#include <list>
+#include <iostream>
+#include <cstdlib>
+#include <algorithm>
+#include <string>
+
+#include "tbb/parallel_for_each.h"
+#include "tbb/tick_count.h"
+
+template <typename Type>
+void foo( Type &f ) {
+    f += 1.0f;
+}
+
+template <typename Container>
+void test( std::string testName, const int N, const int numRepeats ) {
+    typedef typename Container::value_type Type;
+    Container v;
+
+    for ( int i = 0; i < N; ++i ) {
+        v.push_back( static_cast<Type>(std::rand()) );
+    }
+
+    std::vector<double> times;
+    times.reserve( numRepeats );
+
+    for ( int i = 0; i < numRepeats; ++i ) {
+        tbb::tick_count t0 = tbb::tick_count::now();
+        tbb::parallel_for_each( v.begin(), v.end(), foo<Type> );
+        tbb::tick_count t1 = tbb::tick_count::now();
+        times.push_back( (t1 - t0).seconds()*1e+3 );
+    }
+
+    std::sort( times.begin(), times.end() );
+    std::cout << "Test " << testName << std::endl
+        << "min " << times[times.size() / 20] << " ms " << std::endl
+        << "med " << times[times.size() / 2] << " ms " << std::endl
+        << "max " << times[times.size() - times.size() / 20 - 1] << " ms " << std::endl;
+}
+
+int main( int argc, char* argv[] ) {
+    const int N = argc > 1 ? std::atoi( argv[1] ) : 10 * 1000;
+    const int numRepeats = argc > 2 ? std::atoi( argv[2] ) : 10;
+
+    test< std::vector<float> >( "std::vector<float>", N, numRepeats );
+    test< std::list<float> >( "std::list<float>", N / 100, numRepeats );
+
+    return 0;
+}
diff --git a/src/perf/time_sandbox.h b/src/perf/time_sandbox.h
index 8e2cc76..120b1b5 100644
--- a/src/perf/time_sandbox.h
+++ b/src/perf/time_sandbox.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 #ifndef __TIME_FRAMEWORK_H__
diff --git a/src/perf/time_split_node.cpp b/src/perf/time_split_node.cpp
new file mode 100644
index 0000000..dab9ac4
--- /dev/null
+++ b/src/perf/time_split_node.cpp
@@ -0,0 +1,120 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+#include <iostream>
+#include "tbb/flow_graph.h"
+#include "tbb/tick_count.h"
+#include "tbb/task_scheduler_init.h"
+
+static double bm_split_node(tbb::flow::graph& g, int nIter);
+static double bm_broadcast_node(tbb::flow::graph& g, int nIter);
+static double bm_queue_node(tbb::flow::graph& g, int nIter);
+
+typedef int my_type;
+//typedef std::vector<int> my_type;
+
+const int nIter = 1 << 24; //16M
+const int nSize = 100000000;
+
+int main()
+{
+    //set up one thread to eliminate scheduler overheads
+    tbb::task_scheduler_init tsi(1);
+
+    tbb::flow::graph g;
+
+    //1. queue_node benchmark; calculate queue_node time + plus threads creation time (if we have multi-threading)
+    std::cout << "queue benchmark: number of calls of putting element:" << nIter;
+    const double tQueue = bm_queue_node(g, nIter);
+    std::cout << ";  time:" << tQueue << std::endl << std::endl;
+
+    //2. split_node benchmark
+    std::cout << "split_node benchmark: number of calls:" << nIter;
+    const double tSplitNode = bm_split_node(g, nIter);
+    //output split_node benchmark result
+    std::cout << ";  time:" << tSplitNode << std::endl;
+    std::cout << "exclusive split_node time:" << tSplitNode - tQueue << std::endl << std::endl;
+
+    //3. broadcast_node benchmark
+    std::cout << "broadcast_node benchmark: number of calls:" << nIter;
+    const double tBNode = bm_broadcast_node(g, nIter);
+    //output broadcast_node benchmark result
+    std::cout << ";  time:" << tBNode << std::endl;
+    std::cout << "exclusive broadcast_node time:" << tBNode - tQueue << std::endl;
+
+    return 0;
+}
+
+//! Dummy executing split_node, "nIter" calls; Returns time in seconds.
+double bm_split_node(tbb::flow::graph& g, int nIter)
+{
+    my_type v1(nSize);
+
+    tbb::flow::queue_node<my_type> my_queue1(g);
+    tbb::flow::tuple<my_type> my_tuple(1);
+
+    tbb::flow::split_node< tbb::flow::tuple<my_type> > my_split_node(g);
+    make_edge(tbb::flow::get<0>(my_split_node.output_ports()), my_queue1);
+
+    const tbb::tick_count t0 = tbb::tick_count::now();
+
+    //using split_node
+    for (int i = 0; i < nIter; ++i)
+        my_split_node.try_put(my_tuple); 
+
+    //barrier sync
+    g.wait_for_all();
+
+    return (tbb::tick_count::now() - t0).seconds();
+}
+
+//! Dummy executing broadcast_node; "nIter" calls; Returns time in seconds.
+double bm_broadcast_node(tbb::flow::graph& g, int nIter)
+{
+    tbb::flow::queue_node<my_type> my_queue(g);
+    tbb::flow::broadcast_node<my_type> my_broadcast_node(g);
+    make_edge(my_broadcast_node, my_queue);
+
+    my_type v(nSize);
+
+    const tbb::tick_count t0 = tbb::tick_count::now();
+
+    //using broadcast_node
+    for (int i = 0; i < nIter; ++i)
+        my_broadcast_node.try_put(v);
+    //barrier sync
+    g.wait_for_all();
+
+    return (tbb::tick_count::now() - t0).seconds();
+}
+
+double bm_queue_node(tbb::flow::graph& g, int nIter)
+{
+    tbb::flow::queue_node<my_type> first_queue(g);
+
+    my_type v(nSize);
+
+    tbb::tick_count t0 = tbb::tick_count::now();
+    //using queue_node
+    for (int i = 0; i < nIter; ++i)
+        first_queue.try_put(v);
+    g.wait_for_all();
+    return (tbb::tick_count::now() - t0).seconds();
+}
diff --git a/src/perf/time_vector.cpp b/src/perf/time_vector.cpp
index 9642f78..02ae84c 100644
--- a/src/perf/time_vector.cpp
+++ b/src/perf/time_vector.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 //#define DO_SCALABLEALLOC
@@ -93,9 +93,9 @@ public:
             dv[len-i-1] = timer0.diff_time(tv[i]);
             tv[i].mark_time();
         }
-        stat.AddStatisticValue( key[2], "1total, ms", "%.3f", timer2.get_time()*1000.0 );
-        stat.AddStatisticValue( key[1], "1total, ms", "%.3f", timer1.diff_time(timer2)*1000.0 );
-        stat.AddStatisticValue( key[0], "1total, ms", "%.3f", timer0.diff_time(timer1)*1000.0 );
+        stat.AddStatisticValue( key[2], "1total, ms", "%.3f", timer2.get_time()*1e+3 );
+        stat.AddStatisticValue( key[1], "1total, ms", "%.3f", timer1.diff_time(timer2)*1e+3 );
+        stat.AddStatisticValue( key[0], "1total, ms", "%.3f", timer0.diff_time(timer1)*1e+3 );
         //allocator statistics
         stat.AddStatisticValue( key[0], "2total allocations", "%d", int(timers_vector_t::allocator_type::allocations) );
         stat.AddStatisticValue( key[1], "2total allocations", "%d", int(values_vector_t::allocator_type::allocations) );
@@ -104,13 +104,13 @@ public:
         stat.AddStatisticValue( key[1], "3total alloc#items", "%d", int(values_vector_t::allocator_type::items_allocated) );
         stat.AddStatisticValue( key[2], "3total alloc#items", "%d",  0);
         //remarks
-        stat.AddStatisticValue( key[0], "9note", "segment creation time, ns:");
-        stat.AddStatisticValue( key[2], "9note", "average op-time per item, ns:");
+        stat.AddStatisticValue( key[0], "9note", "segment creation time, us:");
+        stat.AddStatisticValue( key[2], "9note", "average op-time per item, us:");
         Timer last_timer(timer2); double last_value = 0;
         for (size_t j = 0, i = 2; i < len; i *= 2, j++) {
-            stat.AddRoundResult( key[0], (dv[len-i-1]-last_value)*1000000.0 );
+            stat.AddRoundResult( key[0], (dv[len-i-1]-last_value)*1e+6 );
             last_value = dv[len-i-1];
-            stat.AddRoundResult( key[2], last_timer.diff_time(tv[i])/double(i)*1000000.0 );
+            stat.AddRoundResult( key[2], last_timer.diff_time(tv[i])/double(i)*1e+6 );
             last_timer = tv[i];
             stat.SetRoundTitle(j, i);
         }
@@ -154,10 +154,10 @@ public:
             std::sort(v2.rbegin(), v2.rend());
             std::set_intersection(v1.begin(), v1.end(), v2.rbegin(), v2.rend(), v1.begin());
             Timer timer3;
-            stat.AddRoundResult( proc_key, timer2.diff_time(timer3)*1000.0 );
-            stat.AddRoundResult( fill_key, timer1.diff_time(timer2)*1000.0 );
-            stat.AddRoundResult( init_key, timer0.diff_time(timer1)*1000.0 );
-            stat.AddRoundResult( full_key, timer0.diff_time(timer3)*1000.0 );
+            stat.AddRoundResult( proc_key, timer2.diff_time(timer3)*1e+3 );
+            stat.AddRoundResult( fill_key, timer1.diff_time(timer2)*1e+3 );
+            stat.AddRoundResult( init_key, timer0.diff_time(timer1)*1e+3 );
+            stat.AddRoundResult( full_key, timer0.diff_time(timer3)*1e+3 );
         }
         stat.SetStatisticFormula("1Average", "=AVERAGE(ROUNDS)");
         stat.SetStatisticFormula("2+/-", "=(MAX(ROUNDS)-MIN(ROUNDS))/2");
diff --git a/src/rml/client/index.html b/src/rml/client/index.html
index 582cd19..53152ca 100644
--- a/src/rml/client/index.html
+++ b/src/rml/client/index.html
@@ -7,31 +7,31 @@ This directory has source code that must be statically linked into an RML client
 <H2>Files</H2>
 
 <DL>
-<DT><P><A HREF="rml_factory.h">rml_factory.h</A>
+<DT><A HREF="rml_factory.h">rml_factory.h</A>
 <DD>Text shared by <A HREF="rml_omp.cpp">rml_omp.cpp</A> and <A HREF="rml_tbb.cpp">rml_tbb.cpp</A>.
-       This is not an ordinary include file, so it does not have an #ifndef guard.</P>
+       This is not an ordinary include file, so it does not have an #ifndef guard.</DD></DT>
 </DL>
 
 <H3> Specific to client=OpenMP</H3>
 <DL>
-<DT><P><A HREF="rml_omp.cpp">rml_omp.cpp</A>
-<DD>Source file for OpenMP client.</P>
-<DT><P><A HREF="omp_dynamic_link.h">omp_dynamic_link.h</A>
+<DT><A HREF="rml_omp.cpp">rml_omp.cpp</A>
+<DD>Source file for OpenMP client.</DD></DT>
+<DT><A HREF="omp_dynamic_link.h">omp_dynamic_link.h</A></DT>
 <DT><A HREF="omp_dynamic_link.cpp">omp_dynamic_link.cpp</A>
 <DD>Source files for dynamic linking support.  
        The code is the code from the TBB source directory, but adjusted so that it 
-       appears in namespace <TT>__kmp</TT> instead of namespace <TT>tbb::internal</TT>.
+       appears in namespace <TT>__kmp</TT> instead of namespace <TT>tbb::internal</TT>.</DD></DT>
 </DL>
 <H3> Specific to client=TBB</H3>
 <DL>
-<DT><P><A HREF="rml_tbb.cpp">rml_tbb.cpp</A>
-<DD>Source file for TBB client.  It uses the dynamic linking support from the TBB source directory.
+<DT><A HREF="rml_tbb.cpp">rml_tbb.cpp</A>
+<DD>Source file for TBB client.  It uses the dynamic linking support from the TBB source directory.</DD></DT>
 </DL>
 
-<HR>
+<HR/>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/src/rml/client/library_assert.h b/src/rml/client/library_assert.h
index b626bbe..df3fcdb 100644
--- a/src/rml/client/library_assert.h
+++ b/src/rml/client/library_assert.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef LIBRARY_ASSERT_H
diff --git a/src/rml/client/omp_dynamic_link.cpp b/src/rml/client/omp_dynamic_link.cpp
index 2c0d7ca..e9a8d2e 100644
--- a/src/rml/client/omp_dynamic_link.cpp
+++ b/src/rml/client/omp_dynamic_link.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "omp_dynamic_link.h"
diff --git a/src/rml/client/omp_dynamic_link.h b/src/rml/client/omp_dynamic_link.h
index 0c491e7..3020293 100644
--- a/src/rml/client/omp_dynamic_link.h
+++ b/src/rml/client/omp_dynamic_link.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __KMP_omp_dynamic_link_H
diff --git a/src/rml/client/rml_factory.h b/src/rml/client/rml_factory.h
index 4dd421c..0c4626a 100644
--- a/src/rml/client/rml_factory.h
+++ b/src/rml/client/rml_factory.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // No ifndef guard because this file is not a normal include file.
diff --git a/src/rml/client/rml_omp.cpp b/src/rml/client/rml_omp.cpp
index e80afc7..86935ed 100644
--- a/src/rml/client/rml_omp.cpp
+++ b/src/rml/client/rml_omp.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "rml_omp.h"
diff --git a/src/rml/client/rml_tbb.cpp b/src/rml/client/rml_tbb.cpp
index fa71ff9..5842d1e 100644
--- a/src/rml/client/rml_tbb.cpp
+++ b/src/rml/client/rml_tbb.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "../include/rml_tbb.h"
diff --git a/src/rml/include/index.html b/src/rml/include/index.html
index f740c66..46c8b0a 100644
--- a/src/rml/include/index.html
+++ b/src/rml/include/index.html
@@ -18,7 +18,7 @@ This directory has the include files for the Resource Management Layer (RML).
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/src/rml/include/rml_base.h b/src/rml/include/rml_base.h
index 7cee52e..951026f 100644
--- a/src/rml/include/rml_base.h
+++ b/src/rml/include/rml_base.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Header guard and namespace names follow rml conventions.
diff --git a/src/rml/include/rml_omp.h b/src/rml/include/rml_omp.h
index 51757d7..103936b 100644
--- a/src/rml/include/rml_omp.h
+++ b/src/rml/include/rml_omp.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Header guard and namespace names follow OpenMP runtime conventions.
diff --git a/src/rml/include/rml_tbb.h b/src/rml/include/rml_tbb.h
index e1cac10..ce47f17 100644
--- a/src/rml/include/rml_tbb.h
+++ b/src/rml/include/rml_tbb.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Header guard and namespace names follow TBB conventions.
diff --git a/src/rml/index.html b/src/rml/index.html
index 77aa70b..7c8e7ea 100644
--- a/src/rml/index.html
+++ b/src/rml/index.html
@@ -20,7 +20,7 @@ The subdirectories pertain to the Resource Management Layer (RML).
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/src/rml/perfor/omp_nested.cpp b/src/rml/perfor/omp_nested.cpp
index 9d5cbc0..f0f675f 100644
--- a/src/rml/perfor/omp_nested.cpp
+++ b/src/rml/perfor/omp_nested.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include <cstddef>
diff --git a/src/rml/perfor/omp_simple.cpp b/src/rml/perfor/omp_simple.cpp
index f28db5a..334b571 100644
--- a/src/rml/perfor/omp_simple.cpp
+++ b/src/rml/perfor/omp_simple.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include <cstddef>
diff --git a/src/rml/perfor/tbb_multi_omp.cpp b/src/rml/perfor/tbb_multi_omp.cpp
index 656c7bb..b324d13 100644
--- a/src/rml/perfor/tbb_multi_omp.cpp
+++ b/src/rml/perfor/tbb_multi_omp.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include <cstddef>
diff --git a/src/rml/perfor/tbb_simple.cpp b/src/rml/perfor/tbb_simple.cpp
index 5a42df8..b00bad9 100644
--- a/src/rml/perfor/tbb_simple.cpp
+++ b/src/rml/perfor/tbb_simple.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include <cstddef>
diff --git a/src/rml/perfor/thread_level.h b/src/rml/perfor/thread_level.h
index 333b03e..6a2912e 100644
--- a/src/rml/perfor/thread_level.h
+++ b/src/rml/perfor/thread_level.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Thread level recorder
diff --git a/src/rml/server/index.html b/src/rml/server/index.html
index 932974b..dc24874 100644
--- a/src/rml/server/index.html
+++ b/src/rml/server/index.html
@@ -7,7 +7,7 @@ This directory has source code internal to the server.
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/src/rml/server/irml.rc b/src/rml/server/irml.rc
index 7b4a71f..73a84f8 100644
--- a/src/rml/server/irml.rc
+++ b/src/rml/server/irml.rc
@@ -1,20 +1,20 @@
-// Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+// Copyright (c) 2005-2017 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
 //
-// This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-// you can redistribute it and/or modify it under the terms of the GNU General Public License
-// version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-// Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 //
-// As a special exception,  you may use this file  as part of a free software library without
-// restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-// functions from this file, or you compile this file and link it with other files to produce
-// an executable,  this file does not by itself cause the resulting executable to be covered
-// by the GNU General Public License. This exception does not however invalidate any other
-// reasons why the executable file might be covered by the GNU General Public License.
 
 // Microsoft Visual C++ generated resource script.
 //
@@ -81,7 +81,7 @@ BEGIN
             VALUE "CompanyName", "Intel Corporation\0"
             VALUE "FileDescription", "Intel(R) Threading Building Blocks resource manager library\0"
             VALUE "FileVersion", TBB_VERSION "\0"
-            VALUE "LegalCopyright", "Copyright 2005-2015 Intel Corporation.  All Rights Reserved.\0"
+            VALUE "LegalCopyright", "Copyright 2005-2017 Intel Corporation.  All Rights Reserved.\0"
             VALUE "LegalTrademarks", "\0"
 #ifndef TBB_USE_DEBUG
             VALUE "OriginalFilename", "irml.dll\0"
diff --git a/src/rml/server/job_automaton.h b/src/rml/server/job_automaton.h
index f359c31..8fe81c9 100644
--- a/src/rml/server/job_automaton.h
+++ b/src/rml/server/job_automaton.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __RML_job_automaton_H
@@ -87,8 +87,8 @@ public:
 
     //! Transition 1-->ptr
     /** Should only be called by owner. */
-    void set_and_release( rml::job& job ) {
-        intptr_t value = reinterpret_cast<intptr_t>(&job);
+    void set_and_release( rml::job* job ) {
+        intptr_t value = reinterpret_cast<intptr_t>(job);
         __TBB_ASSERT( (value&1)==0, "job misaligned" );
         __TBB_ASSERT( value!=0, "null job" );
         __TBB_ASSERT( my_job==1, "already set, or not marked busy?" );
@@ -122,7 +122,7 @@ public:
     }
 
     /** Called by non-owner to wait for transition to ptr. */
-    rml::job& wait_for_job() const {
+    rml::job* wait_for_job() const {
         intptr_t snapshot;
         for(;;) {
             snapshot = my_job;
@@ -130,7 +130,7 @@ public:
             __TBB_Yield();
         }
         __TBB_ASSERT( snapshot!=-1, "wait on plugged job_automaton" );
-        return *reinterpret_cast<rml::job*>(snapshot&~1);
+        return reinterpret_cast<rml::job*>(snapshot&~1);
     }
 };
 
diff --git a/src/rml/server/lin-rml-export.def b/src/rml/server/lin-rml-export.def
index a493ca3..5fb069b 100644
--- a/src/rml/server/lin-rml-export.def
+++ b/src/rml/server/lin-rml-export.def
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 {
diff --git a/src/rml/server/rml_server.cpp b/src/rml/server/rml_server.cpp
index 77f8dc0..b259741 100644
--- a/src/rml/server/rml_server.cpp
+++ b/src/rml/server/rml_server.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "rml_tbb.h"
@@ -182,8 +182,8 @@ class omp_dispatch_type {
 public:
     omp_dispatch_type() {job=NULL;}
     void consume();
-    void produce( omp_client& c, job_type& j, void* cookie_, omp_client::size_type index_ PRODUCE_ARG( omp_connection_v2& s )) {
-        __TBB_ASSERT( &j, NULL );
+    void produce( omp_client& c, job_type* j, void* cookie_, omp_client::size_type index_ PRODUCE_ARG( omp_connection_v2& s )) {
+        __TBB_ASSERT( j, NULL );
         __TBB_ASSERT( !job, "job already set" );
         client = &c;
 #if TBB_USE_ASSERT
@@ -192,7 +192,7 @@ public:
         cookie = cookie_;
         index = index_;
         // Must be last
-        job = &j;
+        job = j;
     }
 };
 
@@ -260,7 +260,7 @@ public:
 
     //! Synchronization routine
     inline rml::job* wait_for_job() {
-        if( !my_job ) my_job = &my_job_automaton.wait_for_job();
+        if( !my_job ) my_job = my_job_automaton.wait_for_job();
         return my_job;
     }
 
@@ -325,10 +325,10 @@ class server_thread : public IExecutionContext, public server_thread_rep {
 protected:
     server_thread( bool is_tbb, bool assigned, IScheduler* s, IExecutionResource* r, thread_map& map, rml::client& cl ) : server_thread_rep(assigned,s,r,map,cl), tbb_thread(is_tbb) {}
     ~server_thread() {}
-    /*override*/ unsigned int GetId() const { return uid; }
-    /*override*/ IScheduler* GetScheduler() { return my_scheduler; }
-    /*override*/ IThreadProxy* GetProxy()   { return my_proxy; }
-    /*override*/ void SetProxy( IThreadProxy* thr_proxy ) { my_proxy = thr_proxy; }
+    unsigned int GetId() const __TBB_override { return uid; }
+    IScheduler* GetScheduler() __TBB_override { return my_scheduler; }
+    IThreadProxy* GetProxy()   __TBB_override { return my_proxy; }
+    void SetProxy( IThreadProxy* thr_proxy ) __TBB_override { my_proxy = thr_proxy; }
 
 private:
     bool tbb_thread;
@@ -346,7 +346,7 @@ public:
         activation_count = 0;
     }
     ~tbb_server_thread() {}
-    /*override*/ void Dispatch( DispatchState* );
+    void Dispatch( DispatchState* ) __TBB_override;
     inline bool initiate_termination();
     bool sleep_perhaps();
     //! Switch out this thread
@@ -364,7 +364,7 @@ public:
     omp_server_thread( bool assigned, IScheduler* s, IExecutionResource* r, omp_connection_v2* con, thread_map& map, rml::client& cl ) :
         server_thread(false,assigned,s,r,map,cl), my_conn(con), my_cookie(NULL), my_index(UINT_MAX) {}
     ~omp_server_thread() {}
-    /*override*/ void Dispatch( DispatchState* );
+    void Dispatch( DispatchState* ) __TBB_override;
     inline void* get_cookie() {return my_cookie;}
     inline ::__kmp::rml::omp_client::size_type get_index() {return my_index;}
 
@@ -382,13 +382,13 @@ private:
 template<typename Connection>
 class scheduler : no_copy, public IScheduler {
 public:
-    /*override*/ unsigned int GetId() const {return uid;}
-    /*override*/ void Statistics( unsigned int* /*pTaskCompletionRate*/, unsigned int* /*pTaskArrivalRate*/, unsigned int* /*pNumberOfTaskEnqueued*/) {}
-    /*override*/ SchedulerPolicy GetPolicy() const { __TBB_ASSERT(my_policy,NULL); return *my_policy; }
-    /*override*/ void AddVirtualProcessors( IVirtualProcessorRoot** vproots, unsigned int count ) { if( !my_conn.is_closing() ) my_conn.add_virtual_processors( vproots, count); }
-    /*override*/ void RemoveVirtualProcessors( IVirtualProcessorRoot** vproots, unsigned int count );
-    /*override*/ void NotifyResourcesExternallyIdle( IVirtualProcessorRoot** vproots, unsigned int count ) { __TBB_ASSERT( false, "This call is not allowed for TBB" ); }
-    /*override*/ void NotifyResourcesExternallyBusy( IVirtualProcessorRoot** vproots, unsigned int count ) { __TBB_ASSERT( false, "This call is not allowed for TBB" ); }
+    unsigned int GetId() const __TBB_override {return uid;}
+    void Statistics( unsigned int* /*pTaskCompletionRate*/, unsigned int* /*pTaskArrivalRate*/, unsigned int* /*pNumberOfTaskEnqueued*/) __TBB_override {}
+    SchedulerPolicy GetPolicy() const __TBB_override { __TBB_ASSERT(my_policy,NULL); return *my_policy; }
+    void AddVirtualProcessors( IVirtualProcessorRoot** vproots, unsigned int count ) __TBB_override { if( !my_conn.is_closing() ) my_conn.add_virtual_processors( vproots, count); }
+    void RemoveVirtualProcessors( IVirtualProcessorRoot** vproots, unsigned int count ) __TBB_override;
+    void NotifyResourcesExternallyIdle( IVirtualProcessorRoot** vproots, unsigned int count ) __TBB_override { __TBB_ASSERT( false, "This call is not allowed for TBB" ); }
+    void NotifyResourcesExternallyBusy( IVirtualProcessorRoot** vproots, unsigned int count ) __TBB_override { __TBB_ASSERT( false, "This call is not allowed for TBB" ); }
 protected:
     scheduler( Connection& conn );
     virtual ~scheduler() { __TBB_ASSERT( my_policy, NULL ); delete my_policy; }
@@ -417,11 +417,11 @@ public:
 #endif
     }
     ~thread_scavenger_thread() {}
-    /*override*/ unsigned int GetId() const { return uid; }
-    /*override*/ IScheduler* GetScheduler() { return my_scheduler; }
-    /*override*/ IThreadProxy* GetProxy()   { return my_proxy; }
-    /*override*/ void SetProxy( IThreadProxy* thr_proxy ) { my_proxy = thr_proxy; }
-    /*override*/ void Dispatch( DispatchState* );
+    unsigned int GetId() const __TBB_override { return uid; }
+    IScheduler* GetScheduler() __TBB_override { return my_scheduler; }
+    IThreadProxy* GetProxy()   __TBB_override { return my_proxy; }
+    void SetProxy( IThreadProxy* thr_proxy ) __TBB_override { my_proxy = thr_proxy; }
+    void Dispatch( DispatchState* ) __TBB_override;
     inline thread_state_t read_state() { return my_state; }
     inline void set_state( thread_state_t s ) { my_state = s; }
     inline IVirtualProcessorRoot* get_virtual_processor() { return my_virtual_processor_root; }
@@ -541,11 +541,11 @@ struct thread_map_base {
         }
         /** Shortly after when a connection is established, it is possible for the server
             to grab a server_thread that has not yet created a job object for that server. */
-        rml::job& wait_for_job() const {
+        rml::job* wait_for_job() const {
             if( !my_job ) {
-                my_job = &my_automaton.wait_for_job();
+                my_job = my_automaton.wait_for_job();
             }
-            return *my_job;
+            return my_job;
         }
     private:
         server_thread* my_thread;
@@ -868,7 +868,7 @@ thread_map::size_type thread_map::wakeup_tbb_threads( size_type n ) {
 skip:
         ;
     }
-    return n<my_unrealized_threads ? n : my_unrealized_threads;
+    return n<my_unrealized_threads ? n : size_type(my_unrealized_threads);
 }
 #else /* RML_USE_WCRM */
 
@@ -976,7 +976,7 @@ public:
     int current_balance() const {int k = the_balance; return k;}
     ::rml::client& client() const {return my_client;}
     void register_as_master( server::execution_resource_t& v ) const { (IExecutionResource*&)v = my_scheduler_proxy ? my_scheduler_proxy->SubscribeCurrentThread() : NULL; }
-    // Rremove() should be called from the same thread that subscribed the current h/w thread (i.e., the one that
+    // Remove() should be called from the same thread that subscribed the current h/w thread (i.e., the one that
     // called register_as_master() ).
     void unregister( server::execution_resource_t v ) const {if( v ) ((IExecutionResource*)v)->Remove( my_scheduler );}
     void add_virtual_processors( IVirtualProcessorRoot** vprocs, unsigned int count, tbb_connection_v2& conn, ::tbb::spin_mutex& mtx );
@@ -1022,10 +1022,10 @@ void make_job( Connection& c, server_thread& t );
 
 template<typename Server, typename Client>
 class generic_connection: public Server, no_copy {
-    /*override*/ version_type version() const {return SERVER_VERSION;}
-    /*override*/ void yield() {thread_monitor::yield();}
-    /*override*/ void independent_thread_number_changed( int delta ) { my_thread_map.adjust_balance( -delta ); }
-    /*override*/ unsigned default_concurrency() const { return the_default_concurrency; }
+    version_type version() const __TBB_override {return SERVER_VERSION;}
+    void yield() __TBB_override {thread_monitor::yield();}
+    void independent_thread_number_changed( int delta ) __TBB_override { my_thread_map.adjust_balance( -delta ); }
+    unsigned default_concurrency() const __TBB_override { return the_default_concurrency; }
     friend void wakeup_some_tbb_threads();
     friend class connection_scavenger_thread;
 
@@ -1098,18 +1098,18 @@ struct connection_traits<tbb_server,tbb_client> {
 //! Represents a server/client binding.
 /** The internal representation uses inheritance for the server part and a pointer for the client part. */
 class tbb_connection_v2: public generic_connection<tbb_server,tbb_client> {
-    /*override*/ void adjust_job_count_estimate( int delta );
+    void adjust_job_count_estimate( int delta ) __TBB_override;
 #if !RML_USE_WCRM
 #if _WIN32||_WIN64
-    /*override*/ void register_master ( rml::server::execution_resource_t& /*v*/ ) {}
-    /*override*/ void unregister_master ( rml::server::execution_resource_t /*v*/ ) {}
+    void register_master ( rml::server::execution_resource_t& /*v*/ ) __TBB_override {}
+    void unregister_master ( rml::server::execution_resource_t /*v*/ ) __TBB_override {}
 #endif
 #else
-    /*override*/ void register_master ( rml::server::execution_resource_t& v ) {
+    void register_master ( rml::server::execution_resource_t& v ) __TBB_override {
         my_thread_map.register_as_master(v);
         if( v ) ++nesting;
     }
-    /*override*/ void unregister_master ( rml::server::execution_resource_t v ) {
+    void unregister_master ( rml::server::execution_resource_t v ) __TBB_override {
         if( v ) {
             __TBB_ASSERT( nesting>0, NULL );
             if( --nesting==0 ) {
@@ -1225,30 +1225,30 @@ struct connection_traits<omp_server,omp_client> {
 
 class omp_connection_v2: public generic_connection<omp_server,omp_client> {
 #if !RML_USE_WCRM
-    /*override*/ int  current_balance() const {return the_balance;}
+    int  current_balance() const __TBB_override {return the_balance;}
 #else
     friend void  free_all_connections( uintptr_t );
     friend class scheduler<omp_connection_v2>;
-    /*override*/ int current_balance() const {return my_thread_map.current_balance();}
+    int current_balance() const __TBB_override {return my_thread_map.current_balance();}
 #endif /* !RML_USE_WCRM */
-    /*override*/ int  try_increase_load( size_type n, bool strict );
-    /*override*/ void decrease_load( size_type n );
-    /*override*/ void get_threads( size_type request_size, void* cookie, job* array[] );
+    int  try_increase_load( size_type n, bool strict ) __TBB_override;
+    void decrease_load( size_type n ) __TBB_override;
+    void get_threads( size_type request_size, void* cookie, job* array[] ) __TBB_override;
 #if !RML_USE_WCRM
 #if _WIN32||_WIN64
-    /*override*/ void register_master ( rml::server::execution_resource_t& /*v*/ ) {}
-    /*override*/ void unregister_master ( rml::server::execution_resource_t /*v*/ ) {}
+    void register_master ( rml::server::execution_resource_t& /*v*/ ) __TBB_override {}
+    void unregister_master ( rml::server::execution_resource_t /*v*/ ) __TBB_override {}
 #endif
 #else
-    /*override*/ void register_master ( rml::server::execution_resource_t& v ) {
+    void register_master ( rml::server::execution_resource_t& v ) __TBB_override {
         my_thread_map.register_as_master( v );
         my_thread_map.addto_original_exec_resources( (IExecutionResource*)v, map_mtx );
     }
-    /*override*/ void unregister_master ( rml::server::execution_resource_t v ) { my_thread_map.unregister(v); }
+    void unregister_master ( rml::server::execution_resource_t v ) __TBB_override { my_thread_map.unregister(v); }
 #endif /* !RML_USE_WCRM */
 #if _WIN32||_WIN64
-    /*override*/ void deactivate( rml::job* j );
-    /*override*/ void reactivate( rml::job* j );
+    void deactivate( rml::job* j ) __TBB_override;
+    void reactivate( rml::job* j ) __TBB_override;
 #endif /* _WIN32||_WIN64 */
 #if RML_USE_WCRM
 public:
@@ -1343,11 +1343,11 @@ void thread_map::remove_client_ref() {
 template<typename Connection>
 void make_job( Connection& c, typename Connection::server_thread_type& t ) {
     if( t.my_job_automaton.try_acquire() ) {
-        rml::job& j = *t.my_client.create_one_job();
-        __TBB_ASSERT( &j!=NULL, "client:::create_one_job returned NULL" );
-        __TBB_ASSERT( (intptr_t(&j)&1)==0, "client::create_one_job returned misaligned job" );
+        rml::job* j = t.my_client.create_one_job();
+        __TBB_ASSERT( j!=NULL, "client:::create_one_job returned NULL" );
+        __TBB_ASSERT( (intptr_t(j)&1)==0, "client::create_one_job returned misaligned job" );
         t.my_job_automaton.set_and_release( j );
-        c.set_scratch_ptr( j, (void*) &t );
+        c.set_scratch_ptr( *j, (void*) &t );
     }
 }
 #endif /* RML_USE_WCRM */
@@ -1494,13 +1494,13 @@ tbb_connection_v2::~tbb_connection_v2() {
 template<typename Server, typename Client>
 void generic_connection<Server,Client>::make_job( server_thread& t, job_automaton& ja ) {
     if( ja.try_acquire() ) {
-        rml::job& j = *client().create_one_job();
-        __TBB_ASSERT( &j!=NULL, "client:::create_one_job returned NULL" );
-        __TBB_ASSERT( (intptr_t(&j)&1)==0, "client::create_one_job returned misaligned job" );
+        rml::job* j = client().create_one_job();
+        __TBB_ASSERT( j!=NULL, "client:::create_one_job returned NULL" );
+        __TBB_ASSERT( (intptr_t(j)&1)==0, "client::create_one_job returned misaligned job" );
         ja.set_and_release( j );
         __TBB_ASSERT( t.my_conn && t.my_ja && t.my_job==NULL, NULL );
-        t.my_job  = &j;
-        set_scratch_ptr( j, (void*) &t );
+        t.my_job  = j;
+        set_scratch_ptr( *j, (void*) &t );
     }
 }
 
@@ -1526,7 +1526,7 @@ void tbb_connection_v2::adjust_job_count_estimate( int delta ) {
                 // No unrealized threads left.
                 break;
             // Eagerly start the thread off.
-            fpa.protect_affinity_mask();
+            fpa.protect_affinity_mask( /*restore_process_mask=*/true );
             my_thread_map.bind_one_thread( *this, *k );
             server_thread& t = k->thread();
             __TBB_ASSERT( !t.link, NULL );
@@ -1626,7 +1626,7 @@ activate_threads:
             thr->get_virtual_processor()->Activate( thr );
         job* j = thr->wait_for_job();
         array[i] = j;
-        thr->omp_data.produce( client(), *j, cookie, i PRODUCE_ARG(*this) );
+        thr->omp_data.produce( client(), j, cookie, i PRODUCE_ARG(*this) );
     }
 
     if( index==request_size )
@@ -1645,11 +1645,11 @@ activate_threads:
     for( iterator_thr ti=thr_vec.begin(); ti!=thr_vec.end(); ++ti ) {
         omp_server_thread* thr = (omp_server_thread*) *ti;
         __TBB_ASSERT( thr, "thread not created?" );
-        // Thread is already grabbed; since it is nrewly created, we need to activate it.
+        // Thread is already grabbed; since it is newly created, we need to activate it.
         thr->get_virtual_processor()->Activate( thr );
         job* j = thr->wait_for_job();
         array[index] = j;
-        thr->omp_data.produce( client(), *j, cookie, index PRODUCE_ARG(*this) );
+        thr->omp_data.produce( client(), j, cookie, index PRODUCE_ARG(*this) );
         ++index;
     }
 }
@@ -1794,8 +1794,8 @@ void omp_connection_v2::get_threads( size_type request_size, void* cookie, job*
             server_thread& t = k->wait_for_thread();
             if( t.try_grab_for( ts_omp_busy ) ) {
                 // The preincrement instead of post-increment of index is deliberate.
-                job& j = k->wait_for_job();
-                array[index] = &j;
+                job* j = k->wait_for_job();
+                array[index] = j;
                 t.omp_dispatch.produce( client(), j, cookie, index PRODUCE_ARG(*this) );
                 if( ++index==request_size )
                     return;
@@ -1814,8 +1814,8 @@ void omp_connection_v2::get_threads( size_type request_size, void* cookie, job*
             my_thread_map.bind_one_thread( *this, *k );
             server_thread& t = k->thread();
             if( t.try_grab_for( ts_omp_busy ) ) {
-                job& j = k->wait_for_job();
-                array[index] = &j;
+                job* j = k->wait_for_job();
+                array[index] = j;
                 // The preincrement instead of post-increment of index is deliberate.
                 t.omp_dispatch.produce( client(), j, cookie, index PRODUCE_ARG(*this) );
                 if( ++index==request_size )
@@ -2270,7 +2270,7 @@ void tbb_server_thread::Dispatch( DispatchState* ) {
             } else {
                 __TBB_ASSERT( false, "someone tampered with my state" );
             }
-        } // someone else might set the state to somthing other than ts_idle
+        } // someone else might set the state to something other than ts_idle
     }
 }
 
@@ -2291,7 +2291,7 @@ void omp_server_thread::Dispatch( DispatchState* ) {
             my_thread_map.adjust_balance( 1 );
             set_state( ts_idle );
         }
-        // someone else might set the state to somthing other than ts_idle
+        // someone else might set the state to something other than ts_idle
     }
 }
 
@@ -2390,8 +2390,8 @@ bool tbb_server_thread::sleep_perhaps () {
         if( my_state.compare_and_swap( ts_asleep, ts_idle )==ts_idle ) {
             // If a thread is between read_state() and compare_and_swap(), and the master tries to terminate,
             // the master's compare_and_swap() will fail because the thread's state is ts_idle.
-            // We need to check if terminate is true or not before letting the thread go to sleep oetherwise
-            // we will miss the terminate signal.
+            // We need to check if terminate is true or not before letting the thread go to sleep,
+            // otherwise we will miss the terminate signal.
             if( !terminate ) {
                 if( !is_removed() ) {
                     --activation_count;
@@ -2427,8 +2427,8 @@ void omp_server_thread::sleep_perhaps () {
         if( my_state.compare_and_swap( ts_asleep, ts_idle )==ts_idle ) {
             // If a thread is between read_state() and compare_and_swap(), and the master tries to terminate,
             // the master's compare_and_swap() will fail because the thread's state is ts_idle.
-            // We need to check if terminate is true or not before letting the thread go to sleep oetherwise
-            // we will miss the terminate signal.
+            // We need to check if terminate is true or not before letting the thread go to sleep,
+            // otherwise we will miss the terminate signal.
             if( !terminate ) {
                 get_virtual_processor()->Deactivate( this );
                 __TBB_ASSERT( !is_removed(), "OMP threads should not be deprived of a virtual processor" );
@@ -2469,7 +2469,7 @@ bool server_thread_rep::destroy_job( Connection* c ) {
 
 void thread_map::assist_cleanup( bool assist_null_only ) {
     // To avoid deadlock, the current thread *must* help out with cleanups that have not started,
-    // becausd the thread that created the job may be busy for a long time.
+    // because the thread that created the job may be busy for a long time.
     for( iterator i = begin(); i!=end(); ++i ) {
         rml::job* j=0;
         server_thread* thr = (*i).second;
@@ -2499,7 +2499,7 @@ void thread_map::add_virtual_processors( IVirtualProcessorRoot** vproots, unsign
         tbb::spin_mutex::scoped_lock lck( mtx );
         __TBB_ASSERT( my_map.size()==0||count==1, NULL );
         end = my_map.end(); //remember 'end' at the time of 'find'
-        // find entries in the map for those VPs that were previosly added and then removed.
+        // find entries in the map for those VPs that were previously added and then removed.
         for( size_t i=0; i<count; ++i ) {
             vec[i] = my_map.find( (key_type) vproots[i] );
 #if TBB_USE_DEBUG
@@ -2846,7 +2846,7 @@ void thread_map::mark_virtual_processors_as_returned( IVirtualProcessorRoot** vp
                 omp_server_thread* thr = (omp_server_thread*) (*i).second;
                 if( ((uintptr_t)thr)&~(uintptr_t)1 ) {
                     __TBB_ASSERT( !thr->is_removed(), "incorrectly removed" );
-                    // we shoud not make any assumption on the initial state of an added vproc.
+                    // we should not make any assumption on the initial state of an added vproc.
                     thr->set_returned();
                 }
             }
@@ -3103,10 +3103,10 @@ void connection_scavenger_thread::process_requests( uintptr_t conn_ex )
         }
         __TBB_ASSERT( conn_ex, NULL );
         if( is_tbb )
-            // remove extra srever ref count; this will trigger Shutdown/Release of ConcRT RM
+            // remove extra server ref count; this will trigger Shutdown/Release of ConcRT RM
             tbb_conn->remove_server_ref();
         else
-            // remove extra srever ref count; this will trigger Shutdown/Release of ConcRT RM
+            // remove extra server ref count; this will trigger Shutdown/Release of ConcRT RM
             omp_conn->remove_server_ref();
     }
 }
diff --git a/src/rml/server/thread_monitor.h b/src/rml/server/thread_monitor.h
index 699f809..5218906 100644
--- a/src/rml/server/thread_monitor.h
+++ b/src/rml/server/thread_monitor.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // All platform-specific threading support is encapsulated here. */
diff --git a/src/rml/server/wait_counter.h b/src/rml/server/wait_counter.h
index 7c700e9..3ddd8e0 100644
--- a/src/rml/server/wait_counter.h
+++ b/src/rml/server/wait_counter.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 #ifndef __RML_wait_counter_H
diff --git a/src/rml/server/win32-rml-export.def b/src/rml/server/win32-rml-export.def
index 7fc36c4..2a550d0 100644
--- a/src/rml/server/win32-rml-export.def
+++ b/src/rml/server/win32-rml-export.def
@@ -1,20 +1,20 @@
-; Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+; Copyright (c) 2005-2017 Intel Corporation
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+;     http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+;
+;
 ;
-; This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-; you can redistribute it and/or modify it under the terms of the GNU General Public License
-; version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-; Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 ;
-; As a special exception,  you may use this file  as part of a free software library without
-; restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-; functions from this file, or you compile this file and link it with other files to produce
-; an executable,  this file does not by itself cause the resulting executable to be covered
-; by the GNU General Public License. This exception does not however invalidate any other
-; reasons why the executable file might be covered by the GNU General Public License.
 
 EXPORTS
 
diff --git a/src/rml/server/win64-rml-export.def b/src/rml/server/win64-rml-export.def
index 7fc36c4..2a550d0 100644
--- a/src/rml/server/win64-rml-export.def
+++ b/src/rml/server/win64-rml-export.def
@@ -1,20 +1,20 @@
-; Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+; Copyright (c) 2005-2017 Intel Corporation
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+;     http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+;
+;
 ;
-; This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-; you can redistribute it and/or modify it under the terms of the GNU General Public License
-; version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-; Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 ;
-; As a special exception,  you may use this file  as part of a free software library without
-; restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-; functions from this file, or you compile this file and link it with other files to produce
-; an executable,  this file does not by itself cause the resulting executable to be covered
-; by the GNU General Public License. This exception does not however invalidate any other
-; reasons why the executable file might be covered by the GNU General Public License.
 
 EXPORTS
 
diff --git a/src/rml/test/rml_omp_stub.cpp b/src/rml/test/rml_omp_stub.cpp
index c105e31..eb701b1 100644
--- a/src/rml/test/rml_omp_stub.cpp
+++ b/src/rml/test/rml_omp_stub.cpp
@@ -1,32 +1,33 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // This file is compiled with C++, but linked with a program written in C.
 // The intent is to find dependencies on the C++ run-time.
 
 #include <stdlib.h>
+#include "../../../include/tbb/tbb_stddef.h" // __TBB_override
 #include "harness_defs.h"
 #define RML_PURE_VIRTUAL_HANDLER abort
 
 #if _MSC_VER==1500 && !defined(__INTEL_COMPILER)
-// VS2008/VC9 seems to have an issue; 
+// VS2008/VC9 seems to have an issue;
 #pragma warning( push )
 #pragma warning( disable: 4100 ) 
 #elif __TBB_MSVC_UNREACHABLE_CODE_IGNORED
@@ -46,15 +47,15 @@ rml::versioned_object::version_type Version;
 
 class MyClient: public __kmp::rml::omp_client {
 public:
-    /*override*/rml::versioned_object::version_type version() const {return 0;}
-    /*override*/size_type max_job_count() const {return 1024;}
-    /*override*/size_t min_stack_size() const {return 1<<20;}
-    /*override*/rml::job* create_one_job() {return NULL;}
-    /*override*/void acknowledge_close_connection() {}
-    /*override*/void cleanup(job&) {}
-    /*override*/policy_type policy() const {return throughput;}
-    /*override*/void process( job&, void*, __kmp::rml::omp_client::size_type ) {}
-   
+    rml::versioned_object::version_type version() const __TBB_override {return 0;}
+    size_type max_job_count() const __TBB_override {return 1024;}
+    size_t min_stack_size() const __TBB_override {return 1<<20;}
+    rml::job* create_one_job() __TBB_override {return NULL;}
+    void acknowledge_close_connection() __TBB_override {}
+    void cleanup(job&) __TBB_override {}
+    policy_type policy() const __TBB_override {return throughput;}
+    void process( job&, void*, __kmp::rml::omp_client::size_type ) __TBB_override {}
+
 };
 
 //! Never actually set, because point of test is to find linkage issues.
diff --git a/src/rml/test/test_job_automaton.cpp b/src/rml/test/test_job_automaton.cpp
index 1cc38f0..f416e58 100644
--- a/src/rml/test/test_job_automaton.cpp
+++ b/src/rml/test/test_job_automaton.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "harness.h"
@@ -69,8 +69,8 @@ void State::exercise( bool is_owner ) {
         Cover(0);
         if( ja.try_acquire() ) {
             Cover(1);
-            ++job_created; 
-            ja.set_and_release(job);
+            ++job_created;
+            ja.set_and_release(&job);
             Cover(2);
             if( ja.try_acquire() ) {
                 Cover(3);
@@ -92,7 +92,7 @@ void State::exercise( bool is_owner ) {
     } else {
         // Using extra bit of DelayMask for choosing whether to run wait_for_job or not.
         if( DelayMask&1<<N ) {
-            rml::job* j= &ja.wait_for_job(); 
+            rml::job* j= ja.wait_for_job();
             if( j!=&job ) REPORT("%p\n",j);
             ASSERT( j==&job, NULL );
             job_received = true;
diff --git a/src/rml/test/test_rml_mixed.cpp b/src/rml/test/test_rml_mixed.cpp
index 8636c3e..0575df5 100644
--- a/src/rml/test/test_rml_mixed.cpp
+++ b/src/rml/test/test_rml_mixed.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include <tbb/tbb_config.h>
@@ -38,7 +38,7 @@ int TestMain () {
 // non-deterministic. Thus dynamic_link fails on some systems when the
 // application changes its current directory after the library (TBB/OpenMP/...)
 // is loaded but before the static constructors in the library are executed.
-#define CHDIR_SUPPORT_BROKEN ( ( __GNUC__ == 4 && __GNUC_MINOR__ >= 6 && __GNUC_MINOR__ <= 9 ) || (__linux__ && __clang_major__ == 3 && __clang_minor__ == 5) )
+#define CHDIR_SUPPORT_BROKEN ( __TBB_GCC_VERSION >= 40600 || (__linux__ && __TBB_CLANG_VERSION >= 30500) )
 
 const int OMP_ParallelRegionSize = 16;
 int TBB_MaxThread = 4;           // Includes master
@@ -52,22 +52,22 @@ protected:
     typedef typename Client::policy_type policy_type;
 
 private:
-    /*override*/version_type version() const {
+    version_type version() const __TBB_override {
         return 0;
     }
-    /*override*/size_t min_stack_size() const {
+    size_t min_stack_size() const __TBB_override {
         return 1<<20;
     }
-    /*override*/job* create_one_job() {
+    job* create_one_job() __TBB_override {
         return new rml::job;
     }
-    /*override*/policy_type policy() const {
+    policy_type policy() const __TBB_override {
         return Client::turnaround;
     }
-    /*override*/void acknowledge_close_connection() {
+    void acknowledge_close_connection() __TBB_override {
         delete this;
     }
-    /*override*/void cleanup( job& j ) {delete &j;}
+    void cleanup( job& j ) __TBB_override {delete &j;}
 
 public:
     virtual ~ClientBase() {}
@@ -188,18 +188,16 @@ void ThreadLevelRecorder::dump() {
     fclose(f);
 }
 
-ThreadLevelRecorder TotalThreadLevel;
-
 class TBB_Client: public ClientBase<tbb::internal::rml::tbb_client> {
-    /*override*/void process( job& j );
-    /*override*/size_type max_job_count() const {
+    void process( job& j ) __TBB_override;
+    size_type max_job_count() const __TBB_override {
         return TBB_MaxThread-1;
     }
 };
 
 class OMP_Client: public ClientBase<__kmp::rml::omp_client> {
-    /*override*/void process( job&, void* cookie, omp_client::size_type );
-    /*override*/size_type max_job_count() const {
+    void process( job&, void* cookie, omp_client::size_type ) __TBB_override;
+    size_type max_job_count() const __TBB_override {
         return OMP_MaxThread-1;
     }
 };
@@ -211,6 +209,7 @@ ChangeCurrentDir Changer;
 #endif
 RunTime<tbb::internal::rml::tbb_factory, TBB_Client> TBB_RunTime;
 RunTime<__kmp::rml::omp_factory, OMP_Client> OMP_RunTime;
+ThreadLevelRecorder TotalThreadLevel;
 
 template<typename Factory, typename Client>
 void RunTime<Factory,Client>::create_connection() {
@@ -254,7 +253,7 @@ void TBBWork() {
             TBB_RunTime.server->adjust_job_count_estimate(-(TBB_MaxThread-1));
             ++CompletionCount;
         } else if( k>=0 ) {
-            for( int k=0; k<4; ++k ) {
+            for( int j=0; j<4; ++j ) {
                 OMP_Team team( *OMP_RunTime.server );
                 int n = OMP_RunTime.server->try_increase_load( OMP_ParallelRegionSize-1, /*strict=*/false );
                 team.barrier = 0;
@@ -274,13 +273,13 @@ void TBBWork() {
     }
 }
 
-/*override*/void TBB_Client::process( job& ) {
+void TBB_Client::process( job& ) {
     TotalThreadLevel.change_level(1);
     TBBWork();
     TotalThreadLevel.change_level(-1);
-}  
+}
 
-/*override*/void OMP_Client::process( job& /* j */, void* cookie, omp_client::size_type ) {
+void OMP_Client::process( job& /* j */, void* cookie, omp_client::size_type ) {
     TotalThreadLevel.change_level(1);
     ASSERT( OMP_RunTime.server, NULL );
     OMPWork();
@@ -305,7 +304,7 @@ int TestMain () {
 #if CHDIR_SUPPORT_BROKEN
     REPORT("Known issue: dynamic_link does not support current directory changing before its initialization.\n");
 #endif
-    for( int TBB_MaxThread=MinThread; TBB_MaxThread<=MaxThread; ++TBB_MaxThread ) {
+    for( TBB_MaxThread=MinThread; TBB_MaxThread<=MaxThread; ++TBB_MaxThread ) {
         REMARK("Testing with TBB_MaxThread=%d\n", TBB_MaxThread);
         TBB_RunTime.create_connection();
         OMP_RunTime.create_connection();
diff --git a/src/rml/test/test_rml_omp.cpp b/src/rml/test/test_rml_omp.cpp
index 34c2e60..89096de 100644
--- a/src/rml/test/test_rml_omp.cpp
+++ b/src/rml/test/test_rml_omp.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include <tbb/tbb_config.h>
@@ -68,14 +68,14 @@ public:
 class MyClient: public ClientBase<__kmp::rml::omp_client> {
 public:
     MyServer* server;
-    /*override*/void process( job& j, void* cookie, size_type index ) {
+    void process( job& j, void* cookie, size_type index ) __TBB_override {
         MyTeam& t = *static_cast<MyTeam*>(cookie);
         ASSERT( t.self_ptr==&t, "trashed cookie" );
         ASSERT( index<t.max_thread, NULL );
         ASSERT( !t.info[index].ran, "duplicate index?" );
         t.info[index].job = &j;
         t.info[index].ran = true;
-        do_process(j);
+        do_process(&j);
         if( index==1 && nesting.level<nesting.limit ) {
             DoOneConnection<MyFactory,MyClient> doc(MaxThread,Nesting(nesting.level+1,nesting.limit),0,false);
             doc(0);
diff --git a/src/rml/test/test_rml_omp_c_linkage.c b/src/rml/test/test_rml_omp_c_linkage.c
index 26475a2..a59a586 100644
--- a/src/rml/test/test_rml_omp_c_linkage.c
+++ b/src/rml/test/test_rml_omp_c_linkage.c
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 void Cplusplus();
diff --git a/src/rml/test/test_rml_tbb.cpp b/src/rml/test/test_rml_tbb.cpp
index 530c0fb..f679bae 100644
--- a/src/rml/test/test_rml_tbb.cpp
+++ b/src/rml/test/test_rml_tbb.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include <tbb/tbb_config.h>
@@ -41,8 +41,8 @@ tbb::atomic<int> n_available_hw_threads;
 class MyClient: public ClientBase<tbb::internal::rml::tbb_client> {
     tbb::atomic<int> counter;
     tbb::atomic<int> gate;
-    /*override*/void process( job& j ) {
-        do_process(j);
+    void process( job& j ) __TBB_override {
+        do_process(&j);
         //wait until the gate is open.
         while( gate==0 )
             Harness::Sleep(1);
@@ -128,7 +128,7 @@ void FireUpJobs( MyServer& server, MyClient& client, int n_thread, int n_extra,
                 for( int k=0; k<n_thread; ++k ) 
                     if( client.job_array[k].processing_count!=0 ) 
                         ++n;
-                    if( n>=expected ) break;
+                if( n>=expected ) break;
                 server.yield();
             }
 #if RML_USE_WCRM
@@ -194,7 +194,7 @@ void Initialize()
 
 int TestMain () {
     VerifyInitialization<MyFactory,MyClient>( MaxThread );
-    if ( default_concurrency<1 ) {
+    if ( server_concurrency<1 ) {
          REPORT("The test is not intended to run on 1 thread\n");
          return Harness::Skipped;
     }
diff --git a/src/rml/test/test_server.h b/src/rml/test/test_server.h
index dc936c8..a72142f 100644
--- a/src/rml/test/test_server.h
+++ b/src/rml/test/test_server.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /* This header contains code shared by test_omp_server.cpp and test_tbb_server.cpp 
@@ -59,7 +59,7 @@ static bool TestSingleConnection;
 
 static size_t N_TestConnections;
 
-static int default_concurrency;
+static int server_concurrency;
 
 class MyJob: public ::rml::job {
 public:
@@ -138,25 +138,25 @@ public:
     tbb::atomic<bool> expect_close_connection;
 
     MyJob *job_array;
- 
-    /*override*/version_type version() const {
+
+    version_type version() const __TBB_override {
         ASSERT( state==live, NULL );
         return 1;
     }
- 
-    /*override*/size_type max_job_count() const {
+
+    size_type max_job_count() const __TBB_override {
         ASSERT( state==live, NULL );
         return my_max_job_count;
     }
 
-    /*override*/size_t min_stack_size() const {
+    size_t min_stack_size() const __TBB_override {
         ASSERT( state==live, NULL );
         return my_stack_size;
     }
 
-    /*override*/policy_type policy() const {return Client::throughput;} 
+    policy_type policy() const __TBB_override {return Client::throughput;}
 
-    /*override*/void acknowledge_close_connection() {
+    void acknowledge_close_connection() __TBB_override {
         ASSERT( expect_close_connection, NULL );
         for( size_t k=next_job_index; k>0; ) {
             --k;
@@ -166,10 +166,10 @@ public:
         job_array = NULL;
         ASSERT( my_server, NULL );
         update( destroyed, live );
-        delete this; 
+        delete this;
     }
 
-    /*override*/void cleanup( job& j_ ) {
+    void cleanup( job& j_ ) __TBB_override {
         REMARK("client %d: cleanup(%p) called\n",client_id(),&j_);
         ASSERT( state==live, NULL );
         MyJob& j = static_cast<MyJob&>(j_);
@@ -182,10 +182,10 @@ public:
     job* create_one_job();
 
 protected:
-    void do_process( job& j_ ) {
+    void do_process( job* j_ ) {
         ASSERT( state==live, NULL );
-        MyJob& j = static_cast<MyJob&>(j_);
-        ASSERT( &j, NULL );
+        MyJob& j = static_cast<MyJob&>(*j_);
+        ASSERT( j_, NULL );
         j.update(MyJob::busy,MyJob::idle);
         // use of the plain addition (not the atomic increment) is intentonial
         j.processing_count = j.processing_count + 1;
@@ -388,7 +388,7 @@ void SimpleTest() {
         doc(0);
 #endif
     }
-    ASSERT( Harness::ConcurrencyTracker::PeakParallelism()>1 || default_concurrency==0, "No multiple connections exercised?" );
+    ASSERT( Harness::ConcurrencyTracker::PeakParallelism()>1 || server_concurrency==0, "No multiple connections exercised?" );
 #endif /* !TRIVIAL */
     // Let RML catch up.
     while( ClientConstructions!=ClientDestructions )
@@ -420,7 +420,7 @@ void VerifyInitialization( int n_thread ) {
                client->client_id(), n_thread, 0, 0);
     ASSERT( server, NULL );
     client->set_server( server );
-    default_concurrency = server->default_concurrency();
+    server_concurrency = server->default_concurrency();
 
     DoClientSpecificVerification( *server, n_thread );
 
diff --git a/src/rml/test/test_thread_monitor.cpp b/src/rml/test/test_thread_monitor.cpp
index b780264..ca63259 100644
--- a/src/rml/test/test_thread_monitor.cpp
+++ b/src/rml/test/test_thread_monitor.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 #include "harness.h"
diff --git a/src/tbb/arena.cpp b/src/tbb/arena.cpp
index fe2c0d9..ba32862 100644
--- a/src/tbb/arena.cpp
+++ b/src/tbb/arena.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/global_control.h" // thread_stack_size
@@ -35,78 +35,134 @@
 namespace tbb {
 namespace internal {
 
-void arena::process( generic_scheduler& s ) {
-    __TBB_ASSERT( is_alive(my_guard), NULL );
-    __TBB_ASSERT( governor::is_set(&s), NULL );
-    __TBB_ASSERT( !s.my_innermost_running_task, NULL );
-    __TBB_ASSERT( !s.my_dispatching_task, NULL );
+// put it here in order to enable compiler to inline it into arena::process and nested_arena_entry
+void generic_scheduler::attach_arena( arena* a, size_t index, bool is_master ) {
+    __TBB_ASSERT( a->my_market == my_market, NULL );
+    my_arena = a;
+    my_arena_index = index;
+    my_arena_slot = a->my_slots + index;
+    attach_mailbox( affinity_id(index+1) );
+    if ( is_master && my_inbox.is_idle_state( true ) ) {
+        // Master enters an arena with its own task to be executed. It means that master is not
+        // going to enter stealing loop and take affinity tasks.
+        my_inbox.set_is_idle( false );
+    }
+#if __TBB_TASK_GROUP_CONTEXT
+    // Context to be used by root tasks by default (if the user has not specified one).
+    if( !is_master )
+        my_dummy_task->prefix().context = a->my_default_ctx;
+#endif /* __TBB_TASK_GROUP_CONTEXT */
+#if __TBB_TASK_PRIORITY
+    // In the current implementation master threads continue processing even when
+    // there are other masters with higher priority. Only TBB worker threads are
+    // redistributed between arenas based on the latters' priority. Thus master
+    // threads use arena's top priority as a reference point (in contrast to workers
+    // that use my_market->my_global_top_priority).
+    if( is_master ) {
+        my_ref_top_priority = &a->my_top_priority;
+        my_ref_reload_epoch = &a->my_reload_epoch;
+    }
+    my_local_reload_epoch = *my_ref_reload_epoch;
+    __TBB_ASSERT( !my_offloaded_tasks, NULL );
+#endif /* __TBB_TASK_PRIORITY */
+}
+
+inline static bool occupy_slot( generic_scheduler*& slot, generic_scheduler& s ) {
+    return !slot && as_atomic( slot ).compare_and_swap( &s, NULL ) == NULL;
+}
 
-    __TBB_ASSERT( my_num_slots != 1, NULL );
+size_t arena::occupy_free_slot_in_range( generic_scheduler& s, size_t lower, size_t upper ) {
+    if ( lower >= upper ) return out_of_arena;
     // Start search for an empty slot from the one we occupied the last time
-    unsigned index = s.my_arena_index < my_num_slots ? s.my_arena_index : s.my_random.get() % (my_num_slots - 1) + 1,
-             end = index;
-    __TBB_ASSERT( index != 0, "A worker cannot occupy slot 0" );
-    __TBB_ASSERT( index < my_num_slots, NULL );
+    size_t index = s.my_arena_index;
+    if ( index < lower || index >= upper ) index = s.my_random.get() % (upper - lower) + lower;
+    __TBB_ASSERT( index >= lower && index < upper, NULL );
+    // Find a free slot
+    for ( size_t i = index; i < upper; ++i )
+        if ( occupy_slot(my_slots[i].my_scheduler, s) ) return i;
+    for ( size_t i = lower; i < index; ++i )
+        if ( occupy_slot(my_slots[i].my_scheduler, s) ) return i;
+    return out_of_arena;
+}
 
-    // Find a vacant slot
-    for ( ;; ) {
-        if ( !my_slots[index].my_scheduler && as_atomic(my_slots[index].my_scheduler).compare_and_swap(&s, NULL ) == NULL )
-            break;
-        if ( ++index == my_num_slots )
-            index = 1;
-        if ( index == end ) {
-            // Likely this arena is already saturated
-            goto quit;
-        }
+template <bool as_worker>
+size_t arena::occupy_free_slot( generic_scheduler& s ) {
+    // Firstly, masters try to occupy reserved slots
+    size_t index = as_worker ? out_of_arena : occupy_free_slot_in_range( s, 0, my_num_reserved_slots );
+    if ( index == out_of_arena ) {
+        // Secondly, all threads try to occupy all non-reserved slots
+        index = occupy_free_slot_in_range( s, my_num_reserved_slots, my_num_slots );
+        // Likely this arena is already saturated
+        if ( index == out_of_arena )
+            return out_of_arena;
     }
+
     ITT_NOTIFY(sync_acquired, my_slots + index);
-    s.my_arena = this;
-    s.my_arena_index = index;
-    s.my_arena_slot = my_slots + index;
-#if __TBB_TASK_PRIORITY
-    s.my_local_reload_epoch = *s.my_ref_reload_epoch;
-    __TBB_ASSERT( !s.my_offloaded_tasks, NULL );
-#endif /* __TBB_TASK_PRIORITY */
-    s.attach_mailbox( affinity_id(index+1) );
+    atomic_update( my_limit, (unsigned)(index + 1), std::less<unsigned>() );
+    return index;
+}
+
+void arena::process( generic_scheduler& s ) {
+    __TBB_ASSERT( is_alive(my_guard), NULL );
+    __TBB_ASSERT( governor::is_set(&s), NULL );
+    __TBB_ASSERT( s.my_innermost_running_task == s.my_dummy_task, NULL );
+    __TBB_ASSERT( s.worker_outermost_level(), NULL );
+
+    __TBB_ASSERT( my_num_slots > 1, NULL );
+
+    size_t index = occupy_free_slot</*as_worker*/true>( s );
+    if ( index == out_of_arena )
+        goto quit;
 
-    s.my_arena_slot->hint_for_pop  = index; // initial value for round-robin
+    __TBB_ASSERT( index >= my_num_reserved_slots, "Workers cannot occupy reserved slots" );
+    s.attach_arena( this, index, /*is_master*/false );
 
 #if !__TBB_FP_CONTEXT
     my_cpu_ctl_env.set_env();
 #endif
 
-#if __TBB_SCHEDULER_OBSERVER
+#if __TBB_ARENA_OBSERVER
     __TBB_ASSERT( !s.my_last_local_observer, "There cannot be notified local observers when entering arena" );
     my_observers.notify_entry_observers( s.my_last_local_observer, /*worker=*/true );
-#endif /* __TBB_SCHEDULER_OBSERVER */
+#endif /* __TBB_ARENA_OBSERVER */
 
-    atomic_update( my_limit, index + 1, std::less<unsigned>() );
+    // Task pool can be marked as non-empty if the worker occupies the slot left by a master.
+    if ( s.my_arena_slot->task_pool != EmptyTaskPool ) {
+        __TBB_ASSERT( s.my_inbox.is_idle_state(false), NULL );
+        s.local_wait_for_all( *s.my_dummy_task, NULL );
+        __TBB_ASSERT( s.my_inbox.is_idle_state(true), NULL );
+    }
 
     for ( ;; ) {
+        __TBB_ASSERT( s.my_innermost_running_task == s.my_dummy_task, NULL );
+        __TBB_ASSERT( s.worker_outermost_level(), NULL );
+        __TBB_ASSERT( is_alive(my_guard), NULL );
+        __TBB_ASSERT( s.is_quiescent_local_task_pool_reset(),
+                      "Worker cannot leave arena while its task pool is not reset" );
+        __TBB_ASSERT( s.my_arena_slot->task_pool == EmptyTaskPool, "Empty task pool is not marked appropriately" );
+        // This check prevents relinquishing more than necessary workers because
+        // of the non-atomicity of the decision making procedure
+        if ( num_workers_active() > my_num_workers_allotted
+#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+             || recall_by_mandatory_request()
+#endif
+            )
+            break;
         // Try to steal a task.
         // Passing reference count is technically unnecessary in this context,
         // but omitting it here would add checks inside the function.
-        __TBB_ASSERT( is_alive(my_guard), NULL );
-        task* t = s.receive_or_steal_task( s.my_dummy_task->prefix().ref_count );
+        task* t = s.receive_or_steal_task( __TBB_ISOLATION_ARG( s.my_dummy_task->prefix().ref_count, no_isolation ) );
         if (t) {
             // A side effect of receive_or_steal_task is that my_innermost_running_task can be set.
-            // But for the outermost dispatch loop of a worker it has to be NULL.
-            s.my_innermost_running_task = NULL;
-            __TBB_ASSERT( !s.my_dispatching_task, NULL );
+            // But for the outermost dispatch loop it has to be a dummy task.
+            s.my_innermost_running_task = s.my_dummy_task;
             s.local_wait_for_all(*s.my_dummy_task,t);
         }
-        __TBB_ASSERT ( __TBB_load_relaxed(s.my_arena_slot->head) == __TBB_load_relaxed(s.my_arena_slot->tail),
-                       "Worker cannot leave arena while its task pool is not empty" );
-        __TBB_ASSERT( s.my_arena_slot->task_pool == EmptyTaskPool, "Empty task pool is not marked appropriately" );
-        // This check prevents relinquishing more than necessary workers because
-        // of the non-atomicity of the decision making procedure
-        if (num_workers_active() > my_num_workers_allotted)
-            break;
     }
-#if __TBB_SCHEDULER_OBSERVER
+#if __TBB_ARENA_OBSERVER
     my_observers.notify_exit_observers( s.my_last_local_observer, /*worker=*/true );
     s.my_last_local_observer = NULL;
-#endif /* __TBB_SCHEDULER_OBSERVER */
+#endif /* __TBB_ARENA_OBSERVER */
 #if __TBB_TASK_PRIORITY
     if ( s.my_offloaded_tasks )
         orphan_offloaded_tasks( s );
@@ -120,17 +176,17 @@ void arena::process( generic_scheduler& s ) {
     s.my_arena_slot = 0; // detached from slot
     s.my_inbox.detach();
     __TBB_ASSERT( s.my_inbox.is_idle_state(true), NULL );
-    __TBB_ASSERT( !s.my_innermost_running_task, NULL );
-    __TBB_ASSERT( !s.my_dispatching_task, NULL );
+    __TBB_ASSERT( s.my_innermost_running_task == s.my_dummy_task, NULL );
+    __TBB_ASSERT( s.worker_outermost_level(), NULL );
     __TBB_ASSERT( is_alive(my_guard), NULL );
 quit:
     // In contrast to earlier versions of TBB (before 3.0 U5) now it is possible
     // that arena may be temporarily left unpopulated by threads. See comments in
     // arena::on_thread_leaving() for more details.
-    on_thread_leaving</*is_master*/false>();
+    on_thread_leaving<ref_worker>();
 }
 
-arena::arena ( market& m, unsigned num_slots ) {
+arena::arena ( market& m, unsigned num_slots, unsigned num_reserved_slots ) {
     __TBB_ASSERT( !my_guard, "improperly allocated arena?" );
     __TBB_ASSERT( sizeof(my_slots[0]) % NFS_GetLineSize()==0, "arena::slot size not multiple of cache line size" );
     __TBB_ASSERT( (uintptr_t)this % NFS_GetLineSize()==0, "arena misaligned" );
@@ -140,17 +196,18 @@ arena::arena ( market& m, unsigned num_slots ) {
     my_market = &m;
     my_limit = 1;
     // Two slots are mandatory: for the master, and for 1 worker (required to support starvation resistant tasks).
-    my_num_slots = num_slots_to_reserve(num_slots);
-    my_max_num_workers = num_slots-1;
-    my_references = 1; // accounts for the master
+    my_num_slots = num_arena_slots(num_slots);
+    my_num_reserved_slots = num_reserved_slots;
+    my_max_num_workers = num_slots-num_reserved_slots;
+    my_references = ref_external; // accounts for the master
 #if __TBB_TASK_PRIORITY
     my_bottom_priority = my_top_priority = normalized_normal_priority;
 #endif /* __TBB_TASK_PRIORITY */
     my_aba_epoch = m.my_arenas_aba_epoch;
-#if __TBB_SCHEDULER_OBSERVER
+#if __TBB_ARENA_OBSERVER
     my_observers.my_arena = this;
-#endif /* __TBB_SCHEDULER_OBSERVER */
-    __TBB_ASSERT ( my_max_num_workers < my_num_slots, NULL );
+#endif
+    __TBB_ASSERT ( my_max_num_workers <= my_num_slots, NULL );
     // Construct slots. Mark internal synchronization elements for the tools.
     for( unsigned i = 0; i < my_num_slots; ++i ) {
         __TBB_ASSERT( !my_slots[i].my_scheduler && !my_slots[i].task_pool, NULL );
@@ -166,29 +223,23 @@ arena::arena ( market& m, unsigned num_slots ) {
     }
     my_task_stream.initialize(my_num_slots);
     ITT_SYNC_CREATE(&my_task_stream, SyncType_Scheduler, SyncObj_TaskStream);
-    my_mandatory_concurrency = false;
-#if __TBB_TASK_GROUP_CONTEXT
-    // Context to be used by root tasks by default (if the user has not specified one).
-    // The arena's context should not capture fp settings for the sake of backward compatibility.
-    my_default_ctx =
-            new ( NFS_Allocate(1, sizeof(task_group_context), NULL) ) task_group_context(task_group_context::isolated, task_group_context::default_traits);
-#endif /* __TBB_TASK_GROUP_CONTEXT */
-#if __TBB_FP_CONTEXT
-    my_default_ctx->capture_fp_settings();
-#else
+#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+    my_concurrency_mode = cm_normal;
+#endif
+#if !__TBB_FP_CONTEXT
     my_cpu_ctl_env.get_env();
 #endif
 }
 
-arena& arena::allocate_arena( market& m, unsigned num_slots ) {
+arena& arena::allocate_arena( market& m, unsigned num_slots, unsigned num_reserved_slots ) {
     __TBB_ASSERT( sizeof(base_type) + sizeof(arena_slot) == sizeof(arena), "All arena data fields must go to arena_base" );
     __TBB_ASSERT( sizeof(base_type) % NFS_GetLineSize() == 0, "arena slots area misaligned: wrong padding" );
     __TBB_ASSERT( sizeof(mail_outbox) == NFS_MaxLineSize, "Mailbox padding is wrong" );
-    size_t n = allocation_size(num_slots);
+    size_t n = allocation_size(num_arena_slots(num_slots));
     unsigned char* storage = (unsigned char*)NFS_Allocate( 1, n, NULL );
     // Zero all slots to indicate that they are empty
     memset( storage, 0, n );
-    return *new( storage + num_slots_to_reserve(num_slots) * sizeof(mail_outbox) ) arena(m, num_slots);
+    return *new( storage + num_arena_slots(num_slots) * sizeof(mail_outbox) ) arena(m, num_slots, num_reserved_slots);
 }
 
 void arena::free_arena () {
@@ -196,6 +247,9 @@ void arena::free_arena () {
     __TBB_ASSERT( !my_references, "There are threads in the dying arena" );
     __TBB_ASSERT( !my_num_workers_requested && !my_num_workers_allotted, "Dying arena requests workers" );
     __TBB_ASSERT( my_pool_state == SNAPSHOT_EMPTY || !my_max_num_workers, "Inconsistent state of a dying arena" );
+#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+    __TBB_ASSERT( my_concurrency_mode != cm_enforced_global, NULL );
+#endif
 #if !__TBB_STATISTICS_EARLY_DUMP
     GATHER_STATISTIC( dump_arena_statistics() );
 #endif
@@ -203,11 +257,8 @@ void arena::free_arena () {
     intptr_t drained = 0;
     for ( unsigned i = 0; i < my_num_slots; ++i ) {
         __TBB_ASSERT( !my_slots[i].my_scheduler, "arena slot is not empty" );
-#if !__TBB_TASK_ARENA
-        __TBB_ASSERT( my_slots[i].task_pool == EmptyTaskPool, NULL );
-#else
-        //TODO: understand the assertion and modify
-#endif
+        // TODO: understand the assertion and modify
+        // __TBB_ASSERT( my_slots[i].task_pool == EmptyTaskPool, NULL );
         __TBB_ASSERT( my_slots[i].head == my_slots[i].tail, NULL ); // TODO: replace by is_quiescent_local_task_pool_empty
         my_slots[i].free_task_pool();
 #if __TBB_STATISTICS
@@ -219,22 +270,23 @@ void arena::free_arena () {
 #if __TBB_COUNT_TASK_NODES
     my_market->update_task_node_count( -drained );
 #endif /* __TBB_COUNT_TASK_NODES */
-    my_market->release();
+    // remove an internal reference
+    my_market->release( /*is_public=*/false, /*blocking_terminate=*/false );
 #if __TBB_TASK_GROUP_CONTEXT
     __TBB_ASSERT( my_default_ctx, "Master thread never entered the arena?" );
     my_default_ctx->~task_group_context();
     NFS_Free(my_default_ctx);
 #endif /* __TBB_TASK_GROUP_CONTEXT */
-#if __TBB_SCHEDULER_OBSERVER
+#if __TBB_ARENA_OBSERVER
     if ( !my_observers.empty() )
         my_observers.clear();
-#endif /* __TBB_SCHEDULER_OBSERVER */
+#endif /* __TBB_ARENA_OBSERVER */
     void* storage  = &mailbox(my_num_slots);
     __TBB_ASSERT( my_references == 0, NULL );
     __TBB_ASSERT( my_pool_state == SNAPSHOT_EMPTY || !my_max_num_workers, NULL );
     this->~arena();
 #if TBB_USE_ASSERT > 1
-    memset( storage, 0, allocation_size(my_max_num_workers) );
+    memset( storage, 0, allocation_size(my_num_slots) );
 #endif /* TBB_USE_ASSERT */
     NFS_Free( storage );
 }
@@ -276,11 +328,8 @@ void arena::dump_arena_statistics () {
 // 2. if it has any tasks at all, including those of lower priority (via tasks_present);
 // 3. if it is able to work with enqueued tasks (via dequeuing_possible).
 inline bool arena::may_have_tasks ( generic_scheduler* s, bool& tasks_present, bool& dequeuing_possible ) {
-    if ( !s
-#if __TBB_TASK_ARENA
-            || s->my_arena != this
-#endif
-            ) return false;
+    if ( !s || s->my_arena != this )
+        return false;
     dequeuing_possible |= s->worker_outermost_level();
     if ( s->my_pool_reshuffling_pending ) {
         // This primary task pool is nonempty and may contain tasks at the current
@@ -316,6 +365,34 @@ void arena::orphan_offloaded_tasks(generic_scheduler& s) {
 }
 #endif /* __TBB_TASK_PRIORITY */
 
+bool arena::has_enqueued_tasks() {
+    // Look for enqueued tasks at all priority levels
+    for ( int p = 0; p < num_priority_levels; ++p )
+        if ( !my_task_stream.empty(p) )
+            return true;
+    return false;
+}
+
+void arena::restore_priority_if_need() {
+    // Check for the presence of enqueued tasks "lost" on some of
+    // priority levels because updating arena priority and switching
+    // arena into "populated" (FULL) state happen non-atomically.
+    // Imposing atomicity would require task::enqueue() to use a lock,
+    // which is unacceptable.
+    if ( has_enqueued_tasks() ) {
+        advertise_new_work<work_enqueued>();
+#if __TBB_TASK_PRIORITY
+        // update_arena_priority() expects non-zero arena::my_num_workers_requested,
+        // so must be called after advertise_new_work<work_enqueued>()
+        for ( int p = 0; p < num_priority_levels; ++p )
+            if ( !my_task_stream.empty(p) ) {
+                if ( p < my_bottom_priority || p > my_top_priority )
+                    my_market->update_arena_priority(*this, p);
+            }
+#endif
+    }
+}
+
 bool arena::is_out_of_work() {
     // TODO: rework it to return at least a hint about where a task was found; better if the task itself.
     for(;;) {
@@ -336,8 +413,8 @@ bool arena::is_out_of_work() {
                     // snapshot taking procedure invalidates the attempt, and returns
                     // this thread into the dispatch loop.
 #if __TBB_TASK_PRIORITY
+                    uintptr_t reload_epoch = __TBB_load_with_acquire( my_reload_epoch );
                     intptr_t top_priority = my_top_priority;
-                    uintptr_t reload_epoch = my_reload_epoch;
                     // Inspect primary task pools first
 #endif /* __TBB_TASK_PRIORITY */
                     size_t k;
@@ -366,16 +443,11 @@ bool arena::is_out_of_work() {
                         // Master thread's scheduler needs special handling as it
                         // may be destroyed at any moment (workers' schedulers are
                         // guaranteed to be alive while at least one thread is in arena).
-                        // Have to exclude concurrency with task group state change propagation too.
-                        // TODO: check whether it is still necessary since some pools belong to slots now
-                        my_market->my_arenas_list_mutex.lock();
-                        generic_scheduler *s = my_slots[0].my_scheduler;
-                        if ( s && as_atomic(my_slots[0].my_scheduler).compare_and_swap(LockedMaster, s) == s ) { //TODO: remove need to lock
-                            __TBB_ASSERT( my_slots[0].my_scheduler == LockedMaster && s != LockedMaster, NULL );
-                            work_absent = !may_have_tasks( s, tasks_present, dequeuing_possible );
-                            __TBB_store_with_release( my_slots[0].my_scheduler, s );
-                        }
-                        my_market->my_arenas_list_mutex.unlock();
+                        // The lock below excludes concurrency with task group state change
+                        // propagation and guarantees lifetime of the master thread.
+                        the_context_state_propagation_mutex.lock();
+                        work_absent = !may_have_tasks( my_slots[0].my_scheduler, tasks_present, dequeuing_possible );
+                        the_context_state_propagation_mutex.unlock();
                         // The following loop is subject to data races. While k-th slot's
                         // scheduler is being examined, corresponding worker can either
                         // leave to RML or migrate to another arena.
@@ -424,26 +496,18 @@ bool arena::is_out_of_work() {
                                 // to avoid race with advertise_new_work.
                                 int current_demand = (int)my_max_num_workers;
                                 if( my_pool_state.compare_and_swap( SNAPSHOT_EMPTY, busy )==busy ) {
-                                    // This thread transitioned pool to empty state, and thus is
-                                    // responsible for telling RML that there is no other work to do.
-                                    my_market->adjust_demand( *this, -current_demand );
-#if __TBB_TASK_PRIORITY
-                                    // Check for the presence of enqueued tasks "lost" on some of
-                                    // priority levels because updating arena priority and switching
-                                    // arena into "populated" (FULL) state happen non-atomically.
-                                    // Imposing atomicity would require task::enqueue() to use a lock,
-                                    // which is unacceptable.
-                                    bool switch_back = false;
-                                    for ( int p = 0; p < num_priority_levels; ++p ) {
-                                        if ( !my_task_stream.empty(p) ) {
-                                            switch_back = true;
-                                            if ( p < my_bottom_priority || p > my_top_priority )
-                                                my_market->update_arena_priority(*this, p);
-                                        }
+#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+                                    if( my_concurrency_mode==cm_enforced_global  ) {
+                                        // adjust_demand() called inside, if needed
+                                        my_market->mandatory_concurrency_disable( this );
+                                    } else
+#endif /* __TBB_ENQUEUE_ENFORCED_CONCURRENCY */
+                                    {
+                                        // This thread transitioned pool to empty state, and thus is
+                                        // responsible for telling the market that there is no work to do.
+                                        my_market->adjust_demand( *this, -current_demand );
                                     }
-                                    if ( switch_back )
-                                        advertise_new_work</*Spawned*/false>();
-#endif /* __TBB_TASK_PRIORITY */
+                                    restore_priority_if_need();
                                     return true;
                                 }
                                 return false;
@@ -507,95 +571,83 @@ void arena::enqueue_task( task& t, intptr_t prio, FastRandom &random )
     __TBB_ASSERT_EX(prio == 0, "the library is not configured to respect the task priority");
     my_task_stream.push( &t, 0, random );
 #endif /* !__TBB_TASK_PRIORITY */
-    advertise_new_work< /*Spawned=*/ false >();
+    advertise_new_work<work_enqueued>();
 #if __TBB_TASK_PRIORITY
     if ( p != my_top_priority )
         my_market->update_arena_priority( *this, p );
 #endif /* __TBB_TASK_PRIORITY */
 }
 
-#if __TBB_TASK_ARENA
 struct nested_arena_context : no_copy {
     generic_scheduler &my_scheduler;
     scheduler_state const my_orig_state;
-    void *my_orig_ptr;
-    bool my_adjusting;
-    nested_arena_context(generic_scheduler *s, arena* a, bool needs_adjusting, bool as_worker = false)
-        : my_scheduler(*s), my_orig_state(*s), my_orig_ptr(NULL), my_adjusting(needs_adjusting) {
-        s->nested_arena_entry(a, *this, as_worker);
+    task_group_context *my_orig_ctx;
+    nested_arena_context(generic_scheduler *s, arena* a, size_t slot_index, bool type)
+        : my_scheduler(*s), my_orig_state(*s), my_orig_ctx(NULL) {
+        s->nested_arena_entry(a, slot_index, *this, type);
     }
     ~nested_arena_context() {
         my_scheduler.nested_arena_exit(*this);
-        (scheduler_state&)my_scheduler = my_orig_state; // restore arena settings
+        static_cast<scheduler_state&>(my_scheduler) = my_orig_state; // restore arena settings
+        governor::assume_scheduler(&my_scheduler);
     }
 };
 
-void generic_scheduler::nested_arena_entry(arena* a, nested_arena_context& c, bool as_worker) {
-    if( a == my_arena ) {
+void generic_scheduler::nested_arena_entry(arena* a, size_t slot_index, nested_arena_context& c, bool type) {
+    __TBB_ASSERT( is_alive(a->my_guard), NULL );
+    // Mimic outermost level
+    my_properties.outermost = true;
+    my_properties.type = type;
+    my_innermost_running_task = my_dummy_task;
 #if __TBB_TASK_GROUP_CONTEXT
-        c.my_orig_ptr = my_innermost_running_task =
-                new(&allocate_task(sizeof(empty_task), NULL, a->my_default_ctx)) empty_task;
+    // Save dummy's context and replace it by arena's context
+    c.my_orig_ctx = my_dummy_task->prefix().context;
+    my_dummy_task->prefix().context = a->my_default_ctx;
 #endif
+    if( a == my_arena )
         return;
-    }
-    __TBB_ASSERT( is_alive(a->my_guard), NULL );
+
     // overwrite arena settings
 #if __TBB_TASK_PRIORITY
     if ( my_offloaded_tasks )
         my_arena->orphan_offloaded_tasks( *this );
-    my_ref_top_priority = &a->my_top_priority;
-    my_ref_reload_epoch = &a->my_reload_epoch;
-    my_local_reload_epoch = a->my_reload_epoch;
+    my_offloaded_tasks = NULL;
 #endif /* __TBB_TASK_PRIORITY */
-    my_arena = a;
-    my_arena_index = 0;
-    my_arena_slot = my_arena->my_slots + my_arena_index;
-    my_inbox.detach(); // TODO: mailboxes were not designed for switching, add copy constructor?
-    attach_mailbox( affinity_id(my_arena_index+1) );
-    my_innermost_running_task = my_dispatching_task = as_worker? NULL : my_dummy_task;
-#if __TBB_TASK_GROUP_CONTEXT
-    // save dummy's context and replace it by arena's context
-    c.my_orig_ptr = my_dummy_task->prefix().context;
-    my_dummy_task->prefix().context = a->my_default_ctx;
-#endif
+    attach_arena( a, slot_index, /*is_master*/true );
+    __TBB_ASSERT( my_arena == a, NULL );
+    governor::assume_scheduler( this );
 #if __TBB_ARENA_OBSERVER
     my_last_local_observer = 0; // TODO: try optimize number of calls
     my_arena->my_observers.notify_entry_observers( my_last_local_observer, /*worker=*/false );
 #endif
     // TODO? ITT_NOTIFY(sync_acquired, a->my_slots + index);
     // TODO: it requires market to have P workers (not P-1)
-    // TODO: it still allows temporary oversubscription by 1 worker (due to my_max_num_workers)
     // TODO: a preempted worker should be excluded from assignment to other arenas e.g. my_slack--
-    if( c.my_adjusting ) my_arena->my_market->adjust_demand(*my_arena, -1);
+    if( !is_worker() && slot_index >= my_arena->my_num_reserved_slots ) my_arena->my_market->adjust_demand(*my_arena, -1);
 }
 
 void generic_scheduler::nested_arena_exit(nested_arena_context& c) {
-    if( my_arena == c.my_orig_state.my_arena ) {
 #if __TBB_TASK_GROUP_CONTEXT
-        free_task<small_local_task>(*(task*)c.my_orig_ptr); // TODO: use scoped_task instead?
+    // restore context of dummy task
+    my_dummy_task->prefix().context = c.my_orig_ctx;
 #endif
+    if ( my_arena == c.my_orig_state.my_arena )
         return;
-    }
-    if( c.my_adjusting ) my_arena->my_market->adjust_demand(*my_arena, 1);
+
+    if( !is_worker() && my_arena_index >= my_arena->my_num_reserved_slots ) my_arena->my_market->adjust_demand(*my_arena, 1);
 #if __TBB_ARENA_OBSERVER
     my_arena->my_observers.notify_exit_observers( my_last_local_observer, /*worker=*/false );
-#endif /* __TBB_SCHEDULER_OBSERVER */
+#endif /* __TBB_ARENA_OBSERVER */
 
 #if __TBB_TASK_PRIORITY
     if ( my_offloaded_tasks )
         my_arena->orphan_offloaded_tasks( *this );
     my_local_reload_epoch = *c.my_orig_state.my_ref_reload_epoch;
-    while ( as_atomic(my_arena->my_slots[0].my_scheduler).compare_and_swap( NULL, this) != this )
-        __TBB_Yield(); // TODO: task priority can use master slot for locking while accessing the scheduler
-#else
-    // Free the master slot. TODO: support multiple masters
-    __TBB_store_with_release(my_arena->my_slots[0].my_scheduler, (generic_scheduler*)NULL);
-#endif
-    my_arena->my_exit_monitors.notify_all_relaxed(); // TODO: fix concurrent monitor to use notify_one (test MultipleMastersPart4 fails)
-#if __TBB_TASK_GROUP_CONTEXT
-    // restore context of dummy task
-    my_dummy_task->prefix().context = (task_group_context*)c.my_orig_ptr;
 #endif
+    // Free the master slot.
+    __TBB_ASSERT(my_arena->my_slots[my_arena_index].my_scheduler, "A slot is already empty");
+    __TBB_store_with_release(my_arena->my_slots[my_arena_index].my_scheduler, (generic_scheduler*)NULL);
+    my_arena->my_exit_monitors.notify_one(); // do not relax!
 }
 
 void generic_scheduler::wait_until_empty() {
@@ -605,13 +657,11 @@ void generic_scheduler::wait_until_empty() {
     my_dummy_task->prefix().ref_count--;
 }
 
-#endif /* __TBB_TASK_ARENA */
-
 } // namespace internal
 } // namespace tbb
 
-#if __TBB_TASK_ARENA
 #include "scheduler_utility.h"
+#include "tbb/task_arena.h" // task_arena_base
 
 namespace tbb {
 namespace interface7 {
@@ -619,29 +669,26 @@ namespace internal {
 
 void task_arena_base::internal_initialize( ) {
     governor::one_time_init();
-    __TBB_ASSERT( my_master_slots <= 1, "Number of slots reserved for master can be only [0,1]");
-    if( my_master_slots > 1 ) my_master_slots = 1; // TODO: make more masters
-    bool default_concurrency_requested = false;
-    if( my_max_concurrency < 1 ) {
+    if( my_max_concurrency < 1 )
         my_max_concurrency = (int)governor::default_num_threads();
-        default_concurrency_requested = true;
-    }
-    arena* new_arena = &market::create_arena( my_max_concurrency + 1-my_master_slots/*it's +1 slot for num_masters=0*/,
-                                              global_control::active_value(global_control::thread_stack_size),
-                                              default_concurrency_requested );
-    // increases market's ref count for task_arena
-    market::global_market();
-    // TODO: reimplement in an efficient way. We need a scheduler instance in this thread
-    // but the scheduler is only required for task allocation and fifo random seeds until
-    // master wants to join the arena. (Idea - to create a restricted specialization)
-    // It is excessive to create an implicit arena for master here anyway. But scheduler
-    // instance implies master thread to be always connected with arena.
-    governor::local_scheduler();
-    //TODO: if( !governor::local_scheduler_if_initialized() ) generic_scheduler::create_master( the_dummy_arena )->my_auto_initialized = true;
-
-    if(as_atomic(my_arena).compare_and_swap(new_arena, NULL) != NULL) { // there is a race possible on my_initialized
-        __TBB_ASSERT(my_arena, NULL);                             // other thread was the first
-        new_arena->on_thread_leaving</*is_master*/true>(); // deallocate new arena
+    __TBB_ASSERT( my_master_slots <= (unsigned)my_max_concurrency, "Number of slots reserved for master should not exceed arena concurrency");
+    arena* new_arena = market::create_arena( my_max_concurrency, my_master_slots, 0 );
+    // add an internal market reference; a public reference was added in create_arena
+    market &m = market::global_market( /*is_public=*/false );
+    // allocate default context for task_arena
+#if __TBB_TASK_GROUP_CONTEXT
+    new_arena->my_default_ctx = new ( NFS_Allocate(1, sizeof(task_group_context), NULL) )
+            task_group_context( task_group_context::isolated, task_group_context::default_traits );
+#if __TBB_FP_CONTEXT
+    new_arena->my_default_ctx->capture_fp_settings();
+#endif
+#endif /* __TBB_TASK_GROUP_CONTEXT */
+    // threads might race to initialize the arena
+    if(as_atomic(my_arena).compare_and_swap(new_arena, NULL) != NULL) {
+        __TBB_ASSERT(my_arena, NULL); // another thread won the race
+        // release public market reference
+        m.release( /*is_public=*/true, /*blocking_terminate=*/false );
+        new_arena->on_thread_leaving<arena::ref_external>(); // destroy unneeded arena
 #if __TBB_TASK_GROUP_CONTEXT
         spin_wait_while_eq(my_context, (task_group_context*)NULL);
     } else {
@@ -649,15 +696,14 @@ void task_arena_base::internal_initialize( ) {
         as_atomic(my_context) = new_arena->my_default_ctx;
 #endif
     }
+    // TODO: should it trigger automatic initialization of this thread?
+    governor::local_scheduler_weak();
 }
 
 void task_arena_base::internal_terminate( ) {
     if( my_arena ) {// task_arena was initialized
-#if __TBB_STATISTICS_EARLY_DUMP
-        GATHER_STATISTIC( my_arena->dump_arena_statistics() );
-#endif
-        my_arena->my_market->release( /*is_public*/true ); // remove market's public reference for task_arena
-        my_arena->on_thread_leaving</*is_master*/true>();
+        my_arena->my_market->release( /*is_public=*/true, /*blocking_terminate=*/false );
+        my_arena->on_thread_leaving<arena::ref_external>();
         my_arena = 0;
 #if __TBB_TASK_GROUP_CONTEXT
         my_context = 0;
@@ -665,6 +711,27 @@ void task_arena_base::internal_terminate( ) {
     }
 }
 
+void task_arena_base::internal_attach( ) {
+    __TBB_ASSERT(!my_arena, NULL);
+    generic_scheduler* s = governor::local_scheduler_if_initialized();
+    if( s && s->my_arena ) {
+        // There is an active arena to attach to.
+        // It's still used by s, so won't be destroyed right away.
+        my_arena = s->my_arena;
+        __TBB_ASSERT( my_arena->my_references > 0, NULL );
+        my_arena->my_references += arena::ref_external;
+#if __TBB_TASK_GROUP_CONTEXT
+        my_context = my_arena->my_default_ctx;
+        my_version_and_traits |= my_context->my_version_and_traits & exact_exception_flag;
+#endif
+        my_master_slots = my_arena->my_num_reserved_slots;
+        my_max_concurrency = my_master_slots + my_arena->my_max_num_workers;
+        __TBB_ASSERT(arena::num_arena_slots(my_max_concurrency)==my_arena->my_num_slots, NULL);
+        // increases market's ref count for task_arena
+        market::global_market( /*is_public=*/true );
+    }
+}
+
 void task_arena_base::internal_enqueue( task& t, intptr_t prio ) const {
     __TBB_ASSERT(my_arena, NULL);
     generic_scheduler* s = governor::local_scheduler_if_initialized();
@@ -681,39 +748,33 @@ class delegated_task : public task {
     internal::delegate_base & my_delegate;
     concurrent_monitor & my_monitor;
     task * my_root;
-    /*override*/ task* execute() {
+    task* execute() __TBB_override {
         generic_scheduler& s = *(generic_scheduler*)prefix().owner;
-        __TBB_ASSERT(s.worker_outermost_level() || s.master_outermost_level(), "expected to be enqueued and received on the outermost level");
-        // but this task can mimics outermost level, detect it
-        if( s.master_outermost_level() && s.my_dummy_task->state() == task::executing ) {
-#if TBB_USE_EXCEPTIONS
-            // RTTI is available, check whether the cast is valid
-            __TBB_ASSERT(dynamic_cast<delegated_task*>(s.my_dummy_task), 0);
-#endif
-            set_ref_count(1); // required by the semantics of recycle_to_enqueue()
-            recycle_to_enqueue();
-            return NULL;
-        }
+        __TBB_ASSERT(s.outermost_level(), "expected to be enqueued and received on the outermost level");
         struct outermost_context : internal::no_copy {
             delegated_task * t;
             generic_scheduler & s;
             task * orig_dummy;
             task_group_context * orig_ctx;
-            outermost_context(delegated_task *_t, generic_scheduler &_s) : t(_t), s(_s) {
-                orig_dummy = s.my_dummy_task;
+            scheduler_properties orig_props;
+            outermost_context(delegated_task *_t, generic_scheduler &_s) 
+                : t(_t), s(_s), orig_dummy(s.my_dummy_task), orig_props(s.my_properties) {
+                __TBB_ASSERT(s.my_innermost_running_task == t, NULL);
 #if __TBB_TASK_GROUP_CONTEXT
                 orig_ctx = t->prefix().context;
                 t->prefix().context = s.my_arena->my_default_ctx;
 #endif
-                s.my_dummy_task = t; // mimics outermost master
-                __TBB_ASSERT(s.my_innermost_running_task == t, NULL);
+                // Mimics outermost master
+                s.my_dummy_task = t;
+                s.my_properties.type = scheduler_properties::master;
             }
             ~outermost_context() {
-                s.my_dummy_task = orig_dummy;
-#if TBB_USE_EXCEPTIONS
-                // restore context for sake of registering potential exception
+#if __TBB_TASK_GROUP_CONTEXT
+                // Restore context for sake of registering potential exception
                 t->prefix().context = orig_ctx;
 #endif
+                s.my_properties = orig_props;
+                s.my_dummy_task = orig_dummy;
             }
         } scope(this, s);
         my_delegate();
@@ -723,7 +784,7 @@ class delegated_task : public task {
         // potential exception was already registered. It must happen before the notification
         __TBB_ASSERT(my_root->ref_count()==2, NULL);
         __TBB_store_with_release(my_root->prefix().ref_count, 1); // must precede the wakeup
-        my_monitor.notify_relaxed(*this);
+        my_monitor.notify(*this); // do not relax, it needs a fence!
     }
 public:
     delegated_task( internal::delegate_base & d, concurrent_monitor & s, task * t )
@@ -734,19 +795,18 @@ public:
 
 void task_arena_base::internal_execute( internal::delegate_base& d) const {
     __TBB_ASSERT(my_arena, NULL);
-    generic_scheduler* s = governor::local_scheduler();
+    generic_scheduler* s = governor::local_scheduler_weak();
     __TBB_ASSERT(s, "Scheduler is not initialized");
     // TODO: is it safe to assign slot to a scheduler which is not yet switched?
-    // TODO TEMP: one master, make more masters
-    if( s->my_arena == my_arena || (!__TBB_load_with_acquire(my_arena->my_slots[0].my_scheduler)
-            && as_atomic(my_arena->my_slots[0].my_scheduler).compare_and_swap(s, NULL ) == NULL) ) {
+    size_t index1 =  s->my_arena == my_arena ? s->my_arena_index : my_arena->occupy_free_slot</* as_worker*/false>( *s );
+    if ( index1 != arena::out_of_arena ) {
         cpu_ctl_env_helper cpu_ctl_helper;
         cpu_ctl_helper.set_env( __TBB_CONTEXT_ARG1(my_context) );
 #if TBB_USE_EXCEPTIONS
         try {
 #endif
         //TODO: replace dummy tasks for workers as well to avoid using of the_dummy_context
-        nested_arena_context scope(s, my_arena, !my_master_slots);
+        nested_arena_context scope(s, my_arena, index1, scheduler_properties::master);
         d();
 #if TBB_USE_EXCEPTIONS
         } catch(...) {
@@ -757,7 +817,7 @@ void task_arena_base::internal_execute( internal::delegate_base& d) const {
                     task_group_context::default_traits & ~task_group_context::exact_exception );
                 exception_container.register_pending_exception();
                 __TBB_ASSERT(exception_container.my_exception, NULL);
-                exception_container.my_exception->throw_self();
+                TbbRethrowException( exception_container.my_exception );
             }
         }
 #endif
@@ -774,30 +834,35 @@ void task_arena_base::internal_execute( internal::delegate_base& d) const {
         my_arena->enqueue_task( *new( task::allocate_root(__TBB_CONTEXT_ARG1(exec_context)) )
                                 delegated_task(d, my_arena->my_exit_monitors, &root),
                                 0, s->my_random ); // TODO: priority?
+        size_t index2 = arena::out_of_arena;
         do {
             my_arena->my_exit_monitors.prepare_wait(waiter, (uintptr_t)&d);
             if( __TBB_load_with_acquire(root.prefix().ref_count) < 2 ) {
                 my_arena->my_exit_monitors.cancel_wait(waiter);
                 break;
             }
-            else if( !__TBB_load_with_acquire(my_arena->my_slots[0].my_scheduler) // TODO: refactor into a function?
-                    && as_atomic(my_arena->my_slots[0].my_scheduler).compare_and_swap(s, NULL ) == NULL ) {
+            index2 = my_arena->occupy_free_slot</*as_worker*/false>( *s );
+            if( index2 != arena::out_of_arena ) {
                 my_arena->my_exit_monitors.cancel_wait(waiter);
-                nested_arena_context scope(s, my_arena, !my_master_slots);
+                nested_arena_context scope(s, my_arena, index2, scheduler_properties::master);
                 s->local_wait_for_all(root, NULL);
 #if TBB_USE_EXCEPTIONS
                 __TBB_ASSERT( !exec_context.my_exception, NULL ); // exception can be thrown above, not deferred
 #endif
                 __TBB_ASSERT( root.prefix().ref_count == 0, NULL );
                 break;
-            } else {
-                my_arena->my_exit_monitors.commit_wait(waiter);
             }
+            my_arena->my_exit_monitors.commit_wait(waiter);
         } while( __TBB_load_with_acquire(root.prefix().ref_count) == 2 );
+        if( index2==arena::out_of_arena ) {
+            // notify a waiting thread even if this thread did not enter arena,
+            // in case it was woken by a leaving thread but did not need to enter
+            my_arena->my_exit_monitors.notify_one(); // do not relax!
+        }
 #if TBB_USE_EXCEPTIONS
         // process possible exception
         if( task_group_context::exception_container_type *pe = exec_context.my_exception )
-            pe->throw_self();
+            TbbRethrowException( pe );
 #endif
     }
 }
@@ -806,11 +871,16 @@ void task_arena_base::internal_execute( internal::delegate_base& d) const {
 // TODO: it will be rather reworked for one source of notification from is_out_of_work
 class wait_task : public task {
     binary_semaphore & my_signal;
-    /*override*/ task* execute() {
+    task* execute() __TBB_override {
         generic_scheduler* s = governor::local_scheduler_if_initialized();
         __TBB_ASSERT( s, NULL );
-        if( s->my_arena_index && s->worker_outermost_level() ) {
-            s->local_wait_for_all( *s->my_dummy_task, NULL ); // run remaining tasks
+        __TBB_ASSERT( s->outermost_level(), "The enqueued task can be processed only on outermost level" );
+        if ( s->is_worker() ) {
+            __TBB_ASSERT( s->my_innermost_running_task == this, NULL );
+            // Mimic worker on outermost level to run remaining tasks
+            s->my_innermost_running_task = s->my_dummy_task;
+            s->local_wait_for_all( *s->my_dummy_task, NULL );
+            s->my_innermost_running_task = this;
         } else s->my_arena->is_out_of_work(); // avoids starvation of internal_wait: issuing this task makes arena full
         my_signal.V();
         return NULL;
@@ -821,7 +891,7 @@ public:
 
 void task_arena_base::internal_wait() const {
     __TBB_ASSERT(my_arena, NULL);
-    generic_scheduler* s = governor::local_scheduler();
+    generic_scheduler* s = governor::local_scheduler_weak();
     __TBB_ASSERT(s, "Scheduler is not initialized");
     __TBB_ASSERT(s->my_arena != my_arena || s->my_arena_index == 0, "task_arena::wait_until_empty() is not supported within a worker context" );
     if( s->my_arena == my_arena ) {
@@ -834,7 +904,7 @@ void task_arena_base::internal_wait() const {
         while( my_arena->my_pool_state != arena::SNAPSHOT_EMPTY ) {
             if( !__TBB_load_with_acquire(my_arena->my_slots[0].my_scheduler) // TODO TEMP: one master, make more masters
                 && as_atomic(my_arena->my_slots[0].my_scheduler).compare_and_swap(s, NULL) == NULL ) {
-                nested_arena_context a(s, my_arena, !my_master_slots, true);
+                nested_arena_context a(s, my_arena, 0, scheduler_properties::worker);
                 s->wait_until_empty();
             } else {
                 binary_semaphore waiter; // TODO: replace by a single event notification from is_out_of_work
@@ -853,8 +923,47 @@ void task_arena_base::internal_wait() const {
     return s? int(s->my_arena_index) : -1;
 }
 
+#if __TBB_TASK_ISOLATION
+class isolation_guard : tbb::internal::no_copy {
+    isolation_tag &guarded;
+    isolation_tag previous_value;
+public:
+    isolation_guard( isolation_tag &isolation ) : guarded( isolation ), previous_value( isolation ) {}
+    ~isolation_guard() {
+        guarded = previous_value;
+    }
+};
 
+void isolate_within_arena( delegate_base& d, intptr_t reserved ) {
+    __TBB_ASSERT( reserved == 0, NULL );
+    // TODO: Decide what to do if the scheduler is not initialized. Is there a use case for it?
+    generic_scheduler* s = governor::local_scheduler_weak();
+    __TBB_ASSERT( s, "this_task_arena::isolate() needs an initialized scheduler" );
+    // Theoretically, we can keep the current isolation in the scheduler; however, it makes sense to store it in innermost
+    // running task because it can in principle be queried via task::self().
+    isolation_tag& current_isolation = s->my_innermost_running_task->prefix().isolation;
+    // We temporarily change the isolation tag of the currently running task. It will be restored in the destructor of the guard.
+    isolation_guard guard( current_isolation );
+    current_isolation = reinterpret_cast<isolation_tag>(&d);
+    d();
+}
+#endif /* __TBB_TASK_ISOLATION */
+
+int task_arena_base::internal_max_concurrency(const task_arena *ta) {
+    arena* a = NULL;
+    if( ta ) // for special cases of ta->max_concurrency()
+        a = ta->my_arena;
+    else if( generic_scheduler* s = governor::local_scheduler_if_initialized() )
+        a = s->my_arena; // the current arena if any
+
+    if( a ) { // Get parameters from the arena
+        __TBB_ASSERT( !ta || ta->my_max_concurrency==1, NULL );
+        return a->my_num_reserved_slots + a->my_max_num_workers;
+    } else {
+        __TBB_ASSERT( !ta || ta->my_max_concurrency==automatic, NULL );
+        return int(governor::default_num_threads());
+    }
+}
 } // tbb::interfaceX::internal
 } // tbb::interfaceX
 } // tbb
-#endif /* __TBB_TASK_ARENA */
diff --git a/src/tbb/arena.h b/src/tbb/arena.h
index d316d78..2bc23c4 100644
--- a/src/tbb/arena.h
+++ b/src/tbb/arena.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef _TBB_arena_H
@@ -34,9 +34,7 @@
 #include "observer_proxy.h"
 #include "market.h"
 #include "governor.h"
-#if __TBB_TASK_ARENA
 #include "concurrent_monitor.h"
-#endif
 
 namespace tbb {
 
@@ -45,57 +43,55 @@ class allocate_root_with_context_proxy;
 
 namespace internal {
 
-//! arena data except the array of slots
-/** Separated in order to simplify padding. 
+//! The structure of an arena, except the array of slots.
+/** Separated in order to simplify padding.
     Intrusive list node base class is used by market to form a list of arenas. **/
 struct arena_base : padded<intrusive_list_node> {
-    //! Number of workers that have been marked out by the resource manager to service the arena
+    //! The number of workers that have been marked out by the resource manager to service the arena.
     unsigned my_num_workers_allotted;   // heavy use in stealing loop
 
-    //! References of the arena
-    /** Counts workers and master references separately. Bit 0 indicates reference from implicit
-        master or explicit task_arena; the next bits contain number of workers servicing the arena.*/
+    //! Reference counter for the arena.
+    /** Worker and master references are counted separately: first several bits are for references
+        from master threads or explicit task_arenas (see arena::ref_external_bits below);
+        the rest counts the number of workers servicing the arena. */
     atomic<unsigned> my_references;     // heavy use in stealing loop
 
 #if __TBB_TASK_PRIORITY
-    //! Highest priority of recently spawned or enqueued tasks.
+    //! The highest priority of recently spawned or enqueued tasks.
     volatile intptr_t my_top_priority;  // heavy use in stealing loop
 #endif /* !__TBB_TASK_PRIORITY */
 
-    //! Maximal currently busy slot.
+    //! The maximal number of currently busy slots.
     atomic<unsigned> my_limit;          // heavy use in stealing loop
 
-    //! Task pool for the tasks scheduled via task::enqueue() method
+    //! Task pool for the tasks scheduled via task::enqueue() method.
     /** Such scheduling guarantees eventual execution even if
         - new tasks are constantly coming (by extracting scheduled tasks in
           relaxed FIFO order);
-        - the enqueuing thread does not call any of wait_for_all methods. **/
-#if __TBB_TASK_PRIORITY
+        - the enqueuing thread does not call any of wait_for_all methods.
+        Depending on __TBB_TASK_PRIORITY, num_priority_levels can be 1 or more. **/
     task_stream<num_priority_levels> my_task_stream; // heavy use in stealing loop
-#else /* !__TBB_TASK_PRIORITY */
-    task_stream<1>                   my_task_stream; // heavy use in stealing loop
-#endif /* !__TBB_TASK_PRIORITY */
 
-    //! Number of workers that are currently requested from the resource manager
-    int my_num_workers_requested;
-
-    //! Number of workers requested by the master thread owning the arena
+    //! The number of workers requested by the master thread owning the arena.
     unsigned my_max_num_workers;
 
+    //! The number of workers that are currently requested from the resource manager.
+    int my_num_workers_requested;
+
     //! Current task pool state and estimate of available tasks amount.
-    /** The estimate is either 0 (SNAPSHOT_EMPTY) or infinity (SNAPSHOT_FULL). 
-        Special state is "busy" (any other unsigned value). 
-        Note that the implementation of arena::is_busy_or_empty() requires 
+    /** The estimate is either 0 (SNAPSHOT_EMPTY) or infinity (SNAPSHOT_FULL).
+        Special state is "busy" (any other unsigned value).
+        Note that the implementation of arena::is_busy_or_empty() requires
         my_pool_state to be unsigned. */
     tbb::atomic<uintptr_t> my_pool_state;
 
-#if __TBB_SCHEDULER_OBSERVER
-    //! List of local observers attached to this arena.
+#if __TBB_ARENA_OBSERVER
+    //! The list of local observers attached to this arena.
     observer_list my_observers;
-#endif /* __TBB_SCHEDULER_OBSERVER */
+#endif
 
 #if __TBB_TASK_PRIORITY
-    //! Lowest normalized priority of available spawned or enqueued tasks.
+    //! The lowest normalized priority of available spawned or enqueued tasks.
     intptr_t my_bottom_priority;
 
     //! Tracks events that may bring tasks in offload areas to the top priority level.
@@ -103,13 +99,13 @@ struct arena_base : padded<intrusive_list_node> {
         is elevated to the current arena's top level. **/
     uintptr_t my_reload_epoch;
 
-    //! List of offloaded tasks abandoned by workers revoked by the market
+    //! The list of offloaded tasks abandoned by workers revoked by the market.
     task* my_orphaned_tasks;
 
     //! Counter used to track the occurrence of recent orphaning and re-sharing operations.
     tbb::atomic<uintptr_t> my_abandonment_epoch;
 
-    //! Highest priority level containing enqueued tasks
+    //! The highest priority level containing enqueued tasks.
     /** It being greater than 0 means that high priority enqueued tasks had to be
         bypassed because all workers were blocked in nested dispatch loops and
         were unable to progress at then current priority level. **/
@@ -118,10 +114,10 @@ struct arena_base : padded<intrusive_list_node> {
 
     // Below are rarely modified members
 
-    //! Market owning this arena
+    //! The market that owns this arena.
     market* my_market;
 
-    //! ABA prevention marker
+    //! ABA prevention marker.
     uintptr_t my_aba_epoch;
 
 #if !__TBB_FP_CONTEXT
@@ -136,16 +132,26 @@ struct arena_base : padded<intrusive_list_node> {
     task_group_context* my_default_ctx;
 #endif /* __TBB_TASK_GROUP_CONTEXT */
 
-    //! Number of slots in the arena
+    //! The number of slots in the arena.
     unsigned my_num_slots;
 
-    //! Indicates if there is an oversubscribing worker created to service enqueued tasks.
-    bool my_mandatory_concurrency;
+    //! The number of reserved slots (can be occupied only by masters).
+    unsigned my_num_reserved_slots;
+
+#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+    //! Possible states for the concurrency mode of an arena.
+    enum concurrency_mode {
+        cm_normal =  0,     // arena is served by workers as usual
+        cm_enforced_local,  // arena needs an extra worker despite the arena limit
+        cm_enforced_global  // arena needs an extra worker despite a global limit
+    };
 
-#if __TBB_TASK_ARENA
-    //! exit notifications after arena slot is released
+    //! The concurrency mode of an arena.
+    concurrency_mode my_concurrency_mode;
+#endif /* __TBB_ENQUEUE_ENFORCED_CONCURRENCY */
+
+    //! Waiting object for master threads that cannot join the arena.
     concurrent_monitor my_exit_monitors;
-#endif
 
 #if TBB_USE_ASSERT
     //! Used to trap accesses to the object after its destruction.
@@ -153,53 +159,34 @@ struct arena_base : padded<intrusive_list_node> {
 #endif /* TBB_USE_ASSERT */
 }; // struct arena_base
 
-class arena
-#if (__GNUC__<4 || __GNUC__==4 && __GNUC_MINOR__==0) && !__INTEL_COMPILER
-    : public padded<arena_base>
-#else
-    : private padded<arena_base>
-#endif
+class arena: public padded<arena_base>
 {
-private:
-    friend class generic_scheduler;
-    template<typename SchedulerTraits> friend class custom_scheduler;
-    friend class governor;
-    friend class task_scheduler_observer_v3;
-    friend class market;
-    friend class tbb::task;
-    friend class tbb::task_group_context;
-    friend class allocate_root_with_context_proxy;
-    friend class intrusive_list<arena>;
-    friend class interface7::internal::task_arena_base; // declared in scheduler_common.h
-    friend class interface7::internal::delegated_task;
-    friend class interface7::internal::wait_task;
-
+    //! If enqueued tasks found, restore arena priority and task presence status
+    void restore_priority_if_need();
+public:
     typedef padded<arena_base> base_type;
 
+    //! Types of work advertised by advertise_new_work()
+    enum new_work_type {
+        work_spawned,
+        wakeup,
+        work_enqueued
+    };
+
     //! Constructor
-    arena ( market&, unsigned max_num_workers );
+    arena ( market&, unsigned max_num_workers, unsigned num_reserved_slots );
 
     //! Allocate an instance of arena.
-    static arena& allocate_arena( market&, unsigned num_slots );
+    static arena& allocate_arena( market&, unsigned num_slots, unsigned num_reserved_slots );
 
-    static int unsigned num_slots_to_reserve ( unsigned num_slots ) {
+    static int unsigned num_arena_slots ( unsigned num_slots ) {
         return max(2u, num_slots);
     }
 
-    static int allocation_size ( unsigned max_num_workers ) {
-        return sizeof(base_type) + num_slots_to_reserve(max_num_workers) * (sizeof(mail_outbox) + sizeof(arena_slot));
+    static int allocation_size ( unsigned num_slots ) {
+        return sizeof(base_type) + num_slots * (sizeof(mail_outbox) + sizeof(arena_slot));
     }
 
-#if __TBB_TASK_GROUP_CONTEXT
-    //! Finds all contexts affected by the state change and propagates the new state to them.
-    /** The propagation is relayed to the market because tasks created by one 
-        master thread can be passed to and executed by other masters. This means 
-        that context trees can span several arenas at once and thus state change
-        propagation cannot be generally localized to one arena only. **/
-    template <typename T>
-    bool propagate_task_group_state ( T task_group_context::*mptr_state, task_group_context& src, T new_state );
-#endif /* __TBB_TASK_GROUP_CONTEXT */
-
     //! Get reference to mailbox corresponding to given affinity_id.
     mail_outbox& mailbox( affinity_id id ) {
         __TBB_ASSERT( 0<id, "affinity id must be positive integer" );
@@ -219,16 +206,23 @@ private:
     //! At least one task has been offered for stealing since the last snapshot started
     static const pool_state_t SNAPSHOT_FULL = pool_state_t(-1);
 
+    //! The number of least significant bits for external references
+    static const unsigned ref_external_bits = 12; // up to 4095 external and 1M workers
+
+    //! Reference increment values for externals and workers
+    static const unsigned ref_external = 1;
+    static const unsigned ref_worker   = 1<<ref_external_bits;
+
     //! No tasks to steal or snapshot is being taken.
     static bool is_busy_or_empty( pool_state_t s ) { return s < SNAPSHOT_FULL; }
 
     //! The number of workers active in the arena.
     unsigned num_workers_active( ) {
-        return my_references >> 1;
+        return my_references >> ref_external_bits;
     }
 
     //! If necessary, raise a flag that there is new job in arena.
-    template<bool Spawned> void advertise_new_work();
+    template<arena::new_work_type work_type> void advertise_new_work();
 
     //! Check if there is job anywhere in arena.
     /** Return true if no job or if arena is being cleaned up. */
@@ -241,7 +235,7 @@ private:
     void process( generic_scheduler& );
 
     //! Notification that worker or master leaves its arena
-    template<bool is_master>
+    template<unsigned ref_param>
     inline void on_thread_leaving ( );
 
 #if __TBB_STATISTICS
@@ -263,12 +257,33 @@ private:
     intptr_t workers_task_node_count();
 #endif
 
+    //! Check for the presence of enqueued tasks at all priority levels
+    bool has_enqueued_tasks();
+
+#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+    //! Recall worker if global mandatory is enabled, but not for this arena
+    bool recall_by_mandatory_request() const {
+        return my_market->my_mandatory_num_requested && my_concurrency_mode==cm_normal;
+    }
+
+    //! The arena is currently in an enforced concurrency mode
+    bool must_have_concurrency() const {
+        return my_num_workers_requested &&
+               ( my_concurrency_mode==cm_enforced_local || my_concurrency_mode==cm_enforced_global );
+    }
+#endif
+    static const size_t out_of_arena = ~size_t(0);
+    //! Tries to occupy a slot in the arena. On success, returns the slot index; if no slot is available, returns out_of_arena.
+    template <bool as_worker>
+    size_t occupy_free_slot( generic_scheduler& s );
+    //! Tries to occupy a slot in the specified range.
+    size_t occupy_free_slot_in_range( generic_scheduler& s, size_t lower, size_t upper );
+
     /** Must be the last data field */
     arena_slot my_slots[1];
 }; // class arena
 
-
-template<bool is_master>
+template<unsigned ref_param>
 inline void arena::on_thread_leaving ( ) {
     //
     // Implementation of arena destruction synchronization logic contained various
@@ -283,6 +298,11 @@ inline void arena::on_thread_leaving ( ) {
     // to RML for threads, the arena object is destroyed only when both the last
     // thread is leaving it and arena's state is EMPTY (that is its master thread
     // left and it does not contain any work).
+    // Thus resetting arena to EMPTY state (as earlier TBB versions did) should not
+    // be done here (or anywhere else in the master thread to that matter); doing so
+    // can result either in arena's premature destruction (at least without
+    // additional costly checks in workers) or in unnecessary arena state changes
+    // (and ensuing workers migration).
     //
     // A worker that checks for work presence and transitions arena to the EMPTY
     // state (in snapshot taking procedure arena::is_out_of_work()) updates
@@ -321,40 +341,79 @@ inline void arena::on_thread_leaving ( ) {
     //
     uintptr_t aba_epoch = my_aba_epoch;
     market* m = my_market;
-    __TBB_ASSERT(my_references > int(!is_master), "broken arena reference counter");
-    if ( (my_references -= is_master? 1:2 ) == 0 ) // worker's counter starts from bit 1
+    __TBB_ASSERT(my_references >= ref_param, "broken arena reference counter");
+#if __TBB_STATISTICS_EARLY_DUMP
+    // While still holding a reference to the arena, compute how many external references are left.
+    // If just one, dump statistics.
+    if ( modulo_power_of_two(my_references,ref_worker)==ref_param ) // may only be true with ref_external
+        GATHER_STATISTIC( dump_arena_statistics() );
+#endif
+#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+    // When there is no workers someone must free arena, as
+    // without workers, no one calls is_out_of_work().
+    // Skip workerless arenas because they have no demand for workers.
+    // TODO: consider more strict conditions for the cleanup,
+    // because it can create the demand of workers,
+    // but the arena can be already empty (and so ready for destroying)
+    if( ref_param==ref_external && my_num_slots != my_num_reserved_slots
+        && 0 == m->my_num_workers_soft_limit && my_concurrency_mode==cm_normal ) {
+        bool is_out = false;
+        for (int i=0; i<num_priority_levels; i++) {
+            is_out = is_out_of_work();
+            if (is_out)
+                break;
+        }
+        // We expect, that in worst case it's enough to have num_priority_levels-1
+        // calls to restore priorities and and yet another is_out_of_work() to conform
+        // that no work was found. But as market::set_active_num_workers() can be called
+        // concurrently, can't guarantee last is_out_of_work() return true.
+    }
+#endif
+    if ( (my_references -= ref_param ) == 0 )
         m->try_destroy_arena( this, aba_epoch );
 }
 
-template<bool Spawned> void arena::advertise_new_work() {
-    if( !Spawned ) { // i.e. the work was enqueued
-        if( my_max_num_workers==0 ) {
+template<arena::new_work_type work_type> void arena::advertise_new_work() {
+    if( work_type == work_enqueued ) {
+#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+        if( my_market->my_num_workers_soft_limit == 0 ) {
+            if( my_concurrency_mode!=cm_enforced_global ) {
+                if( my_market->mandatory_concurrency_enable( this ) ) {
+                    my_pool_state = SNAPSHOT_FULL;
+                    return;
+                }
+            }
+        } else if( my_max_num_workers==0 && my_num_reserved_slots==1 ) {
             my_max_num_workers = 1;
-            __TBB_ASSERT(!my_mandatory_concurrency, "");
-            my_mandatory_concurrency = true;
-            __TBB_ASSERT(!num_workers_active(), "");
+            __TBB_ASSERT(my_concurrency_mode==cm_normal, NULL);
+            my_concurrency_mode = cm_enforced_local;
             my_pool_state = SNAPSHOT_FULL;
             my_market->adjust_demand( *this, 1 );
             return;
         }
-        // Local memory fence is required to avoid missed wakeups; see the comment below.
-        // Starvation resistant tasks require mandatory concurrency, so missed wakeups are unacceptable.
-        atomic_fence(); 
+#endif /* __TBB_ENQUEUE_ENFORCED_CONCURRENCY */
+        // Local memory fence here and below is required to avoid missed wakeups; see the comment below.
+        // Starvation resistant tasks require concurrency, so missed wakeups are unacceptable.
+        atomic_fence();
+    }
+    else if( work_type == wakeup ) {
+        __TBB_ASSERT(my_max_num_workers!=0, "Unexpected worker wakeup request");
+        atomic_fence();
     }
     // Double-check idiom that, in case of spawning, is deliberately sloppy about memory fences.
-    // Technically, to avoid missed wakeups, there should be a full memory fence between the point we 
-    // released the task pool (i.e. spawned task) and read the arena's state.  However, adding such a 
-    // fence might hurt overall performance more than it helps, because the fence would be executed 
-    // on every task pool release, even when stealing does not occur.  Since TBB allows parallelism, 
+    // Technically, to avoid missed wakeups, there should be a full memory fence between the point we
+    // released the task pool (i.e. spawned task) and read the arena's state.  However, adding such a
+    // fence might hurt overall performance more than it helps, because the fence would be executed
+    // on every task pool release, even when stealing does not occur.  Since TBB allows parallelism,
     // but never promises parallelism, the missed wakeup is not a correctness problem.
     pool_state_t snapshot = my_pool_state;
     if( is_busy_or_empty(snapshot) ) {
-        // Attempt to mark as full.  The compare_and_swap below is a little unusual because the 
+        // Attempt to mark as full.  The compare_and_swap below is a little unusual because the
         // result is compared to a value that can be different than the comparand argument.
         if( my_pool_state.compare_and_swap( SNAPSHOT_FULL, snapshot )==SNAPSHOT_EMPTY ) {
             if( snapshot!=SNAPSHOT_EMPTY ) {
-                // This thread read "busy" into snapshot, and then another thread transitioned 
-                // my_pool_state to "empty" in the meantime, which caused the compare_and_swap above 
+                // This thread read "busy" into snapshot, and then another thread transitioned
+                // my_pool_state to "empty" in the meantime, which caused the compare_and_swap above
                 // to fail.  Attempt to transition my_pool_state from "empty" to "full".
                 if( my_pool_state.compare_and_swap( SNAPSHOT_FULL, SNAPSHOT_EMPTY )!=SNAPSHOT_EMPTY ) {
                     // Some other thread transitioned my_pool_state from "empty", and hence became
@@ -363,20 +422,32 @@ template<bool Spawned> void arena::advertise_new_work() {
                 }
             }
             // This thread transitioned pool from empty to full state, and thus is responsible for
-            // telling RML that there is work to do.
-            if( Spawned ) {
-                if( my_mandatory_concurrency ) {
-                    __TBB_ASSERT(my_max_num_workers==1, "");
-                    __TBB_ASSERT(!governor::local_scheduler()->is_worker(), "");
-                    // There was deliberate oversubscription on 1 core for sake of starvation-resistant tasks.
-                    // Now a single active thread (must be the master) supposedly starts a new parallel region
-                    // with relaxed sequential semantics, and oversubscription should be avoided.
-                    // Demand for workers has been decreased to 0 during SNAPSHOT_EMPTY, so just keep it.
-                    my_max_num_workers = 0;
-                    my_mandatory_concurrency = false;
+            // telling the market that there is work to do.
+#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+            if( work_type == work_spawned ) {
+                if( my_concurrency_mode!=cm_normal ) {
+                    switch( my_concurrency_mode ) {
+                    case cm_enforced_local:
+                        __TBB_ASSERT(my_max_num_workers==1, "");
+                        __TBB_ASSERT(!governor::local_scheduler()->is_worker(), "");
+                        // There was deliberate oversubscription on 1 core for sake of starvation-resistant tasks.
+                        // Now a single active thread (must be the master) supposedly starts a new parallel region
+                        // with relaxed sequential semantics, and oversubscription should be avoided.
+                        // Demand for workers has been decreased to 0 during SNAPSHOT_EMPTY, so just keep it.
+                        my_max_num_workers = 0;
+                        my_concurrency_mode = cm_normal;
+                        break;
+                    case cm_enforced_global:
+                        my_market->mandatory_concurrency_disable( this );
+                        restore_priority_if_need();
+                        break;
+                    default:
+                        break;
+                    }
                     return;
                 }
             }
+#endif /* __TBB_ENQUEUE_ENFORCED_CONCURRENCY */
             my_market->adjust_demand( *this, my_max_num_workers );
         }
     }
diff --git a/src/tbb/cache_aligned_allocator.cpp b/src/tbb/cache_aligned_allocator.cpp
index 2a45cfb..e1e8713 100644
--- a/src/tbb/cache_aligned_allocator.cpp
+++ b/src/tbb/cache_aligned_allocator.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/tbb_config.h"
@@ -180,23 +180,24 @@ size_t NFS_GetLineSize() {
 #endif
 
 void* NFS_Allocate( size_t n, size_t element_size, void* /*hint*/ ) {
-    size_t m = NFS_LineSize;
-    __TBB_ASSERT( m<=NFS_MaxLineSize, "illegal value for NFS_LineSize" );
-    __TBB_ASSERT( (m & (m-1))==0, "must be power of two" );
+    //TODO: make this functionality  available via an adaptor over generic STL like allocator
+    const size_t nfs_cache_line_size = NFS_LineSize;
+    __TBB_ASSERT( nfs_cache_line_size <= NFS_MaxLineSize, "illegal value for NFS_LineSize" );
+    __TBB_ASSERT( is_power_of_two(nfs_cache_line_size), "must be power of two" );
     size_t bytes = n*element_size;
 
-    if (bytes<n || bytes+m<bytes) {
+    if (bytes<n || bytes+nfs_cache_line_size<bytes) {
         // Overflow
         throw_exception(eid_bad_alloc);
     }
     // scalable_aligned_malloc considers zero size request an error, and returns NULL
     if (bytes==0) bytes = 1;
-    
-    void* result = (*padded_allocate_handler)( bytes, m );
+
+    void* result = (*padded_allocate_handler)( bytes, nfs_cache_line_size );
     if (!result)
         throw_exception(eid_bad_alloc);
 
-    __TBB_ASSERT( ((size_t)result&(m-1)) == 0, "The address returned isn't aligned to cache line size" );
+    __TBB_ASSERT( is_aligned(result, nfs_cache_line_size), "The address returned isn't aligned to cache line size" );
     return result;
 }
 
@@ -204,16 +205,16 @@ void NFS_Free( void* p ) {
     (*padded_free_handler)( p );
 }
 
-static void* padded_allocate( size_t bytes, size_t alignment ) {    
+static void* padded_allocate( size_t bytes, size_t alignment ) {
     unsigned char* result = NULL;
     unsigned char* base = (unsigned char*)malloc(alignment+bytes);
-    if( base ) {        
+    if( base ) {
         // Round up to the next line
         result = (unsigned char*)((uintptr_t)(base+alignment)&-alignment);
         // Record where block actually starts.
         ((uintptr_t*)result)[-1] = uintptr_t(base);
     }
-    return result;    
+    return result;
 }
 
 static void padded_free( void* p ) {
@@ -226,7 +227,7 @@ static void padded_free( void* p ) {
     }
 }
 
-void* __TBB_EXPORTED_FUNC allocate_via_handler_v3( size_t n ) {    
+void* __TBB_EXPORTED_FUNC allocate_via_handler_v3( size_t n ) {
     void* result = (*MallocHandler) (n);
     if (!result) {
         throw_exception(eid_bad_alloc);
@@ -235,7 +236,7 @@ void* __TBB_EXPORTED_FUNC allocate_via_handler_v3( size_t n ) {
 }
 
 void __TBB_EXPORTED_FUNC deallocate_via_handler_v3( void *p ) {
-    if( p ) {        
+    if( p ) {
         (*FreeHandler)( p );
     }
 }
diff --git a/src/tbb/cilk-tbb-interop.h b/src/tbb/cilk-tbb-interop.h
index 5ac8453..19db6ea 100644
--- a/src/tbb/cilk-tbb-interop.h
+++ b/src/tbb/cilk-tbb-interop.h
@@ -1,24 +1,24 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
-/* The API to enable interoperability between Intel(R) Cilk(TM) Plus and 
+/* The API to enable interoperability between Intel(R) Cilk(TM) Plus and
    Intel(R) Threading Building Blocks. */
 
 #ifndef CILK_TBB_INTEROP_H
@@ -71,7 +71,7 @@ typedef __cilk_tbb_retcode (*__cilk_tbb_pfn_unwatch_stacks)(void *data);
       The thunk must be invoked on the thread doing the releasing,
       Must "happen before" the stack is used elsewhere.
 
-   When a non-empty stack is transferred between threads, the first thread must orphan it 
+   When a non-empty stack is transferred between threads, the first thread must orphan it
    and the second thread must adopt it.
 
    An empty stack can be transferred similarly, or simply released by the first thread.
@@ -85,7 +85,7 @@ typedef __cilk_tbb_retcode (*__cilk_tbb_pfn_unwatch_stacks)(void *data);
                 |     \     /                                  \     /     |
                 |      --<--                                    --<--      |
                 ^      RELEASE or                              ADOPT       V
-                 \     unwatch                                            / 
+                 \     unwatch                                            /
                   \                                                      /
                    --------------------------<---------------------------
                                           RELEASE
@@ -98,11 +98,11 @@ struct __cilk_tbb_stack_op_thunk {
 /* Thunk invoked by TBB when it is no longer interested in watching the stack bound to the current thread. */
 struct __cilk_tbb_unwatch_thunk {
     __cilk_tbb_pfn_unwatch_stacks routine;
-    void* data;      
+    void* data;
 };
 
 /* Defined by cilkrts, called by TBB.
-   Requests that cilkrts invoke __cilk_tbb_stack_op_thunk when it orphans a stack. 
+   Requests that cilkrts invoke __cilk_tbb_stack_op_thunk when it orphans a stack.
    cilkrts sets *u to a thunk that TBB should call when it is no longer interested in watching the stack. */
 CILK_EXPORT
 __cilk_tbb_retcode __cilkrts_watch_stack(struct __cilk_tbb_unwatch_thunk* u,
diff --git a/src/tbb/concurrent_hash_map.cpp b/src/tbb/concurrent_hash_map.cpp
index 2ca8833..d2dcb23 100644
--- a/src/tbb/concurrent_hash_map.cpp
+++ b/src/tbb/concurrent_hash_map.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/concurrent_hash_map.h"
@@ -45,7 +45,7 @@ struct hash_map_segment_base {
 };
 
 bool hash_map_segment_base::internal_grow_predicate() const {
-    // Intel(R) Thread Checker considers the following reads to be races, so we hide them in the 
+    // Intel(R) Thread Checker considers the following reads to be races, so we hide them in the
     // library so that Intel(R) Thread Checker will ignore them.  The reads are used in a double-check
     // context, so the program is nonetheless correct despite the race.
     return my_logical_size >= my_physical_size && my_physical_size < max_physical_size;
diff --git a/src/tbb/concurrent_monitor.cpp b/src/tbb/concurrent_monitor.cpp
index f185d92..5ae3784 100644
--- a/src/tbb/concurrent_monitor.cpp
+++ b/src/tbb/concurrent_monitor.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "concurrent_monitor.h"
@@ -89,7 +89,7 @@ void concurrent_monitor::notify_one_relaxed() {
 void concurrent_monitor::notify_all_relaxed() {
     if( waitset_ec.empty() )
         return;
-    dllist_t temp;
+    waitset_t temp;
     const waitset_node_t* end;
     {
         tbb::spin_mutex::scoped_lock l( mutex_ec );
@@ -112,7 +112,7 @@ void concurrent_monitor::notify_all_relaxed() {
 void concurrent_monitor::abort_all_relaxed() {
     if( waitset_ec.empty() )
         return;
-    dllist_t temp;
+    waitset_t temp;
     const waitset_node_t* end;
     {
         tbb::spin_mutex::scoped_lock l( mutex_ec );
diff --git a/src/tbb/concurrent_monitor.h b/src/tbb/concurrent_monitor.h
index 32afe3d..55c4dc9 100644
--- a/src/tbb/concurrent_monitor.h
+++ b/src/tbb/concurrent_monitor.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_concurrent_monitor_H
@@ -65,6 +65,7 @@ public:
 
     //! remove node 'n'
     inline void remove( node_t& n ) {
+        __TBB_ASSERT( count > 0, "attempt to remove an item from an empty list" );
         __TBB_store_relaxed(count, __TBB_load_relaxed(count) - 1);
         n.prev->next = n.next;
         n.next->prev = n.prev;
@@ -89,7 +90,6 @@ private:
 };
 
 typedef circular_doubly_linked_list_with_sentinel waitset_t;
-typedef circular_doubly_linked_list_with_sentinel dllist_t;
 typedef circular_doubly_linked_list_with_sentinel::node_t waitset_node_t;
 
 //! concurrent_monitor
@@ -129,7 +129,7 @@ public:
     concurrent_monitor() {__TBB_store_relaxed(epoch, 0);}
 
     //! dtor
-    ~concurrent_monitor() ; 
+    ~concurrent_monitor() ;
 
     //! prepare wait by inserting 'thr' into the wait queue
     void prepare_wait( thread_context& thr, uintptr_t ctx = 0 );
@@ -177,7 +177,7 @@ public:
 
     //! Abort any sleeping threads at the time of the call
     void abort_all() {atomic_fence(); abort_all_relaxed(); }
- 
+
     //! Abort any sleeping threads at the time of the call; Relaxed version
     void abort_all_relaxed();
 
@@ -208,7 +208,7 @@ template<typename P>
 void concurrent_monitor::notify_relaxed( const P& predicate ) {
         if( waitset_ec.empty() )
             return;
-        dllist_t temp;
+        waitset_t temp;
         waitset_node_t* nxt;
         const waitset_node_t* end = waitset_ec.end();
         {
diff --git a/src/tbb/concurrent_queue.cpp b/src/tbb/concurrent_queue.cpp
index a380d9f..37e0df4 100644
--- a/src/tbb/concurrent_queue.cpp
+++ b/src/tbb/concurrent_queue.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/tbb_stddef.h"
@@ -158,6 +158,8 @@ public:
         return array[index(k)];
     }
 
+    atomic<unsigned> abort_counter;
+
     //! Value for effective_capacity that denotes unbounded queue.
     static const ptrdiff_t infinite_capacity = ptrdiff_t(~size_t(0)/2);
 };
@@ -168,7 +170,7 @@ public:
     #pragma warning( disable: 4146 )
 #endif
 
-static void* invalid_page;
+static void* static_invalid_page;
 
 //------------------------------------------------------------------------
 // micro_queue
@@ -185,6 +187,7 @@ void micro_queue::push( const void* item, ticket k, concurrent_queue_base& base,
         } __TBB_CATCH(...) {
             ++base.my_rep->n_invalid_entries;
             make_invalid( k );
+            __TBB_RETHROW();
         }
         p->mask = 0;
         p->next = NULL;
@@ -245,17 +248,17 @@ bool micro_queue::pop( void* dst, ticket k, concurrent_queue_base& base ) {
     k &= -concurrent_queue_rep::n_queue;
     spin_wait_until_eq( head_counter, k );
     spin_wait_while_eq( tail_counter, k );
-    page& p = *head_page;
-    __TBB_ASSERT( &p, NULL );
+    page *p = head_page;
+    __TBB_ASSERT( p, NULL );
     size_t index = modulo_power_of_two( k/concurrent_queue_rep::n_queue, base.items_per_page );
     bool success = false;
     {
-        micro_queue_pop_finalizer finalizer( *this, base, k+concurrent_queue_rep::n_queue, index==base.items_per_page-1 ? &p : NULL );
-        if( p.mask & uintptr_t(1)<<index ) {
+        micro_queue_pop_finalizer finalizer( *this, base, k+concurrent_queue_rep::n_queue, index==base.items_per_page-1 ? p : NULL );
+        if( p->mask & uintptr_t(1)<<index ) {
             success = true;
             ITT_NOTIFY( sync_acquired, dst );
             ITT_NOTIFY( sync_acquired, head_page );
-            base.assign_and_destroy_item( dst, p, index );
+            base.assign_and_destroy_item( dst, *p, index );
             ITT_NOTIFY( sync_releasing, head_page );
         } else {
             --base.my_rep->n_invalid_entries;
@@ -298,6 +301,7 @@ micro_queue& micro_queue::assign( const micro_queue& src, concurrent_queue_base&
             tail_page = cur_page;
         } __TBB_CATCH(...) {
             make_invalid( g_index );
+            __TBB_RETHROW();
         }
     } else {
         head_page = tail_page = NULL;
@@ -328,17 +332,16 @@ void micro_queue::make_invalid( ticket k )
 {
     static concurrent_queue_base::page dummy = {static_cast<page*>((void*)1), 0};
     // mark it so that no more pushes are allowed.
-    invalid_page = &dummy;
+    static_invalid_page = &dummy;
     {
         spin_mutex::scoped_lock lock( page_mutex );
         tail_counter = k+concurrent_queue_rep::n_queue+1;
         if( page* q = tail_page )
-            q->next = static_cast<page*>(invalid_page);
+            q->next = static_cast<page*>(static_invalid_page);
         else
-            head_page = static_cast<page*>(invalid_page);
-        tail_page = static_cast<page*>(invalid_page);
+            head_page = static_cast<page*>(static_invalid_page);
+        tail_page = static_cast<page*>(static_invalid_page);
     }
-    __TBB_RETHROW();
 }
 
 #if _MSC_VER && !defined(__INTEL_COMPILER)
@@ -357,10 +360,10 @@ concurrent_queue_base_v3::concurrent_queue_base_v3( size_t item_sz ) {
                      1;
     my_capacity = size_t(-1)/(item_sz>1 ? item_sz : 2);
     my_rep = cache_aligned_allocator<concurrent_queue_rep>().allocate(1);
-    __TBB_ASSERT( (size_t)my_rep % NFS_GetLineSize()==0, "alignment error" );
-    __TBB_ASSERT( (size_t)&my_rep->head_counter % NFS_GetLineSize()==0, "alignment error" );
-    __TBB_ASSERT( (size_t)&my_rep->tail_counter % NFS_GetLineSize()==0, "alignment error" );
-    __TBB_ASSERT( (size_t)&my_rep->array % NFS_GetLineSize()==0, "alignment error" );
+    __TBB_ASSERT( is_aligned(my_rep, NFS_GetLineSize()), "alignment error" );
+    __TBB_ASSERT( is_aligned(&my_rep->head_counter, NFS_GetLineSize()), "alignment error" );
+    __TBB_ASSERT( is_aligned(&my_rep->tail_counter, NFS_GetLineSize()), "alignment error" );
+    __TBB_ASSERT( is_aligned(&my_rep->array, NFS_GetLineSize()), "alignment error" );
     memset(my_rep,0,sizeof(concurrent_queue_rep));
     new ( &my_rep->items_avail ) concurrent_monitor();
     new ( &my_rep->slots_avail ) concurrent_monitor();
@@ -384,6 +387,7 @@ void concurrent_queue_base_v8::internal_push_move( const void* src ) {
 
 void concurrent_queue_base_v3::internal_insert_item( const void* src, copy_specifics op_type ) {
     concurrent_queue_rep& r = *my_rep;
+    unsigned old_abort_counter = r.abort_counter;
     ticket k = r.tail_counter++;
     ptrdiff_t e = my_capacity;
 #if DO_ITT_NOTIFY
@@ -401,6 +405,10 @@ void concurrent_queue_base_v3::internal_insert_item( const void* src, copy_speci
         r.slots_avail.prepare_wait( thr_ctx, ((ptrdiff_t)(k-e)) );
         while( (ptrdiff_t)(k-r.head_counter)>=const_cast<volatile ptrdiff_t&>(e = my_capacity) ) {
             __TBB_TRY {
+                if( r.abort_counter!=old_abort_counter ) {
+                    r.slots_avail.cancel_wait( thr_ctx );
+                    throw_exception( eid_user_abort );
+                }
                 slept = r.slots_avail.commit_wait( thr_ctx );
             } __TBB_CATCH( tbb::user_abort& ) {
                 r.choose(k).abort_push(k, *this);
@@ -426,6 +434,8 @@ void concurrent_queue_base_v3::internal_pop( void* dst ) {
 #if DO_ITT_NOTIFY
     bool sync_prepare_done = false;
 #endif
+    unsigned old_abort_counter = r.abort_counter;
+    // This loop is a single pop operation; abort_counter should not be re-read inside
     do {
         k=r.head_counter++;
         if ( (ptrdiff_t)(r.tail_counter-k)<=0 ) { // queue is empty
@@ -440,6 +450,10 @@ void concurrent_queue_base_v3::internal_pop( void* dst ) {
             r.items_avail.prepare_wait( thr_ctx, k );
             while( (ptrdiff_t)(r.tail_counter-k)<=0 ) {
                 __TBB_TRY {
+                    if( r.abort_counter!=old_abort_counter ) {
+                        r.items_avail.cancel_wait( thr_ctx );
+                        throw_exception( eid_user_abort );
+                    }
                     slept = r.items_avail.commit_wait( thr_ctx );
                 } __TBB_CATCH( tbb::user_abort& ) {
                     r.head_counter--;
@@ -462,6 +476,7 @@ void concurrent_queue_base_v3::internal_pop( void* dst ) {
 
 void concurrent_queue_base_v3::internal_abort() {
     concurrent_queue_rep& r = *my_rep;
+    ++r.abort_counter;
     r.items_avail.abort_all();
     r.slots_avail.abort_all();
 }
@@ -540,7 +555,7 @@ void concurrent_queue_base_v3::internal_finish_clear() {
         page* tp = my_rep->array[i].tail_page;
         __TBB_ASSERT( my_rep->array[i].head_page==tp, "at most one page should remain" );
         if( tp!=NULL) {
-            if( tp!=invalid_page ) deallocate_page( tp );
+            if( tp!=static_invalid_page ) deallocate_page( tp );
             my_rep->array[i].tail_page = NULL;
         }
     }
@@ -558,6 +573,7 @@ void concurrent_queue_base_v3::internal_assign( const concurrent_queue_base& src
     my_rep->head_counter = src.my_rep->head_counter;
     my_rep->tail_counter = src.my_rep->tail_counter;
     my_rep->n_invalid_entries = src.my_rep->n_invalid_entries;
+    my_rep->abort_counter = src.my_rep->abort_counter;
 
     // copy micro_queues
     for( size_t i = 0; i<my_rep->n_queue; ++i )
diff --git a/src/tbb/concurrent_vector.cpp b/src/tbb/concurrent_vector.cpp
index 587f08a..ce124a2 100644
--- a/src/tbb/concurrent_vector.cpp
+++ b/src/tbb/concurrent_vector.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if (_MSC_VER)
@@ -130,8 +130,7 @@ public:
         } else {
             ITT_NOTIFY(sync_acquired, &s);
         }
-        if(s.load<relaxed>() != segment_allocated())
-            throw_exception(eid_bad_last_alloc); // throw custom exception, because it's hard to recover correctly after segment_allocation_failed state
+        enforce_segment_allocated(s.load<relaxed>()); //it's hard to recover correctly after segment_allocation_failed state
         return s;
     }
 
@@ -196,8 +195,7 @@ public:
         const void *arg;
         safe_init_body(internal_array_op2 init, const void *src) : func(init), arg(src) {}
         void operator()(segment_t &s, void *begin, size_type n) const {
-            if(s.load<relaxed>() != segment_allocated())
-                throw_exception(eid_bad_last_alloc); // throw custom exception
+            enforce_segment_allocated(s.load<relaxed>());
             func( begin, arg, n );
         }
     };
@@ -280,10 +278,11 @@ concurrent_vector_base_v3::size_type concurrent_vector_base_v3::helper::enable_s
             array0 = s[0].load<acquire>();
         }
         ITT_NOTIFY(sync_acquired, &s[0]);
-        if(array0 != segment_allocated()) { // check for segment_allocation_failed state of initial segment
-            publish_segment(s[k], segment_allocation_failed()); // and assign segment_allocation_failed state here
-            throw_exception(eid_bad_last_alloc); // throw custom exception
-        }
+
+        segment_scope_guard k_segment_guard(s[k], false);
+        enforce_segment_allocated(array0); // initial segment should be allocated
+        k_segment_guard.dismiss();
+
         publish_segment( s[k],
             static_cast<void*>(array0.pointer<char>() + segment_base(k)*element_size )
         );
@@ -399,8 +398,7 @@ void concurrent_vector_base_v3::internal_assign( const concurrent_vector_base_v3
         size_type b=segment_base(k);
         size_type new_end = b>=n ? b : n;
         __TBB_ASSERT( my_early_size>new_end, NULL );
-        if( my_segment[k].load<relaxed>() != segment_allocated()) // check vector was broken before
-            throw_exception(eid_bad_last_alloc); // throw custom exception
+        enforce_segment_allocated(my_segment[k].load<relaxed>()); //if vector was broken before
         // destructors are supposed to not throw any exceptions
         destroy( my_segment[k].load<relaxed>().pointer<char>() + element_size*(new_end-b), my_early_size-new_end );
         my_early_size = new_end;
@@ -417,8 +415,8 @@ void concurrent_vector_base_v3::internal_assign( const concurrent_vector_base_v3
         helper::extend_table_if_necessary(*this, k, 0);
         if( my_segment[k].load<relaxed>() == segment_not_used())
             helper::enable_segment(*this, k, element_size);
-        else if( my_segment[k].load<relaxed>() != segment_allocated() )
-            throw_exception(eid_bad_last_alloc); // throw custom exception
+        else
+            enforce_segment_allocated(my_segment[k].load<relaxed>());
         size_type m = k? segment_size(k) : 2;
         if( m > n-b ) m = n-b;
         size_type a = 0;
@@ -475,8 +473,7 @@ concurrent_vector_base_v3::size_type concurrent_vector_base_v3::internal_grow_to
                 backoff.pause();
             ITT_NOTIFY(sync_acquired, &s);
         }
-        if( my_segment[i].load<relaxed>() != segment_allocated() )
-            throw_exception(eid_bad_last_alloc);
+        enforce_segment_allocated(my_segment[i].load<relaxed>());
     }
 #if TBB_USE_DEBUG
     size_type capacity = internal_capacity();
diff --git a/src/tbb/condition_variable.cpp b/src/tbb/condition_variable.cpp
index 70a0ec3..49ed609 100644
--- a/src/tbb/condition_variable.cpp
+++ b/src/tbb/condition_variable.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/tbb_config.h"
diff --git a/src/tbb/critical_section.cpp b/src/tbb/critical_section.cpp
index 9d4fd91..4b32fb1 100644
--- a/src/tbb/critical_section.cpp
+++ b/src/tbb/critical_section.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/critical_section.h"
diff --git a/src/tbb/custom_scheduler.h b/src/tbb/custom_scheduler.h
index 4ed0854..aaeb489 100644
--- a/src/tbb/custom_scheduler.h
+++ b/src/tbb/custom_scheduler.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef _TBB_custom_scheduler_H
@@ -28,17 +28,6 @@
 namespace tbb {
 namespace internal {
 
-//! Amount of time to pause between steals.
-/** The default values below were found to be best empirically for K-Means
-    on the 32-way Altix and 4-way (*2 for HT) fxqlin04. */
-#ifdef __TBB_STEALING_PAUSE
-static const long PauseTime = __TBB_STEALING_PAUSE;
-#elif __TBB_ipf
-static const long PauseTime = 1500;
-#else
-static const long PauseTime = 80;
-#endif
-
 //------------------------------------------------------------------------
 //! Traits classes for scheduler
 //------------------------------------------------------------------------
@@ -67,27 +56,24 @@ template<typename SchedulerTraits>
 class custom_scheduler: private generic_scheduler {
     typedef custom_scheduler<SchedulerTraits> scheduler_type;
 
+    custom_scheduler( market& m ) : generic_scheduler(m) {}
+
     //! Scheduler loop that dispatches tasks.
     /** If child is non-NULL, it is dispatched first.
         Then, until "parent" has a reference count of 1, other task are dispatched or stolen. */
-    /*override*/
-    void local_wait_for_all( task& parent, task* child );
+    void local_wait_for_all( task& parent, task* child ) __TBB_override;
 
     //! Entry point from client code to the scheduler loop that dispatches tasks.
     /** The method is virtual, but the *this object is used only for sake of dispatching on the correct vtable,
         not necessarily the correct *this object.  The correct *this object is looked up in TLS. */
-    /*override*/
-    void wait_for_all( task& parent, task* child ) {
+    void wait_for_all( task& parent, task* child ) __TBB_override {
         static_cast<custom_scheduler*>(governor::local_scheduler())->scheduler_type::local_wait_for_all( parent, child );
     }
 
-    //! Construct a custom_scheduler
-    custom_scheduler( arena* a, size_t index ) : generic_scheduler(a, index) {}
-
     //! Decrements ref_count of a predecessor.
     /** If it achieves 0, the predecessor is scheduled for execution.
         When changing, remember that this is a hot path function. */
-    void tally_completion_of_predecessor( task& s, task*& bypass_slot ) {
+    void tally_completion_of_predecessor( task& s, __TBB_ISOLATION_ARG( task*& bypass_slot, isolation_tag isolation ) ) {
         task_prefix& p = s.prefix();
         if( SchedulerTraits::itt_possible )
             ITT_NOTIFY(sync_releasing, &p.ref_count);
@@ -106,6 +92,13 @@ class custom_scheduler: private generic_scheduler {
 #if TBB_USE_ASSERT
         p.extra_state &= ~es_ref_count_active;
 #endif /* TBB_USE_ASSERT */
+#if __TBB_TASK_ISOLATION
+        if ( isolation != no_isolation ) {
+            // The parent is allowed not to have isolation (even if a child has isolation) because it has never spawned.
+            __TBB_ASSERT(p.isolation == no_isolation || p.isolation == isolation, NULL);
+            p.isolation = isolation;
+        }
+#endif /* __TBB_TASK_ISOLATION */
 
 #if __TBB_RECYCLE_TO_ENQUEUE
         if (p.state==task::to_enqueue) {
@@ -117,13 +110,14 @@ class custom_scheduler: private generic_scheduler {
         if( bypass_slot==NULL )
             bypass_slot = &s;
         else
-            local_spawn( s, s.prefix().next );
+            local_spawn( &s, s.prefix().next );
     }
 
 public:
-    static generic_scheduler* allocate_scheduler( arena* a, size_t index ) {
-        scheduler_type* s = (scheduler_type*)NFS_Allocate(1,sizeof(scheduler_type),NULL);
-        new( s ) scheduler_type( a, index );
+    static generic_scheduler* allocate_scheduler( market& m ) {
+        void* p = NFS_Allocate(1, sizeof(scheduler_type), NULL);
+        std::memset(p, 0, sizeof(scheduler_type));
+        scheduler_type* s = new( p ) scheduler_type( m );
         s->assert_task_pool_valid();
         ITT_SYNC_CREATE(s, SyncType_Scheduler, SyncObj_TaskPoolSpinning);
         return s;
@@ -131,7 +125,7 @@ public:
 
     //! Try getting a task from the mailbox or stealing from another scheduler.
     /** Returns the stolen task or NULL if all attempts fail. */
-    /* override */ task* receive_or_steal_task( __TBB_atomic reference_count& completion_ref_count );
+    task* receive_or_steal_task( __TBB_ISOLATION_ARG( __TBB_atomic reference_count& completion_ref_count, isolation_tag isolation ) ) __TBB_override;
 
 }; // class custom_scheduler<>
 
@@ -139,7 +133,7 @@ public:
 // custom_scheduler methods
 //------------------------------------------------------------------------
 template<typename SchedulerTraits>
-task* custom_scheduler<SchedulerTraits>::receive_or_steal_task( __TBB_atomic reference_count& completion_ref_count ) {
+task* custom_scheduler<SchedulerTraits>::receive_or_steal_task( __TBB_ISOLATION_ARG(__TBB_atomic reference_count& completion_ref_count, isolation_tag isolation) ) {
     task* t = NULL;
     bool outermost_worker_level = worker_outermost_level();
     bool outermost_dispatch_level = outermost_worker_level || master_outermost_level();
@@ -181,14 +175,18 @@ task* custom_scheduler<SchedulerTraits>::receive_or_steal_task( __TBB_atomic ref
                 ITT_NOTIFY(sync_acquired, &completion_ref_count);
             }
             __TBB_ASSERT( !t, NULL );
+            // A worker thread in its outermost dispatch loop (i.e. its execution stack is empty) should
+            // exit it either when there is no more work in the current arena, or when revoked by the market.
+            __TBB_ASSERT( !outermost_worker_level, NULL );
             __TBB_control_consistency_helper(); // on ref_count
             break; // exit stealing loop and return;
         }
         // Check if the resource manager requires our arena to relinquish some threads
-        if ( outermost_worker_level && my_arena->my_num_workers_allotted < my_arena->num_workers_active() ) {
-#if !__TBB_TASK_ARENA
-            __TBB_ASSERT( is_worker(), NULL );
+        if ( outermost_worker_level && (my_arena->my_num_workers_allotted < my_arena->num_workers_active()
+#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+                 || my_arena->recall_by_mandatory_request()
 #endif
+                 ) ) {
             if( SchedulerTraits::itt_possible && failure_count != -1 )
                 ITT_NOTIFY(sync_cancel, this);
             return NULL;
@@ -200,7 +198,21 @@ task* custom_scheduler<SchedulerTraits>::receive_or_steal_task( __TBB_atomic ref
 #endif
         // Check if there are tasks mailed to this thread via task-to-thread affinity mechanism.
         __TBB_ASSERT(my_affinity_id, NULL);
-        if ( n && !my_inbox.empty() && (t = get_mailbox_task()) ) {
+        if ( n && !my_inbox.empty() ) {
+            t = get_mailbox_task( __TBB_ISOLATION_EXPR( isolation ) );
+#if __TBB_TASK_ISOLATION
+            // There is a race with a thread adding a new task (possibly with suitable isolation)
+            // to our mailbox, so the below conditions might result in a false positive.
+            // Then set_is_idle(false) allows that task to be stolen; it's OK.
+            if ( isolation != no_isolation && !t && !my_inbox.empty()
+                     && my_inbox.is_idle_state( true ) ) {
+                // We have proxy tasks in our mailbox but the isolation blocks their execution.
+                // So publish the proxy tasks in mailbox to be available for stealing from owner's task pool.
+                my_inbox.set_is_idle( false );
+            }
+#endif /* __TBB_TASK_ISOLATION */
+        }
+        if ( t ) {
             GATHER_STATISTIC( ++my_counters.mails_received );
         }
         // Check if there are tasks in starvation-resistant stream.
@@ -212,7 +224,8 @@ task* custom_scheduler<SchedulerTraits>::receive_or_steal_task( __TBB_atomic ref
         }
 #if __TBB_TASK_PRIORITY
         // Check if any earlier offloaded non-top priority tasks become returned to the top level
-        else if ( my_offloaded_tasks && (t=reload_tasks()) ) {
+        else if ( my_offloaded_tasks && (t = reload_tasks( __TBB_ISOLATION_EXPR( isolation ) )) ) {
+            __TBB_ASSERT( !is_proxy(*t), "The proxy task cannot be offloaded" );
             // just proceed with the obtained task
         }
 #endif /* __TBB_TASK_PRIORITY */
@@ -228,7 +241,7 @@ task* custom_scheduler<SchedulerTraits>::receive_or_steal_task( __TBB_atomic ref
             if( k >= my_arena_index )
                 ++victim;               // Adjusts random distribution to exclude self
             task **pool = victim->task_pool;
-            if( pool == EmptyTaskPool || !(t = steal_task( *victim )) )
+            if( pool == EmptyTaskPool || !(t = steal_task( __TBB_ISOLATION_ARG(*victim, isolation) )) )
                 goto fail;
             if( is_proxy(*t) ) {
                 task_proxy &tp = *(task_proxy*)t;
@@ -252,8 +265,10 @@ task* custom_scheduler<SchedulerTraits>::receive_or_steal_task( __TBB_atomic ref
             goto fail;
         // A task was successfully obtained somewhere
         __TBB_ASSERT(t,NULL);
-#if __TBB_SCHEDULER_OBSERVER
+#if __TBB_ARENA_OBSERVER
         my_arena->my_observers.notify_entry_observers( my_last_local_observer, is_worker() );
+#endif
+#if __TBB_SCHEDULER_OBSERVER
         the_global_observer_list.notify_entry_observers( my_last_global_observer, is_worker() );
 #endif /* __TBB_SCHEDULER_OBSERVER */
         if ( SchedulerTraits::itt_possible && failure_count != -1 ) {
@@ -273,7 +288,7 @@ fail:
             failure_count = 0;
         }
         // Pause, even if we are going to yield, because the yield might return immediately.
-        __TBB_Pause(PauseTime);
+        prolonged_pause();
         const int failure_threshold = 2*int(n+1);
         if( failure_count>=failure_threshold ) {
 #if __TBB_YIELD2P
@@ -292,7 +307,7 @@ fail:
                     task** link = NULL;
                     // Get local counter out of the way (we've just brought in external tasks)
                     my_local_reload_epoch--;
-                    t = reload_tasks( orphans, link, effective_reference_priority() );
+                    t = reload_tasks( orphans, link, __TBB_ISOLATION_ARG( effective_reference_priority(), isolation ) );
                     if ( orphans ) {
                         *link = my_offloaded_tasks;
                         if ( !my_offloaded_tasks )
@@ -303,6 +318,7 @@ fail:
                     if ( t ) {
                         if( SchedulerTraits::itt_possible )
                             ITT_NOTIFY(sync_cancel, this);
+                        __TBB_ASSERT( !is_proxy(*t), "The proxy task cannot be offloaded" );
                         break; // exit stealing loop and return
                     }
                 }
@@ -345,7 +361,8 @@ fail:
             n = my_arena->my_limit-1;
         } // end of yielding branch
     } // end of nonlocal task retrieval loop
-    my_inbox.set_is_idle( false );
+    if ( my_inbox.is_idle_state( true ) )
+        my_inbox.set_is_idle( false );
     return t;
 }
 
@@ -353,13 +370,14 @@ template<typename SchedulerTraits>
 void custom_scheduler<SchedulerTraits>::local_wait_for_all( task& parent, task* child ) {
     __TBB_ASSERT( governor::is_set(this), NULL );
     __TBB_ASSERT( parent.ref_count() >= (child && child->parent() == &parent ? 2 : 1), "ref_count is too small" );
+    __TBB_ASSERT( my_innermost_running_task, NULL );
     assert_task_pool_valid();
     // Using parent's refcount in sync_prepare (in the stealing loop below) is
     // a workaround for TP. We need to name it here to display correctly in Ampl.
     if( SchedulerTraits::itt_possible )
         ITT_SYNC_CREATE(&parent.prefix().ref_count, SyncType_Scheduler, SyncObj_TaskStealingLoop);
 #if __TBB_TASK_GROUP_CONTEXT
-    __TBB_ASSERT( parent.prefix().context || (is_worker() && &parent == my_dummy_task), "parent task does not have context" );
+    __TBB_ASSERT( parent.prefix().context, "parent task does not have context" );
 #endif /* __TBB_TASK_GROUP_CONTEXT */
     task* t = child;
     // Constant all_local_work_done is an unreachable refcount value that prevents
@@ -378,11 +396,16 @@ void custom_scheduler<SchedulerTraits>::local_wait_for_all( task& parent, task*
     // must be replaced with the one local to this arena.
     volatile uintptr_t *old_ref_reload_epoch = my_ref_reload_epoch;
 #endif /* __TBB_TASK_PRIORITY */
-    task* old_dispatching_task = my_dispatching_task;
-    my_dispatching_task = my_innermost_running_task;
+    task* old_innermost_running_task = my_innermost_running_task;
+    scheduler_properties old_properties = my_properties;
+    // Remove outermost property to indicate nested level.
+    __TBB_ASSERT( my_properties.outermost || my_innermost_running_task!=my_dummy_task, "The outermost property should be set out of a dispatch loop" );
+    my_properties.outermost &= my_innermost_running_task==my_dummy_task;
+#if __TBB_TASK_ISOLATION
+    isolation_tag isolation = my_innermost_running_task->prefix().isolation;
+#endif /* __TBB_TASK_ISOLATION */
     if( master_outermost_level() ) {
         // We are in the outermost task dispatch loop of a master thread or a worker which mimics master
-        __TBB_ASSERT( !is_worker() || my_dispatching_task != old_dispatching_task, NULL );
         quit_point = &parent == my_dummy_task ? all_local_work_done : parents_work_done;
     } else {
         quit_point = parents_work_done;
@@ -420,11 +443,16 @@ void custom_scheduler<SchedulerTraits>::local_wait_for_all( task& parent, task*
                 __TBB_ASSERT( my_inbox.is_idle_state(false), NULL );
                 __TBB_ASSERT(!is_proxy(*t),"unexpected proxy");
                 __TBB_ASSERT( t->prefix().owner, NULL );
-                assert_task_valid(*t);
+#if __TBB_TASK_ISOLATION
+                __TBB_ASSERT( isolation == no_isolation || isolation == t->prefix().isolation,
+                    "A task from another isolated region is going to be executed" );
+#endif /* __TBB_TASK_ISOLATION */
+                assert_task_valid(t);
 #if __TBB_TASK_GROUP_CONTEXT && TBB_USE_ASSERT
                 assert_context_valid(t->prefix().context);
                 if ( !t->prefix().context->my_cancellation_requested )
 #endif
+                // TODO: make the assert stronger by prohibiting allocated state.
                 __TBB_ASSERT( 1L<<t->state() & (1L<<task::allocated|1L<<task::ready|1L<<task::reexecute), NULL );
                 assert_task_pool_valid();
 #if __TBB_TASK_PRIORITY
@@ -441,15 +469,14 @@ void custom_scheduler<SchedulerTraits>::local_wait_for_all( task& parent, task*
                             *my_offloaded_task_list_tail_link = NULL;
                         }
                         offload_task( *t, p );
-                        if ( in_arena() ) {
-                            t = winnow_task_pool();
+                        if ( is_task_pool_published() ) {
+                            t = winnow_task_pool( __TBB_ISOLATION_EXPR( isolation ) );
                             if ( t )
                                 continue;
-                        }
-                        else {
+                        } else {
                             // Mark arena as full to unlock arena priority level adjustment
                             // by arena::is_out_of_work(), and ensure worker's presence.
-                            my_arena->advertise_new_work<false>();
+                            my_arena->advertise_new_work<arena::wakeup>();
                         }
                         goto stealing_ground;
                     }
@@ -477,6 +504,7 @@ void custom_scheduler<SchedulerTraits>::local_wait_for_all( task& parent, task*
                         __TBB_ASSERT( t_next->state()==task::allocated,
                                 "if task::execute() returns task, it must be marked as allocated" );
                         reset_extra_state(t_next);
+                        __TBB_ISOLATION_EXPR( t_next->prefix().isolation = t->prefix().isolation );
 #if TBB_USE_ASSERT
                         affinity_id next_affinity=t_next->prefix().affinity;
                         if (next_affinity != 0 && next_affinity != my_affinity_id)
@@ -492,7 +520,7 @@ void custom_scheduler<SchedulerTraits>::local_wait_for_all( task& parent, task*
                         __TBB_ASSERT( t->prefix().ref_count==0, "Task still has children after it has been executed" );
                         t->~task();
                         if( s )
-                            tally_completion_of_predecessor(*s, t_next);
+                            tally_completion_of_predecessor( *s, __TBB_ISOLATION_ARG( t_next, t->prefix().isolation ) );
                         free_task<no_hint>( *t );
                         assert_task_pool_valid();
                         break;
@@ -506,7 +534,7 @@ void custom_scheduler<SchedulerTraits>::local_wait_for_all( task& parent, task*
                         __TBB_ASSERT( t_next != t, "a task returned from method execute() can not be recycled in another way" );
                         reset_extra_state(t);
                         // for safe continuation, need atomically decrement ref_count;
-                        tally_completion_of_predecessor(*t, t_next);
+                        tally_completion_of_predecessor(*t, __TBB_ISOLATION_ARG( t_next, t->prefix().isolation ) );
                         assert_task_pool_valid();
                         break;
 
@@ -515,7 +543,7 @@ void custom_scheduler<SchedulerTraits>::local_wait_for_all( task& parent, task*
                         __TBB_ASSERT( t_next != t, "a task returned from method execute() can not be recycled in another way" );
                         t->prefix().state = task::allocated;
                         reset_extra_state(t);
-                        local_spawn( *t, t->prefix().next );
+                        local_spawn( t, t->prefix().next );
                         assert_task_pool_valid();
                         break;
                     case task::allocated:
@@ -543,14 +571,12 @@ void custom_scheduler<SchedulerTraits>::local_wait_for_all( task& parent, task*
                 ITT_NOTIFY(sync_acquired, &parent.prefix().ref_count);
                 goto done;
             }
-            if ( in_arena() ) {
-                t = get_task();
-            }
-            else {
+            if ( is_task_pool_published() ) {
+                t = get_task( __TBB_ISOLATION_EXPR( isolation ) );
+            } else {
                 __TBB_ASSERT( is_quiescent_local_task_pool_reset(), NULL );
                 break;
             }
-            __TBB_ASSERT(!t || !is_proxy(*t),"unexpected proxy");
             assert_task_pool_valid();
 
             if ( !t ) break;
@@ -569,10 +595,10 @@ stealing_ground:
         }
 #endif
         if ( quit_point == all_local_work_done ) {
-            __TBB_ASSERT( !in_arena() && is_quiescent_local_task_pool_reset(), NULL );
+            __TBB_ASSERT( !is_task_pool_published() && is_quiescent_local_task_pool_reset(), NULL );
             __TBB_ASSERT( !worker_outermost_level(), NULL );
-            my_innermost_running_task = my_dispatching_task;
-            my_dispatching_task = old_dispatching_task;
+            my_innermost_running_task = old_innermost_running_task;
+            my_properties = old_properties;
 #if __TBB_TASK_PRIORITY
             my_ref_top_priority = old_ref_top_priority;
             if(my_ref_reload_epoch != old_ref_reload_epoch)
@@ -581,18 +607,10 @@ stealing_ground:
 #endif /* __TBB_TASK_PRIORITY */
             return;
         }
-        // The following assertion may be falsely triggered in the presence of enqueued tasks
-        //__TBB_ASSERT( my_arena->my_max_num_workers > 0 || my_market->my_ref_count > 1
-        //              || parent.prefix().ref_count == 1, "deadlock detected" );
-
-        // Dispatching task pointer is NULL *iff* this is a worker thread in its outermost
-        // dispatch loop (i.e. its execution stack is empty). In this case it should exit it
-        // either when there is no more work in the current arena, or when revoked by the market.
         
-        t = receive_or_steal_task( parent.prefix().ref_count );
+        t = receive_or_steal_task( __TBB_ISOLATION_ARG( parent.prefix().ref_count, isolation ) );
         if ( !t )
             goto done;
-        __TBB_ASSERT(!is_proxy(*t),"unexpected proxy");
 
         // The user can capture another the FPU settings to the context so the
         // cached data in the helper can be out-of-date and we cannot do fast
@@ -625,8 +643,8 @@ stealing_ground:
     __TBB_ASSERT( false, "Must never get here too" );
 #endif /* TBB_USE_EXCEPTIONS */
 done:
-    my_innermost_running_task = my_dispatching_task;
-    my_dispatching_task = old_dispatching_task;
+    my_innermost_running_task = old_innermost_running_task;
+    my_properties = old_properties;
 #if __TBB_TASK_PRIORITY
     my_ref_top_priority = old_ref_top_priority;
     if(my_ref_reload_epoch != old_ref_reload_epoch)
@@ -636,13 +654,8 @@ done:
     if ( !ConcurrentWaitsEnabled(parent) ) {
         if ( parent.prefix().ref_count != parents_work_done ) {
             // This is a worker that was revoked by the market.
-#if __TBB_TASK_ARENA
             __TBB_ASSERT( worker_outermost_level(),
                 "Worker thread exits nested dispatch loop prematurely" );
-#else
-            __TBB_ASSERT( is_worker() && worker_outermost_level(),
-                "Worker thread exits nested dispatch loop prematurely" );
-#endif
             return;
         }
         parent.prefix().ref_count = 0;
@@ -667,7 +680,7 @@ done:
             // outside a catch block. So restore the default settings manually before rethrowing
             // the exception.
             cpu_ctl_helper.restore_default();
-            pe->throw_self();
+            TbbRethrowException( pe );
         }
     }
     __TBB_ASSERT(!is_worker() || !CancellationInfoPresent(*my_dummy_task),
diff --git a/src/tbb/dynamic_link.cpp b/src/tbb/dynamic_link.cpp
index 555802e..adb8252 100644
--- a/src/tbb/dynamic_link.cpp
+++ b/src/tbb/dynamic_link.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "dynamic_link.h"
@@ -51,6 +51,7 @@
     //TODO: use function attribute for weak symbols instead of the pragma.
     #pragma weak dlopen
     #pragma weak dlsym
+    #pragma weak dlclose
 #endif /* __TBB_WEAK_SYMBOLS_PRESENT && !__TBB_DYNAMIC_LOAD_ENABLED */
 
 #include "tbb/tbb_misc.h"
@@ -69,7 +70,7 @@ executable and dynamic libraries.
 dynamic_link provides certain guarantees:
   1. Either all or none of the requested symbols are resolved. Moreover, if
   symbols are not resolved, the dynamic_link_descriptor table is not modified;
-  2. All returned symbols have secured life time: this means that none of them
+  2. All returned symbols have secured lifetime: this means that none of them
   can be invalidated until dynamic_unlink is called;
   3. Any loaded library is loaded only via the full path. The full path is that
   from which the runtime itself was loaded. (This is done to avoid security
@@ -83,7 +84,7 @@ soon as all of the symbols have been resolved.
     library and if it succeeds it resolves the symbols via that handle.
     b. On Linux: dynamic_link tries to search for the symbols in the global
     scope via the main program handle. If the symbols are present in the global
-    scope their life time is not guaranteed (since dynamic_link does not know
+    scope their lifetime is not guaranteed (since dynamic_link does not know
     anything about the library from which they are exported). Therefore it
     tries to "pin" the symbols by obtaining the library name and reopening it.
     dlopen may fail to reopen the library in two cases:
@@ -115,6 +116,7 @@ OPEN_INTERNAL_NAMESPACE
         (void) code;
     } // library_warning
 #endif /* !defined(DYNAMIC_LINK_WARNING) && !__TBB_WIN8UI_SUPPORT && __TBB_DYNAMIC_LOAD_ENABLED */
+
     static bool resolve_symbols( dynamic_link_handle module, const dynamic_link_descriptor descriptors[], size_t required )
     {
         if ( !module )
@@ -158,12 +160,10 @@ OPEN_INTERNAL_NAMESPACE
             return false;
         }
     }
-    void dynamic_unlink( dynamic_link_handle ) {
-    }
-    void dynamic_unlink_all() {
-    }
+    void dynamic_unlink( dynamic_link_handle ) {}
+    void dynamic_unlink_all() {}
 #else
-    #if __TBB_DYNAMIC_LOAD_ENABLED
+#if __TBB_DYNAMIC_LOAD_ENABLED
 /*
     There is a security issue on Windows: LoadLibrary() may load and execute malicious code.
     See http://www.microsoft.com/technet/security/advisory/2269637.mspx for details.
@@ -195,7 +195,7 @@ OPEN_INTERNAL_NAMESPACE
     static void atomic_once( void( *func ) (void), tbb::atomic< tbb::internal::do_once_state > &once_state ) {
         tbb::internal::atomic_do_once( func, once_state );
     }
-#define ATOMIC_ONCE_DECL( var ) tbb::atomic< tbb::internal::do_once_state > var
+    #define ATOMIC_ONCE_DECL( var ) tbb::atomic< tbb::internal::do_once_state > var
 #else
     static void pthread_assert( int error_code, const char* msg ) {
         LIBRARY_ASSERT( error_code == 0, msg );
@@ -233,7 +233,7 @@ OPEN_INTERNAL_NAMESPACE
     static void atomic_once( void( *func ) (), pthread_once_t &once_state ) {
         pthread_assert( pthread_once( &once_state, func ), "pthread_once failed" );
     }
-#define ATOMIC_ONCE_DECL( var ) pthread_once_t var = PTHREAD_ONCE_INIT
+    #define ATOMIC_ONCE_DECL( var ) pthread_once_t var = PTHREAD_ONCE_INIT
 #endif /* __USE_TBB_ATOMICS */
 
     struct handles_t {
@@ -378,7 +378,7 @@ OPEN_INTERNAL_NAMESPACE
         }
         return full_len;
     }
-    #endif  // __TBB_DYNAMIC_LOAD_ENABLED
+#endif  // __TBB_DYNAMIC_LOAD_ENABLED
 
     void init_dynamic_link_data() {
     #if __TBB_DYNAMIC_LOAD_ENABLED
@@ -416,28 +416,28 @@ OPEN_INTERNAL_NAMESPACE
     #endif /* __TBB_WEAK_SYMBOLS_PRESENT */
 
     void dynamic_unlink( dynamic_link_handle handle ) {
-        ::tbb::internal::suppress_unused_warning( handle );
-    #if __TBB_DYNAMIC_LOAD_ENABLED
+    #if !__TBB_DYNAMIC_LOAD_ENABLED /* only __TBB_WEAK_SYMBOLS_PRESENT is defined */
+        if ( !dlclose ) return;
+    #endif
         if ( handle ) {
             dlclose( handle );
         }
-    #endif /* __TBB_DYNAMIC_LOAD_ENABLED */
     }
 
     void dynamic_unlink_all() {
     #if __TBB_DYNAMIC_LOAD_ENABLED
         handles.free();
-    #endif /* __TBB_DYNAMIC_LOAD_ENABLED */
+    #endif
     }
 
 #if !_WIN32
-    static dynamic_link_handle pin_symbols( dynamic_link_handle library_handle, dynamic_link_descriptor desc, const dynamic_link_descriptor* descriptors, size_t required ) {
-        ::tbb::internal::suppress_unused_warning( desc, descriptors, required );
 #if __TBB_DYNAMIC_LOAD_ENABLED
+    static dynamic_link_handle pin_symbols( dynamic_link_descriptor desc, const dynamic_link_descriptor* descriptors, size_t required ) {
         // It is supposed that all symbols are from the only one library
         // The library has been loaded by another module and contains at least one requested symbol.
         // But after we obtained the symbol the library can be unloaded by another thread
         // invalidating our symbol. Therefore we need to pin the library in memory.
+        dynamic_link_handle library_handle = 0;
         Dl_info info;
         // Get library's name from earlier found symbol
         if ( dladdr( (void*)*desc.handler, &info ) ) {
@@ -457,13 +457,10 @@ OPEN_INTERNAL_NAMESPACE
                 DYNAMIC_LINK_WARNING( dl_lib_not_found, info.dli_fname, err );
             }
         }
-        else {
-            // The library have been unloaded by another thread
-            library_handle = 0;
-        }
-#endif /* __TBB_DYNAMIC_LOAD_ENABLED */
+        // else the library has been unloaded by another thread
         return library_handle;
     }
+#endif /* __TBB_DYNAMIC_LOAD_ENABLED */
 #endif /* !_WIN32 */
 
     static dynamic_link_handle global_symbols_link( const char* library, const dynamic_link_descriptor descriptors[], size_t required ) {
@@ -485,18 +482,27 @@ OPEN_INTERNAL_NAMESPACE
         // On Android dlopen( NULL ) returns NULL if it is called during dynamic module initialization.
         LIBRARY_ASSERT( library_handle, "The handle for the main program is NULL" );
     #endif
+    #if __TBB_DYNAMIC_LOAD_ENABLED
         // Check existence of the first symbol only, then use it to find the library and load all necessary symbols.
         pointer_to_handler handler;
         dynamic_link_descriptor desc;
         desc.name = descriptors[0].name;
         desc.handler = &handler;
-        if ( resolve_symbols( library_handle, &desc, 1 ) )
-            return pin_symbols( library_handle, desc, descriptors, required );
+        if ( resolve_symbols( library_handle, &desc, 1 ) ) {
+            dynamic_unlink( library_handle );
+            return pin_symbols( desc, descriptors, required );
+        }
+    #else  /* only __TBB_WEAK_SYMBOLS_PRESENT is defined */
+        if ( resolve_symbols( library_handle, descriptors, required ) )
+            return library_handle;
+    #endif
+        dynamic_unlink( library_handle );
 #endif /* _WIN32 */
         return 0;
     }
 
     static void save_library_handle( dynamic_link_handle src, dynamic_link_handle *dst ) {
+        LIBRARY_ASSERT( src, "The library handle to store must be non-zero" );
         if ( dst )
             *dst = src;
     #if __TBB_DYNAMIC_LOAD_ENABLED
@@ -508,35 +514,33 @@ OPEN_INTERNAL_NAMESPACE
     dynamic_link_handle dynamic_load( const char* library, const dynamic_link_descriptor descriptors[], size_t required ) {
     ::tbb::internal::suppress_unused_warning( library, descriptors, required );
     #if __TBB_DYNAMIC_LOAD_ENABLED
-    #if _XBOX
-        return LoadLibrary (library);
-    #else /* _XBOX */
-        size_t const len = PATH_MAX + 1;
-        char path[ len ];
-        size_t rc = abs_path( library, path, len );
-        if ( 0 < rc && rc < len ) {
-    #if _WIN32
-            // Prevent Windows from displaying silly message boxes if it fails to load library
-            // (e.g. because of MS runtime problems - one of those crazy manifest related ones)
-            UINT prev_mode = SetErrorMode (SEM_FAILCRITICALERRORS);
-    #endif /* _WIN32 */
-            dynamic_link_handle library_handle = dlopen( path, RTLD_LAZY );
-    #if _WIN32
-            SetErrorMode (prev_mode);
-    #endif /* _WIN32 */
-            if( library_handle ) {
-                if( !resolve_symbols( library_handle, descriptors, required ) ) {
-                    // The loaded library does not contain all the expected entry points
-                    dynamic_unlink( library_handle );
-                    library_handle = NULL;
-                }
-            } else
-                DYNAMIC_LINK_WARNING( dl_lib_not_found, path, dlerror() );
-            return library_handle;
-        } else if ( rc>=len )
-                DYNAMIC_LINK_WARNING( dl_buff_too_small );
-                // rc == 0 means failing of init_ap_data so the warning has already been issued.
-    #endif /* _XBOX */
+
+    size_t const len = PATH_MAX + 1;
+    char path[ len ];
+    size_t rc = abs_path( library, path, len );
+    if ( 0 < rc && rc < len ) {
+#if _WIN32
+        // Prevent Windows from displaying silly message boxes if it fails to load library
+        // (e.g. because of MS runtime problems - one of those crazy manifest related ones)
+        UINT prev_mode = SetErrorMode (SEM_FAILCRITICALERRORS);
+#endif /* _WIN32 */
+        dynamic_link_handle library_handle = dlopen( path, RTLD_LAZY );
+#if _WIN32
+        SetErrorMode (prev_mode);
+#endif /* _WIN32 */
+        if( library_handle ) {
+            if( !resolve_symbols( library_handle, descriptors, required ) ) {
+                // The loaded library does not contain all the expected entry points
+                dynamic_unlink( library_handle );
+                library_handle = NULL;
+            }
+        } else
+            DYNAMIC_LINK_WARNING( dl_lib_not_found, path, dlerror() );
+        return library_handle;
+    } else if ( rc>=len )
+            DYNAMIC_LINK_WARNING( dl_buff_too_small );
+            // rc == 0 means failing of init_ap_data so the warning has already been issued.
+
     #endif /* __TBB_DYNAMIC_LOAD_ENABLED */
         return 0;
     }
@@ -553,8 +557,11 @@ OPEN_INTERNAL_NAMESPACE
         if ( !library_handle && ( flags & DYNAMIC_LINK_WEAK ) )
             return weak_symbol_link( descriptors, required );
 
-        save_library_handle( library_handle, handle );
-        return true;
+        if ( library_handle ) {
+            save_library_handle( library_handle, handle );
+            return true;
+        }
+        return false;
     }
 
 #endif /*__TBB_WIN8UI_SUPPORT*/
@@ -564,12 +571,8 @@ OPEN_INTERNAL_NAMESPACE
             *handle=0;
         return false;
     }
-
-    void dynamic_unlink( dynamic_link_handle ) {
-    }
-
-    void dynamic_unlink_all() {
-    }
+    void dynamic_unlink( dynamic_link_handle ) {}
+    void dynamic_unlink_all() {}
 #endif /* __TBB_WEAK_SYMBOLS_PRESENT || __TBB_DYNAMIC_LOAD_ENABLED */
 
 CLOSE_INTERNAL_NAMESPACE
diff --git a/src/tbb/dynamic_link.h b/src/tbb/dynamic_link.h
index 526e923..cff5118 100644
--- a/src/tbb/dynamic_link.h
+++ b/src/tbb/dynamic_link.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_dynamic_link
@@ -55,7 +55,7 @@ typedef void (*pointer_to_handler)();
 // prevent warnings from some compilers (g++ 4.1)
 #if __TBB_WEAK_SYMBOLS_PRESENT
 #define DLD(s,h) {#s, (pointer_to_handler*)(void*)(&h), (pointer_to_handler)&s}
-#else 
+#else
 #define DLD(s,h) {#s, (pointer_to_handler*)(void*)(&h)}
 #endif /* __TBB_WEAK_SYMBOLS_PRESENT */
 //! Association between a handler name and location of pointer to it.
@@ -111,7 +111,7 @@ enum dynamic_link_error_t {
     dl_success = 0,
     dl_lib_not_found,     // char const * lib, dlerr_t err
     dl_sym_not_found,     // char const * sym, dlerr_t err
-                          // Note: dlerr_t depends on OS: it is char const * on Linux* and OS X*, int on Windows*.
+                          // Note: dlerr_t depends on OS: it is char const * on Linux* and macOS*, int on Windows*.
     dl_sys_fail,          // char const * func, int err
     dl_buff_too_small     // none
 }; // dynamic_link_error_t
diff --git a/src/tbb/governor.cpp b/src/tbb/governor.cpp
index a833986..b492e8a 100644
--- a/src/tbb/governor.cpp
+++ b/src/tbb/governor.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include <stdio.h>
@@ -77,10 +77,12 @@ void governor::acquire_resources () {
     if( status )
         handle_perror(status, "TBB failed to initialize task scheduler TLS\n");
     is_speculation_enabled = cpu_has_speculation();
+    is_rethrow_broken = gcc_rethrow_exception_broken();
 }
 
 void governor::release_resources () {
     theRMLServerFactory.close();
+    destroy_process_mask();
 #if TBB_USE_ASSERT
     if( __TBB_InitOnce::initialization_done() && theTLS.get() ) 
         runtime_warning( "TBB is unloaded while tbb::task_scheduler_init object is alive?" );
@@ -108,9 +110,24 @@ rml::tbb_server* governor::create_rml_server ( rml::tbb_client& client ) {
     return server;
 }
 
+
+uintptr_t governor::tls_value_of( generic_scheduler* s ) {
+    __TBB_ASSERT( (uintptr_t(s)&1) == 0, "Bad pointer to the scheduler" );
+    // LSB marks the scheduler initialized with arena
+    return uintptr_t(s) | uintptr_t((s && (s->my_arena || s->is_worker()))? 1 : 0);
+}
+
+void governor::assume_scheduler( generic_scheduler* s ) {
+    theTLS.set( tls_value_of(s) );
+}
+
+bool governor::is_set( generic_scheduler* s ) {
+    return theTLS.get() == tls_value_of(s);
+}
+
 void governor::sign_on(generic_scheduler* s) {
-    __TBB_ASSERT( !theTLS.get(), NULL );
-    theTLS.set(s);
+    __TBB_ASSERT( is_set(NULL) && s, NULL );
+    assume_scheduler( s );
 #if __TBB_SURVIVE_THREAD_SWITCH
     if( watch_stack_handler ) {
         __cilk_tbb_stack_op_thunk o;
@@ -126,12 +143,13 @@ void governor::sign_on(generic_scheduler* s) {
 #endif /* TBB_USE_ASSERT */
     }
 #endif /* __TBB_SURVIVE_THREAD_SWITCH */
+    __TBB_ASSERT( is_set(s), NULL );
 }
 
 void governor::sign_off(generic_scheduler* s) {
     suppress_unused_warning(s);
-    __TBB_ASSERT( theTLS.get()==s, "attempt to unregister a wrong scheduler instance" );
-    theTLS.set(NULL);
+    __TBB_ASSERT( is_set(s), "attempt to unregister a wrong scheduler instance" );
+    assume_scheduler(NULL);
 #if __TBB_SURVIVE_THREAD_SWITCH
     __cilk_tbb_unwatch_thunk &ut = s->my_cilk_unwatch_thunk;
     if ( ut.routine )
@@ -139,13 +157,6 @@ void governor::sign_off(generic_scheduler* s) {
 #endif /* __TBB_SURVIVE_THREAD_SWITCH */
 }
 
-void governor::setBlockingTerminate(const task_scheduler_init *tsi) {
-    __TBB_ASSERT(!IsBlockingTerminationInProgress, "It's impossible to create task_scheduler_init while blocking termination is in progress.");
-    if (BlockingTSI)
-        throw_exception(eid_blocking_sch_init);
-    BlockingTSI = tsi;
-}
-
 void governor::one_time_init() {
     if( !__TBB_InitOnce::initialization_done() )
         DoOneTimeInitializations();
@@ -154,56 +165,65 @@ void governor::one_time_init() {
 #endif /* __TBB_SURVIVE_THREAD_SWITCH */
 }
 
+generic_scheduler* governor::init_scheduler_weak() {
+    one_time_init();
+    __TBB_ASSERT( is_set(NULL), "TLS contains a scheduler?" );
+    generic_scheduler* s = generic_scheduler::create_master( NULL ); // without arena
+    s->my_auto_initialized = true;
+    return s;
+}
+
 generic_scheduler* governor::init_scheduler( int num_threads, stack_size_type stack_size, bool auto_init ) {
     one_time_init();
-    generic_scheduler* s = theTLS.get();
-    if( s ) {
-        s->my_ref_count += 1;
+    if ( uintptr_t v = theTLS.get() ) {
+        generic_scheduler* s = tls_scheduler_of( v );
+        if ( (v&1) == 0 ) { // TLS holds scheduler instance without arena
+            __TBB_ASSERT( s->my_ref_count == 1, "weakly initialized scheduler must have refcount equal to 1" );
+            __TBB_ASSERT( !s->my_arena, "weakly initialized scheduler  must have no arena" );
+            __TBB_ASSERT( s->my_auto_initialized, "weakly initialized scheduler is supposed to be auto-initialized" );
+            s->attach_arena( market::create_arena( default_num_threads(), 1, 0 ), 0, /*is_master*/true );
+            __TBB_ASSERT( s->my_arena_index == 0, "Master thread must occupy the first slot in its arena" );
+            s->my_arena_slot->my_scheduler = s;
+            s->my_arena->my_default_ctx = s->default_context(); // it also transfers implied ownership
+            // Mark the scheduler as fully initialized
+            assume_scheduler( s );
+        }
+        // Increment refcount only for explicit instances of task_scheduler_init.
+        if ( !auto_init ) s->my_ref_count += 1;
+        __TBB_ASSERT( s->my_arena, "scheduler is not initialized fully" );
         return s;
     }
-    bool default_concurrency_requested = num_threads == task_scheduler_init::automatic;
-    if( default_concurrency_requested )
+    // Create new scheduler instance with arena
+    if( num_threads == task_scheduler_init::automatic )
         num_threads = default_num_threads();
-    arena &a = market::create_arena( num_threads, stack_size, default_concurrency_requested );
-    s = generic_scheduler::create_master( a );
+    arena *a = market::create_arena( num_threads, 1, stack_size );
+    generic_scheduler* s = generic_scheduler::create_master( a );
     __TBB_ASSERT(s, "Somehow a local scheduler creation for a master thread failed");
+    __TBB_ASSERT( is_set(s), NULL );
     s->my_auto_initialized = auto_init;
     return s;
 }
 
-void governor::terminate_scheduler( generic_scheduler* s, const task_scheduler_init* tsi_ptr ) {
-    __TBB_ASSERT( s == theTLS.get(), "Attempt to terminate non-local scheduler instance" );
-    if (--(s->my_ref_count)) {
-        // can't throw exception, because this is on dtor's call chain
-        __TBB_ASSERT_RELEASE( !BlockingTSI || BlockingTSI!=tsi_ptr,
-                              "Attempt to terminate nested scheduler in blocking mode" );
-    } else {
-#if TBB_USE_ASSERT
-        if (BlockingTSI) {
-            __TBB_ASSERT( BlockingTSI == tsi_ptr, "For blocking termination last terminate_scheduler must be blocking." );
-            IsBlockingTerminationInProgress = true;
-        }
-#endif
-        s->cleanup_master();
-        BlockingTSI = NULL;
-#if TBB_USE_ASSERT
-        IsBlockingTerminationInProgress = false;
-#endif
+bool governor::terminate_scheduler( generic_scheduler* s, const task_scheduler_init* tsi_ptr, bool blocking ) {
+    bool ok = false;
+    __TBB_ASSERT( is_set(s), "Attempt to terminate non-local scheduler instance" );
+    if (0 == --(s->my_ref_count)) {
+        ok = s->cleanup_master( blocking );
+        __TBB_ASSERT( is_set(NULL), "cleanup_master has not cleared its TLS slot" );
     }
+    return ok;
 }
 
 void governor::auto_terminate(void* arg){
-    generic_scheduler* s = static_cast<generic_scheduler*>(arg);
+    generic_scheduler* s = tls_scheduler_of( uintptr_t(arg) ); // arg is equivalent to theTLS.get()
     if( s && s->my_auto_initialized ) {
         if( !--(s->my_ref_count) ) {
-            __TBB_ASSERT( !BlockingTSI, "Blocking auto-terminate is not supported." );
             // If the TLS slot is already cleared by OS or underlying concurrency
             // runtime, restore its value.
-            if ( !theTLS.get() )
-                theTLS.set(s);
-            else __TBB_ASSERT( s == theTLS.get(), NULL );
-            s->cleanup_master();
-            __TBB_ASSERT( !theTLS.get(), "cleanup_master has not cleared its TLS slot" );
+            if( !is_set(s) )
+                assume_scheduler(s);
+            s->cleanup_master( /*blocking_terminate=*/false );
+            __TBB_ASSERT( is_set(NULL), "cleanup_master has not cleared its TLS slot" );
         }
     }
 }
@@ -222,7 +242,7 @@ void governor::print_version_info () {
 }
 
 void governor::initialize_rml_factory () {
-    ::rml::factory::status_type res = theRMLServerFactory.open(); 
+    ::rml::factory::status_type res = theRMLServerFactory.open();
     UsePrivateRML = res != ::rml::factory::st_success;
 }
 
@@ -231,7 +251,7 @@ __cilk_tbb_retcode governor::stack_op_handler( __cilk_tbb_stack_op op, void* dat
     __TBB_ASSERT(data,NULL);
     generic_scheduler* s = static_cast<generic_scheduler*>(data);
 #if TBB_USE_ASSERT
-    void* current = theTLS.get();
+    void* current = local_scheduler_if_initialized();
 #if _WIN32||_WIN64
     uintptr_t thread_id = GetCurrentThreadId();
 #else
@@ -243,33 +263,33 @@ __cilk_tbb_retcode governor::stack_op_handler( __cilk_tbb_stack_op op, void* dat
         default:
             __TBB_ASSERT( 0, "invalid op" );
         case CILK_TBB_STACK_ADOPT: {
-            __TBB_ASSERT( !current && s->my_cilk_state==generic_scheduler::cs_limbo || 
+            __TBB_ASSERT( !current && s->my_cilk_state==generic_scheduler::cs_limbo ||
                           current==s && s->my_cilk_state==generic_scheduler::cs_running, "invalid adoption" );
 #if TBB_USE_ASSERT
-            if( current==s ) 
+            if( current==s )
                 runtime_warning( "redundant adoption of %p by thread %p\n", s, (void*)thread_id );
             s->my_cilk_state = generic_scheduler::cs_running;
 #endif /* TBB_USE_ASSERT */
-            theTLS.set(s);
+            assume_scheduler( s );
             break;
         }
         case CILK_TBB_STACK_ORPHAN: {
-            __TBB_ASSERT( current==s && s->my_cilk_state==generic_scheduler::cs_running, "invalid orphaning" ); 
+            __TBB_ASSERT( current==s && s->my_cilk_state==generic_scheduler::cs_running, "invalid orphaning" );
 #if TBB_USE_ASSERT
             s->my_cilk_state = generic_scheduler::cs_limbo;
 #endif /* TBB_USE_ASSERT */
-            theTLS.set(NULL);
+            assume_scheduler(NULL);
             break;
         }
         case CILK_TBB_STACK_RELEASE: {
-            __TBB_ASSERT( !current && s->my_cilk_state==generic_scheduler::cs_limbo || 
+            __TBB_ASSERT( !current && s->my_cilk_state==generic_scheduler::cs_limbo ||
                           current==s && s->my_cilk_state==generic_scheduler::cs_running, "invalid release" );
 #if TBB_USE_ASSERT
             s->my_cilk_state = generic_scheduler::cs_freed;
 #endif /* TBB_USE_ASSERT */
             s->my_cilk_unwatch_thunk.routine = NULL;
             auto_terminate( s );
-        } 
+        }
     }
     return 0;
 }
@@ -294,16 +314,9 @@ void task_scheduler_init::initialize( int number_of_threads, stack_size_type thr
 #endif
     thread_stack_size &= ~(stack_size_type)propagation_mode_mask;
     if( number_of_threads!=deferred ) {
-        bool blocking_terminate = false;
-        if (my_scheduler == (scheduler*)wait_workers_in_terminate_flag) {
-            blocking_terminate = true;
-            my_scheduler = NULL;
-        }
         __TBB_ASSERT_RELEASE( !my_scheduler, "task_scheduler_init already initialized" );
         __TBB_ASSERT_RELEASE( number_of_threads==automatic || number_of_threads > 0,
                     "number_of_threads for task_scheduler_init must be automatic or positive" );
-        if (blocking_terminate)
-            governor::setBlockingTerminate(this);
         internal::generic_scheduler *s = governor::init_scheduler( number_of_threads, thread_stack_size, /*auto_init=*/false );
 #if __TBB_TASK_GROUP_CONTEXT && TBB_USE_EXCEPTIONS
         if ( s->master_outermost_level() ) {
@@ -313,7 +326,7 @@ void task_scheduler_init::initialize( int number_of_threads, stack_size_type thr
                     : new_mode & propagation_mode_captured ? vt & ~task_group_context::exact_exception : vt;
             // Use least significant bit of the scheduler pointer to store previous mode.
             // This is necessary when components compiled with different compilers and/or
-            // TBB versions initialize the 
+            // TBB versions initialize the
             my_scheduler = static_cast<scheduler*>((generic_scheduler*)((uintptr_t)s | prev_mode));
         }
         else
@@ -324,7 +337,7 @@ void task_scheduler_init::initialize( int number_of_threads, stack_size_type thr
     }
 }
 
-void task_scheduler_init::terminate() {
+bool task_scheduler_init::internal_terminate( bool blocking ) {
 #if __TBB_TASK_GROUP_CONTEXT && TBB_USE_EXCEPTIONS
     uintptr_t prev_mode = (uintptr_t)my_scheduler & propagation_mode_exact;
     my_scheduler = (scheduler*)((uintptr_t)my_scheduler & ~(uintptr_t)propagation_mode_exact);
@@ -339,8 +352,25 @@ void task_scheduler_init::terminate() {
                                         : vt & ~task_group_context::exact_exception;
     }
 #endif /* __TBB_TASK_GROUP_CONTEXT && TBB_USE_EXCEPTIONS */
-    governor::terminate_scheduler(s, this);
+    return governor::terminate_scheduler(s, this, blocking);
+}
+
+void task_scheduler_init::terminate() {
+    internal_terminate(/*blocking_terminate=*/false);
+}
+
+#if __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE
+bool task_scheduler_init::internal_blocking_terminate( bool throwing ) {
+    bool ok = internal_terminate( /*blocking_terminate=*/true );
+#if TBB_USE_EXCEPTIONS
+    if( throwing && !ok )
+        throw_exception( eid_blocking_thread_join_impossible );
+#else
+    suppress_unused_warning( throwing );
+#endif
+    return ok;
 }
+#endif // __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE
 
 int task_scheduler_init::default_num_threads() {
     return governor::default_num_threads();
diff --git a/src/tbb/governor.h b/src/tbb/governor.h
index 30951fc..92f98bb 100644
--- a/src/tbb/governor.h
+++ b/src/tbb/governor.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef _TBB_governor_H
@@ -55,7 +55,7 @@ private:
     friend class market;
 
     //! TLS for scheduler instances associated with individual threads
-    static basic_tls<generic_scheduler*> theTLS;
+    static basic_tls<uintptr_t> theTLS;
 
     //! Caches the maximal level of parallelism supported by the hardware
     static unsigned DefaultNumberOfThreads;
@@ -64,14 +64,9 @@ private:
 
     static bool UsePrivateRML;
 
-    //! Instance of task_scheduler_init that requested blocking termination.
-    static const task_scheduler_init *BlockingTSI;
-
-#if TBB_USE_ASSERT
-    static bool IsBlockingTerminationInProgress;
-#endif
-
+    // Flags for runtime-specific conditions
     static bool is_speculation_enabled;
+    static bool is_rethrow_broken;
 
     //! Create key for thread-local storage and initialize RML.
     static void acquire_resources ();
@@ -96,55 +91,69 @@ public:
     //! Processes scheduler initialization request (possibly nested) in a master thread
     /** If necessary creates new instance of arena and/or local scheduler.
         The auto_init argument specifies if the call is due to automatic initialization. **/
-    static generic_scheduler* init_scheduler( int num_threads, stack_size_type stack_size, bool auto_init = false );
+    static generic_scheduler* init_scheduler( int num_threads, stack_size_type stack_size, bool auto_init );
+
+    //! Automatic initialization of scheduler in a master thread with default settings without arena
+    static generic_scheduler* init_scheduler_weak();
 
     //! Processes scheduler termination request (possibly nested) in a master thread
-    static void terminate_scheduler( generic_scheduler* s, const task_scheduler_init *tsi_ptr );
+    static bool terminate_scheduler( generic_scheduler* s, const task_scheduler_init *tsi_ptr, bool blocking );
 
     //! Register TBB scheduler instance in thread-local storage.
-    static void sign_on(generic_scheduler* s);
+    static void sign_on( generic_scheduler* s );
 
     //! Unregister TBB scheduler instance from thread-local storage.
-    static void sign_off(generic_scheduler* s);
+    static void sign_off( generic_scheduler* s );
 
     //! Used to check validity of the local scheduler TLS contents.
-    static bool is_set ( generic_scheduler* s ) { return theTLS.get() == s; }
+    static bool is_set( generic_scheduler* s );
 
     //! Temporarily set TLS slot to the given scheduler
-    static void assume_scheduler( generic_scheduler* s ) { theTLS.set( s ); }
+    static void assume_scheduler( generic_scheduler* s );
+
+    //! Computes the value of the TLS
+    static uintptr_t tls_value_of( generic_scheduler* s );
+
+    // TODO IDEA: refactor bit manipulations over pointer types to a class?
+    //! Converts TLS value to the scheduler pointer
+    static generic_scheduler* tls_scheduler_of( uintptr_t v ) {
+        return (generic_scheduler*)(v & ~uintptr_t(1));
+    }
 
     //! Obtain the thread-local instance of the TBB scheduler.
     /** If the scheduler has not been initialized yet, initialization is done automatically.
         Note that auto-initialized scheduler instance is destroyed only when its thread terminates. **/
     static generic_scheduler* local_scheduler () {
-        generic_scheduler* s = theTLS.get();
-        return s ? s : init_scheduler( task_scheduler_init::automatic, 0, true );
+        uintptr_t v = theTLS.get();
+        return (v&1) ? tls_scheduler_of(v) : init_scheduler( task_scheduler_init::automatic, 0, /*auto_init=*/true );
+    }
+
+    static generic_scheduler* local_scheduler_weak () {
+        uintptr_t v = theTLS.get();
+        return v ? tls_scheduler_of(v) : init_scheduler_weak();
     }
 
     static generic_scheduler* local_scheduler_if_initialized () {
-        return theTLS.get();
+        return tls_scheduler_of( theTLS.get() );
     }
 
     //! Undo automatic initialization if necessary; call when a thread exits.
     static void terminate_auto_initialized_scheduler() {
-        auto_terminate( theTLS.get() );
+        auto_terminate( local_scheduler_if_initialized() );
     }
 
     static void print_version_info ();
 
     static void initialize_rml_factory ();
 
-    static bool needsWaitWorkers () { return BlockingTSI!=NULL; }
-
     static bool does_client_join_workers (const tbb::internal::rml::tbb_client &client);
 
-    //! Must be called before init_scheduler
-    static void setBlockingTerminate(const task_scheduler_init *tsi);
-
 #if __TBB_SURVIVE_THREAD_SWITCH
     static __cilk_tbb_retcode stack_op_handler( __cilk_tbb_stack_op op, void* );
 #endif /* __TBB_SURVIVE_THREAD_SWITCH */
+
     static bool speculation_enabled() { return is_speculation_enabled; }
+    static bool rethrow_exception_broken() { return is_rethrow_broken; }
 
 }; // class governor
 
diff --git a/src/tbb/ia32-masm/atomic_support.asm b/src/tbb/ia32-masm/atomic_support.asm
index 5b2bcba..3cb82b9 100644
--- a/src/tbb/ia32-masm/atomic_support.asm
+++ b/src/tbb/ia32-masm/atomic_support.asm
@@ -1,20 +1,20 @@
-; Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+; Copyright (c) 2005-2017 Intel Corporation
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+;     http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+;
+;
 ;
-; This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-; you can redistribute it and/or modify it under the terms of the GNU General Public License
-; version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-; Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 ;
-; As a special exception,  you may use this file  as part of a free software library without
-; restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-; functions from this file, or you compile this file and link it with other files to produce
-; an executable,  this file does not by itself cause the resulting executable to be covered
-; by the GNU General Public License. This exception does not however invalidate any other
-; reasons why the executable file might be covered by the GNU General Public License.
 
 .686
 .model flat,c
diff --git a/src/tbb/ia32-masm/itsx.asm b/src/tbb/ia32-masm/itsx.asm
index 58c999b..10e0835 100644
--- a/src/tbb/ia32-masm/itsx.asm
+++ b/src/tbb/ia32-masm/itsx.asm
@@ -1,20 +1,20 @@
-; Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+; Copyright (c) 2005-2017 Intel Corporation
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+;     http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+;
+;
 ;
-; This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-; you can redistribute it and/or modify it under the terms of the GNU General Public License
-; version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-; Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 ;
-; As a special exception,  you may use this file  as part of a free software library without
-; restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-; functions from this file, or you compile this file and link it with other files to produce
-; an executable,  this file does not by itself cause the resulting executable to be covered
-; by the GNU General Public License. This exception does not however invalidate any other
-; reasons why the executable file might be covered by the GNU General Public License.
 
 .686
 .model flat,c
diff --git a/src/tbb/ia32-masm/lock_byte.asm b/src/tbb/ia32-masm/lock_byte.asm
index c96fe5b..daad519 100644
--- a/src/tbb/ia32-masm/lock_byte.asm
+++ b/src/tbb/ia32-masm/lock_byte.asm
@@ -1,20 +1,20 @@
-; Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+; Copyright (c) 2005-2017 Intel Corporation
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+;     http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+;
+;
 ;
-; This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-; you can redistribute it and/or modify it under the terms of the GNU General Public License
-; version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-; Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 ;
-; As a special exception,  you may use this file  as part of a free software library without
-; restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-; functions from this file, or you compile this file and link it with other files to produce
-; an executable,  this file does not by itself cause the resulting executable to be covered
-; by the GNU General Public License. This exception does not however invalidate any other
-; reasons why the executable file might be covered by the GNU General Public License.
 
 ; DO NOT EDIT - AUTOMATICALLY GENERATED FROM .s FILE
 .686
diff --git a/src/tbb/ia64-gas/atomic_support.s b/src/tbb/ia64-gas/atomic_support.s
index 9b3af7d..cf800db 100644
--- a/src/tbb/ia64-gas/atomic_support.s
+++ b/src/tbb/ia64-gas/atomic_support.s
@@ -1,20 +1,20 @@
-// Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+// Copyright (c) 2005-2017 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
 //
-// This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-// you can redistribute it and/or modify it under the terms of the GNU General Public License
-// version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-// Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 //
-// As a special exception,  you may use this file  as part of a free software library without
-// restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-// functions from this file, or you compile this file and link it with other files to produce
-// an executable,  this file does not by itself cause the resulting executable to be covered
-// by the GNU General Public License. This exception does not however invalidate any other
-// reasons why the executable file might be covered by the GNU General Public License.
 
 // DO NOT EDIT - AUTOMATICALLY GENERATED FROM tools/generate_atomic/ipf_generate.sh
 # 1 "<stdin>"
diff --git a/src/tbb/ia64-gas/ia64_misc.s b/src/tbb/ia64-gas/ia64_misc.s
index 839536d..b62ce39 100644
--- a/src/tbb/ia64-gas/ia64_misc.s
+++ b/src/tbb/ia64-gas/ia64_misc.s
@@ -1,20 +1,20 @@
-// Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+// Copyright (c) 2005-2017 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
 //
-// This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-// you can redistribute it and/or modify it under the terms of the GNU General Public License
-// version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-// Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 //
-// As a special exception,  you may use this file  as part of a free software library without
-// restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-// functions from this file, or you compile this file and link it with other files to produce
-// an executable,  this file does not by itself cause the resulting executable to be covered
-// by the GNU General Public License. This exception does not however invalidate any other
-// reasons why the executable file might be covered by the GNU General Public License.
 
 	// RSE backing store pointer retrieval
     .section .text
diff --git a/src/tbb/ia64-gas/lock_byte.s b/src/tbb/ia64-gas/lock_byte.s
index 19b2234..551ac33 100644
--- a/src/tbb/ia64-gas/lock_byte.s
+++ b/src/tbb/ia64-gas/lock_byte.s
@@ -1,20 +1,20 @@
-// Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+// Copyright (c) 2005-2017 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
 //
-// This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-// you can redistribute it and/or modify it under the terms of the GNU General Public License
-// version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-// Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 //
-// As a special exception,  you may use this file  as part of a free software library without
-// restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-// functions from this file, or you compile this file and link it with other files to produce
-// an executable,  this file does not by itself cause the resulting executable to be covered
-// by the GNU General Public License. This exception does not however invalidate any other
-// reasons why the executable file might be covered by the GNU General Public License.
 
 	// Support for class TinyLock
 	.section .text
diff --git a/src/tbb/ia64-gas/log2.s b/src/tbb/ia64-gas/log2.s
index 4acac8e..d4ad9e2 100644
--- a/src/tbb/ia64-gas/log2.s
+++ b/src/tbb/ia64-gas/log2.s
@@ -1,20 +1,20 @@
-// Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+// Copyright (c) 2005-2017 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
 //
-// This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-// you can redistribute it and/or modify it under the terms of the GNU General Public License
-// version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-// Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 //
-// As a special exception,  you may use this file  as part of a free software library without
-// restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-// functions from this file, or you compile this file and link it with other files to produce
-// an executable,  this file does not by itself cause the resulting executable to be covered
-// by the GNU General Public License. This exception does not however invalidate any other
-// reasons why the executable file might be covered by the GNU General Public License.
 
 	.section .text
 	.align 16
diff --git a/src/tbb/ia64-gas/pause.s b/src/tbb/ia64-gas/pause.s
index 5296d7f..a22b420 100644
--- a/src/tbb/ia64-gas/pause.s
+++ b/src/tbb/ia64-gas/pause.s
@@ -1,20 +1,20 @@
-// Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+// Copyright (c) 2005-2017 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
 //
-// This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-// you can redistribute it and/or modify it under the terms of the GNU General Public License
-// version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-// Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 //
-// As a special exception,  you may use this file  as part of a free software library without
-// restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-// functions from this file, or you compile this file and link it with other files to produce
-// an executable,  this file does not by itself cause the resulting executable to be covered
-// by the GNU General Public License. This exception does not however invalidate any other
-// reasons why the executable file might be covered by the GNU General Public License.
 
 	.section .text
 	.align 16
diff --git a/src/tbb/ibm_aix51/atomic_support.c b/src/tbb/ibm_aix51/atomic_support.c
index 10700e2..0aa08a1 100644
--- a/src/tbb/ibm_aix51/atomic_support.c
+++ b/src/tbb/ibm_aix51/atomic_support.c
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include <stdint.h>
diff --git a/src/tbb/index.html b/src/tbb/index.html
index c559d6b..9ba7f57 100644
--- a/src/tbb/index.html
+++ b/src/tbb/index.html
@@ -21,7 +21,7 @@ This directory contains the source code of the TBB core components.
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/src/tbb/intel64-masm/atomic_support.asm b/src/tbb/intel64-masm/atomic_support.asm
index e19dafb..d3c7f69 100644
--- a/src/tbb/intel64-masm/atomic_support.asm
+++ b/src/tbb/intel64-masm/atomic_support.asm
@@ -1,20 +1,20 @@
-; Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+; Copyright (c) 2005-2017 Intel Corporation
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+;     http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+;
+;
 ;
-; This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-; you can redistribute it and/or modify it under the terms of the GNU General Public License
-; version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-; Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 ;
-; As a special exception,  you may use this file  as part of a free software library without
-; restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-; functions from this file, or you compile this file and link it with other files to produce
-; an executable,  this file does not by itself cause the resulting executable to be covered
-; by the GNU General Public License. This exception does not however invalidate any other
-; reasons why the executable file might be covered by the GNU General Public License.
 
 ; DO NOT EDIT - AUTOMATICALLY GENERATED FROM .s FILE
 .code 
diff --git a/src/tbb/intel64-masm/intel64_misc.asm b/src/tbb/intel64-masm/intel64_misc.asm
index 0712bfd..4fe7515 100644
--- a/src/tbb/intel64-masm/intel64_misc.asm
+++ b/src/tbb/intel64-masm/intel64_misc.asm
@@ -1,20 +1,20 @@
-; Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+; Copyright (c) 2005-2017 Intel Corporation
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+;     http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+;
+;
 ;
-; This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-; you can redistribute it and/or modify it under the terms of the GNU General Public License
-; version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-; Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 ;
-; As a special exception,  you may use this file  as part of a free software library without
-; restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-; functions from this file, or you compile this file and link it with other files to produce
-; an executable,  this file does not by itself cause the resulting executable to be covered
-; by the GNU General Public License. This exception does not however invalidate any other
-; reasons why the executable file might be covered by the GNU General Public License.
 
 .code
 	ALIGN 8
diff --git a/src/tbb/intel64-masm/itsx.asm b/src/tbb/intel64-masm/itsx.asm
index c20cff2..1a5958f 100644
--- a/src/tbb/intel64-masm/itsx.asm
+++ b/src/tbb/intel64-masm/itsx.asm
@@ -1,20 +1,20 @@
-; Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+; Copyright (c) 2005-2017 Intel Corporation
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+;     http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+;
+;
 ;
-; This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-; you can redistribute it and/or modify it under the terms of the GNU General Public License
-; version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-; Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 ;
-; As a special exception,  you may use this file  as part of a free software library without
-; restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-; functions from this file, or you compile this file and link it with other files to produce
-; an executable,  this file does not by itself cause the resulting executable to be covered
-; by the GNU General Public License. This exception does not however invalidate any other
-; reasons why the executable file might be covered by the GNU General Public License.
 
 .code
         ALIGN 8
diff --git a/src/tbb/intrusive_list.h b/src/tbb/intrusive_list.h
index f131c8e..cb2190a 100644
--- a/src/tbb/intrusive_list.h
+++ b/src/tbb/intrusive_list.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef _TBB_intrusive_list_H
@@ -28,7 +28,7 @@ namespace internal {
 
 //! Data structure to be inherited by the types that can form intrusive lists.
 /** Intrusive list is formed by means of the member_intrusive_list<T> template class.
-    Note that type T must derive from intrusive_list_node either publicly or 
+    Note that type T must derive from intrusive_list_node either publicly or
     declare instantiation member_intrusive_list<T> as a friend.
     This class implements a limited subset of std::list interface. **/
 struct intrusive_list_node {
@@ -112,7 +112,7 @@ class intrusive_list_base {
     }; // intrusive_list_base::iterator_impl
 
     void assert_ok () const {
-        __TBB_ASSERT( (my_head.my_prev_node == &my_head && !my_size) || 
+        __TBB_ASSERT( (my_head.my_prev_node == &my_head && !my_size) ||
                       (my_head.my_next_node != &my_head && my_size >0), "intrusive_list_base corrupted" );
 #if TBB_USE_ASSERT >= 2
         size_t i = 0;
@@ -167,9 +167,9 @@ public:
     const_iterator end () const { return const_iterator(&my_head); }
 
     void push_front ( T& val ) {
-        __TBB_ASSERT( node(val).my_prev_node == &node(val) && node(val).my_next_node == &node(val), 
+        __TBB_ASSERT( node(val).my_prev_node == &node(val) && node(val).my_next_node == &node(val),
                     "Object with intrusive list node can be part of only one intrusive list simultaneously" );
-        // An object can be part of only one intrusive list at the given moment via the given node member 
+        // An object can be part of only one intrusive list at the given moment via the given node member
         node(val).my_prev_node = &my_head;
         node(val).my_next_node = my_head.my_next_node;
         my_head.my_next_node->my_prev_node = &node(val);
@@ -201,11 +201,11 @@ public:
 
 
 //! Double linked list of items of type T containing a member of type intrusive_list_node.
-/** NodePtr is a member pointer to the node data field. Class U is either T or 
+/** NodePtr is a member pointer to the node data field. Class U is either T or
     a base class of T containing the node member. Default values exist for the sake
     of a partial specialization working with inheritance case.
 
-    The list does not have ownership of its items. Its purpose is to avoid dynamic 
+    The list does not have ownership of its items. Its purpose is to avoid dynamic
     memory allocation when forming lists of existing objects.
 
     The class is not thread safe. **/
@@ -217,16 +217,16 @@ class memptr_intrusive_list : public intrusive_list_base<memptr_intrusive_list<T
     static intrusive_list_node& node ( T& val ) { return val.*NodePtr; }
 
     static T& item ( intrusive_list_node* node ) {
-        // Cannot use __TBB_offsetof (and consequently __TBB_get_object_ref) macro 
+        // Cannot use __TBB_offsetof (and consequently __TBB_get_object_ref) macro
         // with *NodePtr argument because gcc refuses to interpret pasted "->" and "*"
-        // as member pointer dereferencing operator, and explicit usage of ## in 
+        // as member pointer dereferencing operator, and explicit usage of ## in
         // __TBB_offsetof implementation breaks operations with normal member names.
         return *reinterpret_cast<T*>((char*)node - ((ptrdiff_t)&(reinterpret_cast<T*>(0x1000)->*NodePtr) - 0x1000));
     }
 }; // intrusive_list<T, U, NodePtr>
 
 //! Double linked list of items of type T that is derived from intrusive_list_node class.
-/** The list does not have ownership of its items. Its purpose is to avoid dynamic 
+/** The list does not have ownership of its items. Its purpose is to avoid dynamic
     memory allocation when forming lists of existing objects.
 
     The class is not thread safe. **/
diff --git a/src/tbb/itt_notify.cpp b/src/tbb/itt_notify.cpp
index ca34fe3..670c84d 100644
--- a/src/tbb/itt_notify.cpp
+++ b/src/tbb/itt_notify.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if DO_ITT_NOTIFY
@@ -49,6 +49,12 @@ extern "C" void MallocInitializeITT();
 namespace tbb {
 namespace internal {
 int __TBB_load_ittnotify() {
+#if !(_WIN32||_WIN64)
+    // tool_api crashes without dlopen, check that it's present. Common case
+    // for lack of dlopen is static binaries, i.e. ones build with -static.
+    if (dlopen == NULL)
+        return 0;
+#endif
     return __itt_init_ittlib(NULL,          // groups for:
       (__itt_group_id)(__itt_group_sync     // prepare/cancel/acquired/releasing
                        | __itt_group_thread // name threads
@@ -69,11 +75,11 @@ int __TBB_load_ittnotify() {
 namespace tbb {
 
 #if DO_ITT_NOTIFY
-    const tchar 
+    const tchar
             *SyncType_GlobalLock = _T("TbbGlobalLock"),
             *SyncType_Scheduler = _T("%Constant")
             ;
-    const tchar 
+    const tchar
             *SyncObj_SchedulerInitialization = _T("TbbSchedulerInitialization"),
             *SyncObj_SchedulersList = _T("TbbSchedulersList"),
             *SyncObj_WorkerLifeCycleMgmt = _T("TBB Scheduler"),
diff --git a/src/tbb/itt_notify.h b/src/tbb/itt_notify.h
index ca84394..529437c 100644
--- a/src/tbb/itt_notify.h
+++ b/src/tbb/itt_notify.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef _TBB_ITT_NOTIFY
@@ -58,7 +58,7 @@ namespace tbb {
     //! Unicode character type. Always wchar_t on Windows.
     /** We do not use typedefs from Windows TCHAR family to keep consistence of TBB coding style. **/
     typedef wchar_t tchar;
-    //! Standard Windows macro to markup the string literals. 
+    //! Standard Windows macro to markup the string literals.
     #define _T(string_literal) L ## string_literal
 #else /* !WIN */
     typedef char tchar;
@@ -70,11 +70,11 @@ namespace tbb {
 #if DO_ITT_NOTIFY
 namespace tbb {
     //! Display names of internal synchronization types
-    extern const tchar 
+    extern const tchar
             *SyncType_GlobalLock,
             *SyncType_Scheduler;
     //! Display names of internal synchronization components/scenarios
-    extern const tchar 
+    extern const tchar
             *SyncObj_SchedulerInitialization,
             *SyncObj_SchedulersList,
             *SyncObj_WorkerLifeCycleMgmt,
@@ -89,7 +89,7 @@ namespace tbb {
             ;
 
     namespace internal {
-        void __TBB_EXPORTED_FUNC itt_set_sync_name_v3( void* obj, const tchar* name); 
+        void __TBB_EXPORTED_FUNC itt_set_sync_name_v3( void* obj, const tchar* name);
 
     } // namespace internal
 
diff --git a/src/tbb/lin32-tbb-export.def b/src/tbb/lin32-tbb-export.def
index a083e30..d1f7c9c 100644
--- a/src/tbb/lin32-tbb-export.def
+++ b/src/tbb/lin32-tbb-export.def
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 {
diff --git a/src/tbb/lin32-tbb-export.lst b/src/tbb/lin32-tbb-export.lst
index 7ad50f5..a495159 100644
--- a/src/tbb/lin32-tbb-export.lst
+++ b/src/tbb/lin32-tbb-export.lst
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/tbb_config.h"
@@ -52,6 +52,7 @@ __TBB_SYMBOL( _ZN3tbb19task_scheduler_init19default_num_threadsEv )
 __TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEij )
 __TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEi )
 __TBB_SYMBOL( _ZN3tbb19task_scheduler_init9terminateEv )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init27internal_blocking_terminateEb )
 #if __TBB_SCHEDULER_OBSERVER
 __TBB_SYMBOL( _ZN3tbb8internal26task_scheduler_observer_v37observeEb )
 #endif /* __TBB_SCHEDULER_OBSERVER */
@@ -62,15 +63,18 @@ __TBB_SYMBOL( _ZTIN3tbb10empty_taskE )
 __TBB_SYMBOL( _ZTSN3tbb10empty_taskE )
 __TBB_SYMBOL( _ZTVN3tbb10empty_taskE )
 
-#if __TBB_TASK_ARENA
 /* arena.cpp */
 __TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base19internal_initializeEv )
 __TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base18internal_terminateEv )
+__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base15internal_attachEv )
 __TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base16internal_enqueueERNS_4taskEi )
 __TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base16internal_executeERNS1_13delegate_baseE )
 __TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base13internal_waitEv )
 __TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base21internal_current_slotEv )
-#endif /* __TBB_TASK_ARENA */
+__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base24internal_max_concurrencyEPKNS0_10task_arenaE )
+#if __TBB_TASK_ISOLATION
+ __TBB_SYMBOL( _ZN3tbb10interface78internal20isolate_within_arenaERNS1_13delegate_baseEi )
+#endif /* __TBB_TASK_ISOLATION */
 
 #if !TBB_NO_LEGACY
 /* task_v2.cpp */
@@ -172,6 +176,8 @@ __TBB_SYMBOL( _ZN3tbb8internal23itt_metadata_str_add_v7ENS0_15itt_domain_enumEPv
 __TBB_SYMBOL( _ZN3tbb8internal19itt_relation_add_v7ENS0_15itt_domain_enumEPvyNS0_12itt_relationES2_y )
 __TBB_SYMBOL( _ZN3tbb8internal17itt_task_begin_v7ENS0_15itt_domain_enumEPvyS2_yNS0_12string_indexE )
 __TBB_SYMBOL( _ZN3tbb8internal15itt_task_end_v7ENS0_15itt_domain_enumE )
+__TBB_SYMBOL( _ZN3tbb8internal19itt_region_begin_v9ENS0_15itt_domain_enumEPvyS2_yNS0_12string_indexE )
+__TBB_SYMBOL( _ZN3tbb8internal17itt_region_end_v9ENS0_15itt_domain_enumEPvy )
 #endif
 
 /* pipeline.cpp */
diff --git a/src/tbb/lin64-tbb-export.def b/src/tbb/lin64-tbb-export.def
index ea58c90..1f3cac3 100644
--- a/src/tbb/lin64-tbb-export.def
+++ b/src/tbb/lin64-tbb-export.def
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 {
diff --git a/src/tbb/lin64-tbb-export.lst b/src/tbb/lin64-tbb-export.lst
index 227b992..f05e68b 100644
--- a/src/tbb/lin64-tbb-export.lst
+++ b/src/tbb/lin64-tbb-export.lst
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/tbb_config.h"
@@ -52,6 +52,7 @@ __TBB_SYMBOL( _ZN3tbb19task_scheduler_init19default_num_threadsEv )
 __TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEim )
 __TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEi )
 __TBB_SYMBOL( _ZN3tbb19task_scheduler_init9terminateEv )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init27internal_blocking_terminateEb )
 #if __TBB_SCHEDULER_OBSERVER
 __TBB_SYMBOL( _ZN3tbb8internal26task_scheduler_observer_v37observeEb )
 #endif /* __TBB_SCHEDULER_OBSERVER */
@@ -62,15 +63,18 @@ __TBB_SYMBOL( _ZTIN3tbb10empty_taskE )
 __TBB_SYMBOL( _ZTSN3tbb10empty_taskE )
 __TBB_SYMBOL( _ZTVN3tbb10empty_taskE )
 
-#if __TBB_TASK_ARENA
 /* arena.cpp */
 __TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base19internal_initializeEv )
 __TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base18internal_terminateEv )
+__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base15internal_attachEv )
 __TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base16internal_enqueueERNS_4taskEl )
 __TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base16internal_executeERNS1_13delegate_baseE )
 __TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base13internal_waitEv )
 __TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base21internal_current_slotEv )
-#endif /* __TBB_TASK_ARENA */
+__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base24internal_max_concurrencyEPKNS0_10task_arenaE )
+#if __TBB_TASK_ISOLATION
+__TBB_SYMBOL( _ZN3tbb10interface78internal20isolate_within_arenaERNS1_13delegate_baseEl )
+#endif
 
 #if !TBB_NO_LEGACY
 /* task_v2.cpp */
@@ -167,6 +171,8 @@ __TBB_SYMBOL( _ZN3tbb8internal22itt_make_task_group_v7ENS0_15itt_domain_enumEPvy
 __TBB_SYMBOL( _ZN3tbb8internal17itt_task_begin_v7ENS0_15itt_domain_enumEPvyS2_yNS0_12string_indexE )
 __TBB_SYMBOL( _ZN3tbb8internal19itt_relation_add_v7ENS0_15itt_domain_enumEPvyNS0_12itt_relationES2_y )
 __TBB_SYMBOL( _ZN3tbb8internal15itt_task_end_v7ENS0_15itt_domain_enumE )
+__TBB_SYMBOL( _ZN3tbb8internal19itt_region_begin_v9ENS0_15itt_domain_enumEPvyS2_yNS0_12string_indexE )
+__TBB_SYMBOL( _ZN3tbb8internal17itt_region_end_v9ENS0_15itt_domain_enumEPvy )
 #endif
 
 /* pipeline.cpp */
diff --git a/src/tbb/lin64ipf-tbb-export.def b/src/tbb/lin64ipf-tbb-export.def
index 71441cd..c2111c1 100644
--- a/src/tbb/lin64ipf-tbb-export.def
+++ b/src/tbb/lin64ipf-tbb-export.def
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 {
diff --git a/src/tbb/lin64ipf-tbb-export.lst b/src/tbb/lin64ipf-tbb-export.lst
index bb4af15..49f8cee 100644
--- a/src/tbb/lin64ipf-tbb-export.lst
+++ b/src/tbb/lin64ipf-tbb-export.lst
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/tbb_config.h"
@@ -52,6 +52,7 @@ __TBB_SYMBOL( _ZN3tbb19task_scheduler_init19default_num_threadsEv )
 __TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEim )
 __TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEi )
 __TBB_SYMBOL( _ZN3tbb19task_scheduler_init9terminateEv )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init27internal_blocking_terminateEb )
 #if __TBB_SCHEDULER_OBSERVER
 __TBB_SYMBOL( _ZN3tbb8internal26task_scheduler_observer_v37observeEb )
 #endif /* __TBB_SCHEDULER_OBSERVER */
@@ -62,15 +63,18 @@ __TBB_SYMBOL( _ZTIN3tbb10empty_taskE )
 __TBB_SYMBOL( _ZTSN3tbb10empty_taskE )
 __TBB_SYMBOL( _ZTVN3tbb10empty_taskE )
 
-#if __TBB_TASK_ARENA
 /* arena.cpp */
 __TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base19internal_initializeEv )
 __TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base18internal_terminateEv )
+__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base15internal_attachEv )
 __TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base16internal_enqueueERNS_4taskEl )
 __TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base16internal_executeERNS1_13delegate_baseE )
 __TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base13internal_waitEv )
 __TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base21internal_current_slotEv )
-#endif /* __TBB_TASK_ARENA */
+__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base24internal_max_concurrencyEPKNS0_10task_arenaE )
+#if __TBB_TASK_ISOLATION
+__TBB_SYMBOL( _ZN3tbb10interface78internal20isolate_within_arenaERNS1_13delegate_baseEl )
+#endif
 
 #if !TBB_NO_LEGACY
 /* task_v2.cpp */
diff --git a/src/tbb/mac32-tbb-export.def b/src/tbb/mac32-tbb-export.def
index ed53e79..5ed01b1 100644
--- a/src/tbb/mac32-tbb-export.def
+++ b/src/tbb/mac32-tbb-export.def
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #define __TBB_SYMBOL( sym ) _##sym
diff --git a/src/tbb/mac32-tbb-export.lst b/src/tbb/mac32-tbb-export.lst
index a000f16..8ce79f2 100644
--- a/src/tbb/mac32-tbb-export.lst
+++ b/src/tbb/mac32-tbb-export.lst
@@ -1,27 +1,27 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/tbb_config.h"
 
 /*
-    Sometimes OS X* requires leading underscore (e. g. in export list file), but sometimes not
+    Sometimes macOS* requires leading underscore (e. g. in export list file), but sometimes not
     (e. g. when searching symbol in a dynamic library via dlsym()). Symbols in this file SHOULD
     be listed WITHOUT one leading underscore. __TBB_SYMBOL macro should add underscore when
     necessary, depending on the indended usage.
@@ -60,6 +60,7 @@ __TBB_SYMBOL( _ZN3tbb19task_scheduler_init19default_num_threadsEv )
 __TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEim )
 __TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEi )
 __TBB_SYMBOL( _ZN3tbb19task_scheduler_init9terminateEv )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init27internal_blocking_terminateEb )
 #if __TBB_SCHEDULER_OBSERVER
 __TBB_SYMBOL( _ZN3tbb8internal26task_scheduler_observer_v37observeEb )
 #endif /* __TBB_SCHEDULER_OBSERVER */
@@ -70,15 +71,18 @@ __TBB_SYMBOL( _ZTIN3tbb10empty_taskE )
 __TBB_SYMBOL( _ZTSN3tbb10empty_taskE )
 __TBB_SYMBOL( _ZTVN3tbb10empty_taskE )
 
-#if __TBB_TASK_ARENA
 /* arena.cpp */
 __TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base19internal_initializeEv )
 __TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base18internal_terminateEv )
+__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base15internal_attachEv )
 __TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base16internal_enqueueERNS_4taskEl )
 __TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base16internal_executeERNS1_13delegate_baseE )
 __TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base13internal_waitEv )
 __TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base21internal_current_slotEv )
-#endif /* __TBB_TASK_ARENA */
+__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base24internal_max_concurrencyEPKNS0_10task_arenaE )
+#if __TBB_TASK_ISOLATION
+__TBB_SYMBOL( _ZN3tbb10interface78internal20isolate_within_arenaERNS1_13delegate_baseEl )
+#endif /* __TBB_TASK_ISOLATION */
 
 #if !TBB_NO_LEGACY
 // task_v2.cpp
diff --git a/src/tbb/mac64-tbb-export.def b/src/tbb/mac64-tbb-export.def
index 71e8f5e..e2c0370 100644
--- a/src/tbb/mac64-tbb-export.def
+++ b/src/tbb/mac64-tbb-export.def
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #define __TBB_SYMBOL( sym ) _##sym
diff --git a/src/tbb/mac64-tbb-export.lst b/src/tbb/mac64-tbb-export.lst
index 9b6ef26..67d3676 100644
--- a/src/tbb/mac64-tbb-export.lst
+++ b/src/tbb/mac64-tbb-export.lst
@@ -1,27 +1,27 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/tbb_config.h"
 
 /*
-    Sometimes OS X* requires leading underscore (e. g. in export list file), but sometimes not
+    Sometimes macOS* requires leading underscore (e. g. in export list file), but sometimes not
     (e. g. when searching symbol in a dynamic library via dlsym()). Symbols in this file SHOULD
     be listed WITHOUT one leading underscore. __TBB_SYMBOL macro should add underscore when
     necessary, depending on the indended usage.
@@ -60,6 +60,7 @@ __TBB_SYMBOL( _ZN3tbb19task_scheduler_init19default_num_threadsEv )
 __TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEim )
 __TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEi )
 __TBB_SYMBOL( _ZN3tbb19task_scheduler_init9terminateEv )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init27internal_blocking_terminateEb )
 #if __TBB_SCHEDULER_OBSERVER
 __TBB_SYMBOL( _ZN3tbb8internal26task_scheduler_observer_v37observeEb )
 #endif /* __TBB_SCHEDULER_OBSERVER */
@@ -70,15 +71,18 @@ __TBB_SYMBOL( _ZTIN3tbb10empty_taskE )
 __TBB_SYMBOL( _ZTSN3tbb10empty_taskE )
 __TBB_SYMBOL( _ZTVN3tbb10empty_taskE )
 
-#if __TBB_TASK_ARENA
 /* arena.cpp */
 __TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base19internal_initializeEv )
 __TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base18internal_terminateEv )
+__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base15internal_attachEv )
 __TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base16internal_enqueueERNS_4taskEl )
 __TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base16internal_executeERNS1_13delegate_baseE )
 __TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base13internal_waitEv )
 __TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base21internal_current_slotEv )
-#endif /* __TBB_TASK_ARENA */
+__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base24internal_max_concurrencyEPKNS0_10task_arenaE )
+#if __TBB_TASK_ISOLATION
+__TBB_SYMBOL( _ZN3tbb10interface78internal20isolate_within_arenaERNS1_13delegate_baseEl )
+#endif /* __TBB_TASK_ISOLATION */
 
 #if !TBB_NO_LEGACY
 // task_v2.cpp
diff --git a/src/tbb/mailbox.h b/src/tbb/mailbox.h
index c1d13c3..f651589 100644
--- a/src/tbb/mailbox.h
+++ b/src/tbb/mailbox.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef _TBB_mailbox_H
@@ -76,9 +76,6 @@ struct task_proxy : public task {
         }
         // Proxied task has already been claimed from another proxy location.
         __TBB_ASSERT( task_and_tag == from_bit, "Empty proxy cannot contain non-zero task pointer" );
-        poison_pointer(outbox);
-        poison_pointer(next_in_mailbox);
-        poison_value(task_and_tag);
         return NULL;
     }
 }; // struct task_proxy
@@ -88,7 +85,7 @@ class unpadded_mail_outbox {
 protected:
     typedef task_proxy*__TBB_atomic proxy_ptr;
 
-    //! Pointer to first task_proxy in mailbox, or NULL if box is empty. 
+    //! Pointer to first task_proxy in mailbox, or NULL if box is empty.
     proxy_ptr my_first;
 
     //! Pointer to pointer that will point to next item in the queue.  Never NULL.
@@ -102,44 +99,55 @@ protected:
 /** Padded to occupy a cache line. */
 class mail_outbox : padded<unpadded_mail_outbox> {
 
-    task_proxy* internal_pop() {
-        task_proxy* const first = __TBB_load_relaxed(my_first);
-        if( !first )
+    task_proxy* internal_pop( __TBB_ISOLATION_EXPR(isolation_tag isolation) ) {
+        task_proxy* curr = __TBB_load_relaxed( my_first );
+        if ( !curr )
             return NULL;
+        task_proxy **prev_ptr = &my_first;
+#if __TBB_TASK_ISOLATION
+        if ( isolation != no_isolation ) {
+            while ( curr->prefix().isolation != isolation ) {
+                prev_ptr = &curr->next_in_mailbox;
+                curr = curr->next_in_mailbox;
+                if ( !curr )
+                    return NULL;
+            }
+        }
+#endif /* __TBB_TASK_ISOLATION */
         __TBB_control_consistency_helper(); // on my_first
         // There is a first item in the mailbox.  See if there is a second.
-        if( task_proxy* second = first->next_in_mailbox ) {
+        if ( task_proxy* second = curr->next_in_mailbox ) {
             // There are at least two items, so first item can be popped easily.
-            my_first = second;
+            *prev_ptr = second;
         } else {
             // There is only one item.  Some care is required to pop it.
-            my_first = NULL;
-            if( as_atomic(my_last).compare_and_swap(&my_first,&first->next_in_mailbox) == &first->next_in_mailbox )
-            {
+            *prev_ptr = NULL;
+            if ( as_atomic( my_last ).compare_and_swap( prev_ptr, &curr->next_in_mailbox ) == &curr->next_in_mailbox ) {
                 // Successfully transitioned mailbox from having one item to having none.
-                __TBB_ASSERT(!first->next_in_mailbox,NULL);
+                __TBB_ASSERT( !curr->next_in_mailbox, NULL );
             } else {
                 // Some other thread updated my_last but has not filled in first->next_in_mailbox
                 // Wait until first item points to second item.
                 atomic_backoff backoff;
-                while( !(second = first->next_in_mailbox) ) backoff.pause();
-                my_first = second;
+                while ( !(second = curr->next_in_mailbox) ) backoff.pause();
+                *prev_ptr = second;
             }
         }
-        return first;
+        __TBB_ASSERT( curr, NULL );
+        return curr;
     }
 public:
     friend class mail_inbox;
 
     //! Push task_proxy onto the mailbox queue of another thread.
     /** Implementation is wait-free. */
-    void push( task_proxy& t ) {
-        __TBB_ASSERT(&t, NULL);
-        t.next_in_mailbox = NULL; 
-        proxy_ptr * const link = (proxy_ptr *)__TBB_FetchAndStoreW(&my_last,(intptr_t)&t.next_in_mailbox);
-        // No release fence required for the next store, because there are no memory operations 
+    void push( task_proxy* t ) {
+        __TBB_ASSERT(t, NULL);
+        t->next_in_mailbox = NULL;
+        proxy_ptr * const link = (proxy_ptr *)__TBB_FetchAndStoreW(&my_last,(intptr_t)&t->next_in_mailbox);
+        // No release fence required for the next store, because there are no memory operations
         // between the previous fully fenced atomic operation and the store.
-        __TBB_store_relaxed(*link, &t);
+        __TBB_store_relaxed(*link, t);
     }
 
     //! Return true if mailbox is empty
@@ -160,7 +168,7 @@ public:
         suppress_unused_warning(pad);
     }
 
-    //! Drain the mailbox 
+    //! Drain the mailbox
     intptr_t drain() {
         intptr_t k = 0;
         // No fences here because other threads have already quit.
@@ -168,7 +176,7 @@ public:
             my_first = t->next_in_mailbox;
             NFS_Free((char*)t - task_prefix_reservation_size);
         }
-        return k;  
+        return k;
     }
 
     //! True if thread that owns this mailbox is looking for work.
@@ -185,9 +193,8 @@ public:
     //! Construct unattached inbox
     mail_inbox() : my_putter(NULL) {}
 
-    //! Attach inbox to a corresponding outbox. 
+    //! Attach inbox to a corresponding outbox.
     void attach( mail_outbox& putter ) {
-        __TBB_ASSERT(!my_putter,"already attached");
         my_putter = &putter;
     }
     //! Detach inbox from its outbox
@@ -196,8 +203,8 @@ public:
         my_putter = NULL;
     }
     //! Get next piece of mail, or NULL if mailbox is empty.
-    task_proxy* pop() {
-        return my_putter->internal_pop();
+    task_proxy* pop( __TBB_ISOLATION_EXPR( isolation_tag isolation ) ) {
+        return my_putter->internal_pop( __TBB_ISOLATION_EXPR( isolation ) );
     }
     //! Return true if mailbox is empty
     bool empty() {
@@ -219,7 +226,7 @@ public:
 #if DO_ITT_NOTIFY
     //! Get pointer to corresponding outbox used for ITT_NOTIFY calls.
     void* outbox() const {return my_putter;}
-#endif /* DO_ITT_NOTIFY */ 
+#endif /* DO_ITT_NOTIFY */
 }; // class mail_inbox
 
 } // namespace internal
diff --git a/src/tbb/market.cpp b/src/tbb/market.cpp
index fe20a55..58a34a3 100644
--- a/src/tbb/market.cpp
+++ b/src/tbb/market.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/tbb_stddef.h"
@@ -74,13 +74,14 @@ market::market ( unsigned workers_soft_limit, unsigned workers_hard_limit, size_
 #endif /* __TBB_TASK_PRIORITY */
     , my_ref_count(1)
     , my_stack_size(stack_size)
+    , my_workers_soft_limit_to_report(workers_soft_limit)
 {
 #if __TBB_TASK_PRIORITY
     __TBB_ASSERT( my_global_reload_epoch == 0, NULL );
     my_priority_levels[normalized_normal_priority].workers_available = my_num_workers_soft_limit;
 #endif /* __TBB_TASK_PRIORITY */
 
-    // Once created RML server will start initializing workers that will need 
+    // Once created RML server will start initializing workers that will need
     // global market instance to get worker stack size
     my_server = governor::create_rml_server( *this );
     __TBB_ASSERT( my_server, "Failed to create RML server" );
@@ -91,40 +92,56 @@ static unsigned calc_workers_soft_limit(unsigned workers_soft_limit, unsigned wo
         workers_soft_limit = soft_limit-1;
     else // if user set no limits (yet), use market's parameter
         workers_soft_limit = max( governor::default_num_threads() - 1, workers_soft_limit );
-    // at least 1 worker is required to support starvation resistant tasks
-    if( workers_soft_limit == 0 )
-        workers_soft_limit = 1;
-    else if( workers_soft_limit >= workers_hard_limit )
+    if( workers_soft_limit >= workers_hard_limit )
         workers_soft_limit = workers_hard_limit-1;
     return workers_soft_limit;
 }
 
-market& market::global_market ( unsigned workers_soft_limit, size_t stack_size,
-                                bool default_concurrency_requested, bool is_public ) {
+market& market::global_market ( bool is_public, unsigned workers_requested, size_t stack_size ) {
     global_market_mutex_type::scoped_lock lock( theMarketMutex );
     market *m = theMarket;
     if( m ) {
         ++m->my_ref_count;
-        if( is_public && 0==m->my_public_ref_count++ ) {
-            lock.release();
-            workers_soft_limit = calc_workers_soft_limit(workers_soft_limit, m->my_num_workers_hard_limit);
-            set_active_num_workers( workers_soft_limit );
+        const unsigned old_public_count = is_public? m->my_public_ref_count++ : /*any non-zero value*/1;
+        lock.release();
+        if( old_public_count==0 )
+            set_active_num_workers( calc_workers_soft_limit(workers_requested, m->my_num_workers_hard_limit) );
+
+        // do not warn if default number of workers is requested
+        if( workers_requested != governor::default_num_threads()-1 ) {
+            __TBB_ASSERT( skip_soft_limit_warning > workers_requested,
+                          "skip_soft_limit_warning must be larger than any valid workers_requested" );
+            unsigned soft_limit_to_report = m->my_workers_soft_limit_to_report;
+            if( soft_limit_to_report < workers_requested ) {
+                runtime_warning( "The number of workers is currently limited to %u. "
+                                 "The request for %u workers is ignored. Further requests for more workers "
+                                 "will be silently ignored until the limit changes.\n",
+                                 soft_limit_to_report, workers_requested );
+                // The race is possible when multiple threads report warnings.
+                // We are OK with that, as there are just multiple warnings.
+                internal::as_atomic(m->my_workers_soft_limit_to_report).
+                    compare_and_swap(skip_soft_limit_warning, soft_limit_to_report);
+            }
+
         }
-        if( m->my_num_workers_soft_limit < workers_soft_limit && !default_concurrency_requested )
-            runtime_warning( "Max number of workers has been already set to %u. Newer request is for %u workers, public:%u.\n"
-                    , m->my_num_workers_soft_limit, workers_soft_limit, m->my_public_ref_count );
         if( m->my_stack_size < stack_size )
-            runtime_warning( "Newer master request for larger stack cannot be satisfied\n" );
+            runtime_warning( "Thread stack size has been already set to %u. "
+                             "The request for larger stack (%u) cannot be satisfied.\n",
+                              m->my_stack_size, stack_size );
     }
     else {
+        // TODO: A lot is done under theMarketMutex locked. Can anything be moved out?
         if( stack_size == 0 )
             stack_size = global_control::active_value(global_control::thread_stack_size);
         // Expecting that 4P is suitable for most applications.
         // Limit to 2P for large thread number.
         // TODO: ask RML for max concurrency and possibly correct hard_limit
         const unsigned factor = governor::default_num_threads()<=128? 4 : 2;
-        unsigned workers_hard_limit = max(factor*governor::default_num_threads(), app_parallelism_limit());
-        workers_soft_limit = calc_workers_soft_limit(workers_soft_limit, workers_hard_limit);
+        // The requested number of threads is intentionally not considered in
+        // computation of the hard limit, in order to separate responsibilities
+        // and avoid complicated interactions between global_control and task_scheduler_init.
+        const unsigned workers_hard_limit = max(factor*governor::default_num_threads(), app_parallelism_limit());
+        const unsigned workers_soft_limit = calc_workers_soft_limit(workers_requested, workers_hard_limit);
         // Create the global market instance
         size_t size = sizeof(market);
 #if __TBB_TASK_GROUP_CONTEXT
@@ -153,45 +170,57 @@ void market::destroy () {
     if ( my_task_node_count )
         runtime_warning( "Leaked %ld task objects\n", (long)my_task_node_count );
 #endif /* __TBB_COUNT_TASK_NODES */
-    this->~market();
+    this->market::~market(); // qualified to suppress warning
     NFS_Free( this );
     __TBB_InitOnce::remove_ref();
 }
 
-void market::release ( bool is_public ) {
+bool market::release ( bool is_public, bool blocking_terminate ) {
     __TBB_ASSERT( theMarket == this, "Global market instance was destroyed prematurely?" );
     bool do_release = false;
     {
-        global_market_mutex_type::scoped_lock lock(theMarketMutex);
+        global_market_mutex_type::scoped_lock lock( theMarketMutex );
+        if ( blocking_terminate ) {
+            __TBB_ASSERT( is_public, "Only an object with a public reference can request the blocking terminate" );
+            while ( my_public_ref_count == 1 && my_ref_count > 1 ) {
+                lock.release();
+                // To guarantee that request_close_connection() is called by the last master, we need to wait till all
+                // references are released. Re-read my_public_ref_count to limit waiting if new masters are created.
+                // Theoretically, new private references to the market can be added during waiting making it potentially
+                // endless.
+                // TODO: revise why the weak scheduler needs market's pointer and try to remove this wait.
+                // Note that the market should know about its schedulers for cancelation/exception/priority propagation,
+                // see e.g. task_group_context::cancel_group_execution()
+                while ( __TBB_load_with_acquire( my_public_ref_count ) == 1 && __TBB_load_with_acquire( my_ref_count ) > 1 )
+                    __TBB_Yield();
+                lock.acquire( theMarketMutex );
+            }
+        }
         if ( is_public ) {
+            __TBB_ASSERT( theMarket == this, "Global market instance was destroyed prematurely?" );
             __TBB_ASSERT( my_public_ref_count, NULL );
             --my_public_ref_count;
         }
         if ( --my_ref_count == 0 ) {
+            __TBB_ASSERT( !my_public_ref_count, NULL );
             do_release = true;
             theMarket = NULL;
         }
     }
-    if( do_release )
+    if( do_release ) {
+        __TBB_ASSERT( !__TBB_load_with_acquire(my_public_ref_count), "No public references remain if we remove the market." );
+        // inform RML that blocking termination is required
+        my_join_workers = blocking_terminate;
         my_server->request_close_connection();
-}
-
-void market::wait_workers () {
-    // usable for this kind of scheduler only
-    __TBB_ASSERT(join_workers, NULL);
-    // to guarantee that request_close_connection() is called by master,
-    // wait till terminating last worker decresed my_ref_count
-    while (__TBB_load_with_acquire(my_ref_count) > 1)
-        __TBB_Yield();
-    __TBB_ASSERT(1 == my_ref_count, NULL);
+        return blocking_terminate;
+    }
+    return false;
 }
 
 void market::set_active_num_workers ( unsigned soft_limit ) {
-    int old_requested, requested;
+    int old_requested=0, requested=0;
+    bool need_mandatory = false;
     market *m;
-    // at least 1 worker is required to support starvation resistant tasks
-    if( soft_limit == 0 )
-        soft_limit = 1;
 
     {
         global_market_mutex_type::scoped_lock lock( theMarketMutex );
@@ -202,40 +231,82 @@ void market::set_active_num_workers ( unsigned soft_limit ) {
     }
     // have my_ref_count for market, use it safely
     {
-        arenas_list_mutex_type::scoped_lock lock(m->my_arenas_list_mutex);
+        arenas_list_mutex_type::scoped_lock lock( m->my_arenas_list_mutex );
         __TBB_ASSERT(soft_limit <= m->my_num_workers_hard_limit, NULL);
         m->my_num_workers_soft_limit = soft_limit;
-        requested = min(m->my_total_demand, (int)soft_limit);
-        old_requested = m->my_num_workers_requested;
-        m->my_num_workers_requested = requested;
-        m->my_priority_levels[m->my_global_top_priority].workers_available = soft_limit;
-        m->update_allotment(
+        // report only once after new soft limit value is set
+        m->my_workers_soft_limit_to_report = soft_limit;
+
+#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+        // updates soft_limit to zero must be postponed
+        // while mandatory parallelism is enabled
+        if( !(m->my_mandatory_num_requested && !soft_limit) )
+#endif
+        {
+            const int demand =
+#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+                m->my_mandatory_num_requested? 0 :
+#endif
+                m->my_total_demand;
+            requested = min(demand, (int)soft_limit);
+            old_requested = m->my_num_workers_requested;
+            m->my_num_workers_requested = requested;
 #if __TBB_TASK_PRIORITY
-            m->my_global_top_priority
+            m->my_priority_levels[m->my_global_top_priority].workers_available = soft_limit;
+            m->update_allotment( m->my_global_top_priority );
+#else
+            m->update_allotment();
 #endif
-            );
+        }
+#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+        if( !m->my_mandatory_num_requested && !soft_limit ) {
+            // enable mandatory concurrency, if enqueued tasks are found
+            // and zero soft_limit requested
+#if __TBB_TASK_PRIORITY
+            for( int p = m->my_global_top_priority; p >= m->my_global_bottom_priority; --p ) {
+                priority_level_info &pl = m->my_priority_levels[p];
+                arena_list_type &arenas = pl.arenas;
+#else
+                const int p = 0;
+                arena_list_type &arenas = m->my_arenas;
+#endif /* __TBB_TASK_PRIORITY */
+                for( arena_list_type::iterator it = arenas.begin(); it != arenas.end(); ++it ) {
+                    if( !it->my_task_stream.empty(p) ) {
+                        // switch local_mandatory to global_mandatory unconditionally
+                        if( m->mandatory_concurrency_enable_impl( &*it ) )
+                            need_mandatory = true;
+                    }
+                }
+#if __TBB_TASK_PRIORITY
+            }
+#endif /* __TBB_TASK_PRIORITY */
+        }
+#endif /* __TBB_ENQUEUE_ENFORCED_CONCURRENCY */
     }
-    // Must be called outside of any locks
-    if ( requested != old_requested )
-        m->my_server->adjust_job_count_estimate( requested - old_requested );
-    // release my_ref_count for market, match ++m->my_ref_count above
-    m->release();
+    // adjust_job_count_estimate must be called outside of any locks
+    int delta = requested - old_requested;
+    if( need_mandatory ) ++delta;
+    if( delta!=0 )
+        m->my_server->adjust_job_count_estimate( delta );
+    // release internal market reference to match ++m->my_ref_count above
+    m->release( /*is_public=*/false, /*blocking_terminate=*/false );
 }
 
 bool governor::does_client_join_workers (const tbb::internal::rml::tbb_client &client) {
     return ((const market&)client).must_join_workers();
 }
 
-arena& market::create_arena ( int num_slots, size_t stack_size, bool default_concurrency_requested ) {
+arena* market::create_arena ( int num_slots, int num_reserved_slots, size_t stack_size ) {
     __TBB_ASSERT( num_slots > 0, NULL );
-    market &m = global_market( num_slots-1, stack_size, default_concurrency_requested,
-                               /*is_public*/ true ); // increases market's public ref count
+    __TBB_ASSERT( num_reserved_slots <= num_slots, NULL );
+    // Add public market reference for master thread/task_arena (that adds an internal reference in exchange).
+    market &m = global_market( /*is_public=*/true, num_slots-num_reserved_slots, stack_size );
 
-    arena& a = arena::allocate_arena( m, min(num_slots, (int)m.my_num_workers_hard_limit) );
+    arena& a = arena::allocate_arena( m, num_slots, num_reserved_slots );
     // Add newly created arena into the existing market's list.
     arenas_list_mutex_type::scoped_lock lock(m.my_arenas_list_mutex);
     m.insert_arena_into_list(a);
-    return a;
+    return &a;
 }
 
 /** This method must be invoked under my_arenas_list_mutex. **/
@@ -248,13 +319,17 @@ void market::detach_arena ( arena& a ) {
 }
 
 void market::try_destroy_arena ( arena* a, uintptr_t aba_epoch ) {
-    // master thread holds reference to the market, so it cannot be destroyed at any moment here
-    __TBB_ASSERT( this == theMarket, NULL );
+    bool locked = true;
     __TBB_ASSERT( a, NULL );
-    arenas_list_mutex_type::scoped_lock lock(my_arenas_list_mutex);
+    // we hold reference to the market, so it cannot be destroyed at any moment here
+    __TBB_ASSERT( this == theMarket, NULL );
+    __TBB_ASSERT( my_ref_count!=0, NULL );
+    my_arenas_list_mutex.lock();
     assert_market_valid();
 #if __TBB_TASK_PRIORITY
-    for ( int p = my_global_top_priority; p >= my_global_bottom_priority; --p ) {
+    // scan all priority levels, not only in [my_global_bottom_priority;my_global_top_priority]
+    // range, because arena to be destoyed can have no outstanding request for workers
+    for ( int p = num_priority_levels-1; p >= 0; --p ) {
         priority_level_info &pl = my_priority_levels[p];
         arena_list_type &my_arenas = pl.arenas;
 #endif /* __TBB_TASK_PRIORITY */
@@ -267,16 +342,20 @@ void market::try_destroy_arena ( arena* a, uintptr_t aba_epoch ) {
                         __TBB_ASSERT( !a->my_num_workers_allotted && (a->my_pool_state == arena::SNAPSHOT_EMPTY || !a->my_max_num_workers), "Inconsistent arena state" );
                         // Arena is abandoned. Destroy it.
                         detach_arena( *a );
-                        lock.release();
+                        my_arenas_list_mutex.unlock();
+                        locked = false;
                         a->free_arena();
                     }
                 }
+                if (locked)
+                    my_arenas_list_mutex.unlock();
                 return;
             }
         }
 #if __TBB_TASK_PRIORITY
     }
 #endif /* __TBB_TASK_PRIORITY */
+    my_arenas_list_mutex.unlock();
 }
 
 /** This method must be invoked under my_arenas_list_mutex. **/
@@ -289,8 +368,12 @@ arena* market::arena_in_need ( arena_list_type &arenas, arena *&next ) {
         arena& a = *it;
         if ( ++it == arenas.end() )
             it = arenas.begin();
-        if ( a.num_workers_active() < a.my_num_workers_allotted ) {
-            a.my_references += 2; // add a worker
+        if( a.num_workers_active() < a.my_num_workers_allotted
+#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+            && !a.recall_by_mandatory_request()
+#endif
+            ) {
+            a.my_references += arena::ref_worker;
             as_atomic(next) = &*it; // a subject for innocent data race under the reader lock
             // TODO: rework global round robin policy to local or random to avoid this write
             return &a;
@@ -299,13 +382,11 @@ arena* market::arena_in_need ( arena_list_type &arenas, arena *&next ) {
     return NULL;
 }
 
-void market::update_allotment ( arena_list_type& arenas, int workers_demand, int max_workers ) {
+int market::update_allotment ( arena_list_type& arenas, int workers_demand, int max_workers ) {
     __TBB_ASSERT( workers_demand, NULL );
     max_workers = min(workers_demand, max_workers);
     int carry = 0;
-#if TBB_USE_ASSERT
     int assigned = 0;
-#endif /* TBB_USE_ASSERT */
     arena_list_type::iterator it = arenas.begin();
     for ( ; it != arenas.end(); ++it ) {
         arena& a = *it;
@@ -317,19 +398,31 @@ void market::update_allotment ( arena_list_type& arenas, int workers_demand, int
         int allotted = tmp / workers_demand;
         carry = tmp % workers_demand;
         // a.my_num_workers_requested may temporarily exceed a.my_max_num_workers
-        a.my_num_workers_allotted = min( allotted, (int)a.my_max_num_workers );
-#if TBB_USE_ASSERT
-        assigned += a.my_num_workers_allotted;
-#endif /* TBB_USE_ASSERT */
+        allotted = min( allotted, (int)a.my_max_num_workers );
+#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+        if ( !allotted && a.must_have_concurrency() )
+            allotted = 1;
+#endif
+        a.my_num_workers_allotted = allotted;
+        assigned += allotted;
     }
-    __TBB_ASSERT( assigned <= workers_demand, NULL );
+#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+    __TBB_ASSERT( assigned <= workers_demand, NULL ); // weaker assertion due to enforced allotment
+#else
+    __TBB_ASSERT( assigned <= max_workers, NULL );
+#endif
+    return assigned;
 }
 
 #if __TBB_TASK_PRIORITY
 inline void market::update_global_top_priority ( intptr_t newPriority ) {
     GATHER_STATISTIC( ++governor::local_scheduler_if_initialized()->my_counters.market_prio_switches );
     my_global_top_priority = newPriority;
-    my_priority_levels[newPriority].workers_available = my_num_workers_soft_limit;
+    my_priority_levels[newPriority].workers_available =
+#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+        my_mandatory_num_requested && !my_num_workers_soft_limit ? 1 :
+#endif
+        my_num_workers_soft_limit;
     advance_global_reload_epoch();
 }
 
@@ -363,9 +456,8 @@ void market::update_allotment ( intptr_t highest_affected_priority ) {
         priority_level_info &pl = my_priority_levels[i];
         pl.workers_available = available;
         if ( pl.workers_requested ) {
-            update_allotment( pl.arenas, pl.workers_requested, available );
-            available -= pl.workers_requested;
-            if ( available < 0 ) {
+            available -= update_allotment( pl.arenas, pl.workers_requested, available );
+            if ( available < 0 ) { // TODO: assertion?
                 available = 0;
                 break;
             }
@@ -377,13 +469,107 @@ void market::update_allotment ( intptr_t highest_affected_priority ) {
         pl.workers_available = 0;
         arena_list_type::iterator it = pl.arenas.begin();
         for ( ; it != pl.arenas.end(); ++it ) {
-            __TBB_ASSERT( it->my_num_workers_requested || !it->my_num_workers_allotted, NULL );
+            __TBB_ASSERT( it->my_num_workers_requested >= 0 || !it->my_num_workers_allotted, NULL );
+#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+            it->my_num_workers_allotted = it->must_have_concurrency() ? 1 : 0;
+#else
             it->my_num_workers_allotted = 0;
+#endif
         }
     }
 }
 #endif /* __TBB_TASK_PRIORITY */
 
+#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+bool market::mandatory_concurrency_enable_impl ( arena *a, bool *enabled ) {
+    if( a->my_concurrency_mode==arena_base::cm_enforced_global ) {
+        if( enabled )
+            *enabled = false;
+        return false;
+    }
+    if( enabled )
+        *enabled = true;
+    a->my_max_num_workers = 1;
+    a->my_concurrency_mode = arena_base::cm_enforced_global;
+#if __TBB_TASK_PRIORITY
+    priority_level_info &pl = my_priority_levels[a->my_top_priority];
+    pl.workers_requested++;
+    if( my_global_top_priority < a->my_top_priority ) {
+        my_global_top_priority = a->my_top_priority;
+        advance_global_reload_epoch();
+    }
+#endif
+    a->my_num_workers_requested++;
+    a->my_num_workers_allotted++;
+    if( 1 == ++my_mandatory_num_requested ) {
+        my_total_demand++;
+        return true;
+    }
+    return false;
+}
+
+bool market::mandatory_concurrency_enable ( arena *a ) {
+    bool add_thread;
+    bool enabled;
+    {
+        arenas_list_mutex_type::scoped_lock lock(my_arenas_list_mutex);
+        add_thread = mandatory_concurrency_enable_impl(a, &enabled);
+    }
+    if( add_thread )
+        my_server->adjust_job_count_estimate( 1 );
+    return enabled;
+}
+
+void market::mandatory_concurrency_disable ( arena *a ) {
+    bool remove_thread = false;
+    int delta_adjust_demand = 0;
+
+    {
+        arenas_list_mutex_type::scoped_lock lock(my_arenas_list_mutex);
+
+        if( a->my_concurrency_mode!=arena_base::cm_enforced_global  )
+            return;
+        __TBB_ASSERT( a->my_max_num_workers==1, NULL );
+        a->my_max_num_workers = 0;
+#if __TBB_TASK_PRIORITY
+        if ( a->my_top_priority != normalized_normal_priority ) {
+            update_arena_top_priority( *a, normalized_normal_priority );
+        }
+        a->my_bottom_priority = normalized_normal_priority;
+#endif
+
+        int val = --my_mandatory_num_requested;
+        __TBB_ASSERT_EX( val >= 0, NULL );
+        if( val == 0 ) {
+            my_total_demand--;
+            remove_thread = true;
+        }
+        a->my_num_workers_requested--;
+        if (a->my_num_workers_requested > 0)
+            delta_adjust_demand = a->my_num_workers_requested;
+        else
+            a->my_num_workers_allotted = 0;
+
+#if __TBB_TASK_PRIORITY
+        priority_level_info &pl = my_priority_levels[a->my_top_priority];
+        pl.workers_requested--;
+        intptr_t p = my_global_top_priority;
+        for (; !my_priority_levels[p].workers_requested && p>0; p--)
+            ;
+        if( !p )
+            reset_global_priority();
+        else if( p!= my_global_top_priority )
+            update_global_top_priority(p);
+#endif
+        a->my_concurrency_mode = arena::cm_normal;
+    }
+    if( delta_adjust_demand )
+        adjust_demand( *a, -delta_adjust_demand );
+    if( remove_thread )
+        my_server->adjust_job_count_estimate( -1 );
+}
+#endif /* __TBB_ENQUEUE_ENFORCED_CONCURRENCY */
+
 void market::adjust_demand ( arena& a, int delta ) {
     __TBB_ASSERT( theMarket, "market instance was destroyed prematurely?" );
     if ( !delta )
@@ -392,7 +578,13 @@ void market::adjust_demand ( arena& a, int delta ) {
     int prev_req = a.my_num_workers_requested;
     a.my_num_workers_requested += delta;
     if ( a.my_num_workers_requested <= 0 ) {
-        a.my_num_workers_allotted = 0;
+#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+        // must not recall worker from arena with mandatory parallelism
+        if ( a.my_market->my_mandatory_num_requested && a.my_concurrency_mode!=arena_base::cm_normal )
+            a.my_num_workers_allotted = 1;
+        else
+#endif
+            a.my_num_workers_allotted = 0;
         if ( prev_req <= 0 ) {
             my_arenas_list_mutex.unlock();
             return;
@@ -410,7 +602,6 @@ void market::adjust_demand ( arena& a, int delta ) {
     priority_level_info &pl = my_priority_levels[p];
     pl.workers_requested += delta;
     __TBB_ASSERT( pl.workers_requested >= 0, NULL );
-    __TBB_ASSERT( a.my_num_workers_requested >= 0, NULL );
     if ( a.my_num_workers_requested <= 0 ) {
         if ( a.my_top_priority != normalized_normal_priority ) {
             GATHER_STATISTIC( ++governor::local_scheduler_if_initialized()->my_counters.arena_prio_resets );
@@ -431,8 +622,16 @@ void market::adjust_demand ( arena& a, int delta ) {
     }
     else if ( p > my_global_top_priority ) {
         __TBB_ASSERT( pl.workers_requested > 0, NULL );
+        // TODO: investigate if the following invariant is always valid
+        __TBB_ASSERT( a.my_num_workers_requested >= 0, NULL );
         update_global_top_priority(p);
         a.my_num_workers_allotted = min( (int)my_num_workers_soft_limit, a.my_num_workers_requested );
+#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+        // must not recall worker from arena with mandatory parallelism
+        if ( !a.my_num_workers_allotted && a.my_num_workers_requested
+             && a.my_market->my_mandatory_num_requested && a.my_concurrency_mode!=arena_base::cm_normal )
+            a.my_num_workers_allotted = 1;
+#endif
         my_priority_levels[p - 1].workers_available = my_num_workers_soft_limit - a.my_num_workers_allotted;
         update_allotment( p - 1 );
     }
@@ -449,7 +648,6 @@ void market::adjust_demand ( arena& a, int delta ) {
             update_allotment( p );
     }
     else if ( p < my_global_bottom_priority ) {
-        __TBB_ASSERT( a.my_num_workers_requested > 0, NULL );
         int prev_bottom = my_global_bottom_priority;
         my_global_bottom_priority = p;
         update_allotment( prev_bottom );
@@ -464,13 +662,13 @@ void market::adjust_demand ( arena& a, int delta ) {
     if ( delta > 0 ) {
         // can't overflow soft_limit, but remember values request by arenas in
         // my_total_demand to not prematurely release workers to RML
-        if ( my_num_workers_requested+delta > (int)my_num_workers_soft_limit ) {
+        if ( my_num_workers_requested+delta > (int)my_num_workers_soft_limit )
             delta = my_num_workers_soft_limit - my_num_workers_requested;
-        }
-    } else
+    } else {
         // the number of workers should not be decreased below my_total_demand
         if ( my_num_workers_requested+delta < my_total_demand )
             delta = min(my_total_demand, (int)my_num_workers_soft_limit) - my_num_workers_requested;
+    }
     my_num_workers_requested += delta;
     __TBB_ASSERT( my_num_workers_requested <= (int)my_num_workers_soft_limit, NULL );
 
@@ -486,8 +684,7 @@ void market::process( job& j ) {
     __TBB_ASSERT( governor::is_set(&s), NULL );
     enum {
         query_interval = 1000,
-        first_interval = 1,
-        pause_time = 100 // similar to PauseTime used for the stealing loop
+        first_interval = 1
     };
     for(int i = first_interval; ; i--) {
         while ( (a = arena_in_need(a)) )
@@ -500,7 +697,7 @@ void market::process( job& j ) {
         // It might result in a busy-loop checking for my_slack<0 and calling this method instantly.
         // first_interval>0 and the pause refines this spinning.
         if( i > 0 )
-            __TBB_Pause(pause_time);
+            prolonged_pause();
         else
 #if !__TBB_SLEEP_PERMISSION
             break;
@@ -527,7 +724,7 @@ void market::cleanup( job& j ) {
     __TBB_ASSERT( theMarket != this, NULL );
     generic_scheduler& s = static_cast<generic_scheduler&>(j);
     generic_scheduler* mine = governor::local_scheduler_if_initialized();
-    __TBB_ASSERT( !mine || mine->my_arena_index!=0, NULL );
+    __TBB_ASSERT( !mine || mine->is_worker(), NULL );
     if( mine!=&s ) {
         governor::assume_scheduler( &s );
         generic_scheduler::cleanup_worker( &s, mine!=NULL );
@@ -552,7 +749,6 @@ void market::acknowledge_close_connection() {
     __TBB_ASSERT( !my_workers[index - 1], NULL );
     my_workers[index - 1] = s;
 #endif /* __TBB_TASK_GROUP_CONTEXT */
-    governor::sign_on(s);
     return s;
 }
 
@@ -565,7 +761,7 @@ void market::update_arena_top_priority ( arena& a, intptr_t new_priority ) {
     remove_arena_from_list(a);
     a.my_top_priority = new_priority;
     insert_arena_into_list(a);
-    ++a.my_reload_epoch; // TODO: synch with global reload epoch in order to optimize usage of local reload epoch
+    as_atomic( a.my_reload_epoch ).fetch_and_increment<tbb::release>(); // TODO: synch with global reload epoch in order to optimize usage of local reload epoch
     prev_level.workers_requested -= a.my_num_workers_requested;
     new_level.workers_requested += a.my_num_workers_requested;
     __TBB_ASSERT( prev_level.workers_requested >= 0 && new_level.workers_requested >= 0, NULL );
@@ -589,8 +785,7 @@ bool market::lower_arena_priority ( arena& a, intptr_t new_priority, uintptr_t o
         }
         if ( p == my_global_top_priority && !my_priority_levels[p].workers_requested ) {
             // Global top level became empty
-            for ( --p; !my_priority_levels[p].workers_requested; --p ) continue;
-            __TBB_ASSERT( p >= my_global_bottom_priority, NULL );
+            for ( --p; p>my_global_bottom_priority && !my_priority_levels[p].workers_requested; --p ) continue;
             update_global_top_priority(p);
         }
         update_allotment( p );
@@ -602,8 +797,10 @@ bool market::lower_arena_priority ( arena& a, intptr_t new_priority, uintptr_t o
 }
 
 bool market::update_arena_priority ( arena& a, intptr_t new_priority ) {
+    // TODO: do not acquire this global lock while checking arena's state.
     arenas_list_mutex_type::scoped_lock lock(my_arenas_list_mutex);
 
+    tbb::internal::assert_priority_valid(new_priority);
     __TBB_ASSERT( my_global_top_priority >= a.my_top_priority || a.my_num_workers_requested <= 0, NULL );
     assert_market_valid();
     if ( a.my_top_priority == new_priority ) {
@@ -644,12 +841,18 @@ bool market::update_arena_priority ( arena& a, intptr_t new_priority ) {
     }
     if ( p == my_global_bottom_priority ) {
         // Arena priority was increased from the global bottom level.
-        __TBB_ASSERT( p < new_priority, NULL );                     // n
+        __TBB_ASSERT( p < new_priority, NULL );
         __TBB_ASSERT( new_priority <= my_global_top_priority, NULL );
-        while ( !my_priority_levels[my_global_bottom_priority].workers_requested )
+        while ( my_global_bottom_priority < my_global_top_priority
+                && !my_priority_levels[my_global_bottom_priority].workers_requested )
             ++my_global_bottom_priority;
         __TBB_ASSERT( my_global_bottom_priority <= new_priority, NULL );
-        __TBB_ASSERT( my_priority_levels[my_global_bottom_priority].workers_requested > 0, NULL );
+#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+        const bool enforced_concurrency = my_mandatory_num_requested && a.must_have_concurrency();
+#else
+        const bool enforced_concurrency = false;
+#endif
+        __TBB_ASSERT_EX( enforced_concurrency || my_priority_levels[my_global_bottom_priority].workers_requested > 0, NULL );
     }
     update_allotment( highest_affected_level );
 
@@ -659,15 +862,5 @@ bool market::update_arena_priority ( arena& a, intptr_t new_priority ) {
 }
 #endif /* __TBB_TASK_PRIORITY */
 
-#if __TBB_COUNT_TASK_NODES 
-intptr_t market::workers_task_node_count() {
-    intptr_t result = 0;
-    ForEachArena(a) {
-        result += a.workers_task_node_count();
-    } EndForEach();
-    return result;
-}
-#endif /* __TBB_COUNT_TASK_NODES */
-
 } // namespace internal
 } // namespace tbb
diff --git a/src/tbb/market.h b/src/tbb/market.h
index 986c565..39d12d5 100644
--- a/src/tbb/market.h
+++ b/src/tbb/market.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef _TBB_market_H
@@ -56,6 +56,7 @@ private:
     friend void ITT_DoUnsafeOneTimeInitialization ();
 
     typedef intrusive_list<arena> arena_list_type;
+    typedef intrusive_list<generic_scheduler> scheduler_list_type;
 
     //! Currently active global market
     static market* theMarket;
@@ -91,11 +92,16 @@ private:
     //! Number of workers that were requested by all arenas
     int my_total_demand;
 
+#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+    //! How many times mandatory concurrency was requested from the market
+    int my_mandatory_num_requested;
+#endif
+
 #if __TBB_TASK_PRIORITY
     //! Highest priority among active arenas in the market.
     /** Arena priority level is its tasks highest priority (specified by arena's
         my_top_priority member).
-        Arena is active when it has outstanding request for workers. Note that 
+        Arena is active when it has outstanding request for workers. Note that
         inactive arena may have workers lingering there for some time. **/
     intptr_t my_global_top_priority;
 
@@ -150,8 +156,13 @@ private:
     size_t my_stack_size;
 
     //! Shutdown mode
-    bool join_workers;
+    bool my_join_workers;
 
+    //! The value indicating that the soft limit warning is unnecessary
+    static const unsigned skip_soft_limit_warning = ~0U;
+
+    //! Either workers soft limit to be reported via runtime_warning() or skip_soft_limit_warning
+    unsigned my_workers_soft_limit_to_report;
 #if __TBB_COUNT_TASK_NODES
     //! Net number of nodes that have been allocated from heap.
     /** Updated each time a scheduler or arena is destroyed. */
@@ -162,8 +173,7 @@ private:
     market ( unsigned workers_soft_limit, unsigned workers_hard_limit, size_t stack_size );
 
     //! Factory method creating new market object
-    static market& global_market ( unsigned max_num_workers = 0, size_t stack_size = 0,
-                                   bool default_concurrency_requested = false, bool is_public = false );
+    static market& global_market ( bool is_public, unsigned max_num_workers = 0, size_t stack_size = 0 );
 
     //! Destroys and deallocates market object created by market::create()
     void destroy ();
@@ -173,7 +183,7 @@ private:
     arena* arena_in_need ( arena* prev_arena );
 
     //! Recalculates the number of workers assigned to each arena at and below the specified priority.
-    /** The actual number of workers servicing a particular arena may temporarily 
+    /** The actual number of workers servicing a particular arena may temporarily
         deviate from the calculated value. **/
     void update_allotment ( intptr_t highest_affected_priority );
 
@@ -200,11 +210,11 @@ private:
 #else /* !__TBB_TASK_PRIORITY */
 
     //! Recalculates the number of workers assigned to each arena in the list.
-    /** The actual number of workers servicing a particular arena may temporarily 
+    /** The actual number of workers servicing a particular arena may temporarily
         deviate from the calculated value. **/
     void update_allotment () {
         if ( my_total_demand )
-            update_allotment( my_arenas, my_total_demand, (int)my_max_num_workers );
+            update_allotment( my_arenas, my_total_demand, (int)my_num_workers_soft_limit );
     }
 
     //! Returns next arena that needs more workers, or NULL.
@@ -217,9 +227,6 @@ private:
     void assert_market_valid () const {}
 #endif /* !__TBB_TASK_PRIORITY */
 
-    //! Returns number of masters doing computational (CPU-intensive) work
-    int num_active_masters () { return 1; }  // APM TODO: replace with a real mechanism
-
     ////////////////////////////////////////////////////////////////////////////////
     // Helpers to unify code branches dependent on priority feature presence
 
@@ -229,33 +236,33 @@ private:
 
     arena* arena_in_need ( arena_list_type &arenas, arena *&next );
 
-    static void update_allotment ( arena_list_type& arenas, int total_demand, int max_workers );
+    static int update_allotment ( arena_list_type& arenas, int total_demand, int max_workers );
 
 
     ////////////////////////////////////////////////////////////////////////////////
     // Implementation of rml::tbb_client interface methods
 
-    /*override*/ version_type version () const { return 0; }
+    version_type version () const __TBB_override { return 0; }
 
-    /*override*/ unsigned max_job_count () const { return my_num_workers_hard_limit; }
+    unsigned max_job_count () const __TBB_override { return my_num_workers_hard_limit; }
 
-    /*override*/ size_t min_stack_size () const { return worker_stack_size(); }
+    size_t min_stack_size () const __TBB_override { return worker_stack_size(); }
 
-    /*override*/ policy_type policy () const { return throughput; }
+    policy_type policy () const __TBB_override { return throughput; }
 
-    /*override*/ job* create_one_job ();
+    job* create_one_job () __TBB_override;
 
-    /*override*/ void cleanup( job& j );
+    void cleanup( job& j ) __TBB_override;
 
-    /*override*/ void acknowledge_close_connection ();
+    void acknowledge_close_connection () __TBB_override;
 
-    /*override*/ void process( job& j );
+    void process( job& j ) __TBB_override;
 
 public:
     //! Creates an arena object
     /** If necessary, also creates global market instance, and boosts its ref count.
         Each call to create_arena() must be matched by the call to arena::free_arena(). **/
-    static arena& create_arena ( int num_slots, size_t stack_size, bool default_concurrency_requested );
+    static arena* create_arena ( int num_slots, int num_reserved_slots, size_t stack_size );
 
     //! Removes the arena from the market's list
     void try_destroy_arena ( arena*, uintptr_t aba_epoch );
@@ -264,16 +271,25 @@ public:
     void detach_arena ( arena& );
 
     //! Decrements market's refcount and destroys it in the end
-    void release ( bool is_public = false );
+    bool release ( bool is_public, bool blocking_terminate );
+
+#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+    //! Imlpementation of mandatory concurrency enabling
+    bool mandatory_concurrency_enable_impl ( arena *a, bool *enabled = NULL );
+
+    //! Inform the master that there is an arena with mandatory concurrency
+    bool mandatory_concurrency_enable ( arena *a );
+
+    //! Inform the master that the arena is no more interested in mandatory concurrency
+    void mandatory_concurrency_disable ( arena *a );
+#endif /* __TBB_ENQUEUE_ENFORCED_CONCURRENCY */
 
     //! Request that arena's need in workers should be adjusted.
     /** Concurrent invocations are possible only on behalf of different arenas. **/
     void adjust_demand ( arena&, int delta );
 
-    //! Wait workers termination
-    void wait_workers ();
-
-    bool must_join_workers () const { return join_workers; }
+    //! Used when RML asks for join mode during workers termination.
+    bool must_join_workers () const { return my_join_workers; }
 
     //! Returns the requested stack size of worker threads.
     size_t worker_stack_size () const { return my_stack_size; }
@@ -300,16 +316,20 @@ public:
 
 #if __TBB_TASK_GROUP_CONTEXT
     //! Finds all contexts affected by the state change and propagates the new state to them.
+    /** The propagation is relayed to the market because tasks created by one
+        master thread can be passed to and executed by other masters. This means
+        that context trees can span several arenas at once and thus state change
+        propagation cannot be generally localized to one arena only. **/
     template <typename T>
     bool propagate_task_group_state ( T task_group_context::*mptr_state, task_group_context& src, T new_state );
 #endif /* __TBB_TASK_GROUP_CONTEXT */
 
 #if __TBB_TASK_PRIORITY
-    //! Lowers arena's priority is not higher than newPriority 
-    /** Returns true if arena priority was actually elevated. **/ 
+    //! Lowers arena's priority is not higher than newPriority
+    /** Returns true if arena priority was actually elevated. **/
     bool lower_arena_priority ( arena& a, intptr_t new_priority, uintptr_t old_reload_epoch );
 
-    //! Makes sure arena's priority is not lower than newPriority 
+    //! Makes sure arena's priority is not lower than newPriority
     /** Returns true if arena priority was elevated. Also updates arena's bottom
         priority boundary if necessary.
 
@@ -320,15 +340,15 @@ public:
 #endif /* __TBB_TASK_PRIORITY */
 
 #if __TBB_COUNT_TASK_NODES
-    //! Returns the number of task objects "living" in worker threads
-    intptr_t workers_task_node_count();
-
     //! Net number of nodes that have been allocated from heap.
     /** Updated each time a scheduler or arena is destroyed. */
     void update_task_node_count( intptr_t delta ) { my_task_node_count += delta; }
 #endif /* __TBB_COUNT_TASK_NODES */
 
 #if __TBB_TASK_GROUP_CONTEXT
+    //! List of registered master threads
+    scheduler_list_type my_masters;
+
     //! Array of pointers to the registered workers
     /** Used by cancellation propagation mechanism.
         Must be the last data member of the class market. **/
@@ -341,26 +361,6 @@ public:
     }
 }; // class market
 
-#if __TBB_TASK_PRIORITY
-    #define BeginForEachArena(a)    \
-        arenas_list_mutex_type::scoped_lock arena_list_lock(my_arenas_list_mutex);  \
-        for ( intptr_t i = my_global_top_priority; i >= my_global_bottom_priority; --i ) {  \
-            /*arenas_list_mutex_type::scoped_lock arena_list_lock(my_priority_levels[i].my_arenas_list_mutex);*/ \
-            arena_list_type &arenas = my_priority_levels[i].arenas;
-#else /* !__TBB_TASK_PRIORITY */
-    #define BeginForEachArena(a)    \
-        arena_list_type &arenas = my_arenas; {
-#endif /* !__TBB_TASK_PRIORITY */
-
-#define ForEachArena(a)     \
-    BeginForEachArena(a)    \
-        arena_list_type::iterator it = arenas.begin();  \
-        for ( ; it != arenas.end(); ++it ) {            \
-            arena &a = *it;
-
-#define EndForEach() }}
-
-
 } // namespace internal
 } // namespace tbb
 
diff --git a/src/tbb/mutex.cpp b/src/tbb/mutex.cpp
index 6b15072..fd02d26 100644
--- a/src/tbb/mutex.cpp
+++ b/src/tbb/mutex.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if _WIN32||_WIN64
@@ -23,19 +23,22 @@
 #endif
 #include "tbb/mutex.h"
 #include "itt_notify.h"
+#if __TBB_TSX_AVAILABLE
+#include "governor.h" // for speculation_enabled()
+#endif
 
 namespace tbb {
     void mutex::scoped_lock::internal_acquire( mutex& m ) {
 
 #if _WIN32||_WIN64
         switch( m.state ) {
-        case INITIALIZED: 
+        case INITIALIZED:
         case HELD:
             EnterCriticalSection( &m.impl );
             // If a thread comes here, and another thread holds the lock, it will block
             // in EnterCriticalSection.  When it returns from EnterCriticalSection,
             // m.state must be set to INITIALIZED.  If the same thread tries to acquire a lock it
-            // aleady holds, the lock is in HELD state, thus will cause throwing the exception.
+            // already holds, the lock is in HELD state, thus will cause throwing the exception.
             if (m.state==HELD)
                 tbb::internal::handle_perror(EDEADLK,"mutex::scoped_lock: deadlock caused by attempt to reacquire held mutex");
             m.state = HELD;
@@ -57,19 +60,19 @@ namespace tbb {
 
 void mutex::scoped_lock::internal_release() {
     __TBB_ASSERT( my_mutex, "mutex::scoped_lock: not holding a mutex" );
-#if _WIN32||_WIN64    
+#if _WIN32||_WIN64
      switch( my_mutex->state ) {
-        case INITIALIZED: 
+        case INITIALIZED:
             __TBB_ASSERT(false,"mutex::scoped_lock: try to release the lock without acquisition");
             break;
         case HELD:
             my_mutex->state = INITIALIZED;
             LeaveCriticalSection(&my_mutex->impl);
             break;
-        case DESTROYED: 
-            __TBB_ASSERT(false,"mutex::scoped_lock: mutex already destroyed"); 
+        case DESTROYED:
+            __TBB_ASSERT(false,"mutex::scoped_lock: mutex already destroyed");
             break;
-        default: 
+        default:
             __TBB_ASSERT(false,"mutex::scoped_lock: illegal mutex state");
             break;
     }
@@ -83,13 +86,13 @@ void mutex::scoped_lock::internal_release() {
 bool mutex::scoped_lock::internal_try_acquire( mutex& m ) {
 #if _WIN32||_WIN64
     switch( m.state ) {
-        case INITIALIZED: 
+        case INITIALIZED:
         case HELD:
             break;
-        case DESTROYED: 
-            __TBB_ASSERT(false,"mutex::scoped_lock: mutex already destroyed"); 
+        case DESTROYED:
+            __TBB_ASSERT(false,"mutex::scoped_lock: mutex already destroyed");
             break;
-        default: 
+        default:
             __TBB_ASSERT(false,"mutex::scoped_lock: illegal mutex state");
             break;
     }
@@ -105,7 +108,7 @@ bool mutex::scoped_lock::internal_try_acquire( mutex& m ) {
 #else
     result = pthread_mutex_trylock(&m.impl)==0;
 #endif /* _WIN32||_WIN64 */
-    if( result ) 
+    if( result )
         my_mutex = &m;
     return result;
 }
@@ -113,12 +116,12 @@ bool mutex::scoped_lock::internal_try_acquire( mutex& m ) {
 void mutex::internal_construct() {
 #if _WIN32||_WIN64
     InitializeCriticalSectionEx(&impl, 4000, 0);
-    state = INITIALIZED;  
+    state = INITIALIZED;
 #else
     int error_code = pthread_mutex_init(&impl,NULL);
     if( error_code )
         tbb::internal::handle_perror(error_code,"mutex: pthread_mutex_init failed");
-#endif /* _WIN32||_WIN64*/    
+#endif /* _WIN32||_WIN64*/
     ITT_SYNC_CREATE(&impl, _T("tbb::mutex"), _T(""));
 }
 
@@ -128,16 +131,20 @@ void mutex::internal_destroy() {
       case INITIALIZED:
         DeleteCriticalSection(&impl);
        break;
-      case DESTROYED: 
+      case DESTROYED:
         __TBB_ASSERT(false,"mutex: already destroyed");
         break;
-      default: 
+      default:
         __TBB_ASSERT(false,"mutex: illegal state for destruction");
         break;
     }
     state = DESTROYED;
 #else
-    int error_code = pthread_mutex_destroy(&impl); 
+    int error_code = pthread_mutex_destroy(&impl);
+#if __TBB_TSX_AVAILABLE
+    // For processors with speculative execution, skip the error code check due to glibc bug #16657
+    if( tbb::internal::governor::speculation_enabled() ) return;
+#endif
     __TBB_ASSERT_EX(!error_code,"mutex: pthread_mutex_destroy failed");
 #endif /* _WIN32||_WIN64 */
 }
diff --git a/src/tbb/observer_proxy.cpp b/src/tbb/observer_proxy.cpp
index 07544ec..2a9b2bf 100644
--- a/src/tbb/observer_proxy.cpp
+++ b/src/tbb/observer_proxy.cpp
@@ -1,27 +1,24 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 #include "tbb/tbb_config.h"
-#if !__TBB_ARENA_OBSERVER
-    #error __TBB_ARENA_OBSERVER must be defined
-#endif
 
 #if __TBB_SCHEDULER_OBSERVER
 
@@ -50,14 +47,18 @@ struct check_observer_proxy_count {
 static check_observer_proxy_count the_check_observer_proxy_count;
 #endif /* TBB_USE_ASSERT */
 
+#if __TBB_ARENA_OBSERVER || __TBB_SLEEP_PERMISSION
 interface6::task_scheduler_observer* observer_proxy::get_v6_observer() {
     if(my_version != 6) return NULL;
     return static_cast<interface6::task_scheduler_observer*>(my_observer);
 }
+#endif
 
+#if __TBB_ARENA_OBSERVER
 bool observer_proxy::is_global() {
     return !get_v6_observer() || get_v6_observer()->my_context_tag == interface6::task_scheduler_observer::global_tag;
 }
+#endif /* __TBB_ARENA_OBSERVER */
 
 observer_proxy::observer_proxy( task_scheduler_observer_v3& tso )
     : my_list(NULL), my_next(NULL), my_prev(NULL), my_observer(&tso)
@@ -67,8 +68,12 @@ observer_proxy::observer_proxy( task_scheduler_observer_v3& tso )
 #endif /* TBB_USE_ASSERT */
     // 1 for observer
     my_ref_count = 1;
-    my_version = load<relaxed>(my_observer->my_busy_count)
-                 == interface6::task_scheduler_observer::v6_trait ? 6 : 0;
+    my_version =
+#if __TBB_ARENA_OBSERVER
+        load<relaxed>(my_observer->my_busy_count)
+                 == interface6::task_scheduler_observer::v6_trait ? 6 :
+#endif
+        0;
     __TBB_ASSERT( my_version >= 6 || !load<relaxed>(my_observer->my_busy_count), NULL );
 }
 
@@ -353,20 +358,19 @@ void task_scheduler_observer_v3::observe( bool enable ) {
         if( !my_proxy ) {
             my_proxy = new observer_proxy( *this );
             my_busy_count = 0; // proxy stores versioning information, clear it
+#if __TBB_ARENA_OBSERVER
             if ( !my_proxy->is_global() ) {
                 // Local observer activation
                 generic_scheduler* s = governor::local_scheduler_if_initialized();
-#if __TBB_TASK_ARENA
                 __TBB_ASSERT( my_proxy->get_v6_observer(), NULL );
                 intptr_t tag = my_proxy->get_v6_observer()->my_context_tag;
                 if( tag != interface6::task_scheduler_observer::implicit_tag ) { // explicit arena
                     task_arena *a = reinterpret_cast<task_arena*>(tag);
                     a->initialize();
                     my_proxy->my_list = &a->my_arena->my_observers;
-                } else
-#endif
-                {
-                    if( !s ) s = governor::init_scheduler( task_scheduler_init::automatic, 0, true );
+                } else {
+                    if( !s )
+                        s = governor::init_scheduler( task_scheduler_init::automatic, 0, true );
                     __TBB_ASSERT( __TBB_InitOnce::initialization_done(), NULL );
                     __TBB_ASSERT( s && s->my_arena, NULL );
                     my_proxy->my_list = &s->my_arena->my_observers;
@@ -375,7 +379,9 @@ void task_scheduler_observer_v3::observe( bool enable ) {
                 // Notify newly activated observer and other pending ones if it belongs to current arena
                 if(s && &s->my_arena->my_observers == my_proxy->my_list )
                     my_proxy->my_list->notify_entry_observers( s->my_last_local_observer, s->is_worker() );
-            } else {
+            } else
+#endif /* __TBB_ARENA_OBSERVER */
+            {
                 // Obsolete. Global observer activation
                 if( !__TBB_InitOnce::initialization_done() )
                     DoOneTimeInitializations();
diff --git a/src/tbb/observer_proxy.h b/src/tbb/observer_proxy.h
index 1855884..7f2c4e3 100644
--- a/src/tbb/observer_proxy.h
+++ b/src/tbb/observer_proxy.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef _TBB_observer_proxy_H
@@ -106,7 +106,7 @@ class observer_proxy {
     friend class observer_list;
     //! Reference count used for garbage collection.
     /** 1 for reference from my task_scheduler_observer.
-        1 for each task dispatcher's last observer pointer. 
+        1 for each task dispatcher's last observer pointer.
         No accounting for neighbors in the shared list. */
     atomic<int> my_ref_count;
     //! Reference to the list this observer belongs to.
@@ -122,8 +122,12 @@ class observer_proxy {
     //! Version
     char my_version;
 
+#if __TBB_ARENA_OBSERVER || __TBB_SLEEP_PERMISSION
     interface6::task_scheduler_observer* get_v6_observer();
+#endif
+#if __TBB_ARENA_OBSERVER
     bool is_global(); //TODO: move them back inline when un-CPF'ing
+#endif
 
     //! Constructs proxy for the given observer and adds it to the specified list.
     observer_proxy( task_scheduler_observer_v3& );
diff --git a/src/tbb/pipeline.cpp b/src/tbb/pipeline.cpp
index d469029..96a0aee 100644
--- a/src/tbb/pipeline.cpp
+++ b/src/tbb/pipeline.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/pipeline.h"
@@ -282,7 +282,7 @@ public:
         my_at_start = true;
     }
     //! The virtual task execution method
-    /*override*/ task* execute();
+    task* execute() __TBB_override;
 #if __TBB_TASK_GROUP_CONTEXT
     ~stage_task()
     {
@@ -405,7 +405,7 @@ class pipeline_root_task: public task {
     pipeline& my_pipeline;
     bool do_segment_scanning;
 
-    /*override*/ task* execute() {
+    task* execute() __TBB_override {
         if( !my_pipeline.end_of_input )
             if( !my_pipeline.filter_list->is_bound() )
                 if( my_pipeline.input_tokens > 0 ) {
diff --git a/src/tbb/private_server.cpp b/src/tbb/private_server.cpp
index 73f12ea..88214b2 100644
--- a/src/tbb/private_server.cpp
+++ b/src/tbb/private_server.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "rml_tbb.h"
@@ -56,12 +56,12 @@ private:
         st_quit
     };
     atomic<state_t> my_state;
-    
+
     //! Associated server
-    private_server& my_server; 
+    private_server& my_server;
 
     //! Associated client
-    tbb_client& my_client; 
+    tbb_client& my_client;
 
     //! index used for avoiding the 64K aliasing problem
     const size_t my_index;
@@ -79,7 +79,7 @@ private:
 
     friend class private_server;
 
-    //! Actions executed by the associated thread 
+    //! Actions executed by the associated thread
     void run();
 
     //! Wake up associated thread (or launch a thread if there is none)
@@ -93,7 +93,7 @@ private:
     static void release_handle(thread_handle my_handle, bool join);
 
 protected:
-    private_worker( private_server& server, tbb_client& client, const size_t i ) : 
+    private_worker( private_server& server, tbb_client& client, const size_t i ) :
         my_server(server),
         my_client(client),
         my_index(i)
@@ -132,7 +132,7 @@ private:
 
     //! Number of jobs that could use their associated thread minus number of active threads.
     /** If negative, indicates oversubscription.
-        If positive, indicates that more threads should run. 
+        If positive, indicates that more threads should run.
         Can be lowered asynchronously, but must be raised only while holding my_asleep_list_mutex,
         because raising it impacts the invariant for sleeping threads. */
     atomic<int> my_slack;
@@ -158,7 +158,7 @@ private:
         which in turn each wake up two threads, etc. */
     void propagate_chain_reaction() {
         // First test of a double-check idiom.  Second test is inside wake_some(0).
-        if( my_asleep_list_root ) 
+        if( my_asleep_list_root )
             wake_some(0);
     }
 
@@ -169,40 +169,40 @@ private:
     void wake_some( int additional_slack );
 
     virtual ~private_server();
-    
+
     void remove_server_ref() {
         if( --my_ref_count==0 ) {
             my_client.acknowledge_close_connection();
             this->~private_server();
             tbb::cache_aligned_allocator<private_server>().deallocate( this, 1 );
-        } 
+        }
     }
 
     friend class private_worker;
 public:
     private_server( tbb_client& client );
 
-    /*override*/ version_type version() const {
+    version_type version() const __TBB_override {
         return 0;
-    } 
+    }
 
-    /*override*/ void request_close_connection( bool /*exiting*/ ) {
+    void request_close_connection( bool /*exiting*/ ) __TBB_override {
         for( size_t i=0; i<my_n_thread; ++i )
             my_thread_array[i].start_shutdown();
         remove_server_ref();
     }
 
-    /*override*/ void yield() {__TBB_Yield();}
+    void yield() __TBB_override {__TBB_Yield();}
 
-    /*override*/ void independent_thread_number_changed( int ) {__TBB_ASSERT(false,NULL);}
+    void independent_thread_number_changed( int ) __TBB_override {__TBB_ASSERT(false,NULL);}
 
-    /*override*/ unsigned default_concurrency() const { return governor::default_num_threads() - 1; }
+    unsigned default_concurrency() const __TBB_override { return governor::default_num_threads() - 1; }
 
-    /*override*/ void adjust_job_count_estimate( int delta );
+    void adjust_job_count_estimate( int delta ) __TBB_override;
 
 #if _WIN32||_WIN64
-    /*override*/ void register_master ( ::rml::server::execution_resource_t& ) {}
-    /*override*/ void unregister_master ( ::rml::server::execution_resource_t ) {}
+    void register_master ( ::rml::server::execution_resource_t& ) __TBB_override {}
+    void unregister_master ( ::rml::server::execution_resource_t ) __TBB_override {}
 #endif /* _WIN32||_WIN64 */
 };
 
@@ -221,10 +221,6 @@ __attribute__((force_align_arg_pointer))
 __RML_DECL_THREAD_ROUTINE private_worker::thread_routine( void* arg ) {
     private_worker* self = static_cast<private_worker*>(arg);
     AVOID_64K_ALIASING( self->my_index );
-#if _XBOX
-    int HWThreadIndex = __TBB_XBOX360_GetHardwareThreadIndex(i);
-    XSetThreadProcessor(GetCurrentThread(), HWThreadIndex);
-#endif
     self->run();
     return 0;
 }
@@ -266,7 +262,7 @@ void private_worker::run() {
     my_server.propagate_chain_reaction();
 
     // Transiting to st_normal here would require setting my_handle,
-    // which would create race with the launching thread and 
+    // which would create race with the launching thread and
     // complications in handle management on Windows.
 
     ::rml::job& j = *my_client.create_one_job();
@@ -301,7 +297,7 @@ inline void private_worker::wake_or_launch() {
 #elif USE_PTHREAD
         {
         affinity_helper fpa;
-        fpa.protect_affinity_mask();
+        fpa.protect_affinity_mask( /*restore_process_mask=*/true );
         my_handle = thread_monitor::launch( thread_routine, this, my_server.my_stack_size );
         // Implicit destruction of fpa resets original affinity mask.
         }
@@ -322,11 +318,11 @@ inline void private_worker::wake_or_launch() {
 //------------------------------------------------------------------------
 // Methods of private_server
 //------------------------------------------------------------------------
-private_server::private_server( tbb_client& client ) : 
-    my_client(client), 
+private_server::private_server( tbb_client& client ) :
+    my_client(client),
     my_n_thread(client.max_job_count()),
     my_stack_size(client.min_stack_size()),
-    my_thread_array(NULL) 
+    my_thread_array(NULL)
 {
     my_ref_count = my_n_thread+1;
     my_slack = 0;
@@ -337,15 +333,15 @@ private_server::private_server( tbb_client& client ) :
     my_thread_array = tbb::cache_aligned_allocator<padded_private_worker>().allocate( my_n_thread );
     memset( my_thread_array, 0, sizeof(private_worker)*my_n_thread );
     for( size_t i=0; i<my_n_thread; ++i ) {
-        private_worker* t = new( &my_thread_array[i] ) padded_private_worker( *this, client, i ); 
+        private_worker* t = new( &my_thread_array[i] ) padded_private_worker( *this, client, i );
         t->my_next = my_asleep_list_root;
         my_asleep_list_root = t;
-    } 
+    }
 }
 
 private_server::~private_server() {
     __TBB_ASSERT( my_net_slack_requests==0, NULL );
-    for( size_t i=my_n_thread; i--; ) 
+    for( size_t i=my_n_thread; i--; )
         my_thread_array[i].~padded_private_worker();
     tbb::cache_aligned_allocator<padded_private_worker>().deallocate( my_thread_array, my_n_thread );
     tbb::internal::poison_pointer( my_thread_array );
@@ -396,7 +392,7 @@ void private_server::wake_some( int additional_slack ) {
         }
     }
 done:
-    while( w>wakee ) 
+    while( w>wakee )
         (*--w)->wake_or_launch();
 }
 
diff --git a/src/tbb/queuing_mutex.cpp b/src/tbb/queuing_mutex.cpp
index 7650a79..0071f8b 100644
--- a/src/tbb/queuing_mutex.cpp
+++ b/src/tbb/queuing_mutex.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/queuing_mutex.h"
@@ -75,7 +75,6 @@ bool queuing_mutex::scoped_lock::try_acquire( queuing_mutex& m )
 
     // Force acquire so that user's critical section receives correct values
     // from processor that was previously in the user's critical section.
-    // try_acquire should always have acquire semantic, even if failed.
     __TBB_load_with_acquire(going);
     mutex = &m;
     ITT_NOTIFY(sync_acquired, mutex);
diff --git a/src/tbb/queuing_rw_mutex.cpp b/src/tbb/queuing_rw_mutex.cpp
index e693b04..f19a86b 100644
--- a/src/tbb/queuing_rw_mutex.cpp
+++ b/src/tbb/queuing_rw_mutex.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /** Before making any changes in the implementation, please emulate algorithmic changes
@@ -248,7 +248,6 @@ bool queuing_rw_mutex::scoped_lock::try_acquire( queuing_rw_mutex& m, bool write
         return false; // Someone already took the lock
     // Force acquire so that user's critical section receives correct values
     // from processor that was previously in the user's critical section.
-    // try_acquire should always have acquire semantic, even if failed.
     __TBB_load_with_acquire(my_going);
     my_mutex = &m;
     ITT_NOTIFY(sync_acquired, my_mutex);
@@ -320,7 +319,7 @@ retry:
             __TBB_store_relaxed(my_prev, pred);
             acquire_internal_lock();
 
-            __TBB_store_with_release(pred->my_next,reinterpret_cast<scoped_lock *>(NULL));
+            __TBB_store_with_release(pred->my_next,static_cast<scoped_lock *>(NULL));
 
             if( !__TBB_load_relaxed(my_next) && this != my_mutex->q_tail.compare_and_swap<tbb::release>(pred, this) ) {
                 spin_wait_while_eq( my_next, (void*)NULL );
@@ -367,20 +366,18 @@ bool queuing_rw_mutex::scoped_lock::downgrade_to_reader()
     __TBB_ASSERT( my_state==STATE_WRITER, "no sense to downgrade a reader" );
 
     ITT_NOTIFY(sync_releasing, my_mutex);
-
-    if( ! __TBB_load_with_acquire(my_next) ) {
-        my_state = STATE_READER;
-        if( this==my_mutex->q_tail ) {
+    my_state = STATE_READER;
+    if( ! __TBB_load_relaxed(my_next) ) {
+        // the following load of q_tail must not be reordered with setting STATE_READER above
+        if( this==my_mutex->q_tail.load<full_fence>() ) {
             unsigned short old_state = my_state.compare_and_swap<tbb::release>(STATE_ACTIVEREADER, STATE_READER);
-            if( old_state==STATE_READER ) {
-                // Downgrade completed
-                return true;
-            }
+            if( old_state==STATE_READER )
+                return true; // Downgrade completed
         }
         /* wait for the next to register */
         spin_wait_while_eq( my_next, (void*)NULL );
     }
-    scoped_lock *const n = __TBB_load_relaxed(my_next);
+    scoped_lock *const n = __TBB_load_with_acquire(my_next);
     __TBB_ASSERT( n, "still no successor at this point!" );
     if( n->my_state & STATE_COMBINED_WAITINGREADER )
         __TBB_store_with_release(n->my_going,1);
diff --git a/src/tbb/reader_writer_lock.cpp b/src/tbb/reader_writer_lock.cpp
index 87ecbe4..770ab25 100644
--- a/src/tbb/reader_writer_lock.cpp
+++ b/src/tbb/reader_writer_lock.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/reader_writer_lock.h"
@@ -307,7 +307,7 @@ void reader_writer_lock::scoped_lock::internal_construct (reader_writer_lock& lo
     }
 }
 
-inline reader_writer_lock::scoped_lock::scoped_lock() : mutex(NULL), next(NULL) { 
+inline reader_writer_lock::scoped_lock::scoped_lock() : mutex(NULL), next(NULL) {
     status = waiting;
 }
 
diff --git a/src/tbb/recursive_mutex.cpp b/src/tbb/recursive_mutex.cpp
index ff5b582..7d33202 100644
--- a/src/tbb/recursive_mutex.cpp
+++ b/src/tbb/recursive_mutex.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/recursive_mutex.h"
@@ -51,15 +51,15 @@ void recursive_mutex::scoped_lock::internal_acquire( recursive_mutex& m ) {
 
 void recursive_mutex::scoped_lock::internal_release() {
     __TBB_ASSERT( my_mutex, "recursive_mutex::scoped_lock: not holding a mutex" );
-#if _WIN32||_WIN64    
+#if _WIN32||_WIN64
     switch( my_mutex->state ) {
-      case INITIALIZED: 
+      case INITIALIZED:
         LeaveCriticalSection( &my_mutex->impl );
         break;
-      case DESTROYED: 
-        __TBB_ASSERT(false,"recursive_mutex::scoped_lock: mutex already destroyed"); 
+      case DESTROYED:
+        __TBB_ASSERT(false,"recursive_mutex::scoped_lock: mutex already destroyed");
         break;
-      default: 
+      default:
         __TBB_ASSERT(false,"recursive_mutex::scoped_lock: illegal mutex state");
         break;
     }
@@ -73,12 +73,12 @@ void recursive_mutex::scoped_lock::internal_release() {
 bool recursive_mutex::scoped_lock::internal_try_acquire( recursive_mutex& m ) {
 #if _WIN32||_WIN64
     switch( m.state ) {
-      case INITIALIZED: 
+      case INITIALIZED:
         break;
-      case DESTROYED: 
-        __TBB_ASSERT(false,"recursive_mutex::scoped_lock: mutex already destroyed"); 
+      case DESTROYED:
+        __TBB_ASSERT(false,"recursive_mutex::scoped_lock: mutex already destroyed");
         break;
-      default: 
+      default:
         __TBB_ASSERT(false,"recursive_mutex::scoped_lock: illegal mutex state");
         break;
     }
@@ -109,7 +109,7 @@ void recursive_mutex::internal_construct() {
     if( error_code )
         tbb::internal::handle_perror(error_code,"recursive_mutex: pthread_mutex_init failed");
     pthread_mutexattr_destroy( &mtx_attr );
-#endif /* _WIN32||_WIN64*/    
+#endif /* _WIN32||_WIN64*/
     ITT_SYNC_CREATE(&impl, _T("tbb::recursive_mutex"), _T(""));
 }
 
@@ -119,16 +119,16 @@ void recursive_mutex::internal_destroy() {
       case INITIALIZED:
         DeleteCriticalSection(&impl);
         break;
-      case DESTROYED: 
+      case DESTROYED:
         __TBB_ASSERT(false,"recursive_mutex: already destroyed");
         break;
-      default: 
+      default:
         __TBB_ASSERT(false,"recursive_mutex: illegal state for destruction");
         break;
     }
     state = DESTROYED;
 #else
-    int error_code = pthread_mutex_destroy(&impl); 
+    int error_code = pthread_mutex_destroy(&impl);
     __TBB_ASSERT_EX(!error_code,"recursive_mutex: pthread_mutex_destroy failed");
 #endif /* _WIN32||_WIN64 */
 }
diff --git a/src/tbb/scheduler.cpp b/src/tbb/scheduler.cpp
index 8b085cd..66dbce9 100644
--- a/src/tbb/scheduler.cpp
+++ b/src/tbb/scheduler.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "custom_scheduler.h"
@@ -36,10 +36,10 @@ namespace internal {
 //------------------------------------------------------------------------
 
 /** Defined in tbb_main.cpp **/
-extern generic_scheduler* (*AllocateSchedulerPtr)( arena*, size_t index );
+extern generic_scheduler* (*AllocateSchedulerPtr)( market& );
 
-inline generic_scheduler* allocate_scheduler ( arena* a, size_t index ) {
-    return AllocateSchedulerPtr(a, index);
+inline generic_scheduler* allocate_scheduler ( market& m ) {
+    return AllocateSchedulerPtr( m );
 }
 
 #if __TBB_TASK_GROUP_CONTEXT
@@ -85,66 +85,33 @@ scheduler::~scheduler( ) {}
     #pragma warning(disable:4355)
 #endif
 
-generic_scheduler::generic_scheduler( arena* a, size_t index )
-    : my_stealing_threshold(0)
-    , my_market(NULL)
-    , my_random( this )
-    , my_free_list(NULL)
-#if __TBB_HOARD_NONLOCAL_TASKS
-    , my_nonlocal_free_list(NULL)
-#endif
-    , my_dummy_task(NULL)
+generic_scheduler::generic_scheduler( market& m )
+    : my_market(&m)
+    , my_random(this)
     , my_ref_count(1)
-    , my_auto_initialized(false)
-#if __TBB_COUNT_TASK_NODES
-    , my_task_node_count(0)
-#endif /* __TBB_COUNT_TASK_NODES */
     , my_small_task_count(1)   // Extra 1 is a guard reference
-    , my_return_list(NULL)
-#if __TBB_TASK_GROUP_CONTEXT
-    , my_local_ctx_list_update(make_atomic(uintptr_t(0)))
-#endif /* __TBB_TASK_GROUP_CONTEXT */
-#if __TBB_TASK_PRIORITY
-    , my_offloaded_tasks(NULL)
-    , my_offloaded_task_list_tail_link(NULL)
-    , my_local_reload_epoch(0)
-    , my_pool_reshuffling_pending(false)
-#endif /* __TBB_TASK_PRIORITY */
-#if __TBB_TASK_GROUP_CONTEXT
-    , my_nonlocal_ctx_list_update(make_atomic(uintptr_t(0)))
-#endif /* __TBB_TASK_GROUP_CONTEXT */
 #if __TBB_SURVIVE_THREAD_SWITCH && TBB_USE_ASSERT
     , my_cilk_state(cs_none)
 #endif /* __TBB_SURVIVE_THREAD_SWITCH && TBB_USE_ASSERT */
 {
-    my_arena_index = index;
-    my_arena_slot = 0;
-    my_arena = a;
-    my_innermost_running_task = NULL;
-    my_dispatching_task = NULL;
-    my_affinity_id = 0;
-#if __TBB_SCHEDULER_OBSERVER
-    my_last_global_observer = NULL;
-    my_last_local_observer = NULL;
-#endif /* __TBB_SCHEDULER_OBSERVER */
+    __TBB_ASSERT( !my_arena_index, "constructor expects the memory being zero-initialized" );
+    __TBB_ASSERT( governor::is_set(NULL), "scheduler is already initialized for this thread" );
+
+    my_innermost_running_task = my_dummy_task = &allocate_task( sizeof(task), __TBB_CONTEXT_ARG(NULL, &the_dummy_context) );
+    my_properties.outermost = true;
 #if __TBB_TASK_PRIORITY
-    my_ref_top_priority = NULL;
-    my_ref_reload_epoch = NULL;
+    my_ref_top_priority = &m.my_global_top_priority;
+    my_ref_reload_epoch = &m.my_global_reload_epoch;
 #endif /* __TBB_TASK_PRIORITY */
-
-    my_dummy_task = &allocate_task( sizeof(task), __TBB_CONTEXT_ARG(NULL, NULL) );
 #if __TBB_TASK_GROUP_CONTEXT
+    // Sync up the local cancellation state with the global one. No need for fence here.
+    my_context_state_propagation_epoch = the_context_state_propagation_epoch;
     my_context_list_head.my_prev = &my_context_list_head;
     my_context_list_head.my_next = &my_context_list_head;
     ITT_SYNC_CREATE(&my_context_list_mutex, SyncType_Scheduler, SyncObj_ContextsList);
 #endif /* __TBB_TASK_GROUP_CONTEXT */
-    my_dummy_task->prefix().ref_count = 2;
     ITT_SYNC_CREATE(&my_dummy_task->prefix().ref_count, SyncType_Scheduler, SyncObj_WorkerLifeCycleMgmt);
     ITT_SYNC_CREATE(&my_return_list, SyncType_Scheduler, SyncObj_TaskReturnList);
-    assert_task_pool_valid();
-#if __TBB_SURVIVE_THREAD_SWITCH
-    my_cilk_unwatch_thunk.routine = NULL;
-#endif /* __TBB_SURVIVE_THREAD_SWITCH */
 }
 
 #if _MSC_VER && !defined(__INTEL_COMPILER)
@@ -153,18 +120,23 @@ generic_scheduler::generic_scheduler( arena* a, size_t index )
 
 #if TBB_USE_ASSERT > 1
 void generic_scheduler::assert_task_pool_valid() const {
+    if ( !my_arena_slot )
+        return;
     acquire_task_pool();
     task** tp = my_arena_slot->task_pool_ptr;
-    __TBB_ASSERT( my_arena_slot->my_task_pool_size >= min_task_pool_size, NULL );
+    if ( my_arena_slot->my_task_pool_size )
+        __TBB_ASSERT( my_arena_slot->my_task_pool_size >= min_task_pool_size, NULL );
     const size_t H = __TBB_load_relaxed(my_arena_slot->head); // mirror
     const size_t T = __TBB_load_relaxed(my_arena_slot->tail); // mirror
     __TBB_ASSERT( H <= T, NULL );
     for ( size_t i = 0; i < H; ++i )
         __TBB_ASSERT( tp[i] == poisoned_ptr, "Task pool corrupted" );
     for ( size_t i = H; i < T; ++i ) {
-        __TBB_ASSERT( (uintptr_t)tp[i] + 1 > 1u, "nil or invalid task pointer in the deque" );
-        __TBB_ASSERT( tp[i]->prefix().state == task::ready ||
-                      tp[i]->prefix().extra_state == es_task_proxy, "task in the deque has invalid state" );
+        if ( tp[i] ) {
+            assert_task_valid( tp[i] );
+            __TBB_ASSERT( tp[i]->prefix().state == task::ready ||
+                tp[i]->prefix().extra_state == es_task_proxy, "task in the deque has invalid state" );
+        }
     }
     for ( size_t i = T; i < my_arena_slot->my_task_pool_size; ++i )
         __TBB_ASSERT( tp[i] == poisoned_ptr, "Task pool corrupted" );
@@ -179,7 +151,9 @@ void generic_scheduler::init_stack_info () {
     size_t  stack_size = my_market->worker_stack_size();
 #if USE_WINTHREAD
 #if defined(_MSC_VER)&&_MSC_VER<1400 && !_WIN64
-    NT_TIB  *pteb = (NT_TIB*)__TBB_machine_get_current_teb();
+    NT_TIB  *pteb;
+    __asm mov eax, fs:[0x18]
+    __asm mov pteb, eax
 #else
     NT_TIB  *pteb = (NT_TIB*)NtCurrentTeb();
 #endif
@@ -233,7 +207,7 @@ void generic_scheduler::init_stack_info () {
             // IA-64 architecture stack is split into RSE backup and memory parts
             my_rsb_stealing_threshold = (uintptr_t)((char*)rsb_base + stack_size/2);
 #endif /* __TBB_ipf */
-            // Size of the stack free part 
+            // Size of the stack free part
             stack_size = size_t((char*)stack_base - (char*)stack_limit);
         }
         pthread_attr_destroy(&np_attr_stack);
@@ -392,6 +366,7 @@ task& generic_scheduler::allocate_task( size_t number_of_bytes,
     p.extra_state = 0;
     p.affinity = 0;
     p.state = task::allocated;
+    __TBB_ISOLATION_EXPR( p.isolation = no_isolation );
     return *t;
 }
 
@@ -422,44 +397,53 @@ void generic_scheduler::free_nonlocal_small_task( task& t ) {
     }
 }
 
-size_t generic_scheduler::prepare_task_pool ( size_t num_tasks ) {
+inline size_t generic_scheduler::prepare_task_pool ( size_t num_tasks ) {
     size_t T = __TBB_load_relaxed(my_arena_slot->tail); // mirror
     if ( T + num_tasks <= my_arena_slot->my_task_pool_size )
         return T;
-    acquire_task_pool();
-    size_t H = __TBB_load_relaxed(my_arena_slot->head); // mirror
-    T -= H;
-    size_t new_size = T + num_tasks;
-    __TBB_ASSERT(!my_arena_slot->my_task_pool_size || my_arena_slot->my_task_pool_size >= min_task_pool_size, NULL);
-    if( !my_arena_slot->my_task_pool_size ) {
-        __TBB_ASSERT( !in_arena() && !my_arena_slot->task_pool_ptr, NULL );
-        if( new_size < min_task_pool_size ) new_size = min_task_pool_size;
+
+    size_t new_size = num_tasks;
+
+    if ( !my_arena_slot->my_task_pool_size ) {
+        __TBB_ASSERT( !is_task_pool_published() && is_quiescent_local_task_pool_reset(), NULL );
+        __TBB_ASSERT( !my_arena_slot->task_pool_ptr, NULL );
+        if ( num_tasks < min_task_pool_size ) new_size = min_task_pool_size;
         my_arena_slot->allocate_task_pool( new_size );
+        return 0;
     }
+
+    acquire_task_pool();
+    size_t H = __TBB_load_relaxed( my_arena_slot->head ); // mirror
+    task** task_pool = my_arena_slot->task_pool_ptr;;
+    __TBB_ASSERT( my_arena_slot->my_task_pool_size >= min_task_pool_size, NULL );
+    // Count not skipped tasks. Consider using std::count_if.
+    for ( size_t i = H; i < T; ++i )
+        if ( task_pool[i] ) ++new_size;
     // If the free space at the beginning of the task pool is too short, we
     // are likely facing a pathological single-producer-multiple-consumers
     // scenario, and thus it's better to expand the task pool
-    else if ( new_size <= my_arena_slot->my_task_pool_size - min_task_pool_size/4 ) {
-        // Relocate the busy part to the beginning of the deque
-        memmove( my_arena_slot->task_pool_ptr, my_arena_slot->task_pool_ptr + H, T * sizeof(task*) );
-        my_arena_slot->fill_with_canary_pattern( T, my_arena_slot->tail );
-        commit_relocated_tasks(T);
-    }
-    else {
+    bool allocate = new_size > my_arena_slot->my_task_pool_size - min_task_pool_size/4;
+    if ( allocate ) {
         // Grow task pool. As this operation is rare, and its cost is asymptotically
         // amortizable, we can tolerate new task pool allocation done under the lock.
         if ( new_size < 2 * my_arena_slot->my_task_pool_size )
             new_size = 2 * my_arena_slot->my_task_pool_size;
-        task** old_pool = my_arena_slot->task_pool_ptr;
         my_arena_slot->allocate_task_pool( new_size ); // updates my_task_pool_size
-        __TBB_ASSERT( T <= my_arena_slot->my_task_pool_size, "new task pool is too short" );
-        memcpy( my_arena_slot->task_pool_ptr, old_pool + H, T * sizeof(task*) );
-        commit_relocated_tasks(T);
-        __TBB_ASSERT( old_pool, "attempt to free NULL TaskPool" );
-        NFS_Free( old_pool );
     }
+    // Filter out skipped tasks. Consider using std::copy_if.
+    size_t T1 = 0;
+    for ( size_t i = H; i < T; ++i )
+        if ( task_pool[i] )
+            my_arena_slot->task_pool_ptr[T1++] = task_pool[i];
+    // Deallocate the previous task pool if a new one has been allocated.
+    if ( allocate )
+        NFS_Free( task_pool );
+    else
+        my_arena_slot->fill_with_canary_pattern( T1, my_arena_slot->tail );
+    // Publish the new state.
+    commit_relocated_tasks( T1 );
     assert_task_pool_valid();
-    return T;
+    return T1;
 }
 
 /** ATTENTION:
@@ -468,7 +452,7 @@ size_t generic_scheduler::prepare_task_pool ( size_t num_tasks ) {
     to our task pool).
     Thus if either of them is changed, consider changing the counterpart as well. **/
 inline void generic_scheduler::acquire_task_pool() const {
-    if ( !in_arena() )
+    if ( !is_task_pool_published() )
         return; // we are not in arena - nothing to lock
     bool sync_prepare_done = false;
     for( atomic_backoff b;;b.pause() ) {
@@ -497,7 +481,7 @@ inline void generic_scheduler::acquire_task_pool() const {
 } // generic_scheduler::acquire_task_pool
 
 inline void generic_scheduler::release_task_pool() const {
-    if ( !in_arena() )
+    if ( !is_task_pool_published() )
         return; // we are not in arena - nothing to unlock
     __TBB_ASSERT( my_arena_slot, "we are not in arena" );
     __TBB_ASSERT( my_arena_slot->task_pool == LockedTaskPool, "arena slot is not locked" );
@@ -583,6 +567,10 @@ inline task* generic_scheduler::prepare_for_spawning( task* t ) {
     affinity_id dst_thread = t->prefix().affinity;
     __TBB_ASSERT( dst_thread == 0 || is_version_3_task(*t),
                   "backwards compatibility to TBB 2.0 tasks is broken" );
+#if __TBB_TASK_ISOLATION
+    isolation_tag isolation = my_innermost_running_task->prefix().isolation;
+    t->prefix().isolation = isolation;
+#endif /* __TBB_TASK_ISOLATION */
     if( dst_thread != 0 && dst_thread != my_affinity_id ) {
         task_proxy& proxy = (task_proxy&)allocate_task( sizeof(task_proxy),
                                                       __TBB_CONTEXT_ARG(NULL, NULL) );
@@ -592,11 +580,14 @@ inline task* generic_scheduler::prepare_for_spawning( task* t ) {
         // Mark proxy as present in both locations (sender's task pool and destination mailbox)
         proxy.task_and_tag = intptr_t(t) | task_proxy::location_mask;
 #if __TBB_TASK_PRIORITY
-        proxy.prefix().context = t->prefix().context;
+        poison_pointer( proxy.prefix().context );
 #endif /* __TBB_TASK_PRIORITY */
+#if __TBB_TASK_ISOLATION
+        proxy.prefix().isolation = isolation;
+#endif /* __TBB_TASK_ISOLATION */
         ITT_NOTIFY( sync_releasing, proxy.outbox );
         // Mail the proxy - after this point t may be destroyed by another thread at any moment.
-        proxy.outbox->push(proxy);
+        proxy.outbox->push(&proxy);
         return &proxy;
     }
     return t;
@@ -604,23 +595,24 @@ inline task* generic_scheduler::prepare_for_spawning( task* t ) {
 
 /** Conceptually, this method should be a member of class scheduler.
     But doing so would force us to publish class scheduler in the headers. */
-void generic_scheduler::local_spawn( task& first, task*& next ) {
+void generic_scheduler::local_spawn( task* first, task*& next ) {
+    __TBB_ASSERT( first, NULL );
     __TBB_ASSERT( governor::is_set(this), NULL );
 #if __TBB_TODO
     // We need to consider capping the max task pool size and switching
     // to in-place task execution whenever it is reached.
 #endif
-    if ( &first.prefix().next == &next ) {
+    if ( &first->prefix().next == &next ) {
         // Single task is being spawned
 #if __TBB_TODO
-        // TODO: 
+        // TODO:
         // In the future we need to add overloaded spawn method for a single task,
         // and a method accepting an array of task pointers (we may also want to
-        // change the implementation of the task_list class). But since such changes 
+        // change the implementation of the task_list class). But since such changes
         // may affect the binary compatibility, we postpone them for a while.
 #endif
         size_t T = prepare_task_pool( 1 );
-        my_arena_slot->task_pool_ptr[T] = prepare_for_spawning( &first );
+        my_arena_slot->task_pool_ptr[T] = prepare_for_spawning( first );
         commit_spawned_tasks( T + 1 );
     }
     else {
@@ -638,7 +630,7 @@ void generic_scheduler::local_spawn( task& first, task*& next ) {
         task *arr[min_task_pool_size];
         fast_reverse_vector<task*> tasks(arr, min_task_pool_size);
         task *t_next = NULL;
-        for( task* t = &first; ; t = t_next ) {
+        for( task* t = first; ; t = t_next ) {
             // If t is affinitized to another thread, it may already be executed
             // and destroyed by the time prepare_for_spawning returns.
             // So milk it while it is alive.
@@ -653,18 +645,18 @@ void generic_scheduler::local_spawn( task& first, task*& next ) {
         tasks.copy_memory( my_arena_slot->task_pool_ptr + T );
         commit_spawned_tasks( T + num_tasks );
     }
-    if ( !in_arena() )
-        enter_arena();
-    my_arena->advertise_new_work</*Spawned=*/true>();
+    if ( !is_task_pool_published() )
+        publish_task_pool();
+    my_arena->advertise_new_work<arena::work_spawned>();
     assert_task_pool_valid();
 }
 
-void generic_scheduler::local_spawn_root_and_wait( task& first, task*& next ) {
+void generic_scheduler::local_spawn_root_and_wait( task* first, task*& next ) {
     __TBB_ASSERT( governor::is_set(this), NULL );
-    __TBB_ASSERT( &first, NULL );
-    auto_empty_task dummy( __TBB_CONTEXT_ARG(this, first.prefix().context) );
+    __TBB_ASSERT( first, NULL );
+    auto_empty_task dummy( __TBB_CONTEXT_ARG(this, first->prefix().context) );
     internal::reference_count n = 0;
-    for( task* t=&first; ; t=t->prefix().next ) {
+    for( task* t=first; ; t=t->prefix().next ) {
         ++n;
         __TBB_ASSERT( !t->prefix().parent, "not a root task, or already running" );
         t->prefix().parent = &dummy;
@@ -676,16 +668,21 @@ void generic_scheduler::local_spawn_root_and_wait( task& first, task*& next ) {
     }
     dummy.prefix().ref_count = n+1;
     if( n>1 )
-        local_spawn( *first.prefix().next, next );
-    local_wait_for_all( dummy, &first );
+        local_spawn( first->prefix().next, next );
+#if __TBB_TASK_ISOLATION
+    __TBB_ASSERT( first->prefix().isolation == no_isolation, NULL );
+    // Propagate the isolation to the task executed without spawn.
+    first->prefix().isolation = my_innermost_running_task->prefix().isolation;
+#endif /* __TBB_TASK_ISOLATION */
+    local_wait_for_all( dummy, first );
 }
 
 void tbb::internal::generic_scheduler::spawn( task& first, task*& next ) {
-    governor::local_scheduler()->local_spawn( first, next );
+    governor::local_scheduler()->local_spawn( &first, next );
 }
 
 void tbb::internal::generic_scheduler::spawn_root_and_wait( task& first, task*& next ) {
-    governor::local_scheduler()->local_spawn_root_and_wait( first, next );
+    governor::local_scheduler()->local_spawn_root_and_wait( &first, next );
 }
 
 void tbb::internal::generic_scheduler::enqueue( task& t, void* prio ) {
@@ -703,9 +700,68 @@ public:
     ~auto_indicator () { my_indicator = false; }
 };
 
-task* generic_scheduler::winnow_task_pool () {
+task *generic_scheduler::get_task_and_activate_task_pool( size_t H0, __TBB_ISOLATION_ARG( size_t T0, isolation_tag isolation ) ) {
+    __TBB_ASSERT( is_local_task_pool_quiescent(), NULL );
+
+    // Go through the task pool to find an available task for execution.
+    task *t = NULL;
+#if __TBB_TASK_ISOLATION
+    size_t T = T0;
+    bool tasks_omitted = false;
+    while ( !t && T>H0 ) {
+        t = get_task( --T, isolation, tasks_omitted );
+        if ( !tasks_omitted ) {
+            poison_pointer( my_arena_slot->task_pool_ptr[T] );
+            --T0;
+        }
+    }
+    // Make a hole if some tasks have been skipped.
+    if ( t && tasks_omitted ) {
+        my_arena_slot->task_pool_ptr[T] = NULL;
+        if ( T == H0 ) {
+            // The obtained task is on the head. So we can move the head instead of making a hole.
+            ++H0;
+            poison_pointer( my_arena_slot->task_pool_ptr[T] );
+        }
+    }
+#else
+    while ( !t && T0 ) {
+        t = get_task( --T0 );
+        poison_pointer( my_arena_slot->task_pool_ptr[T0] );
+    }
+#endif /* __TBB_TASK_ISOLATION */
+
+    if ( H0 < T0 ) {
+        // There are some tasks in the task pool. Publish them.
+        __TBB_store_relaxed( my_arena_slot->head, H0 );
+        __TBB_store_relaxed( my_arena_slot->tail, T0 );
+        if ( is_task_pool_published() )
+            release_task_pool();
+        else
+            publish_task_pool();
+    } else {
+        __TBB_store_relaxed( my_arena_slot->head, 0 );
+        __TBB_store_relaxed( my_arena_slot->tail, 0 );
+        if ( is_task_pool_published() )
+            leave_task_pool();
+    }
+
+#if __TBB_TASK_ISOLATION
+    // Now it is safe to call note_affinity because the task pool is restored.
+    if ( tasks_omitted && my_innermost_running_task == t ) {
+        // my_innermost_running_task carries isolation of the current nested level.
+        __TBB_ASSERT( my_innermost_running_task, "A task can be omitted only when isolation is enabled." );
+        t->note_affinity( my_affinity_id );
+    }
+#endif /* __TBB_TASK_ISOLATION */
+
+    assert_task_pool_valid();
+    return t;
+}
+
+task* generic_scheduler::winnow_task_pool( __TBB_ISOLATION_EXPR( isolation_tag isolation ) ) {
     GATHER_STATISTIC( ++my_counters.prio_winnowings );
-    __TBB_ASSERT( in_arena(), NULL );
+    __TBB_ASSERT( is_task_pool_published(), NULL );
     __TBB_ASSERT( my_offloaded_tasks, "At least one task is expected to be already offloaded" );
     // To eliminate possible sinking of the store to the indicator below the subsequent
     // store to my_arena_slot->tail, the stores should have either been separated
@@ -713,105 +769,60 @@ task* generic_scheduler::winnow_task_pool () {
     // been done with release fence. But since this is just an optimization, and
     // the corresponding checking sequence in arena::is_out_of_work() is not atomic
     // anyway, fences aren't used, so that not to penalize warmer path.
-    auto_indicator indicator(my_pool_reshuffling_pending);
-    // The purpose of the synchronization algorithm here is for the owner thread
+    auto_indicator indicator( my_pool_reshuffling_pending );
+
+    // Locking the task pool unconditionally produces simpler code,
+    // scalability of which should not suffer unless priority jitter takes place.
+    // TODO: consider the synchronization algorithm here is for the owner thread
     // to avoid locking task pool most of the time.
-#if __TBB_TODO
-    // Just locking the task pool unconditionally would produce simpler code, 
-    // scalability of which should not suffer unless priority jitter takes place. 
-    // Since priority jitter is nocuous by itself, we may want to evaluate 
-    // applicability of the simpler variant...
-    // Non-blocking variant also prevent us from relocating remaining tasks to
-    // the beginning of the task pool, not sure if it makes much sense.
-#endif
-    size_t T0 = __TBB_load_relaxed(my_arena_slot->tail);
-    __TBB_store_relaxed( my_arena_slot->tail, __TBB_load_relaxed(my_arena_slot->head) - 1 );
-    atomic_fence();
-    size_t H = __TBB_load_relaxed(my_arena_slot->head);
-    size_t T = __TBB_load_relaxed(my_arena_slot->tail);
-    __TBB_ASSERT( (intptr_t)T <= (intptr_t)T0, NULL);
-    __TBB_ASSERT( (intptr_t)H >= (intptr_t)T || (H == T0 && T == T0), NULL );
-    bool acquired = false;
-    if ( H == T ) {
-        // Either no contention with thieves during arbitration protocol execution or ...
-        if ( H >= T0 ) {
-            // ... the task pool got empty
-            reset_deque_and_leave_arena( /*locked=*/false );
-            return NULL;
-        }
-    }
-    else {
-        // Contention with thieves detected. Now without taking lock it is impossible
-        // to define the current head value because of its jitter caused by continuing
-        // stealing attempts (the pool is not locked so far).
-        acquired = true;
-        acquire_task_pool();
-        H = __TBB_load_relaxed(my_arena_slot->head);
-        if ( H >= T0 ) {
-            reset_deque_and_leave_arena( /*locked=*/true );
-            return NULL;
-        }
-    }
-    size_t src,
-           dst = T0;
-    // Find the first task to offload.
-    for ( src = H; src < T0; ++src ) {
-        task &t = *my_arena_slot->task_pool_ptr[src];
-        intptr_t p = priority(t);
-        if ( p < *my_ref_top_priority ) {
-            // Position of the first offloaded task will be the starting point
-            // for relocation of subsequent tasks that survive winnowing.
-            dst = src;
-            offload_task( t, p );
-            break;
+    acquire_task_pool();
+    size_t T0 = __TBB_load_relaxed( my_arena_slot->tail );
+    size_t H0 = __TBB_load_relaxed( my_arena_slot->head );
+    size_t T1 = 0;
+    for ( size_t src = H0; src<T0; ++src ) {
+        if ( task *t = my_arena_slot->task_pool_ptr[src] ) {
+            // We cannot offload a proxy task (check the priority of it) because it can be already consumed.
+            if ( !is_proxy( *t ) ) {
+                intptr_t p = priority( *t );
+                if ( p<*my_ref_top_priority ) {
+                    offload_task( *t, p );
+                    continue;
+                }
+            }
+            my_arena_slot->task_pool_ptr[T1++] = t;
         }
     }
-    for ( ++src; src < T0; ++src ) {
-        task &t = *my_arena_slot->task_pool_ptr[src];
-        intptr_t p = priority(t);
-        if ( p < *my_ref_top_priority )
-            offload_task( t, p );
-        else
-            my_arena_slot->task_pool_ptr[dst++] = &t;
-    }
-    __TBB_ASSERT( T0 >= dst, NULL );
-    task *t = H < dst ? my_arena_slot->task_pool_ptr[--dst] : NULL;
-    if ( H == dst ) {
-        // No tasks remain the primary pool
-        reset_deque_and_leave_arena( acquired );
-    }
-    else if ( acquired ) {
-        __TBB_ASSERT( !is_poisoned(my_arena_slot->task_pool_ptr[H]), NULL );
-        __TBB_store_relaxed( my_arena_slot->tail, dst );
-        release_task_pool();
-    }
-    else {
-        __TBB_ASSERT( !is_poisoned(my_arena_slot->task_pool_ptr[H]), NULL );
-        // Release fence is necessary to make sure possibly relocated task pointers
-        // become visible to potential thieves
-        __TBB_store_with_release( my_arena_slot->tail, dst );
-    }
-    my_arena_slot->fill_with_canary_pattern( dst, T0 );
-    assert_task_pool_valid();
-    return t;
+    __TBB_ASSERT( T1<=T0, NULL );
+
+    // Choose max(T1, H0) because ranges [0, T1) and [H0, T0) can overlap.
+    my_arena_slot->fill_with_canary_pattern( max( T1, H0 ), T0 );
+    return get_task_and_activate_task_pool( 0, __TBB_ISOLATION_ARG( T1, isolation ) );
 }
 
-task* generic_scheduler::reload_tasks ( task*& offloaded_tasks, task**& offloaded_task_list_link, intptr_t top_priority ) {
+task* generic_scheduler::reload_tasks ( task*& offloaded_tasks, task**& offloaded_task_list_link, __TBB_ISOLATION_ARG( intptr_t top_priority, isolation_tag isolation ) ) {
     GATHER_STATISTIC( ++my_counters.prio_reloads );
-    __TBB_ASSERT( !in_arena(), NULL );
+#if __TBB_TASK_ISOLATION
+    // In many cases, locking the task pool is no-op here because the task pool is in the empty
+    // state. However, isolation allows entering stealing loop with non-empty task pool.
+    // In principle, it is possible to process reloaded tasks without locking but it will
+    // complicate the logic of get_task_and_activate_task_pool (TODO: evaluate).
+    acquire_task_pool();
+#else
+    __TBB_ASSERT( !is_task_pool_published(), NULL );
+#endif
     task *arr[min_task_pool_size];
     fast_reverse_vector<task*> tasks(arr, min_task_pool_size);
     task **link = &offloaded_tasks;
-    task *t;
-    while ( (t = *link) ) {
+    while ( task *t = *link ) {
         task** next_ptr = &t->prefix().next_offloaded;
+        __TBB_ASSERT( !is_proxy(*t), "The proxy tasks cannot be offloaded" );
         if ( priority(*t) >= top_priority ) {
             tasks.push_back( t );
             // Note that owner is an alias of next_offloaded. Thus the following
             // assignment overwrites *next_ptr
             task* next = *next_ptr;
             t->prefix().owner = this;
-            __TBB_ASSERT( t->prefix().state == task::ready || t->prefix().extra_state == es_task_proxy, NULL );
+            __TBB_ASSERT( t->prefix().state == task::ready, NULL );
             *link = next;
         }
         else {
@@ -832,25 +843,26 @@ task* generic_scheduler::reload_tasks ( task*& offloaded_tasks, task**& offloade
     }
     __TBB_ASSERT( link, NULL );
     size_t num_tasks = tasks.size();
-    if ( num_tasks ) {
-        GATHER_STATISTIC( ++my_counters.prio_tasks_reloaded );
-        size_t T = prepare_task_pool( num_tasks );
-        tasks.copy_memory( my_arena_slot->task_pool_ptr + T );
-        if ( --num_tasks ) {
-            commit_spawned_tasks( T += num_tasks );
-            enter_arena();
-            my_arena->advertise_new_work</*Spawned=*/true>();
-        }
-        __TBB_ASSERT( T == __TBB_load_relaxed(my_arena_slot->tail), NULL );
-        __TBB_ASSERT( T < my_arena_slot->my_task_pool_size, NULL );
-        t = my_arena_slot->task_pool_ptr[T];
-        poison_pointer(my_arena_slot->task_pool_ptr[T]);
-        assert_task_pool_valid();
+    if ( !num_tasks ) {
+        __TBB_ISOLATION_EXPR( release_task_pool() );
+        return NULL;
     }
+
+    // Copy found tasks into the task pool.
+    GATHER_STATISTIC( ++my_counters.prio_tasks_reloaded );
+    size_t T = prepare_task_pool( num_tasks );
+    tasks.copy_memory( my_arena_slot->task_pool_ptr + T );
+
+    // Find a task available for execution.
+    task *t = get_task_and_activate_task_pool( __TBB_load_relaxed( my_arena_slot->head ), __TBB_ISOLATION_ARG( T + num_tasks, isolation ) );
+    if ( t ) --num_tasks;
+    if ( num_tasks )
+        my_arena->advertise_new_work<arena::work_spawned>();
+
     return t;
 }
 
-task* generic_scheduler::reload_tasks () {
+task* generic_scheduler::reload_tasks( __TBB_ISOLATION_EXPR( isolation_tag isolation ) ) {
     uintptr_t reload_epoch = *my_ref_reload_epoch;
     __TBB_ASSERT( my_offloaded_tasks, NULL );
     __TBB_ASSERT( my_local_reload_epoch <= reload_epoch
@@ -861,7 +873,7 @@ task* generic_scheduler::reload_tasks () {
     __TBB_ASSERT( my_offloaded_tasks, NULL );
     intptr_t top_priority = effective_reference_priority();
     __TBB_ASSERT( (uintptr_t)top_priority < (uintptr_t)num_priority_levels, NULL );
-    task *t = reload_tasks( my_offloaded_tasks, my_offloaded_task_list_tail_link, top_priority );
+    task *t = reload_tasks( my_offloaded_tasks, my_offloaded_task_list_tail_link, __TBB_ISOLATION_ARG( top_priority, isolation ) );
     if ( my_offloaded_tasks && (my_arena->my_bottom_priority >= top_priority || !my_arena->my_num_workers_requested) ) {
         // Safeguard against deliberately relaxed synchronization while checking
         // for the presence of work in arena (so that not to impact hot paths).
@@ -869,148 +881,238 @@ task* generic_scheduler::reload_tasks () {
         // are still present. This results in both bottom and top priority bounds
         // becoming 'normal', which makes offloaded low priority tasks unreachable.
         // Update arena's bottom priority to accommodate them.
-        // NOTE:    If the number of priority levels is increased, we may want 
+        // NOTE:    If the number of priority levels is increased, we may want
         //          to calculate minimum of priorities in my_offloaded_tasks.
 
         // First indicate the presence of lower-priority tasks
         my_market->update_arena_priority( *my_arena, priority(*my_offloaded_tasks) );
         // Then mark arena as full to unlock arena priority level adjustment
         // by arena::is_out_of_work(), and ensure worker's presence
-        my_arena->advertise_new_work</*Spawned=*/false>();
+        my_arena->advertise_new_work<arena::wakeup>();
     }
     my_local_reload_epoch = reload_epoch;
     return t;
 }
 #endif /* __TBB_TASK_PRIORITY */
 
-inline task* generic_scheduler::get_task() {
-    __TBB_ASSERT( in_arena(), NULL );
-    task* result = NULL;
-    size_t T = __TBB_load_relaxed(my_arena_slot->tail); // mirror
-retry:
-    __TBB_store_relaxed(my_arena_slot->tail, --T);
-    atomic_fence();
-    if ( (intptr_t)__TBB_load_relaxed(my_arena_slot->head) > (intptr_t)T ) {
-        acquire_task_pool();
-        size_t H = __TBB_load_relaxed(my_arena_slot->head); // mirror
-        if ( (intptr_t)H <= (intptr_t)T ) {
-            // The thief backed off - grab the task
-            result = my_arena_slot->task_pool_ptr[T];
-            __TBB_ASSERT( !is_poisoned(result), NULL );
+#if __TBB_TASK_ISOLATION
+inline task* generic_scheduler::get_task( size_t T, isolation_tag isolation, bool& tasks_omitted )
+#else
+inline task* generic_scheduler::get_task( size_t T )
+#endif /* __TBB_TASK_ISOLATION */
+{
+    __TBB_ASSERT( __TBB_load_relaxed( my_arena_slot->tail ) <= T
+        || is_local_task_pool_quiescent(), "Is it safe to get a task at position T?" );
+
+    task* result = my_arena_slot->task_pool_ptr[T];
+    __TBB_ASSERT( !is_poisoned( result ), "The poisoned task is going to be processed" );
+#if __TBB_TASK_ISOLATION
+    if ( !result )
+        return NULL;
+
+    bool omit = isolation != no_isolation && isolation != result->prefix().isolation;
+    if ( !omit && !is_proxy( *result ) )
+        return result;
+    else if ( omit ) {
+        tasks_omitted = true;
+        return NULL;
+    }
+#else
+    poison_pointer( my_arena_slot->task_pool_ptr[T] );
+    if ( !result || !is_proxy( *result ) )
+        return result;
+#endif /* __TBB_TASK_ISOLATION */
+
+    task_proxy& tp = static_cast<task_proxy&>(*result);
+    if ( task *t = tp.extract_task<task_proxy::pool_bit>() ) {
+        GATHER_STATISTIC( ++my_counters.proxies_executed );
+        // Following assertion should be true because TBB 2.0 tasks never specify affinity, and hence are not proxied.
+        __TBB_ASSERT( is_version_3_task( *t ), "backwards compatibility with TBB 2.0 broken" );
+        __TBB_ASSERT( my_innermost_running_task != t, NULL );
+        my_innermost_running_task = t; // prepare for calling note_affinity()
+#if __TBB_TASK_ISOLATION
+        // Task affinity has changed. Postpone calling note_affinity because the task pool is in invalid state.
+        if ( !tasks_omitted )
+#endif /* __TBB_TASK_ISOLATION */
+        {
             poison_pointer( my_arena_slot->task_pool_ptr[T] );
+            t->note_affinity( my_affinity_id );
         }
-        else {
-            __TBB_ASSERT ( H == __TBB_load_relaxed(my_arena_slot->head)
-                        && T == __TBB_load_relaxed(my_arena_slot->tail)
-                        && H == T + 1, "victim/thief arbitration algorithm failure" );
-        }
-        if ( (intptr_t)H < (intptr_t)T )
-            release_task_pool();
-        else
-            reset_deque_and_leave_arena( /*locked=*/true );
+        return t;
     }
-    else {
+
+    // Proxy was empty, so it's our responsibility to free it
+    free_task<small_task>( tp );
+#if __TBB_TASK_ISOLATION
+    if ( tasks_omitted )
+        my_arena_slot->task_pool_ptr[T] = NULL;
+#endif /* __TBB_TASK_ISOLATION */
+    return NULL;
+}
+
+inline task* generic_scheduler::get_task( __TBB_ISOLATION_EXPR( isolation_tag isolation ) ) {
+    __TBB_ASSERT( is_task_pool_published(), NULL );
+    // The current task position in the task pool.
+    size_t T0 = __TBB_load_relaxed( my_arena_slot->tail );
+    // The bounds of available tasks in the task pool. H0 is only used when the head bound is reached.
+    size_t H0 = (size_t)-1, T = T0;
+    task* result = NULL;
+    bool task_pool_empty = false;
+    __TBB_ISOLATION_EXPR( bool tasks_omitted = false );
+    do {
+        __TBB_ASSERT( !result, NULL );
+        __TBB_store_relaxed( my_arena_slot->tail, --T );
+        atomic_fence();
+        if ( (intptr_t)__TBB_load_relaxed( my_arena_slot->head ) > (intptr_t)T ) {
+            acquire_task_pool();
+            H0 = __TBB_load_relaxed( my_arena_slot->head );
+            if ( (intptr_t)H0 > (intptr_t)T ) {
+                // The thief has not backed off - nothing to grab.
+                __TBB_ASSERT( H0 == __TBB_load_relaxed( my_arena_slot->head )
+                    && T == __TBB_load_relaxed( my_arena_slot->tail )
+                    && H0 == T + 1, "victim/thief arbitration algorithm failure" );
+                reset_task_pool_and_leave();
+                // No tasks in the task pool.
+                task_pool_empty = true;
+                break;
+            } else if ( H0 == T ) {
+                // There is only one task in the task pool.
+                reset_task_pool_and_leave();
+                task_pool_empty = true;
+            } else {
+                // Release task pool if there are still some tasks.
+                // After the release, the tail will be less than T, thus a thief
+                // will not attempt to get a task at position T.
+                release_task_pool();
+            }
+        }
         __TBB_control_consistency_helper(); // on my_arena_slot->head
-        result = my_arena_slot->task_pool_ptr[T];
-        __TBB_ASSERT( !is_poisoned(result), NULL );
-        poison_pointer( my_arena_slot->task_pool_ptr[T] );
-    }
-    if( result && is_proxy(*result) ) {
-        task_proxy &tp = *(task_proxy*)result;
-        result = tp.extract_task<task_proxy::pool_bit>();
-        if( !result ) {
-            // Proxy was empty, so it's our responsibility to free it
-            free_task<small_task>(tp);
-            if ( in_arena() )
-                goto retry;
+#if __TBB_TASK_ISOLATION
+        result = get_task( T, isolation, tasks_omitted );
+        if ( result ) {
+            poison_pointer( my_arena_slot->task_pool_ptr[T] );
+            break;
+        } else if ( !tasks_omitted ) {
+            poison_pointer( my_arena_slot->task_pool_ptr[T] );
+            __TBB_ASSERT( T0 == T+1, NULL );
+            T0 = T;
+        }
+#else
+        result = get_task( T );
+#endif /* __TBB_TASK_ISOLATION */
+    } while ( !result && !task_pool_empty );
+
+#if __TBB_TASK_ISOLATION
+    if ( tasks_omitted ) {
+        if ( task_pool_empty ) {
+            // All tasks have been checked. The task pool should be  in reset state.
+            // We just restore the bounds for the available tasks.
+            // TODO: Does it have sense to move them to the beginning of the task pool?
             __TBB_ASSERT( is_quiescent_local_task_pool_reset(), NULL );
-            return NULL;
+            if ( result ) {
+                // If we have a task, it should be at H0 position.
+                __TBB_ASSERT( H0 == T, NULL );
+                ++H0;
+            }
+            __TBB_ASSERT( H0 <= T0, NULL );
+            if ( H0 < T0 ) {
+                // Restore the task pool if there are some tasks.
+                __TBB_store_relaxed( my_arena_slot->head, H0 );
+                __TBB_store_relaxed( my_arena_slot->tail, T0 );
+                // The release fence is used in publish_task_pool.
+                publish_task_pool();
+                // Synchronize with snapshot as we published some tasks.
+                my_arena->advertise_new_work<arena::wakeup>();
+            }
+        } else {
+            // A task has been obtained. We need to make a hole in position T.
+            __TBB_ASSERT( is_task_pool_published(), NULL );
+            __TBB_ASSERT( result, NULL );
+            my_arena_slot->task_pool_ptr[T] = NULL;
+            __TBB_store_with_release( my_arena_slot->tail, T0 );
+            // Synchronize with snapshot as we published some tasks.
+            // TODO: consider some approach not to call wakeup for each time. E.g. check if the tail reached the head.
+            my_arena->advertise_new_work<arena::wakeup>();
         }
-        GATHER_STATISTIC( ++my_counters.proxies_executed );
-        // Following assertion should be true because TBB 2.0 tasks never specify affinity, and hence are not proxied.
-        __TBB_ASSERT( is_version_3_task(*result), "backwards compatibility with TBB 2.0 broken" );
-        // Task affinity has changed.
-        my_innermost_running_task = result;
-        result->note_affinity(my_affinity_id);
+
+        // Now it is safe to call note_affinity because the task pool is restored.
+        if ( my_innermost_running_task == result )
+            result->note_affinity( my_affinity_id );
     }
-    __TBB_ASSERT( result || is_quiescent_local_task_pool_reset(), NULL );
+#endif /* __TBB_TASK_ISOLATION */
+    __TBB_ASSERT( (intptr_t)__TBB_load_relaxed( my_arena_slot->tail ) >= 0, NULL );
+    __TBB_ASSERT( result || __TBB_ISOLATION_EXPR( tasks_omitted || ) is_quiescent_local_task_pool_reset(), NULL );
     return result;
 } // generic_scheduler::get_task
 
-task* generic_scheduler::steal_task( arena_slot& victim_slot ) {
+task* generic_scheduler::steal_task( __TBB_ISOLATION_ARG( arena_slot& victim_slot, isolation_tag isolation ) ) {
     task** victim_pool = lock_task_pool( &victim_slot );
     if ( !victim_pool )
         return NULL;
     task* result = NULL;
     size_t H = __TBB_load_relaxed(victim_slot.head); // mirror
-    const size_t H0 = H;
-    int skip_and_bump = 0; // +1 for skipped task and +1 for bumped head&tail
-retry:
-    __TBB_store_relaxed( victim_slot.head, ++H );
-    atomic_fence();
-    if ( (intptr_t)H > (intptr_t)__TBB_load_relaxed(victim_slot.tail) ) {
-        // Stealing attempt failed, deque contents has not been changed by us
-        GATHER_STATISTIC( ++my_counters.thief_backoffs );
-        __TBB_store_relaxed( victim_slot.head, /*dead: H = */ H0 );
-        skip_and_bump++; // trigger that we bumped head and tail
-        __TBB_ASSERT ( !result, NULL );
-    }
-    else {
+    size_t H0 = H;
+    bool tasks_omitted = false;
+    do {
+        __TBB_store_relaxed( victim_slot.head, ++H );
+        atomic_fence();
+        if ( (intptr_t)H > (intptr_t)__TBB_load_relaxed( victim_slot.tail ) ) {
+            // Stealing attempt failed, deque contents has not been changed by us
+            GATHER_STATISTIC( ++my_counters.thief_backoffs );
+            __TBB_store_relaxed( victim_slot.head, /*dead: H = */ H0 );
+            __TBB_ASSERT( !result, NULL );
+            goto unlock;
+        }
         __TBB_control_consistency_helper(); // on victim_slot.tail
         result = victim_pool[H-1];
-        __TBB_ASSERT( !is_poisoned(result), NULL );
-        if( is_proxy(*result) ) {
-            task_proxy& tp = *static_cast<task_proxy*>(result);
-            // If mailed task is likely to be grabbed by its destination thread, skip it.
-            if ( task_proxy::is_shared(tp.task_and_tag) && tp.outbox->recipient_is_idle() )
+        __TBB_ASSERT( !is_poisoned( result ), NULL );
+
+        if ( result ) {
+            __TBB_ISOLATION_EXPR( if ( isolation == no_isolation || isolation == result->prefix().isolation ) )
             {
+                if ( !is_proxy( *result ) )
+                    break;
+                task_proxy& tp = *static_cast<task_proxy*>(result);
+                // If mailed task is likely to be grabbed by its destination thread, skip it.
+                if ( !(task_proxy::is_shared( tp.task_and_tag ) && tp.outbox->recipient_is_idle()) )
+                    break;
                 GATHER_STATISTIC( ++my_counters.proxies_bypassed );
-                result = NULL;
-                __TBB_ASSERT( skip_and_bump < 2, NULL );
-                skip_and_bump = 1; // note we skipped a task
-                goto retry;
             }
+            // The task cannot be executed either due to isolation or proxy contraints.
+            result = NULL;
+            tasks_omitted = true;
+        } else if ( !tasks_omitted ) {
+            // Cleanup the task pool from holes until a task is skipped.
+            __TBB_ASSERT( H0 == H-1, NULL );
+            poison_pointer( victim_pool[H0] );
+            H0 = H;
         }
-        __TBB_ASSERT( result, NULL );
-        // emit "task was consumed" signal
-        ITT_NOTIFY(sync_acquired, (void*)((uintptr_t)&victim_slot+sizeof(uintptr_t)));
-        const size_t H1 = H0 + 1;
-        if ( H1 < H ) {
-            // Some proxies in the task pool have been bypassed. Need to close
-            // the hole left by the stolen task. The following variant:
-            //     victim_pool[H-1] = victim_pool[H0];
-            // is of constant time, but creates a potential for degrading stealing
-            // mechanism efficiency and growing owner's stack size too much because
-            // of moving earlier split off (and thus larger) chunks closer to owner's
-            // end of the deque (tail).
-            // So we use linear time variant that is likely to be amortized to be
-            // near-constant time, though, and preserves stealing efficiency premises.
-            // These changes in the deque must be released to the owner.
-            memmove( victim_pool + H1, victim_pool + H0, (H - H1) * sizeof(task*) );
-            __TBB_store_with_release( victim_slot.head, /*dead: H = */ H1 );
-            if ( (intptr_t)H >= (intptr_t)__TBB_load_relaxed(victim_slot.tail) )
-                skip_and_bump++; // trigger that we bumped head and tail
-        }
-        poison_pointer( victim_pool[H0] );
+    } while ( !result );
+    __TBB_ASSERT( result, NULL );
+
+    // emit "task was consumed" signal
+    ITT_NOTIFY( sync_acquired, (void*)((uintptr_t)&victim_slot+sizeof( uintptr_t )) );
+    poison_pointer( victim_pool[H-1] );
+    if ( tasks_omitted ) {
+        // Some proxies in the task pool have been omitted. Set the stolen task to NULL.
+        victim_pool[H-1] = NULL;
+        __TBB_store_relaxed( victim_slot.head, /*dead: H = */ H0 );
     }
-
+unlock:
     unlock_task_pool( &victim_slot, victim_pool );
-    __TBB_ASSERT( skip_and_bump <= 2, NULL );
 #if __TBB_PREFETCHING
     __TBB_cl_evict(&victim_slot.head);
     __TBB_cl_evict(&victim_slot.tail);
 #endif
-    if( --skip_and_bump > 0 ) { // if both: task skipped and head&tail bumped
-        // Synchronize with snapshot as we bumped head and tail which can falsely trigger EMPTY state
-        atomic_fence();
-        my_arena->advertise_new_work</*Spawned=*/true>();
-    }
+    if ( tasks_omitted )
+        // Synchronize with snapshot as the head and tail can be bumped which can falsely trigger EMPTY state
+        my_arena->advertise_new_work<arena::wakeup>();
     return result;
 }
 
-task* generic_scheduler::get_mailbox_task() {
+task* generic_scheduler::get_mailbox_task( __TBB_ISOLATION_EXPR( isolation_tag isolation ) ) {
     __TBB_ASSERT( my_affinity_id>0, "not in arena" );
-    while ( task_proxy* const tp = my_inbox.pop() ) {
+    while ( task_proxy* const tp = my_inbox.pop( __TBB_ISOLATION_EXPR( isolation ) ) ) {
         if ( task* result = tp->extract_task<task_proxy::mailbox_bit>() ) {
             ITT_NOTIFY( sync_acquired, my_inbox.outbox() );
             result->prefix().extra_state |= es_task_is_stolen;
@@ -1022,8 +1124,7 @@ task* generic_scheduler::get_mailbox_task() {
     return NULL;
 }
 
-// TODO: Rename to publish_task_pool
-void generic_scheduler::enter_arena() {
+inline void generic_scheduler::publish_task_pool() {
     __TBB_ASSERT ( my_arena, "no arena: initialization not completed?" );
     __TBB_ASSERT ( my_arena_index < my_arena->my_num_slots, "arena slot index is out-of-bound" );
     __TBB_ASSERT ( my_arena_slot == &my_arena->my_slots[my_arena_index], NULL);
@@ -1035,8 +1136,8 @@ void generic_scheduler::enter_arena() {
     __TBB_store_with_release( my_arena_slot->task_pool, my_arena_slot->task_pool_ptr );
 }
 
-void generic_scheduler::leave_arena() {
-    __TBB_ASSERT( in_arena(), "Not in arena" );
+inline void generic_scheduler::leave_task_pool() {
+    __TBB_ASSERT( is_task_pool_published(), "Not in arena" );
     // Do not reset my_arena_index. It will be used to (attempt to) re-acquire the slot next time
     __TBB_ASSERT( &my_arena->my_slots[my_arena_index] == my_arena_slot, "arena slot and slot index mismatch" );
     __TBB_ASSERT ( my_arena_slot->task_pool == LockedTaskPool, "Task pool must be locked when leaving arena" );
@@ -1049,63 +1150,55 @@ void generic_scheduler::leave_arena() {
 }
 
 generic_scheduler* generic_scheduler::create_worker( market& m, size_t index ) {
-    generic_scheduler* s = allocate_scheduler( NULL, index ); // index is not a real slot in arena
-#if __TBB_TASK_GROUP_CONTEXT
-    s->my_dummy_task->prefix().context = &the_dummy_context;
-    // Sync up the local cancellation state with the global one. No need for fence here.
-    s->my_context_state_propagation_epoch = the_context_state_propagation_epoch;
-#endif /* __TBB_TASK_GROUP_CONTEXT */
-    s->my_market = &m;
+    generic_scheduler* s = allocate_scheduler( m );
+    __TBB_ASSERT(index, "workers should have index > 0");
+    s->my_arena_index = index; // index is not a real slot in arena yet
+    s->my_dummy_task->prefix().ref_count = 2;
+    s->my_properties.type = scheduler_properties::worker;
+    // Do not call init_stack_info before the scheduler is set as master or worker.
     s->init_stack_info();
-#if __TBB_TASK_PRIORITY
-    s->my_ref_top_priority = &s->my_market->my_global_top_priority;
-    s->my_ref_reload_epoch = &s->my_market->my_global_reload_epoch;
-#endif /* __TBB_TASK_PRIORITY */
+    governor::sign_on(s);
     return s;
 }
 
 // TODO: make it a member method
-generic_scheduler* generic_scheduler::create_master( arena& a ) {
-    generic_scheduler* s = allocate_scheduler( &a, 0 /*Master thread always occupies the first slot*/ );
-    s->my_market = &market::global_market(); // increases market's ref count
-
+generic_scheduler* generic_scheduler::create_master( arena* a ) {
+    // add an internal market reference; the public reference is possibly added in create_arena
+    generic_scheduler* s = allocate_scheduler( market::global_market(/*is_public=*/false) );
+    __TBB_ASSERT( !s->my_arena, NULL );
+    __TBB_ASSERT( s->my_market, NULL );
     task& t = *s->my_dummy_task;
-    s->my_innermost_running_task = &t;
-    s->my_dispatching_task = &t;
+    s->my_properties.type = scheduler_properties::master;
     t.prefix().ref_count = 1;
-    governor::sign_on(s);
-    __TBB_ASSERT( &task::self()==&t, "governor::sign_on failed?" );
 #if __TBB_TASK_GROUP_CONTEXT
-    // Context to be used by root tasks by default (if the user has not specified one).
-    // Allocation is done by NFS allocator because we cannot reuse memory allocated
-    // for task objects since the free list is empty at the moment.
-    t.prefix().context = a.my_default_ctx;
+    t.prefix().context = new ( NFS_Allocate(1, sizeof(task_group_context), NULL) )
+            task_group_context( task_group_context::isolated, task_group_context::default_traits );
+#if __TBB_FP_CONTEXT
+    s->default_context()->capture_fp_settings();
+#endif
+    // Do not call init_stack_info before the scheduler is set as master or worker.
+    s->init_stack_info();
+    context_state_propagation_mutex_type::scoped_lock lock(the_context_state_propagation_mutex);
+    s->my_market->my_masters.push_front( *s );
+    lock.release();
 #endif /* __TBB_TASK_GROUP_CONTEXT */
-    __TBB_ASSERT( s->my_arena_index == 0, "Master thread must occupy the first slot in its arena" );
-    s->attach_mailbox(1);
-    s->my_arena_slot = a.my_slots + 0;
+    if( a ) {
+    // Master thread always occupies the first slot
+        s->attach_arena( a, /*index*/0, /*is_master*/true );
     s->my_arena_slot->my_scheduler = s;
+        a->my_default_ctx = s->default_context(); // also transfers implied ownership
+    }
+    __TBB_ASSERT( s->my_arena_index == 0, "Master thread must occupy the first slot in its arena" );
+    governor::sign_on(s);
+
 #if _WIN32||_WIN64
-    __TBB_ASSERT( s->my_market, NULL );
     s->my_market->register_master( s->master_exec_resource );
 #endif /* _WIN32||_WIN64 */
-    s->init_stack_info();
-#if __TBB_TASK_GROUP_CONTEXT
-    // Sync up the local cancellation state with the global one. No need for fence here.
-    s->my_context_state_propagation_epoch = the_context_state_propagation_epoch;
+    // Process any existing observers.
+#if __TBB_ARENA_OBSERVER
+    __TBB_ASSERT( !a || a->my_observers.empty(), "Just created arena cannot have any observers associated with it" );
 #endif
-#if __TBB_TASK_PRIORITY
-    // In the current implementation master threads continue processing even when
-    // there are other masters with higher priority. Only TBB worker threads are
-    // redistributed between arenas based on the latters' priority. Thus master
-    // threads use arena's top priority as a reference point (in contrast to workers
-    // that use my_market->my_global_top_priority).
-    s->my_ref_top_priority = &s->my_arena->my_top_priority;
-    s->my_ref_reload_epoch = &s->my_arena->my_reload_epoch;
-#endif /* __TBB_TASK_PRIORITY */
 #if __TBB_SCHEDULER_OBSERVER
-    // Process any existing observers.
-    __TBB_ASSERT( a.my_observers.empty(), "Just created arena cannot have any observers associated with it" );
     the_global_observer_list.notify_entry_observers( s->my_last_global_observer, /*worker=*/false );
 #endif /* __TBB_SCHEDULER_OBSERVER */
     return s;
@@ -1121,69 +1214,60 @@ void generic_scheduler::cleanup_worker( void* arg, bool worker ) {
     s.free_scheduler();
 }
 
-void generic_scheduler::cleanup_master() {
-    generic_scheduler& s = *this; // for similarity with cleanup_worker
-    __TBB_ASSERT( s.my_arena_slot, NULL);
-#if __TBB_SCHEDULER_OBSERVER
-    s.my_arena->my_observers.notify_exit_observers( s.my_last_local_observer, /*worker=*/false );
-    the_global_observer_list.notify_exit_observers( s.my_last_global_observer, /*worker=*/false );
-#endif /* __TBB_SCHEDULER_OBSERVER */
-    if( in_arena() ) {
+bool generic_scheduler::cleanup_master( bool blocking_terminate ) {
+    arena* const a = my_arena;
+    market * const m = my_market;
+    __TBB_ASSERT( my_market, NULL );
+    if( a && is_task_pool_published() ) {
         acquire_task_pool();
         if ( my_arena_slot->task_pool == EmptyTaskPool ||
              __TBB_load_relaxed(my_arena_slot->head) >= __TBB_load_relaxed(my_arena_slot->tail) )
         {
             // Local task pool is empty
-            leave_arena();
+            leave_task_pool();
         }
         else {
             // Master's local task pool may e.g. contain proxies of affinitized tasks.
             release_task_pool();
             __TBB_ASSERT ( governor::is_set(this), "TLS slot is cleared before the task pool cleanup" );
-            s.local_wait_for_all( *s.my_dummy_task, NULL );
-            __TBB_ASSERT( !in_arena(), NULL );
+            local_wait_for_all( *my_dummy_task, NULL );
+            __TBB_ASSERT( !is_task_pool_published(), NULL );
             __TBB_ASSERT ( governor::is_set(this), "Other thread reused our TLS key during the task pool cleanup" );
         }
     }
-    __TBB_ASSERT( s.my_market, NULL );
-    market *my_market = s.my_market;
+#if __TBB_ARENA_OBSERVER
+    if( a )
+        a->my_observers.notify_exit_observers( my_last_local_observer, /*worker=*/false );
+#endif
+#if __TBB_SCHEDULER_OBSERVER
+    the_global_observer_list.notify_exit_observers( my_last_global_observer, /*worker=*/false );
+#endif /* __TBB_SCHEDULER_OBSERVER */
 #if _WIN32||_WIN64
-    s.my_market->unregister_master( s.master_exec_resource );
+    m->unregister_master( master_exec_resource );
 #endif /* _WIN32||_WIN64 */
-    arena* a = s.my_arena;
-    __TBB_ASSERT(a->my_slots+0 == my_arena_slot, NULL);
+    if( a ) {
+        __TBB_ASSERT(a->my_slots+0 == my_arena_slot, NULL);
 #if __TBB_STATISTICS
-    *my_arena_slot->my_counters += s.my_counters;
+        *my_arena_slot->my_counters += my_counters;
 #endif /* __TBB_STATISTICS */
-#if __TBB_TASK_PRIORITY
-    __TBB_ASSERT( my_arena_slot->my_scheduler, NULL );
-    // Master's scheduler may be locked by a worker taking arena snapshot or by
-    // a thread propagating task group state change across the context tree.
-    while ( as_atomic(my_arena_slot->my_scheduler).compare_and_swap(NULL, this) != this )
-        __TBB_Yield();
-    __TBB_ASSERT( !my_arena_slot->my_scheduler, NULL );
-#else /* !__TBB_TASK_PRIORITY */
-    __TBB_store_with_release(my_arena_slot->my_scheduler, (generic_scheduler*)NULL);
-#endif /* __TBB_TASK_PRIORITY */
+        __TBB_store_with_release(my_arena_slot->my_scheduler, (generic_scheduler*)NULL);
+    }
+#if __TBB_TASK_GROUP_CONTEXT
+    else { // task_group_context ownership was not transferred to arena
+        default_context()->~task_group_context();
+        NFS_Free(default_context());
+    }
+    context_state_propagation_mutex_type::scoped_lock lock(the_context_state_propagation_mutex);
+    my_market->my_masters.remove( *this );
+    lock.release();
+#endif /* __TBB_TASK_GROUP_CONTEXT */
     my_arena_slot = NULL; // detached from slot
-    s.free_scheduler();
-    // Resetting arena to EMPTY state (as earlier TBB versions did) should not be
-    // done here (or anywhere else in the master thread to that matter) because
-    // after introducing arena-per-master logic and fire-and-forget tasks doing
-    // so can result either in arena's premature destruction (at least without
-    // additional costly checks in workers) or in unnecessary arena state changes
-    // (and ensuing workers migration).
-#if __TBB_STATISTICS_EARLY_DUMP
-    GATHER_STATISTIC( a->dump_arena_statistics() );
-#endif
-    // TODO: read global settings for the parameter at that point
-    // if workers are not joining, market can be released from on_thread_leaving(),
-    // so keep copy the state on local stack
-    bool must_join = my_market->join_workers = governor::needsWaitWorkers();
-    a->on_thread_leaving</*is_master*/true>();
-    if( must_join )
-        my_market->wait_workers();
-    my_market->release( /*is_public*/true );
+    free_scheduler(); // do not use scheduler state after this point
+
+    if( a )
+        a->on_thread_leaving<arena::ref_external>();
+    // If there was an associated arena, it added a public market reference
+    return m->release( /*is_public*/ a != NULL, blocking_terminate );
 }
 
 } // namespace internal
@@ -1248,8 +1332,8 @@ void generic_scheduler::cleanup_master() {
     enough information for the main thread on IA-64 architecture (RSE spill area
     and memory stack are allocated as two separate discontinuous chunks of memory),
     and there is no portable way to discern the main and the secondary threads.
-    Thus for OS X* and IA-64 Linux architecture we use the TBB worker stack size for 
-    all threads and use the current stack top as the stack base. This simplified 
+    Thus for macOS* and IA-64 architecture for Linux* OS we use the TBB worker stack size for
+    all threads and use the current stack top as the stack base. This simplified
     approach is based on the following assumptions:
     1) If the default stack size is insufficient for the user app needs, the
     required amount will be explicitly specified by the user at the point of the
diff --git a/src/tbb/scheduler.h b/src/tbb/scheduler.h
index 9276f87..89515a6 100644
--- a/src/tbb/scheduler.h
+++ b/src/tbb/scheduler.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef _TBB_scheduler_H
@@ -28,6 +28,8 @@
 #include "itt_notify.h"
 #include "../rml/include/rml_tbb.h"
 
+#include "intrusive_list.h"
+
 #if __TBB_SURVIVE_THREAD_SWITCH
 #include "cilk-tbb-interop.h"
 #endif /* __TBB_SURVIVE_THREAD_SWITCH */
@@ -42,17 +44,21 @@ struct nested_arena_context;
 // generic_scheduler
 //------------------------------------------------------------------------
 
-#if __TBB_TASK_GROUP_CONTEXT
-struct scheduler_list_node_t {
-    scheduler_list_node_t *my_prev,
-                          *my_next;
-};
-#endif /* __TBB_TASK_GROUP_CONTEXT */
-
 #define EmptyTaskPool ((task**)0)
 #define LockedTaskPool ((task**)~(intptr_t)0)
 
-#define LockedMaster ((generic_scheduler*)~(intptr_t)0)
+//! Bit-field representing properties of a sheduler
+struct scheduler_properties {
+    static const bool worker = false;
+    static const bool master = true;
+    //! Indicates that a scheduler acts as a master or a worker.
+    bool type : 1;
+    //! Indicates that a scheduler is on outermost level.
+    /**  Note that the explicit execute method will set this property. **/
+    bool outermost : 1;
+    //! Reserved bits
+    unsigned char : 6;
+};
 
 struct scheduler_state {
     //! Index of the arena slot the scheduler occupies now, or occupied last time.
@@ -64,14 +70,9 @@ struct scheduler_state {
     //! The arena that I own (if master) or am servicing at the moment (if worker)
     arena* my_arena;
 
-    //! Innermost task whose task::execute() is running.
+    //! Innermost task whose task::execute() is running. A dummy task on the outermost level.
     task* my_innermost_running_task;
 
-    //! Task, in the context of which the current TBB dispatch loop is running.
-    /** Outside of or in the outermost dispatch loop (not in a nested call to
-        wait_for_all) it is my_dummy_task for master threads, and NULL for workers. **/
-    task* my_dispatching_task;
-
     mail_inbox my_inbox;
 
     //! The mailbox id assigned to this scheduler.
@@ -79,16 +80,21 @@ struct scheduler_state {
         TODO: how are id's being garbage collected?
         TODO: master thread may enter arena and leave and then reenter.
                 We want to give it the same affinity_id upon reentry, if practical.
+        TODO: investigate if it makes sense to merge this field into scheduler_properties.
       */
     affinity_id my_affinity_id;
 
+    scheduler_properties my_properties;
+
 #if __TBB_SCHEDULER_OBSERVER
     //! Last observer in the global observers list processed by this scheduler
     observer_proxy* my_last_global_observer;
+#endif
 
+#if __TBB_ARENA_OBSERVER
     //! Last observer in the local observers list processed by this scheduler
     observer_proxy* my_last_local_observer;
-#endif /* __TBB_SCHEDULER_OBSERVER */
+#endif
 #if __TBB_TASK_PRIORITY
     //! Latest known highest priority of tasks in the market or arena.
     /** Master threads currently tracks only tasks in their arenas, while workers
@@ -107,7 +113,10 @@ struct scheduler_state {
     Class generic_scheduler is an abstract base class that contains most of the scheduler,
     except for tweaks specific to processors and tools (e.g. VTune).
     The derived template class custom_scheduler<SchedulerTraits> fills in the tweaks. */
-class generic_scheduler: public scheduler, public ::rml::job, public scheduler_state {
+class generic_scheduler: public scheduler
+                       , public ::rml::job
+                       , public intrusive_list_node
+                       , public scheduler_state {
 public: // almost every class in TBB uses generic_scheduler
 
     //! If sizeof(task) is <=quick_task_size, it is handled on a free list instead of malloc'd.
@@ -126,8 +135,7 @@ public: // almost every class in TBB uses generic_scheduler
 
     static const size_t null_arena_index = ~size_t(0);
 
-    // TODO: Rename into is_task_pool_published()
-    inline bool in_arena () const;
+    inline bool is_task_pool_published () const;
 
     inline bool is_local_task_pool_quiescent () const;
 
@@ -182,21 +190,17 @@ public: // almost every class in TBB uses generic_scheduler
 #endif
     }
 
-    //! Actions common to enter_arena and try_enter_arena
-    void do_enter_arena();
-
-    //! Used by workers to enter the arena 
+    //! Used by workers to enter the task pool
     /** Does not lock the task pool in case if arena slot has been successfully grabbed. **/
-    void enter_arena();
+    void publish_task_pool();
 
-    //! Leave the arena
-    /** Leaving arena automatically releases the task pool if it is locked. **/
-    void leave_arena();
+    //! Leave the task pool
+    /** Leaving task pool automatically releases the task pool if it is locked. **/
+    void leave_task_pool();
 
-    //! Resets head and tail indices to 0, and leaves arena
-    /** Argument specifies whether the task pool is currently locked by the owner
-        (via acquire_task_pool).**/
-    inline void reset_deque_and_leave_arena ( bool locked );
+    //! Resets head and tail indices to 0, and leaves task pool
+    /** The task pool must be locked by the owner (via acquire_task_pool).**/
+    inline void reset_task_pool_and_leave ();
 
     //! Locks victim's task pool, and returns pointer to it. The pointer can be NULL.
     /** Garbles victim_arena_slot->task_pool for the duration of the lock. **/
@@ -229,18 +233,29 @@ public: // almost every class in TBB uses generic_scheduler
 
     //! Get a task from the local pool.
     /** Called only by the pool owner.
-        Returns the pointer to the task or NULL if the pool is empty. 
-        In the latter case compacts the pool. **/
-    task* get_task();
-
+        Returns the pointer to the task or NULL if a suitable task is not found.
+        Resets the pool if it is empty. **/
+    task* get_task( __TBB_ISOLATION_EXPR( isolation_tag isolation ) );
+
+    //! Get a task from the local pool at specified location T.
+    /** Returns the pointer to the task or NULL if the task cannot be executed,
+        e.g. proxy has been deallocated or isolation constraint is not met.
+        tasks_omitted tells if some tasks have been omitted.
+        Called only by the pool owner. The caller should guarantee that the
+        position T is not available for a thief. **/
+#if __TBB_TASK_ISOLATION
+    task* get_task( size_t T, isolation_tag isolation, bool& tasks_omitted );
+#else
+    task* get_task( size_t T );
+#endif /* __TBB_TASK_ISOLATION */
     //! Attempt to get a task from the mailbox.
-    /** Gets a task only if it has not been executed by its sender or a thief 
+    /** Gets a task only if it has not been executed by its sender or a thief
         that has stolen it from the sender's task pool. Otherwise returns NULL.
 
-        This method is intended to be used only by the thread extracting the proxy 
+        This method is intended to be used only by the thread extracting the proxy
         from its mailbox. (In contrast to local task pool, mailbox can be read only
         by its owner). **/
-    task* get_mailbox_task();
+    task* get_mailbox_task( __TBB_ISOLATION_EXPR( isolation_tag isolation ) );
 
     //! True if t is a task_proxy
     static bool is_proxy( const task& t ) {
@@ -248,7 +263,7 @@ public: // almost every class in TBB uses generic_scheduler
     }
 
     //! Steal task from another scheduler's ready pool.
-    task* steal_task( arena_slot& victim_arena_slot );
+    task* steal_task( __TBB_ISOLATION_ARG( arena_slot& victim_arena_slot, isolation_tag isolation ) );
 
     /** Initial size of the task deque sufficient to serve without reallocation
         4 nested parallel_for calls with iteration space of 65535 grains each. **/
@@ -260,10 +275,10 @@ public: // almost every class in TBB uses generic_scheduler
     size_t prepare_task_pool( size_t n );
 
     //! Initialize a scheduler for a master thread.
-    static generic_scheduler* create_master( arena& a );
+    static generic_scheduler* create_master( arena* a );
 
     //! Perform necessary cleanup when a master thread stops using TBB.
-    void cleanup_master();
+    bool cleanup_master( bool blocking_terminate );
 
     //! Initialize a scheduler for a worker thread.
     static generic_scheduler* create_worker( market& m, size_t index );
@@ -273,7 +288,7 @@ public: // almost every class in TBB uses generic_scheduler
 
 protected:
     template<typename SchedulerTraits> friend class custom_scheduler;
-    generic_scheduler( arena*, size_t index );
+    generic_scheduler( market & );
 
 public:
 #if TBB_USE_ASSERT > 1
@@ -284,23 +299,19 @@ public:
     void assert_task_pool_valid() const {}
 #endif /* TBB_USE_ASSERT <= 1 */
 
-#if __TBB_TASK_ARENA
-    void nested_arena_entry(arena*, nested_arena_context &, bool);
-    void nested_arena_exit(nested_arena_context &);
+    void attach_arena( arena*, size_t index, bool is_master );
+    void nested_arena_entry( arena*, size_t, nested_arena_context &, bool );
+    void nested_arena_exit( nested_arena_context & );
     void wait_until_empty();
-#endif
 
-    /*override*/ 
-    void spawn( task& first, task*& next );
+    void spawn( task& first, task*& next ) __TBB_override;
 
-    /*override*/ 
-    void spawn_root_and_wait( task& first, task*& next );
+    void spawn_root_and_wait( task& first, task*& next ) __TBB_override;
 
-    /*override*/ 
-    void enqueue( task&, void* reserved );
+    void enqueue( task&, void* reserved ) __TBB_override;
 
-    void local_spawn( task& first, task*& next );
-    void local_spawn_root_and_wait( task& first, task*& next );
+    void local_spawn( task* first, task*& next );
+    void local_spawn_root_and_wait( task* first, task*& next );
     virtual void local_wait_for_all( task& parent, task* child ) = 0;
 
     //! Destroy and deallocate this scheduler object
@@ -308,7 +319,7 @@ public:
 
     //! Allocate task object, either from the heap or a free list.
     /** Returns uninitialized task object with initialized prefix. */
-    task& allocate_task( size_t number_of_bytes, 
+    task& allocate_task( size_t number_of_bytes,
                        __TBB_CONTEXT_ARG(task* parent, task_group_context* context) );
 
     //! Put task on free list.
@@ -320,29 +331,22 @@ public:
     inline void deallocate_task( task& t );
 
     //! True if running on a worker thread, false otherwise.
-    inline bool is_worker();
+    inline bool is_worker() const;
+
+    //! True if the scheduler is on the outermost dispatch level.
+    inline bool outermost_level() const;
 
     //! True if the scheduler is on the outermost dispatch level in a master thread.
     /** Returns true when this scheduler instance is associated with an application
-        thread, and is not executing any TBB task. This includes being in a TBB 
+        thread, and is not executing any TBB task. This includes being in a TBB
         dispatch loop (one of wait_for_all methods) invoked directly from that thread. **/
     inline bool master_outermost_level () const;
 
     //! True if the scheduler is on the outermost dispatch level in a worker thread.
     inline bool worker_outermost_level () const;
 
-#if __TBB_TASK_GROUP_CONTEXT
-    //! Returns task group context used by this scheduler instance.
-    /** This context is associated with root tasks created by a master thread 
-        without explicitly specified context object outside of any running task.
-
-        Note that the default context of a worker thread is never accessed by
-        user code (directly or indirectly). **/
-    inline task_group_context* default_context ();
-#endif /* __TBB_TASK_GROUP_CONTEXT */
-
-    //! Returns number of worker threads in the arena this thread belongs to.
-    unsigned number_of_workers_in_my_arena();
+    //! Returns the concurrency limit of the current arena.
+    unsigned max_threads_in_arena();
 
 #if __TBB_COUNT_TASK_NODES
     intptr_t get_task_node_count( bool count_arena_workers = false );
@@ -351,20 +355,29 @@ public:
     //! Special value used to mark my_return_list as not taking any more entries.
     static task* plugged_return_list() {return (task*)(intptr_t)(-1);}
 
-    //! Number of small tasks that have been allocated by this scheduler. 
+    //! Number of small tasks that have been allocated by this scheduler.
     __TBB_atomic intptr_t my_small_task_count;
 
     //! List of small tasks that have been returned to this scheduler by other schedulers.
+    // TODO IDEA: see if putting my_return_list on separate cache line improves performance
     task* my_return_list;
 
     //! Try getting a task from other threads (via mailbox, stealing, FIFO queue, orphans adoption).
     /** Returns obtained task or NULL if all attempts fail. */
-    virtual task* receive_or_steal_task( __TBB_atomic reference_count& completion_ref_count ) = 0;
+    virtual task* receive_or_steal_task( __TBB_ISOLATION_ARG( __TBB_atomic reference_count& completion_ref_count, isolation_tag isolation ) ) = 0;
 
-    //! Free a small task t that that was allocated by a different scheduler 
-    void free_nonlocal_small_task( task& t ); 
+    //! Free a small task t that that was allocated by a different scheduler
+    void free_nonlocal_small_task( task& t );
 
 #if __TBB_TASK_GROUP_CONTEXT
+    //! Returns task group context used by this scheduler instance.
+    /** This context is associated with root tasks created by a master thread
+        without explicitly specified context object outside of any running task.
+
+        Note that the default context of a worker thread is never accessed by
+        user code (directly or indirectly). **/
+    inline task_group_context* default_context ();
+
     //! Padding isolating thread-local members from members that can be written to by other threads.
     char _padding1[NFS_MaxLineSize - sizeof(context_list_node_t)];
 
@@ -375,18 +388,18 @@ public:
     // TODO: check whether it can be deadly preempted and replace by spinning/sleeping mutex
     spin_mutex my_context_list_mutex;
 
-    //! Last state propagation epoch known to this thread 
+    //! Last state propagation epoch known to this thread
     /** Together with the_context_state_propagation_epoch constitute synchronization protocol
-        that keeps hot path of task group context construction destruction mostly 
+        that keeps hot path of task group context construction destruction mostly
         lock-free.
         When local epoch equals the global one, the state of task group contexts
         registered with this thread is consistent with that of the task group trees
         they belong to. **/
     uintptr_t my_context_state_propagation_epoch;
 
-    //! Flag indicating that a context is being destructed by its owner thread 
+    //! Flag indicating that a context is being destructed by its owner thread
     /** Together with my_nonlocal_ctx_list_update constitute synchronization protocol
-        that keeps hot path of context destruction (by the owner thread) mostly 
+        that keeps hot path of context destruction (by the owner thread) mostly
         lock-free. **/
     tbb::atomic<uintptr_t> my_local_ctx_list_update;
 
@@ -409,13 +422,17 @@ public:
 
     //! Searches offload area for top priority tasks and reloads found ones into primary task pool.
     /** Returns one of the found tasks or NULL. **/
-    task* reload_tasks ();
+    task* reload_tasks( __TBB_ISOLATION_EXPR( isolation_tag isolation ) );
 
-    task* reload_tasks ( task*& offloaded_tasks, task**& offloaded_task_list_link, intptr_t top_priority );
+    task* reload_tasks( task*& offloaded_tasks, task**& offloaded_task_list_link, __TBB_ISOLATION_ARG( intptr_t top_priority, isolation_tag isolation ) );
 
     //! Moves tasks with priority below the top one from primary task pool into offload area.
     /** Returns the next execution candidate task or NULL. **/
-    task* winnow_task_pool ();
+    task* winnow_task_pool ( __TBB_ISOLATION_EXPR( isolation_tag isolation ) );
+
+    //! Get a task from locked or empty pool in range [H0, T0). Releases or unlocks the task pool.
+    /** Returns the found task or NULL. **/
+    task *get_task_and_activate_task_pool( size_t H0 , __TBB_ISOLATION_ARG( size_t T0, isolation_tag isolation ) );
 
     //! Unconditionally moves the task into offload area.
     inline void offload_task ( task& t, intptr_t task_priority );
@@ -506,7 +523,7 @@ public:
 namespace tbb {
 namespace internal {
 
-inline bool generic_scheduler::in_arena () const {
+inline bool generic_scheduler::is_task_pool_published () const {
     __TBB_ASSERT(my_arena_slot, 0);
     return my_arena_slot->task_pool != EmptyTaskPool;
 }
@@ -527,12 +544,16 @@ inline bool generic_scheduler::is_quiescent_local_task_pool_reset () const {
     return __TBB_load_relaxed(my_arena_slot->head) == 0 && __TBB_load_relaxed(my_arena_slot->tail) == 0;
 }
 
+inline bool generic_scheduler::outermost_level () const {
+    return my_properties.outermost;
+}
+
 inline bool generic_scheduler::master_outermost_level () const {
-    return my_dispatching_task == my_dummy_task;
+    return !is_worker() && outermost_level();
 }
 
 inline bool generic_scheduler::worker_outermost_level () const {
-    return !my_dispatching_task;
+    return is_worker() && outermost_level();
 }
 
 #if __TBB_TASK_GROUP_CONTEXT
@@ -547,12 +568,13 @@ inline void generic_scheduler::attach_mailbox( affinity_id id ) {
     my_affinity_id = id;
 }
 
-inline bool generic_scheduler::is_worker() {
-    return my_arena_index != 0; //TODO: rework for multiple master
+inline bool generic_scheduler::is_worker() const {
+    return my_properties.type == scheduler_properties::worker;
 }
 
-inline unsigned generic_scheduler::number_of_workers_in_my_arena() {
-    return my_arena->my_max_num_workers;
+inline unsigned generic_scheduler::max_threads_in_arena() {
+    __TBB_ASSERT(my_arena, NULL);
+    return my_arena->my_num_slots;
 }
 
 //! Return task object to the memory allocator.
@@ -560,7 +582,7 @@ inline void generic_scheduler::deallocate_task( task& t ) {
 #if TBB_USE_ASSERT
     task_prefix& p = t.prefix();
     p.state = 0xFF;
-    p.extra_state = 0xFF; 
+    p.extra_state = 0xFF;
     poison_pointer(p.next);
 #endif /* TBB_USE_ASSERT */
     NFS_Free((char*)&t-task_prefix_reservation_size);
@@ -575,12 +597,11 @@ inline intptr_t generic_scheduler::get_task_node_count( bool count_arena_workers
 }
 #endif /* __TBB_COUNT_TASK_NODES */
 
-inline void generic_scheduler::reset_deque_and_leave_arena ( bool locked ) {
-    if ( !locked )
-        acquire_task_pool();
+inline void generic_scheduler::reset_task_pool_and_leave () {
+    __TBB_ASSERT( my_arena_slot->task_pool == LockedTaskPool, "Task pool must be locked when resetting task pool" );
     __TBB_store_relaxed( my_arena_slot->tail, 0 );
     __TBB_store_relaxed( my_arena_slot->head, 0 );
-    leave_arena();
+    leave_task_pool();
 }
 
 //TODO: move to arena_slot
@@ -597,9 +618,9 @@ void generic_scheduler::commit_relocated_tasks ( size_t new_tail ) {
     __TBB_ASSERT( is_local_task_pool_quiescent(),
                   "Task pool must be locked when calling commit_relocated_tasks()" );
     __TBB_store_relaxed( my_arena_slot->head, 0 );
-    // Tail is updated last to minimize probability of a thread making arena 
+    // Tail is updated last to minimize probability of a thread making arena
     // snapshot being misguided into thinking that this task pool is empty.
-    __TBB_store_relaxed( my_arena_slot->tail, new_tail );
+    __TBB_store_release( my_arena_slot->tail, new_tail );
     release_task_pool();
 }
 
@@ -651,13 +672,17 @@ inline intptr_t generic_scheduler::effective_reference_priority () const {
     // a lower priority arena, they should use arena's priority as a reference, lest
     // be trapped in a futile spinning (because market's priority would prohibit
     // executing ANY tasks in this arena).
-    return !worker_outermost_level() || 
-            my_arena->my_num_workers_allotted < my_arena->num_workers_active()
-            ? *my_ref_top_priority : my_arena->my_top_priority;
+    return !worker_outermost_level() ||
+        (my_arena->my_num_workers_allotted < my_arena->num_workers_active()
+#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY
+         && my_arena->my_concurrency_mode!=arena_base::cm_enforced_global
+#endif
+            ) ? *my_ref_top_priority : my_arena->my_top_priority;
 }
 
 inline void generic_scheduler::offload_task ( task& t, intptr_t /*priority*/ ) {
     GATHER_STATISTIC( ++my_counters.prio_tasks_offloaded );
+    __TBB_ASSERT( !is_proxy(t), "The proxy task cannot be offloaded" );
     __TBB_ASSERT( my_offloaded_task_list_tail_link && !*my_offloaded_task_list_tail_link, NULL );
 #if TBB_USE_ASSERT
     t.prefix().state = task::ready;
diff --git a/src/tbb/scheduler_common.h b/src/tbb/scheduler_common.h
index d5ee8e4..02a39d2 100644
--- a/src/tbb/scheduler_common.h
+++ b/src/tbb/scheduler_common.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef _TBB_scheduler_common_H
@@ -64,6 +64,15 @@
     #define __TBB_CONTEXT_ARG(arg1, context) arg1
 #endif /* !__TBB_TASK_GROUP_CONTEXT */
 
+#if __TBB_TASK_ISOLATION
+    #define __TBB_ISOLATION_EXPR(isolation) isolation
+    #define __TBB_ISOLATION_ARG(arg1, isolation) arg1, isolation
+#else
+    #define __TBB_ISOLATION_EXPR(isolation)
+    #define __TBB_ISOLATION_ARG(arg1, isolation) arg1
+#endif /* __TBB_TASK_ISOLATION */
+
+
 #if DO_TBB_TRACE
 #include <cstdio>
 #define TBB_TRACE(x) ((void)std::printf x)
@@ -120,6 +129,8 @@ inline void assert_priority_valid ( intptr_t p ) {
 inline intptr_t& priority ( task& t ) {
     return t.prefix().context->my_priority;
 }
+#else /* __TBB_TASK_PRIORITY */
+static const intptr_t num_priority_levels = 1;
 #endif /* __TBB_TASK_PRIORITY */
 
 //! Mutex type for global locks in the scheduler
@@ -205,14 +216,14 @@ inline bool is_alive( uintptr_t v ) { return v != venom; }
 
 /** Logically, this method should be a member of class task.
     But we do not want to publish it, so it is here instead. */
-inline void assert_task_valid( const task& task ) {
-    __TBB_ASSERT( &task!=NULL, NULL );
+inline void assert_task_valid( const task* task ) {
+    __TBB_ASSERT( task!=NULL, NULL );
     __TBB_ASSERT( !is_poisoned(&task), NULL );
-    __TBB_ASSERT( (uintptr_t)&task % task_alignment == 0, "misaligned task" );
+    __TBB_ASSERT( (uintptr_t)task % task_alignment == 0, "misaligned task" );
 #if __TBB_RECYCLE_TO_ENQUEUE
-    __TBB_ASSERT( (unsigned)task.state()<=(unsigned)task::to_enqueue, "corrupt task (invalid state)" );
+    __TBB_ASSERT( (unsigned)task->state()<=(unsigned)task::to_enqueue, "corrupt task (invalid state)" );
 #else
-    __TBB_ASSERT( (unsigned)task.state()<=(unsigned)task::recycle, "corrupt task (invalid state)" );
+    __TBB_ASSERT( (unsigned)task->state()<=(unsigned)task::recycle, "corrupt task (invalid state)" );
 #endif
 }
 
@@ -222,7 +233,7 @@ inline void assert_task_valid( const task& task ) {
     the variable used as its argument may be undefined in release builds. **/
 #define poison_value(g) ((void)0)
 
-inline void assert_task_valid( const task& ) {}
+inline void assert_task_valid( const task* ) {}
 
 #endif /* !TBB_USE_ASSERT */
 
@@ -246,6 +257,7 @@ inline bool CancellationInfoPresent ( task& t ) {
             runtime_warning( "Exact exception propagation is requested by application but the linked library is built without support for it");
         return src;
     }
+    #define TbbRethrowException(TbbCapturedException) (TbbCapturedException)->throw_self()
 #else
     // Using macro instead of an inline function here allows to avoid evaluation of the
     // TbbCapturedException expression when exact propagation is enabled for the context.
@@ -253,6 +265,11 @@ inline bool CancellationInfoPresent ( task& t ) {
         context->my_version_and_traits & task_group_context::exact_exception    \
             ? tbb_exception_ptr::allocate()    \
             : tbb_exception_ptr::allocate( *(TbbCapturedException) );
+    #define TbbRethrowException(TbbCapturedException) \
+        { \
+            if( governor::rethrow_exception_broken() ) fix_broken_rethrow(); \
+            (TbbCapturedException)->throw_self(); \
+        }
 #endif /* !TBB_USE_CAPTURED_EXCEPTION */
 
 #define TbbRegisterCurrentException(context, TbbCapturedException) \
@@ -276,6 +293,35 @@ inline bool ConcurrentWaitsEnabled ( task& t ) { return false; }
 
 #endif /* __TBB_TASK_GROUP_CONTEXT */
 
+inline void prolonged_pause() {
+#if defined(__TBB_time_stamp) && !__TBB_STEALING_PAUSE
+    // Assumption based on practice: 1000-2000 ticks seems to be a suitable invariant for the
+    // majority of platforms. Currently, skip platforms that define __TBB_STEALING_PAUSE
+    // because these platforms require very careful tuning.
+    machine_tsc_t prev = __TBB_time_stamp();
+    const machine_tsc_t finish = prev + 1000;
+    atomic_backoff backoff;
+    do {
+        backoff.bounded_pause();
+        machine_tsc_t curr = __TBB_time_stamp();
+        if ( curr <= prev )
+            // Possibly, the current logical thread is moved to another hardware thread or overflow is occurred.
+            break;
+        prev = curr;
+    } while ( prev < finish );
+#else
+#ifdef __TBB_STEALING_PAUSE
+    static const long PauseTime = __TBB_STEALING_PAUSE;
+#elif __TBB_ipf
+    static const long PauseTime = 1500;
+#else
+    static const long PauseTime = 80;
+#endif
+    // TODO IDEA: Update PauseTime adaptively?
+    __TBB_Pause(PauseTime);
+#endif
+}
+
 //------------------------------------------------------------------------
 // arena_slot
 //------------------------------------------------------------------------
@@ -338,11 +384,8 @@ struct arena_slot : padded<arena_slot_line1>, padded<arena_slot_line2> {
 
     //! Deallocate task pool that was allocated by means of allocate_task_pool.
     void free_task_pool( ) {
-#if !__TBB_TASK_ARENA
-        __TBB_ASSERT( !task_pool /*TODO: == EmptyTaskPool*/, NULL);
-#else
-        //TODO: understand the assertion and modify
-#endif
+        // TODO: understand the assertion and modify
+        // __TBB_ASSERT( !task_pool /*TODO: == EmptyTaskPool*/, NULL);
         if( task_pool_ptr ) {
            __TBB_ASSERT( my_task_pool_size, NULL);
            NFS_Free( task_pool_ptr );
diff --git a/src/tbb/scheduler_utility.h b/src/tbb/scheduler_utility.h
index fc268a0..5c22859 100644
--- a/src/tbb/scheduler_utility.h
+++ b/src/tbb/scheduler_utility.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef _TBB_scheduler_utility_H
@@ -35,7 +35,7 @@ class auto_empty_task {
     task* my_task;
     generic_scheduler* my_scheduler;
 public:
-    auto_empty_task ( __TBB_CONTEXT_ARG(generic_scheduler *s, task_group_context* context) ) 
+    auto_empty_task ( __TBB_CONTEXT_ARG(generic_scheduler *s, task_group_context* context) )
         : my_task( new(&s->allocate_task(sizeof(empty_task), __TBB_CONTEXT_ARG(NULL, context))) empty_task )
         , my_scheduler(s)
     {}
@@ -54,7 +54,7 @@ public:
 //! Vector that grows without reallocations, and stores items in the reverse order.
 /** Requires to initialize its first segment with a preallocated memory chunk
     (usually it is static array or an array allocated on the stack).
-    The second template parameter specifies maximal number of segments. Each next 
+    The second template parameter specifies maximal number of segments. Each next
     segment is twice as large as the previous one. **/
 template<typename T, size_t max_segments = 16>
 class fast_reverse_vector
@@ -91,7 +91,7 @@ public:
         m_cur_segment[--m_pos] = val;
     }
 
-    //! Copies the contents of the vector into the dst array. 
+    //! Copies the contents of the vector into the dst array.
     /** Can only be used when T is a POD type, as copying does not invoke copy constructors. **/
     void copy_memory ( T* dst ) const
     {
@@ -118,7 +118,7 @@ protected:
 
     //! Array of segments (has fixed size specified by the second template parameter)
     T       *m_segments[max_segments];
-    
+
     //! Number of segments (the size of m_segments)
     size_t  m_num_segments;
 
diff --git a/src/tbb/semaphore.cpp b/src/tbb/semaphore.cpp
index 8c5a531..4c6d853 100644
--- a/src/tbb/semaphore.cpp
+++ b/src/tbb/semaphore.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "semaphore.h"
@@ -74,7 +74,7 @@ inline void init_concmon_module()
 binary_semaphore::binary_semaphore() {
     atomic_do_once( &init_concmon_module, concmon_module_inited );
 
-    __TBB_init_binsem( &my_sem.lock ); 
+    __TBB_init_binsem( &my_sem.lock );
     if( (uintptr_t)__TBB_init_binsem!=(uintptr_t)&init_binsem_using_event )
         P();
 }
diff --git a/src/tbb/semaphore.h b/src/tbb/semaphore.h
index 57628aa..43af24a 100644
--- a/src/tbb/semaphore.h
+++ b/src/tbb/semaphore.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_tbb_semaphore_H
@@ -55,7 +55,7 @@ public:
     ~semaphore() {CloseHandle( sem );}
     //! wait/acquire
     void P() {WaitForSingleObjectEx( sem, INFINITE, FALSE );}
-    //! post/release 
+    //! post/release
     void V() {ReleaseSemaphore( sem, 1, NULL );}
 private:
     HANDLE sem;
@@ -75,14 +75,14 @@ public:
         __TBB_ASSERT_EX( ret==err_none, NULL );
     }
     //! wait/acquire
-    void P() { 
+    void P() {
         int ret;
         do {
             ret = semaphore_wait( sem );
         } while( ret==KERN_ABORTED );
         __TBB_ASSERT( ret==KERN_SUCCESS, "semaphore_wait() failed" );
     }
-    //! post/release 
+    //! post/release
     void V() { semaphore_signal( sem ); }
 private:
     semaphore_t sem;
@@ -109,7 +109,7 @@ public:
         while( sem_wait( &sem )!=0 )
             __TBB_ASSERT( errno==EINTR, NULL );
     }
-    //! post/release 
+    //! post/release
     void V() { sem_post( &sem ); }
 private:
     sem_t sem;
@@ -133,7 +133,7 @@ public:
     ~binary_semaphore() { CloseHandle( my_sem ); }
     //! wait/acquire
     void P() { WaitForSingleObjectEx( my_sem, INFINITE, FALSE ); }
-    //! post/release 
+    //! post/release
     void V() { SetEvent( my_sem ); }
 private:
     HANDLE my_sem;
@@ -154,7 +154,7 @@ public:
     ~binary_semaphore();
     //! wait/acquire
     void P();
-    //! post/release 
+    //! post/release
     void V();
 private:
     srwl_or_handle my_sem;
@@ -175,14 +175,14 @@ public:
         __TBB_ASSERT_EX( ret==err_none, NULL );
     }
     //! wait/acquire
-    void P() { 
+    void P() {
         int ret;
         do {
             ret = semaphore_wait( my_sem );
         } while( ret==KERN_ABORTED );
         __TBB_ASSERT( ret==KERN_SUCCESS, "semaphore_wait() failed" );
     }
-    //! post/release 
+    //! post/release
     void V() { semaphore_signal( my_sem ); }
 private:
     semaphore_t my_sem;
@@ -208,8 +208,8 @@ public:
             }
         }
     }
-    //! post/release 
-    void V() { 
+    //! post/release
+    void V() {
         __TBB_ASSERT( my_sem>=1, "multiple V()'s in a row?" );
         if( my_sem--!=1 ) {
             //if old value was 2
@@ -240,7 +240,7 @@ public:
         while( sem_wait( &my_sem )!=0 )
             __TBB_ASSERT( errno==EINTR, NULL );
     }
-    //! post/release 
+    //! post/release
     void V() { sem_post( &my_sem ); }
 private:
     sem_t my_sem;
diff --git a/src/tbb/spin_mutex.cpp b/src/tbb/spin_mutex.cpp
index 759194d..6fab769 100644
--- a/src/tbb/spin_mutex.cpp
+++ b/src/tbb/spin_mutex.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/tbb_machine.h"
diff --git a/src/tbb/spin_rw_mutex.cpp b/src/tbb/spin_rw_mutex.cpp
index f21bb61..9b14cc1 100644
--- a/src/tbb/spin_rw_mutex.cpp
+++ b/src/tbb/spin_rw_mutex.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/spin_rw_mutex.h"
@@ -70,7 +70,7 @@ void spin_rw_mutex_v3::internal_acquire_reader()
         state_t s = const_cast<volatile state_t&>(state); // ensure reloading
         if( !(s & (WRITER|WRITER_PENDING)) ) { // no writer or write requests
             state_t t = (state_t)__TBB_FetchAndAddW( &state, (intptr_t) ONE_READER );
-            if( !( t&WRITER )) 
+            if( !( t&WRITER ))
                 break; // successfully stored increased number of readers
             // writer got there first, undo the increment
             __TBB_FetchAndAddW( &state, -(intptr_t)ONE_READER );
diff --git a/src/tbb/task.cpp b/src/tbb/task.cpp
index d093540..12307a9 100644
--- a/src/tbb/task.cpp
+++ b/src/tbb/task.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Do not include task.h directly. Use scheduler_common.h instead
@@ -39,7 +39,7 @@ namespace internal {
 // Methods of allocate_root_proxy
 //------------------------------------------------------------------------
 task& allocate_root_proxy::allocate( size_t size ) {
-    internal::generic_scheduler* v = governor::local_scheduler();
+    internal::generic_scheduler* v = governor::local_scheduler_weak();
     __TBB_ASSERT( v, "thread did not activate a task_scheduler_init object?" );
 #if __TBB_TASK_GROUP_CONTEXT
     task_prefix& p = v->my_innermost_running_task->prefix();
@@ -51,7 +51,7 @@ task& allocate_root_proxy::allocate( size_t size ) {
 }
 
 void allocate_root_proxy::free( task& task ) {
-    internal::generic_scheduler* v = governor::local_scheduler();
+    internal::generic_scheduler* v = governor::local_scheduler_weak();
     __TBB_ASSERT( v, "thread does not have initialized task_scheduler_init object?" );
 #if __TBB_TASK_GROUP_CONTEXT
     // No need to do anything here as long as there is no context -> task connection
@@ -64,7 +64,7 @@ void allocate_root_proxy::free( task& task ) {
 // Methods of allocate_root_with_context_proxy
 //------------------------------------------------------------------------
 task& allocate_root_with_context_proxy::allocate( size_t size ) const {
-    internal::generic_scheduler* s = governor::local_scheduler();
+    internal::generic_scheduler* s = governor::local_scheduler_weak();
     __TBB_ASSERT( s, "Scheduler auto-initialization failed?" );
     __TBB_ASSERT( &my_context, "allocate_root(context) argument is a dereferenced NULL pointer" );
     task& t = s->allocate_task( size, NULL, &my_context );
@@ -82,14 +82,14 @@ task& allocate_root_with_context_proxy::allocate( size_t size ) const {
 #if __TBB_FP_CONTEXT
     if ( __TBB_load_relaxed(my_context.my_kind) == task_group_context::isolated &&
             !(my_context.my_version_and_traits & task_group_context::fp_settings) )
-        my_context.copy_fp_settings( *s->my_arena->my_default_ctx );
+        my_context.copy_fp_settings( *s->default_context() );
 #endif
     ITT_STACK_CREATE(my_context.itt_caller);
     return t;
 }
 
 void allocate_root_with_context_proxy::free( task& task ) const {
-    internal::generic_scheduler* v = governor::local_scheduler();
+    internal::generic_scheduler* v = governor::local_scheduler_weak();
     __TBB_ASSERT( v, "thread does not have initialized task_scheduler_init object?" );
     // No need to do anything here as long as unbinding is performed by context destructor only.
     v->free_task<local_task>( task );
@@ -100,32 +100,32 @@ void allocate_root_with_context_proxy::free( task& task ) const {
 // Methods of allocate_continuation_proxy
 //------------------------------------------------------------------------
 task& allocate_continuation_proxy::allocate( size_t size ) const {
-    task& t = *((task*)this);
+    task* t = (task*)this;
     assert_task_valid(t);
-    generic_scheduler* s = governor::local_scheduler();
-    task* parent = t.parent();
-    t.prefix().parent = NULL;
-    return s->allocate_task( size, __TBB_CONTEXT_ARG(parent, t.prefix().context) );
+    generic_scheduler* s = governor::local_scheduler_weak();
+    task* parent = t->parent();
+    t->prefix().parent = NULL;
+    return s->allocate_task( size, __TBB_CONTEXT_ARG(parent, t->prefix().context) );
 }
 
 void allocate_continuation_proxy::free( task& mytask ) const {
     // Restore the parent as it was before the corresponding allocate was called.
     ((task*)this)->prefix().parent = mytask.parent();
-    governor::local_scheduler()->free_task<local_task>(mytask);
+    governor::local_scheduler_weak()->free_task<local_task>(mytask);
 }
 
 //------------------------------------------------------------------------
 // Methods of allocate_child_proxy
 //------------------------------------------------------------------------
 task& allocate_child_proxy::allocate( size_t size ) const {
-    task& t = *((task*)this);
+    task* t = (task*)this;
     assert_task_valid(t);
-    generic_scheduler* s = governor::local_scheduler();
-    return s->allocate_task( size, __TBB_CONTEXT_ARG(&t, t.prefix().context) );
+    generic_scheduler* s = governor::local_scheduler_weak();
+    return s->allocate_task( size, __TBB_CONTEXT_ARG(t, t->prefix().context) );
 }
 
 void allocate_child_proxy::free( task& mytask ) const {
-    governor::local_scheduler()->free_task<local_task>(mytask);
+    governor::local_scheduler_weak()->free_task<local_task>(mytask);
 }
 
 //------------------------------------------------------------------------
@@ -133,7 +133,7 @@ void allocate_child_proxy::free( task& mytask ) const {
 //------------------------------------------------------------------------
 task& allocate_additional_child_of_proxy::allocate( size_t size ) const {
     parent.increment_ref_count();
-    generic_scheduler* s = governor::local_scheduler();
+    generic_scheduler* s = governor::local_scheduler_weak();
     return s->allocate_task( size, __TBB_CONTEXT_ARG(&parent, parent.prefix().context) );
 }
 
@@ -146,7 +146,7 @@ void allocate_additional_child_of_proxy::free( task& task ) const {
     // reference count might have become zero before the corresponding call to
     // allocate_additional_child_of_proxy::allocate.
     parent.internal_decrement_ref_count();
-    governor::local_scheduler()->free_task<local_task>(task);
+    governor::local_scheduler_weak()->free_task<local_task>(task);
 }
 
 //------------------------------------------------------------------------
@@ -154,7 +154,7 @@ void allocate_additional_child_of_proxy::free( task& task ) const {
 //------------------------------------------------------------------------
 size_t get_initial_auto_partitioner_divisor() {
     const size_t X_FACTOR = 4;
-    return X_FACTOR * (1+governor::local_scheduler()->number_of_workers_in_my_arena());
+    return X_FACTOR * governor::local_scheduler()->max_threads_in_arena();
 }
 
 //------------------------------------------------------------------------
@@ -162,7 +162,7 @@ size_t get_initial_auto_partitioner_divisor() {
 //------------------------------------------------------------------------
 void affinity_partitioner_base_v3::resize( unsigned factor ) {
     // Check factor to avoid asking for number of workers while there might be no arena.
-    size_t new_size = factor ? factor*(1+governor::local_scheduler()->number_of_workers_in_my_arena()) : 0;
+    size_t new_size = factor ? factor*governor::local_scheduler()->max_threads_in_arena() : 0;
     if( new_size!=my_size ) {
         if( my_array ) {
             NFS_Free( my_array );
@@ -205,7 +205,7 @@ internal::reference_count task::internal_decrement_ref_count() {
 }
 
 task& task::self() {
-    generic_scheduler *v = governor::local_scheduler();
+    generic_scheduler *v = governor::local_scheduler_weak();
     v->assert_task_pool_valid();
     __TBB_ASSERT( v->my_innermost_running_task, NULL );
     return *v->my_innermost_running_task;
@@ -231,7 +231,7 @@ void interface5::internal::task_base::destroy( task& victim ) {
         parent->internal_decrement_ref_count();
         // Even if the last reference to *parent is removed, it should not be spawned (documented behavior).
     }
-    governor::local_scheduler()->free_task<no_cache>( victim );
+    governor::local_scheduler_weak()->free_task<no_cache>( victim );
 }
 
 void task::spawn_and_wait_for_all( task_list& list ) {
@@ -239,7 +239,7 @@ void task::spawn_and_wait_for_all( task_list& list ) {
     task* t = list.first;
     if( t ) {
         if( &t->prefix().next!=list.next_ptr )
-            s->local_spawn( *t->prefix().next, *list.next_ptr );
+            s->local_spawn( t->prefix().next, *list.next_ptr );
         list.clear();
     }
     s->local_wait_for_all( *this, t );
@@ -254,7 +254,7 @@ void task::note_affinity( affinity_id ) {
 #if __TBB_TASK_GROUP_CONTEXT
 void task::change_group ( task_group_context& ctx ) {
     prefix().context = &ctx;
-    internal::generic_scheduler* s = governor::local_scheduler();
+    internal::generic_scheduler* s = governor::local_scheduler_weak();
     if ( __TBB_load_relaxed(ctx.my_kind) == task_group_context::binding_required ) {
         // If we are in the outermost task dispatch loop of a master thread, then
         // there is nothing to bind this context to, and we skip the binding part
@@ -267,7 +267,7 @@ void task::change_group ( task_group_context& ctx ) {
 #if __TBB_FP_CONTEXT
     if ( __TBB_load_relaxed(ctx.my_kind) == task_group_context::isolated &&
             !(ctx.my_version_and_traits & task_group_context::fp_settings) )
-        ctx.copy_fp_settings( *s->my_arena->my_default_ctx );
+        ctx.copy_fp_settings( *s->default_context() );
 #endif
     ITT_STACK_CREATE(ctx.itt_caller);
 }
diff --git a/src/tbb/task_group_context.cpp b/src/tbb/task_group_context.cpp
index 73265ca..4036a66 100644
--- a/src/tbb/task_group_context.cpp
+++ b/src/tbb/task_group_context.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "scheduler.h"
@@ -317,7 +317,6 @@ void task_group_context::bind_to ( generic_scheduler *local_sched ) {
     __TBB_store_relaxed(my_kind, binding_completed);
 }
 
-#if __TBB_TASK_GROUP_CONTEXT
 template <typename T>
 void task_group_context::propagate_task_group_state ( T task_group_context::*mptr_state, task_group_context& src, T new_state ) {
     if (this->*mptr_state == new_state) {
@@ -386,29 +385,13 @@ bool market::propagate_task_group_state ( T task_group_context::*mptr_state, tas
         if ( s )
             s->propagate_task_group_state( mptr_state, src, new_state );
     }
-    // Propagate to all master threads (under my_arenas_list_mutex lock)
-    ForEachArena(a) { // uses lock on my_arenas_list_mutex
-        arena_slot &slot = a.my_slots[0];
-        generic_scheduler *s = slot.my_scheduler;
-        // If the master is under construction, skip it. Otherwise make sure that it does not
-        // leave its arena and its scheduler get destroyed while we accessing its data.
-        if ( s && as_atomic(slot.my_scheduler).compare_and_swap(LockedMaster, s) == s ) { //TODO: remove need in lock
-            __TBB_ASSERT( slot.my_scheduler == LockedMaster, NULL );
-            // The whole propagation sequence is locked, thus no contention is expected
-            __TBB_ASSERT( s != LockedMaster, NULL );
-            s->propagate_task_group_state( mptr_state, src, new_state );
-            __TBB_store_with_release( slot.my_scheduler, s );
-        }
-    } EndForEach();
+    // Propagate to all master threads
+    // The whole propagation sequence is locked, thus no contention is expected
+    for( scheduler_list_type::iterator it = my_masters.begin(); it != my_masters.end(); it++  )
+        it->propagate_task_group_state( mptr_state, src, new_state );
     return true;
 }
 
-template <typename T>
-bool arena::propagate_task_group_state ( T task_group_context::*mptr_state, task_group_context& src, T new_state ) {
-    return my_market->propagate_task_group_state( mptr_state, src, new_state );
-}
-#endif /* __TBB_TASK_GROUP_CONTEXT */
-
 bool task_group_context::cancel_group_execution () {
     __TBB_ASSERT ( my_cancellation_requested == 0 || my_cancellation_requested == 1, "Invalid cancellation state");
     if ( my_cancellation_requested || as_atomic(my_cancellation_requested).compare_and_swap(1, 0) ) {
@@ -417,7 +400,7 @@ bool task_group_context::cancel_group_execution () {
         // not missing out on any cancellation still being propagated, and a context cannot be uncanceled.)
         return false;
     }
-    governor::local_scheduler()->my_arena->propagate_task_group_state( &task_group_context::my_cancellation_requested, *this, (uintptr_t)1 );
+    governor::local_scheduler_weak()->my_market->propagate_task_group_state( &task_group_context::my_cancellation_requested, *this, (uintptr_t)1 );
     return true;
 }
 
@@ -480,15 +463,20 @@ void task_group_context::set_priority ( priority_t prio ) {
         return;
     my_priority = p;
     internal::generic_scheduler* s = governor::local_scheduler_if_initialized();
-    if ( !s || !s->my_arena->propagate_task_group_state(&task_group_context::my_priority, *this, p) )
+    if ( !s || !s->my_arena || !s->my_market->propagate_task_group_state(&task_group_context::my_priority, *this, p) )
         return;
-    // Updating arena priority here does not eliminate necessity of checking each
-    // task priority and updating arena priority if necessary before the task execution.
-    // These checks will be necessary because:
-    // a) set_priority() may be invoked before any tasks from this task group are spawned;
-    // b) all spawned tasks from this task group are retrieved from the task pools.
-    // These cases create a time window when arena priority may be lowered.
-    s->my_market->update_arena_priority( *s->my_arena, p );
+
+    //! TODO: the arena of the calling thread might be unrelated;
+    // need to find out the right arena for priority update.
+    // The executing status check only guarantees being inside some working arena.
+    if ( s->my_innermost_running_task->state() == task::executing )
+        // Updating arena priority here does not eliminate necessity of checking each
+        // task priority and updating arena priority if necessary before the task execution.
+        // These checks will be necessary because:
+        // a) set_priority() may be invoked before any tasks from this task group are spawned;
+        // b) all spawned tasks from this task group are retrieved from the task pools.
+        // These cases create a time window when arena priority may be lowered.
+        s->my_market->update_arena_priority( *s->my_arena, p );
 }
 
 priority_t task_group_context::priority () const {
diff --git a/src/tbb/task_stream.h b/src/tbb/task_stream.h
index b65f133..0118e1b 100644
--- a/src/tbb/task_stream.h
+++ b/src/tbb/task_stream.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef _TBB_task_stream_H
@@ -148,7 +148,7 @@ public:
         The scheduler is really expected to execute all tasks before task_stream destruction. */
     intptr_t drain() {
         intptr_t result = 0;
-        for(unsigned level = 0; level < Levels; level++)
+        for(int level = 0; level < Levels; level++)
             for(unsigned i=0; i<N; ++i) {
                 lane_t& lane = lanes[level][i];
                 spin_mutex::scoped_lock lock(lane.my_mutex);
diff --git a/src/tbb/tbb_assert_impl.h b/src/tbb/tbb_assert_impl.h
index 224b15f..6fcf5bf 100644
--- a/src/tbb/tbb_assert_impl.h
+++ b/src/tbb/tbb_assert_impl.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // IMPORTANT: To use assertion handling in TBB, exactly one of the TBB source files
diff --git a/src/tbb/tbb_main.cpp b/src/tbb/tbb_main.cpp
index ecbde9d..685d28e 100644
--- a/src/tbb/tbb_main.cpp
+++ b/src/tbb/tbb_main.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/tbb_config.h"
@@ -39,15 +39,12 @@ static const char _pad[NFS_MaxLineSize - sizeof(int)] = {};
 
 //------------------------------------------------------------------------
 // governor data
-basic_tls<generic_scheduler*> governor::theTLS;
+basic_tls<uintptr_t> governor::theTLS;
 unsigned governor::DefaultNumberOfThreads;
 rml::tbb_factory governor::theRMLServerFactory;
 bool governor::UsePrivateRML;
-const task_scheduler_init *governor::BlockingTSI;
-#if TBB_USE_ASSERT
-bool governor::IsBlockingTerminationInProgress;
-#endif
 bool governor::is_speculation_enabled;
+bool governor::is_rethrow_broken;
 
 //------------------------------------------------------------------------
 // market data
@@ -78,7 +75,7 @@ bool __TBB_InitOnce::InitializationDone;
 // generic_scheduler data
 
 //! Pointer to the scheduler factory function
-generic_scheduler* (*AllocateSchedulerPtr)( arena*, size_t index );
+generic_scheduler* (*AllocateSchedulerPtr)( market& );
 
 #if __TBB_OLD_PRIMES_RNG
 //! Table of primes used by fast random-number generator (FastRandom).
@@ -127,7 +124,7 @@ void __TBB_InitOnce::add_ref() {
 
 void __TBB_InitOnce::remove_ref() {
     int k = --count;
-    __TBB_ASSERT(k>=0,"removed __TBB_InitOnce ref that was not added?"); 
+    __TBB_ASSERT(k>=0,"removed __TBB_InitOnce ref that was not added?");
     if( k==0 ) {
         governor::release_resources();
         ITT_FINI_ITTLIB();
@@ -161,7 +158,7 @@ struct resource_string {
 #define TBB_STRING_RESOURCE( index_name, str ) { str, NULL },
 static resource_string strings_for_itt[] = {
     #include "tbb/internal/_tbb_strings.h"
-    { "num_resource_strings", NULL } 
+    { "num_resource_strings", NULL }
 };
 #undef TBB_STRING_RESOURCE
 
@@ -276,7 +273,7 @@ void* itt_load_pointer_with_acquire_v3( const void* src ) {
     ITT_NOTIFY(sync_acquired, const_cast<void*>(src));
     return result;
 }
-    
+
 #if DO_ITT_NOTIFY
 void call_itt_notify_v5(int t, void *ptr) {
     switch (t) {
@@ -308,7 +305,7 @@ static inline void itt_id_create(const __itt_domain *domain, __itt_id id) {
     ITTNOTIFY_VOID_D1(id_create, domain, id);
 }
 
-void itt_make_task_group_v7( itt_domain_enum domain, void *group, unsigned long long group_extra, 
+void itt_make_task_group_v7( itt_domain_enum domain, void *group, unsigned long long group_extra,
                              void *parent, unsigned long long parent_extra, string_index name_index ) {
     if ( __itt_domain *d = get_itt_domain( domain ) ) {
         __itt_id group_id = itt_null_id;
@@ -323,7 +320,7 @@ void itt_make_task_group_v7( itt_domain_enum domain, void *group, unsigned long
     }
 }
 
-void itt_metadata_str_add_v7( itt_domain_enum domain, void *addr, unsigned long long addr_extra, 
+void itt_metadata_str_add_v7( itt_domain_enum domain, void *addr, unsigned long long addr_extra,
                               string_index key, const char *value ) {
     if ( __itt_domain *d = get_itt_domain( domain ) ) {
         __itt_id id = itt_null_id;
@@ -338,19 +335,19 @@ void itt_metadata_str_add_v7( itt_domain_enum domain, void *addr, unsigned long
     }
 }
 
-void itt_relation_add_v7( itt_domain_enum domain, void *addr0, unsigned long long addr0_extra, 
+void itt_relation_add_v7( itt_domain_enum domain, void *addr0, unsigned long long addr0_extra,
                           itt_relation relation, void *addr1, unsigned long long addr1_extra ) {
     if ( __itt_domain *d = get_itt_domain( domain ) ) {
-        __itt_id id0 = itt_null_id; 
+        __itt_id id0 = itt_null_id;
         __itt_id id1 = itt_null_id;
         itt_id_make( &id0, addr0, addr0_extra );
         itt_id_make( &id1, addr1, addr1_extra );
-        ITTNOTIFY_VOID_D3(relation_add, d, id0, (__itt_relation)relation, id1); 
+        ITTNOTIFY_VOID_D3(relation_add, d, id0, (__itt_relation)relation, id1);
     }
 }
 
-void itt_task_begin_v7( itt_domain_enum domain, void *task, unsigned long long task_extra, 
-                        void *parent, unsigned long long parent_extra, string_index /* name_index */ ) {
+void itt_task_begin_v7( itt_domain_enum domain, void *task, unsigned long long task_extra,
+                        void *parent, unsigned long long parent_extra, string_index name_index ) {
     if ( __itt_domain *d = get_itt_domain( domain ) ) {
         __itt_id task_id = itt_null_id;
         __itt_id parent_id = itt_null_id;
@@ -358,7 +355,8 @@ void itt_task_begin_v7( itt_domain_enum domain, void *task, unsigned long long t
         if ( parent ) {
             itt_id_make( &parent_id, parent, parent_extra );
         }
-        ITTNOTIFY_VOID_D3(task_begin, d, task_id, parent_id, NULL );
+        __itt_string_handle *n = ITT_get_string_handle(name_index);
+        ITTNOTIFY_VOID_D3(task_begin, d, task_id, parent_id, n );
     }
 }
 
@@ -368,22 +366,48 @@ void itt_task_end_v7( itt_domain_enum domain ) {
     }
 }
 
+void itt_region_begin_v9( itt_domain_enum domain, void *region, unsigned long long region_extra,
+                          void *parent, unsigned long long parent_extra, string_index /* name_index */ ) {
+    if ( __itt_domain *d = get_itt_domain( domain ) ) {
+        __itt_id region_id = itt_null_id;
+        __itt_id parent_id = itt_null_id;
+        itt_id_make( &region_id, region, region_extra );
+        if ( parent ) {
+            itt_id_make( &parent_id, parent, parent_extra );
+        }
+        ITTNOTIFY_VOID_D3(region_begin, d, region_id, parent_id, NULL );
+    }
+}
+
+void itt_region_end_v9( itt_domain_enum domain, void *region, unsigned long long region_extra ) {
+    if ( __itt_domain *d = get_itt_domain( domain ) ) {
+        __itt_id region_id = itt_null_id;
+        itt_id_make( &region_id, region, region_extra );
+        ITTNOTIFY_VOID_D1( region_end, d, region_id );
+    }
+}
+
 #else // DO_ITT_NOTIFY
 
-void itt_make_task_group_v7( itt_domain_enum domain, void *group, unsigned long long group_extra, 
+void itt_make_task_group_v7( itt_domain_enum domain, void *group, unsigned long long group_extra,
                              void *parent, unsigned long long parent_extra, string_index name_index ) { }
 
-void itt_metadata_str_add_v7( itt_domain_enum domain, void *addr, unsigned long long addr_extra, 
+void itt_metadata_str_add_v7( itt_domain_enum domain, void *addr, unsigned long long addr_extra,
                               string_index key, const char *value ) { }
 
-void itt_relation_add_v7( itt_domain_enum domain, void *addr0, unsigned long long addr0_extra, 
+void itt_relation_add_v7( itt_domain_enum domain, void *addr0, unsigned long long addr0_extra,
                           itt_relation relation, void *addr1, unsigned long long addr1_extra ) { }
 
-void itt_task_begin_v7( itt_domain_enum domain, void *task, unsigned long long task_extra, 
+void itt_task_begin_v7( itt_domain_enum domain, void *task, unsigned long long task_extra,
                         void * /*parent*/, unsigned long long /* parent_extra */, string_index /* name_index */ ) { }
 
 void itt_task_end_v7( itt_domain_enum domain ) { }
 
+void itt_region_begin_v9( itt_domain_enum domain, void *region, unsigned long long region_extra,
+                          void *parent, unsigned long long parent_extra, string_index /* name_index */ ) { }
+
+void itt_region_end_v9( itt_domain_enum domain, void *region, unsigned long long region_extra ) { }
+
 #endif // DO_ITT_NOTIFY
 
 #endif // __TBB_ITT_STRUCTURE_API
@@ -418,19 +442,18 @@ protected:
 };
 
 class allowed_parallelism_control : public padded<control_storage> {
-    virtual size_t default_value() const {
-        // current implementation can't have effective active value below 2
-        return max(2U, governor::default_num_threads());
+    virtual size_t default_value() const __TBB_override {
+        return max(1U, governor::default_num_threads());
     }
-    virtual bool is_first_arg_preferred(size_t a, size_t b) const {
+    virtual bool is_first_arg_preferred(size_t a, size_t b) const __TBB_override {
         return a<b; // prefer min allowed parallelism
     }
-    virtual void apply_active() const {
-        __TBB_ASSERT( my_active_value>=2, NULL );
+    virtual void apply_active() const __TBB_override {
+        __TBB_ASSERT( my_active_value>=1, NULL );
         // -1 to take master into account
         market::set_active_num_workers( my_active_value-1 );
     }
-    virtual size_t active_value() const {
+    virtual size_t active_value() const __TBB_override {
 /* Reading of my_active_value is not synchronized with possible updating
    of my_head by other thread. It's ok, as value of my_active_value became
    not invalid, just obsolete. */
@@ -449,10 +472,10 @@ public:
 };
 
 class stack_size_control : public padded<control_storage> {
-    virtual size_t default_value() const {
+    virtual size_t default_value() const __TBB_override {
         return tbb::internal::ThreadStackSize;
     }
-    virtual void apply_active() const {
+    virtual void apply_active() const __TBB_override {
 #if __TBB_WIN8UI_SUPPORT
         __TBB_ASSERT( false, "For Windows Store* apps we must not set stack size" );
 #endif
diff --git a/src/tbb/tbb_main.h b/src/tbb/tbb_main.h
index e36ade8..24d77d1 100644
--- a/src/tbb/tbb_main.h
+++ b/src/tbb/tbb_main.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef _TBB_tbb_main_H
@@ -33,7 +33,7 @@ void DoOneTimeInitializations ();
 // __TBB_InitOnce
 //------------------------------------------------------------------------
 
-//! Class that supports TBB initialization. 
+//! Class that supports TBB initialization.
 /** It handles acquisition and release of global resources (e.g. TLS) during startup and shutdown,
     as well as synchronization for DoOneTimeInitializations. */
 class __TBB_InitOnce {
@@ -53,7 +53,7 @@ class __TBB_InitOnce {
 
     //! Global initialization lock
     /** Scenarios are possible when tools interop has to be initialized before the
-        TBB itself. This imposes a requirement that the global initialization lock 
+        TBB itself. This imposes a requirement that the global initialization lock
         has to support valid static initialization, and does not issue any tool
         notifications in any build mode. **/
     static __TBB_atomic_flag InitializationLock;
@@ -65,8 +65,8 @@ public:
 
     static bool initialization_done() { return __TBB_load_with_acquire(InitializationDone); }
 
-    //! Add initial reference to resources. 
-    /** We assume that dynamic loading of the library prevents any other threads 
+    //! Add initial reference to resources.
+    /** We assume that dynamic loading of the library prevents any other threads
         from entering the library until this constructor has finished running. **/
     __TBB_InitOnce() { add_ref(); }
 
@@ -78,9 +78,9 @@ public:
         // start running, and thus no race on InitializationDone is possible.
         if( initialization_done() ) {
             // Remove an extra reference that was added in DoOneTimeInitializations.
-            remove_ref();  
+            remove_ref();
         }
-    } 
+    }
     //! Add reference to resources.  If first reference added, acquire the resources.
     static void add_ref();
 
diff --git a/src/tbb/tbb_misc.cpp b/src/tbb/tbb_misc.cpp
index 2064269..854947e 100644
--- a/src/tbb/tbb_misc.cpp
+++ b/src/tbb/tbb_misc.cpp
@@ -1,24 +1,24 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
-// Source file for miscellaneous entities that are infrequently referenced by 
+// Source file for miscellaneous entities that are infrequently referenced by
 // an executing program.
 
 #include "tbb/tbb_stddef.h"
@@ -26,6 +26,8 @@
 #include "tbb/tbb_exception.h"
 #include "tbb/tbb_machine.h"
 #include "tbb_misc.h"
+#include "tbb_version.h"
+
 #include <cstdio>
 #include <cstdlib>
 #include <stdexcept>
@@ -46,6 +48,15 @@
     #pragma warning (pop)
 #endif
 
+#define __TBB_STD_RETHROW_EXCEPTION_POSSIBLY_BROKEN                             \
+    (__GLIBCXX__ && __TBB_GLIBCXX_VERSION>=40700 && __TBB_GLIBCXX_VERSION<60000 \
+     && TBB_USE_EXCEPTIONS && !TBB_USE_CAPTURED_EXCEPTION)
+
+#if __TBB_STD_RETHROW_EXCEPTION_POSSIBLY_BROKEN
+// GCC ABI declarations necessary for a workaround
+#include <cxxabi.h>
+#endif
+
 using namespace std;
 
 namespace tbb {
@@ -94,7 +105,7 @@ void handle_perror( int error_code, const char* what ) {
 #endif /* !TBB_USE_EXCEPTIONS */
 }
 
-#if _WIN32||_WIN64 
+#if _WIN32||_WIN64
 void handle_win_error( int error_code ) {
     char buf[512];
 #if !__TBB_WIN8UI_SUPPORT
@@ -139,7 +150,7 @@ void throw_exception_v4 ( exception_id eid ) {
     case eid_user_abort: DO_THROW( user_abort, () );
     case eid_bad_tagged_msg_cast: DO_THROW( runtime_error, ("Illegal tagged_msg cast") );
 #if __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE
-    case eid_blocking_sch_init: DO_THROW( runtime_error, ("Nesting of blocking termination is impossible") );
+    case eid_blocking_thread_join_impossible: DO_THROW( runtime_error, ("Blocking terminate failed") );
 #endif
     default: break;
     }
@@ -151,17 +162,55 @@ void throw_exception_v4 ( exception_id eid ) {
 #endif /* !TBB_USE_EXCEPTIONS && __APPLE__ */
 }
 
-#if _XBOX || __TBB_WIN8UI_SUPPORT
+#if __TBB_STD_RETHROW_EXCEPTION_POSSIBLY_BROKEN
+// Runtime detection and workaround for the GCC bug 62258.
+// The problem is that std::rethrow_exception() does not increment a counter
+// of active exceptions, causing std::uncaught_exception() to return a wrong value.
+// The code is created after, and roughly reflects, the workaround
+// at https://gcc.gnu.org/bugzilla/attachment.cgi?id=34683
+
+void fix_broken_rethrow() {
+    struct gcc_eh_data {
+        void *       caughtExceptions;
+        unsigned int uncaughtExceptions;
+    };
+    gcc_eh_data* eh_data = punned_cast<gcc_eh_data*>( abi::__cxa_get_globals() );
+    ++eh_data->uncaughtExceptions;
+}
+
+bool gcc_rethrow_exception_broken() {
+    bool is_broken;
+    __TBB_ASSERT( !std::uncaught_exception(),
+        "gcc_rethrow_exception_broken() must not be called when an exception is active" );
+    try {
+        // Throw, catch, and rethrow an exception
+        try {
+            throw __TBB_GLIBCXX_VERSION;
+        } catch(...) {
+            std::rethrow_exception( std::current_exception() );
+        }
+    } catch(...) {
+        // Check the bug presence
+        is_broken = std::uncaught_exception();
+    }
+    if( is_broken ) fix_broken_rethrow();
+    __TBB_ASSERT( !std::uncaught_exception(), NULL );
+    return is_broken;
+}
+#else
+void fix_broken_rethrow() {}
+bool gcc_rethrow_exception_broken() { return false; }
+#endif /* __TBB_STD_RETHROW_EXCEPTION_POSSIBLY_BROKEN */
+
+#if __TBB_WIN8UI_SUPPORT
 bool GetBoolEnvironmentVariable( const char * ) { return false;}
-#else  /* _XBOX || __TBB_WIN8UI_SUPPORT */
+#else  /* __TBB_WIN8UI_SUPPORT */
 bool GetBoolEnvironmentVariable( const char * name ) {
     if( const char* s = getenv(name) )
         return strcmp(s,"0") != 0;
     return false;
 }
-#endif /* _XBOX || __TBB_WIN8UI_SUPPORT */
-
-#include "tbb_version.h"
+#endif /* __TBB_WIN8UI_SUPPORT */
 
 /** The leading "\0" is here so that applying "strings" to the binary delivers a clean result. */
 static const char VersionString[] = "\0" TBB_VERSION_STRINGS;
@@ -196,12 +245,12 @@ bool cpu_has_speculation() {
 #if __TBB_TSX_AVAILABLE
 #if (__INTEL_COMPILER || __GNUC__ || _MSC_VER || __SUNPRO_CC)
     bool result = false;
-    const int hle_ebx_mask = 1<<4;
+    const int rtm_ebx_mask = 1<<11;
 #if _MSC_VER
     int info[4] = {0,0,0,0};
     const int reg_ebx = 1;
     __cpuidex(info, 7, 0);
-    result = (info[reg_ebx] & hle_ebx_mask)!=0;
+    result = (info[reg_ebx] & rtm_ebx_mask)!=0;
 #elif __GNUC__ || __SUNPRO_CC
     int32_t reg_ebx = 0;
     int32_t reg_eax = 7;
@@ -210,13 +259,13 @@ bool cpu_has_speculation() {
                            "cpuid\n"
                            "movl %%ebx, %0\n"
                            "movl %%esi, %%ebx\n"
-                           : "=a"(reg_ebx) : "0" (reg_eax), "c" (reg_ecx) : "esi", 
+                           : "=a"(reg_ebx) : "0" (reg_eax), "c" (reg_ecx) : "esi",
 #if __TBB_x86_64
                            "ebx",
 #endif
                            "edx"
                            );
-    result = (reg_ebx & hle_ebx_mask)!=0 ;
+    result = (reg_ebx & rtm_ebx_mask)!=0 ;
 #endif
     return result;
 #else
@@ -251,8 +300,8 @@ extern "C" void __TBB_machine_store8_slow_perf_warning( volatile void *ptr ) {
     const unsigned n = 4;
     static tbb::atomic<void*> cache[n];
     static tbb::atomic<unsigned> k;
-    for( unsigned i=0; i<n; ++i ) 
-        if( ptr==cache[i] ) 
+    for( unsigned i=0; i<n; ++i )
+        if( ptr==cache[i] )
             goto done;
     cache[(k++)%n] = const_cast<void*>(ptr);
     tbb::internal::runtime_warning( "atomic store on misaligned 8-byte location %p is slow", ptr );
@@ -263,7 +312,7 @@ done:;
 extern "C" void __TBB_machine_store8_slow( volatile void *ptr, int64_t value ) {
     for( tbb::internal::atomic_backoff b;;b.pause() ) {
         int64_t tmp = *(int64_t*)ptr;
-        if( __TBB_machine_cmpswp8(ptr,value,tmp)==tmp ) 
+        if( __TBB_machine_cmpswp8(ptr,value,tmp)==tmp )
             break;
     }
 }
diff --git a/src/tbb/tbb_misc.h b/src/tbb/tbb_misc.h
index 22e14ca..8a05197 100644
--- a/src/tbb/tbb_misc.h
+++ b/src/tbb/tbb_misc.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef _TBB_tbb_misc_H
@@ -252,16 +252,22 @@ inline void run_initializer( bool (*f)(), atomic<do_once_state>& state ) {
     public:
         affinity_helper() : threadMask(NULL), is_changed(0) {}
         ~affinity_helper();
-        void protect_affinity_mask();
+        void protect_affinity_mask( bool restore_process_mask  );
+        void dismiss();
     };
+    void destroy_process_mask();
 #else
     class affinity_helper : no_copy {
     public:
-        void protect_affinity_mask() {}
+        void protect_affinity_mask( bool ) {}
+        void dismiss() {}
     };
+    inline void destroy_process_mask(){}
 #endif /* __TBB_USE_OS_AFFINITY_SYSCALL */
 
-extern bool cpu_has_speculation();
+bool cpu_has_speculation();
+bool gcc_rethrow_exception_broken();
+void fix_broken_rethrow();
 
 } // namespace internal
 } // namespace tbb
diff --git a/src/tbb/tbb_misc_ex.cpp b/src/tbb/tbb_misc_ex.cpp
index e32a718..264abe6 100644
--- a/src/tbb/tbb_misc_ex.cpp
+++ b/src/tbb/tbb_misc_ex.cpp
@@ -1,24 +1,24 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
-// Source file for miscellaneous entities that are infrequently referenced by 
+// Source file for miscellaneous entities that are infrequently referenced by
 // an executing program, and implementation of which requires dynamic linking.
 
 #include "tbb_misc.h"
@@ -56,7 +56,16 @@ namespace internal {
 
 #if __TBB_USE_OS_AFFINITY_SYSCALL
 
-static void set_affinity_mask( size_t maskSize, const basic_mask_t* threadMask ) {
+#if __linux__
+// Handlers for interoperation with libiomp
+static int (*libiomp_try_restoring_original_mask)();
+// Table for mapping to libiomp entry points
+static const dynamic_link_descriptor iompLinkTable[] = {
+    { "kmp_set_thread_affinity_mask_initial", (pointer_to_handler*)(void*)(&libiomp_try_restoring_original_mask) }
+};
+#endif
+
+static void set_thread_affinity_mask( size_t maskSize, const basic_mask_t* threadMask ) {
 #if __linux__
     if( sched_setaffinity( 0, maskSize, threadMask ) )
 #else /* FreeBSD */
@@ -65,7 +74,7 @@ static void set_affinity_mask( size_t maskSize, const basic_mask_t* threadMask )
         runtime_warning( "setaffinity syscall failed" );
 }
 
-static void get_affinity_mask( size_t maskSize, basic_mask_t* threadMask ) {
+static void get_thread_affinity_mask( size_t maskSize, basic_mask_t* threadMask ) {
 #if __linux__
     if( sched_getaffinity( 0, maskSize, threadMask ) )
 #else /* FreeBSD */
@@ -76,35 +85,45 @@ static void get_affinity_mask( size_t maskSize, basic_mask_t* threadMask ) {
 
 static basic_mask_t* process_mask;
 static int num_masks;
-struct process_mask_cleanup_helper {
-    ~process_mask_cleanup_helper() {
-        if( process_mask ) {
-            delete [] process_mask;
-        }
-     }
-};
-static process_mask_cleanup_helper process_mask_cleanup;
+
+void destroy_process_mask() {
+    if( process_mask ) {
+        delete [] process_mask;
+    }
+}
 
 #define curMaskSize sizeof(basic_mask_t) * num_masks
 affinity_helper::~affinity_helper() {
     if( threadMask ) {
         if( is_changed ) {
-            set_affinity_mask( curMaskSize, threadMask );
+            set_thread_affinity_mask( curMaskSize, threadMask );
         }
         delete [] threadMask;
     }
 }
-void affinity_helper::protect_affinity_mask() {
-    if( threadMask == NULL && num_masks && process_mask ) {
+void affinity_helper::protect_affinity_mask( bool restore_process_mask ) {
+    if( threadMask == NULL && num_masks ) { // TODO: assert num_masks validity?
         threadMask = new basic_mask_t [num_masks];
         memset( threadMask, 0, curMaskSize );
-        get_affinity_mask( curMaskSize, threadMask );
-        is_changed = memcmp( process_mask, threadMask, curMaskSize );
-        if( is_changed ) {
-            set_affinity_mask( curMaskSize, process_mask );
+        get_thread_affinity_mask( curMaskSize, threadMask );
+        if( restore_process_mask ) {
+            __TBB_ASSERT( process_mask, "A process mask is requested but not yet stored" );
+            is_changed = memcmp( process_mask, threadMask, curMaskSize );
+            if( is_changed )
+                set_thread_affinity_mask( curMaskSize, process_mask );
+        } else {
+            // Assume that the mask will be changed by the caller.
+            is_changed = 1;
         }
     }
 }
+void affinity_helper::dismiss() {
+    if( threadMask ) {
+        delete [] threadMask;
+        threadMask = NULL;
+    }
+    is_changed = 0;
+}
 #undef curMaskSize
 
 static atomic<do_once_state> hardware_concurrency_info;
@@ -123,26 +142,20 @@ static void initialize_hardware_concurrency_info () {
     int maxProcs = sysconf(_SC_NPROCESSORS_ONLN);
     int pid = getpid();
 #endif
-    cpu_set_t *processMask;
-    const size_t BasicMaskSize =  sizeof(cpu_set_t);
+#else /* FreeBSD >= 7.1 */
+    int maxProcs = sysconf(_SC_NPROCESSORS_ONLN);
+#endif
+    basic_mask_t* processMask;
+    const size_t BasicMaskSize =  sizeof(basic_mask_t);
     for (;;) {
-        int curMaskSize = BasicMaskSize * numMasks;
-        processMask = new cpu_set_t[numMasks];
+        const int curMaskSize = BasicMaskSize * numMasks;
+        processMask = new basic_mask_t[numMasks];
         memset( processMask, 0, curMaskSize );
+#if __linux__
         err = sched_getaffinity( pid, curMaskSize, processMask );
         if ( !err || errno != EINVAL || curMaskSize * CHAR_BIT >= 256 * 1024 )
             break;
-        delete[] processMask;
-        numMasks <<= 1;
-    }
 #else /* FreeBSD >= 7.1 */
-    int maxProcs = sysconf(_SC_NPROCESSORS_ONLN);
-    cpuset_t *processMask;
-    const size_t BasicMaskSize = sizeof(cpuset_t);
-    for (;;) {
-        int curMaskSize = BasicMaskSize * numMasks;
-        processMask = new cpuset_t[numMasks];
-        memset( processMask, 0, curMaskSize );
         // CPU_LEVEL_WHICH - anonymous (current) mask, CPU_LEVEL_CPUSET - assigned mask
 #if __TBB_MAIN_THREAD_AFFINITY_BROKEN
         err = cpuset_getaffinity( CPU_LEVEL_WHICH, CPU_WHICH_TID, -1, curMaskSize, processMask );
@@ -151,21 +164,42 @@ static void initialize_hardware_concurrency_info () {
 #endif
         if ( !err || errno != ERANGE || curMaskSize * CHAR_BIT >= 16 * 1024 )
             break;
+#endif /* FreeBSD >= 7.1 */
         delete[] processMask;
         numMasks <<= 1;
     }
-#endif /* FreeBSD >= 7.1 */
     if ( !err ) {
+        // We have found the mask size and captured the process affinity mask into processMask.
+        num_masks = numMasks; // do here because it's needed for affinity_helper to work
+#if __linux__
+        // For better coexistence with libiomp which might have changed the mask already,
+        // check for its presence and ask it to restore the mask.
+        dynamic_link_handle libhandle;
+        if ( dynamic_link( "libiomp5.so", iompLinkTable, 1, &libhandle, DYNAMIC_LINK_GLOBAL ) ) {
+            // We have found the symbol provided by libiomp5 for restoring original thread affinity.
+            affinity_helper affhelp;
+            affhelp.protect_affinity_mask( /*restore_process_mask=*/false );
+            if ( libiomp_try_restoring_original_mask()==0 ) {
+                // Now we have the right mask to capture, restored by libiomp.
+                const int curMaskSize = BasicMaskSize * numMasks;
+                memset( processMask, 0, curMaskSize );
+                get_thread_affinity_mask( curMaskSize, processMask );
+            } else
+                affhelp.dismiss();  // thread mask has not changed
+            dynamic_unlink( libhandle );
+            // Destructor of affinity_helper restores the thread mask (unless dismissed).
+        }
+#endif
         for ( int m = 0; availableProcs < maxProcs && m < numMasks; ++m ) {
             for ( size_t i = 0; (availableProcs < maxProcs) && (i < BasicMaskSize * CHAR_BIT); ++i ) {
                 if ( CPU_ISSET( i, processMask + m ) )
                     ++availableProcs;
             }
         }
-        num_masks = numMasks;
         process_mask = processMask;
     }
     else {
+        // Failed to get the process affinity mask; assume the whole machine can be used.
         availableProcs = (maxProcs == INT_MAX) ? sysconf(_SC_NPROCESSORS_ONLN) : maxProcs;
         delete[] processMask;
     }
@@ -178,7 +212,9 @@ int AvailableHwConcurrency() {
     return theNumProcs;
 }
 
+/* End of __TBB_USE_OS_AFFINITY_SYSCALL implementation */
 #elif __ANDROID__
+
 // Work-around for Android that reads the correct number of available CPUs since system calls are unreliable.
 // Format of "present" file is: ([<int>-<int>|<int>],)+
 int AvailableHwConcurrency() {
@@ -196,6 +232,7 @@ int AvailableHwConcurrency() {
 }
 
 #elif defined(_SC_NPROCESSORS_ONLN)
+
 int AvailableHwConcurrency() {
     int n = sysconf(_SC_NPROCESSORS_ONLN);
     return (n > 0) ? n : 1;
@@ -217,12 +254,12 @@ struct ProcessorGroupInfo {
     int         numProcsRunningTotal;   ///< Subtotal of processors in this and preceding groups
 
     //! Total number of processor groups in the system
-    static int NumGroups; 
+    static int NumGroups;
 
     //! Index of the group with a slot reserved for the first master thread
     /** In the context of multiple processor groups support current implementation
         defines "the first master thread" as the first thread to invoke
-        AvailableHwConcurrency(). 
+        AvailableHwConcurrency().
 
         TODO:   Implement a dynamic scheme remapping workers depending on the pending
                 master threads affinity. **/
@@ -232,7 +269,6 @@ struct ProcessorGroupInfo {
 int ProcessorGroupInfo::NumGroups = 1;
 int ProcessorGroupInfo::HoleIndex = 0;
 
-
 ProcessorGroupInfo theProcessorGroups[MaxProcessorGroups];
 
 struct TBB_GROUP_AFFINITY {
@@ -243,7 +279,7 @@ struct TBB_GROUP_AFFINITY {
 
 static DWORD (WINAPI *TBB_GetActiveProcessorCount)( WORD groupIndex ) = NULL;
 static WORD (WINAPI *TBB_GetActiveProcessorGroupCount)() = NULL;
-static BOOL (WINAPI *TBB_SetThreadGroupAffinity)( HANDLE hThread, 
+static BOOL (WINAPI *TBB_SetThreadGroupAffinity)( HANDLE hThread,
                         const TBB_GROUP_AFFINITY* newAff, TBB_GROUP_AFFINITY *prevAff );
 static BOOL (WINAPI *TBB_GetThreadGroupAffinity)( HANDLE hThread, TBB_GROUP_AFFINITY* );
 
@@ -306,11 +342,6 @@ static void initialize_hardware_concurrency_info () {
             PrintExtraVersionInfo( "----- Group", "%d: size %d", i, theProcessorGroups[i].numProcs);
 }
 
-int AvailableHwConcurrency() {
-    atomic_do_once( &initialize_hardware_concurrency_info, hardware_concurrency_info );
-    return theProcessorGroups[ProcessorGroupInfo::NumGroups - 1].numProcsRunningTotal;
-}
-
 int NumberOfProcessorGroups() {
     __TBB_ASSERT( hardware_concurrency_info == initialization_complete, "NumberOfProcessorGroups is used before AvailableHwConcurrency" );
     return ProcessorGroupInfo::NumGroups;
@@ -358,9 +389,15 @@ void MoveThreadIntoProcessorGroup( void* hThread, int groupIndex ) {
     TBB_SetThreadGroupAffinity( hThread, &ga, NULL );
 }
 
+int AvailableHwConcurrency() {
+    atomic_do_once( &initialize_hardware_concurrency_info, hardware_concurrency_info );
+    return theProcessorGroups[ProcessorGroupInfo::NumGroups - 1].numProcsRunningTotal;
+}
+
+/* End of _WIN32||_WIN64 implementation */
 #else
-    #error AvailableHwConcurrency is not implemented in this OS 
-#endif /* OS */
+    #error AvailableHwConcurrency is not implemented for this OS
+#endif
 
 } // namespace internal
 } // namespace tbb
diff --git a/src/tbb/tbb_resource.rc b/src/tbb/tbb_resource.rc
index 0e584ad..7dc4fe6 100644
--- a/src/tbb/tbb_resource.rc
+++ b/src/tbb/tbb_resource.rc
@@ -1,20 +1,20 @@
-// Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+// Copyright (c) 2005-2017 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
 //
-// This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-// you can redistribute it and/or modify it under the terms of the GNU General Public License
-// version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-// Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 //
-// As a special exception,  you may use this file  as part of a free software library without
-// restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-// functions from this file, or you compile this file and link it with other files to produce
-// an executable,  this file does not by itself cause the resulting executable to be covered
-// by the GNU General Public License. This exception does not however invalidate any other
-// reasons why the executable file might be covered by the GNU General Public License.
 
 // Microsoft Visual C++ generated resource script.
 //
@@ -81,7 +81,7 @@ BEGIN
             VALUE "CompanyName", "Intel Corporation\0"
             VALUE "FileDescription", "Intel(R) Threading Building Blocks library\0"
             VALUE "FileVersion", TBB_VERSION "\0"
-            VALUE "LegalCopyright", "Copyright 2005-2015 Intel Corporation.  All Rights Reserved.\0"
+            VALUE "LegalCopyright", "Copyright 2005-2017 Intel Corporation.  All Rights Reserved.\0"
             VALUE "LegalTrademarks", "\0"
 #ifndef TBB_USE_DEBUG
             VALUE "OriginalFilename", "tbb.dll\0"
diff --git a/src/tbb/tbb_statistics.cpp b/src/tbb/tbb_statistics.cpp
index fcf366d..3656f9a 100644
--- a/src/tbb/tbb_statistics.cpp
+++ b/src/tbb/tbb_statistics.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb_statistics.h"
@@ -34,14 +34,14 @@ namespace tbb {
 namespace internal {
 
 //! Human readable titles of statistics groups defined by statistics_groups enum.
-/** The order of this vector elements must correspond to the statistics_counters 
+/** The order of this vector elements must correspond to the statistics_counters
     structure layout. **/
-const char* StatGroupTitles[] = { 
+const char* StatGroupTitles[] = {
     "task objects", "tasks executed", "stealing attempts", "task proxies", "arena", "market", "priority ops", "prio ops details"
 };
 
 //! Human readable titles of statistics elements defined by statistics_counters struct.
-/** The order of this vector elements must correspond to the statistics_counters 
+/** The order of this vector elements must correspond to the statistics_counters
     structure layout (with NULLs interspersed to separate groups). **/
 const char* StatFieldTitles[] = {
     /*task objects*/        "active", "freed", "big", NULL,
@@ -55,7 +55,7 @@ const char* StatFieldTitles[] = {
 };
 
 //! Class for logging statistics
-/** There should be only one instance of this class. 
+/** There should be only one instance of this class.
     Results are written to a file "statistics.txt" in tab-separated format. */
 class statistics_logger {
 public:
diff --git a/src/tbb/tbb_statistics.h b/src/tbb/tbb_statistics.h
index 5427961..11180a6 100644
--- a/src/tbb/tbb_statistics.h
+++ b/src/tbb/tbb_statistics.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef _TBB_tbb_statistics_H
@@ -24,25 +24,25 @@
 /**
     This file defines parameters of the internal statistics collected by the TBB
     library (currently by the task scheduler only).
-    
-    Statistics is accumulated separately in each thread and is dumped when 
+
+    Statistics is accumulated separately in each thread and is dumped when
     the scheduler instance associated with the given  thread is destroyed.
     For apps with multiple master threads or with the same master repeatedly
     initializing and then deinitializing task scheduler this results in TBB
     workers statistics getting inseparably mixed.
-    
+
     Therefore statistics is accumulated in arena slots, and should be dumped
     when arena is destroyed. This separates statistics collected for each
     scheduler activity region in each master thread.
 
-    With the current RML implementation (TBB 2.2, 3.0) to avoid complete loss of 
-    statistics data during app shutdown (because of lazy workers deinitialization 
-    logic) set __TBB_STATISTICS_EARLY_DUMP macro to write the statistics at the 
-    moment a master thread deinitializes its scheduler. This may happen a little 
+    With the current RML implementation (TBB 2.2, 3.0) to avoid complete loss of
+    statistics data during app shutdown (because of lazy workers deinitialization
+    logic) set __TBB_STATISTICS_EARLY_DUMP macro to write the statistics at the
+    moment a master thread deinitializes its scheduler. This may happen a little
     earlier than the moment of arena destruction resulting in the following undesired
     (though usually tolerable) effects:
     - a few events related to unsuccessful stealing or thread pool activity may be lost,
-    - statistics may be substantially incomplete in case of FIFO tasks used in 
+    - statistics may be substantially incomplete in case of FIFO tasks used in
       the FAF mode.
 
     Macro __TBB_STATISTICS_STDOUT and global variable __TBB_ActiveStatisticsGroups
@@ -50,12 +50,12 @@
 
     To add new counter:
     1) Insert it into the appropriate group range in statistics_counters;
-    2) Insert the corresponding field title into StatFieldTitles (preserving 
+    2) Insert the corresponding field title into StatFieldTitles (preserving
        relative order of the fields).
 
     To add new counters group:
     1) Insert new group bit flag into statistics_groups;
-    2) Insert the new group title into StatGroupTitles (preserving 
+    2) Insert the new group title into StatGroupTitles (preserving
        relative order of the groups).
     3) Add counter belonging to the new group as described above
 **/
@@ -116,10 +116,10 @@ struct statistics_counters {
     typedef long counter_type;
 
     // Group: sg_task_allocation
-    // Counters in this group can have negative values as the tasks migrate across 
+    // Counters in this group can have negative values as the tasks migrate across
     // threads while the associated counters are updated in the current thread only
     // to avoid data races
-    
+
     //! Number of tasks allocated and not yet destroyed
     counter_type active_tasks;
     //! Number of task corpses stored for future reuse
@@ -127,14 +127,14 @@ struct statistics_counters {
     //! Number of big tasks allocated during the run
     /** To find total number of tasks malloc'd, compute (big_tasks+my_small_task_count) */
     counter_type big_tasks;
-    
+
     // Group: sg_task_execution
 
     //! Number of tasks executed
     counter_type tasks_executed;
     //! Number of elided spawns
     counter_type spawns_bypassed;
-    
+
     // Group: sg_stealing
 
     //! Number of tasks successfully stolen
@@ -153,7 +153,7 @@ struct statistics_counters {
     //! Number of affinitized tasks executed by the owner
     /** Goes as "revoked" in statistics printout. **/
     counter_type proxies_executed;
-    //! Number of affinitized tasks intercepted by thieves 
+    //! Number of affinitized tasks intercepted by thieves
     counter_type proxies_stolen;
     //! Number of proxy bypasses by thieves during stealing
     counter_type proxies_bypassed;
diff --git a/src/tbb/tbb_thread.cpp b/src/tbb/tbb_thread.cpp
index 2b5f36f..f64fb1f 100644
--- a/src/tbb/tbb_thread.cpp
+++ b/src/tbb/tbb_thread.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if _WIN32||_WIN64
@@ -147,7 +147,7 @@ tbb_thread_v3::id thread_get_id_v3() {
     return tbb_thread_v3::id( pthread_self() );
 #endif // _WIN32||_WIN64
 }
-    
+
 void move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 )
 {
     if (t1.joinable())
diff --git a/src/tbb/tbb_version.h b/src/tbb/tbb_version.h
index 1c30cfc..89a1c51 100644
--- a/src/tbb/tbb_version.h
+++ b/src/tbb/tbb_version.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Please define version number in the file:
diff --git a/src/tbb/tls.h b/src/tbb/tls.h
index 685e855..fd4355e 100644
--- a/src/tbb/tls.h
+++ b/src/tbb/tls.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef _TBB_tls_H
diff --git a/src/tbb/tools_api/disable_warnings.h b/src/tbb/tools_api/disable_warnings.h
index 62745a1..a2452bb 100644
--- a/src/tbb/tools_api/disable_warnings.h
+++ b/src/tbb/tools_api/disable_warnings.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "ittnotify_config.h"
diff --git a/src/tbb/tools_api/internal/ittnotify.h b/src/tbb/tools_api/internal/ittnotify.h
deleted file mode 100644
index 43317b2..0000000
--- a/src/tbb/tools_api/internal/ittnotify.h
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
-*/
-
-#ifndef _INTERNAL_ITTNOTIFY_H_
-#define _INTERNAL_ITTNOTIFY_H_
-
-/**
- * @file
- * @brief Internal User API functions and types
- */
-
-/** @cond exclude_from_documentation */
-#ifndef ITT_OS_WIN
-#  define ITT_OS_WIN   1
-#endif /* ITT_OS_WIN */
-
-#ifndef ITT_OS_LINUX
-#  define ITT_OS_LINUX 2
-#endif /* ITT_OS_LINUX */
-
-#ifndef ITT_OS_MAC
-#  define ITT_OS_MAC   3
-#endif /* ITT_OS_MAC */
-
-#ifndef ITT_OS
-#  if defined WIN32 || defined _WIN32
-#    define ITT_OS ITT_OS_WIN
-#  elif defined( __APPLE__ ) && defined( __MACH__ )
-#    define ITT_OS ITT_OS_MAC
-#  else
-#    define ITT_OS ITT_OS_LINUX
-#  endif
-#endif /* ITT_OS */
-
-#ifndef ITT_PLATFORM_WIN
-#  define ITT_PLATFORM_WIN 1
-#endif /* ITT_PLATFORM_WIN */
-
-#ifndef ITT_PLATFORM_POSIX
-#  define ITT_PLATFORM_POSIX 2
-#endif /* ITT_PLATFORM_POSIX */
-
-#ifndef ITT_PLATFORM_MAC
-#  define ITT_PLATFORM_MAC 3
-#endif /* ITT_PLATFORM_MAC */
-
-#ifndef ITT_PLATFORM
-#  if ITT_OS==ITT_OS_WIN
-#    define ITT_PLATFORM ITT_PLATFORM_WIN
-#  elif ITT_OS==ITT_OS_MAC
-#    define ITT_PLATFORM ITT_PLATFORM_MAC
-#  else
-#    define ITT_PLATFORM ITT_PLATFORM_POSIX
-#  endif
-#endif /* ITT_PLATFORM */
-
-#if defined(_UNICODE) && !defined(UNICODE)
-#define UNICODE
-#endif
-
-#include <stddef.h>
-#if ITT_PLATFORM==ITT_PLATFORM_WIN
-#include <tchar.h>
-#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#include <stdint.h>
-#if defined(UNICODE) || defined(_UNICODE)
-#include <wchar.h>
-#endif /* UNICODE || _UNICODE */
-#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-
-#ifndef CDECL
-#  if ITT_PLATFORM==ITT_PLATFORM_WIN
-#    define CDECL __cdecl
-#  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#    if defined _M_IX86 || defined __i386__ 
-#      define CDECL __attribute__ ((cdecl))
-#    else  /* _M_IX86 || __i386__ */
-#      define CDECL /* actual only on x86 platform */
-#    endif /* _M_IX86 || __i386__ */
-#  endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#endif /* CDECL */
-
-#ifndef STDCALL
-#  if ITT_PLATFORM==ITT_PLATFORM_WIN
-#    define STDCALL __stdcall
-#  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#    if defined _M_IX86 || defined __i386__
-#      define STDCALL __attribute__ ((stdcall)) 
-#    else  /* _M_IX86 || __i386__ */
-#      define STDCALL /* supported only on x86 platform */
-#    endif /* _M_IX86 || __i386__ */
-#  endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#endif /* STDCALL */
-
-#define ITTAPI    CDECL
-#define LIBITTAPI CDECL
-
-/* TODO: Temporary for compatibility! */
-#define ITTAPI_CALL    CDECL
-#define LIBITTAPI_CALL CDECL
-
-#if ITT_PLATFORM==ITT_PLATFORM_WIN
-/* use __forceinline (VC++ specific) */
-#define ITT_INLINE           __forceinline
-#define ITT_INLINE_ATTRIBUTE /* nothing */
-#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-/*
- * Generally, functions are not inlined unless optimization is specified.
- * For functions declared inline, this attribute inlines the function even
- * if no optimization level was specified.
- */
-#ifdef __STRICT_ANSI__
-#define ITT_INLINE           static
-#else  /* __STRICT_ANSI__ */
-#define ITT_INLINE           static inline
-#endif /* __STRICT_ANSI__ */
-#define ITT_INLINE_ATTRIBUTE __attribute__ ((always_inline, unused))
-#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-/** @endcond */
-
-/** @cond exclude_from_documentation */
-/* Helper macro for joining tokens */
-#define ITT_JOIN_AUX(p,n) p##n
-#define ITT_JOIN(p,n)     ITT_JOIN_AUX(p,n)
-
-#ifdef ITT_MAJOR
-#undef ITT_MAJOR
-#endif
-#ifdef ITT_MINOR
-#undef ITT_MINOR
-#endif
-#define ITT_MAJOR     3
-#define ITT_MINOR     0
-
-/* Standard versioning of a token with major and minor version numbers */
-#define ITT_VERSIONIZE(x)    \
-    ITT_JOIN(x,              \
-    ITT_JOIN(_,              \
-    ITT_JOIN(ITT_MAJOR,      \
-    ITT_JOIN(_, ITT_MINOR))))
-
-#ifndef INTEL_ITTNOTIFY_PREFIX
-#  define INTEL_ITTNOTIFY_PREFIX __itt_
-#endif /* INTEL_ITTNOTIFY_PREFIX */
-#ifndef INTEL_ITTNOTIFY_POSTFIX
-#  define INTEL_ITTNOTIFY_POSTFIX _ptr_
-#endif /* INTEL_ITTNOTIFY_POSTFIX */
-
-#define ITTNOTIFY_NAME_AUX(n) ITT_JOIN(INTEL_ITTNOTIFY_PREFIX,n)
-#define ITTNOTIFY_NAME(n)     ITT_VERSIONIZE(ITTNOTIFY_NAME_AUX(ITT_JOIN(n,INTEL_ITTNOTIFY_POSTFIX)))
-
-#define ITTNOTIFY_VOID(n) (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)
-#define ITTNOTIFY_DATA(n) (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)
-
-#define ITTNOTIFY_VOID_D0(n,d)       (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d)
-#define ITTNOTIFY_VOID_D1(n,d,x)     (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x)
-#define ITTNOTIFY_VOID_D2(n,d,x,y)   (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y)
-#define ITTNOTIFY_VOID_D3(n,d,x,y,z) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z)
-#define ITTNOTIFY_VOID_D4(n,d,x,y,z,a)     (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a)
-#define ITTNOTIFY_VOID_D5(n,d,x,y,z,a,b)   (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b)
-#define ITTNOTIFY_VOID_D6(n,d,x,y,z,a,b,c) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b,c)
-#define ITTNOTIFY_DATA_D0(n,d)       (!(d)->flags) ?       0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d)
-#define ITTNOTIFY_DATA_D1(n,d,x)     (!(d)->flags) ?       0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x)
-#define ITTNOTIFY_DATA_D2(n,d,x,y)   (!(d)->flags) ?       0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y)
-#define ITTNOTIFY_DATA_D3(n,d,x,y,z) (!(d)->flags) ?       0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y,z)
-#define ITTNOTIFY_DATA_D4(n,d,x,y,z,a)     (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y,z,a)
-#define ITTNOTIFY_DATA_D5(n,d,x,y,z,a,b)   (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b)
-#define ITTNOTIFY_DATA_D6(n,d,x,y,z,a,b,c) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b,c)
-
-#ifdef ITT_STUB
-#undef ITT_STUB
-#endif
-#ifdef ITT_STUBV
-#undef ITT_STUBV
-#endif
-#define ITT_STUBV(api,type,name,args)                             \
-    typedef type (api* ITT_JOIN(ITTNOTIFY_NAME(name),_t)) args;   \
-    extern ITT_JOIN(ITTNOTIFY_NAME(name),_t) ITTNOTIFY_NAME(name);
-#define ITT_STUB ITT_STUBV
-/** @endcond */
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#define INTEL_ITTNOTIFY_API_PRIVATE
-#include "../ittnotify.h"
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _INTERNAL_ITTNOTIFY_H_ */
diff --git a/src/tbb/tools_api/ittnotify.h b/src/tbb/tools_api/ittnotify.h
index d6db08f..037588c 100644
--- a/src/tbb/tools_api/ittnotify.h
+++ b/src/tbb/tools_api/ittnotify.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef _ITTNOTIFY_H_
@@ -29,8 +29,7 @@
 The ITT API is used to annotate a user's program with additional information
 that can be used by correctness and performance tools. The user inserts
 calls in their program. Those calls generate information that is collected
-at runtime, and used by tools such as Intel(R) Parallel Amplifier and
-Intel(R) Parallel Inspector.
+at runtime, and used by Intel(R) Threading Tools.
 
 @section API Concepts
 The following general concepts are used throughout the API.
@@ -101,11 +100,17 @@ The same ID may not be reused for different instances, unless a previous
 #  define ITT_OS_MAC   3
 #endif /* ITT_OS_MAC */
 
+#ifndef ITT_OS_FREEBSD
+#  define ITT_OS_FREEBSD   4
+#endif /* ITT_OS_FREEBSD */
+
 #ifndef ITT_OS
 #  if defined WIN32 || defined _WIN32
 #    define ITT_OS ITT_OS_WIN
 #  elif defined( __APPLE__ ) && defined( __MACH__ )
 #    define ITT_OS ITT_OS_MAC
+#  elif defined( __FreeBSD__ )
+#    define ITT_OS ITT_OS_FREEBSD
 #  else
 #    define ITT_OS ITT_OS_LINUX
 #  endif
@@ -123,11 +128,17 @@ The same ID may not be reused for different instances, unless a previous
 #  define ITT_PLATFORM_MAC 3
 #endif /* ITT_PLATFORM_MAC */
 
+#ifndef ITT_PLATFORM_FREEBSD
+#  define ITT_PLATFORM_FREEBSD 4
+#endif /* ITT_PLATFORM_FREEBSD */
+
 #ifndef ITT_PLATFORM
 #  if ITT_OS==ITT_OS_WIN
 #    define ITT_PLATFORM ITT_PLATFORM_WIN
 #  elif ITT_OS==ITT_OS_MAC
 #    define ITT_PLATFORM ITT_PLATFORM_MAC
+#  elif ITT_OS==ITT_OS_FREEBSD
+#    define ITT_PLATFORM ITT_PLATFORM_FREEBSD
 #  else
 #    define ITT_PLATFORM ITT_PLATFORM_POSIX
 #  endif
@@ -151,7 +162,7 @@ The same ID may not be reused for different instances, unless a previous
 #  if ITT_PLATFORM==ITT_PLATFORM_WIN
 #    define CDECL __cdecl
 #  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#    if defined _M_IX86 || defined __i386__ 
+#    if defined _M_IX86 || defined __i386__
 #      define CDECL __attribute__ ((cdecl))
 #    else  /* _M_IX86 || __i386__ */
 #      define CDECL /* actual only on x86 platform */
@@ -164,7 +175,7 @@ The same ID may not be reused for different instances, unless a previous
 #    define STDCALL __stdcall
 #  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 #    if defined _M_IX86 || defined __i386__
-#      define STDCALL __attribute__ ((stdcall)) 
+#      define STDCALL __attribute__ ((stdcall))
 #    else  /* _M_IX86 || __i386__ */
 #      define STDCALL /* supported only on x86 platform */
 #    endif /* _M_IX86 || __i386__ */
@@ -189,11 +200,12 @@ The same ID may not be reused for different instances, unless a previous
  * if no optimization level was specified.
  */
 #ifdef __STRICT_ANSI__
-#define ITT_INLINE           static inline
+#define ITT_INLINE           static
+#define ITT_INLINE_ATTRIBUTE __attribute__((unused))
 #else  /* __STRICT_ANSI__ */
 #define ITT_INLINE           static inline
+#define ITT_INLINE_ATTRIBUTE __attribute__((always_inline, unused))
 #endif /* __STRICT_ANSI__ */
-#define ITT_INLINE_ATTRIBUTE __attribute__ ((always_inline, unused))
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 /** @endcond */
 
@@ -304,25 +316,33 @@ extern "C" {
 void ITTAPI __itt_pause(void);
 /** @brief Resume collection */
 void ITTAPI __itt_resume(void);
+/** @brief Detach collection */
+void ITTAPI __itt_detach(void);
 
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
 ITT_STUBV(ITTAPI, void, pause,  (void))
 ITT_STUBV(ITTAPI, void, resume, (void))
+ITT_STUBV(ITTAPI, void, detach, (void))
 #define __itt_pause      ITTNOTIFY_VOID(pause)
 #define __itt_pause_ptr  ITTNOTIFY_NAME(pause)
 #define __itt_resume     ITTNOTIFY_VOID(resume)
 #define __itt_resume_ptr ITTNOTIFY_NAME(resume)
+#define __itt_detach     ITTNOTIFY_VOID(detach)
+#define __itt_detach_ptr ITTNOTIFY_NAME(detach)
 #else  /* INTEL_NO_ITTNOTIFY_API */
 #define __itt_pause()
 #define __itt_pause_ptr  0
 #define __itt_resume()
 #define __itt_resume_ptr 0
+#define __itt_detach()
+#define __itt_detach_ptr 0
 #endif /* INTEL_NO_ITTNOTIFY_API */
 #else  /* INTEL_NO_MACRO_BODY */
 #define __itt_pause_ptr  0
 #define __itt_resume_ptr 0
+#define __itt_detach_ptr 0
 #endif /* INTEL_NO_MACRO_BODY */
 /** @endcond */
 /** @} control group */
@@ -427,19 +447,19 @@ ITT_STUBV(ITTAPI, void, thread_ignore, (void))
  *********************************************************************/
 /** @{ */
 /**
- * @hideinitializer 
+ * @hideinitializer
  * @brief possible value for suppression mask
  */
 #define __itt_suppress_all_errors 0x7fffffff
 
 /**
- * @hideinitializer 
+ * @hideinitializer
  * @brief possible value for suppression mask (suppresses errors from threading analysis)
  */
 #define __itt_suppress_threading_errors 0x000000ff
 
 /**
- * @hideinitializer 
+ * @hideinitializer
  * @brief possible value for suppression mask (suppresses errors from memory analysis)
  */
 #define __itt_suppress_memory_errors 0x0000ff00
@@ -465,7 +485,7 @@ ITT_STUBV(ITTAPI, void, suppress_push, (unsigned int mask))
 /** @endcond */
 
 /**
- * @brief Undo the effects of the matching call to __itt_suppress_push  
+ * @brief Undo the effects of the matching call to __itt_suppress_push
  */
 void ITTAPI __itt_suppress_pop(void);
 
@@ -1595,13 +1615,13 @@ ITT_STUBV(ITTAPI, void, heap_record_memory_growth_end, (void))
  * @brief Specify the type of heap detection/reporting to modify.
  */
 /**
- * @hideinitializer 
+ * @hideinitializer
  * @brief Report on memory leaks.
  */
 #define __itt_heap_leaks 0x00000001
 
 /**
- * @hideinitializer 
+ * @hideinitializer
  * @brief Report on memory growth.
  */
 #define __itt_heap_growth 0x00000002
@@ -1678,7 +1698,7 @@ typedef struct ___itt_domain
  * @ingroup domains
  * @brief Create a domain.
  * Create domain using some domain name: the URI naming style is recommended.
- * Because the set of domains is expected to be static over the application's 
+ * Because the set of domains is expected to be static over the application's
  * execution time, there is no mechanism to destroy a domain.
  * Any domain can be accessed by any thread in the process, regardless of
  * which thread created the domain. This call is thread-safe.
@@ -1762,7 +1782,7 @@ static const __itt_id __itt_null = { 0, 0, 0 };
  * @ingroup ids
  * @brief A convenience function is provided to create an ID without domain control.
  * @brief This is a convenience function to initialize an __itt_id structure. This function
- * does not affect the trace collector runtime in any way. After you make the ID with this
+ * does not affect the collector runtime in any way. After you make the ID with this
  * function, you still must create it with the __itt_id_create function before using the ID
  * to identify a named entity.
  * @param[in] addr The address of object; high QWORD of the ID value.
@@ -1813,7 +1833,7 @@ ITT_STUBV(ITTAPI, void, id_create, (const __itt_domain *domain, __itt_id id))
  * @brief Destroy an instance of identifier.
  * This ends the lifetime of the current instance of the given ID value in the trace.
  * Any relationships that are established after this lifetime ends are invalid.
- * This call must be performed before the given ID value can be reused for a different 
+ * This call must be performed before the given ID value can be reused for a different
  * named entity instance.
  * @param[in] domain The domain controlling the execution of this call.
  * @param[in] id The ID to destroy.
@@ -1931,7 +1951,7 @@ ITT_STUB(ITTAPI, __itt_string_handle*, string_handle_create,  (const char    *na
 typedef unsigned long long __itt_timestamp;
 /** @endcond */
 
-static const __itt_timestamp __itt_timestamp_none = (__itt_timestamp)-1LL;
+#define __itt_timestamp_none ((__itt_timestamp)-1LL)
 
 /** @cond exclude_from_gpa_documentation */
 
@@ -2170,18 +2190,42 @@ void ITTAPI __itt_task_begin_fn(const __itt_domain *domain, __itt_id taskid, __i
  */
 void ITTAPI __itt_task_end(const __itt_domain *domain);
 
+/**
+ * @ingroup tasks
+ * @brief Begin an overlapped task instance.
+ * @param[in] domain The domain for this task.
+ * @param[in] taskid The identifier for this task instance, *cannot* be __itt_null.
+ * @param[in] parentid The parent of this task, or __itt_null.
+ * @param[in] name The name of this task.
+ */
+void ITTAPI __itt_task_begin_overlapped(const __itt_domain* domain, __itt_id taskid, __itt_id parentid, __itt_string_handle* name);
+
+/**
+ * @ingroup tasks
+ * @brief End an overlapped task instance.
+ * @param[in] domain The domain for this task
+ * @param[in] taskid Explicit ID of finished task
+ */
+void ITTAPI __itt_task_end_overlapped(const __itt_domain *domain, __itt_id taskid);
+
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
 ITT_STUBV(ITTAPI, void, task_begin,    (const __itt_domain *domain, __itt_id id, __itt_id parentid, __itt_string_handle *name))
 ITT_STUBV(ITTAPI, void, task_begin_fn, (const __itt_domain *domain, __itt_id id, __itt_id parentid, void* fn))
 ITT_STUBV(ITTAPI, void, task_end,      (const __itt_domain *domain))
+ITT_STUBV(ITTAPI, void, task_begin_overlapped, (const __itt_domain *domain, __itt_id taskid, __itt_id parentid, __itt_string_handle *name))
+ITT_STUBV(ITTAPI, void, task_end_overlapped,   (const __itt_domain *domain, __itt_id taskid))
 #define __itt_task_begin(d,x,y,z)    ITTNOTIFY_VOID_D3(task_begin,d,x,y,z)
 #define __itt_task_begin_ptr         ITTNOTIFY_NAME(task_begin)
 #define __itt_task_begin_fn(d,x,y,z) ITTNOTIFY_VOID_D3(task_begin_fn,d,x,y,z)
 #define __itt_task_begin_fn_ptr      ITTNOTIFY_NAME(task_begin_fn)
 #define __itt_task_end(d)            ITTNOTIFY_VOID_D0(task_end,d)
 #define __itt_task_end_ptr           ITTNOTIFY_NAME(task_end)
+#define __itt_task_begin_overlapped(d,x,y,z) ITTNOTIFY_VOID_D3(task_begin_overlapped,d,x,y,z)
+#define __itt_task_begin_overlapped_ptr      ITTNOTIFY_NAME(task_begin_overlapped)
+#define __itt_task_end_overlapped(d,x)       ITTNOTIFY_VOID_D1(task_end_overlapped,d,x)
+#define __itt_task_end_overlapped_ptr        ITTNOTIFY_NAME(task_end_overlapped)
 #else  /* INTEL_NO_ITTNOTIFY_API */
 #define __itt_task_begin(domain,id,parentid,name)
 #define __itt_task_begin_ptr    0
@@ -2189,11 +2233,17 @@ ITT_STUBV(ITTAPI, void, task_end,      (const __itt_domain *domain))
 #define __itt_task_begin_fn_ptr 0
 #define __itt_task_end(domain)
 #define __itt_task_end_ptr      0
+#define __itt_task_begin_overlapped(domain,taskid,parentid,name)
+#define __itt_task_begin_overlapped_ptr         0
+#define __itt_task_end_overlapped(domain,taskid)
+#define __itt_task_end_overlapped_ptr           0
 #endif /* INTEL_NO_ITTNOTIFY_API */
 #else  /* INTEL_NO_MACRO_BODY */
 #define __itt_task_begin_ptr    0
 #define __itt_task_begin_fn_ptr 0
 #define __itt_task_end_ptr      0
+#define __itt_task_begin_overlapped_ptr 0
+#define __itt_task_end_overlapped_ptr   0
 #endif /* INTEL_NO_MACRO_BODY */
 /** @endcond */
 /** @} tasks group */
@@ -2372,7 +2422,7 @@ ITT_STUBV(ITTAPI, void, metadata_add, (const __itt_domain *domain, __itt_id id,
  * @param[in] id The identifier of the instance to which the metadata is to be added, or __itt_null to add to the current task
  * @param[in] key The name of the metadata
  * @param[in] data The metadata itself
- * @param[in] length The number of characters in the string, or -1 if the length is unknown but the string is null-terminated 
+ * @param[in] length The number of characters in the string, or -1 if the length is unknown but the string is null-terminated
 */
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 void ITTAPI __itt_metadata_str_addA(const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char *data, size_t length);
@@ -2408,9 +2458,9 @@ ITT_STUBV(ITTAPI, void, metadata_str_add, (const __itt_domain *domain, __itt_id
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 #else  /* INTEL_NO_ITTNOTIFY_API */
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
-#define __itt_metadata_str_addA(d,x,y,z,a) 
+#define __itt_metadata_str_addA(d,x,y,z,a)
 #define __itt_metadata_str_addA_ptr 0
-#define __itt_metadata_str_addW(d,x,y,z,a) 
+#define __itt_metadata_str_addW(d,x,y,z,a)
 #define __itt_metadata_str_addW_ptr 0
 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 #define __itt_metadata_str_add(d,x,y,z,a)
@@ -2434,7 +2484,7 @@ ITT_STUBV(ITTAPI, void, metadata_str_add, (const __itt_domain *domain, __itt_id
  * @param[in] scope The scope of the instance to which the metadata is to be added
 
  * @param[in] id The identifier of the instance to which the metadata is to be added, or __itt_null to add to the current task
- 
+
  * @param[in] key The name of the metadata
  * @param[in] type The type of the metadata
  * @param[in] count The number of elements of the given type. If count == 0, no metadata will be added.
@@ -2467,7 +2517,7 @@ ITT_STUBV(ITTAPI, void, metadata_add_with_scope, (const __itt_domain *domain, __
 
  * @param[in] key The name of the metadata
  * @param[in] data The metadata itself
- * @param[in] length The number of characters in the string, or -1 if the length is unknown but the string is null-terminated 
+ * @param[in] length The number of characters in the string, or -1 if the length is unknown but the string is null-terminated
 */
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 void ITTAPI __itt_metadata_str_add_with_scopeA(const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const char *data, size_t length);
@@ -2503,9 +2553,9 @@ ITT_STUBV(ITTAPI, void, metadata_str_add_with_scope, (const __itt_domain *domain
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 #else  /* INTEL_NO_ITTNOTIFY_API */
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
-#define __itt_metadata_str_add_with_scopeA(d,x,y,z,a) 
+#define __itt_metadata_str_add_with_scopeA(d,x,y,z,a)
 #define __itt_metadata_str_add_with_scopeA_ptr  0
-#define __itt_metadata_str_add_with_scopeW(d,x,y,z,a) 
+#define __itt_metadata_str_add_with_scopeW(d,x,y,z,a)
 #define __itt_metadata_str_add_with_scopeW_ptr  0
 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 #define __itt_metadata_str_add_with_scope(d,x,y,z,a)
@@ -3091,9 +3141,9 @@ ITT_STUB(LIBITTAPI, int, event_end, (__itt_event event))
 
 /**
  * @enum __itt_av_data_type
- * @brief Defines types of arrays data (for C/C++ intrinsic types) 
+ * @brief Defines types of arrays data (for C/C++ intrinsic types)
  */
-typedef enum 
+typedef enum
 {
     __itt_e_first = 0,
     __itt_e_char = 0,  /* 1-byte integer */
@@ -3113,8 +3163,8 @@ typedef enum
  * @brief Save an array data to a file.
  * Output format is defined by the file extension. The csv and bmp formats are supported (bmp - for 2-dimensional array only).
  * @param[in] data - pointer to the array data
- * @param[in] rank - the rank of the array 
- * @param[in] dimensions - pointer to an array of integers, which specifies the array dimensions. 
+ * @param[in] rank - the rank of the array
+ * @param[in] dimensions - pointer to an array of integers, which specifies the array dimensions.
  * The size of dimensions must be equal to the rank
  * @param[in] type - the type of the array, specified as one of the __itt_av_data_type values (for intrinsic types)
  * @param[in] filePath - the file path; the output format is defined by the file extension
@@ -3215,16 +3265,6 @@ extern "C" {
 #endif /* __cplusplus */
 
 /**
- * @ingroup tasks
- * @brief Begin an overlapped task instance.
- * @param[in] domain The domain for this task.
- * @param[in] taskid The identifier for this task instance, *cannot* be __itt_null.
- * @param[in] parentid The parent of this task, or __itt_null.
- * @param[in] name The name of this task.
- */
-void ITTAPI __itt_task_begin_overlapped(const __itt_domain* domain, __itt_id taskid, __itt_id parentid, __itt_string_handle* name);
-
-/**
  * @ingroup clockdomain
  * @brief Begin an overlapped task instance.
  * @param[in] domain The domain for this task
@@ -3237,14 +3277,6 @@ void ITTAPI __itt_task_begin_overlapped(const __itt_domain* domain, __itt_id tas
 void ITTAPI __itt_task_begin_overlapped_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid, __itt_id parentid, __itt_string_handle* name);
 
 /**
- * @ingroup tasks
- * @brief End an overlapped task instance.
- * @param[in] domain The domain for this task
- * @param[in] taskid Explicit ID of finished task
- */
-void ITTAPI __itt_task_end_overlapped(const __itt_domain *domain, __itt_id taskid);
-
-/**
  * @ingroup clockdomain
  * @brief End an overlapped task instance.
  * @param[in] domain The domain for this task
@@ -3257,30 +3289,19 @@ void ITTAPI __itt_task_end_overlapped_ex(const __itt_domain* domain, __itt_clock
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, task_begin_overlapped,          (const __itt_domain *domain, __itt_id taskid, __itt_id parentid, __itt_string_handle *name))
 ITT_STUBV(ITTAPI, void, task_begin_overlapped_ex,       (const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid, __itt_id parentid, __itt_string_handle* name))
-ITT_STUBV(ITTAPI, void, task_end_overlapped,            (const __itt_domain *domain, __itt_id taskid))
 ITT_STUBV(ITTAPI, void, task_end_overlapped_ex,         (const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid))
-#define __itt_task_begin_overlapped(d,x,y,z)            ITTNOTIFY_VOID_D3(task_begin_overlapped,d,x,y,z)
-#define __itt_task_begin_overlapped_ptr                 ITTNOTIFY_NAME(task_begin_overlapped)
 #define __itt_task_begin_overlapped_ex(d,x,y,z,a,b)     ITTNOTIFY_VOID_D5(task_begin_overlapped_ex,d,x,y,z,a,b)
 #define __itt_task_begin_overlapped_ex_ptr              ITTNOTIFY_NAME(task_begin_overlapped_ex)
-#define __itt_task_end_overlapped(d,x)                  ITTNOTIFY_VOID_D1(task_end_overlapped,d,x)
-#define __itt_task_end_overlapped_ptr                   ITTNOTIFY_NAME(task_end_overlapped)
 #define __itt_task_end_overlapped_ex(d,x,y,z)           ITTNOTIFY_VOID_D3(task_end_overlapped_ex,d,x,y,z)
 #define __itt_task_end_overlapped_ex_ptr                ITTNOTIFY_NAME(task_end_overlapped_ex)
 #else  /* INTEL_NO_ITTNOTIFY_API */
-#define __itt_task_begin_overlapped(domain,taskid,parentid,name)
-#define __itt_task_begin_overlapped_ptr         0
 #define __itt_task_begin_overlapped_ex(domain,clock_domain,timestamp,taskid,parentid,name)
 #define __itt_task_begin_overlapped_ex_ptr      0
-#define __itt_task_end_overlapped(domain,taskid)
-#define __itt_task_end_overlapped_ptr           0
 #define __itt_task_end_overlapped_ex(domain,clock_domain,timestamp,taskid)
 #define __itt_task_end_overlapped_ex_ptr        0
 #endif /* INTEL_NO_ITTNOTIFY_API */
 #else  /* INTEL_NO_MACRO_BODY */
-#define __itt_task_begin_overlapped_ptr         0
 #define __itt_task_begin_overlapped_ex_ptr      0
 #define __itt_task_end_overlapped_ptr           0
 #define __itt_task_end_overlapped_ex_ptr        0
diff --git a/src/tbb/tools_api/ittnotify_config.h b/src/tbb/tools_api/ittnotify_config.h
index 3cdf4a6..f439baf 100644
--- a/src/tbb/tools_api/ittnotify_config.h
+++ b/src/tbb/tools_api/ittnotify_config.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef _ITTNOTIFY_CONFIG_H_
@@ -34,11 +34,17 @@
 #  define ITT_OS_MAC   3
 #endif /* ITT_OS_MAC */
 
+#ifndef ITT_OS_FREEBSD
+#  define ITT_OS_FREEBSD   4
+#endif /* ITT_OS_FREEBSD */
+
 #ifndef ITT_OS
 #  if defined WIN32 || defined _WIN32
 #    define ITT_OS ITT_OS_WIN
 #  elif defined( __APPLE__ ) && defined( __MACH__ )
 #    define ITT_OS ITT_OS_MAC
+#  elif defined( __FreeBSD__ )
+#    define ITT_OS ITT_OS_FREEBSD
 #  else
 #    define ITT_OS ITT_OS_LINUX
 #  endif
@@ -56,11 +62,17 @@
 #  define ITT_PLATFORM_MAC 3
 #endif /* ITT_PLATFORM_MAC */
 
+#ifndef ITT_PLATFORM_FREEBSD
+#  define ITT_PLATFORM_FREEBSD 4
+#endif /* ITT_PLATFORM_FREEBSD */
+
 #ifndef ITT_PLATFORM
 #  if ITT_OS==ITT_OS_WIN
 #    define ITT_PLATFORM ITT_PLATFORM_WIN
 #  elif ITT_OS==ITT_OS_MAC
 #    define ITT_PLATFORM ITT_PLATFORM_MAC
+#  elif ITT_OS==ITT_OS_FREEBSD
+#    define ITT_PLATFORM ITT_PLATFORM_FREEBSD
 #  else
 #    define ITT_PLATFORM ITT_PLATFORM_POSIX
 #  endif
@@ -84,7 +96,7 @@
 #  if ITT_PLATFORM==ITT_PLATFORM_WIN
 #    define CDECL __cdecl
 #  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#    if defined _M_IX86 || defined __i386__ 
+#    if defined _M_IX86 || defined __i386__
 #      define CDECL __attribute__ ((cdecl))
 #    else  /* _M_IX86 || __i386__ */
 #      define CDECL /* actual only on x86 platform */
@@ -97,7 +109,7 @@
 #    define STDCALL __stdcall
 #  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 #    if defined _M_IX86 || defined __i386__
-#      define STDCALL __attribute__ ((stdcall)) 
+#      define STDCALL __attribute__ ((stdcall))
 #    else  /* _M_IX86 || __i386__ */
 #      define STDCALL /* supported only on x86 platform */
 #    endif /* _M_IX86 || __i386__ */
@@ -122,11 +134,12 @@
  * if no optimization level was specified.
  */
 #ifdef __STRICT_ANSI__
-#define ITT_INLINE           static inline
+#define ITT_INLINE           static
+#define ITT_INLINE_ATTRIBUTE __attribute__((unused))
 #else  /* __STRICT_ANSI__ */
 #define ITT_INLINE           static inline
+#define ITT_INLINE_ATTRIBUTE __attribute__((always_inline, unused))
 #endif /* __STRICT_ANSI__ */
-#define ITT_INLINE_ATTRIBUTE __attribute__ ((always_inline, unused))
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 /** @endcond */
 
@@ -142,6 +155,10 @@
 #  define ITT_ARCH_ARM  4
 #endif /* ITT_ARCH_ARM */
 
+#ifndef ITT_ARCH_PPC64
+#  define ITT_ARCH_PPC64  5
+#endif /* ITT_ARCH_PPC64 */
+
 #ifndef ITT_ARCH
 #  if defined _M_IX86 || defined __i386__
 #    define ITT_ARCH ITT_ARCH_IA32
@@ -151,13 +168,19 @@
 #    define ITT_ARCH ITT_ARCH_IA64
 #  elif defined _M_ARM || __arm__
 #    define ITT_ARCH ITT_ARCH_ARM
+#  elif defined __powerpc64__
+#    define ITT_ARCH ITT_ARCH_PPC64
 #  endif
 #endif
 
 #ifdef __cplusplus
 #  define ITT_EXTERN_C extern "C"
+#  define ITT_EXTERN_C_BEGIN extern "C" {
+#  define ITT_EXTERN_C_END }
 #else
 #  define ITT_EXTERN_C /* nothing */
+#  define ITT_EXTERN_C_BEGIN /* nothing */
+#  define ITT_EXTERN_C_END /* nothing */
 #endif /* __cplusplus */
 
 #define ITT_TO_STR_AUX(x) #x
@@ -220,8 +243,8 @@ typedef pthread_mutex_t   mutex_t;
 #define __itt_unload_lib(handle)  FreeLibrary(handle)
 #define __itt_system_error()      (int)GetLastError()
 #define __itt_fstrcmp(s1, s2)     lstrcmpA(s1, s2)
-#define __itt_fstrlen(s)          lstrlenA(s)
-#define __itt_fstrcpyn(s1, s2, l) lstrcpynA(s1, s2, l)
+#define __itt_fstrnlen(s, l)      strnlen_s(s, l)
+#define __itt_fstrcpyn(s1, b, s2, l) strncpy_s(s1, b, s2, l)
 #define __itt_fstrdup(s)          _strdup(s)
 #define __itt_thread_id()         GetCurrentThreadId()
 #define __itt_thread_yield()      SwitchToThread()
@@ -261,8 +284,19 @@ ITT_INLINE long __itt_interlocked_increment(volatile long* ptr)
 #define __itt_unload_lib(handle)  dlclose(handle)
 #define __itt_system_error()      errno
 #define __itt_fstrcmp(s1, s2)     strcmp(s1, s2)
-#define __itt_fstrlen(s)          strlen(s)
-#define __itt_fstrcpyn(s1, s2, l) strncpy(s1, s2, l)
+
+/* makes customer code define safe APIs for SDL_STRNLEN_S and SDL_STRNCPY_S */
+#ifdef SDL_STRNLEN_S
+#define __itt_fstrnlen(s, l)      SDL_STRNLEN_S(s, l)
+#else
+#define __itt_fstrnlen(s, l)      strlen(s)
+#endif /* SDL_STRNLEN_S */
+#ifdef SDL_STRNCPY_S
+#define __itt_fstrcpyn(s1, b, s2, l) SDL_STRNCPY_S(s1, b, s2, l)
+#else
+#define __itt_fstrcpyn(s1, b, s2, l) strncpy(s1, s2, l)
+#endif /* SDL_STRNCPY_S */
+
 #define __itt_fstrdup(s)          strdup(s)
 #define __itt_thread_id()         pthread_self()
 #define __itt_thread_yield()      sched_yield()
@@ -284,7 +318,7 @@ ITT_INLINE long __TBB_machine_fetchadd4(volatile void* ptr, long addend)
                           : "memory");
     return result;
 }
-#elif ITT_ARCH==ITT_ARCH_ARM
+#elif ITT_ARCH==ITT_ARCH_ARM || ITT_ARCH==ITT_ARCH_PPC64
 #define __TBB_machine_fetchadd4(addr, val) __sync_fetch_and_add(addr, val)
 #endif /* ITT_ARCH==ITT_ARCH_IA64 */
 #ifndef ITT_SIMPLE_INIT
@@ -407,7 +441,7 @@ typedef struct ___itt_global
 #define NEW_DOMAIN_W(gptr,h,h_tail,name) { \
     h = (__itt_domain*)malloc(sizeof(__itt_domain)); \
     if (h != NULL) { \
-        h->flags  = 0;    /* domain is disabled by default */ \
+        h->flags  = 1;    /* domain is enabled by default */ \
         h->nameA  = NULL; \
         h->nameW  = name ? _wcsdup(name) : NULL; \
         h->extra1 = 0;    /* reserved */ \
@@ -423,7 +457,7 @@ typedef struct ___itt_global
 #define NEW_DOMAIN_A(gptr,h,h_tail,name) { \
     h = (__itt_domain*)malloc(sizeof(__itt_domain)); \
     if (h != NULL) { \
-        h->flags  = 0;    /* domain is disabled by default */ \
+        h->flags  = 1;    /* domain is enabled by default */ \
         h->nameA  = name ? __itt_fstrdup(name) : NULL; \
         h->nameW  = NULL; \
         h->extra1 = 0;    /* reserved */ \
diff --git a/src/tbb/tools_api/ittnotify_static.c b/src/tbb/tools_api/ittnotify_static.c
index 1d1af20..c086745 100644
--- a/src/tbb/tools_api/ittnotify_static.c
+++ b/src/tbb/tools_api/ittnotify_static.c
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "ittnotify_config.h"
@@ -39,13 +39,13 @@
 
 #include "disable_warnings.h"
 
-static const char api_version[] = API_VERSION "\0\n@(#) $Revision: 336044 $\n";
+static const char api_version[] = API_VERSION "\0\n@(#) $Revision: 413915 $\n";
 
 #define _N_(n) ITT_JOIN(INTEL_ITTNOTIFY_PREFIX,n)
 
 #if ITT_OS==ITT_OS_WIN
 static const char* ittnotify_lib_name = "libittnotify.dll";
-#elif ITT_OS==ITT_OS_LINUX
+#elif ITT_OS==ITT_OS_LINUX || ITT_OS==ITT_OS_FREEBSD
 static const char* ittnotify_lib_name = "libittnotify.so";
 #elif ITT_OS==ITT_OS_MAC
 static const char* ittnotify_lib_name = "libittnotify.dylib";
@@ -76,7 +76,15 @@ static const char* ittnotify_lib_name = "libittnotify.dylib";
 #endif
 
 /* default location of userapi collector on Android */
-#define ANDROID_ITTNOTIFY_DEFAULT_PATH  "/data/data/com.intel.vtune/intel/libittnotify.so"
+#define ANDROID_ITTNOTIFY_DEFAULT_PATH_MASK(x)  "/data/data/com.intel.vtune/perfrun/lib" \
+                                                #x "/runtime/libittnotify.so"
+
+#if ITT_ARCH==ITT_ARCH_IA32 || ITT_ARCH==ITT_ARCH_ARM
+#define ANDROID_ITTNOTIFY_DEFAULT_PATH  ANDROID_ITTNOTIFY_DEFAULT_PATH_MASK(32)
+#else
+#define ANDROID_ITTNOTIFY_DEFAULT_PATH  ANDROID_ITTNOTIFY_DEFAULT_PATH_MASK(64)
+#endif
+
 #endif
 
 
@@ -129,7 +137,7 @@ static __itt_fini_ittlib_t* __itt_fini_ittlib_ptr = _N_(fini_ittlib);
 #define ITT_STUB(api,type,name,args,params,ptr,group,format)   \
 static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args;\
 typedef type api ITT_JOIN(_N_(name),_t) args;                  \
-ITT_EXTERN_C { ITT_JOIN(_N_(name),_t)* ITTNOTIFY_NAME(name) = ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)); }  \
+ITT_EXTERN_C_BEGIN ITT_JOIN(_N_(name),_t)* ITTNOTIFY_NAME(name) = ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)); ITT_EXTERN_C_END \
 static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args \
 {                                                              \
     __itt_init_ittlib_name(NULL, __itt_group_all);             \
@@ -142,7 +150,7 @@ static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args \
 #define ITT_STUBV(api,type,name,args,params,ptr,group,format)  \
 static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args;\
 typedef type api ITT_JOIN(_N_(name),_t) args;                  \
-ITT_EXTERN_C { ITT_JOIN(_N_(name),_t)* ITTNOTIFY_NAME(name) = ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)); }  \
+ITT_EXTERN_C_BEGIN ITT_JOIN(_N_(name),_t)* ITTNOTIFY_NAME(name) = ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)); ITT_EXTERN_C_END \
 static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args \
 {                                                              \
     __itt_init_ittlib_name(NULL, __itt_group_all);             \
@@ -160,12 +168,12 @@ static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args \
 #define ITT_STUB(api,type,name,args,params,ptr,group,format)   \
 static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args;\
 typedef type api ITT_JOIN(_N_(name),_t) args;                  \
-ITT_EXTERN_C { ITT_JOIN(_N_(name),_t)* ITTNOTIFY_NAME(name) = ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)); }
+ITT_EXTERN_C_BEGIN ITT_JOIN(_N_(name),_t)* ITTNOTIFY_NAME(name) = ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)); ITT_EXTERN_C_END
 
 #define ITT_STUBV(api,type,name,args,params,ptr,group,format)  \
 static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args;\
 typedef type api ITT_JOIN(_N_(name),_t) args;                  \
-ITT_EXTERN_C { ITT_JOIN(_N_(name),_t)* ITTNOTIFY_NAME(name) = ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)); }
+ITT_EXTERN_C_BEGIN ITT_JOIN(_N_(name),_t)* ITTNOTIFY_NAME(name) = ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)); ITT_EXTERN_C_END
 
 #define __ITT_INTERNAL_INIT
 #include "ittnotify_static.h"
@@ -217,48 +225,6 @@ static __itt_api_info api_list[] = {
 #pragma warning(pop)
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 
-/* private, init thread info item. used for internal purposes */
-static __itt_thread_info init_thread_info = {
-    (const char*)NULL,                        /* nameA */
-#if defined(UNICODE) || defined(_UNICODE)
-    (const wchar_t*)NULL,                     /* nameW */
-#else
-    (void*)NULL,                              /* nameW */
-#endif
-    0,                                        /* tid */
-    __itt_thread_normal,                      /* state */
-    0,                                        /* extra1 */
-    (void*)NULL,                              /* extra2 */
-    (__itt_thread_info*)NULL                  /* next */
-};
-
-/* private, NULL domain item. used for internal purposes */
-static __itt_domain null_domain = {
-    0,                                        /* flags:  disabled by default */
-    (const char*)NULL,                        /* nameA */
-#if defined(UNICODE) || defined(_UNICODE)
-    (const wchar_t*)NULL,                     /* nameW */
-#else
-    (void*)NULL,                              /* nameW */
-#endif
-    0,                                        /* extra1 */
-    (void*)NULL,                              /* extra2 */
-    (__itt_domain*)NULL                       /* next */
-};
-
-/* private, NULL string handle item. used for internal purposes */
-static __itt_string_handle null_string_handle = {
-    (const char*)NULL,                        /* strA */
-#if defined(UNICODE) || defined(_UNICODE)
-    (const wchar_t*)NULL,                     /* strW */
-#else
-    (void*)NULL,                              /* strW */
-#endif
-    0,                                        /* extra1 */
-    (void*)NULL,                              /* extra2 */
-    (__itt_string_handle*)NULL                /* next */
-};
-
 static const char dll_path[PATH_MAX] = { 0 };
 
 /* static part descriptor which handles. all notification api attributes. */
@@ -274,9 +240,9 @@ __itt_global _N_(_ittapi_global) = {
     (const char**)&dll_path,                       /* dll_path_ptr */
     (__itt_api_info*)&api_list,                    /* api_list_ptr */
     NULL,                                          /* next __itt_global */
-    (__itt_thread_info*)&init_thread_info,         /* thread_list */
-    (__itt_domain*)&null_domain,                   /* domain_list */
-    (__itt_string_handle*)&null_string_handle,     /* string_list */
+    NULL,                                          /* thread_list */
+    NULL,                                          /* domain_list */
+    NULL,                                          /* string_list */
     __itt_collection_normal                        /* collection state */
 };
 
@@ -294,14 +260,13 @@ ITT_EXTERN_C void _N_(error_handler)(__itt_error_code, va_list args);
 #pragma warning(disable: 4055) /* warning C4055: 'type cast' : from data pointer 'void *' to function pointer 'XXX' */
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 
-static void __itt_report_error(__itt_error_code code, ...)
-{
+static void __itt_report_error_impl(int code, ...) {
     va_list args;
     va_start(args, code);
     if (_N_(_ittapi_global).error_handler != NULL)
     {
         __itt_error_handler_t* handler = (__itt_error_handler_t*)(size_t)_N_(_ittapi_global).error_handler;
-        handler(code, args);
+        handler((__itt_error_code)code, args);
     }
 #ifdef ITT_NOTIFY_EXT_REPORT
     _N_(error_handler)(code, args);
@@ -309,6 +274,11 @@ static void __itt_report_error(__itt_error_code code, ...)
     va_end(args);
 }
 
+//va_start cannot take enum (__itt_error_code) on clang, so it is necessary to transform it to int
+#define __itt_report_error(code, ...) \
+                __itt_report_error_impl((int)code,__VA_ARGS__)
+
+
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 #pragma warning(pop)
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
@@ -316,23 +286,28 @@ static void __itt_report_error(__itt_error_code code, ...)
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 static __itt_domain* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(domain_createW),_init))(const wchar_t* name)
 {
-    __itt_domain *h_tail, *h;
+    __itt_domain *h_tail = NULL, *h = NULL;
 
-    if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list->tid == 0)
+    if (name == NULL)
     {
-        __itt_init_ittlib_name(NULL, __itt_group_all);
-        if (ITTNOTIFY_NAME(domain_createW) && ITTNOTIFY_NAME(domain_createW) != ITT_VERSIONIZE(ITT_JOIN(_N_(domain_createW),_init)))
-            return ITTNOTIFY_NAME(domain_createW)(name);
+        return NULL;
     }
 
-    if (name == NULL)
-        return _N_(_ittapi_global).domain_list;
-
     ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global));
+    if (_N_(_ittapi_global).api_initialized)
+    {
+        if (ITTNOTIFY_NAME(domain_createW) && ITTNOTIFY_NAME(domain_createW) != ITT_VERSIONIZE(ITT_JOIN(_N_(domain_createW),_init)))
+        {
+            __itt_mutex_unlock(&_N_(_ittapi_global).mutex);
+            return ITTNOTIFY_NAME(domain_createW)(name);
+        }
+    }
     for (h_tail = NULL, h = _N_(_ittapi_global).domain_list; h != NULL; h_tail = h, h = h->next)
-        if (h->nameW != NULL && !wcscmp(h->nameW, name))
-            break;
-    if (h == NULL) {
+    {
+        if (h->nameW != NULL && !wcscmp(h->nameW, name)) break;
+    }
+    if (h == NULL)
+    {
         NEW_DOMAIN_W(&_N_(_ittapi_global),h,h_tail,name);
     }
     __itt_mutex_unlock(&_N_(_ittapi_global).mutex);
@@ -344,28 +319,36 @@ static __itt_domain* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(domain_createA),_init))(
 static __itt_domain* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(domain_create),_init))(const char* name)
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 {
-    __itt_domain *h_tail, *h;
+    __itt_domain *h_tail = NULL, *h = NULL;
 
-    if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list->tid == 0)
+    if (name == NULL)
+    {
+        return NULL;
+    }
+
+    ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global));
+    if (_N_(_ittapi_global).api_initialized)
     {
-        __itt_init_ittlib_name(NULL, __itt_group_all);
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
         if (ITTNOTIFY_NAME(domain_createA) && ITTNOTIFY_NAME(domain_createA) != ITT_VERSIONIZE(ITT_JOIN(_N_(domain_createA),_init)))
+        {
+            __itt_mutex_unlock(&_N_(_ittapi_global).mutex);
             return ITTNOTIFY_NAME(domain_createA)(name);
+        }
 #else
         if (ITTNOTIFY_NAME(domain_create) && ITTNOTIFY_NAME(domain_create) != ITT_VERSIONIZE(ITT_JOIN(_N_(domain_create),_init)))
+        {
+            __itt_mutex_unlock(&_N_(_ittapi_global).mutex);
             return ITTNOTIFY_NAME(domain_create)(name);
+        }
 #endif
     }
-
-    if (name == NULL)
-        return _N_(_ittapi_global).domain_list;
-
-    ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global));
     for (h_tail = NULL, h = _N_(_ittapi_global).domain_list; h != NULL; h_tail = h, h = h->next)
-        if (h->nameA != NULL && !__itt_fstrcmp(h->nameA, name))
-            break;
-    if (h == NULL) {
+    {
+        if (h->nameA != NULL && !__itt_fstrcmp(h->nameA, name)) break;
+    }
+    if (h == NULL)
+    {
         NEW_DOMAIN_A(&_N_(_ittapi_global),h,h_tail,name);
     }
     __itt_mutex_unlock(&_N_(_ittapi_global).mutex);
@@ -375,23 +358,28 @@ static __itt_domain* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(domain_create),_init))(c
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 static __itt_string_handle* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_createW),_init))(const wchar_t* name)
 {
-    __itt_string_handle *h_tail, *h;
+    __itt_string_handle *h_tail = NULL, *h = NULL;
 
-    if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list->tid == 0)
+    if (name == NULL)
     {
-        __itt_init_ittlib_name(NULL, __itt_group_all);
-        if (ITTNOTIFY_NAME(string_handle_createW) && ITTNOTIFY_NAME(string_handle_createW) != ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_createW),_init)))
-            return ITTNOTIFY_NAME(string_handle_createW)(name);
+        return NULL;
     }
 
-    if (name == NULL)
-        return _N_(_ittapi_global).string_list;
-
     ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global));
+    if (_N_(_ittapi_global).api_initialized)
+    {
+        if (ITTNOTIFY_NAME(string_handle_createW) && ITTNOTIFY_NAME(string_handle_createW) != ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_createW),_init)))
+        {
+            __itt_mutex_unlock(&_N_(_ittapi_global).mutex);
+            return ITTNOTIFY_NAME(string_handle_createW)(name);
+        }
+    }
     for (h_tail = NULL, h = _N_(_ittapi_global).string_list; h != NULL; h_tail = h, h = h->next)
-        if (h->strW != NULL && !wcscmp(h->strW, name))
-            break;
-    if (h == NULL) {
+    {
+        if (h->strW != NULL && !wcscmp(h->strW, name)) break;
+    }
+    if (h == NULL) 
+    {
         NEW_STRING_HANDLE_W(&_N_(_ittapi_global),h,h_tail,name);
     }
     __itt_mutex_unlock(&_N_(_ittapi_global).mutex);
@@ -403,28 +391,36 @@ static __itt_string_handle* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_cre
 static __itt_string_handle* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_create),_init))(const char* name)
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 {
-    __itt_string_handle *h_tail, *h;
+    __itt_string_handle *h_tail = NULL, *h = NULL;
 
-    if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list->tid == 0)
+    if (name == NULL)
+    {
+        return NULL;
+    }
+
+    ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global));
+    if (_N_(_ittapi_global).api_initialized)
     {
-        __itt_init_ittlib_name(NULL, __itt_group_all);
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
         if (ITTNOTIFY_NAME(string_handle_createA) && ITTNOTIFY_NAME(string_handle_createA) != ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_createA),_init)))
+        {
+            __itt_mutex_unlock(&_N_(_ittapi_global).mutex);
             return ITTNOTIFY_NAME(string_handle_createA)(name);
+        }
 #else
         if (ITTNOTIFY_NAME(string_handle_create) && ITTNOTIFY_NAME(string_handle_create) != ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_create),_init)))
+        {
+            __itt_mutex_unlock(&_N_(_ittapi_global).mutex);
             return ITTNOTIFY_NAME(string_handle_create)(name);
+        }
 #endif
     }
-
-    if (name == NULL)
-        return _N_(_ittapi_global).string_list;
-
-    ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global));
     for (h_tail = NULL, h = _N_(_ittapi_global).string_list; h != NULL; h_tail = h, h = h->next)
-        if (h->strA != NULL && !__itt_fstrcmp(h->strA, name))
-            break;
-    if (h == NULL) {
+    {
+        if (h->strA != NULL && !__itt_fstrcmp(h->strA, name)) break;
+    }
+    if (h == NULL)
+    {
         NEW_STRING_HANDLE_A(&_N_(_ittapi_global),h,h_tail,name);
     }
     __itt_mutex_unlock(&_N_(_ittapi_global).mutex);
@@ -435,65 +431,52 @@ static __itt_string_handle* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_cre
 
 static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(pause),_init))(void)
 {
-    if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list->tid == 0)
+    if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list == NULL)
     {
         __itt_init_ittlib_name(NULL, __itt_group_all);
-        if (ITTNOTIFY_NAME(pause) && ITTNOTIFY_NAME(pause) != ITT_VERSIONIZE(ITT_JOIN(_N_(pause),_init)))
-        {
-            ITTNOTIFY_NAME(pause)();
-            return;
-        }
     }
-    _N_(_ittapi_global).state = __itt_collection_paused;
+    if (ITTNOTIFY_NAME(pause) && ITTNOTIFY_NAME(pause) != ITT_VERSIONIZE(ITT_JOIN(_N_(pause),_init)))
+    {
+        ITTNOTIFY_NAME(pause)();
+    }
+    else
+    {
+        _N_(_ittapi_global).state = __itt_collection_paused;
+    }
 }
 
 static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(resume),_init))(void)
 {
-    if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list->tid == 0)
+    if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list == NULL)
     {
         __itt_init_ittlib_name(NULL, __itt_group_all);
-        if (ITTNOTIFY_NAME(resume) && ITTNOTIFY_NAME(resume) != ITT_VERSIONIZE(ITT_JOIN(_N_(resume),_init)))
-        {
-            ITTNOTIFY_NAME(resume)();
-            return;
-        }
     }
-    _N_(_ittapi_global).state = __itt_collection_normal;
+    if (ITTNOTIFY_NAME(resume) && ITTNOTIFY_NAME(resume) != ITT_VERSIONIZE(ITT_JOIN(_N_(resume),_init)))
+    {
+        ITTNOTIFY_NAME(resume)();
+    }
+    else
+    {
+        _N_(_ittapi_global).state = __itt_collection_normal;
+    }
 }
 
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameW),_init))(const wchar_t* name)
 {
-    TIDT tid = __itt_thread_id();
-    __itt_thread_info *h_tail, *h;
-
-    if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list->tid == 0)
+    if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list == NULL)
     {
         __itt_init_ittlib_name(NULL, __itt_group_all);
-        if (ITTNOTIFY_NAME(thread_set_nameW) && ITTNOTIFY_NAME(thread_set_nameW) != ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameW),_init)))
-        {
-            ITTNOTIFY_NAME(thread_set_nameW)(name);
-            return;
-        }
     }
-
-    __itt_mutex_lock(&_N_(_ittapi_global).mutex);
-    for (h_tail = NULL, h = _N_(_ittapi_global).thread_list; h != NULL; h_tail = h, h = h->next)
-        if (h->tid == tid)
-            break;
-    if (h == NULL) {
-        NEW_THREAD_INFO_W(&_N_(_ittapi_global), h, h_tail, tid, __itt_thread_normal, name);
-    }
-    else
+    if (ITTNOTIFY_NAME(thread_set_nameW) && ITTNOTIFY_NAME(thread_set_nameW) != ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameW),_init)))
     {
-        h->nameW = name ? _wcsdup(name) : NULL;
+        ITTNOTIFY_NAME(thread_set_nameW)(name);
     }
-    __itt_mutex_unlock(&_N_(_ittapi_global).mutex);
 }
 
 static int ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thr_name_setW),_init))(const wchar_t* name, int namelen)
 {
-    namelen = namelen;
+    (void)namelen;
     ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameW),_init))(name);
     return 0;
 }
@@ -503,51 +486,34 @@ static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameA),_init))(const c
 static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_name),_init))(const char* name)
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 {
-    TIDT tid = __itt_thread_id();
-    __itt_thread_info *h_tail, *h;
-
-    if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list->tid == 0)
+    if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list == NULL)
     {
         __itt_init_ittlib_name(NULL, __itt_group_all);
-#if ITT_PLATFORM==ITT_PLATFORM_WIN
-        if (ITTNOTIFY_NAME(thread_set_nameA) && ITTNOTIFY_NAME(thread_set_nameA) != ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameA),_init)))
-        {
-            ITTNOTIFY_NAME(thread_set_nameA)(name);
-            return;
-        }
-#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-        if (ITTNOTIFY_NAME(thread_set_name) && ITTNOTIFY_NAME(thread_set_name) != ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_name),_init)))
-        {
-            ITTNOTIFY_NAME(thread_set_name)(name);
-            return;
-        }
-#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
     }
-
-    __itt_mutex_lock(&_N_(_ittapi_global).mutex);
-    for (h_tail = NULL, h = _N_(_ittapi_global).thread_list; h != NULL; h_tail = h, h = h->next)
-        if (h->tid == tid)
-            break;
-    if (h == NULL) {
-        NEW_THREAD_INFO_A(&_N_(_ittapi_global), h, h_tail, tid, __itt_thread_normal, name);
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+    if (ITTNOTIFY_NAME(thread_set_nameA) && ITTNOTIFY_NAME(thread_set_nameA) != ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameA),_init)))
+    {
+        ITTNOTIFY_NAME(thread_set_nameA)(name);
     }
-    else
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+    if (ITTNOTIFY_NAME(thread_set_name) && ITTNOTIFY_NAME(thread_set_name) != ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_name),_init)))
     {
-        h->nameA = name ? __itt_fstrdup(name) : NULL;
+        ITTNOTIFY_NAME(thread_set_name)(name);
     }
-    __itt_mutex_unlock(&_N_(_ittapi_global).mutex);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 }
 
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 static int ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thr_name_setA),_init))(const char* name, int namelen)
 {
-    namelen = namelen;
+    (void)namelen;
     ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameA),_init))(name);
     return 0;
 }
 #else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 static int ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thr_name_set),_init))(const char* name, int namelen)
 {
+    (void)namelen;
     ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_name),_init))(name);
     return 0;
 }
@@ -555,32 +521,14 @@ static int ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thr_name_set),_init))(const char*
 
 static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thread_ignore),_init))(void)
 {
-    TIDT tid = __itt_thread_id();
-    __itt_thread_info *h_tail, *h;
-
-    if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list->tid == 0)
+    if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list == NULL)
     {
         __itt_init_ittlib_name(NULL, __itt_group_all);
-        if (ITTNOTIFY_NAME(thread_ignore) && ITTNOTIFY_NAME(thread_ignore) != ITT_VERSIONIZE(ITT_JOIN(_N_(thread_ignore),_init)))
-        {
-            ITTNOTIFY_NAME(thread_ignore)();
-            return;
-        }
-    }
-
-    __itt_mutex_lock(&_N_(_ittapi_global).mutex);
-    for (h_tail = NULL, h = _N_(_ittapi_global).thread_list; h != NULL; h_tail = h, h = h->next)
-        if (h->tid == tid)
-            break;
-    if (h == NULL) {
-        static const char* name = "unknown";
-        NEW_THREAD_INFO_A(&_N_(_ittapi_global), h, h_tail, tid, __itt_thread_ignored, name);
     }
-    else
+    if (ITTNOTIFY_NAME(thread_ignore) && ITTNOTIFY_NAME(thread_ignore) != ITT_VERSIONIZE(ITT_JOIN(_N_(thread_ignore),_init)))
     {
-        h->state = __itt_thread_ignored;
+        ITTNOTIFY_NAME(thread_ignore)();
     }
-    __itt_mutex_unlock(&_N_(_ittapi_global).mutex);
 }
 
 static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thr_ignore),_init))(void)
@@ -697,12 +645,12 @@ static const char* __itt_get_env_var(const char* name)
         char* env = getenv(name);
         if (env != NULL)
         {
-            size_t len = strlen(env);
+            size_t len = __itt_fstrnlen(env, MAX_ENV_VALUE_SIZE);
             size_t max_len = MAX_ENV_VALUE_SIZE - (size_t)(env_value - env_buff);
             if (len < max_len)
             {
                 const char* ret = (const char*)env_value;
-                strncpy(env_value, env, len + 1);
+                __itt_fstrcpyn(env_value, max_len, env, len + 1);
                 env_value += len + 1;
                 return ret;
             } else
@@ -720,10 +668,25 @@ static const char* __itt_get_lib_name(void)
 #ifdef __ANDROID__
     if (lib_name == NULL)
     {
-        const char* const system_wide_marker_filename = "/data/local/tmp/com.intel.itt.collector_lib";
-        int itt_marker_file_fd = open(system_wide_marker_filename, O_RDONLY);
+
+#if ITT_ARCH==ITT_ARCH_IA32 || ITT_ARCH==ITT_ARCH_ARM
+        const char* const marker_filename = "com.intel.itt.collector_lib_32";
+#else
+        const char* const marker_filename = "com.intel.itt.collector_lib_64";
+#endif
+
+        char system_wide_marker_filename[PATH_MAX] = {0};
+        int itt_marker_file_fd = -1;
         ssize_t res = 0;
 
+        res = snprintf(system_wide_marker_filename, PATH_MAX - 1, "%s%s", "/data/local/tmp/", marker_filename);
+        if (res < 0)
+        {
+            ITT_ANDROID_LOGE("Unable to concatenate marker file string.");
+            return lib_name;
+        }
+        itt_marker_file_fd = open(system_wide_marker_filename, O_RDONLY);
+
         if (itt_marker_file_fd == -1)
         {
             const pid_t my_pid = getpid();
@@ -733,7 +696,13 @@ static const char* __itt_get_lib_name(void)
             int cmdline_fd = 0;
 
             ITT_ANDROID_LOGI("Unable to open system-wide marker file.");
-            snprintf(cmdline_path, PATH_MAX - 1, "/proc/%d/cmdline", my_pid);
+            res = snprintf(cmdline_path, PATH_MAX - 1, "/proc/%d/cmdline", my_pid);
+            if (res < 0)
+            {
+                ITT_ANDROID_LOGE("Unable to get cmdline path string.");
+                return lib_name;
+            }
+
             ITT_ANDROID_LOGI("CMD file: %s\n", cmdline_path);
             cmdline_fd = open(cmdline_path, O_RDONLY);
             if (cmdline_fd == -1)
@@ -759,7 +728,13 @@ static const char* __itt_get_lib_name(void)
                 return lib_name;
             }
             ITT_ANDROID_LOGI("Package name: %s\n", package_name);
-            snprintf(app_sandbox_file, PATH_MAX - 1, "/data/data/%s/com.intel.itt.collector_lib", package_name);
+            res = snprintf(app_sandbox_file, PATH_MAX - 1, "/data/data/%s/%s", package_name, marker_filename);
+            if (res < 0)
+            {
+                ITT_ANDROID_LOGE("Unable to concatenate marker file string.");
+                return lib_name;
+            }
+
             ITT_ANDROID_LOGI("Lib marker file name: %s\n", app_sandbox_file);
             itt_marker_file_fd = open(app_sandbox_file, O_RDONLY);
             if (itt_marker_file_fd == -1)
@@ -790,7 +765,7 @@ static const char* __itt_get_lib_name(void)
                 ITT_ANDROID_LOGE("Unable to close %s file!", itt_marker_file_fd);
                 return lib_name;
             }
-            ITT_ANDROID_LOGI("Set env");
+            ITT_ANDROID_LOGI("Set env %s to %s", ITT_TO_STR(LIB_VAR_NAME), itt_lib_name);
             res = setenv(ITT_TO_STR(LIB_VAR_NAME), itt_lib_name, 0);
             if (res == -1)
             {
@@ -798,7 +773,7 @@ static const char* __itt_get_lib_name(void)
                 return lib_name;
             }
             lib_name = __itt_get_env_var(ITT_TO_STR(LIB_VAR_NAME));
-            ITT_ANDROID_LOGI("ITT Lib path from env: %s", itt_lib_name);
+            ITT_ANDROID_LOGI("ITT Lib path from env: %s", lib_name);
         }
     }
 #endif
@@ -807,7 +782,7 @@ static const char* __itt_get_lib_name(void)
 }
 
 /* Avoid clashes with std::min */
-#define __itt_min(a,b) (a) < (b) ? (a) : (b)
+#define __itt_min(a,b) ((a) < (b) ? (a) : (b))
 
 static __itt_group_id __itt_get_groups(void)
 {
@@ -823,7 +798,7 @@ static __itt_group_id __itt_get_groups(void)
         const char* chunk;
         while ((group_str = __itt_fsplit(group_str, ",; ", &chunk, &len)) != NULL)
         {
-            __itt_fstrcpyn(gr, chunk, sizeof(gr) - 1);
+            __itt_fstrcpyn(gr, sizeof(gr) - 1, chunk, len + 1);
             gr[__itt_min(len, (int)(sizeof(gr) - 1))] = 0;
 
             for (i = 0; group_list[i].name != NULL; i++)
@@ -854,6 +829,7 @@ static __itt_group_id __itt_get_groups(void)
 
     return res;
 }
+#undef __itt_min
 
 static int __itt_lib_version(lib_t lib)
 {
@@ -869,7 +845,7 @@ static int __itt_lib_version(lib_t lib)
 /* It's not used right now! Comment it out to avoid warnings.
 static void __itt_reinit_all_pointers(void)
 {
-    register int i;
+    int i;
     // Fill all pointers with initial stubs
     for (i = 0; _N_(_ittapi_global).api_list_ptr[i].name != NULL; i++)
         *_N_(_ittapi_global).api_list_ptr[i].func_ptr = _N_(_ittapi_global).api_list_ptr[i].init_func;
@@ -892,7 +868,7 @@ static void __itt_nullify_all_pointers(void)
 
 ITT_EXTERN_C void _N_(fini_ittlib)(void)
 {
-    __itt_api_fini_t* __itt_api_fini_ptr;
+    __itt_api_fini_t* __itt_api_fini_ptr = NULL;
     static volatile TIDT current_thread = 0;
 
     if (_N_(_ittapi_global).api_initialized)
@@ -903,14 +879,17 @@ ITT_EXTERN_C void _N_(fini_ittlib)(void)
             if (current_thread == 0)
             {
                 current_thread = __itt_thread_id();
-                if (_N_(_ittapi_global).lib) {
+                if (_N_(_ittapi_global).lib != NULL)
+                {
                     __itt_api_fini_ptr = (__itt_api_fini_t*)(size_t)__itt_get_proc(_N_(_ittapi_global).lib, "__itt_api_fini");
-                    if (__itt_api_fini_ptr)
-                        __itt_api_fini_ptr(&_N_(_ittapi_global));
-
-                    __itt_nullify_all_pointers();
+                }
+                if (__itt_api_fini_ptr)
+                {
+                    __itt_api_fini_ptr(&_N_(_ittapi_global));
                 }
 
+                __itt_nullify_all_pointers();
+
  /* TODO: !!! not safe !!! don't support unload so far.
   *             if (_N_(_ittapi_global).lib != NULL)
   *                 __itt_unload_lib(_N_(_ittapi_global).lib);
@@ -944,9 +923,10 @@ ITT_EXTERN_C int _N_(init_ittlib)(const char* lib_name, __itt_group_id init_grou
             if (current_thread == 0)
             {
                 current_thread = __itt_thread_id();
-                _N_(_ittapi_global).thread_list->tid = current_thread;
                 if (lib_name == NULL)
+                {
                     lib_name = __itt_get_lib_name();
+                }
                 groups = __itt_get_groups();
                 if (groups != __itt_group_none || lib_name != NULL)
                 {
@@ -1013,14 +993,12 @@ ITT_EXTERN_C int _N_(init_ittlib)(const char* lib_name, __itt_group_id init_grou
                     else
                     {
                         __itt_nullify_all_pointers();
-
-                        __itt_report_error(__itt_error_no_module, lib_name,
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
-                            __itt_system_error()
+                        int error = __itt_system_error();
 #else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-                            dlerror()
+                        const char* error = dlerror();
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-                        );
+                        __itt_report_error(__itt_error_no_module, lib_name, error);
                     }
                 }
                 else
@@ -1041,9 +1019,13 @@ ITT_EXTERN_C int _N_(init_ittlib)(const char* lib_name, __itt_group_id init_grou
 
     /* Evaluating if any function ptr is non empty and it's in init_groups */
     for (i = 0; _N_(_ittapi_global).api_list_ptr[i].name != NULL; i++)
+    {
         if (*_N_(_ittapi_global).api_list_ptr[i].func_ptr != _N_(_ittapi_global).api_list_ptr[i].null_func &&
             _N_(_ittapi_global).api_list_ptr[i].group & init_groups)
+        {
             return 1;
+        }
+    }
     return 0;
 }
 
diff --git a/src/tbb/tools_api/ittnotify_static.h b/src/tbb/tools_api/ittnotify_static.h
index c46e45a..6907b83 100644
--- a/src/tbb/tools_api/ittnotify_static.h
+++ b/src/tbb/tools_api/ittnotify_static.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "ittnotify_config.h"
@@ -74,6 +74,8 @@ ITT_STUBV(ITTAPI, void, enable_attach, (void), (ITT_NO_PARAMS), enable_attach, _
 
 #else  /* __ITT_INTERNAL_INIT */
 
+ITT_STUBV(ITTAPI, void, detach, (void), (ITT_NO_PARAMS), detach, __itt_group_control | __itt_group_legacy, "no args")
+
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 ITT_STUBV(ITTAPI, void, sync_createA, (void *addr, const char    *objtype, const char    *objname, int attribute), (ITT_FORMAT addr, objtype, objname, attribute), sync_createA, __itt_group_sync | __itt_group_fsync, "%p, \"%s\", \"%s\", %x")
 ITT_STUBV(ITTAPI, void, sync_createW, (void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute), (ITT_FORMAT addr, objtype, objname, attribute), sync_createW, __itt_group_sync | __itt_group_fsync, "%p, \"%S\", \"%S\", %x")
diff --git a/src/tbb/tools_api/ittnotify_types.h b/src/tbb/tools_api/ittnotify_types.h
index b9a04c2..83cb0dd 100644
--- a/src/tbb/tools_api/ittnotify_types.h
+++ b/src/tbb/tools_api/ittnotify_types.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 #ifndef _ITTNOTIFY_TYPES_H_
diff --git a/src/tbb/tools_api/legacy/ittnotify.h b/src/tbb/tools_api/legacy/ittnotify.h
index 115f086..e15734a 100644
--- a/src/tbb/tools_api/legacy/ittnotify.h
+++ b/src/tbb/tools_api/legacy/ittnotify.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef _LEGACY_ITTNOTIFY_H_
@@ -39,11 +39,17 @@
 #  define ITT_OS_MAC   3
 #endif /* ITT_OS_MAC */
 
+#ifndef ITT_OS_FREEBSD
+#  define ITT_OS_FREEBSD   4
+#endif /* ITT_OS_FREEBSD */
+
 #ifndef ITT_OS
 #  if defined WIN32 || defined _WIN32
 #    define ITT_OS ITT_OS_WIN
 #  elif defined( __APPLE__ ) && defined( __MACH__ )
 #    define ITT_OS ITT_OS_MAC
+#  elif defined( __FreeBSD__ )
+#    define ITT_OS ITT_OS_FREEBSD
 #  else
 #    define ITT_OS ITT_OS_LINUX
 #  endif
@@ -61,11 +67,17 @@
 #  define ITT_PLATFORM_MAC 3
 #endif /* ITT_PLATFORM_MAC */
 
+#ifndef ITT_PLATFORM_FREEBSD
+#  define ITT_PLATFORM_FREEBSD 4
+#endif /* ITT_PLATFORM_FREEBSD */
+
 #ifndef ITT_PLATFORM
 #  if ITT_OS==ITT_OS_WIN
 #    define ITT_PLATFORM ITT_PLATFORM_WIN
 #  elif ITT_OS==ITT_OS_MAC
 #    define ITT_PLATFORM ITT_PLATFORM_MAC
+#  elif ITT_OS==ITT_OS_FREEBSD
+#    define ITT_PLATFORM ITT_PLATFORM_FREEBSD
 #  else
 #    define ITT_PLATFORM ITT_PLATFORM_POSIX
 #  endif
@@ -127,11 +139,12 @@
  * if no optimization level was specified.
  */
 #ifdef __STRICT_ANSI__
-#define ITT_INLINE           static inline
+#define ITT_INLINE           static
+#define ITT_INLINE_ATTRIBUTE __attribute__((unused))
 #else  /* __STRICT_ANSI__ */
 #define ITT_INLINE           static inline
+#define ITT_INLINE_ATTRIBUTE __attribute__((always_inline, unused))
 #endif /* __STRICT_ANSI__ */
-#define ITT_INLINE_ATTRIBUTE __attribute__ ((always_inline, unused))
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 /** @endcond */
 
@@ -232,25 +245,33 @@ extern "C" {
 void ITTAPI __itt_pause(void);
 /** @brief Resume collection */
 void ITTAPI __itt_resume(void);
+/** @brief Detach collection */
+void ITTAPI __itt_detach(void);
 
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
 ITT_STUBV(ITTAPI, void, pause,   (void))
 ITT_STUBV(ITTAPI, void, resume,  (void))
+ITT_STUBV(ITTAPI, void, detach,  (void))
 #define __itt_pause      ITTNOTIFY_VOID(pause)
 #define __itt_pause_ptr  ITTNOTIFY_NAME(pause)
 #define __itt_resume     ITTNOTIFY_VOID(resume)
 #define __itt_resume_ptr ITTNOTIFY_NAME(resume)
+#define __itt_detach     ITTNOTIFY_VOID(detach)
+#define __itt_detach_ptr ITTNOTIFY_NAME(detach)
 #else  /* INTEL_NO_ITTNOTIFY_API */
 #define __itt_pause()
 #define __itt_pause_ptr  0
 #define __itt_resume()
 #define __itt_resume_ptr 0
+#define __itt_detach()
+#define __itt_detach_ptr 0
 #endif /* INTEL_NO_ITTNOTIFY_API */
 #else  /* INTEL_NO_MACRO_BODY */
 #define __itt_pause_ptr  0
 #define __itt_resume_ptr 0
+#define __itt_detach_ptr 0
 #endif /* INTEL_NO_MACRO_BODY */
 /** @endcond */
 #endif /* _ITTNOTIFY_H_ */
diff --git a/src/tbb/tools_api/prototype/ittnotify.h b/src/tbb/tools_api/prototype/ittnotify.h
deleted file mode 100644
index 7af8614..0000000
--- a/src/tbb/tools_api/prototype/ittnotify.h
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
-*/
-
-#ifndef _PROTOTYPE_ITTNOTIFY_H_
-#define _PROTOTYPE_ITTNOTIFY_H_
-
-/**
- * @file
- * @brief Prototype User API functions and types
- */
-
-/** @cond exclude_from_documentation */
-#ifndef ITT_OS_WIN
-#  define ITT_OS_WIN   1
-#endif /* ITT_OS_WIN */
-
-#ifndef ITT_OS_LINUX
-#  define ITT_OS_LINUX 2
-#endif /* ITT_OS_LINUX */
-
-#ifndef ITT_OS_MAC
-#  define ITT_OS_MAC   3
-#endif /* ITT_OS_MAC */
-
-#ifndef ITT_OS
-#  if defined WIN32 || defined _WIN32
-#    define ITT_OS ITT_OS_WIN
-#  elif defined( __APPLE__ ) && defined( __MACH__ )
-#    define ITT_OS ITT_OS_MAC
-#  else
-#    define ITT_OS ITT_OS_LINUX
-#  endif
-#endif /* ITT_OS */
-
-#ifndef ITT_PLATFORM_WIN
-#  define ITT_PLATFORM_WIN 1
-#endif /* ITT_PLATFORM_WIN */
-
-#ifndef ITT_PLATFORM_POSIX
-#  define ITT_PLATFORM_POSIX 2
-#endif /* ITT_PLATFORM_POSIX */
-
-#ifndef ITT_PLATFORM_MAC
-#  define ITT_PLATFORM_MAC 3
-#endif /* ITT_PLATFORM_MAC */
-
-#ifndef ITT_PLATFORM
-#  if ITT_OS==ITT_OS_WIN
-#    define ITT_PLATFORM ITT_PLATFORM_WIN
-#  elif ITT_OS==ITT_OS_MAC
-#    define ITT_PLATFORM ITT_PLATFORM_MAC
-#  else
-#    define ITT_PLATFORM ITT_PLATFORM_POSIX
-#  endif
-#endif /* ITT_PLATFORM */
-
-#if defined(_UNICODE) && !defined(UNICODE)
-#define UNICODE
-#endif
-
-#include <stddef.h>
-#if ITT_PLATFORM==ITT_PLATFORM_WIN
-#include <tchar.h>
-#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#include <stdint.h>
-#if defined(UNICODE) || defined(_UNICODE)
-#include <wchar.h>
-#endif /* UNICODE || _UNICODE */
-#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-
-#ifndef CDECL
-#  if ITT_PLATFORM==ITT_PLATFORM_WIN
-#    define CDECL __cdecl
-#  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#    if defined _M_IX86 || defined __i386__ 
-#      define CDECL __attribute__ ((cdecl))
-#    else  /* _M_IX86 || __i386__ */
-#      define CDECL /* actual only on x86 platform */
-#    endif /* _M_IX86 || __i386__ */
-#  endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#endif /* CDECL */
-
-#ifndef STDCALL
-#  if ITT_PLATFORM==ITT_PLATFORM_WIN
-#    define STDCALL __stdcall
-#  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#    if defined _M_IX86 || defined __i386__
-#      define STDCALL __attribute__ ((stdcall)) 
-#    else  /* _M_IX86 || __i386__ */
-#      define STDCALL /* supported only on x86 platform */
-#    endif /* _M_IX86 || __i386__ */
-#  endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#endif /* STDCALL */
-
-#define ITTAPI    CDECL
-#define LIBITTAPI CDECL
-
-/* TODO: Temporary for compatibility! */
-#define ITTAPI_CALL    CDECL
-#define LIBITTAPI_CALL CDECL
-
-#if ITT_PLATFORM==ITT_PLATFORM_WIN
-/* use __forceinline (VC++ specific) */
-#define ITT_INLINE           __forceinline
-#define ITT_INLINE_ATTRIBUTE /* nothing */
-#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-/*
- * Generally, functions are not inlined unless optimization is specified.
- * For functions declared inline, this attribute inlines the function even
- * if no optimization level was specified.
- */
-#ifdef __STRICT_ANSI__
-#define ITT_INLINE           static
-#else  /* __STRICT_ANSI__ */
-#define ITT_INLINE           static inline
-#endif /* __STRICT_ANSI__ */
-#define ITT_INLINE_ATTRIBUTE __attribute__ ((always_inline, unused))
-#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-/** @endcond */
-
-/** @cond exclude_from_documentation */
-/* Helper macro for joining tokens */
-#define ITT_JOIN_AUX(p,n) p##n
-#define ITT_JOIN(p,n)     ITT_JOIN_AUX(p,n)
-
-#ifdef ITT_MAJOR
-#undef ITT_MAJOR
-#endif
-#ifdef ITT_MINOR
-#undef ITT_MINOR
-#endif
-#define ITT_MAJOR     3
-#define ITT_MINOR     0
-
-/* Standard versioning of a token with major and minor version numbers */
-#define ITT_VERSIONIZE(x)    \
-    ITT_JOIN(x,              \
-    ITT_JOIN(_,              \
-    ITT_JOIN(ITT_MAJOR,      \
-    ITT_JOIN(_, ITT_MINOR))))
-
-#ifndef INTEL_ITTNOTIFY_PREFIX
-#  define INTEL_ITTNOTIFY_PREFIX __itt_
-#endif /* INTEL_ITTNOTIFY_PREFIX */
-#ifndef INTEL_ITTNOTIFY_POSTFIX
-#  define INTEL_ITTNOTIFY_POSTFIX _ptr_
-#endif /* INTEL_ITTNOTIFY_POSTFIX */
-
-#define ITTNOTIFY_NAME_AUX(n) ITT_JOIN(INTEL_ITTNOTIFY_PREFIX,n)
-#define ITTNOTIFY_NAME(n)     ITT_VERSIONIZE(ITTNOTIFY_NAME_AUX(ITT_JOIN(n,INTEL_ITTNOTIFY_POSTFIX)))
-
-#define ITTNOTIFY_VOID(n) (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)
-#define ITTNOTIFY_DATA(n) (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)
-
-#define ITTNOTIFY_VOID_D0(n,d)       (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d)
-#define ITTNOTIFY_VOID_D1(n,d,x)     (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x)
-#define ITTNOTIFY_VOID_D2(n,d,x,y)   (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y)
-#define ITTNOTIFY_VOID_D3(n,d,x,y,z) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z)
-#define ITTNOTIFY_VOID_D4(n,d,x,y,z,a)     (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a)
-#define ITTNOTIFY_VOID_D5(n,d,x,y,z,a,b)   (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b)
-#define ITTNOTIFY_VOID_D6(n,d,x,y,z,a,b,c) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b,c)
-#define ITTNOTIFY_DATA_D0(n,d)       (!(d)->flags) ?       0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d)
-#define ITTNOTIFY_DATA_D1(n,d,x)     (!(d)->flags) ?       0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x)
-#define ITTNOTIFY_DATA_D2(n,d,x,y)   (!(d)->flags) ?       0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y)
-#define ITTNOTIFY_DATA_D3(n,d,x,y,z) (!(d)->flags) ?       0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y,z)
-#define ITTNOTIFY_DATA_D4(n,d,x,y,z,a)     (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y,z,a)
-#define ITTNOTIFY_DATA_D5(n,d,x,y,z,a,b)   (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b)
-#define ITTNOTIFY_DATA_D6(n,d,x,y,z,a,b,c) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b,c)
-
-#ifdef ITT_STUB
-#undef ITT_STUB
-#endif
-#ifdef ITT_STUBV
-#undef ITT_STUBV
-#endif
-#define ITT_STUBV(api,type,name,args)                             \
-    typedef type (api* ITT_JOIN(ITTNOTIFY_NAME(name),_t)) args;   \
-    extern ITT_JOIN(ITTNOTIFY_NAME(name),_t) ITTNOTIFY_NAME(name);
-#define ITT_STUB ITT_STUBV
-/** @endcond */
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/**
- * @defgroup prototype Prototype API
- * @{
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _PROTOTYPE_ITTNOTIFY_H_ */
diff --git a/src/tbb/win32-tbb-export.def b/src/tbb/win32-tbb-export.def
index b5895ed..9f1b7dc 100644
--- a/src/tbb/win32-tbb-export.def
+++ b/src/tbb/win32-tbb-export.def
@@ -1,20 +1,20 @@
-; Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+; Copyright (c) 2005-2017 Intel Corporation
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+;     http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+;
+;
 ;
-; This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-; you can redistribute it and/or modify it under the terms of the GNU General Public License
-; version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-; Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 ;
-; As a special exception,  you may use this file  as part of a free software library without
-; restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-; functions from this file, or you compile this file and link it with other files to produce
-; an executable,  this file does not by itself cause the resulting executable to be covered
-; by the GNU General Public License. This exception does not however invalidate any other
-; reasons why the executable file might be covered by the GNU General Public License.
 
 EXPORTS
 
diff --git a/src/tbb/win32-tbb-export.lst b/src/tbb/win32-tbb-export.lst
index 18c2c9a..35b1833 100644
--- a/src/tbb/win32-tbb-export.lst
+++ b/src/tbb/win32-tbb-export.lst
@@ -1,20 +1,20 @@
-; Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+; Copyright (c) 2005-2017 Intel Corporation
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+;     http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+;
+;
 ;
-; This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-; you can redistribute it and/or modify it under the terms of the GNU General Public License
-; version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-; Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 ;
-; As a special exception,  you may use this file  as part of a free software library without
-; restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-; functions from this file, or you compile this file and link it with other files to produce
-; an executable,  this file does not by itself cause the resulting executable to be covered
-; by the GNU General Public License. This exception does not however invalidate any other
-; reasons why the executable file might be covered by the GNU General Public License.
 
 #include "tbb/tbb_config.h"
 
@@ -67,19 +67,23 @@ __TBB_SYMBOL( ?default_num_threads at task_scheduler_init@tbb@@SAHXZ )
 __TBB_SYMBOL( ?initialize at task_scheduler_init@tbb@@QAEXHI at Z )
 __TBB_SYMBOL( ?initialize at task_scheduler_init@tbb@@QAEXH at Z )
 __TBB_SYMBOL( ?terminate at task_scheduler_init@tbb@@QAEXXZ )
+__TBB_SYMBOL( ?internal_blocking_terminate at task_scheduler_init@tbb@@AAE_N_N at Z )
 #if __TBB_SCHEDULER_OBSERVER
 __TBB_SYMBOL( ?observe at task_scheduler_observer_v3@internal at tbb@@QAEX_N at Z )
 #endif /* __TBB_SCHEDULER_OBSERVER */
 
-#if __TBB_TASK_ARENA
 /* arena.cpp */
+__TBB_SYMBOL( ?internal_max_concurrency at task_arena_base@internal at interface7@tbb@@KAHPBVtask_arena at 34@@Z )
 __TBB_SYMBOL( ?internal_current_slot at task_arena_base@internal at interface7@tbb@@KAHXZ )
 __TBB_SYMBOL( ?internal_initialize at task_arena_base@internal at interface7@tbb@@IAEXXZ )
 __TBB_SYMBOL( ?internal_terminate at task_arena_base@internal at interface7@tbb@@IAEXXZ )
+__TBB_SYMBOL( ?internal_attach at task_arena_base@internal at interface7@tbb@@IAEXXZ )
 __TBB_SYMBOL( ?internal_enqueue at task_arena_base@internal at interface7@tbb@@IBEXAAVtask at 4@H at Z )
 __TBB_SYMBOL( ?internal_execute at task_arena_base@internal at interface7@tbb@@IBEXAAVdelegate_base at 234@@Z )
 __TBB_SYMBOL( ?internal_wait at task_arena_base@internal at interface7@tbb@@IBEXXZ )
-#endif /* __TBB_TASK_ARENA */
+#if __TBB_TASK_ISOLATION
+__TBB_SYMBOL( ?isolate_within_arena at internal@interface7 at tbb@@YAXAAVdelegate_base at 123@H at Z )
+#endif /* __TBB_TASK_ISOLATION */
 
 #if !TBB_NO_LEGACY
 // task_v2.cpp
@@ -140,6 +144,8 @@ __TBB_SYMBOL( ?itt_metadata_str_add_v7 at internal@tbb@@YAXW4itt_domain_enum at 12@PAX
 __TBB_SYMBOL( ?itt_relation_add_v7 at internal@tbb@@YAXW4itt_domain_enum at 12@PAX_KW4itt_relation at 12@12 at Z )
 __TBB_SYMBOL( ?itt_task_begin_v7 at internal@tbb@@YAXW4itt_domain_enum at 12@PAX_K12W4string_index at 12@@Z )
 __TBB_SYMBOL( ?itt_task_end_v7 at internal@tbb@@YAXW4itt_domain_enum at 12@@Z )
+__TBB_SYMBOL( ?itt_region_begin_v9 at internal@tbb@@YAXW4itt_domain_enum at 12@PAX_K12W4string_index at 12@@Z )
+__TBB_SYMBOL( ?itt_region_end_v9 at internal@tbb@@YAXW4itt_domain_enum at 12@PAX_K at Z )
 #endif
 
 // pipeline.cpp
diff --git a/src/tbb/win64-gcc-tbb-export.def b/src/tbb/win64-gcc-tbb-export.def
index 8be9672..6159cf8 100644
--- a/src/tbb/win64-gcc-tbb-export.def
+++ b/src/tbb/win64-gcc-tbb-export.def
@@ -1,24 +1,23 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
-*/
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
 
 
+
+
+*/
+
 {
 global:
 
diff --git a/src/tbb/win64-gcc-tbb-export.lst b/src/tbb/win64-gcc-tbb-export.lst
index d1a7ba2..7c70b6a 100644
--- a/src/tbb/win64-gcc-tbb-export.lst
+++ b/src/tbb/win64-gcc-tbb-export.lst
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/tbb_config.h"
@@ -52,6 +52,7 @@ __TBB_SYMBOL( _ZN3tbb19task_scheduler_init19default_num_threadsEv )
 __TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEiy )  // MODIFIED LINUX ENTRY
 __TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEi )
 __TBB_SYMBOL( _ZN3tbb19task_scheduler_init9terminateEv )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init27internal_blocking_terminateEb )
 #if __TBB_SCHEDULER_OBSERVER
 __TBB_SYMBOL( _ZN3tbb8internal26task_scheduler_observer_v37observeEb )
 #endif /* __TBB_SCHEDULER_OBSERVER */
@@ -62,15 +63,18 @@ __TBB_SYMBOL( _ZTIN3tbb10empty_taskE )
 __TBB_SYMBOL( _ZTSN3tbb10empty_taskE )
 __TBB_SYMBOL( _ZTVN3tbb10empty_taskE )
 
-#if __TBB_TASK_ARENA
 /* arena.cpp */
 __TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base19internal_initializeEv )
 __TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base18internal_terminateEv )
+__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base15internal_attachEv )
 __TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base16internal_enqueueERNS_4taskEx )
 __TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base16internal_executeERNS1_13delegate_baseE )
 __TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base13internal_waitEv )
 __TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base21internal_current_slotEv )
-#endif /* __TBB_TASK_ARENA */
+__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base24internal_max_concurrencyEPKNS0_10task_arenaE )
+#if __TBB_TASK_ISOLATION
+ __TBB_SYMBOL( _ZN3tbb10interface78internal20isolate_within_arenaERNS1_13delegate_baseEl )
+#endif /* __TBB_TASK_ISOLATION */
 
 #if !TBB_NO_LEGACY
 /* task_v2.cpp */
diff --git a/src/tbb/win64-tbb-export.def b/src/tbb/win64-tbb-export.def
index 094e337..d3f3d1a 100644
--- a/src/tbb/win64-tbb-export.def
+++ b/src/tbb/win64-tbb-export.def
@@ -1,20 +1,20 @@
-; Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+; Copyright (c) 2005-2017 Intel Corporation
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+;     http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+;
+;
 ;
-; This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-; you can redistribute it and/or modify it under the terms of the GNU General Public License
-; version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-; Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 ;
-; As a special exception,  you may use this file  as part of a free software library without
-; restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-; functions from this file, or you compile this file and link it with other files to produce
-; an executable,  this file does not by itself cause the resulting executable to be covered
-; by the GNU General Public License. This exception does not however invalidate any other
-; reasons why the executable file might be covered by the GNU General Public License.
 
 ; This file is organized with a section for each .cpp file.
 ; Each of these sections is in alphabetical order.
diff --git a/src/tbb/win64-tbb-export.lst b/src/tbb/win64-tbb-export.lst
index 7f68d0f..3bca01a 100644
--- a/src/tbb/win64-tbb-export.lst
+++ b/src/tbb/win64-tbb-export.lst
@@ -1,20 +1,20 @@
-; Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+; Copyright (c) 2005-2017 Intel Corporation
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+;     http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+;
+;
 ;
-; This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-; you can redistribute it and/or modify it under the terms of the GNU General Public License
-; version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-; Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 ;
-; As a special exception,  you may use this file  as part of a free software library without
-; restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-; functions from this file, or you compile this file and link it with other files to produce
-; an executable,  this file does not by itself cause the resulting executable to be covered
-; by the GNU General Public License. This exception does not however invalidate any other
-; reasons why the executable file might be covered by the GNU General Public License.
 
 // This file is organized with a section for each .cpp file.
 // Each of these sections is in alphabetical order.
@@ -63,20 +63,23 @@ __TBB_SYMBOL( ?default_num_threads at task_scheduler_init@tbb@@SAHXZ )
 __TBB_SYMBOL( ?initialize at task_scheduler_init@tbb@@QEAAXH_K at Z )
 __TBB_SYMBOL( ?initialize at task_scheduler_init@tbb@@QEAAXH at Z )
 __TBB_SYMBOL( ?terminate at task_scheduler_init@tbb@@QEAAXXZ )
+__TBB_SYMBOL( ?internal_blocking_terminate at task_scheduler_init@tbb@@AEAA_N_N at Z )
 #if __TBB_SCHEDULER_OBSERVER
 __TBB_SYMBOL( ?observe at task_scheduler_observer_v3@internal at tbb@@QEAAX_N at Z )
 #endif /* __TBB_SCHEDULER_OBSERVER */
 
-#if __TBB_TASK_ARENA
 /* arena.cpp */
+__TBB_SYMBOL( ?internal_max_concurrency at task_arena_base@internal at interface7@tbb@@KAHPEBVtask_arena at 34@@Z )
 __TBB_SYMBOL( ?internal_current_slot at task_arena_base@internal at interface7@tbb@@KAHXZ )
 __TBB_SYMBOL( ?internal_initialize at task_arena_base@internal at interface7@tbb@@IEAAXXZ )
 __TBB_SYMBOL( ?internal_terminate at task_arena_base@internal at interface7@tbb@@IEAAXXZ )
+__TBB_SYMBOL( ?internal_attach at task_arena_base@internal at interface7@tbb@@IEAAXXZ )
 __TBB_SYMBOL( ?internal_enqueue at task_arena_base@internal at interface7@tbb@@IEBAXAEAVtask at 4@_J at Z )
 __TBB_SYMBOL( ?internal_execute at task_arena_base@internal at interface7@tbb@@IEBAXAEAVdelegate_base at 234@@Z )
 __TBB_SYMBOL( ?internal_wait at task_arena_base@internal at interface7@tbb@@IEBAXXZ )
-#endif /* __TBB_TASK_ARENA */
-
+#if __TBB_TASK_ISOLATION
+__TBB_SYMBOL( ?isolate_within_arena at internal@interface7 at tbb@@YAXAEAVdelegate_base at 123@_J at Z )
+#endif /* __TBB_TASK_ISOLATION */
 #if !TBB_NO_LEGACY
 // task_v2.cpp
 __TBB_SYMBOL( ?destroy at task@tbb@@QEAAXAEAV12@@Z )
@@ -136,6 +139,8 @@ __TBB_SYMBOL( ?itt_metadata_str_add_v7 at internal@tbb@@YAXW4itt_domain_enum at 12@PEA
 __TBB_SYMBOL( ?itt_relation_add_v7 at internal@tbb@@YAXW4itt_domain_enum at 12@PEAX_KW4itt_relation at 12@12 at Z )
 __TBB_SYMBOL( ?itt_task_begin_v7 at internal@tbb@@YAXW4itt_domain_enum at 12@PEAX_K12W4string_index at 12@@Z )
 __TBB_SYMBOL( ?itt_task_end_v7 at internal@tbb@@YAXW4itt_domain_enum at 12@@Z )
+__TBB_SYMBOL( ?itt_region_begin_v9 at internal@tbb@@YAXW4itt_domain_enum at 12@PEAX_K12W4string_index at 12@@Z )
+__TBB_SYMBOL( ?itt_region_end_v9 at internal@tbb@@YAXW4itt_domain_enum at 12@PEAX_K at Z )
 #endif
 
 // pipeline.cpp
diff --git a/src/tbb/winrt-tbb-export.lst b/src/tbb/winrt-tbb-export.lst
index 9686446..da55117 100644
--- a/src/tbb/winrt-tbb-export.lst
+++ b/src/tbb/winrt-tbb-export.lst
@@ -1,20 +1,20 @@
-; Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+; Copyright (c) 2005-2017 Intel Corporation
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+;     http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+;
+;
 ;
-; This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-; you can redistribute it and/or modify it under the terms of the GNU General Public License
-; version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-; Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 ;
-; As a special exception,  you may use this file  as part of a free software library without
-; restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-; functions from this file, or you compile this file and link it with other files to produce
-; an executable,  this file does not by itself cause the resulting executable to be covered
-; by the GNU General Public License. This exception does not however invalidate any other
-; reasons why the executable file might be covered by the GNU General Public License.
 
 #include "tbb/tbb_config.h"
 
@@ -51,15 +51,18 @@ __TBB_SYMBOL( ?terminate at task_scheduler_init@tbb@@QAAXXZ )
 __TBB_SYMBOL( ?observe at task_scheduler_observer_v3@internal at tbb@@QAAX_N at Z )
 #endif /* __TBB_SCHEDULER_OBSERVER */
 
-#if __TBB_TASK_ARENA
 /* arena.cpp */
+__TBB_SYMBOL( ?internal_max_concurrency at task_arena_base@internal at interface7@tbb@@KAHPBVtask_arena at 34@@Z )
 __TBB_SYMBOL( ?internal_current_slot at task_arena_base@internal at interface7@tbb@@KAHXZ )
 __TBB_SYMBOL( ?internal_initialize at task_arena_base@internal at interface7@tbb@@IAAXXZ )
 __TBB_SYMBOL( ?internal_terminate at task_arena_base@internal at interface7@tbb@@IAAXXZ )
+__TBB_SYMBOL( ?internal_attach at task_arena_base@internal at interface7@tbb@@IAAXXZ )
 __TBB_SYMBOL( ?internal_enqueue at task_arena_base@internal at interface7@tbb@@IBAXAAVtask at 4@H at Z )
 __TBB_SYMBOL( ?internal_execute at task_arena_base@internal at interface7@tbb@@IBAXAAVdelegate_base at 234@@Z )
 __TBB_SYMBOL( ?internal_wait at task_arena_base@internal at interface7@tbb@@IBAXXZ )
-#endif /* __TBB_TASK_ARENA */
+#if __TBB_TASK_ISOLATION
+__TBB_SYMBOL( ?isolate_within_arena at internal@interface7 at tbb@@YAXAAVdelegate_base at 123@H at Z )
+#endif /* __TBB_TASK_ISOLATION */
 
 #if !TBB_NO_LEGACY
 // task_v2.cpp
diff --git a/src/tbb/x86_rtm_rw_mutex.cpp b/src/tbb/x86_rtm_rw_mutex.cpp
index 157cdfc..7f2027f 100644
--- a/src/tbb/x86_rtm_rw_mutex.cpp
+++ b/src/tbb/x86_rtm_rw_mutex.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 #include "tbb/tbb_config.h"
@@ -28,9 +28,10 @@
 
 // __TBB_RW_MUTEX_DELAY_TEST shifts the point where flags aborting speculation are
 // added to the read-set of the operation.  If 1, will add the test just before
-// the transaction is ended.
+// the transaction is ended; this technique is called lazy subscription.
+// CAUTION: due to proven issues of lazy subscription, use of __TBB_RW_MUTEX_DELAY_TEST is discouraged!
 #ifndef __TBB_RW_MUTEX_DELAY_TEST
-    #define __TBB_RW_MUTEX_DELAY_TEST 1
+    #define __TBB_RW_MUTEX_DELAY_TEST 0
 #endif
 
 #if defined(_MSC_VER) && defined(_Wp64)
@@ -202,10 +203,18 @@ bool x86_rtm_rw_mutex::internal_upgrade(x86_rtm_rw_mutex::scoped_lock& s)
             return no_release;
         }
     case RTM_transacting_reader:
-        s.transaction_state = RTM_transacting_writer;
-        // don't need to add w_flag to read_set even if __TBB_RW_MUTEX_DELAY_TEST
-        // because the this pointer (the spin_rw_mutex) will be sufficient on release.
-        return true;
+#if !__TBB_RW_MUTEX_DELAY_TEST
+        if(this->state) {  // add spin_rw_mutex to read-set.
+            // Real reader or writer holds the lock; so commit the read and re-acquire for write.
+            internal_release(s);
+            internal_acquire_writer(s);
+            return false;
+        } else
+#endif
+        {
+            s.transaction_state = RTM_transacting_writer;
+            return true;
+        }
     default:
         __TBB_ASSERT(false, "Invalid state for upgrade");
         return false;
diff --git a/src/tbb/xbox360-tbb-export.def b/src/tbb/xbox360-tbb-export.def
deleted file mode 100644
index a6914c7..0000000
--- a/src/tbb/xbox360-tbb-export.def
+++ /dev/null
@@ -1,226 +0,0 @@
-; Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-;
-; This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-; you can redistribute it and/or modify it under the terms of the GNU General Public License
-; version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-; Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-;
-; As a special exception,  you may use this file  as part of a free software library without
-; restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-; functions from this file, or you compile this file and link it with other files to produce
-; an executable,  this file does not by itself cause the resulting executable to be covered
-; by the GNU General Public License. This exception does not however invalidate any other
-; reasons why the executable file might be covered by the GNU General Public License.
-
-EXPORTS
-
-; Assembly-language support that is called directly by clients
-;__TBB_machine_cmpswp1
-;__TBB_machine_cmpswp2
-;__TBB_machine_cmpswp4
-;__TBB_machine_cmpswp8
-;__TBB_machine_fetchadd1
-;__TBB_machine_fetchadd2
-;__TBB_machine_fetchadd4
-;__TBB_machine_fetchadd8
-;__TBB_machine_fetchstore1
-;__TBB_machine_fetchstore2
-;__TBB_machine_fetchstore4
-;__TBB_machine_fetchstore8
-;__TBB_machine_store8
-;__TBB_machine_load8
-;__TBB_machine_trylockbyte
-
-; cache_aligned_allocator.cpp
-?NFS_Allocate at internal@tbb@@YAPAXIIPAX at Z @1
-?NFS_GetLineSize at internal@tbb@@YAIXZ @2
-?NFS_Free at internal@tbb@@YAXPAX at Z @3 
-?allocate_via_handler_v3 at internal@tbb@@YAPAXI at Z @4
-?deallocate_via_handler_v3 at internal@tbb@@YAXPAX at Z @5
-?is_malloc_used_v3 at internal@tbb@@YA_NXZ @6
-
-; task.cpp v3
-?allocate at allocate_additional_child_of_proxy@internal at tbb@@QBAAAVtask at 3@I at Z @7
-?allocate at allocate_child_proxy@internal at tbb@@QBAAAVtask at 3@I at Z @8
-?allocate at allocate_continuation_proxy@internal at tbb@@QBAAAVtask at 3@I at Z @9
-?allocate at allocate_root_proxy@internal at tbb@@SAAAVtask at 3@I at Z @10
-?destroy at task@tbb@@QAAXAAV12@@Z @11
-?free at allocate_additional_child_of_proxy@internal at tbb@@QBAXAAVtask at 3@@Z @12
-?free at allocate_child_proxy@internal at tbb@@QBAXAAVtask at 3@@Z @13
-?free at allocate_continuation_proxy@internal at tbb@@QBAXAAVtask at 3@@Z @14
-?free at allocate_root_proxy@internal at tbb@@SAXAAVtask at 3@@Z @15
-?internal_set_ref_count at task@tbb@@AAAXH at Z @16
-?is_owned_by_current_thread at task@tbb@@QBA_NXZ @17
-?note_affinity at task@tbb@@UAAXG at Z @18
-?resize at affinity_partitioner_base_v3@internal at tbb@@AAAXI at Z @19
-?self at task@tbb@@SAAAV12 at XZ @20
-?spawn_and_wait_for_all at task@tbb@@QAAXAAVtask_list at 2@@Z @21
-?default_num_threads at task_scheduler_init@tbb@@SAHXZ @22
-?initialize at task_scheduler_init@tbb@@QAAXHI at Z @23
-?initialize at task_scheduler_init@tbb@@QAAXH at Z @24
-?terminate at task_scheduler_init@tbb@@QAAXXZ @25
-?observe at task_scheduler_observer_v3@internal at tbb@@QAAX_N at Z @26
-
-; exception handling support
-?allocate at allocate_root_with_context_proxy@internal at tbb@@QBAAAVtask at 3@I at Z @27
-?free at allocate_root_with_context_proxy@internal at tbb@@QBAXAAVtask at 3@@Z @28
-?is_group_execution_cancelled at task_group_context@tbb@@QBA_NXZ @29
-?cancel_group_execution at task_group_context@tbb@@QAA_NXZ @30
-?reset at task_group_context@tbb@@QAAXXZ @31
-?init at task_group_context@tbb@@IAAXXZ @32
-??1task_group_context at tbb@@QAA at XZ @33
-?name at captured_exception@tbb@@UBAPBDXZ @34
-?what at captured_exception@tbb@@UBAPBDXZ @35   
-??1captured_exception at tbb@@UAA at XZ @36
-
-; tbb_misc.cpp
-?assertion_failure at tbb@@YAXPBDH00 at Z @37
-?get_initial_auto_partitioner_divisor at internal@tbb@@YAIXZ @38
-?handle_perror at internal@tbb@@YAXHPBD at Z @39
-?set_assertion_handler at tbb@@YAP6AXPBDH00 at ZP6AX0H00@Z at Z @40
-?runtime_warning at internal@tbb@@YAXPBDZZ @41
-
-; tbb_main.cpp
-?itt_load_pointer_with_acquire_v3 at internal@tbb@@YAPAXPBX at Z @42
-?itt_store_pointer_with_release_v3 at internal@tbb@@YAXPAX0 at Z @43
-
-; pipeline.cpp
-??0pipeline at tbb@@QAA at XZ @44
-??1filter at tbb@@UAA at XZ @45
-??1pipeline at tbb@@UAA at XZ @46   
-??_7pipeline at tbb@@6B@ @47
-?add_filter at pipeline@tbb@@QAAXAAVfilter at 2@@Z @48
-?clear at pipeline@tbb@@QAAXXZ @49
-?inject_token at pipeline@tbb@@AAAXAAVtask at 2@@Z @50
-?run at pipeline@tbb@@QAAXI at Z @51
-
-; queuing_rw_mutex.cpp
-?acquire at scoped_lock@queuing_rw_mutex at tbb@@QAAXAAV23 at _N@Z @52
-?downgrade_to_reader at scoped_lock@queuing_rw_mutex at tbb@@QAA_NXZ @53
-?release at scoped_lock@queuing_rw_mutex at tbb@@QAAXXZ @54
-?upgrade_to_writer at scoped_lock@queuing_rw_mutex at tbb@@QAA_NXZ @55
-?try_acquire at scoped_lock@queuing_rw_mutex at tbb@@QAA_NAAV23 at _N@Z @56
-
-#if !TBB_NO_LEGACY
-; spin_rw_mutex.cpp v2
-?internal_acquire_reader at spin_rw_mutex@tbb@@CAXPAV12@@Z @57
-?internal_acquire_writer at spin_rw_mutex@tbb@@CA_NPAV12@@Z @58
-?internal_downgrade at spin_rw_mutex@tbb@@CAXPAV12@@Z @59
-?internal_itt_releasing at spin_rw_mutex@tbb@@CAXPAV12@@Z @60
-?internal_release_reader at spin_rw_mutex@tbb@@CAXPAV12@@Z @61   
-?internal_release_writer at spin_rw_mutex@tbb@@CAXPAV12@@Z @62
-?internal_upgrade at spin_rw_mutex@tbb@@CA_NPAV12@@Z @63
-?internal_try_acquire_writer at spin_rw_mutex@tbb@@CA_NPAV12@@Z @64
-?internal_try_acquire_reader at spin_rw_mutex@tbb@@CA_NPAV12@@Z @65
-#endif
-
-; spin_rw_mutex v3
-?internal_upgrade at spin_rw_mutex_v3@tbb@@AAA_NXZ @66
-?internal_downgrade at spin_rw_mutex_v3@tbb@@AAAXXZ @67
-?internal_acquire_reader at spin_rw_mutex_v3@tbb@@AAAXXZ @68
-?internal_acquire_writer at spin_rw_mutex_v3@tbb@@AAA_NXZ @69
-?internal_release_reader at spin_rw_mutex_v3@tbb@@AAAXXZ @70
-?internal_release_writer at spin_rw_mutex_v3@tbb@@AAAXXZ @71
-?internal_try_acquire_reader at spin_rw_mutex_v3@tbb@@AAA_NXZ @72
-?internal_try_acquire_writer at spin_rw_mutex_v3@tbb@@AAA_NXZ @73
-
-; spin_mutex.cpp
-?internal_acquire at scoped_lock@spin_mutex at tbb@@AAAXAAV23@@Z @74
-?internal_release at scoped_lock@spin_mutex at tbb@@AAAXXZ @75
-?internal_try_acquire at scoped_lock@spin_mutex at tbb@@AAA_NAAV23@@Z @76
-
-; mutex.cpp
-?internal_acquire at scoped_lock@mutex at tbb@@AAAXAAV23@@Z @77
-?internal_release at scoped_lock@mutex at tbb@@AAAXXZ @78
-?internal_try_acquire at scoped_lock@mutex at tbb@@AAA_NAAV23@@Z @79
-?internal_construct at mutex@tbb@@AAAXXZ @80
-?internal_destroy at mutex@tbb@@AAAXXZ @81
-
-; recursive_mutex.cpp
-?internal_acquire at scoped_lock@recursive_mutex at tbb@@AAAXAAV23@@Z @82 
-?internal_release at scoped_lock@recursive_mutex at tbb@@AAAXXZ @83
-?internal_try_acquire at scoped_lock@recursive_mutex at tbb@@AAA_NAAV23@@Z @84
-?internal_construct at recursive_mutex@tbb@@AAAXXZ @85
-?internal_destroy at recursive_mutex@tbb@@AAAXXZ @86
-
-; queuing_mutex.cpp
-?acquire at scoped_lock@queuing_mutex at tbb@@QAAXAAV23@@Z @87
-?release at scoped_lock@queuing_mutex at tbb@@QAAXXZ @88
-?try_acquire at scoped_lock@queuing_mutex at tbb@@QAA_NAAV23@@Z @89
-
-; concurrent_hash_map.cpp
-?internal_grow_predicate at hash_map_segment_base@internal at tbb@@QBA_NXZ @90
-
-#if !TBB_NO_LEGACY
-; concurrent_queue.cpp v2
-?advance at concurrent_queue_iterator_base@internal at tbb@@IAAXXZ @91
-?assign at concurrent_queue_iterator_base@internal at tbb@@IAAXABV123@@Z @92
-?internal_size at concurrent_queue_base@internal at tbb@@IBAHXZ @93
-??0concurrent_queue_base at internal@tbb@@IAA at I@Z @94
-??0concurrent_queue_iterator_base at internal@tbb@@IAA at ABVconcurrent_queue_base@12@@Z @95
-??1concurrent_queue_base at internal@tbb@@MAA at XZ @96
-??1concurrent_queue_iterator_base at internal@tbb@@IAA at XZ @97
-?internal_pop at concurrent_queue_base@internal at tbb@@IAAXPAX at Z @98
-?internal_pop_if_present at concurrent_queue_base@internal at tbb@@IAA_NPAX at Z @99
-?internal_push at concurrent_queue_base@internal at tbb@@IAAXPBX at Z @100
-?internal_push_if_not_full at concurrent_queue_base@internal at tbb@@IAA_NPBX at Z @101
-?internal_set_capacity at concurrent_queue_base@internal at tbb@@IAAXHI at Z @102
-#endif
-
-; concurrent_queue v3
-??1concurrent_queue_iterator_base_v3 at internal@tbb@@IAA at XZ @103
-??0concurrent_queue_iterator_base_v3 at internal@tbb@@IAA at ABVconcurrent_queue_base_v3@12@@Z @104
-?advance at concurrent_queue_iterator_base_v3@internal at tbb@@IAAXXZ @105
-?assign at concurrent_queue_iterator_base_v3@internal at tbb@@IAAXABV123@@Z @106
-??0concurrent_queue_base_v3 at internal@tbb@@IAA at I@Z @107
-??1concurrent_queue_base_v3 at internal@tbb@@MAA at XZ @108
-?internal_pop at concurrent_queue_base_v3@internal at tbb@@IAAXPAX at Z @109
-?internal_pop_if_present at concurrent_queue_base_v3@internal at tbb@@IAA_NPAX at Z @110
-?internal_push at concurrent_queue_base_v3@internal at tbb@@IAAXPBX at Z @111
-?internal_push_if_not_full at concurrent_queue_base_v3@internal at tbb@@IAA_NPBX at Z @112
-?internal_size at concurrent_queue_base_v3@internal at tbb@@IBAHXZ @113
-?internal_set_capacity at concurrent_queue_base_v3@internal at tbb@@IAAXHI at Z @114
-?internal_finish_clear at concurrent_queue_base_v3@internal at tbb@@IAAXXZ @115
-?internal_throw_exception at concurrent_queue_base_v3@internal at tbb@@IBAXXZ @116
-
-#if !TBB_NO_LEGACY
-; concurrent_vector.cpp v2
-?internal_assign at concurrent_vector_base@internal at tbb@@IAAXABV123 at IP6AXPAXI@ZP6AX1PBXI at Z4@Z @117
-?internal_capacity at concurrent_vector_base@internal at tbb@@IBAIXZ @118
-?internal_clear at concurrent_vector_base@internal at tbb@@IAAXP6AXPAXI at Z_N@Z @119
-?internal_copy at concurrent_vector_base@internal at tbb@@IAAXABV123 at IP6AXPAXPBXI@Z at Z @120
-?internal_grow_by at concurrent_vector_base@internal at tbb@@IAAIIIP6AXPAXI at Z@Z @121
-?internal_grow_to_at_least at concurrent_vector_base@internal at tbb@@IAAXIIP6AXPAXI at Z@Z @122
-?internal_push_back at concurrent_vector_base@internal at tbb@@IAAPAXIAAI at Z @123
-?internal_reserve at concurrent_vector_base@internal at tbb@@IAAXIII at Z @124
-#endif
-
-; concurrent_vector v3
-??1concurrent_vector_base_v3 at internal@tbb@@IAA at XZ @125
-?internal_assign at concurrent_vector_base_v3@internal at tbb@@IAAXABV123 at IP6AXPAXI@ZP6AX1PBXI at Z4@Z @126
-?internal_capacity at concurrent_vector_base_v3@internal at tbb@@IBAIXZ @127
-?internal_clear at concurrent_vector_base_v3@internal at tbb@@IAAIP6AXPAXI at Z@Z @128
-?internal_copy at concurrent_vector_base_v3@internal at tbb@@IAAXABV123 at IP6AXPAXPBXI@Z at Z @129
-?internal_grow_by at concurrent_vector_base_v3@internal at tbb@@IAAIIIP6AXPAXPBXI at Z1@Z @130
-?internal_grow_to_at_least at concurrent_vector_base_v3@internal at tbb@@IAAXIIP6AXPAXPBXI at Z1@Z @131
-?internal_push_back at concurrent_vector_base_v3@internal at tbb@@IAAPAXIAAI at Z @132
-?internal_reserve at concurrent_vector_base_v3@internal at tbb@@IAAXIII at Z @133
-?internal_compact at concurrent_vector_base_v3@internal at tbb@@IAAPAXIPAXP6AX0I at ZP6AX0PBXI@Z at Z @134
-?internal_swap at concurrent_vector_base_v3@internal at tbb@@IAAXAAV123@@Z @135
-?internal_throw_exception at concurrent_vector_base_v3@internal at tbb@@IBAXI at Z @136
-
-; tbb_thread
-?join at tbb_thread_v3@internal at tbb@@QAAXXZ @137
-?detach at tbb_thread_v3@internal at tbb@@QAAXXZ @138
-?internal_start at tbb_thread_v3@internal at tbb@@AAAXP6AIPAX at Z0@Z @139
-?allocate_closure_v3 at internal@tbb@@YAPAXI at Z @140
-?free_closure_v3 at internal@tbb@@YAXPAX at Z @141
-?hardware_concurrency at tbb_thread_v3@internal at tbb@@SAIXZ @142
-?thread_yield_v3 at internal@tbb@@YAXXZ @143
-?thread_sleep_v3 at internal@tbb@@YAXABVinterval_t at tick_count@2@@Z @144
-?move_v3 at internal@tbb@@YAXAAVtbb_thread_v3 at 12@0 at Z @145
-?thread_get_id_v3 at internal@tbb@@YA?AVid at tbb_thread_v3@12 at XZ @146
diff --git a/src/tbbmalloc/Customize.h b/src/tbbmalloc/Customize.h
index b2f375c..4fdf068 100644
--- a/src/tbbmalloc/Customize.h
+++ b/src/tbbmalloc/Customize.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef _TBB_malloc_Customize_H_
@@ -140,8 +140,8 @@ static inline bool isAligned(T* arg, uintptr_t alignment) {
 static inline bool isPowerOfTwo(uintptr_t arg) {
     return tbb::internal::is_power_of_two(arg);
 }
-static inline bool isPowerOfTwoMultiple(uintptr_t arg, uintptr_t divisor) {
-    return arg && tbb::internal::is_power_of_two_factor(arg,divisor);
+static inline bool isPowerOfTwoAtLeast(uintptr_t arg, uintptr_t power2) {
+    return arg && tbb::internal::is_power_of_two_at_least(arg,power2);
 }
 
 #define MALLOC_STATIC_ASSERT(condition,msg) __TBB_STATIC_ASSERT(condition,msg)
@@ -200,7 +200,7 @@ namespace tbb {
 #if TBB_USE_THREADING_TOOLS
             call_itt_notify(releasing, &dst);
 #endif // TBB_USE_THREADING_TOOLS
-            FencedStore(*(intptr_t*)&dst, src); 
+            FencedStore(*(intptr_t*)&dst, src);
         }
 
         template <typename T>
diff --git a/src/tbbmalloc/MapMemory.h b/src/tbbmalloc/MapMemory.h
index 23b3818..552917a 100644
--- a/src/tbbmalloc/MapMemory.h
+++ b/src/tbbmalloc/MapMemory.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef _itt_shared_malloc_MapMemory_H
@@ -43,7 +43,7 @@ void *ErrnoPreservingMalloc(size_t bytes)
 #include <sys/mman.h>
 #if __linux__
 /* __TBB_MAP_HUGETLB is MAP_HUGETLB from system header linux/mman.h.
-   The header do not included here, as on some Linux flavors inclusion of
+   The header is not included here, as on some Linux flavors inclusion of
    linux/mman.h leads to compilation error,
    while changing of MAP_HUGETLB is highly unexpected.
 */
@@ -63,7 +63,7 @@ void* MapMemory (size_t bytes, bool hugePages)
     void* result = 0;
     int prevErrno = errno;
 #ifndef MAP_ANONYMOUS
-// OS X* defines MAP_ANON, which is deprecated in Linux*.
+// macOS* defines MAP_ANON, which is deprecated in Linux*.
 #define MAP_ANONYMOUS MAP_ANON
 #endif /* MAP_ANONYMOUS */
     int addFlags = hugePages? __TBB_MAP_HUGETLB : 0;
@@ -82,7 +82,7 @@ int UnmapMemory(void *area, size_t bytes)
     return ret;
 }
 
-#elif (_WIN32 || _WIN64) && !_XBOX && !__TBB_WIN8UI_SUPPORT
+#elif (_WIN32 || _WIN64) && !__TBB_WIN8UI_SUPPORT
 #include <windows.h>
 
 #define MEMORY_MAPPING_USES_MALLOC 0
diff --git a/src/tbbmalloc/Statistics.h b/src/tbbmalloc/Statistics.h
index 1a06ea7..392442e 100644
--- a/src/tbbmalloc/Statistics.h
+++ b/src/tbbmalloc/Statistics.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #define MAX_THREADS 1024
diff --git a/src/tbbmalloc/TypeDefinitions.h b/src/tbbmalloc/TypeDefinitions.h
index 8f62552..9b514ca 100644
--- a/src/tbbmalloc/TypeDefinitions.h
+++ b/src/tbbmalloc/TypeDefinitions.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef _itt_shared_malloc_TypeDefinitions_H_
diff --git a/src/tbbmalloc/backend.cpp b/src/tbbmalloc/backend.cpp
index d2bd7fb..88212dd 100644
--- a/src/tbbmalloc/backend.cpp
+++ b/src/tbbmalloc/backend.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include <string.h>   /* for memset */
@@ -47,7 +47,7 @@ void* getRawMemory (size_t size, bool hugePages) {
     return MapMemory(size, hugePages);
 }
 
-bool freeRawMemory (void *object, size_t size) {
+int freeRawMemory (void *object, size_t size) {
     return UnmapMemory(object, size);
 }
 
@@ -64,15 +64,14 @@ void HugePagesStatus::registerAllocation(bool gotPage)
         doPrintStatus(gotPage, "available");
 }
 
-void HugePagesStatus::registerReleasing(size_t size)
+void HugePagesStatus::registerReleasing(void* addr, size_t size)
 {
     // We: 1) got huge page at least once,
     // 2) something that looks like a huge page is been released,
     // and 3) user requested huge pages,
     // so a huge page might be available at next allocation.
     // TODO: keep page status in regions and use exact check here
-    // Use isPowerOfTwoMultiple because it's faster then generic reminder.
-    if (FencedLoad(wasObserved) && isPowerOfTwoMultiple(size, pageSize))
+    if (FencedLoad(wasObserved) && size>=pageSize && isAligned(addr, pageSize))
         FencedStore(enabled, requestedMode.get());
 }
 
@@ -88,7 +87,7 @@ void HugePagesStatus::printStatus() {
 
 void HugePagesStatus::doPrintStatus(bool state, const char *stateName)
 {
-    // Under OS X* fprintf/snprintf acquires an internal lock, so when
+    // Under macOS* fprintf/snprintf acquires an internal lock, so when
     // 1st allocation is done under the lock, we got a deadlock.
     // Do not use fprintf etc during initialization.
     fputs("TBBmalloc: huge pages\t", stderr);
@@ -98,53 +97,99 @@ void HugePagesStatus::doPrintStatus(bool state, const char *stateName)
     fputs("\n", stderr);
 }
 
-void *Backend::allocRawMem(size_t &size) const
+#if CHECK_ALLOCATION_RANGE
+
+void Backend::UsedAddressRange::registerAlloc(uintptr_t left, uintptr_t right)
+{
+    MallocMutex::scoped_lock lock(mutex);
+    if (left < leftBound)
+        leftBound = left;
+    if (right > rightBound)
+        rightBound = right;
+    MALLOC_ASSERT(leftBound, ASSERT_TEXT);
+    MALLOC_ASSERT(leftBound < rightBound, ASSERT_TEXT);
+    MALLOC_ASSERT(leftBound <= left && right <= rightBound, ASSERT_TEXT);
+}
+
+void Backend::UsedAddressRange::registerFree(uintptr_t left, uintptr_t right)
+{
+    MallocMutex::scoped_lock lock(mutex);
+    if (leftBound == left) {
+        if (rightBound == right) {
+            leftBound = ADDRESS_UPPER_BOUND;
+            rightBound = 0;
+        } else
+            leftBound = right;
+    } else if (rightBound == right)
+        rightBound = left;
+    MALLOC_ASSERT((!rightBound && leftBound == ADDRESS_UPPER_BOUND)
+                  || leftBound < rightBound, ASSERT_TEXT);
+}
+#endif // CHECK_ALLOCATION_RANGE
+
+void *Backend::allocRawMem(size_t &size)
 {
     void *res = NULL;
     size_t allocSize;
 
     if (extMemPool->userPool()) {
+        if (extMemPool->fixedPool && bootsrapMemDone==FencedLoad(bootsrapMemStatus))
+            return NULL;
+        MALLOC_ASSERT(bootsrapMemStatus!=bootsrapMemNotDone,
+                      "Backend::allocRawMem() called prematurely?");
         // TODO: support for raw mem not aligned at sizeof(uintptr_t)
         // memory from fixed pool is asked once and only once
-        if (!extMemPool->fixedPool || !rawMemReceived) {
-            allocSize = alignUpGeneric(size, extMemPool->granularity);
-            res = (*extMemPool->rawAlloc)(extMemPool->poolId, allocSize);
-            if (extMemPool->fixedPool)
-                const_cast<bool&>(rawMemReceived) = true;
-        }
+        allocSize = alignUpGeneric(size, extMemPool->granularity);
+        res = (*extMemPool->rawAlloc)(extMemPool->poolId, allocSize);
     } else {
+        // check if alignment to huge page size is recommended
+        size_t hugePageSize = hugePages.recommendedGranularity();
+        allocSize = alignUpGeneric(size, hugePageSize? hugePageSize : extMemPool->granularity);
         // try to get them at 1st allocation and still use, if successful
         // if 1st try is unsuccessful, no more trying
         if (FencedLoad(hugePages.enabled)) {
-            allocSize = alignUpGeneric(size, hugePages.getSize());
+            MALLOC_ASSERT(hugePageSize, "Inconsistent state of HugePagesStatus");
             res = getRawMemory(allocSize, /*hugePages=*/true);
             hugePages.registerAllocation(res);
         }
 
-        if ( !res ) {
-            allocSize = alignUpGeneric(size, extMemPool->granularity);
+        if (!res)
             res = getRawMemory(allocSize, /*hugePages=*/false);
-        }
     }
 
-    if ( res ) {
+    if (res) {
+        MALLOC_ASSERT(allocSize > 0, "Invalid size of an allocated region.");
         size = allocSize;
+        if (!extMemPool->userPool())
+            usedAddrRange.registerAlloc((uintptr_t)res, (uintptr_t)res+size);
+#if MALLOC_DEBUG
+        volatile size_t curTotalSize = totalMemSize; // to read global value once
+        MALLOC_ASSERT(curTotalSize+size > curTotalSize, "Overflow allocation size.");
+#endif
         AtomicAdd((intptr_t&)totalMemSize, size);
     }
 
     return res;
 }
 
-void Backend::freeRawMem(void *object, size_t size) const
+bool Backend::freeRawMem(void *object, size_t size)
 {
+    bool fail;
+#if MALLOC_DEBUG
+    volatile size_t curTotalSize = totalMemSize; // to read global value once
+    MALLOC_ASSERT(curTotalSize-size < curTotalSize, "Negative allocation size.");
+#endif
     AtomicAdd((intptr_t&)totalMemSize, -size);
     if (extMemPool->userPool()) {
         MALLOC_ASSERT(!extMemPool->fixedPool, "No free for fixed-size pools.");
-        (*extMemPool->rawFree)(extMemPool->poolId, object, size);
+        fail = (*extMemPool->rawFree)(extMemPool->poolId, object, size);
     } else {
-        hugePages.registerReleasing(size);
-        freeRawMemory(object, size);
+        usedAddrRange.registerFree((uintptr_t)object, (uintptr_t)object + size);
+        hugePages.registerReleasing(object, size);
+        fail = freeRawMemory(object, size);
     }
+    // TODO: use result in all freeRawMem() callers
+    return !fail;
 }
 
 /********* End memory acquisition code ********************************/
@@ -195,7 +240,7 @@ struct MemRegion {
     MemRegion *next,      // keep all regions in any pool to release all them on
               *prev;      // pool destroying, 2-linked list to release individual
                           // regions.
-    size_t     allocSz,   // got from poll callback
+    size_t     allocSz,   // got from pool callback
                blockSz;   // initial and maximal inner block size
     MemRegionType type;
 };
@@ -298,6 +343,7 @@ inline bool BackendSync::waitTillBlockReleased(intptr_t startModifiedCnt)
     for (intptr_t myBinsInFlyBlocks = FencedLoad(inFlyBlocks),
              myCoalescQInFlyBlocks = backend->blocksInCoalescing(); ;
          backoff.pause()) {
+        MALLOC_ASSERT(myBinsInFlyBlocks>=0 && myCoalescQInFlyBlocks>=0, NULL);
         intptr_t currBinsInFlyBlocks = FencedLoad(inFlyBlocks),
             currCoalescQInFlyBlocks = backend->blocksInCoalescing();
         WhiteboxTestingYield();
@@ -364,7 +410,8 @@ FreeBlock *CoalRequestQ::getAll()
 inline void CoalRequestQ::blockWasProcessed()
 {
     bkndSync->binsModified();
-    AtomicAdd(inFlyBlocks, -1);
+    int prev = AtomicAdd(inFlyBlocks, -1);
+    MALLOC_ASSERT(prev > 0, ASSERT_TEXT);
 }
 
 // Try to get a block from a bin.
@@ -714,7 +761,7 @@ FreeBlock *Backend::askMemFromOS(size_t blockSize, intptr_t startModifiedCnt,
             return (FreeBlock*)VALID_BLOCK_IN_BIN;
         }
 
-        if ( blockSize < quiteSmall ) {
+        if (blockSize < quiteSmall) {
             // For this size of blocks, add NUM_OF_REG "advance" regions in bin,
             // and return one as a result.
             // TODO: add to bin first, because other threads can use them right away.
@@ -780,6 +827,21 @@ FreeBlock *Backend::IndexedBins::
     return NULL;
 }
 
+void Backend::requestBootstrapMem()
+{
+    if (bootsrapMemDone == FencedLoad(bootsrapMemStatus))
+        return;
+    MallocMutex::scoped_lock lock( bootsrapMemStatusMutex );
+    if (bootsrapMemDone == bootsrapMemStatus)
+        return;
+    MALLOC_ASSERT(bootsrapMemNotDone == bootsrapMemStatus, ASSERT_TEXT);
+    bootsrapMemStatus = bootsrapMemInitializing;
+    // request some rather big region during bootstrap in advance
+    // ok to get NULL here, as later we re-do a request with more modest size
+    addNewRegion(2*1024*1024, MEMREG_FLEXIBLE_SIZE, /*addToBin=*/true);
+    bootsrapMemStatus = bootsrapMemDone;
+}
+
 // try to allocate size Byte block in available bins
 // needAlignedRes is true if result must be slab-aligned
 FreeBlock *Backend::genericGetBlock(int num, size_t size, bool needAlignedBlock)
@@ -788,6 +850,8 @@ FreeBlock *Backend::genericGetBlock(int num, size_t size, bool needAlignedBlock)
     const size_t totalReqSize = num*size;
     // no splitting after requesting new region, asks exact size
     const int nativeBin = sizeToBin(totalReqSize);
+
+    requestBootstrapMem();
     // If we found 2 or less locked bins, it's time to ask more memory from OS.
     // But nothing can be asked from fixed pool. And we prefer wait, not ask
     // for more memory, if block is quite large.
@@ -952,8 +1016,9 @@ void *Backend::remap(void *ptr, size_t oldSize, size_t newSize, size_t alignment
         || !isAligned(ptr, alignment) || alignment>extMemPool->granularity)
         return NULL;
     const LargeMemoryBlock* lmbOld = ((LargeObjectHdr *)ptr - 1)->memoryBlock;
+    const size_t oldUnalignedSize = lmbOld->unalignedSize;
     FreeBlock *oldFBlock = (FreeBlock *)lmbOld;
-    FreeBlock *right = oldFBlock->rightNeig(lmbOld->unalignedSize);
+    FreeBlock *right = oldFBlock->rightNeig(oldUnalignedSize);
     // in every region only one block can have LAST_REGION_BLOCK on right,
     // so don't need no synchronization
     if (!right->isLastRegionBlock())
@@ -961,6 +1026,7 @@ void *Backend::remap(void *ptr, size_t oldSize, size_t newSize, size_t alignment
 
     MemRegion *oldRegion = static_cast<LastFreeBlock*>(right)->memRegion;
     MALLOC_ASSERT( oldRegion < ptr, ASSERT_TEXT );
+    const size_t oldRegionSize = oldRegion->allocSz;
     if (oldRegion->type != MEMREG_ONE_BLOCK)
         return NULL;  // we are not single in the region
     const size_t userOffset = (uintptr_t)ptr - (uintptr_t)oldRegion;
@@ -1005,6 +1071,11 @@ void *Backend::remap(void *ptr, size_t oldSize, size_t newSize, size_t alignment
     header->memoryBlock = lmb;
     MALLOC_ASSERT((uintptr_t)lmb + lmb->unalignedSize >=
                   (uintptr_t)object + lmb->objectSize, "An object must fit to the block.");
+
+    usedAddrRange.registerFree((uintptr_t)oldRegion, (uintptr_t)oldRegion + oldRegionSize);
+    usedAddrRange.registerAlloc((uintptr_t)region, (uintptr_t)region + requestSize);
+    AtomicAdd((intptr_t&)totalMemSize, region->allocSz - oldRegionSize);
+
     return object;
 }
 #endif /* BACKEND_HAS_MREMAP */
@@ -1137,7 +1208,7 @@ bool Backend::coalescAndPutList(FreeBlock *list, bool forceCoalescQDrop,
         bool needAddToBin = true;
 
         if (toRet->blockInBin) {
-            // is it stay in same bin?
+            // Does it stay in same bin?
             if (toRet->myBin == bin && toRet->aligned == toAligned)
                 needAddToBin = false;
             else {
@@ -1146,7 +1217,7 @@ bool Backend::coalescAndPutList(FreeBlock *list, bool forceCoalescQDrop,
             }
         }
 
-        // not stay in same bin, or bin-less, add it
+        // Does not stay in same bin, or bin-less; add it
         if (needAddToBin) {
             toRet->prev = toRet->next = toRet->nextToFree = NULL;
             toRet->myBin = NO_BIN;
@@ -1209,7 +1280,7 @@ FreeBlock *Backend::findBlockInRegion(MemRegion *region, size_t exactBlockSize)
 
     MALLOC_STATIC_ASSERT(sizeof(LastFreeBlock) % sizeof(uintptr_t) == 0,
         "Atomic applied on LastFreeBlock, and we put it at the end of region, that"
-        " is uintptr_t-aligned, so no unaligned atomic opeartions are possible.");
+        " is uintptr_t-aligned, so no unaligned atomic operations are possible.");
      // right bound is slab-aligned, keep LastFreeBlock after it
     if (region->type==MEMREG_FLEXIBLE_SIZE) {
         fBlock = (FreeBlock *)alignUp((uintptr_t)region + sizeof(MemRegion),
@@ -1290,6 +1361,19 @@ void MemRegionList::remove(MemRegion *r)
         r->prev->next = r->next;
 }
 
+#if __TBB_MALLOC_BACKEND_STAT
+int MemRegionList::reportStat(FILE *f)
+{
+    int regNum = 0;
+    MallocMutex::scoped_lock lock(regionListLock);
+    for (MemRegion *curr = head; curr; curr = curr->next) {
+        fprintf(f, "%p: max block %lu B, ", curr, curr->blockSz);
+        regNum++;
+    }
+    return regNum;
+}
+#endif
+
 FreeBlock *Backend::addNewRegion(size_t size, MemRegionType memRegType, bool addToBin)
 {
     MALLOC_STATIC_ASSERT(sizeof(BlockMutexes) <= sizeof(BlockI),
@@ -1328,12 +1412,12 @@ FreeBlock *Backend::addNewRegion(size_t size, MemRegionType memRegType, bool add
     return addToBin? (FreeBlock*)VALID_BLOCK_IN_BIN : fBlock;
 }
 
-bool Backend::bootstrap(ExtMemoryPool *extMemoryPool)
+void Backend::init(ExtMemoryPool *extMemoryPool)
 {
     extMemPool = extMemoryPool;
+    usedAddrRange.init();
     coalescQ.init(&bkndSync);
     bkndSync.init(this);
-    return addNewRegion(2*1024*1024, MEMREG_FLEXIBLE_SIZE, /*addToBin=*/true);
 }
 
 void Backend::reset()
@@ -1355,6 +1439,7 @@ void Backend::reset()
 
 bool Backend::destroy()
 {
+    bool noError = true;
     // no active threads are allowed in backend while destroy() called
     verify();
     if (!inUserPool()) {
@@ -1363,21 +1448,18 @@ bool Backend::destroy()
     }
     while (regionList.head) {
         MemRegion *helper = regionList.head->next;
-        if (inUserPool())
-            (*extMemPool->rawFree)(extMemPool->poolId, regionList.head,
-                                   regionList.head->allocSz);
-        else {
-            freeRawMemory(regionList.head, regionList.head->allocSz);
-        }
+        noError &= freeRawMem(regionList.head, regionList.head->allocSz);
         regionList.head = helper;
     }
-    return true;
+    return noError;
 }
 
 bool Backend::clean()
 {
+    scanCoalescQ(/*forceCoalescQDrop=*/false);
+
     bool res = false;
-    // We can have several blocks, occupaing whole region,
+    // We can have several blocks occupying a whole region,
     // because such regions are added in advance (see askMemFromOS() and reset()),
     // and never used. Release them all.
     for (int i = advRegBins.getMinUsedBin(0); i != -1; i = advRegBins.getMinUsedBin(i+1)) {
@@ -1387,8 +1469,6 @@ bool Backend::clean()
             res |= freeLargeBins.tryReleaseRegions(i, this);
     }
 
-    scanCoalescQ(/*forceCoalescQDrop=*/false);
-
     return res;
 }
 
@@ -1431,36 +1511,41 @@ size_t Backend::Bin::countFreeBlocks()
     return cnt;
 }
 
+size_t Backend::Bin::reportFreeBlocks(FILE *f)
+{
+    size_t totalSz = 0;
+    MallocMutex::scoped_lock lock(tLock);
+    for (FreeBlock *fb = head; fb; fb = fb->next) {
+        size_t sz = fb->tryLockBlock();
+        fb->setMeFree(sz);
+        fprintf(f, " [%p;%p]", fb, (void*)((uintptr_t)fb+sz));
+        totalSz += sz;
+    }
+    return totalSz;
+}
+
 void Backend::IndexedBins::reportStat(FILE *f)
 {
     size_t totalSize = 0;
 
     for (int i=0; i<Backend::freeBinsNum; i++)
         if (size_t cnt = freeBins[i].countFreeBlocks()) {
-            totalSize += cnt*Backend::binToSize(i);
-            fprintf(f, "%d:%lu ", i, cnt);
+            totalSize += freeBins[i].reportFreeBlocks(f);
+            fprintf(f, " %d:%lu, ", i, cnt);
         }
     fprintf(f, "\ttotal size %lu KB", totalSize/1024);
 }
 
 void Backend::reportStat(FILE *f)
 {
-    int regNum = 0;
-
     scanCoalescQ(/*forceCoalescQDrop=*/false);
 
     fprintf(f, "\n  regions:\n");
-    {
-        MallocMutex::scoped_lock lock(regionListLock);
-        for (MemRegion *curr = regionList; curr; curr = curr->next) {
-            fprintf(f, "%p: max block %lu B, ", curr, curr->blockSz);
-            regNum++;
-        }
-    }
-    fprintf(f, "\n%d regions, %lu KB in all regions\n  free bins:\nlarge bins ",
+    int regNum = regionList.reportStat(f);
+    fprintf(f, "\n%d regions, %lu KB in all regions\n  free bins:\nlarge bins: ",
             regNum, totalMemSize/1024);
     freeLargeBins.reportStat(f);
-    fprintf(f, "\naligned bins ");
+    fprintf(f, "\naligned bins: ");
     freeAlignedBins.reportStat(f);
     fprintf(f, "\n");
 }
diff --git a/src/tbbmalloc/backref.cpp b/src/tbbmalloc/backref.cpp
index a464778..3343e5b 100644
--- a/src/tbbmalloc/backref.cpp
+++ b/src/tbbmalloc/backref.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbbmalloc_internal.h"
@@ -36,19 +36,20 @@ struct BackRefBlock : public BlockI {
     // list of all blocks that were allocated from raw mem (i.e., not from backend)
     BackRefBlock *nextRawMemBlock;
     int           allocatedCount; // the number of objects allocated
-    int           myNum;          // the index in the master
+    BackRefIdx::master_t myNum;   // the index in the master
     MallocMutex   blockMutex;
     // true if this block has been added to the listForUse chain,
     // modifications protected by masterMutex
     bool          addedToForUse;
 
-    BackRefBlock(const BackRefBlock *blockToUse, int num) :
+    BackRefBlock(const BackRefBlock *blockToUse, intptr_t num) :
         nextForUse(NULL), bumpPtr((FreeObject*)((uintptr_t)blockToUse + slabSize - sizeof(void*))),
         freeList(NULL), nextRawMemBlock(NULL), allocatedCount(0), myNum(num),
         addedToForUse(false) {
         memset(&blockMutex, 0, sizeof(MallocMutex));
-        // index in BackRefMaster must fit to uint16_t
-        MALLOC_ASSERT(!(myNum >> 16), ASSERT_TEXT);
+
+        MALLOC_ASSERT(!(num >> CHAR_BIT*sizeof(BackRefIdx::master_t)),
+                      "index in BackRefMaster must fit to BackRefIdx::master");
     }
     // clean all but header
     void zeroSet() { memset(this+1, 0, BackRefBlock::bytes-sizeof(BackRefBlock)); }
@@ -59,17 +60,20 @@ struct BackRefBlock : public BlockI {
 static const int BR_MAX_CNT = (BackRefBlock::bytes-sizeof(BackRefBlock))/sizeof(void*);
 
 struct BackRefMaster {
-/* A slab block can hold up to ~2K back pointers to slab blocks or large objects,
- * so it can address at least 32MB. The array of 64KB holds 8K pointers
- * to such blocks, addressing ~256 GB.
+/* On 64-bit systems a slab block can hold up to ~2K back pointers to slab blocks
+ * or large objects, so it can address at least 32MB. The master array of 256KB
+ * holds 32K pointers to such blocks, addressing ~1 TB.
+ * On 32-bit systems there is ~4K back pointers in a slab block, so ~64MB can be addressed.
+ * The master array of 8KB holds 2K pointers to leaves, so ~128 GB can addressed.
  */
-    static const size_t bytes = 64*1024;
+    static const size_t bytes = sizeof(uintptr_t)>4? 256*1024 : 8*1024;
     static const int dataSz;
 /* space is reserved for master table and 4 leaves
    taking into account VirtualAlloc allocation granularity */
     static const int leaves = 4;
     static const size_t masterSize = BackRefMaster::bytes+leaves*BackRefBlock::bytes;
-    // take into account VirtualAlloc 64KB granularity
+    // The size of memory request for a few more leaf blocks;
+    // selected to match VirtualAlloc granularity
     static const size_t blockSpaceSize = 64*1024;
 
     Backend       *backend;
@@ -146,6 +150,7 @@ void BackRefMaster::initEmptyBackRefBlock(BackRefBlock *newBl)
 {
     intptr_t nextLU = lastUsed+1;
     new (newBl) BackRefBlock(newBl, nextLU);
+    MALLOC_ASSERT(nextLU < dataSz, NULL);
     backRefBl[nextLU] = newBl;
     // lastUsed is read in getBackRef, and access to backRefBl[lastUsed]
     // is possible only after checking backref against current lastUsed
@@ -158,6 +163,9 @@ bool BackRefMaster::requestNewSpace()
     MALLOC_STATIC_ASSERT(!(blockSpaceSize % BackRefBlock::bytes),
                          "Must request space for whole number of blocks.");
 
+    if (backRefMaster->dataSz <= lastUsed + 1) // no space in master
+        return false;
+
     // only one thread at a time may add blocks
     MallocMutex::scoped_lock newSpaceLock(requestNewSpaceMutex);
 
@@ -173,14 +181,24 @@ bool BackRefMaster::requestNewSpace()
         bl->zeroSet();
 
     MallocMutex::scoped_lock lock(masterMutex); // ... and share under lock
+
+    const size_t numOfUnusedIdxs = backRefMaster->dataSz - lastUsed - 1;
+    if (numOfUnusedIdxs <= 0) { // no space in master under lock, roll back
+        backend->putBackRefSpace(newBl, blockSpaceSize, rawMemUsed);
+        return false;
+    }
+    // It's possible that only part of newBl is used, due to lack of indices in master.
+    // This is OK as such underutilization is possible only once for backreferneces table.
+    int blocksToUse = min(numOfUnusedIdxs, blockSpaceSize / BackRefBlock::bytes);
+
     // use the first block in the batch to maintain the list of "raw" memory
     // to be released at shutdown
     if (rawMemUsed) {
         newBl->nextRawMemBlock = backRefMaster->allRawMemBlocks;
         backRefMaster->allRawMemBlocks = newBl;
     }
-    for (BackRefBlock *bl = newBl; (uintptr_t)bl < (uintptr_t)newBl + blockSpaceSize;
-         bl = (BackRefBlock*)((uintptr_t)bl + BackRefBlock::bytes)) {
+    for (BackRefBlock *bl = newBl; blocksToUse>0;
+         bl = (BackRefBlock*)((uintptr_t)bl + BackRefBlock::bytes), blocksToUse--) {
         initEmptyBackRefBlock(bl);
         if (active->allocatedCount == BR_MAX_CNT)
             active = bl; // active leaf is not needed in listForUse
@@ -204,10 +222,9 @@ BackRefBlock *BackRefMaster::findFreeBlock()
             MALLOC_ASSERT(active->addedToForUse, ASSERT_TEXT);
             active->addedToForUse = false;
         }
-    } else if (lastUsed-1 < backRefMaster->dataSz) {    // allocate new data node
-        if (!requestNewSpace()) return NULL;
-    } else // no free space in BackRefMaster, give up
-        return NULL;
+    } else // allocate new data node
+        if (!requestNewSpace())
+            return NULL;
     return active;
 }
 
diff --git a/src/tbbmalloc/frontend.cpp b/src/tbbmalloc/frontend.cpp
index 9838cd3..481ee4f 100644
--- a/src/tbbmalloc/frontend.cpp
+++ b/src/tbbmalloc/frontend.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 
@@ -24,8 +24,8 @@
 #include <new>        /* for placement new */
 #include <string.h>   /* for memset */
 
-//! Define the main synchronization method
-#define FINE_GRAIN_LOCKS
+#include "../tbb/tbb_version.h"
+#include "../tbb/itt_notify.h" // for __TBB_load_ittnotify()
 
 #if USE_PTHREAD
     #define TlsSetValue_func pthread_setspecific
@@ -41,15 +41,17 @@
 #elif USE_WINTHREAD
     #define GetMyTID() GetCurrentThreadId()
 #if __TBB_WIN8UI_SUPPORT
-#include<thread>
+    #include<thread>
     #define TlsSetValue_func FlsSetValue
     #define TlsGetValue_func FlsGetValue
     #define TlsAlloc() FlsAlloc(NULL)
+    #define TLS_ALLOC_FAILURE FLS_OUT_OF_INDEXES
     #define TlsFree FlsFree
     inline void do_yield() {std::this_thread::yield();}
 #else
     #define TlsSetValue_func TlsSetValue
     #define TlsGetValue_func TlsGetValue
+    #define TLS_ALLOC_FAILURE TLS_OUT_OF_INDEXES
     inline void do_yield() {SwitchToThread();}
 #endif
 #else
@@ -85,11 +87,6 @@ bool RecursiveMallocCallProtector::noRecursion() {
 const uint16_t startupAllocObjSizeMark = ~(uint16_t)0;
 
 /*
- * This number of bins in the TLS that leads to blocks that we can allocate in.
- */
-const uint32_t numBlockBinLimit = 31;
-
-/*
  * The following constant is used to define the size of struct Block, the block header.
  * The intent is to have the size of a Block multiple of the cache line size, this allows us to
  * get good alignment at the cost of some overhead equal to the amount of padding included in the Block.
@@ -117,19 +114,18 @@ public:
 #if USE_INTERNAL_TID
 class ThreadId {
     static tls_key_t Tid_key;
-    static intptr_t ThreadIdCount;
+    static intptr_t ThreadCount;
 
     unsigned int id;
 
-    static ThreadId get() {
-        ThreadId result;
-        result.id = reinterpret_cast<intptr_t>(TlsGetValue_func(Tid_key));
-        if( !result.id ) {
+    static unsigned int tlsNumber() {
+        unsigned int result = reinterpret_cast<intptr_t>(TlsGetValue_func(Tid_key));
+        if( !result ) {
             RecursiveMallocCallProtector scoped;
             // Thread-local value is zero -> first call from this thread,
             // need to initialize with next ID value (IDs start from 1)
-            result.id = AtomicIncrement(ThreadIdCount); // returned new value!
-            TlsSetValue_func( Tid_key, reinterpret_cast<void*>(result.id) );
+            result = AtomicIncrement(ThreadCount); // returned new value!
+            TlsSetValue_func( Tid_key, reinterpret_cast<void*>(result) );
         }
         return result;
     }
@@ -148,34 +144,39 @@ public:
     static void destroy() {
         if( Tid_key ) {
 #if USE_WINTHREAD
-            TlsFree( Tid_key );
+            BOOL status = !(TlsFree( Tid_key ));  // fail is zero
 #else
             int status = pthread_key_delete( Tid_key );
+#endif /* USE_WINTHREAD */
             if ( status ) {
                 fprintf (stderr, "The memory manager cannot delete tls key; exiting \n");
                 exit(1);
             }
-#endif /* USE_WINTHREAD */
             Tid_key = 0;
         }
     }
 
-    bool isCurrentThreadId() const { return id == ThreadId::get().id; }
-    void saveCurrentThreadId() { id = ThreadId::get().id; }
+    ThreadId() : id(ThreadId::tlsNumber()) {}
+    bool isCurrentThreadId() const { return id == ThreadId::tlsNumber(); }
 
+#if COLLECT_STATISTICS || MALLOC_TRACE
+    friend unsigned int getThreadId() { return ThreadId::tlsNumber(); }
+#endif
 #if COLLECT_STATISTICS
-    static unsigned getMaxThreadId() { return ThreadIdCount; }
+    static unsigned getMaxThreadId() { return ThreadCount; }
 
-    friend unsigned int getThreadId();
     friend int STAT_increment(ThreadId tid, int bin, int ctr);
 #endif
 };
 
 tls_key_t ThreadId::Tid_key;
-intptr_t ThreadId::ThreadIdCount;
+intptr_t ThreadId::ThreadCount;
 
 #if COLLECT_STATISTICS
-unsigned int getThreadId() { return ThreadId::get().id; }
+int STAT_increment(ThreadId tid, int bin, int ctr)
+{
+    return ::STAT_increment(tid.id, bin, ctr);
+}
 #endif
 
 #else // USE_INTERNAL_TID
@@ -188,7 +189,6 @@ class ThreadId {
 #endif
 public:
     ThreadId() : tid(GetMyTID()) {}
-    void saveCurrentThreadId() { tid = GetMyTID(); }
 #if USE_PTHREAD
     bool isCurrentThreadId() const { return pthread_equal(pthread_self(), tid); }
 #else
@@ -200,39 +200,31 @@ public:
 
 #endif // USE_INTERNAL_TID
 
-#if COLLECT_STATISTICS
-int STAT_increment(ThreadId tid, int bin, int ctr)
-{
-    return ::STAT_increment(tid.id, bin, ctr);
-}
-#endif
-
 /*********** Code to provide thread ID and a thread-local void pointer **********/
 
-TLSKey::TLSKey()
+bool TLSKey::init()
 {
 #if USE_WINTHREAD
     TLS_pointer_key = TlsAlloc();
+    if (TLS_pointer_key == TLS_ALLOC_FAILURE)
+        return false;
 #else
     int status = pthread_key_create( &TLS_pointer_key, mallocThreadShutdownNotification );
-    if ( status ) {
-        fprintf (stderr, "The memory manager cannot create tls key during initialization; exiting \n");
-        exit(1);
-    }
+    if ( status )
+        return false;
 #endif /* USE_WINTHREAD */
+    return true;
 }
 
-TLSKey::~TLSKey()
+bool TLSKey::destroy()
 {
 #if USE_WINTHREAD
-    TlsFree(TLS_pointer_key);
+    BOOL status1 = !(TlsFree(TLS_pointer_key)); // fail is zero
 #else
     int status1 = pthread_key_delete(TLS_pointer_key);
-    if ( status1 ) {
-        fprintf (stderr, "The memory manager cannot delete tls key during; exiting \n");
-        exit(1);
-    }
 #endif /* USE_WINTHREAD */
+    MALLOC_ASSERT(!status1, "The memory manager cannot delete tls key.");
+    return status1==0;
 }
 
 inline TLSData* TLSKey::getThreadMallocTLS() const
@@ -259,36 +251,6 @@ inline void TLSKey::setThreadMallocTLS( TLSData * newvalue ) {
  */
 class Bin;
 class StartupBlock;
-class TLSData;
-
-class LifoList {
-public:
-    inline LifoList();
-    inline void push(Block *block);
-    inline Block *pop();
-
-private:
-    Block *top;
-#ifdef FINE_GRAIN_LOCKS
-    MallocMutex lock;
-#endif /* FINE_GRAIN_LOCKS     */
-};
-
-/*
- * When a block that is not completely free is returned for reuse by other threads
- * this is where the block goes.
- *
- * LifoList assumes zero initialization; so below its constructors are omitted,
- * to avoid linking with C++ libraries on Linux.
- */
-
-class OrphanedBlocks {
-    LifoList bins[numBlockBinLimit];
-public:
-    Block *get(TLSData *tls, unsigned int size);
-    void put(Bin *bin, Block *block);
-    void reset();
-};
 
 class MemoryPool {
     // if no explicit grainsize, expect to see malloc in user's pAlloc
@@ -304,13 +266,12 @@ public:
     MemoryPool    *next,
                   *prev;
     ExtMemoryPool  extMemPool;
-    OrphanedBlocks orphanedBlocks;
     BootStrapBlocks bootStrapBlocks;
 
     bool init(intptr_t poolId, const MemPoolPolicy* memPoolPolicy);
     static void initDefaultPool();
-    void reset();
-    void destroy();
+    bool reset();
+    bool destroy();
     void processThreadShutdown(TLSData *tlsData);
 
     inline TLSData *getTLS(bool create);
@@ -324,14 +285,27 @@ public:
     void putToLLOCache(TLSData *tls, void *object);
 };
 
-static char defaultMemPool_space[sizeof(MemoryPool)];
-static MemoryPool *defaultMemPool = (MemoryPool *)defaultMemPool_space;
+static intptr_t defaultMemPool_space[sizeof(MemoryPool)/sizeof(intptr_t) +
+                                     (sizeof(MemoryPool)%sizeof(intptr_t)? 1 : 0)];
+static MemoryPool *defaultMemPool = (MemoryPool*)defaultMemPool_space;
 const size_t MemoryPool::defaultGranularity;
 // zero-initialized
 MallocMutex  MemoryPool::memPoolListLock;
 // TODO: move huge page status to default pool, because that's its states
 HugePagesStatus hugePages;
-static bool usedBySrcIncluded;
+static bool usedBySrcIncluded = false;
+
+// Padding helpers
+template<size_t padd>
+struct PaddingImpl {
+    size_t       __padding[padd];
+};
+
+template<>
+struct PaddingImpl<0> {};
+
+template<int N>
+struct Padding : PaddingImpl<N/sizeof(size_t)> {};
 
 // Slab block is 16KB-aligned. To prevent false sharing, separate locally-accessed
 // fields and fields commonly accessed by not owner threads.
@@ -339,22 +313,11 @@ class GlobalBlockFields : public BlockI {
 protected:
     FreeObject  *publicFreeList;
     Block       *nextPrivatizable;
+    MemoryPool  *poolPtr;
 };
 
-template<size_t padd>
-struct Padding {
-    size_t       __padding[padd];
-};
-
-template<>
-struct Padding<0> {
-};
-
-class LocalBlockFields : public GlobalBlockFields {
+class LocalBlockFields : public GlobalBlockFields, Padding<blockHeaderAlignment - sizeof(GlobalBlockFields)>  {
 protected:
-    Padding<(blockHeaderAlignment -
-             sizeof(GlobalBlockFields))/sizeof(size_t)> pad_local;
-
     Block       *next;
     Block       *previous;        /* Use double linked list to speed up removal */
     FreeObject  *bumpPtr;         /* Bump pointer moves from the end to the beginning of a block */
@@ -363,22 +326,25 @@ protected:
        when releasing object from a block that current thread owned.
        NULL for orphaned blocks. */
     TLSData     *tlsPtr;
-    ThreadId     ownerTid;
+    ThreadId     ownerTid;        /* the ID of the thread that owns or last owned the block */
     BackRefIdx   backRefIdx;
     uint16_t     allocatedCount;  /* Number of objects allocated (obviously by the owning thread) */
     uint16_t     objectSize;
     bool         isFull;
 
-    friend void *BootStrapBlocks::allocate(MemoryPool *memPool, size_t size);
     friend class FreeBlockPool;
     friend class StartupBlock;
     friend class LifoList;
-    friend Block *MemoryPool::getEmptyBlock(size_t size);
+    friend void *BootStrapBlocks::allocate(MemoryPool *, size_t);
+    friend bool OrphanedBlocks::cleanup(Backend*);
+    friend Block *MemoryPool::getEmptyBlock(size_t);
 };
 
-class Block : public LocalBlockFields {
-    Padding<(2*blockHeaderAlignment -
-             sizeof(LocalBlockFields))/sizeof(size_t)> pad_public;
+// Use inheritance to guarantee that a user data start on next cache line.
+// Can't use member for it, because when LocalBlockFields already on cache line,
+// we must have no additional memory consumption for all compilers.
+class Block : public LocalBlockFields,
+              Padding<2*blockHeaderAlignment - sizeof(LocalBlockFields)> {
 public:
     bool empty() const { return allocatedCount==0 && publicFreeList==NULL; }
     inline FreeObject* allocate();
@@ -386,19 +352,19 @@ public:
     inline bool emptyEnoughToUse();
     bool freeListNonNull() { return freeList; }
     void freePublicObject(FreeObject *objectToFree);
-    inline void freeOwnObject(MemoryPool *memPool, TLSData *tls, void *object);
+    inline void freeOwnObject(void *object);
     void makeEmpty();
-    void privatizePublicFreeList();
+    void privatizePublicFreeList( bool cleanup = false );
     void restoreBumpPtr();
     void privatizeOrphaned(TLSData *tls, unsigned index);
-    void shareOrphaned(const Bin *bin, unsigned index);
+    void shareOrphaned(intptr_t binTag, unsigned index);
     unsigned int getSize() const {
         MALLOC_ASSERT(isStartupAllocObject() || objectSize<minLargeObjectSize,
                       "Invalid object size");
         return isStartupAllocObject()? 0 : objectSize;
     }
     const BackRefIdx *getBackRefIdx() const { return &backRefIdx; }
-    inline TLSData *ownBlock() const;
+    inline bool isOwnedByCurrentThread() const;
     bool isStartupAllocObject() const { return objectSize == startupAllocObjSizeMark; }
     inline FreeObject *findObjectToFree(const void *object) const;
     void checkFreePrecond(const void *object) const {
@@ -422,18 +388,18 @@ public:
             FreeObject *toFree = findObjectToFree(object);
             // check against head of freeList, as this is mostly
             // expected after double free
-            MALLOC_ASSERT(findObjectToFree(object) != freeList, msg);
+            MALLOC_ASSERT(toFree != freeList, msg);
             // check against head of publicFreeList, to detect double free
             // involiving foreign thread
-            MALLOC_ASSERT(findObjectToFree(object) != publicFreeList, msg);
+            MALLOC_ASSERT(toFree != publicFreeList, msg);
         }
 #else
         suppress_unused_warning(object);
 #endif
     }
-    const BackRefIdx *getBackRef() const { return &backRefIdx; }
     void initEmptyBlock(TLSData *tls, size_t size);
     size_t findObjectSize(void *object) const;
+    MemoryPool *getMemPool() const { return poolPtr; } // do not use on the hot path!
 
 protected:
     void cleanBlockHeader();
@@ -444,9 +410,9 @@ private:
     inline FreeObject *allocateFromBumpPtr();
     inline FreeObject *findAllocatedObject(const void *address) const;
     inline bool isProperlyPlaced(const void *object) const;
-    inline bool isOrphaned() const { return !tlsPtr; }
     inline void markOwned(TLSData *tls) {
-        ownerTid.saveCurrentThreadId();
+        MALLOC_ASSERT(!tlsPtr, ASSERT_TEXT);
+        ownerTid = ThreadId(); /* save the ID of the current thread */
         tlsPtr = tls;
     }
     inline void markOrphaned() {
@@ -456,7 +422,7 @@ private:
 
     friend class Bin;
     friend class TLSData;
-    friend void MemoryPool::destroy();
+    friend bool MemoryPool::destroy();
 };
 
 const float Block::emptyEnoughRatio = 1.0 / 4.0;
@@ -477,11 +443,11 @@ public:
     inline void setActiveBlock(Block *block);
     inline Block* setPreviousBlockActive();
     Block* getPublicFreeListBlock();
-    void moveBlockToBinFront(Block *block);
+    void moveBlockToFront(Block *block);
     void processLessUsedBlock(MemoryPool *memPool, Block *block);
 
-    void outofTLSBin (Block* block);
-    void verifyTLSBin (size_t size) const;
+    void outofTLSBin(Block* block);
+    void verifyTLSBin(size_t size) const;
     void pushTLSBin(Block* block);
 
     void verifyInitState() const {
@@ -590,9 +556,7 @@ public:
 typedef LocalLOCImpl<8,32> LocalLOC; // set production code parameters
 
 class TLSData : public TLSRemote {
-#if USE_PTHREAD
     MemoryPool   *memPool;
-#endif
 public:
     Bin           bin[numBlockBinLimit];
     FreeBlockPool freeSlabBlocks;
@@ -601,12 +565,8 @@ public:
 private:
     bool unused;
 public:
-#if USE_PTHREAD
     TLSData(MemoryPool *mPool, Backend *bknd) : memPool(mPool), freeSlabBlocks(bknd) {}
     MemoryPool *getMemPool() const { return memPool; }
-#else
-    TLSData(MemoryPool * /*memPool*/, Backend *bknd) : freeSlabBlocks(bknd) {}
-#endif
     Bin* getAllocationBin(size_t size);
     void release(MemoryPool *mPool);
     bool externalCleanup(ExtMemoryPool *mPool, bool cleanOnlyUnused) {
@@ -752,7 +712,7 @@ static bool internalPoolFree(MemoryPool *mPool, void *object, size_t size);
 #define ALWAYSINLINE(decl) decl
 #endif
 
-static NOINLINE( void doInitialization() );
+static NOINLINE( bool doInitialization() );
 ALWAYSINLINE( bool isMallocInitialized() );
 
 #undef ALWAYSINLINE
@@ -805,6 +765,19 @@ static inline unsigned int highestBitPos(unsigned int n)
     return pos;
 }
 
+template<bool Is32Bit>
+unsigned int getSmallObjectIndex(unsigned int size)
+{
+    return (size-1)>>3;
+}
+template<>
+unsigned int getSmallObjectIndex</*Is32Bit=*/false>(unsigned int size)
+{
+    // For 64-bit malloc, 16 byte alignment is needed except for bin 0.
+    unsigned int result = (size-1)>>3;
+    if (result) result |= 1; // 0,1,3,5,7; bins 2,4,6 are not aligned to 16 bytes
+    return result;
+}
 /*
  * Depending on indexRequest, for a given size return either the index into the bin
  * for objects of this size, or the actual size of objects in this bin.
@@ -812,9 +785,10 @@ static inline unsigned int highestBitPos(unsigned int n)
 template<bool indexRequest>
 static unsigned int getIndexOrObjectSize (unsigned int size)
 {
-    if (size <= maxSmallObjectSize) { // selection from 4/8/16/24/32/40/48/56/64
-         /* Index 0 holds up to 8 bytes, Index 1 16 and so forth */
-        return indexRequest ? (size - 1) >> 3 : alignUp(size,8);
+    if (size <= maxSmallObjectSize) { // selection from 8/16/24/32/40/48/56/64
+        unsigned int index = getSmallObjectIndex</*Is32Bit=*/(sizeof(size_t)<=4)>( size );
+         /* Bin 0 is for 8 bytes, bin 1 is for 16, and so forth */
+        return indexRequest ? index : (index+1)<<3;
     }
     else if (size <= maxSegregatedObjectSize ) { // 80/96/112/128 / 160/192/224/256 / 320/384/448/512 / 640/768/896/1024
         unsigned int order = highestBitPos(size-1); // which group of bin sizes?
@@ -852,12 +826,12 @@ static unsigned int getIndexOrObjectSize (unsigned int size)
 
 static unsigned int getIndex (unsigned int size)
 {
-    return getIndexOrObjectSize</*indexRequest*/true>(size);
+    return getIndexOrObjectSize</*indexRequest=*/true>(size);
 }
 
 static unsigned int getObjectSize (unsigned int size)
 {
-    return getIndexOrObjectSize</*indexRequest*/false>(size);
+    return getIndexOrObjectSize</*indexRequest=*/false>(size);
 }
 
 
@@ -925,7 +899,6 @@ inline bool isNotForUse( void* ptr )
 
 /********* End rough utility code  **************/
 
-#ifdef FINE_GRAIN_LOCKS
 /* LifoList assumes zero initialization so a vector of it can be created
  * by just allocating some space with no call to constructor.
  * On Linux, it seems to be necessary to avoid linking with C++ libraries.
@@ -947,18 +920,26 @@ void LifoList::push(Block *block)
 Block *LifoList::pop()
 {
     Block *block=NULL;
-    if (!top) goto done;
-    {
+    if (top) {
         MallocMutex::scoped_lock scoped_cs(lock);
-        if (!top) goto done;
-        block = top;
-        top = block->next;
+        if (top) {
+            block = top;
+            top = block->next;
+        }
     }
-done:
     return block;
 }
 
-#endif /* FINE_GRAIN_LOCKS     */
+Block *LifoList::grab()
+{
+    Block *block = NULL;
+    if (top) {
+        MallocMutex::scoped_lock scoped_cs(lock);
+        block = top;
+        top = NULL;
+    }
+    return block;
+}
 
 /********* Thread and block related code      *************/
 
@@ -984,11 +965,8 @@ template<bool poolDestroy> void AllLargeBlocksList::releaseAll(Backend *backend)
 TLSData* MemoryPool::getTLS(bool create)
 {
     TLSData* tls = extMemPool.tlsPointerKey.getThreadMallocTLS();
-    if( create && !tls ) {
+    if (create && !tls)
         tls = extMemPool.tlsPointerKey.createTLS(this, &extMemPool.backend);
-        MALLOC_ASSERT( tls, ASSERT_TEXT );
-    }
-    if (tls) tls->markUsed();
     return tls;
 }
 
@@ -1040,6 +1018,7 @@ Block *MemoryPool::getEmptyBlock(size_t size)
                 b->backRefIdx = backRefIdx[i];
             }
             b->tlsPtr = tls;
+            b->poolPtr = this;
             // all but first one go to per-thread pool
             if (i > 0) {
                 MALLOC_ASSERT(tls, ASSERT_TEXT);
@@ -1049,7 +1028,7 @@ Block *MemoryPool::getEmptyBlock(size_t size)
     }
     MALLOC_ASSERT(result, ASSERT_TEXT);
     result->initEmptyBlock(tls, size);
-    STAT_increment(result->owner, getIndex(result->objectSize), allocBlockNew);
+    STAT_increment(getThreadId(), getIndex(result->objectSize), allocBlockNew);
     return result;
 }
 
@@ -1078,13 +1057,15 @@ bool ExtMemoryPool::init(intptr_t poolId, rawAllocType rawAlloc,
     this->keepAllMemory = keepAllMemory;
     this->fixedPool = fixedPool;
     this->delayRegsReleasing = false;
-    initTLS();
+    if (! initTLS())
+        return false;
     loc.init(this);
-    // allocate initial region for user's objects placement
-    return backend.bootstrap(this);
+    backend.init(this);
+    MALLOC_ASSERT(isPoolValid(), NULL);
+    return true;
 }
 
-void ExtMemoryPool::initTLS() { new (&tlsPointerKey) TLSKey(); }
+bool ExtMemoryPool::initTLS() { return tlsPointerKey.init(); }
 
 bool MemoryPool::init(intptr_t poolId, const MemPoolPolicy *policy)
 {
@@ -1103,7 +1084,7 @@ bool MemoryPool::init(intptr_t poolId, const MemPoolPolicy *policy)
     return true;
 }
 
-void MemoryPool::reset()
+bool MemoryPool::reset()
 {
     MALLOC_ASSERT(extMemPool.userPool(), "No reset for the system pool.");
     // memory is not releasing during pool reset
@@ -1111,16 +1092,24 @@ void MemoryPool::reset()
     extMemPool.delayRegionsReleasing(true);
 
     bootStrapBlocks.reset();
-    orphanedBlocks.reset();
     extMemPool.lmbList.releaseAll</*poolDestroy=*/false>(&extMemPool.backend);
-    extMemPool.reset();
+    if (!extMemPool.reset())
+        return false;
 
-    extMemPool.initTLS();
+    if (!extMemPool.initTLS())
+        return false;
     extMemPool.delayRegionsReleasing(false);
+    return true;
 }
 
-void MemoryPool::destroy()
+bool MemoryPool::destroy()
 {
+#if __TBB_MALLOC_LOCACHE_STAT
+    extMemPool.loc.reportStat(stdout);
+#endif
+#if __TBB_MALLOC_BACKEND_STAT
+    extMemPool.backend.reportStat(stdout);
+#endif
     {
         MallocMutex::scoped_lock lock(memPoolListLock);
         // remove itself from global pool list
@@ -1134,13 +1123,15 @@ void MemoryPool::destroy()
     if (extMemPool.userPool())
         extMemPool.lmbList.releaseAll</*poolDestroy=*/true>(&extMemPool.backend);
     else {
+        // only one non-userPool() is supported now
+        MALLOC_ASSERT(this==defaultMemPool, NULL);
         // There and below in extMemPool.destroy(), do not restore initial state
         // for user pool, because it's just about to be released. But for system
         // pool restoring, we do not want to do zeroing of it on subsequent reload.
         bootStrapBlocks.reset();
-        orphanedBlocks.reset();
+        extMemPool.orphanedBlocks.reset();
     }
-    extMemPool.destroy();
+    return extMemPool.destroy();
 }
 
 void MemoryPool::processThreadShutdown(TLSData *tlsData)
@@ -1157,12 +1148,12 @@ void Bin::verifyTLSBin (size_t size) const
     uint32_t objSize = getObjectSize(size);
 
     if (activeBlk) {
-        MALLOC_ASSERT( activeBlk->ownerTid.isCurrentThreadId(), ASSERT_TEXT );
+        MALLOC_ASSERT( activeBlk->isOwnedByCurrentThread(), ASSERT_TEXT );
         MALLOC_ASSERT( activeBlk->objectSize == objSize, ASSERT_TEXT );
 #if MALLOC_DEBUG>1
         for (Block* temp = activeBlk->next; temp; temp=temp->next) {
             MALLOC_ASSERT( temp!=activeBlk, ASSERT_TEXT );
-            MALLOC_ASSERT( temp->owner.own(), ASSERT_TEXT );
+            MALLOC_ASSERT( temp->isOwnedByCurrentThread(), ASSERT_TEXT );
             MALLOC_ASSERT( temp->objectSize == objSize, ASSERT_TEXT );
             MALLOC_ASSERT( temp->previous->next == temp, ASSERT_TEXT );
             if (temp->next) {
@@ -1171,7 +1162,7 @@ void Bin::verifyTLSBin (size_t size) const
         }
         for (Block* temp = activeBlk->previous; temp; temp=temp->previous) {
             MALLOC_ASSERT( temp!=activeBlk, ASSERT_TEXT );
-            MALLOC_ASSERT( temp->owner.own(), ASSERT_TEXT );
+            MALLOC_ASSERT( temp->isOwnedByCurrentThread(), ASSERT_TEXT );
             MALLOC_ASSERT( temp->objectSize == objSize, ASSERT_TEXT );
             MALLOC_ASSERT( temp->next->previous == temp, ASSERT_TEXT );
             if (temp->previous) {
@@ -1194,7 +1185,7 @@ void Bin::pushTLSBin(Block* block)
        because the function is applied to partially filled blocks as well */
     unsigned int size = block->objectSize;
 
-    MALLOC_ASSERT( block->ownerTid.isCurrentThreadId(), ASSERT_TEXT );
+    MALLOC_ASSERT( block->isOwnedByCurrentThread(), ASSERT_TEXT );
     MALLOC_ASSERT( block->objectSize != 0, ASSERT_TEXT );
     MALLOC_ASSERT( block->next == NULL, ASSERT_TEXT );
     MALLOC_ASSERT( block->previous == NULL, ASSERT_TEXT );
@@ -1222,7 +1213,7 @@ void Bin::outofTLSBin(Block* block)
 {
     unsigned int size = block->objectSize;
 
-    MALLOC_ASSERT( block->ownerTid.isCurrentThreadId(), ASSERT_TEXT );
+    MALLOC_ASSERT( block->isOwnedByCurrentThread(), ASSERT_TEXT );
     MALLOC_ASSERT( block->objectSize != 0, ASSERT_TEXT );
 
     MALLOC_ASSERT( this, ASSERT_TEXT );
@@ -1260,7 +1251,7 @@ Block* Bin::getPublicFreeListBlock()
         MallocMutex::scoped_lock scoped_cs(mailLock);
         block = mailbox;
         if( block ) {
-            MALLOC_ASSERT( block->ownBlock(), ASSERT_TEXT );
+            MALLOC_ASSERT( block->isOwnedByCurrentThread(), ASSERT_TEXT );
             MALLOC_ASSERT( !isNotForUse(block->nextPrivatizable), ASSERT_TEXT );
             mailbox = block->nextPrivatizable;
             block->nextPrivatizable = (Block*) this;
@@ -1279,7 +1270,7 @@ bool Block::emptyEnoughToUse()
 
     if (bumpPtr) {
         /* If we are still using a bump ptr for this block it is empty enough to use. */
-        STAT_increment(owner, getIndex(objectSize), examineEmptyEnough);
+        STAT_increment(getThreadId(), getIndex(objectSize), examineEmptyEnough);
         isFull = false;
         return 1;
     }
@@ -1289,9 +1280,9 @@ bool Block::emptyEnoughToUse()
     isFull = (allocatedCount*objectSize > threshold)? true: false;
 #if COLLECT_STATISTICS
     if (isFull)
-        STAT_increment(owner, getIndex(objectSize), examineNotEmpty);
+        STAT_increment(getThreadId(), getIndex(objectSize), examineNotEmpty);
     else
-        STAT_increment(owner, getIndex(objectSize), examineEmptyEnough);
+        STAT_increment(getThreadId(), getIndex(objectSize), examineEmptyEnough);
 #endif
     return !isFull;
 }
@@ -1301,21 +1292,23 @@ void Block::restoreBumpPtr()
 {
     MALLOC_ASSERT( allocatedCount == 0, ASSERT_TEXT );
     MALLOC_ASSERT( publicFreeList == NULL, ASSERT_TEXT );
-    STAT_increment(owner, getIndex(objectSize), freeRestoreBumpPtr);
+    STAT_increment(getThreadId(), getIndex(objectSize), freeRestoreBumpPtr);
     bumpPtr = (FreeObject *)((uintptr_t)this + slabSize - objectSize);
     freeList = NULL;
     isFull = 0;
 }
 
-void Block::freeOwnObject(MemoryPool *memPool, TLSData *tls, void *object)
+void Block::freeOwnObject(void *object)
 {
+    tlsPtr->markUsed();
     allocatedCount--;
     MALLOC_ASSERT( allocatedCount < (slabSize-sizeof(Block))/objectSize, ASSERT_TEXT );
 #if COLLECT_STATISTICS
-    if (tls->getAllocationBin(objectSize)->getActiveBlock() != this)
-        STAT_increment(owner, getIndex(objectSize), freeToInactiveBlock);
+    // Note that getAllocationBin is not called on the hottest path with statistics off.
+    if (tlsPtr->getAllocationBin(objectSize)->getActiveBlock() != this)
+        STAT_increment(getThreadId(), getIndex(objectSize), freeToInactiveBlock);
     else
-        STAT_increment(owner, getIndex(objectSize), freeToActiveBlock);
+        STAT_increment(getThreadId(), getIndex(objectSize), freeToActiveBlock);
 #endif
     if (allocatedCount==0 && publicFreeList==NULL) {
         // The bump pointer is about to be restored for the block,
@@ -1323,16 +1316,14 @@ void Block::freeOwnObject(MemoryPool *memPool, TLSData *tls, void *object)
 
         // if the last object of a slab is freed, the slab cannot be marked full
         MALLOC_ASSERT(!isFull, ASSERT_TEXT);
-        tls->getAllocationBin(objectSize)->processLessUsedBlock(memPool, this);
+        tlsPtr->getAllocationBin(objectSize)->processLessUsedBlock(poolPtr, this);
     } else {
         FreeObject *objectToFree = findObjectToFree(object);
         objectToFree->next = freeList;
         freeList = objectToFree;
 
-        if (isFull) {
-            if (emptyEnoughToUse())
-                tls->getAllocationBin(objectSize)->moveBlockToBinFront(this);
-        }
+        if (isFull && emptyEnoughToUse())
+            tlsPtr->getAllocationBin(objectSize)->moveBlockToFront(this);
     }
 }
 
@@ -1363,7 +1354,7 @@ void Block::freePublicObject (FreeObject *objectToFree)
         // if the block is abandoned, its nextPrivatizable pointer should be UNUSABLE
         // otherwise, it should point to the bin the block belongs to.
         // reading nextPrivatizable is thread-safe below, because:
-        // 1) the executing thread atomically got localPublicFreeList==NULL and changed it to non-NULL;
+        // 1) the executing thread atomically got publicFreeList==NULL and changed it to non-NULL;
         // 2) only owning thread can change it back to NULL,
         // 3) but it can not be done until the block is put to the mailbox
         // So the executing thread is now the only one that can change nextPrivatizable
@@ -1375,15 +1366,16 @@ void Block::freePublicObject (FreeObject *objectToFree)
             theBin->mailbox = this;
         }
     }
-    STAT_increment(ThreadId::get(), ThreadCommonCounters, freeToOtherThread);
-    STAT_increment(owner, getIndex(objectSize), freeByOtherThread);
+    STAT_increment(getThreadId(), ThreadCommonCounters, freeToOtherThread);
+    STAT_increment(ownerTid, getIndex(objectSize), freeByOtherThread);
 }
 
-void Block::privatizePublicFreeList()
+void Block::privatizePublicFreeList( bool cleanup )
 {
     FreeObject *temp, *localPublicFreeList;
 
-    MALLOC_ASSERT( ownerTid.isCurrentThreadId(), ASSERT_TEXT );
+    // During cleanup of orphaned blocks, the calling thread is not registered as the owner 
+    MALLOC_ASSERT( cleanup || isOwnedByCurrentThread(), ASSERT_TEXT );
 #if FREELIST_NONBLOCKING
     temp = publicFreeList;
     do {
@@ -1394,7 +1386,7 @@ void Block::privatizePublicFreeList()
         // no backoff necessary because trying to make change, not waiting for a change
     } while( temp != localPublicFreeList );
 #else
-    STAT_increment(owner, ThreadCommonCounters, lockPublicFreeList);
+    STAT_increment(getThreadId(), ThreadCommonCounters, lockPublicFreeList);
     {
         MallocMutex::scoped_lock scoped_cs(publicFreeListLock);
         localPublicFreeList = publicFreeList;
@@ -1404,8 +1396,10 @@ void Block::privatizePublicFreeList()
 #endif
     MALLOC_ITT_SYNC_ACQUIRED(&publicFreeList);
 
-    MALLOC_ASSERT( localPublicFreeList && localPublicFreeList==temp, ASSERT_TEXT ); // there should be something in publicFreeList!
-    if( !isNotForUse(temp) ) { // return/getPartialBlock could set it to UNUSABLE
+     // there should be something in publicFreeList, unless called by cleanup of orphaned blocks
+    MALLOC_ASSERT( cleanup || localPublicFreeList, ASSERT_TEXT );
+    MALLOC_ASSERT( localPublicFreeList==temp, ASSERT_TEXT );
+    if( isSolidPtr(temp) ) { // return/getPartialBlock could set it to UNUSABLE
         MALLOC_ASSERT( allocatedCount <= (slabSize-sizeof(Block))/objectSize, ASSERT_TEXT );
         /* other threads did not change the counter freeing our blocks */
         allocatedCount--;
@@ -1417,19 +1411,18 @@ void Block::privatizePublicFreeList()
         /* merge with local freeList */
         temp->next = freeList;
         freeList = localPublicFreeList;
-        STAT_increment(owner, getIndex(objectSize), allocPrivatized);
+        STAT_increment(getThreadId(), getIndex(objectSize), allocPrivatized);
     }
 }
 
 void Block::privatizeOrphaned(TLSData *tls, unsigned index)
 {
     Bin* bin = tls->bin + index;
-    STAT_increment(owner, index, allocBlockPublic);
+    STAT_increment(getThreadId(), index, allocBlockPublic);
     next = NULL;
     previous = NULL;
     MALLOC_ASSERT( publicFreeList!=NULL, ASSERT_TEXT );
     /* There is not a race here since no other thread owns this block */
-    MALLOC_ASSERT(isOrphaned(), ASSERT_TEXT);
     markOwned(tls);
     // It is safe to change nextPrivatizable, as publicFreeList is not null
     MALLOC_ASSERT( isNotForUse(nextPrivatizable), ASSERT_TEXT );
@@ -1444,19 +1437,19 @@ void Block::privatizeOrphaned(TLSData *tls, unsigned index)
     MALLOC_ASSERT( !isNotForUse(publicFreeList), ASSERT_TEXT );
 }
 
-void Block::shareOrphaned(const Bin *bin, unsigned index)
+void Block::shareOrphaned(intptr_t binTag, unsigned index)
 {
-    MALLOC_ASSERT( bin, ASSERT_TEXT );
-    STAT_increment(owner, index, freeBlockPublic);
+    MALLOC_ASSERT( binTag, ASSERT_TEXT );
+    STAT_increment(getThreadId(), index, freeBlockPublic);
     markOrphaned();
     // need to set publicFreeList to non-zero, so other threads
     // will not change nextPrivatizable and it can be zeroed.
-    if ((intptr_t)nextPrivatizable==(intptr_t)bin) {
+    if ((intptr_t)nextPrivatizable==binTag) {
         void* oldval;
 #if FREELIST_NONBLOCKING
         oldval = (void*)AtomicCompareExchange((intptr_t&)publicFreeList, (intptr_t)UNUSABLE, 0);
 #else
-        STAT_increment(owner, ThreadCommonCounters, lockPublicFreeList);
+        STAT_increment(getThreadId(), ThreadCommonCounters, lockPublicFreeList);
         {
             MallocMutex::scoped_lock scoped_cs(publicFreeListLock);
             if ( (oldval=publicFreeList)==NULL )
@@ -1465,10 +1458,11 @@ void Block::shareOrphaned(const Bin *bin, unsigned index)
 #endif
         if ( oldval!=NULL ) {
             // another thread freed an object; we need to wait until it finishes.
-            // I believe there is no need for exponential backoff, as the wait here is not for a lock;
+            // There is no need for exponential backoff, as the wait here is not for a lock;
             // but need to yield, so the thread we wait has a chance to run.
+            // TODO: add a pause to also be friendly to hyperthreads
             int count = 256;
-            while( (intptr_t)const_cast<Block* volatile &>(nextPrivatizable)==(intptr_t)bin ) {
+            while( (intptr_t)const_cast<Block* volatile &>(nextPrivatizable)==binTag ) {
                 if (--count==0) {
                     do_yield();
                     count = 256;
@@ -1515,8 +1509,8 @@ void Block::initEmptyBlock(TLSData *tls, size_t size)
     // each block should have the address where the head of the list of "privatizable" blocks is kept
     // the only exception is a block for boot strap which is initialized when TLS is yet NULL
     nextPrivatizable = tls? (Block*)(tls->bin + index) : NULL;
-    TRACEF(( "[ScalableMalloc trace] Empty block %p is initialized, owner is %d, objectSize is %d, bumpPtr is %p\n",
-             this, owner, objectSize, bumpPtr ));
+    TRACEF(( "[ScalableMalloc trace] Empty block %p is initialized, owner is %ld, objectSize is %d, bumpPtr is %p\n",
+             this, tlsPtr ? getThreadId() : -1, objectSize, bumpPtr ));
 }
 
 Block *OrphanedBlocks::get(TLSData *tls, unsigned int size)
@@ -1531,10 +1525,10 @@ Block *OrphanedBlocks::get(TLSData *tls, unsigned int size)
     return block;
 }
 
-void OrphanedBlocks::put(Bin* bin, Block *block)
+void OrphanedBlocks::put(intptr_t binTag, Block *block)
 {
     unsigned int index = getIndex(block->getSize());
-    block->shareOrphaned(bin, index);
+    block->shareOrphaned(binTag, index);
     MALLOC_ITT_SYNC_RELEASING(bins+index);
     bins[index].push(block);
 }
@@ -1545,6 +1539,32 @@ void OrphanedBlocks::reset()
         new (bins+i) LifoList();
 }
 
+bool OrphanedBlocks::cleanup(Backend* backend)
+{
+    bool result = false;
+    for (uint32_t i=0; i<numBlockBinLimit; i++) {
+        Block* block = bins[i].grab();
+        MALLOC_ITT_SYNC_ACQUIRED(bins+i);
+        while (block) {
+            Block* next = block->next;
+            block->privatizePublicFreeList( /*cleanup=*/true );
+            if (block->empty()) {
+                block->makeEmpty();
+                // slab blocks in user's pools do not have valid backRefIdx
+                if (!backend->inUserPool())
+                    removeBackRef(*(block->getBackRefIdx()));
+                backend->putSlabBlock(block);
+                result = true;
+            } else {
+                MALLOC_ITT_SYNC_RELEASING(bins+i);
+                bins[i].push(block);
+            }
+            block = next;
+        }
+    }
+    return result;
+}
+
 FreeBlockPool::ResOfGet FreeBlockPool::getBlock()
 {
     Block *b = (Block*)AtomicFetchStore(&head, 0);
@@ -1613,7 +1633,7 @@ void Block::makeEmpty()
     MALLOC_ASSERT( allocatedCount==0, ASSERT_TEXT );
     MALLOC_ASSERT( publicFreeList==NULL, ASSERT_TEXT );
     if (!isStartupAllocObject())
-        STAT_increment(owner, getIndex(objectSize), freeBlockBack);
+        STAT_increment(getThreadId(), getIndex(objectSize), freeBlockBack);
 
     cleanBlockHeader();
 
@@ -1627,7 +1647,7 @@ void Block::makeEmpty()
 inline void Bin::setActiveBlock (Block *block)
 {
 //    MALLOC_ASSERT( bin, ASSERT_TEXT );
-    MALLOC_ASSERT( block->ownBlock(), ASSERT_TEXT );
+    MALLOC_ASSERT( block->isOwnedByCurrentThread(), ASSERT_TEXT );
     // it is the caller responsibility to keep bin consistence (i.e. ensure this block is in the bin list)
     activeBlk = block;
 }
@@ -1643,10 +1663,8 @@ inline Block* Bin::setPreviousBlockActive()
     return temp;
 }
 
-inline TLSData *Block::ownBlock() const {
-    if (!tlsPtr || !ownerTid.isCurrentThreadId()) return NULL;
-    tlsPtr->markUsed();
-    return tlsPtr;
+inline bool Block::isOwnedByCurrentThread() const {
+    return tlsPtr && ownerTid.isCurrentThreadId();
 }
 
 FreeObject *Block::findObjectToFree(const void *object) const
@@ -1690,7 +1708,7 @@ void TLSData::release(MemoryPool *mPool)
                 /* we destroy the thread, so not use its block pool */
                 mPool->returnEmptyBlock(threadlessBlock, /*poolTheBlock=*/false);
             } else {
-                mPool->orphanedBlocks.put(bin+index, threadlessBlock);
+                mPool->extMemPool.orphanedBlocks.put(intptr_t(bin+index), threadlessBlock);
             }
             threadlessBlock = threadBlock;
         }
@@ -1701,7 +1719,7 @@ void TLSData::release(MemoryPool *mPool)
                 /* we destroy the thread, so not use its block pool */
                 mPool->returnEmptyBlock(threadlessBlock, /*poolTheBlock=*/false);
             } else {
-                mPool->orphanedBlocks.put(bin+index, threadlessBlock);
+                mPool->extMemPool.orphanedBlocks.put(intptr_t(bin+index), threadlessBlock);
             }
             threadlessBlock = threadBlock;
         }
@@ -1852,18 +1870,16 @@ void StartupBlock::free(void *ptr)
 static intptr_t mallocInitialized;   // implicitly initialized to 0
 static MallocMutex initMutex;
 
-#include "../tbb/tbb_version.h"
-
 /** The leading "\0" is here so that applying "strings" to the binary
     delivers a clean result. */
 static char VersionString[] = "\0" TBBMALLOC_VERSION_STRINGS;
 
-#if _XBOX || __TBB_WIN8UI_SUPPORT
+#if __TBB_WIN8UI_SUPPORT
 bool GetBoolEnvironmentVariable(const char *) { return false; }
 #else
 bool GetBoolEnvironmentVariable(const char *name)
 {
-    if( const char* s = getenv(name) )
+    if (const char* s = getenv(name))
         return strcmp(s,"0") != 0;
     return false;
 }
@@ -1872,7 +1888,8 @@ bool GetBoolEnvironmentVariable(const char *name)
 void AllocControlledMode::initReadEnv(const char *envName, intptr_t defaultVal)
 {
     if (!setDone) {
-#if !_XBOX && !__TBB_WIN8UI_SUPPORT
+#if !__TBB_WIN8UI_SUPPORT
+    // TODO: use strtol to get the actual value of the envirable
         const char *envVal = getenv(envName);
         if (envVal && !strcmp(envVal, "1"))
             val = 1;
@@ -1961,16 +1978,26 @@ bool isMallocInitializedExt() {
     return isMallocInitialized();
 }
 
+/** Caller is responsible for ensuring this routine is called exactly once. */
+extern "C" void MallocInitializeITT() {
+#if DO_ITT_NOTIFY
+    if (!usedBySrcIncluded)
+        tbb::internal::__TBB_load_ittnotify();
+#endif
+}
+
 /*
  * Allocator initialization routine;
  * it is called lazily on the very first scalable_malloc call.
  */
-static void initMemoryManager()
+static bool initMemoryManager()
 {
     TRACEF(( "[ScalableMalloc trace] sizeof(Block) is %d (expected 128); sizeof(uintptr_t) is %d\n",
              sizeof(Block), sizeof(uintptr_t) ));
     MALLOC_ASSERT( 2*blockHeaderAlignment == sizeof(Block), ASSERT_TEXT );
     MALLOC_ASSERT( sizeof(FreeObject) == sizeof(void*), ASSERT_TEXT );
+    MALLOC_ASSERT( isAligned(defaultMemPool, sizeof(intptr_t)),
+                   "Memory pool must be void*-aligned for atomic to work over aligned arguments.");
 
 #if USE_WINTHREAD
     const size_t granularity = 64*1024; // granulatity of VirtualAlloc
@@ -1981,11 +2008,9 @@ static void initMemoryManager()
     bool initOk = defaultMemPool->
         extMemPool.init(0, NULL, NULL, granularity,
                         /*keepAllMemory=*/false, /*fixedPool=*/false);
-// TODO: add error handling, and on error do something better than exit(1)
-    if (!initOk || !initBackRefMaster(&defaultMemPool->extMemPool.backend)) {
-        fprintf (stderr, "The memory manager cannot access sufficient memory to initialize; exiting \n");
-        exit(1);
-    }
+// TODO: extMemPool.init() to not allocate memory
+    if (!initOk || !initBackRefMaster(&defaultMemPool->extMemPool.backend))
+        return false;
     ThreadId::init();      // Create keys for thread id
     MemoryPool::initDefaultPool();
     // init() is required iff initMemoryManager() is called
@@ -1994,19 +2019,23 @@ static void initMemoryManager()
 #if COLLECT_STATISTICS
     initStatisticsCollection();
 #endif
+    return true;
 }
 
 //! Ensures that initMemoryManager() is called once and only once.
 /** Does not return until initMemoryManager() has been completed by a thread.
     There is no need to call this routine if mallocInitialized==2 . */
-static void doInitialization()
+static bool doInitialization()
 {
     MallocMutex::scoped_lock lock( initMutex );
     if (mallocInitialized!=2) {
         MALLOC_ASSERT( mallocInitialized==0, ASSERT_TEXT );
         mallocInitialized = 1;
         RecursiveMallocCallProtector scoped;
-        initMemoryManager();
+        if (!initMemoryManager()) {
+            mallocInitialized = 0; // restore and out
+            return false;
+        }
 #ifdef  MALLOC_EXTRA_INITIALIZATION
         MALLOC_EXTRA_INITIALIZATION;
 #endif
@@ -2025,6 +2054,7 @@ static void doInitialization()
     }
     /* It can't be 0 or I would have initialized it */
     MALLOC_ASSERT( mallocInitialized==2, ASSERT_TEXT );
+    return true;
 }
 
 /********* End library initialization *************/
@@ -2044,7 +2074,7 @@ FreeObject *Block::allocateFromFreeList()
     freeList = result->next;
     MALLOC_ASSERT( allocatedCount < (slabSize-sizeof(Block))/objectSize, ASSERT_TEXT );
     allocatedCount++;
-    STAT_increment(owner, getIndex(objectSize), allocFreeListUsed);
+    STAT_increment(getThreadId(), getIndex(objectSize), allocFreeListUsed);
 
     return result;
 }
@@ -2059,14 +2089,14 @@ FreeObject *Block::allocateFromBumpPtr()
         }
         MALLOC_ASSERT( allocatedCount < (slabSize-sizeof(Block))/objectSize, ASSERT_TEXT );
         allocatedCount++;
-        STAT_increment(owner, getIndex(objectSize), allocBumpPtrUsed);
+        STAT_increment(getThreadId(), getIndex(objectSize), allocBumpPtrUsed);
     }
     return result;
 }
 
 inline FreeObject* Block::allocate()
 {
-    MALLOC_ASSERT( ownBlock(), ASSERT_TEXT );
+    MALLOC_ASSERT( isOwnedByCurrentThread(), ASSERT_TEXT );
 
     /* for better cache locality, first looking in the free list. */
     if ( FreeObject *result = allocateFromFreeList() ) {
@@ -2102,7 +2132,7 @@ size_t Block::findObjectSize(void *object) const
     return size;
 }
 
-void Bin::moveBlockToBinFront(Block *block)
+void Bin::moveBlockToFront(Block *block)
 {
     /* move the block to the front of the bin */
     if (block == activeBlk) return;
@@ -2216,10 +2246,12 @@ void *MemoryPool::getFromLLOCache(TLSData* tls, size_t size, size_t alignment)
         return NULL;
     MALLOC_ASSERT(allocationSize >= alignment, "Overflow must be checked before.");
 
-    if (tls)
+    if (tls) {
+        tls->markUsed();
         lmb = tls->lloc.get(allocationSize);
+    }
     if (!lmb)
-        lmb = extMemPool.mallocLargeObject(allocationSize);
+        lmb = extMemPool.mallocLargeObject(this, allocationSize);
 
     if (lmb) {
         // doing shuffle we suppose that alignment offset guarantees
@@ -2270,8 +2302,12 @@ void MemoryPool::putToLLOCache(TLSData *tls, void *object)
     // overwrite backRefIdx to simplify double free detection
     header->backRefIdx = BackRefIdx();
 
-    if (!tls || !tls->lloc.put(header->memoryBlock, &extMemPool))
-        extMemPool.freeLargeObject(header->memoryBlock);
+    if (tls) {
+        tls->markUsed();
+        if (tls->lloc.put(header->memoryBlock, &extMemPool))
+            return;
+    }
+    extMemPool.freeLargeObject(header->memoryBlock);
 }
 
 /*
@@ -2290,7 +2326,9 @@ static void *allocateAligned(MemoryPool *memPool, size_t size, size_t alignment)
 {
     MALLOC_ASSERT( isPowerOfTwo(alignment), ASSERT_TEXT );
 
-    if (!isMallocInitialized()) doInitialization();
+    if (!isMallocInitialized())
+        if (!doInitialization())
+            return NULL;
 
     void *result;
     if (size<=maxSegregatedObjectSize && alignment<=maxSegregatedObjectSize)
@@ -2306,9 +2344,6 @@ static void *allocateAligned(MemoryPool *memPool, size_t size, size_t alignment)
             goto LargeObjAlloc;
     } else {
     LargeObjAlloc:
-        /* This can be the first allocation call. */
-        if (!isMallocInitialized())
-            doInitialization();
         TLSData *tls = memPool->getTLS(/*create=*/true);
         // take into account only alignment that are higher then natural
         result =
@@ -2335,10 +2370,10 @@ static void *reallocAligned(MemoryPool *memPool, void *ptr,
         } else {
             copySize = lmb->objectSize;
 #if BACKEND_HAS_MREMAP
-            if ((result = (memPool->extMemPool.backend.remap(ptr, copySize, size,
+            if (void *r = memPool->extMemPool.remap(ptr, copySize, size,
                               alignment<largeObjectAlignment?
-                                        largeObjectAlignment : alignment))))
-                return result;
+                              largeObjectAlignment : alignment))
+                return r;
 #endif
             result = alignment ? allocateAligned(memPool, size, alignment) :
                 internalPoolMalloc(memPool, size);
@@ -2419,7 +2454,7 @@ bool isLargeObject(void *object)
 static inline bool isSmallObject (void *ptr)
 {
     Block* expectedBlock = (Block*)alignDown(ptr, slabSize);
-    const BackRefIdx* idx = expectedBlock->getBackRef();
+    const BackRefIdx* idx = expectedBlock->getBackRefIdx();
 
     bool isSmall = expectedBlock == getBackRef(safer_dereference(idx));
     if (isSmall)
@@ -2430,10 +2465,11 @@ static inline bool isSmallObject (void *ptr)
 /**** Check if an object was allocated by scalable_malloc ****/
 static inline bool isRecognized (void* ptr)
 {
-    return isLargeObject<unknownMem>(ptr) || isSmallObject(ptr);
+    return defaultMemPool->extMemPool.backend.ptrCanBeValid(ptr) &&
+        (isLargeObject<unknownMem>(ptr) || isSmallObject(ptr));
 }
 
-static inline void freeSmallObject(MemoryPool *memPool, void *object)
+static inline void freeSmallObject(void *object)
 {
     /* mask low bits to get the block */
     Block *block = (Block *)alignDown(object, slabSize);
@@ -2445,9 +2481,9 @@ static inline void freeSmallObject(MemoryPool *memPool, void *object)
         return;
     }
 #endif
-    if (TLSData *tls = block->ownBlock())
-        block->freeOwnObject(memPool, tls, object);
-    else { /* Slower path to add to the shared list, the allocatedCount is updated by the owner thread in malloc. */
+    if (block->isOwnedByCurrentThread()) {
+        block->freeOwnObject(object);
+    } else { /* Slower path to add to the shared list, the allocatedCount is updated by the owner thread in malloc. */
         FreeObject *objectToFree = block->findObjectToFree(object);
         block->freePublicObject(objectToFree);
     }
@@ -2463,12 +2499,14 @@ static void *internalPoolMalloc(MemoryPool* memPool, size_t size)
     if (!size) size = sizeof(size_t);
 
     TLSData *tls = memPool->getTLS(/*create=*/true);
-    /*
-     * Use Large Object Allocation
-     */
+
+    /* Allocate a large object */
     if (size >= minLargeObjectSize)
         return memPool->getFromLLOCache(tls, size, largeObjectAlignment);
 
+    if (!tls) return NULL;
+
+    tls->markUsed();
     /*
      * Get an element in thread-local array corresponding to the given size;
      * It keeps ptr to the active block for allocations of this size
@@ -2490,7 +2528,7 @@ static void *internalPoolMalloc(MemoryPool* memPool, size_t size)
     mallocBlock = bin->getPublicFreeListBlock();
     if (mallocBlock) {
         if (mallocBlock->emptyEnoughToUse()) {
-            bin->moveBlockToBinFront(mallocBlock);
+            bin->moveBlockToFront(mallocBlock);
         }
         MALLOC_ASSERT( mallocBlock->freeListNonNull(), ASSERT_TEXT );
         if ( FreeObject *result = mallocBlock->allocateFromFreeList() )
@@ -2503,13 +2541,13 @@ static void *internalPoolMalloc(MemoryPool* memPool, size_t size)
     /*
      * no suitable own blocks, try to get a partial block that some other thread has discarded.
      */
-    mallocBlock = memPool->orphanedBlocks.get(tls, size);
+    mallocBlock = memPool->extMemPool.orphanedBlocks.get(tls, size);
     while (mallocBlock) {
         bin->pushTLSBin(mallocBlock);
         bin->setActiveBlock(mallocBlock); // TODO: move under the below condition?
         if( FreeObject *result = mallocBlock->allocate() )
             return result;
-        mallocBlock = memPool->orphanedBlocks.get(tls, size);
+        mallocBlock = memPool->extMemPool.orphanedBlocks.get(tls, size);
     }
 
     /*
@@ -2549,7 +2587,7 @@ static bool internalPoolFree(MemoryPool *memPool, void *object, size_t size)
     if (size >= minLargeObjectSize || isLargeObject<ourMem>(object))
         memPool->putToLLOCache(memPool->getTLS(/*create=*/false), object);
     else
-        freeSmallObject(memPool, object);
+        freeSmallObject(object);
     return true;
 }
 
@@ -2565,8 +2603,8 @@ static void *internalMalloc(size_t size)
 #endif
 
     if (!isMallocInitialized())
-        doInitialization();
-
+        if (!doInitialization())
+            return NULL;
     return internalPoolMalloc(defaultMemPool, size);
 }
 
@@ -2623,8 +2661,8 @@ rml::MemPoolError pool_create_v1(intptr_t pool_id, const MemPoolPolicy *policy,
         return UNSUPPORTED_POLICY;
     }
     if (!isMallocInitialized())
-        doInitialization();
-
+        if (!doInitialization())
+            return NO_MEMORY;
     rml::internal::MemoryPool *memPool =
         (rml::internal::MemoryPool*)internalMalloc((sizeof(rml::internal::MemoryPool)));
     if (!memPool) {
@@ -2645,18 +2683,17 @@ rml::MemPoolError pool_create_v1(intptr_t pool_id, const MemPoolPolicy *policy,
 bool pool_destroy(rml::MemoryPool* memPool)
 {
     if (!memPool) return false;
-    ((rml::internal::MemoryPool*)memPool)->destroy();
+    bool ret = ((rml::internal::MemoryPool*)memPool)->destroy();
     internalFree(memPool);
 
-    return true;
+    return ret;
 }
 
 bool pool_reset(rml::MemoryPool* memPool)
 {
     if (!memPool) return false;
 
-    ((rml::internal::MemoryPool*)memPool)->reset();
-    return true;
+    return ((rml::internal::MemoryPool*)memPool)->reset();
 }
 
 void *pool_malloc(rml::MemoryPool* mPool, size_t size)
@@ -2706,6 +2743,22 @@ bool pool_free(rml::MemoryPool *mPool, void *object)
     return internalPoolFree((rml::internal::MemoryPool*)mPool, object, 0);
 }
 
+rml::MemoryPool *pool_identify(void *object)
+{
+    rml::internal::MemoryPool *pool;
+    if (isLargeObject<ourMem>(object)) {
+        LargeObjectHdr *header = (LargeObjectHdr*)object - 1;
+        pool = header->memoryBlock->pool;
+    } else {
+        Block *block = (Block*)alignDown(object, slabSize);
+        pool = block->getMemPool();
+    }
+    // do not return defaultMemPool, as it can't be used in pool_free() etc
+    __TBB_ASSERT_RELEASE(pool!=defaultMemPool,
+        "rml::pool_identify() can't be used for scalable_malloc() etc results.");
+    return (rml::MemoryPool*)pool;
+}
+
 } // namespace rml
 
 using namespace rml::internal;
@@ -2760,11 +2813,12 @@ extern "C" void __TBB_mallocProcessShutdownNotification()
 {
     if (!isMallocInitialized()) return;
 
-#if __TBB_MALLOC_LOCACHE_STAT
+#if  __TBB_MALLOC_LOCACHE_STAT
     printf("cache hit ratio %f, size hit %f\n",
            1.*cacheHits/mallocCalls, 1.*memHitKB/memAllocKB);
     defaultMemPool->extMemPool.loc.reportStat(stdout);
 #endif
+
     shutdownSync.processExit();
 #if __TBB_SOURCE_DIRECTLY_INCLUDED
 /* Pthread keys must be deleted as soon as possible to not call key dtor
@@ -2823,15 +2877,21 @@ extern "C" void __TBB_malloc_safer_free(void *object, void (*original_free)(void
     if (!object)
         return;
 
-    // must check 1st for large object, because small object check touches 4 pages on left,
-    // and it can be inaccessible
-    if (isLargeObject<unknownMem>(object)) {
-        TLSData *tls = defaultMemPool->getTLS(/*create=*/false);
-
-        defaultMemPool->putToLLOCache(tls, object);
-    } else if (isSmallObject(object)) {
-        freeSmallObject(defaultMemPool, object);
-    } else if (original_free)
+    // tbbmalloc can allocate object only when tbbmalloc has been initialized
+    if (FencedLoad(mallocInitialized) && defaultMemPool->extMemPool.backend.ptrCanBeValid(object)) {
+        if (isLargeObject<unknownMem>(object)) {
+            // must check 1st for large object, because small object check touches 4 pages on left,
+            // and it can be inaccessible
+            TLSData *tls = defaultMemPool->getTLS(/*create=*/false);
+
+            defaultMemPool->putToLLOCache(tls, object);
+            return;
+        } else if (isSmallObject(object)) {
+            freeSmallObject(object);
+            return;
+        }
+    }
+    if (original_free)
         original_free(object);
 }
 
@@ -2873,7 +2933,7 @@ extern "C" void* __TBB_malloc_safer_realloc(void* ptr, size_t sz, void* original
 
     if (!ptr) {
         tmp = internalMalloc(sz);
-    } else if (isRecognized(ptr)) {
+    } else if (FencedLoad(mallocInitialized) && isRecognized(ptr)) {
         if (!sz) {
             internalFree(ptr);
             return NULL;
@@ -2884,13 +2944,13 @@ extern "C" void* __TBB_malloc_safer_realloc(void* ptr, size_t sz, void* original
 #if USE_WINTHREAD
     else if (original_realloc && sz) {
         orig_ptrs *original_ptrs = static_cast<orig_ptrs*>(original_realloc);
-        if ( original_ptrs->orig_msize ){
-            size_t oldSize = original_ptrs->orig_msize(ptr);
+        if ( original_ptrs->msize ){
+            size_t oldSize = original_ptrs->msize(ptr);
             tmp = internalMalloc(sz);
             if (tmp) {
                 memcpy(tmp, ptr, sz<oldSize? sz : oldSize);
-                if ( original_ptrs->orig_free ){
-                    original_ptrs->orig_free( ptr );
+                if ( original_ptrs->free ){
+                    original_ptrs->free( ptr );
                 }
             }
         } else
@@ -2948,7 +3008,7 @@ extern "C" void * scalable_calloc(size_t nobj, size_t size)
 
 extern "C" int scalable_posix_memalign(void **memptr, size_t alignment, size_t size)
 {
-    if ( !isPowerOfTwoMultiple(alignment, sizeof(void*)) )
+    if ( !isPowerOfTwoAtLeast(alignment, sizeof(void*)) )
         return EINVAL;
     void *result = allocateAligned(defaultMemPool, size, alignment);
     if (!result)
@@ -2999,7 +3059,7 @@ extern "C" void * __TBB_malloc_safer_aligned_realloc(void *ptr, size_t size, siz
 
     if (!ptr) {
         tmp = allocateAligned(defaultMemPool, size, alignment);
-    } else if (isRecognized(ptr)) {
+    } else if (FencedLoad(mallocInitialized) && isRecognized(ptr)) {
         if (!size) {
             internalFree(ptr);
             return NULL;
@@ -3009,23 +3069,24 @@ extern "C" void * __TBB_malloc_safer_aligned_realloc(void *ptr, size_t size, siz
     }
 #if USE_WINTHREAD
     else {
-        orig_ptrs *original_ptrs = static_cast<orig_ptrs*>(orig_function);
+        orig_aligned_ptrs *original_ptrs = static_cast<orig_aligned_ptrs*>(orig_function);
         if (size) {
             // Without orig_msize, we can't do anything with this.
             // Just keeping old pointer.
-            if ( original_ptrs->orig_msize ){
-                size_t oldSize = original_ptrs->orig_msize(ptr);
+            if ( original_ptrs->aligned_msize ){
+                // set alignment and offset to have possibly correct oldSize
+                size_t oldSize = original_ptrs->aligned_msize(ptr, sizeof(void*), 0);
                 tmp = allocateAligned(defaultMemPool, size, alignment);
                 if (tmp) {
                     memcpy(tmp, ptr, size<oldSize? size : oldSize);
-                    if ( original_ptrs->orig_free ){
-                        original_ptrs->orig_free( ptr );
+                    if ( original_ptrs->aligned_free ){
+                        original_ptrs->aligned_free( ptr );
                     }
                 }
             }
         } else {
-            if ( original_ptrs->orig_free ){
-                original_ptrs->orig_free( ptr );
+            if ( original_ptrs->aligned_free ){
+                original_ptrs->aligned_free( ptr );
             }
             return NULL;
         }
@@ -3064,7 +3125,7 @@ extern "C" size_t __TBB_malloc_safer_msize(void *object, size_t (*original_msize
 {
     if (object) {
         // Check if the memory was allocated by scalable_malloc
-        if (isRecognized(object))
+        if (FencedLoad(mallocInitialized) && isRecognized(object))
             return internalMsize(object);
         else if (original_msize)
             return original_msize(object);
@@ -3083,7 +3144,7 @@ extern "C" size_t __TBB_malloc_safer_aligned_msize(void *object, size_t alignmen
 {
     if (object) {
         // Check if the memory was allocated by scalable_malloc
-        if (isRecognized(object))
+        if (FencedLoad(mallocInitialized) && isRecognized(object))
             return internalMsize(object);
         else if (orig_aligned_msize)
             return orig_aligned_msize(object,alignment,offset);
diff --git a/src/tbbmalloc/index.html b/src/tbbmalloc/index.html
index 545fcb9..19eaf99 100644
--- a/src/tbbmalloc/index.html
+++ b/src/tbbmalloc/index.html
@@ -7,7 +7,7 @@ This directory contains the Intel® Threading Building Blocks (Intel® TBB
 
 <HR>
 <p></p>
-Copyright © 2005-2015 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2017 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/src/tbbmalloc/large_objects.cpp b/src/tbbmalloc/large_objects.cpp
index fe1a175..0921b85 100644
--- a/src/tbbmalloc/large_objects.cpp
+++ b/src/tbbmalloc/large_objects.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbbmalloc_internal.h"
@@ -27,6 +27,80 @@ namespace rml {
 namespace internal {
 
 
+/* The functor called by the aggregator for the operation list */
+template<typename Props>
+class CacheBinFunctor {
+    typename LargeObjectCacheImpl<Props>::CacheBin *const bin;
+    ExtMemoryPool *const extMemPool;
+    typename LargeObjectCacheImpl<Props>::BinBitMask *const bitMask;
+    const int idx;
+
+    LargeMemoryBlock *toRelease;
+    bool needCleanup;
+    uintptr_t currTime;
+
+    /* Do preprocessing under the operation list. */
+    /* All the OP_PUT_LIST operations are merged in the one operation.
+       All OP_GET operations are merged with the OP_PUT_LIST operations but
+       it demands the update of the moving average value in the bin.
+       Only the last OP_CLEAN_TO_THRESHOLD operation has sense.
+       The OP_CLEAN_ALL operation also should be performed only once.
+       Moreover it cancels the OP_CLEAN_TO_THRESHOLD operation. */
+    class OperationPreprocessor {
+        // TODO: remove the dependency on CacheBin.
+        typename LargeObjectCacheImpl<Props>::CacheBin *const  bin;
+
+        /* Contains the relative time in the operation list.
+           It counts in the reverse order since the aggregator also
+           provides operations in the reverse order. */
+        uintptr_t lclTime;
+
+        /* opGet contains only OP_GET operations which cannot be merge with OP_PUT operations
+           opClean contains all OP_CLEAN_TO_THRESHOLD and OP_CLEAN_ALL operations. */
+        CacheBinOperation *opGet, *opClean;
+        /* The time of the last OP_CLEAN_TO_THRESHOLD operations */
+        uintptr_t cleanTime;
+
+        /* lastGetOpTime - the time of the last OP_GET operation.
+           lastGet - the same meaning as CacheBin::lastGet */
+        uintptr_t lastGetOpTime, lastGet;
+
+        /* The total sum of all usedSize changes requested with CBOP_UPDATE_USED_SIZE operations. */
+        size_t updateUsedSize;
+
+        /* The list of blocks for the OP_PUT_LIST operation. */
+        LargeMemoryBlock *head, *tail;
+        int putListNum;
+
+        /* if the OP_CLEAN_ALL is requested. */
+        bool isCleanAll;
+
+        inline void commitOperation(CacheBinOperation *op) const;
+        inline void addOpToOpList(CacheBinOperation *op, CacheBinOperation **opList) const;
+        bool getFromPutList(CacheBinOperation* opGet, uintptr_t currTime);
+        void addToPutList( LargeMemoryBlock *head, LargeMemoryBlock *tail, int num );
+
+    public:
+        OperationPreprocessor(typename LargeObjectCacheImpl<Props>::CacheBin *bin) :
+            bin(bin), lclTime(0), opGet(NULL), opClean(NULL), cleanTime(0),
+            lastGetOpTime(0), updateUsedSize(0), head(NULL), isCleanAll(false)  {}
+        void operator()(CacheBinOperation* opList);
+        uintptr_t getTimeRange() const { return -lclTime; }
+
+        friend class CacheBinFunctor;
+    };
+
+public:
+    CacheBinFunctor(typename LargeObjectCacheImpl<Props>::CacheBin *bin, ExtMemoryPool *extMemPool,
+                    typename LargeObjectCacheImpl<Props>::BinBitMask *bitMask, int idx) :
+        bin(bin), extMemPool(extMemPool), bitMask(bitMask), idx(idx), toRelease(NULL), needCleanup(false) {}
+    void operator()(CacheBinOperation* opList);
+
+    bool isCleanupNeeded() const { return needCleanup; }
+    LargeMemoryBlock *getToRelease() const { return toRelease; }
+    uintptr_t getCurrTime() const { return currTime; }
+};
+
 // ---------------- Cache Bin Aggregator Operation Helpers ---------------- //
 // The list of possible operations.
 enum CacheBinOperationType {
@@ -35,7 +109,7 @@ enum CacheBinOperationType {
     CBOP_PUT_LIST,
     CBOP_CLEAN_TO_THRESHOLD,
     CBOP_CLEAN_ALL,
-    CBOP_DECR_USED_SIZE
+    CBOP_UPDATE_USED_SIZE
 };
 
 // The operation status list. CBST_NOWAIT can be specified for non-blocking operations.
@@ -69,8 +143,8 @@ struct OpCleanAll {
     LargeMemoryBlock **res;
 };
 
-struct OpDecrUsedSize {
-    static const CacheBinOperationType type = CBOP_DECR_USED_SIZE;
+struct OpUpdateUsedSize {
+    static const CacheBinOperationType type = CBOP_UPDATE_USED_SIZE;
     size_t size;
 };
 
@@ -80,7 +154,7 @@ private:
     OpPutList opPutList;
     OpCleanToThreshold opCleanToThreshold;
     OpCleanAll opCleanAll;
-    OpDecrUsedSize opDecrUsedSize;
+    OpUpdateUsedSize opUpdateUsedSize;
 };
 
 // Forward declarations
@@ -128,20 +202,20 @@ inline bool lessThanWithOverflow(intptr_t a, intptr_t b)
 
 /* ----------------------------------- Operation processing methods ------------------------------------ */
 
-template<typename Props> void LargeObjectCacheImpl<Props>::CacheBin::CacheBinFunctor::
-    OperationPreprocessor::commitOperation(CacheBinOperation *op) const 
+template<typename Props> void CacheBinFunctor<Props>::
+    OperationPreprocessor::commitOperation(CacheBinOperation *op) const
 {
     FencedStore( (intptr_t&)(op->status), CBST_DONE );
 }
 
-template<typename Props> void LargeObjectCacheImpl<Props>::CacheBin::CacheBinFunctor::
+template<typename Props> void CacheBinFunctor<Props>::
     OperationPreprocessor::addOpToOpList(CacheBinOperation *op, CacheBinOperation **opList) const
 {
     op->next = *opList;
     *opList = op;
 }
 
-template<typename Props> bool LargeObjectCacheImpl<Props>::CacheBin::CacheBinFunctor::
+template<typename Props> bool CacheBinFunctor<Props>::
     OperationPreprocessor::getFromPutList(CacheBinOperation *opGet, uintptr_t currTime)
 {
     if ( head ) {
@@ -160,7 +234,7 @@ template<typename Props> bool LargeObjectCacheImpl<Props>::CacheBin::CacheBinFun
     return false;
 }
 
-template<typename Props> void LargeObjectCacheImpl<Props>::CacheBin::CacheBinFunctor::
+template<typename Props> void CacheBinFunctor<Props>::
     OperationPreprocessor::addToPutList(LargeMemoryBlock *h, LargeMemoryBlock *t, int num)
 {
     if ( head ) {
@@ -176,7 +250,7 @@ template<typename Props> void LargeObjectCacheImpl<Props>::CacheBin::CacheBinFun
     }
 }
 
-template<typename Props> void LargeObjectCacheImpl<Props>::CacheBin::CacheBinFunctor::
+template<typename Props> void CacheBinFunctor<Props>::
     OperationPreprocessor::operator()(CacheBinOperation* opList)
 {
     for ( CacheBinOperation *op = opList, *opNext; op; op = opNext ) {
@@ -232,8 +306,8 @@ template<typename Props> void LargeObjectCacheImpl<Props>::CacheBin::CacheBinFun
             }
             break;
 
-        case CBOP_DECR_USED_SIZE:
-            decrUsedSize += opCast<OpDecrUsedSize>(*op).size;
+        case CBOP_UPDATE_USED_SIZE:
+            updateUsedSize += opCast<OpUpdateUsedSize>(*op).size;
             commitOperation( op );
             break;
 
@@ -259,8 +333,7 @@ template<typename Props> void LargeObjectCacheImpl<Props>::CacheBin::CacheBinFun
     MALLOC_ASSERT( !( opGet && head ), "Not all put/get pairs are processed!" );
 }
 
-template<typename Props> void LargeObjectCacheImpl<Props>::CacheBin::
-    CacheBinFunctor::operator()(CacheBinOperation* opList)
+template<typename Props> void CacheBinFunctor<Props>::operator()(CacheBinOperation* opList)
 {
     MALLOC_ASSERT( opList, "Empty operation list is passed into operation handler." );
 
@@ -334,15 +407,15 @@ template<typename Props> void LargeObjectCacheImpl<Props>::CacheBin::
         }
     }
 
-    if ( size_t decrUsedSize = prep.decrUsedSize )
-        bin->updateUsedSize(-decrUsedSize, bitMask, idx);
+    if ( size_t size = prep.updateUsedSize )
+        bin->updateUsedSize(size, bitMask, idx);
 }
 /* ----------------------------------------------------------------------------------------------------- */
 /* --------------------------- Methods for creating and executing operations --------------------------- */
 template<typename Props> void LargeObjectCacheImpl<Props>::
     CacheBin::ExecuteOperation(CacheBinOperation *op, ExtMemoryPool *extMemPool, BinBitMask *bitMask, int idx, bool longLifeTime)
 {
-    CacheBinFunctor func( this, extMemPool, bitMask, idx );
+    CacheBinFunctor<Props> func( this, extMemPool, bitMask, idx );
     aggregator.execute( op, func, longLifeTime );
 
     if (  LargeMemoryBlock *toRelease = func.getToRelease() )
@@ -419,8 +492,8 @@ template<typename Props> bool LargeObjectCacheImpl<Props>::
 }
 
 template<typename Props> void LargeObjectCacheImpl<Props>::
-    CacheBin::decrUsedSize(ExtMemoryPool *extMemPool, size_t size, BinBitMask *bitMask, int idx) {
-    OpDecrUsedSize data = {size};
+    CacheBin::updateUsedSize(ExtMemoryPool *extMemPool, size_t size, BinBitMask *bitMask, int idx) {
+    OpUpdateUsedSize data = {size};
     CacheBinOperation op(data);
     ExecuteOperation( &op, extMemPool, bitMask, idx );
 }
@@ -432,6 +505,7 @@ template<typename Props> LargeMemoryBlock *LargeObjectCacheImpl<Props>::
     size_t size = head->unalignedSize;
     usedSize -= num*size;
     MALLOC_ASSERT( !last || (last->age != 0 && last->age != -1U), ASSERT_TEXT );
+    MALLOC_ASSERT( (tail==head && num==1) || (tail!=head && num>1), ASSERT_TEXT );
     LargeMemoryBlock *toRelease = NULL;
     if (!lastCleanedAge) {
         // 1st object of such size was released.
@@ -448,6 +522,7 @@ template<typename Props> LargeMemoryBlock *LargeObjectCacheImpl<Props>::
     }
     if (num) {
         // add [head;tail] list to cache
+        MALLOC_ASSERT( tail, ASSERT_TEXT );
         tail->next = first;
         if (first)
             first->prev = tail;
@@ -705,11 +780,11 @@ LargeMemoryBlock *LargeObjectCacheImpl<Props>::get(ExtMemoryPool *extMemoryPool,
 }
 
 template<typename Props>
-void LargeObjectCacheImpl<Props>::rollbackCacheState(ExtMemoryPool *extMemPool, size_t size)
+void LargeObjectCacheImpl<Props>::updateCacheState(ExtMemoryPool *extMemPool, DecreaseOrIncrease op, size_t size)
 {
     int idx = sizeToIdx(size);
     MALLOC_ASSERT(idx<numBins, ASSERT_TEXT);
-    bin[idx].decrUsedSize(extMemPool, size, &bitMask, idx);
+    bin[idx].updateUsedSize(extMemPool, op==decrease? -size : size, &bitMask, idx);
 }
 
 #if __TBB_MALLOC_LOCACHE_STAT
@@ -726,6 +801,7 @@ void LargeObjectCache::reportStat(FILE *f)
 {
     largeCache.reportStat(f);
     hugeCache.reportStat(f);
+    fprintf(f, "cache time %lu\n", cacheCurrTime);
 }
 #endif
 
@@ -738,12 +814,18 @@ void LargeObjectCacheImpl<Props>::putList(ExtMemoryPool *extMemPool, LargeMemory
     bin[toBinIdx].putList(extMemPool, toCache, &bitMask, toBinIdx);
 }
 
-void LargeObjectCache::rollbackCacheState(size_t size)
+void LargeObjectCache::updateCacheState(DecreaseOrIncrease op, size_t size)
 {
     if (size < maxLargeSize)
-        largeCache.rollbackCacheState(extMemPool, size);
+        largeCache.updateCacheState(extMemPool, op, size);
     else if (size < maxHugeSize)
-        hugeCache.rollbackCacheState(extMemPool, size);
+        hugeCache.updateCacheState(extMemPool, op, size);
+}
+
+void LargeObjectCache::registerRealloc(size_t oldSize, size_t newSize)
+{
+    updateCacheState(decrease, oldSize);
+    updateCacheState(increase, newSize);
 }
 
 // return artificial bin index, it's used only during sorting and never saved
@@ -817,8 +899,7 @@ LargeMemoryBlock *LargeObjectCache::get(size_t size)
     return NULL;
 }
 
-
-LargeMemoryBlock *ExtMemoryPool::mallocLargeObject(size_t allocationSize)
+LargeMemoryBlock *ExtMemoryPool::mallocLargeObject(MemoryPool *pool, size_t allocationSize)
 {
 #if __TBB_MALLOC_LOCACHE_STAT
     AtomicIncrement(mallocCalls);
@@ -834,10 +915,11 @@ LargeMemoryBlock *ExtMemoryPool::mallocLargeObject(size_t allocationSize)
         lmb = backend.getLargeBlock(allocationSize);
         if (!lmb) {
             removeBackRef(backRefIdx);
-            loc.rollbackCacheState(allocationSize);
+            loc.updateCacheState(decrease, allocationSize);
             return NULL;
         }
         lmb->backRefIdx = backRefIdx;
+        lmb->pool = pool;
         STAT_increment(getThreadId(), ThreadCommonCounters, allocNewLargeObj);
     } else {
 #if __TBB_MALLOC_LOCACHE_STAT
@@ -868,11 +950,24 @@ bool ExtMemoryPool::hardCachesCleanup()
     // thread-local caches must be cleaned before LOC,
     // because object from thread-local cache can be released to LOC
     bool ret = releaseAllLocalCaches();
+    ret |= orphanedBlocks.cleanup(&backend);
     ret |= loc.cleanAll();
     ret |= backend.clean();
     return ret;
 }
 
+#if BACKEND_HAS_MREMAP
+void *ExtMemoryPool::remap(void *ptr, size_t oldSize, size_t newSize, size_t alignment)
+{
+    const size_t oldUnalignedSize = ((LargeObjectHdr*)ptr - 1)->memoryBlock->unalignedSize;
+    void *o = backend.remap(ptr, oldSize, newSize, alignment);
+    if (o) {
+        LargeMemoryBlock *lmb = ((LargeObjectHdr*)o - 1)->memoryBlock;
+        loc.registerRealloc(lmb->unalignedSize, oldUnalignedSize);
+    }
+    return o;
+}
+#endif /* BACKEND_HAS_MREMAP */
 
 /*********** End allocation of large objects **********/
 
diff --git a/src/tbbmalloc/lin32-proxy-export.def b/src/tbbmalloc/lin32-proxy-export.def
index 01574ac..b3e2849 100644
--- a/src/tbbmalloc/lin32-proxy-export.def
+++ b/src/tbbmalloc/lin32-proxy-export.def
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 {
@@ -26,6 +26,7 @@ malloc;
 realloc;
 posix_memalign;
 memalign;
+aligned_alloc;
 valloc;
 pvalloc;
 mallinfo;
diff --git a/src/tbbmalloc/lin32-tbbmalloc-export.def b/src/tbbmalloc/lin32-tbbmalloc-export.def
index ad8bc42..33eff0f 100644
--- a/src/tbbmalloc/lin32-tbbmalloc-export.def
+++ b/src/tbbmalloc/lin32-tbbmalloc-export.def
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 {
@@ -48,6 +48,7 @@ _ZN3rml9pool_freeEPNS_10MemoryPoolEPv;
 _ZN3rml12pool_reallocEPNS_10MemoryPoolEPvj;
 _ZN3rml20pool_aligned_reallocEPNS_10MemoryPoolEPvjj;
 _ZN3rml19pool_aligned_mallocEPNS_10MemoryPoolEjj;
+_ZN3rml13pool_identifyEPv;
 
 local:
 
diff --git a/src/tbbmalloc/lin64-proxy-export.def b/src/tbbmalloc/lin64-proxy-export.def
index acbe8a2..12d8d43 100644
--- a/src/tbbmalloc/lin64-proxy-export.def
+++ b/src/tbbmalloc/lin64-proxy-export.def
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 {
@@ -26,6 +26,7 @@ malloc;
 realloc;
 posix_memalign;
 memalign;
+aligned_alloc;
 valloc;
 pvalloc;
 mallinfo;
diff --git a/src/tbbmalloc/lin64-tbbmalloc-export.def b/src/tbbmalloc/lin64-tbbmalloc-export.def
index 6108d08..a57c933 100644
--- a/src/tbbmalloc/lin64-tbbmalloc-export.def
+++ b/src/tbbmalloc/lin64-tbbmalloc-export.def
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 {
@@ -48,6 +48,7 @@ _ZN3rml9pool_freeEPNS_10MemoryPoolEPv;
 _ZN3rml12pool_reallocEPNS_10MemoryPoolEPvm;
 _ZN3rml20pool_aligned_reallocEPNS_10MemoryPoolEPvmm;
 _ZN3rml19pool_aligned_mallocEPNS_10MemoryPoolEmm;
+_ZN3rml13pool_identifyEPv;
 
 local:
 
diff --git a/src/tbbmalloc/lin64ipf-proxy-export.def b/src/tbbmalloc/lin64ipf-proxy-export.def
index acbe8a2..12d8d43 100644
--- a/src/tbbmalloc/lin64ipf-proxy-export.def
+++ b/src/tbbmalloc/lin64ipf-proxy-export.def
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 {
@@ -26,6 +26,7 @@ malloc;
 realloc;
 posix_memalign;
 memalign;
+aligned_alloc;
 valloc;
 pvalloc;
 mallinfo;
diff --git a/src/tbbmalloc/lin64ipf-tbbmalloc-export.def b/src/tbbmalloc/lin64ipf-tbbmalloc-export.def
index 6108d08..a57c933 100644
--- a/src/tbbmalloc/lin64ipf-tbbmalloc-export.def
+++ b/src/tbbmalloc/lin64ipf-tbbmalloc-export.def
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 {
@@ -48,6 +48,7 @@ _ZN3rml9pool_freeEPNS_10MemoryPoolEPv;
 _ZN3rml12pool_reallocEPNS_10MemoryPoolEPvm;
 _ZN3rml20pool_aligned_reallocEPNS_10MemoryPoolEPvmm;
 _ZN3rml19pool_aligned_mallocEPNS_10MemoryPoolEmm;
+_ZN3rml13pool_identifyEPv;
 
 local:
 
diff --git a/src/tbbmalloc/mac32-tbbmalloc-export.def b/src/tbbmalloc/mac32-tbbmalloc-export.def
index 3b16313..71cc107 100644
--- a/src/tbbmalloc/mac32-tbbmalloc-export.def
+++ b/src/tbbmalloc/mac32-tbbmalloc-export.def
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 _scalable_calloc
@@ -45,3 +45,4 @@ __ZN3rml9pool_freeEPNS_10MemoryPoolEPv
 __ZN3rml12pool_reallocEPNS_10MemoryPoolEPvm
 __ZN3rml20pool_aligned_reallocEPNS_10MemoryPoolEPvmm
 __ZN3rml19pool_aligned_mallocEPNS_10MemoryPoolEmm
+__ZN3rml13pool_identifyEPv
diff --git a/src/tbbmalloc/mac64-tbbmalloc-export.def b/src/tbbmalloc/mac64-tbbmalloc-export.def
index 3b16313..71cc107 100644
--- a/src/tbbmalloc/mac64-tbbmalloc-export.def
+++ b/src/tbbmalloc/mac64-tbbmalloc-export.def
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 _scalable_calloc
@@ -45,3 +45,4 @@ __ZN3rml9pool_freeEPNS_10MemoryPoolEPv
 __ZN3rml12pool_reallocEPNS_10MemoryPoolEPvm
 __ZN3rml20pool_aligned_reallocEPNS_10MemoryPoolEPvmm
 __ZN3rml19pool_aligned_mallocEPNS_10MemoryPoolEmm
+__ZN3rml13pool_identifyEPv
diff --git a/src/tbbmalloc/proxy.cpp b/src/tbbmalloc/proxy.cpp
index c2fbc7f..5ef279d 100644
--- a/src/tbbmalloc/proxy.cpp
+++ b/src/tbbmalloc/proxy.cpp
@@ -1,27 +1,27 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "proxy.h"
 #include "tbb/tbb_config.h"
 
-#if !defined(__EXCEPTIONS) && !defined(_CPPUNWIND) && !defined(__SUNPRO_CC) || defined(_XBOX)
+#if !defined(__EXCEPTIONS) && !defined(_CPPUNWIND) && !defined(__SUNPRO_CC)
     #if TBB_USE_EXCEPTIONS
         #error Compilation settings do not support exception handling. Please do not set TBB_USE_EXCEPTIONS macro or set it to 0.
     #elif !defined(TBB_USE_EXCEPTIONS)
@@ -199,6 +199,8 @@ struct mallinfo mallinfo() __THROW
 // under Android.
 size_t dlmalloc_usable_size(const void *ptr) __attribute__ ((alias ("malloc_usable_size")));
 #else // __ANDROID__
+// C11 function, supported starting GLIBC 2.16
+void *aligned_alloc(size_t alignment, size_t size) __attribute__ ((alias ("memalign")));
 // Those non-standard functions are exported by GLIBC, and might be used
 // in conjunction with standard malloc/free, so we must ovberload them.
 // Bionic doesn't have them. Not removing from the linker scripts,
@@ -305,6 +307,12 @@ void __TBB_malloc_safer_free_##CRTLIB(void *ptr)
     __TBB_malloc_safer_free( ptr, orig_free_##CRTLIB );                                              \
 }                                                                                                    \
                                                                                                      \
+void (*orig__aligned_free_##CRTLIB)(void*);                                                          \
+void __TBB_malloc_safer__aligned_free_##CRTLIB(void *ptr)                                            \
+{                                                                                                    \
+    __TBB_malloc_safer_free( ptr, orig__aligned_free_##CRTLIB );                                     \
+}                                                                                                    \
+                                                                                                     \
 size_t (*orig__msize_##CRTLIB)(void*);                                                               \
 size_t __TBB_malloc_safer__msize_##CRTLIB(void *ptr)                                                 \
 {                                                                                                    \
@@ -325,52 +333,76 @@ void* __TBB_malloc_safer_realloc_##CRTLIB( void *ptr, size_t size )
                                                                                                      \
 void* __TBB_malloc_safer__aligned_realloc_##CRTLIB( void *ptr, size_t size, size_t aligment )        \
 {                                                                                                    \
-    orig_ptrs func_ptrs = {orig_free_##CRTLIB, orig__msize_##CRTLIB};                                \
+    orig_aligned_ptrs func_ptrs = {orig__aligned_free_##CRTLIB, orig__aligned_msize_##CRTLIB};       \
     return __TBB_malloc_safer_aligned_realloc( ptr, size, aligment, &func_ptrs );                    \
 }
 
-// limit is 30 bytes/60 symbols per line
+// Limit is 30 bytes/60 symbols per line, * can be used to match any digit in bytecodes.
+// Purpose of the pattern is to mark an instruction bound, it should consist of several
+// full instructions plus one more byte. It's not required for the patterns to be unique
+// (i.e., it's OK to have same pattern for unrelated functions).
+// TODO: use hot patch prologues if exist
 const char* known_bytecodes[] = {
 #if _WIN64
-    "4883EC284885C974",       //release free() win64
-    "4883EC384885C975",       //release msize() win64
-    "4885C974375348",         //release free() 8.0.50727.42 win64
-    "48894C24084883EC28BA",   //debug prologue for win64
-    "4C8BC1488B0DA6E4040033", //win64 SDK
-    "4883EC284885C975",       //release msize() 10.0.21003.1 win64
-    "48895C2408574883EC20",   //release _aligned_msize() win64
-    "4C894424184889542410",   //debug _aligned_msize() win64
-#else
-    "558BEC6A018B",           //debug free() & _msize() 8.0.50727.4053 win32
-    "6A1868********E8",       //release free() 8.0.50727.4053 win32
-    "6A1C68********E8",       //release _msize() 8.0.50727.4053 win32
-    "558BEC837D08000F",       //release _msize() 11.0.51106.1 win32
-    "8BFF558BEC6A",           //debug free() & _msize() 9.0.21022.8 win32
-    "8BFF558BEC83",           //debug free() & _msize() 10.0.21003.1 win32
-    "8BFF558BEC8B4508",       //release _aligned_msize() 10.0 win32
-    "8BFF558BEC8B4510",       //debug _aligned_msize() 10.0 win32
-    "558BEC8B451050",         //debug _aligned_msize() 11.0 win32
-#endif
+    "4883EC284885C974",       // release free()
+    "4883EC284885C975",       // release _msize()
+    "4885C974375348",         // release free() 8.0.50727.42, 10.0
+    "E907000000CCCC",         // release _aligned_msize(), _aligned_free() ucrtbase.dll
+    "C7442410000000008B",     // release free() ucrtbase.dll 10.0.14393.33
+    "E90B000000CCCC",         // release _msize() ucrtbase.dll 10.0.14393.33
+    "48895C24085748",         // release _aligned_msize() ucrtbase.dll 10.0.14393.33
+    "48894C24084883EC28BA",   // debug prologue
+    "4C894424184889542410",   // debug _aligned_msize() 10.0
+    "48894C24084883EC2848",   // debug _aligned_free 10.0
+ #if __TBB_OVERLOAD_OLD_MSVCR
+    "48895C2408574883EC3049", // release _aligned_msize 9.0
+    "4883EC384885C975",       // release _msize() 9.0
+    "4C8BC1488B0DA6E4040033", // an old win64 SDK
+ #endif
+#else // _WIN32
+    "8BFF558BEC8B",           // multiple
+    "8BFF558BEC83",           // release free() & _msize() 10.0.40219.325, _msize() ucrtbase.dll
+    "8BFF558BECFF",           // release _aligned_msize ucrtbase.dll
+    "8BFF558BEC51",           // release free() & _msize() ucrtbase.dll 10.0.14393.33
+    "558BEC8B450885C074",     // release _aligned_free 11.0
+    "558BEC837D08000F",       // release _msize() 11.0.51106.1
+    "558BEC837D08007419FF",   // release free() 11.0.50727.1
+    "558BEC8B450885C075",     // release _aligned_msize() 11.0.50727.1
+    "558BEC6A018B",           // debug free() & _msize() 11.0
+    "558BEC8B451050",         // debug _aligned_msize() 11.0
+    "558BEC8B450850",         // debug _aligned_free 11.0
+    "8BFF558BEC6A",           // debug free() & _msize() 10.0.40219.325
+ #if __TBB_OVERLOAD_OLD_MSVCR
+    "6A1868********E8",       // release free() 8.0.50727.4053, 9.0
+    "6A1C68********E8",       // release _msize() 8.0.50727.4053, 9.0
+ #endif
+#endif // _WIN64/_WIN32
     NULL
     };
 
-#define __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY(CRT_VER,function_name,dbg_modifier)                                                                         \
-    ReplaceFunctionWithStore( #CRT_VER #dbg_modifier ".dll", #function_name, (FUNCPTR)__TBB_malloc_safer_##function_name##_##CRT_VER##dbg_modifier, known_bytecodes, (FUNCPTR*)&orig_##function_name##_##CRT_VER##dbg_modifier );
-
-#define __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY_NO_FALLBACK(CRT_VER,function_name,dbg_modifier)                                                             \
-    ReplaceFunctionWithStore( #CRT_VER #dbg_modifier ".dll", #function_name, (FUNCPTR)__TBB_malloc_safer_##function_name##_##CRT_VER##dbg_modifier, 0, NULL );
-
-#define __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY_REDIRECT(CRT_VER,function_name,dest_func,dbg_modifier)                                                      \
-    ReplaceFunctionWithStore( #CRT_VER #dbg_modifier ".dll", #function_name, (FUNCPTR)__TBB_malloc_safer_##dest_func##_##CRT_VER##dbg_modifier, 0, NULL );
-
-
-#define __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_IMPL(CRT_VER,dbg_modifier)                           \
-    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY(CRT_VER,free,dbg_modifier)                         \
-    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY(CRT_VER,_msize,dbg_modifier)                       \
-    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY_NO_FALLBACK(CRT_VER,realloc,dbg_modifier)          \
-    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY_REDIRECT(CRT_VER,_aligned_free,free,dbg_modifier)  \
-    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY_NO_FALLBACK(CRT_VER,_aligned_realloc,dbg_modifier) \
-    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY(CRT_VER,_aligned_msize,dbg_modifier)
+#define __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY(CRT_VER,function_name,dbgsuffix) \
+    ReplaceFunctionWithStore( #CRT_VER #dbgsuffix ".dll", #function_name, \
+      (FUNCPTR)__TBB_malloc_safer_##function_name##_##CRT_VER##dbgsuffix, \
+      known_bytecodes, (FUNCPTR*)&orig_##function_name##_##CRT_VER##dbgsuffix );
+
+#define __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY_NO_FALLBACK(CRT_VER,function_name,dbgsuffix) \
+    ReplaceFunctionWithStore( #CRT_VER #dbgsuffix ".dll", #function_name, \
+      (FUNCPTR)__TBB_malloc_safer_##function_name##_##CRT_VER##dbgsuffix, 0, NULL );
+
+#define __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY_REDIRECT(CRT_VER,function_name,dest_func,dbgsuffix) \
+    ReplaceFunctionWithStore( #CRT_VER #dbgsuffix ".dll", #function_name, \
+      (FUNCPTR)__TBB_malloc_safer_##dest_func##_##CRT_VER##dbgsuffix, 0, NULL );
+
+#define __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_IMPL(CRT_VER,dbgsuffix)                             \
+    if (BytecodesAreKnown(#CRT_VER #dbgsuffix ".dll")) {                                          \
+      __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY(CRT_VER,free,dbgsuffix)                         \
+      __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY(CRT_VER,_msize,dbgsuffix)                       \
+      __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY_NO_FALLBACK(CRT_VER,realloc,dbgsuffix)          \
+      __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY(CRT_VER,_aligned_free,dbgsuffix)                \
+      __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY(CRT_VER,_aligned_msize,dbgsuffix)               \
+      __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY_NO_FALLBACK(CRT_VER,_aligned_realloc,dbgsuffix) \
+    } else                                                                                        \
+        SkipReplacement(#CRT_VER #dbgsuffix ".dll");
 
 #define __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_RELEASE(CRT_VER) __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_IMPL(CRT_VER,)
 #define __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_DEBUG(CRT_VER) __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_IMPL(CRT_VER,d)
@@ -379,6 +411,7 @@ const char* known_bytecodes[] = {
     __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_RELEASE(CRT_VER) \
     __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_DEBUG(CRT_VER)
 
+#if __TBB_OVERLOAD_OLD_MSVCR
 __TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr70d);
 __TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr70);
 __TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr71d);
@@ -387,6 +420,7 @@ __TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr80d);
 __TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr80);
 __TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr90d);
 __TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr90);
+#endif
 __TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr100d);
 __TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr100);
 __TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr110d);
@@ -438,26 +472,34 @@ void operator_delete_arr_t(void* ptr, const std::nothrow_t&) throw() {
     __TBB_malloc_safer_delete(ptr);
 }
 
-const char* modules_to_replace[] = {
-    "msvcr80d.dll",
-    "msvcr80.dll",
-    "msvcr90d.dll",
-    "msvcr90.dll",
-    "msvcr100d.dll",
-    "msvcr100.dll",
-    "msvcr110d.dll",
-    "msvcr110.dll",
-    "msvcr120d.dll",
-    "msvcr120.dll",
-//    "ucrtbase.dll",
-    "msvcr70d.dll",
-    "msvcr70.dll",
-    "msvcr71d.dll",
-    "msvcr71.dll",
+struct Module {
+    const char *name;
+    bool        doFuncReplacement; // do replacement in the DLL
+};
+
+Module modules_to_replace[] = {
+    {"msvcr100d.dll", true},
+    {"msvcr100.dll", true},
+    {"msvcr110d.dll", true},
+    {"msvcr110.dll", true},
+    {"msvcr120d.dll", true},
+    {"msvcr120.dll", true},
+    {"ucrtbase.dll", true},
+//    "ucrtbased.dll" is not supported because of problems with _dbg functions
+#if __TBB_OVERLOAD_OLD_MSVCR
+    {"msvcr90d.dll", true},
+    {"msvcr90.dll", true},
+    {"msvcr80d.dll", true},
+    {"msvcr80.dll", true},
+    {"msvcr70d.dll", true},
+    {"msvcr70.dll", true},
+    {"msvcr71d.dll", true},
+    {"msvcr71.dll", true},
+#endif
 #if __TBB_TODO
     // TODO: Try enabling replacement for non-versioned system binaries below
-    "msvcrtd.dll",
-    "msvcrt.dll",
+    {"msvcrtd.dll", true},
+    {"msvcrt.dll", true},
 #endif
     };
 
@@ -484,6 +526,7 @@ free
 _msize
 _aligned_realloc
 _aligned_free
+_aligned_msize
 */
 
 typedef struct FRData_t {
@@ -518,42 +561,88 @@ FRDATA cxx_routines_to_replace[] = {
 
 #ifndef UNICODE
 typedef char unicode_char_t;
+#define WCHAR_SPEC "%s"
 #else
 typedef wchar_t unicode_char_t;
+#define WCHAR_SPEC "%ls"
+#endif
+
+// Check that we recognize bytecodes that should be replaced by trampolines.
+// If some functions have unknown prologue patterns, replacement should not be done.
+bool BytecodesAreKnown(const unicode_char_t *dllName)
+{
+    const char *funcName[] = {"free", "_msize", "_aligned_free", "_aligned_msize", 0};
+    HMODULE module = GetModuleHandle(dllName);
+
+    if (!module)
+        return false;
+    for (int i=0; funcName[i]; i++)
+        if (! IsPrologueKnown(module, funcName[i], known_bytecodes)) {
+            fprintf(stderr, "TBBmalloc: skip allocation functions replacement in " WCHAR_SPEC
+                    ": unknown prologue for function " WCHAR_SPEC "\n", dllName, funcName[i]);
+            return false;
+        }
+    return true;
+}
+
+void SkipReplacement(const unicode_char_t *dllName)
+{
+#ifndef UNICODE
+    const char *dllStr = dllName;
+#else
+    const size_t sz = 128; // all DLL name must fit
+
+    char buffer[sz];
+    size_t real_sz;
+    char *dllStr = buffer;
+
+    errno_t ret = wcstombs_s(&real_sz, dllStr, sz, dllName, sz-1);
+    __TBB_ASSERT(!ret, "Dll name conversion failed")
 #endif
 
+    for (size_t i=0; i<arrayLength(modules_to_replace); i++)
+        if (!strcmp(modules_to_replace[i].name, dllStr)) {
+            modules_to_replace[i].doFuncReplacement = false;
+            break;
+        }
+}
+
 void ReplaceFunctionWithStore( const unicode_char_t *dllName, const char *funcName, FUNCPTR newFunc, const char ** opcodes, FUNCPTR* origFunc,  FRR_ON_ERROR on_error = FRR_FAIL )
 {
-    FRR_TYPE type = ReplaceFunction( dllName, funcName, newFunc, opcodes, origFunc );
-    if (type == FRR_NODLL) return;
-    if (type != FRR_OK && on_error == FRR_FAIL)
-    {
-        fprintf(stderr, "Failed to replace function %s in module %s\n",
-                funcName, dllName);
-        exit(1);
-    }
+    FRR_TYPE res = ReplaceFunction( dllName, funcName, newFunc, opcodes, origFunc );
+
+    if (res == FRR_OK || res == FRR_NODLL || (res == FRR_NOFUNC && on_error == FRR_IGNORE))
+        return;
+
+    fprintf(stderr, "Failed to %s function %s in module %s\n",
+            res==FRR_NOFUNC? "find" : "replace", funcName, dllName);
+    exit(1);
 }
 
 void doMallocReplacement()
 {
     // Replace functions and keep backup of original code (separate for each runtime)
+#if __TBB_OVERLOAD_OLD_MSVCR
     __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(msvcr70)
     __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(msvcr71)
     __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(msvcr80)
     __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(msvcr90)
+#endif
     __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(msvcr100)
     __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(msvcr110)
     __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(msvcr120)
-//    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_RELEASE(ucrtbase)
+    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_RELEASE(ucrtbase)
 
     // Replace functions without storing original code
     for (size_t j = 0; j < arrayLength(modules_to_replace); j++) {
+        if (!modules_to_replace[j].doFuncReplacement)
+            continue;
         for (size_t i = 0; i < arrayLength(c_routines_to_replace); i++)
         {
-            ReplaceFunctionWithStore( modules_to_replace[j], c_routines_to_replace[i]._func, c_routines_to_replace[i]._fptr, NULL, NULL,  c_routines_to_replace[i]._on_error );
+            ReplaceFunctionWithStore( modules_to_replace[j].name, c_routines_to_replace[i]._func, c_routines_to_replace[i]._fptr, NULL, NULL,  c_routines_to_replace[i]._on_error );
         }
-        // in in Microsoft* Visual Studio* 2015 new runtime library does not export operator new/delete anymore.
-        if ( strcmp(modules_to_replace[j], "ucrtbase.dll") == 0 ){
+        // ucrtbase.dll does not export operator new/delete.
+        if ( strcmp(modules_to_replace[j].name, "ucrtbase.dll") == 0 ){
             continue;
         }
 
@@ -562,12 +651,12 @@ void doMallocReplacement()
 #if !_WIN64
             // in Microsoft* Visual Studio* 2012 and 2013 32-bit operator delete consists of 2 bytes only: short jump to free(ptr);
             // replacement should be skipped for this particular case.
-            if ( ((strcmp(modules_to_replace[j], "msvcr110.dll") == 0) || (strcmp(modules_to_replace[j], "msvcr120.dll") == 0)) && (strcmp(cxx_routines_to_replace[i]._func, "??3 at YAXPAX@Z") == 0) ) continue;
+            if ( ((strcmp(modules_to_replace[j].name, "msvcr110.dll") == 0) || (strcmp(modules_to_replace[j].name, "msvcr120.dll") == 0)) && (strcmp(cxx_routines_to_replace[i]._func, "??3 at YAXPAX@Z") == 0) ) continue;
             // in Microsoft* Visual Studio* 2013 32-bit operator delete[] consists of 2 bytes only: short jump to free(ptr);
             // replacement should be skipped for this particular case.
-            if ( (strcmp(modules_to_replace[j], "msvcr120.dll") == 0) && (strcmp(cxx_routines_to_replace[i]._func, "??_V at YAXPAX@Z") == 0) ) continue;
+            if ( (strcmp(modules_to_replace[j].name, "msvcr120.dll") == 0) && (strcmp(cxx_routines_to_replace[i]._func, "??_V at YAXPAX@Z") == 0) ) continue;
 #endif
-            ReplaceFunctionWithStore( modules_to_replace[j], cxx_routines_to_replace[i]._func, cxx_routines_to_replace[i]._fptr, NULL, NULL,  cxx_routines_to_replace[i]._on_error );
+            ReplaceFunctionWithStore( modules_to_replace[j].name, cxx_routines_to_replace[i]._func, cxx_routines_to_replace[i]._fptr, NULL, NULL,  cxx_routines_to_replace[i]._on_error );
         }
     }
 }
diff --git a/src/tbbmalloc/proxy.h b/src/tbbmalloc/proxy.h
index 781cadc..8db526c 100644
--- a/src/tbbmalloc/proxy.h
+++ b/src/tbbmalloc/proxy.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef _TBB_malloc_proxy_H_
@@ -54,8 +54,13 @@ extern "C" {
 
 // Struct with original free() and _msize() pointers
 struct orig_ptrs {
-    void   (*orig_free) (void*);  
-    size_t (*orig_msize)(void*); 
+    void   (*free) (void*);
+    size_t (*msize)(void*);
+};
+
+struct orig_aligned_ptrs {
+    void   (*aligned_free) (void*);
+    size_t (*aligned_msize)(void*,size_t,size_t);
 };
 
 #endif /* _TBB_malloc_proxy_H_ */
diff --git a/src/tbbmalloc/proxy_overload_osx.h b/src/tbbmalloc/proxy_overload_osx.h
index d4f828a..53afe13 100644
--- a/src/tbbmalloc/proxy_overload_osx.h
+++ b/src/tbbmalloc/proxy_overload_osx.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // The original source for this code is
@@ -50,6 +50,8 @@
 
 #include <AvailabilityMacros.h>
 #include <malloc/malloc.h>
+#include <mach/mach.h>
+#include <stdlib.h>
 
 static kern_return_t enumerator(task_t, void *, unsigned, vm_address_t,
                                 memory_reader_t, vm_range_recorder_t)
@@ -95,7 +97,7 @@ static void impl_zone_destroy(struct _malloc_zone_t *) {}
 /* note: impl_malloc_usable_size() is called for each free() call, so it must be fast */
 static size_t impl_malloc_usable_size(struct _malloc_zone_t *, const void *ptr)
 {
-    // malloc_usable_size() is used by OS X to recognize which memory manager
+    // malloc_usable_size() is used by macOS* to recognize which memory manager
     // allocated the address, so our wrapper must not redirect to the original function.
     return __TBB_malloc_safer_msize(const_cast<void*>(ptr), NULL);
 }
@@ -119,7 +121,7 @@ static size_t impl_pressure_relief(struct _malloc_zone_t *, size_t goal)
     return 0;
 }
 
-static malloc_zone_t *system_zone;
+static malloc_zone_t *system_zone = NULL;
 
 struct DoMallocReplacement {
     DoMallocReplacement() {
@@ -157,11 +159,30 @@ struct DoMallocReplacement {
 
         // make sure that default purgeable zone is initialized
         malloc_default_purgeable_zone();
-        // after unregistration of system zone, our zone became default
+        void* ptr = malloc(1);
+        // get all registered memory zones
+        unsigned zcount = 0;
+        malloc_zone_t** zone_array = NULL;
+        kern_return_t errorcode = malloc_get_all_zones(mach_task_self(),NULL,(vm_address_t**)&zone_array,&zcount);
+        if (!errorcode && zone_array && zcount>0) {
+            // find the zone that allocated ptr
+            for (unsigned i=0; i<zcount; ++i) {
+                malloc_zone_t* z = zone_array[i];
+                if (z && z->size(z,ptr)>0) { // the right one is found
+                    system_zone = z;
+                    break;
+                }
+            }
+        }
+        free(ptr);
+
         malloc_zone_register(&zone);
-        system_zone = malloc_default_zone();
-        malloc_zone_unregister(system_zone);
-        malloc_zone_register(system_zone);
+        if (system_zone) {
+            // after unregistration of the system zone, the last registered (i.e. our) zone becomes the default
+            malloc_zone_unregister(system_zone);
+            // register the system zone back
+            malloc_zone_register(system_zone);
+        }
     }
 };
 
diff --git a/src/tbbmalloc/shared_utils.h b/src/tbbmalloc/shared_utils.h
index 55e0b44..273559d 100644
--- a/src/tbbmalloc/shared_utils.h
+++ b/src/tbbmalloc/shared_utils.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_shared_utils_H
diff --git a/src/tbbmalloc/tbb_function_replacement.cpp b/src/tbbmalloc/tbb_function_replacement.cpp
index c5e0b74..b015785 100644
--- a/src/tbbmalloc/tbb_function_replacement.cpp
+++ b/src/tbbmalloc/tbb_function_replacement.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/tbb_config.h"
@@ -190,14 +190,13 @@ size_t compareStrings( const char *str1, const char *str2 )
    return str1Length;
 }
 
-// Check function prologue with know prologues from the dictionary
+// Check function prologue with known prologues from the dictionary
 // opcodes - dictionary
 // inpAddr - pointer to function prologue
 // Dictionary contains opcodes for several full asm instructions
 // + one opcode byte for the next asm instruction for safe address processing
-// RETURN: number of bytes for safe bytes replacement
-// (matched_pattern/2-1)
-UINT CheckOpcodes( const char ** opcodes, void *inpAddr )
+// RETURN: number of bytes for safe bytes replacement (matched_pattern/2-1)
+UINT CheckOpcodes( const char ** opcodes, void *inpAddr, bool abortOnError )
 {
     static size_t opcodesStringsCount = 0;
     static size_t maxOpcodesLength = 0;
@@ -230,10 +229,11 @@ UINT CheckOpcodes( const char ** opcodes, void *inpAddr )
         if( result )
             return (UINT)(result/2-1);
     }
-    // TODO: to add more stuff to patterns
-    __TBB_ASSERT( false, "CheckOpcodes failed" );
-
-    // No matches found just do not store original calls
+    if (abortOnError) {
+        // Impossibility to find opcodes in the dictionary is a serious issue,
+        // as if we unable to call original function, leak or crash is expected result.
+        __TBB_ASSERT_RELEASE( false, "CheckOpcodes failed" );
+    }
     return 0;
 }
 
@@ -252,10 +252,15 @@ static DWORD InsertTrampoline32(void *inpAddr, void *targetAddr, const char ** o
     UINT offset32;
     UCHAR *codePtr = (UCHAR *)inpAddr;
 
-    // If requested, store original function code
-    if ( storedAddr ){
-        opcodesNumber = CheckOpcodes( opcodes, inpAddr );
-        if( opcodesNumber >= SIZE_OF_RELJUMP ){
+    if ( storedAddr ){ // If requested, store original function code
+        if ( *codePtr == 0xE9 ){ // JMP relative instruction
+            // For the special case when a system function consists of a single near jump,
+            // instead of moving it somewhere we use the target of the jump as the original function.
+            unsigned offsetInJmp = *(unsigned*)(codePtr + 1);
+            *storedAddr = (void*)(srcAddr + offsetInJmp + SIZE_OF_RELJUMP);
+        }else{
+            opcodesNumber = CheckOpcodes( opcodes, inpAddr, /*abortOnError=*/true );
+            __TBB_ASSERT_RELEASE( opcodesNumber >= SIZE_OF_RELJUMP, "Incorrect bytecode pattern?" );
             UINT_PTR strdAddr = memProvider.GetLocation(srcAddr);
             if (!strdAddr)
                 return 0;
@@ -270,9 +275,6 @@ static DWORD InsertTrampoline32(void *inpAddr, void *targetAddr, const char ** o
             offset32 = (UINT)((offset & 0xFFFFFFFF));
             *((UCHAR*)*storedAddr+opcodesNumber) = 0xE9;
             memcpy(((UCHAR*)*storedAddr+opcodesNumber+1), &offset32, sizeof(offset32));
-        }else{
-            // No matches found just do not store original calls
-            *storedAddr = NULL;
         }
     }
 
@@ -317,10 +319,15 @@ static DWORD InsertTrampoline64(void *inpAddr, void *targetAddr, const char ** o
     UINT_PTR *locPtr = (UINT_PTR *)Addrint2Ptr(location);
     *locPtr = tgtAddr;
 
-    // If requested, store original function code
-    if( storedAddr ){
-        opcodesNumber = CheckOpcodes( opcodes, inpAddr );
-        if( opcodesNumber >= SIZE_OF_INDJUMP ){
+    if ( storedAddr ){ // If requested, store original function code
+        if ( *codePtr == 0xE9 ){ // JMP relative instruction
+            // For the special case when a system function consists of a single near jump,
+            // instead of moving it somewhere we use the target of the jump as the original function.
+            unsigned offsetInJmp = *(unsigned*)(codePtr + 1);
+            *storedAddr = (void*)(srcAddr + offsetInJmp + SIZE_OF_RELJUMP);
+        }else{
+            opcodesNumber = CheckOpcodes( opcodes, inpAddr, /*abortOnError=*/true );
+            __TBB_ASSERT_RELEASE( opcodesNumber >= SIZE_OF_INDJUMP, "Incorrect bytecode pattern?" );
             UINT_PTR strdAddr = memProvider.GetLocation(srcAddr);
             if (!strdAddr)
                 return 0;
@@ -335,15 +342,12 @@ static DWORD InsertTrampoline64(void *inpAddr, void *targetAddr, const char ** o
             offset32 = (UINT)((offset & 0xFFFFFFFF));
             *((UCHAR*)*storedAddr+opcodesNumber) = 0xE9;
             memcpy(((UCHAR*)*storedAddr+opcodesNumber+1), &offset32, sizeof(offset32));
-        }else{
-            // No matches found just do not store original calls
-            *storedAddr = NULL;
         }
     }
 
     // Fill the buffer
-     offset = location - srcAddr - SIZE_OF_INDJUMP;
-     offset32 = (UINT)(offset & 0xFFFFFFFF);
+    offset = location - srcAddr - SIZE_OF_INDJUMP;
+    offset32 = (UINT)(offset & 0xFFFFFFFF);
     *(codePtr) = 0xFF;
     *(codePtr+1) = 0x25;
     memcpy(codePtr+2, &offset32, sizeof(offset32));
@@ -467,4 +471,12 @@ FRR_TYPE ReplaceFunctionW(const wchar_t *dllName, const char *funcName, FUNCPTR
     return FRR_OK;
 }
 
+bool IsPrologueKnown(HMODULE module, const char *funcName, const char **opcodes)
+{
+    FARPROC inpFunc = GetProcAddress(module, funcName);
+    if (!inpFunc)
+        return false;
+    return CheckOpcodes( opcodes, (void*)inpFunc, /*abortOnError=*/false ) != 0;
+}
+
 #endif /* !__TBB_WIN8UI_SUPPORT && defined(_WIN32) */
diff --git a/src/tbbmalloc/tbb_function_replacement.h b/src/tbbmalloc/tbb_function_replacement.h
index fd3fefc..e986ab1 100644
--- a/src/tbbmalloc/tbb_function_replacement.h
+++ b/src/tbbmalloc/tbb_function_replacement.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_function_replacement_H
@@ -45,6 +45,8 @@ typedef void (*FUNCPTR)();
 FRR_TYPE ReplaceFunctionA(const char *dllName, const char *funcName, FUNCPTR newFunc, const char ** opcodes, FUNCPTR* origFunc=NULL);
 FRR_TYPE ReplaceFunctionW(const wchar_t *dllName, const char *funcName, FUNCPTR newFunc, const char ** opcodes, FUNCPTR* origFunc=NULL);
 
+bool IsPrologueKnown(HMODULE module, const char *funcName, const char **opcodes);
+
 // Utilities to convert between ADDRESS and LPVOID
 union Int2Ptr {
     UINT_PTR uip;
diff --git a/src/tbbmalloc/tbbmalloc.cpp b/src/tbbmalloc/tbbmalloc.cpp
index f561a8c..fa0e698 100644
--- a/src/tbbmalloc/tbbmalloc.cpp
+++ b/src/tbbmalloc/tbbmalloc.cpp
@@ -1,28 +1,26 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "TypeDefinitions.h" // Customize.h and proxy.h get included
 #include "tbbmalloc_internal_api.h"
 
-#include "../tbb/itt_notify.h" // for __TBB_load_ittnotify()
-
 #include "../tbb/tbb_assert_impl.h" // Out-of-line TBB assertion handling routines are instantiated here.
 
 #undef UNICODE
@@ -36,13 +34,6 @@
 namespace rml {
 namespace internal {
 
-/** Caller is responsible for ensuring this routine is called exactly once. */
-extern "C" void MallocInitializeITT() {
-#if DO_ITT_NOTIFY
-    tbb::internal::__TBB_load_ittnotify();
-#endif
-}
-
 #if TBB_USE_DEBUG
 #define DEBUG_SUFFIX "_debug"
 #else
@@ -105,7 +96,7 @@ struct RegisterProcessShutdownNotification {
         // prevents unloading, POSIX case
         dlopen(MALLOCLIB_NAME, RTLD_NOW);
     }
-#endif /* !__ANDROID__ */
+#endif /* !__TBB_USE_DLOPEN_REENTRANCY_WORKAROUND */
     ~RegisterProcessShutdownNotification() {
         __TBB_mallocProcessShutdownNotification();
     }
diff --git a/src/tbbmalloc/tbbmalloc.rc b/src/tbbmalloc/tbbmalloc.rc
index de82be9..2b65e55 100644
--- a/src/tbbmalloc/tbbmalloc.rc
+++ b/src/tbbmalloc/tbbmalloc.rc
@@ -1,20 +1,20 @@
-// Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+// Copyright (c) 2005-2017 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
 //
-// This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-// you can redistribute it and/or modify it under the terms of the GNU General Public License
-// version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-// Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 //
-// As a special exception,  you may use this file  as part of a free software library without
-// restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-// functions from this file, or you compile this file and link it with other files to produce
-// an executable,  this file does not by itself cause the resulting executable to be covered
-// by the GNU General Public License. This exception does not however invalidate any other
-// reasons why the executable file might be covered by the GNU General Public License.
 
 // Microsoft Visual C++ generated resource script.
 //
@@ -84,7 +84,7 @@ BEGIN
             VALUE "CompanyName", "Intel Corporation\0"
             VALUE "FileDescription", "Scalable Allocator library\0"
             VALUE "FileVersion", TBBMALLOC_VERSION "\0"
-            VALUE "LegalCopyright", "Copyright 2005-2015 Intel Corporation.  All Rights Reserved.\0"
+            VALUE "LegalCopyright", "Copyright 2005-2017 Intel Corporation.  All Rights Reserved.\0"
             VALUE "LegalTrademarks", "\0"
 #ifndef TBB_USE_DEBUG
             VALUE "OriginalFilename", "tbbmalloc.dll\0"
diff --git a/src/tbbmalloc/tbbmalloc_internal.h b/src/tbbmalloc/tbbmalloc_internal.h
index 6cf585e..e4082bc 100644
--- a/src/tbbmalloc/tbbmalloc_internal.h
+++ b/src/tbbmalloc/tbbmalloc_internal.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_tbbmalloc_internal_H
@@ -37,6 +37,7 @@
 
 // TODO: *BSD also has it
 #define BACKEND_HAS_MREMAP __linux__
+#define CHECK_ALLOCATION_RANGE MALLOC_DEBUG || MALLOC_ZONE_OVERLOAD_ENABLED || MALLOC_UNIXLIKE_OVERLOAD_ENABLED
 
 #include "tbb/tbb_config.h" // for __TBB_LIBSTDCPP_EXCEPTION_HEADERS_BROKEN
 #if __TBB_LIBSTDCPP_EXCEPTION_HEADERS_BROKEN
@@ -72,7 +73,7 @@
 
 #define COLLECT_STATISTICS ( MALLOC_DEBUG && MALLOCENV_COLLECT_STATISTICS )
 #ifndef USE_INTERNAL_TID
-#define USE_INTERNAL_TID COLLECT_STATISTICS
+#define USE_INTERNAL_TID COLLECT_STATISTICS || MALLOC_TRACE
 #endif
 
 #include "Statistics.h"
@@ -117,9 +118,15 @@ const unsigned cacheCleanupFreq = 256;
  */
 const size_t largeObjectAlignment = estimatedCacheLineSize;
 
+/*
+ * This number of bins in the TLS that leads to blocks that we can allocate in.
+ */
+const uint32_t numBlockBinLimit = 31;
+
 /********** End of numeric parameters controlling allocations *********/
 
 class BlockI;
+class Block;
 struct LargeMemoryBlock;
 struct ExtMemoryPool;
 struct MemRegion;
@@ -130,11 +137,15 @@ class MemoryPool;
 struct CacheBinOperation;
 extern const uint32_t minLargeObjectSize;
 
+enum DecreaseOrIncrease {
+    decrease, increase
+};
+
 class TLSKey {
     tls_key_t TLS_pointer_key;
 public:
-    TLSKey();
-   ~TLSKey();
+    bool init();
+    bool destroy();
     TLSData* getThreadMallocTLS() const;
     void setThreadMallocTLS( TLSData * newvalue );
     TLSData* createTLS(MemoryPool *memPool, Backend *backend);
@@ -235,6 +246,35 @@ public:
     void reset() { head = NULL; }
 };
 
+class LifoList {
+public:
+    inline LifoList();
+    inline void push(Block *block);
+    inline Block *pop();
+    inline Block *grab();
+
+private:
+    Block *top;
+    MallocMutex lock;
+};
+
+/*
+ * When a block that is not completely free is returned for reuse by other threads
+ * this is where the block goes.
+ *
+ * LifoList assumes zero initialization; so below its constructors are omitted,
+ * to avoid linking with C++ libraries on Linux.
+ */
+
+class OrphanedBlocks {
+    LifoList bins[numBlockBinLimit];
+public:
+    Block *get(TLSData *tls, unsigned int size);
+    void put(intptr_t binTag, Block *block);
+    void reset();
+    bool cleanup(Backend* backend);
+};
+
 /* cache blocks in range [MinSize; MaxSize) in bins with CacheStep
  TooLargeFactor -- when cache size treated "too large" in comparison to user data size
  OnMissFactor -- If cache miss occurred and cache was cleaned,
@@ -256,9 +296,6 @@ class LargeObjectCacheImpl {
 private:
     // The number of bins to cache large objects.
     static const uint32_t numBins = (Props::MaxSize-Props::MinSize)/Props::CacheStep;
-
-    typedef BitMaskMax<numBins> BinBitMask;
-
     // Current sizes of used and cached objects. It's calculated while we are
     // traversing bins, and used for isLOCTooLarge() check at the same time.
     class BinsSummary {
@@ -274,6 +311,8 @@ private:
         }
         void reset() { usedSz = cachedSz = 0; }
     };
+public:
+    typedef BitMaskMax<numBins> BinBitMask;
 
     // 2-linked list of same-size cached blocks ordered by age (oldest on top)
     // TODO: are we really want the list to be 2-linked? This allows us
@@ -303,81 +342,29 @@ private:
   /* time of last get called for the bin */
         uintptr_t         lastGet;
 
-        /* The functor called by the aggregator for the operation list */
-        class CacheBinFunctor {
-            CacheBin *const bin;
-            ExtMemoryPool *const extMemPool;
-            BinBitMask *const bitMask;
-            const int idx;
-
-            LargeMemoryBlock *toRelease;
-            bool needCleanup;
-            uintptr_t currTime;
-
-            /* Do preprocessing under the operation list. */
-            /* All the OP_PUT_LIST operations are merged in the one operation.
-               All OP_GET operations are merged with the OP_PUT_LIST operations but
-               it demands the update of the moving average value in the bin.
-               Only the last OP_CLEAN_TO_THRESHOLD operation has sense.
-               The OP_CLEAN_ALL operation also should be performed only once.
-               Moreover it cancels the OP_CLEAN_TO_THRESHOLD operation. */
-            class OperationPreprocessor {
-                // TODO: remove the dependency on CacheBin.
-                CacheBin *const  bin;
-
-                /* Contains the relative time in the operation list.
-                   It counts in the reverse order since the aggregator also
-                   provides operations in the reverse order. */
-                uintptr_t lclTime;
-
-                /* opGet contains only OP_GET operations which cannot be merge with OP_PUT operations
-                   opClean contains all OP_CLEAN_TO_THRESHOLD and OP_CLEAN_ALL operations. */
-                CacheBinOperation *opGet, *opClean;
-                /* The time of the last OP_CLEAN_TO_THRESHOLD operations */
-                uintptr_t cleanTime;
-
-                /* lastGetOpTime - the time of the last OP_GET operation.
-                   lastGet - the same meaning as CacheBin::lastGet */
-                uintptr_t lastGetOpTime, lastGet;
-
-                /* The total sum of all usedSize decrements requested with CBOP_DECR_USED_SIZE operations. */
-                size_t decrUsedSize;
-
-                /* The list of blocks for the OP_PUT_LIST operation. */
-                LargeMemoryBlock *head, *tail;
-                int putListNum;
-
-                /* if the OP_CLEAN_ALL is requested. */
-                bool isCleanAll;
-
-                inline void commitOperation(CacheBinOperation *op) const;
-                inline void addOpToOpList(CacheBinOperation *op, CacheBinOperation **opList) const;
-                bool getFromPutList(CacheBinOperation* opGet, uintptr_t currTime);
-                void addToPutList( LargeMemoryBlock *head, LargeMemoryBlock *tail, int num );
-
-            public:
-                OperationPreprocessor(CacheBin *bin) :
-                    bin(bin), lclTime(0), opGet(NULL), opClean(NULL), cleanTime(0),
-                    lastGetOpTime(0), decrUsedSize(0), head(NULL), isCleanAll(false)  {}
-                void operator()(CacheBinOperation* opList);
-                uintptr_t getTimeRange() const { return -lclTime; }
-
-                friend class CacheBinFunctor;
-            };
-
-        public:
-            CacheBinFunctor(CacheBin *bin, ExtMemoryPool *extMemPool, BinBitMask *bitMask, int idx) :
-                bin(bin), extMemPool(extMemPool), bitMask(bitMask), idx(idx), toRelease(NULL), needCleanup(false) {}
-            void operator()(CacheBinOperation* opList);
-
-            bool isCleanupNeeded() const { return needCleanup; }
-            LargeMemoryBlock *getToRelease() const { return toRelease; }
-            uintptr_t getCurrTime() const { return currTime; }
-        };
-
         typename MallocAggregator<CacheBinOperation>::type aggregator;
 
         void ExecuteOperation(CacheBinOperation *op, ExtMemoryPool *extMemPool, BinBitMask *bitMask, int idx, bool longLifeTime = true);
+  /* should be placed in zero-initialized memory, ctor not needed. */
+        CacheBin();
+    public:
+        void init() { memset(this, 0, sizeof(CacheBin)); }
+        void putList(ExtMemoryPool *extMemPool, LargeMemoryBlock *head, BinBitMask *bitMask, int idx);
+        LargeMemoryBlock *get(ExtMemoryPool *extMemPool, size_t size, BinBitMask *bitMask, int idx);
+        bool cleanToThreshold(ExtMemoryPool *extMemPool, BinBitMask *bitMask, uintptr_t currTime, int idx);
+        bool releaseAllToBackend(ExtMemoryPool *extMemPool, BinBitMask *bitMask, int idx);
+        void updateUsedSize(ExtMemoryPool *extMemPool, size_t size, BinBitMask *bitMask, int idx);
+
+        void decreaseThreshold() {
+            if (ageThreshold)
+                ageThreshold = (ageThreshold + meanHitRange)/2;
+        }
+        void updateBinsSummary(BinsSummary *binsSummary) const {
+            binsSummary->update(usedSize, cachedSize);
+        }
+        size_t getSize() const { return cachedSize; }
+        size_t getUsedSize() const { return usedSize; }
+        size_t reportStat(int num, FILE *f);
   /* ---------- unsafe methods used with the aggregator ---------- */
         void forgetOutdatedState(uintptr_t currTime);
         LargeMemoryBlock *putList(LargeMemoryBlock *head, LargeMemoryBlock *tail, BinBitMask *bitMask, int idx, int num);
@@ -400,29 +387,8 @@ private:
         void updateCachedSize(size_t size) { cachedSize += size; }
         void setLastGet( uintptr_t newLastGet ) { lastGet = newLastGet; }
   /* -------------------------------------------------------- */
-
-  /* should be placed in zero-initialized memory, ctor not needed. */
-        CacheBin();
-    public:
-        void init() { memset(this, 0, sizeof(CacheBin)); }
-        void putList(ExtMemoryPool *extMemPool, LargeMemoryBlock *head, BinBitMask *bitMask, int idx);
-        LargeMemoryBlock *get(ExtMemoryPool *extMemPool, size_t size, BinBitMask *bitMask, int idx);
-        bool cleanToThreshold(ExtMemoryPool *extMemPool, BinBitMask *bitMask, uintptr_t currTime, int idx);
-        bool releaseAllToBackend(ExtMemoryPool *extMemPool, BinBitMask *bitMask, int idx);
-        void decrUsedSize(ExtMemoryPool *extMemPool, size_t size, BinBitMask *bitMask, int idx);
-
-        void decreaseThreshold() {
-            if (ageThreshold)
-                ageThreshold = (ageThreshold + meanHitRange)/2;
-        }
-        void updateBinsSummary(BinsSummary *binsSummary) const {
-            binsSummary->update(usedSize, cachedSize);
-        }
-        size_t getSize() const { return cachedSize; }
-        size_t getUsedSize() const { return usedSize; }
-        size_t reportStat(int num, FILE *f);
     };
-
+private:
     intptr_t     tooLargeLOC; // how many times LOC was "too large"
     // for fast finding of used bins and bins with non-zero usedSize;
     // indexed from the end, as we need largest 1st
@@ -440,7 +406,7 @@ public:
     void putList(ExtMemoryPool *extMemPool, LargeMemoryBlock *largeBlock);
     LargeMemoryBlock *get(ExtMemoryPool *extMemPool, size_t size);
 
-    void rollbackCacheState(ExtMemoryPool *extMemPool, size_t size);
+    void updateCacheState(ExtMemoryPool *extMemPool, DecreaseOrIncrease op, size_t size);
     bool regularCleanup(ExtMemoryPool *extMemPool, uintptr_t currAge, bool doThreshDecr);
     bool cleanAll(ExtMemoryPool *extMemPool);
     void reset() {
@@ -449,9 +415,7 @@ public:
             bin[i].init();
         bitMask.reset();
     }
-#if __TBB_MALLOC_LOCACHE_STAT
     void reportStat(FILE *f);
-#endif
 #if __TBB_MALLOC_WHITEBOX_TEST
     size_t getLOCSize() const;
     size_t getUsedSize() const;
@@ -500,7 +464,7 @@ public:
     void putList(LargeMemoryBlock *head);
     LargeMemoryBlock *get(size_t size);
 
-    void rollbackCacheState(size_t size);
+    void updateCacheState(DecreaseOrIncrease op, size_t size);
     bool isCleanupNeededOnRange(uintptr_t range, uintptr_t currTime);
     bool doCleanup(uintptr_t currTime, bool doThreshDecr);
 
@@ -511,9 +475,7 @@ public:
         largeCache.reset();
         hugeCache.reset();
     }
-#if __TBB_MALLOC_LOCACHE_STAT
     void reportStat(FILE *f);
-#endif
 #if __TBB_MALLOC_WHITEBOX_TEST
     size_t getLOCSize() const;
     size_t getUsedSize() const;
@@ -525,18 +487,34 @@ public:
 
     uintptr_t getCurrTime() { return (uintptr_t)AtomicIncrement((intptr_t&)cacheCurrTime); }
     uintptr_t getCurrTimeRange(uintptr_t range) { return (uintptr_t)AtomicAdd((intptr_t&)cacheCurrTime, range)+1; }
+    void registerRealloc(size_t oldSize, size_t newSize);
+};
+
+// select index size for BackRefMaster based on word size: default is uint32_t,
+// uint16_t for 32-bit platforms
+template<bool>
+struct MasterIndexSelect {
+    typedef uint32_t master_type;
+};
+
+template<>
+struct MasterIndexSelect<false> {
+    typedef uint16_t master_type;
 };
 
 class BackRefIdx { // composite index to backreference array
+public:
+    typedef MasterIndexSelect<4 < sizeof(uintptr_t)>::master_type master_t;
 private:
-    uint16_t master;      // index in BackRefMaster
+    static const master_t invalid = ~master_t(0);
+    master_t master;      // index in BackRefMaster
     uint16_t largeObj:1;  // is this object "large"?
     uint16_t offset  :15; // offset from beginning of BackRefBlock
 public:
-    BackRefIdx() : master((uint16_t)-1) {}
-    bool isInvalid() const { return master == (uint16_t)-1; }
+    BackRefIdx() : master(invalid) {}
+    bool isInvalid() const { return master == invalid; }
     bool isLargeObject() const { return largeObj; }
-    uint16_t getMaster() const { return master; }
+    master_t getMaster() const { return master; }
     uint16_t getOffset() const { return offset; }
 
     // only newBackRef can modify BackRefIdx
@@ -550,6 +528,7 @@ class BlockI {
 };
 
 struct LargeMemoryBlock : public BlockI {
+    MemoryPool       *pool;          // owner pool
     LargeMemoryBlock *next,          // ptrs in list of cached blocks
                      *prev,
     // 2-linked list of pool's large objects
@@ -643,6 +622,7 @@ public:
     MemRegion  *head;
     void add(MemRegion *r);
     void remove(MemRegion *r);
+    int reportStat(FILE *f);
 };
 
 class Backend {
@@ -673,6 +653,10 @@ public:
 
     enum {
         NO_BIN = -1,
+        // special bin for blocks >= maxBinned_HugePage, blocks go to this bin
+        // when pool is created with keepAllMemory policy
+        // TODO: currently this bin is scanned using "1st fit", as it accumulates
+        // blocks of different sizes, "best fit" is preferred in terms of fragmentation
         HUGE_BIN = freeBinsNum-1
     };
 
@@ -685,11 +669,11 @@ public:
 
         void removeBlock(FreeBlock *fBlock);
         void reset() { head = tail = 0; }
-#if __TBB_MALLOC_BACKEND_STAT
+        bool empty() const { return !head; }
+
         size_t countFreeBlocks();
+        size_t reportFreeBlocks(FILE *f);
         void reportStat(FILE *f);
-#endif
-        bool empty() const { return !head; }
     };
 
     typedef BitMaskMin<Backend::freeBinsNum> BitMaskBins;
@@ -713,10 +697,8 @@ public:
             return p == -1 ? Backend::freeBinsNum : p;
         }
         void verify();
-#if __TBB_MALLOC_BACKEND_STAT
-        void reportStat(FILE *f);
-#endif
         void reset();
+        void reportStat(FILE *f);
     };
 
 private:
@@ -735,27 +717,64 @@ private:
         inline bool operator()(size_t oldMaxReq, size_t requestSize) const;
     };
 
-    ExtMemoryPool *extMemPool;
+#if CHECK_ALLOCATION_RANGE
+    // Keep min and max of all addresses requested from OS,
+    // use it for checking memory possibly allocated by replaced allocators
+    // and for debugging purposes. Valid only for default memory pool.
+    class UsedAddressRange {
+        static const uintptr_t ADDRESS_UPPER_BOUND = UINTPTR_MAX;
+
+        uintptr_t   leftBound,
+                    rightBound;
+        MallocMutex mutex;
+    public:
+        // rightBound is zero-initialized
+        void init() { leftBound = ADDRESS_UPPER_BOUND; }
+        void registerAlloc(uintptr_t left, uintptr_t right);
+        void registerFree(uintptr_t left, uintptr_t right);
+        // as only left and right bounds are kept, we can return true
+        // for pointer not allocated by us, if more than single region
+        // was requested from OS
+        bool inRange(void *ptr) const {
+            const uintptr_t p = (uintptr_t)ptr;
+            return leftBound<=p && p<=rightBound;
+        }
+    };
+#else
+    class UsedAddressRange {
+    public:
+        void init() { }
+        void registerAlloc(uintptr_t, uintptr_t) {}
+        void registerFree(uintptr_t, uintptr_t) {}
+        bool inRange(void *) const { return true; }
+    };
+#endif
+
+    ExtMemoryPool   *extMemPool;
     // used for release every region on pool destroying
-    MemRegionList  regionList;
+    MemRegionList    regionList;
 
-    CoalRequestQ   coalescQ; // queue of coalescing requests
-    BackendSync    bkndSync;
+    CoalRequestQ     coalescQ; // queue of coalescing requests
+    BackendSync      bkndSync;
     // semaphore protecting adding more more memory from OS
     MemExtendingSema memExtendingSema;
-    size_t         totalMemSize,
-                   memSoftLimit;
-    // Fixed pools request memory once per lifetime, during pool_create.
-    // Status of memory acquisition for such pool keeps here.
-    // So value is changed only for fixed pools, and without synchronization,
-    // as pool is not available till returning from pool_create.
-    bool           rawMemReceived;
+    size_t           totalMemSize,
+                     memSoftLimit;
+    UsedAddressRange usedAddrRange;
+    // to keep 1st allocation large than requested, keep bootstrapping status
+    enum {
+        bootsrapMemNotDone = 0,
+        bootsrapMemInitializing,
+        bootsrapMemDone
+    };
+    intptr_t         bootsrapMemStatus;
+    MallocMutex      bootsrapMemStatusMutex;
 
     // Using of maximal observed requested size allows decrease
     // memory consumption for small requests and decrease fragmentation
     // for workloads when small and large allocation requests are mixed.
     // TODO: decrease, not only increase it
-    size_t         maxRequestedSize;
+    size_t           maxRequestedSize;
 
     FreeBlock *addNewRegion(size_t size, MemRegionType type, bool addToBin);
     FreeBlock *findBlockInRegion(MemRegion *region, size_t exactBlockSize);
@@ -764,6 +783,7 @@ private:
 
     FreeBlock *releaseMemInCaches(intptr_t startModifiedCnt,
                                   int *lockedBinsThreshold, int numOfLockedBins);
+    void requestBootstrapMem();
     FreeBlock *askMemFromOS(size_t totalReqSize, intptr_t startModifiedCnt,
                             int *lockedBinsThreshold, int numOfLockedBins,
                             bool *splittable);
@@ -780,8 +800,8 @@ private:
 
     void removeBlockFromBin(FreeBlock *fBlock);
 
-    void *allocRawMem(size_t &size) const;
-    void freeRawMem(void *object, size_t size) const;
+    void *allocRawMem(size_t &size);
+    bool freeRawMem(void *object, size_t size);
 
     void putLargeBlock(LargeMemoryBlock *lmb);
     void releaseCachesToLimit();
@@ -789,13 +809,11 @@ public:
     bool scanCoalescQ(bool forceCoalescQDrop);
     intptr_t blocksInCoalescing() const { return coalescQ.blocksInFly(); }
     void verify();
-#if __TBB_MALLOC_BACKEND_STAT
-    void reportStat(FILE *f);
-#endif
-    bool bootstrap(ExtMemoryPool *extMemoryPool);
+    void init(ExtMemoryPool *extMemoryPool);
     void reset();
     bool destroy();
     bool clean(); // clean on caches cleanup
+    void reportStat(FILE *f);
 
     BlockI *getSlabBlock(int num) {
         BlockI *b = (BlockI*)
@@ -822,6 +840,8 @@ public:
     }
     inline size_t getMaxBinnedSize() const;
 
+    bool ptrCanBeValid(void *ptr) const { return usedAddrRange.inRange(ptr); }
+
 #if __TBB_MALLOC_WHITEBOX_TEST
     size_t getTotalMemSize() const { return totalMemSize; }
 #endif
@@ -868,10 +888,11 @@ struct ExtMemoryPool {
     Backend           backend;
     LargeObjectCache  loc;
     AllLocalCaches    allLocalCaches;
+    OrphanedBlocks    orphanedBlocks;
 
     intptr_t          poolId;
-    // To find all large objects. This used during user pool destruction,
-    // to release all backreferencies in large blocks (slab blocks do not have them).
+    // To find all large objects. Used during user pool destruction,
+    // to release all backreferences in large blocks (slab blocks do not have them).
     AllLargeBlocksList lmbList;
     // Callbacks to be used instead of MapMemory/UnmapMemory.
     rawAllocType      rawAlloc;
@@ -885,7 +906,7 @@ struct ExtMemoryPool {
 
     bool init(intptr_t poolId, rawAllocType rawAlloc, rawFreeType rawFree,
               size_t granularity, bool keepAllMemory, bool fixedPool);
-    void initTLS();
+    bool initTLS();
 
     // i.e., not system default pool for scalable_malloc/scalable_free
     bool userPool() const { return rawAlloc; }
@@ -894,29 +915,39 @@ struct ExtMemoryPool {
     bool softCachesCleanup();
     bool releaseAllLocalCaches();
     bool hardCachesCleanup();
-    void reset() {
+    void *remap(void *ptr, size_t oldSize, size_t newSize, size_t alignment);
+    bool reset() {
         loc.reset();
         allLocalCaches.reset();
-        tlsPointerKey.~TLSKey();
+        orphanedBlocks.reset();
+        bool ret = tlsPointerKey.destroy();
         backend.reset();
+        return ret;
     }
-    void destroy() {
+    bool destroy() {
+        MALLOC_ASSERT(isPoolValid(),
+                      "Possible double pool_destroy or heap corruption");
         if (!userPool()) {
             loc.reset();
             allLocalCaches.reset();
         }
         // pthread_key_dtors must be disabled before memory unmapping
         // TODO: race-free solution
-        tlsPointerKey.~TLSKey();
+        bool ret = tlsPointerKey.destroy();
         if (rawFree || !userPool())
-            backend.destroy();
+            ret &= backend.destroy();
+        // pool is not valid after this point
+        granularity = 0;
+        return ret;
     }
     void delayRegionsReleasing(bool mode) { delayRegsReleasing = mode; }
     inline bool regionsAreReleaseable() const;
 
-    LargeMemoryBlock *mallocLargeObject(size_t allocationSize);
+    LargeMemoryBlock *mallocLargeObject(MemoryPool *pool, size_t allocationSize);
     void freeLargeObject(LargeMemoryBlock *lmb);
     void freeLargeObjectList(LargeMemoryBlock *head);
+    // use granulatity as marker for pool validity
+    bool isPoolValid() const { return granularity; }
 };
 
 inline bool Backend::inUserPool() const { return extMemPool->userPool(); }
@@ -940,6 +971,7 @@ class AllocControlledMode {
     intptr_t val;
     bool     setDone;
 public:
+    bool ready() const { return setDone; }
     intptr_t get() const {
         MALLOC_ASSERT(setDone, ASSERT_TEXT);
         return val;
@@ -958,6 +990,8 @@ public:
 // to get huge page is registered only 1st time), that is negligible.
 // setMode is also can be called concurrently.
 // Object must reside in zero-initialized memory
+// TODO: can we check for huge page presence during every 10th mmap() call
+// in case huge page is released by another process?
 class HugePagesStatus {
 private:
     AllocControlledMode requestedMode; // changed only by user
@@ -974,13 +1008,18 @@ public:
     // region is releasing, to find can it release some huge pages or not.
     intptr_t    wasObserved;
 
-    size_t getSize() const {
-        MALLOC_ASSERT(pageSize, ASSERT_TEXT);
-        return pageSize;
+    // If memory mapping size is a multiple of huge page size, some OS kernels
+    // can use huge pages transparently (i.e. even if not explicitly enabled).
+    // Use this when huge pages are requested.
+    size_t recommendedGranularity() const {
+        if (requestedMode.ready())
+            return requestedMode.get()? pageSize : 0;
+        else
+            return 2048*1024; // the mode is not yet known; assume typical 2MB huge pages
     }
     void printStatus();
     void registerAllocation(bool available);
-    void registerReleasing(size_t size);
+    void registerReleasing(void* addr, size_t size);
 
     void init(size_t hugePageSize) {
         MALLOC_ASSERT(!hugePageSize || isPowerOfTwo(hugePageSize),
diff --git a/src/tbbmalloc/tbbmalloc_internal_api.h b/src/tbbmalloc/tbbmalloc_internal_api.h
index 2eedc77..301c9f5 100644
--- a/src/tbbmalloc/tbbmalloc_internal_api.h
+++ b/src/tbbmalloc/tbbmalloc_internal_api.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_tbbmalloc_internal_api_H
@@ -31,6 +31,7 @@ typedef enum {
     TBBMALLOC_INTERNAL_SOURCE_INCLUDED = 65536
 } AllocationModeInternalParam;
 
+void MallocInitializeITT();
 void __TBB_mallocProcessShutdownNotification();
 #if _WIN32||_WIN64
 void __TBB_mallocThreadShutdownNotification();
diff --git a/src/tbbmalloc/win32-gcc-tbbmalloc-export.def b/src/tbbmalloc/win32-gcc-tbbmalloc-export.def
index c66216c..f2ca7f3 100644
--- a/src/tbbmalloc/win32-gcc-tbbmalloc-export.def
+++ b/src/tbbmalloc/win32-gcc-tbbmalloc-export.def
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 {
@@ -46,6 +46,7 @@ _ZN3rml9pool_freeEPNS_10MemoryPoolEPv;
 _ZN3rml12pool_reallocEPNS_10MemoryPoolEPvj;
 _ZN3rml20pool_aligned_reallocEPNS_10MemoryPoolEPvjj;
 _ZN3rml19pool_aligned_mallocEPNS_10MemoryPoolEjj;
+_ZN3rml13pool_identifyEPv;
 
 local:*;
 };
diff --git a/src/tbbmalloc/win32-tbbmalloc-export.def b/src/tbbmalloc/win32-tbbmalloc-export.def
index 75148a0..f02c208 100644
--- a/src/tbbmalloc/win32-tbbmalloc-export.def
+++ b/src/tbbmalloc/win32-tbbmalloc-export.def
@@ -1,20 +1,20 @@
-; Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+; Copyright (c) 2005-2017 Intel Corporation
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+;     http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+;
+;
 ;
-; This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-; you can redistribute it and/or modify it under the terms of the GNU General Public License
-; version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-; Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 ;
-; As a special exception,  you may use this file  as part of a free software library without
-; restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-; functions from this file, or you compile this file and link it with other files to produce
-; an executable,  this file does not by itself cause the resulting executable to be covered
-; by the GNU General Public License. This exception does not however invalidate any other
-; reasons why the executable file might be covered by the GNU General Public License.
 
 EXPORTS
 
@@ -44,3 +44,4 @@ __TBB_malloc_safer_aligned_realloc
 ?pool_realloc at rml@@YAPAXPAVMemoryPool at 1@PAXI at Z
 ?pool_aligned_realloc at rml@@YAPAXPAVMemoryPool at 1@PAXII at Z
 ?pool_aligned_malloc at rml@@YAPAXPAVMemoryPool at 1@II at Z
+?pool_identify at rml@@YAPAVMemoryPool at 1@PAX at Z
diff --git a/src/tbbmalloc/win64-gcc-tbbmalloc-export.def b/src/tbbmalloc/win64-gcc-tbbmalloc-export.def
index cc413da..d399b96 100644
--- a/src/tbbmalloc/win64-gcc-tbbmalloc-export.def
+++ b/src/tbbmalloc/win64-gcc-tbbmalloc-export.def
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 {
@@ -46,6 +46,7 @@ _ZN3rml9pool_freeEPNS_10MemoryPoolEPv;
 _ZN3rml12pool_reallocEPNS_10MemoryPoolEPvy;
 _ZN3rml20pool_aligned_reallocEPNS_10MemoryPoolEPvyy;
 _ZN3rml19pool_aligned_mallocEPNS_10MemoryPoolEyy;
+_ZN3rml13pool_identifyEPv;
 
 local:*;
 };
diff --git a/src/tbbmalloc/win64-tbbmalloc-export.def b/src/tbbmalloc/win64-tbbmalloc-export.def
index e4f9d74..0e335a4 100644
--- a/src/tbbmalloc/win64-tbbmalloc-export.def
+++ b/src/tbbmalloc/win64-tbbmalloc-export.def
@@ -1,20 +1,20 @@
-; Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+; Copyright (c) 2005-2017 Intel Corporation
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+;     http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+;
+;
 ;
-; This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-; you can redistribute it and/or modify it under the terms of the GNU General Public License
-; version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-; Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 ;
-; As a special exception,  you may use this file  as part of a free software library without
-; restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-; functions from this file, or you compile this file and link it with other files to produce
-; an executable,  this file does not by itself cause the resulting executable to be covered
-; by the GNU General Public License. This exception does not however invalidate any other
-; reasons why the executable file might be covered by the GNU General Public License.
 
 EXPORTS
 
@@ -45,3 +45,4 @@ __TBB_malloc_safer_aligned_realloc
 ?pool_realloc at rml@@YAPEAXPEAVMemoryPool at 1@PEAX_K at Z
 ?pool_aligned_realloc at rml@@YAPEAXPEAVMemoryPool at 1@PEAX_K2 at Z
 ?pool_aligned_malloc at rml@@YAPEAXPEAVMemoryPool at 1@_K1 at Z
+?pool_identify at rml@@YAPEAVMemoryPool at 1@PEAX at Z
diff --git a/src/tbbmalloc/xbox360-tbbmalloc-export.def b/src/tbbmalloc/xbox360-tbbmalloc-export.def
deleted file mode 100644
index 0a010bc..0000000
--- a/src/tbbmalloc/xbox360-tbbmalloc-export.def
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-;
-; This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-; you can redistribute it and/or modify it under the terms of the GNU General Public License
-; version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-; Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-;
-; As a special exception,  you may use this file  as part of a free software library without
-; restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-; functions from this file, or you compile this file and link it with other files to produce
-; an executable,  this file does not by itself cause the resulting executable to be covered
-; by the GNU General Public License. This exception does not however invalidate any other
-; reasons why the executable file might be covered by the GNU General Public License.
-
-EXPORTS
-
-; MemoryAllocator.cpp
-scalable_calloc @1
-scalable_free @2
-scalable_malloc @3
-scalable_realloc @4
-scalable_posix_memalign @5
-scalable_aligned_malloc @6
-scalable_aligned_realloc @7
-scalable_aligned_free @8
-__TBB_malloc_safer_free @9
-__TBB_malloc_safer_realloc @10
-scalable_msize @11
-__TBB_malloc_safer_msize @12
-__TBB_malloc_safer_aligned_realloc @13
-__TBB_malloc_safer_aligned_msize @14
diff --git a/src/tbbproxy/tbbproxy-windows.asm b/src/tbbproxy/tbbproxy-windows.asm
index 2d0d3ed..330f361 100644
--- a/src/tbbproxy/tbbproxy-windows.asm
+++ b/src/tbbproxy/tbbproxy-windows.asm
@@ -1,20 +1,20 @@
-; Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+; Copyright (c) 2005-2017 Intel Corporation
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+;     http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+;
+;
 ;
-; This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-; you can redistribute it and/or modify it under the terms of the GNU General Public License
-; version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-; Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 ;
-; As a special exception,  you may use this file  as part of a free software library without
-; restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-; functions from this file, or you compile this file and link it with other files to produce
-; an executable,  this file does not by itself cause the resulting executable to be covered
-; by the GNU General Public License. This exception does not however invalidate any other
-; reasons why the executable file might be covered by the GNU General Public License.
 
 #include "tbb/tbb_config.h"
 
diff --git a/src/tbbproxy/tbbproxy.cpp b/src/tbbproxy/tbbproxy.cpp
index 3c5f307..3bb2f0a 100644
--- a/src/tbbproxy/tbbproxy.cpp
+++ b/src/tbbproxy/tbbproxy.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/tbb_config.h"
@@ -77,11 +77,11 @@ namespace runtime_loader {
 // Print message to stderr. Do not call it directly, use say() or tell() instead.
 static void _say( char const * format, va_list args ) {
     /*
-        On Linux Intel 64, vsnprintf() modifies args argument, so vsnprintf() crashes if it
-        is called for the second time with the same args. To prevent the crash, we have to
-        pass a fresh intact copy of args to vsnprintf() each time.
+        On 64-bit Linux* OS, vsnprintf() modifies args argument,
+        so vsnprintf() crashes if it is called for the second time with the same args.
+        To prevent the crash, we have to pass a fresh intact copy of args to vsnprintf() each time.
 
-        On Windows, unfortunately, standard va_copy() macro is not available. However, it
+        On Windows* OS, unfortunately, standard va_copy() macro is not available. However, it
         seems vsnprintf() does not modify args argument.
     */
     #if ! ( _WIN32 || _WIN64 )
@@ -351,8 +351,7 @@ static tbb::runtime_loader::error_code _load( char const * dll_name, int min_ver
     tbb::runtime_loader::error_code code = tbb::runtime_loader::ec_ok;
 
     /*
-        If these variables declared at the first usage, Intel compiler (on Windows IA-32) isues
-        warning(s):
+        If these variables declared at the first usage, Intel C++ Compiler may issue warning(s):
             transfer of control [goto error] bypasses initialization of: ...
         Declaring variables at the beginning of the function eliminates warnings.
     */
diff --git a/src/test/harness.h b/src/test/harness.h
index 7044d96..0133635 100644
--- a/src/test/harness.h
+++ b/src/test/harness.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Declarations for rock-bottom simple test harness.
@@ -83,13 +83,13 @@ int TestMain ();
 #if _WIN32||_WIN64
     #include "tbb/machine/windows_api.h"
     #if _WIN32_WINNT > 0x0501 && _MSC_VER && !_M_ARM
+        // Suppress "typedef ignored ... when no variable is declared" warning by vc14
+        #pragma warning (push)
+        #pragma warning (disable: 4091)
         #include <dbghelp.h>
+        #pragma warning (pop)
         #pragma comment (lib, "dbghelp.lib")
     #endif
-    #if _XBOX
-        #undef HARNESS_NO_PARSE_COMMAND_LINE
-        #define HARNESS_NO_PARSE_COMMAND_LINE 1
-    #endif
     #if __TBB_WIN8UI_SUPPORT
         #include <thread>
     #endif
@@ -112,11 +112,51 @@ int TestMain ();
     #define BACKTRACE_FUNCTION_AVAILABLE 1
 #endif
 
+namespace Harness {
+    class NativeMutex {
+#if _WIN32||_WIN64
+        CRITICAL_SECTION my_critical_section;
+      public:
+        NativeMutex() {
+            InitializeCriticalSectionEx(&my_critical_section, 4000, 0);
+        }
+        void lock() {
+            EnterCriticalSection(&my_critical_section);
+        }
+        void unlock() {
+            LeaveCriticalSection(&my_critical_section);
+        }
+        ~NativeMutex() {
+            DeleteCriticalSection(&my_critical_section);
+        }
+#else
+        pthread_mutex_t m_mutex;
+    public:
+        NativeMutex() {
+             pthread_mutex_init(&m_mutex, NULL);
+        }
+        void lock() {
+            pthread_mutex_lock(&m_mutex);
+        }
+        void unlock() {
+            pthread_mutex_unlock(&m_mutex);
+        }
+        ~NativeMutex() {
+            pthread_mutex_destroy(&m_mutex);
+        }
+#endif
+    };
+    namespace internal {
+        static NativeMutex print_stack_mutex;
+    }
+}
+
 #include "harness_runtime_loader.h"
 #include "harness_report.h"
 
 //! Prints current call stack
 void print_call_stack() {
+    Harness::internal::print_stack_mutex.lock();
     fflush(stdout); fflush(stderr);
     #if BACKTRACE_FUNCTION_AVAILABLE
         const int sz = 100; // max number of frames to capture
@@ -127,7 +167,7 @@ void print_call_stack() {
     #elif __SUNPRO_CC
         REPORT("Call stack info:\n");
         printstack(fileno(stdout));
-    #elif _WIN32_WINNT > 0x0501 && _MSC_VER && !__TBB_WIN8UI_SUPPORT
+    #elif _WIN32_WINNT > 0x0501 && _MSC_VER>=1500 && !__TBB_WIN8UI_SUPPORT
         const int sz = 62; // XP limitation for number of frames
         void *buff[sz];
         int n = CaptureStackBackTrace(0, sz, buff, NULL);
@@ -147,6 +187,7 @@ void print_call_stack() {
             REPORT("[%d] %016I64X+%04I64X: %s\n", i, sym.Address, offset, sym.Name); //TODO: print module name
         }
     #endif /*BACKTRACE_FUNCTION_AVAILABLE*/
+    Harness::internal::print_stack_mutex.unlock();
 }
 
 #if !HARNESS_NO_ASSERT
@@ -418,10 +459,7 @@ class NoAssign {
     //! Assignment not allowed
     void operator=( const NoAssign& );
 public:
-#if __GNUC__
-    //! Explicitly define default construction, because otherwise gcc issues gratuitous warning.
-    NoAssign() {}
-#endif /* __GNUC__ */
+    NoAssign() {} // explicitly defined to prevent gratuitous warnings
 };
 
 //! Base class for prohibiting compiler-generated copy constructor or operator=
@@ -707,11 +745,63 @@ public:
             x = x*a + 1;
             return r;
         }
-        FastRandom( unsigned seed ) {
+        explicit FastRandom( unsigned seed ) {
             x = seed;
             a = Primes[seed % (sizeof(Primes) / sizeof(Primes[0]))];
         }
     };
+    template<typename T>
+    class FastRandomBody {
+        FastRandom r;
+    public:
+        explicit FastRandomBody( unsigned seed ) : r(seed) {}
+        // Depending on the input type T the result distribution formed from this operator()
+        // might possess different characteristics than the original one used in FastRandom instance.
+        T operator()() { return T(r.get()); }
+    };
+
+    int SetEnv( const char *envname, const char *envval ) {
+        ASSERT( envname && envval, "Harness::SetEnv() requires two valid C strings" );
+#if __TBB_WIN8UI_SUPPORT
+        ASSERT( false, "Harness::SetEnv() should not be called in code built for win8ui" );
+        return -1;
+#elif !(_MSC_VER || __MINGW32__ || __MINGW64__)
+        // On POSIX systems use setenv
+        return setenv(envname, envval, /*overwrite=*/1);
+#elif __STDC_SECURE_LIB__>=200411
+        // this macro is set in VC & MinGW if secure API functions are present
+        return _putenv_s(envname, envval);
+#else
+        // If no secure API on Windows, use _putenv
+        size_t namelen = strlen(envname), valuelen = strlen(envval);
+        char* buf = new char[namelen+valuelen+2];
+        strncpy(buf, envname, namelen);
+        buf[namelen] = '=';
+        strncpy(buf+namelen+1, envval, valuelen);
+        buf[namelen+1+valuelen] = char(0);
+        int status = _putenv(buf);
+        delete[] buf;
+        return status;
+#endif
+    }
+
+    char* GetEnv(const char *envname) {
+        ASSERT(envname, "Harness::GetEnv() requires a valid C string");
+#if __TBB_WIN8UI_SUPPORT
+        return NULL;
+#else
+        return std::getenv(envname);
+#endif
+    }
+
+    class DummyBody {
+        int m_numIters;
+    public:
+        explicit DummyBody( int iters ) : m_numIters( iters ) {}
+        void operator()( int ) const {
+            for ( volatile int i = 0; i < m_numIters; ++i ) {}
+        }
+    };
 } // namespace Harness
 
 #endif /* tbb_tests_harness_H */
diff --git a/src/test/harness_allocator.h b/src/test/harness_allocator.h
index 8392dbe..5e6e50f 100644
--- a/src/test/harness_allocator.h
+++ b/src/test/harness_allocator.h
@@ -1,34 +1,36 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Declarations for simple estimate of the memory being used by a program.
-// Not yet implemented for OS X*.
+// Not yet implemented for macOS*.
 // This header is an optional part of the test harness.
 // It assumes that "harness_assert.h" has already been included.
 
 #ifndef tbb_test_harness_allocator_H
 #define tbb_test_harness_allocator_H
 
+#include "harness_defs.h"
+
 #if __linux__ || __APPLE__ || __sun
 #include <unistd.h>
-#elif _WIN32 
+#elif _WIN32
 #include "tbb/machine/windows_api.h"
 #endif /* OS specific */
 #include <memory>
@@ -40,15 +42,16 @@
     #pragma warning (disable: 4530)
 #endif
 
+#include <cstdio>
 #include <stdexcept>
-#include <algorithm>  // std::swap
+#include <utility>
+#include __TBB_STD_SWAP_HEADER
 
 #if !TBB_USE_EXCEPTIONS && _MSC_VER
     #pragma warning (pop)
 #endif
 
 #include "tbb/atomic.h"
-#include "harness_defs.h"
 
 #if __SUNPRO_CC
 using std::printf;
@@ -82,18 +85,20 @@ namespace Harness {
 #endif
 
 template<typename counter_type = size_t>
-struct arena_data  {
+struct arena_data {
     char * const my_buffer;
     size_t const my_size; //in bytes
     counter_type my_allocated; // in bytes
 
     template<typename T>
     arena_data(T * a_buffer, size_t a_size) __TBB_NOEXCEPT(true)
-    :   my_buffer(reinterpret_cast<char *>(a_buffer))
-    ,   my_size(a_size * sizeof(T) )
+    :   my_buffer(reinterpret_cast<char*>(a_buffer))
+    ,   my_size(a_size * sizeof(T))
     {
         my_allocated =0;
     }
+private:
+    void operator=( const arena_data& ); // NoAssign is not used to avoid dependency on harness.h
 };
 
 template<typename T, typename pocma = Harness::false_type, typename counter_type = size_t>
@@ -166,9 +171,8 @@ public:
     //! Destroy value at location pointed to by p.
     void destroy( pointer p ) {
         p->~value_type();
-#if _MSC_VER <= 1800 && defined(_MSC_VER) && !defined(__INTEL_COMPILER)
+        // suppress "unreferenced parameter" warnings by MSVC up to and including 2015
         tbb::internal::suppress_unused_warning(p);
-#endif
     }
 
     friend bool operator==(arena const& lhs, arena const& rhs){
@@ -225,7 +229,7 @@ public:
     static_counting_allocator(const base_alloc_t& src) throw()
     : base_alloc_t(src) { }
 
-    static_counting_allocator(const static_counting_allocator& src) throw() 
+    static_counting_allocator(const static_counting_allocator& src) throw()
     : base_alloc_t(src) { }
 
     template<typename U, typename C>
@@ -529,7 +533,7 @@ public:
 
 //! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1
 /** @ingroup memory_allocation */
-template<template<typename T> class Allocator> 
+template<template<typename T> class Allocator>
 class debug_allocator<void, Allocator> : public Allocator<void> {
 public:
     typedef Allocator<void> base_allocator_type;
diff --git a/src/test/harness_allocator_overload.h b/src/test/harness_allocator_overload.h
new file mode 100644
index 0000000..e611732
--- /dev/null
+++ b/src/test/harness_allocator_overload.h
@@ -0,0 +1,39 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+#ifndef tbb_test_harness_allocator_overload_H
+#define tbb_test_harness_allocator_overload_H
+
+#include "../tbbmalloc/proxy.h" // for MALLOC_UNIXLIKE_OVERLOAD_ENABLED, MALLOC_ZONE_OVERLOAD_ENABLED
+#include "tbb/tbb_config.h" // for __TBB_WIN8UI_SUPPORT
+
+// Skip configurations with unsupported system malloc overload:
+// skip unsupported MSVCs, WIN8UI and MINGW (it doesn't define _MSC_VER),
+// no support for MSVC 2015 and greater in debug for now,
+// don't use defined(_MSC_VER), because result of using defined() in macro expansion is undefined
+#define MALLOC_WINDOWS_OVERLOAD_ENABLED ((_WIN32||_WIN64) && !__TBB_WIN8UI_SUPPORT && _MSC_VER >= 1500 && !(_MSC_VER >= 1900 && _DEBUG))
+
+// Skip configurations with unsupported system malloc overload:
+// * overload via linking with -lmalloc_proxy is broken in offload,
+// as the library is loaded too late in that mode,
+// * LD_PRELOAD mechanism is broken in offload
+#define HARNESS_SKIP_TEST ((!MALLOC_WINDOWS_OVERLOAD_ENABLED && !MALLOC_UNIXLIKE_OVERLOAD_ENABLED && !MALLOC_ZONE_OVERLOAD_ENABLED) || __TBB_MIC_OFFLOAD)
+
+#endif // tbb_test_harness_allocator_overload_H
diff --git a/src/test/harness_assert.h b/src/test/harness_assert.h
index f3897de..2865ea6 100644
--- a/src/test/harness_assert.h
+++ b/src/test/harness_assert.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Just the assertion portion of the harness.
@@ -27,8 +27,8 @@
 #ifndef harness_assert_H
 #define harness_assert_H
 
-void ReportError( const char* filename, int line, const char* expression, const char* message); 
-void ReportWarning( const char* filename, int line, const char* expression, const char* message); 
+void ReportError( const char* filename, int line, const char* expression, const char* message);
+void ReportWarning( const char* filename, int line, const char* expression, const char* message);
 
 #define ASSERT_CUSTOM(p,message,file,line)  ((p)?(void)0:ReportError(file,line,#p,message))
 #define ASSERT(p,message)                   ASSERT_CUSTOM(p,message,__FILE__,__LINE__)
diff --git a/src/test/harness_bad_expr.h b/src/test/harness_bad_expr.h
index a7cc652..e51e817 100644
--- a/src/test/harness_bad_expr.h
+++ b/src/test/harness_bad_expr.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Declarations for checking __TBB_ASSERT checks inside TBB.
@@ -47,8 +47,8 @@ struct AssertionFailure {
     AssertionFailure( const char* filename, int line, const char* expression, const char* comment );
 };
 
-AssertionFailure::AssertionFailure( const char* filename, int line, const char* expression, const char* comment ) : 
-    message(comment) 
+AssertionFailure::AssertionFailure( const char* filename, int line, const char* expression, const char* comment ) :
+    message(comment)
 {
     ASSERT(filename,"missing filename");
     ASSERT(0<line,"line number must be positive");
@@ -68,7 +68,7 @@ void CheckAssertionFailure( int line, const char* expression, bool okay, const c
     } else if( !message ) {
         REPORT("Line %d, %s failed without a message\n", line, expression );
         abort();
-    } else if( strstr(message,substr)==0 ) {                            
+    } else if( strstr(message,substr)==0 ) {
         REPORT("Line %d, %s failed with message '%s' missing substring '%s'\n", __LINE__, expression, message, substr );
         abort();
     }
diff --git a/src/test/harness_barrier.h b/src/test/harness_barrier.h
index 7fb4011..091496d 100644
--- a/src/test/harness_barrier.h
+++ b/src/test/harness_barrier.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/atomic.h"
@@ -60,8 +60,11 @@ public:
 class SpinBarrier
 {
     unsigned numThreads;
-    tbb::atomic<unsigned> numThreadsFinished; /* threads reached barrier in this epoch */
-    tbb::atomic<unsigned> epoch;   /* how many times this barrier used - XXX move to a separate cache line */
+    tbb::atomic<unsigned> numThreadsFinished; // reached the barrier in this epoch
+    // the number of times the barrier was opened; TODO: move to a separate cache line
+    tbb::atomic<unsigned> epoch;
+    // a throwaway barrier can be used only once, then wait() becomes a no-op
+    bool throwaway;
 
     struct DummyCallback {
         void operator() () const {}
@@ -72,33 +75,39 @@ class SpinBarrier
     SpinBarrier( const SpinBarrier& );    // no copy ctor
     void operator=( const SpinBarrier& ); // no assignment
 public:
-    SpinBarrier( unsigned nthreads = 0 ) { initialize(nthreads); };
-
-    void initialize( unsigned nthreads ) {
+    SpinBarrier( unsigned nthreads = 0, bool throwaway_ = false ) {
+        initialize(nthreads, throwaway_);
+    }
+    void initialize( unsigned nthreads, bool throwaway_ = false ) {
         numThreads = nthreads;
         numThreadsFinished = 0;
         epoch = 0;
-    };
+        throwaway = throwaway_;
+    }
 
-    // onOpenBarrierCallback is called by last thread arrived on a barrier
+    // Returns whether this thread was the last to reach the barrier.
+    // onWaitCallback is called by a thread for waiting;
+    // onOpenBarrierCallback is called by the last thread before unblocking other threads.
     template<typename WaitEq, typename Callback>
     bool custom_wait(const WaitEq &onWaitCallback, const Callback &onOpenBarrierCallback)
-    { // return true if last thread
+    {
+        if (throwaway && epoch)
+            return false;
         unsigned myEpoch = epoch;
         unsigned myNumThreads = numThreads; // read it before the increment
         int threadsLeft = myNumThreads - numThreadsFinished.fetch_and_increment() - 1;
         ASSERT(threadsLeft>=0, "Broken barrier");
         if (threadsLeft > 0) {
-            /* not the last threading reaching barrier, wait until epoch changes & return 0 */
+            /* this thread is not the last; wait until the epoch changes & return false */
             onWaitCallback(epoch, myEpoch);
             return false;
         }
+        /* This thread is the last one at the barrier in this epoch */
         onOpenBarrierCallback();
-        /* No more threads left to enter, so I'm the last one reaching this epoch;
-           reset the barrier, increment epoch, and return non-zero */
+        /* reset the barrier, increment the epoch, and return true */
         threadsLeft = numThreadsFinished -= myNumThreads;
         ASSERT( threadsLeft == 0, "Broken barrier");
-        /* wakes up threads waiting to exit this epoch */
+        /* wakes up threads waiting to exit in this epoch */
         myEpoch -= epoch++;
         ASSERT( myEpoch == 0, "Broken barrier");
         return true;
@@ -112,7 +121,7 @@ public:
         ASSERT( n_seconds >= 0, msg); // TODO: refactor to avoid passing msg here and rising assertion
         return is_last;
     }
-    //! onOpenBarrierCallback is called by last thread arrived on a barrier
+    // onOpenBarrierCallback is called by the last thread before unblocking other threads.
     template<typename Callback>
     bool wait(const Callback &onOpenBarrierCallback) {
         return custom_wait(WaitWhileEq(), onOpenBarrierCallback);
diff --git a/src/test/harness_checktype.h b/src/test/harness_checktype.h
index 25ae08c..ab3978d 100644
--- a/src/test/harness_checktype.h
+++ b/src/test/harness_checktype.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef tbb_tests_harness_checktype_H
@@ -53,8 +53,8 @@ public:
     operator int() const { return (int)my_id(); }
     check_type& operator++() { ++id; return *this;; }
 
-    ~check_type() { 
-        AssertLive(); 
+    ~check_type() {
+        AssertLive();
         --check_type_counter;
         ASSERT(check_type_counter >= 0, "too many destructions");
     }
diff --git a/src/test/harness_concurrency.h b/src/test/harness_concurrency.h
index 9b283f8..d833401 100644
--- a/src/test/harness_concurrency.h
+++ b/src/test/harness_concurrency.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef tbb_tests_harness_concurrency_H
@@ -63,7 +63,7 @@ namespace Harness {
             return maxProcs;
 
 #if _WIN32||_WIN64
-        ASSERT( max_threads <= 64 , "LimitNumberOfThreads doesn't support max_threads to be more than 64 on Windows." ); 
+        ASSERT( max_threads <= 64 , "LimitNumberOfThreads doesn't support max_threads to be more than 64 on Windows." );
         DWORD_PTR mask = 1;
         for ( int i = 1; i < max_threads; ++i )
             mask |= mask << 1;
diff --git a/src/test/harness_concurrency_checker.h b/src/test/harness_concurrency_checker.h
deleted file mode 100644
index e795f10..0000000
--- a/src/test/harness_concurrency_checker.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
-*/
-
-#ifndef tbb_tests_harness_concurrency_checker_H
-#define tbb_tests_harness_concurrency_checker_H
-
-#include "harness_assert.h"
-#include "harness_barrier.h"
-#include "tbb/atomic.h"
-#include "tbb/mutex.h"
-#include "tbb/task.h"
-
-namespace Harness {
-
-/* note that if concurrency level is below than expected,
-   the execution takes WAIT_SEC seconds */
-class ConcurrencyChecker : public tbb::task {
-public:
-    struct State {
-        Harness::SpinBarrier barrier;
-        Harness::SpinBarrier join;
-        const double         wait_sec;
-        tbb::atomic<bool>    result;
-
-        State(unsigned nthreads, double w_s)
-            : barrier(nthreads), join(nthreads), wait_sec(w_s) {
-            result = true;
-        }
-        void check() {
-            if( !barrier.timed_wait_noerror(wait_sec) )
-                result = false;
-        }
-    };
-
-    ConcurrencyChecker(State *s) : st(s) { }
-
-    tbb::task* execute() {
-        if( st->result ) // skip if the time-out is detected already
-            st->check();
-        st->join.signal_nowait();
-        return NULL;
-    }
-private:
-    State *st;
-};
-
-bool CanReachConcurrencyLevel(int conc_level, double wait_timeout_sec = 30.)
-{
-    static tbb::mutex global_mutex;
-    // prevent concurrent calls to this function from deadlock due to the barrier
-    tbb::mutex::scoped_lock lock(global_mutex);
-    ConcurrencyChecker::State state(conc_level, wait_timeout_sec);
-
-    for( int i=1; i<conc_level; i++)
-        tbb::task::enqueue( *new(tbb::task::allocate_root()) ConcurrencyChecker(&state) );
-    state.check();
-    state.join.wait();
-    return state.result;
-}
-
-} // namespace Harness
-
-#endif /* tbb_tests_harness_concurrency_checker_H */
diff --git a/src/test/harness_concurrency_tracker.h b/src/test/harness_concurrency_tracker.h
index dacee0f..78cac95 100644
--- a/src/test/harness_concurrency_tracker.h
+++ b/src/test/harness_concurrency_tracker.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef tbb_tests_harness_concurrency_tracker_H
@@ -25,8 +25,16 @@
 #include "harness_barrier.h"
 #include "tbb/atomic.h"
 #include "../tbb/tls.h"
-// Note: This file is used by RML tests which do not link TBB
-// Thus only header-only TBB features can be included
+// Note: This file is used by RML tests which do not link TBB.
+// Functionality that requires TBB binaries must be guarded by !__TBB_NO_IMPLICIT_LINKAGE
+#if !defined(__TBB_NO_IMPLICIT_LINKAGE)
+#include "tbb/mutex.h"
+#include "tbb/task.h"
+#include "tbb/combinable.h"
+#include "tbb/parallel_for.h"
+#include <functional> // for std::plus
+#include "harness.h" // for Harness::NoCopy
+#endif
 
 namespace Harness {
 
@@ -75,6 +83,92 @@ public:
     }
 }; // ConcurrencyTracker
 
+#if !defined(__TBB_NO_IMPLICIT_LINKAGE)
+struct ExactConcurrencyLevel : NoCopy {
+    typedef tbb::combinable<size_t> Combinable;
+private:
+    Harness::SpinBarrier       *myBarrier;
+    // count unique worker threads
+    Combinable                 *myUniqueThreads;
+    mutable tbb::atomic<size_t> myActiveBodyCnt;
+    // output parameter for parallel_for body to report that max is reached
+    mutable bool                myReachedMax;
+    // zero timeout means no barrier is used during concurrency level detection
+    const double                myTimeout;
+    const size_t                myConcLevel;
+    const bool                  myCrashOnFail;
+
+    static tbb::mutex global_mutex;
+
+    ExactConcurrencyLevel(double timeout, size_t concLevel, Combinable *uniq, bool crashOnFail) :
+        myBarrier(NULL), myUniqueThreads(uniq), myReachedMax(false),
+        myTimeout(timeout), myConcLevel(concLevel), myCrashOnFail(crashOnFail) {
+        myActiveBodyCnt = 0;
+    }
+    bool run() {
+        const int LOOP_ITERS = 100;
+        tbb::combinable<size_t> uniq;
+        Harness::SpinBarrier barrier((unsigned)myConcLevel, /*throwaway=*/true);
+        if (myTimeout != 0.)
+            myBarrier = &barrier;
+        if (!myUniqueThreads)
+            myUniqueThreads = &uniq;
+        tbb::parallel_for((size_t)0, myConcLevel*LOOP_ITERS, *this, tbb::simple_partitioner());
+        return myReachedMax;
+    }
+public:
+    void operator()(size_t) const {
+        size_t v = ++myActiveBodyCnt;
+        ASSERT(v <= myConcLevel, "Number of active bodies is too high.");
+        if (v == myConcLevel) // record that the max expected concurrency was observed
+            myReachedMax = true;
+        // try to get barrier when 1st time in the thread
+        if (myBarrier && !myBarrier->timed_wait_noerror(myTimeout))
+            ASSERT(!myCrashOnFail, "Timeout was detected.");
+
+        myUniqueThreads->local() = 1;
+        for (int i=0; i<100; i++)
+            __TBB_Pause(1);
+        --myActiveBodyCnt;
+    }
+
+    enum Mode {
+        None,
+        // When multiple blocking checks are performed, there might be not enough
+        // concurrency for all of them. Serialize check() calls.
+        Serialize
+    };
+
+    // check that we have never got more than concLevel threads,
+    // and that in some moment we saw exactly concLevel threads
+    static void check(size_t concLevel, Mode m = None) {
+        ExactConcurrencyLevel o(30., concLevel, NULL, /*crashOnFail=*/true);
+
+        tbb::mutex::scoped_lock lock;
+        if (m == Serialize)
+            lock.acquire(global_mutex);
+        bool ok = o.run();
+        ASSERT(ok, NULL);
+    }
+
+    static bool isEqual(size_t concLevel) {
+        ExactConcurrencyLevel o(3., concLevel, NULL, /*crashOnFail=*/false);
+        return o.run();
+    }
+
+    static void checkLessOrEqual(size_t concLevel, tbb::combinable<size_t> *unique) {
+        ExactConcurrencyLevel o(0., concLevel, unique, /*crashOnFail=*/true);
+
+        o.run(); // ignore result, as without a barrier it is not reliable
+        const size_t num = unique->combine(std::plus<size_t>());
+        ASSERT(num<=concLevel, "Too many workers observed.");
+    }
+};
+
+tbb::mutex ExactConcurrencyLevel::global_mutex;
+
+#endif /* !defined(__TBB_NO_IMPLICIT_LINKAGE) */
+
 } // namespace Harness
 
 #endif /* tbb_tests_harness_concurrency_tracker_H */
diff --git a/src/test/harness_cpu.h b/src/test/harness_cpu.h
index bc2b812..e816a7c 100644
--- a/src/test/harness_cpu.h
+++ b/src/test/harness_cpu.h
@@ -1,31 +1,29 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Declarations for simple estimate of CPU time being used by a program.
 // This header is an optional part of the test harness.
 // It assumes that "harness_assert.h" has already been included.
 
-#if _WIN32 
-#if !_XBOX
+#if _WIN32
     #include <windows.h>
-#endif
 #else
     #include <sys/time.h>
     #include <sys/resource.h>
@@ -33,8 +31,8 @@
 
 //! Return time (in seconds) spent by the current process in user mode.
 /*  Returns 0 if not implemented on platform. */
-static double GetCPUUserTime() { 
-#if _XBOX || __TBB_WIN8UI_SUPPORT
+static double GetCPUUserTime() {
+#if __TBB_WIN8UI_SUPPORT
     return 0;
 #elif _WIN32
     FILETIME my_times[4];
@@ -51,7 +49,7 @@ static double GetCPUUserTime() {
     //   getrusage(RUSAGE_SELF, ...) that is used now only returns info for the calling thread;
     //   getrusage(RUSAGE_CHILDREN, ...) only counts for finished children threads;
     //   tms_utime and tms_cutime got with times(struct tms*) are equivalent to the above items;
-    //   finally, /proc/self/task/<task_id>/stat doesn't exist on older kernels 
+    //   finally, /proc/self/task/<task_id>/stat doesn't exist on older kernels
     //      and it isn't quite convenient to read it for every task_id.
 
     struct rusage resources;
@@ -87,7 +85,7 @@ static void TestCPUUserTime( int nthreads, int nactive = 1 ) {
     while( (usrtime_delta=GetCPUUserTime()-lastusrtime) < THRESHOLD ) {
         for ( int i = 0; i < 1000; ++i ) ++k; // do fake work without which user time can stall
         if ( (waittime_delta = (tbb::tick_count::now()-stamp).seconds()) > maximal_waittime ) {
-            REPORT( "Warning: %.2f sec elapsed but user mode time is still below its threshold (%g < %g)\n", 
+            REPORT( "Warning: %.2f sec elapsed but user mode time is still below its threshold (%g < %g)\n",
                     waittime_delta, usrtime_delta, THRESHOLD );
             break;
         }
@@ -96,7 +94,7 @@ static void TestCPUUserTime( int nthreads, int nactive = 1 ) {
 
     // Wait for workers to go sleep
     stamp = tbb::tick_count::now();
-    while( ((waittime_delta=(tbb::tick_count::now()-stamp).seconds()) < minimal_waittime) 
+    while( ((waittime_delta=(tbb::tick_count::now()-stamp).seconds()) < minimal_waittime)
             || ((usrtime_delta=GetCPUUserTime()-lastusrtime) < THRESHOLD) )
     {
         for ( int i = 0; i < 1000; ++i ) ++k; // do fake work without which user time can stall
diff --git a/src/test/harness_defs.h b/src/test/harness_defs.h
index 054dd44..79bc5e7 100644
--- a/src/test/harness_defs.h
+++ b/src/test/harness_defs.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_harness_defs_H
@@ -32,7 +32,7 @@
 #define __TBB_TEST_SKIP_PIC_MODE 0
 #endif
 
-// no need to test gcc builtins mode on ICC
+// no need to test GCC builtins mode on ICC
 #define __TBB_TEST_SKIP_GCC_BUILTINS_MODE ( __TBB_TEST_BUILTINS && (!__TBB_GCC_BUILTIN_ATOMICS_PRESENT || __INTEL_COMPILER) )
 
 #define __TBB_TEST_SKIP_ICC_BUILTINS_MODE ( __TBB_TEST_BUILTINS && !__TBB_ICC_BUILTIN_ATOMICS_PRESENT )
@@ -47,9 +47,6 @@
   #define TBB_USE_ICC_BUILTINS         ( __TBB_TEST_BUILTINS && __TBB_ICC_BUILTIN_ATOMICS_PRESENT )
 #endif
 
-//ICC has a bug in assumptions of the modifications made via atomic pointer
-#define __TBB_ICC_BUILTIN_ATOMICS_POINTER_ALIASING_BROKEN (TBB_USE_ICC_BUILTINS &&  __INTEL_COMPILER < 1400 && __INTEL_COMPILER > 1200)
-
 #if (_WIN32 && !__TBB_WIN8UI_SUPPORT) || (__linux__ && !__ANDROID__ && !__bg__) || __FreeBSD_version >= 701000
 #define __TBB_TEST_SKIP_AFFINITY 0
 #else
@@ -58,11 +55,11 @@
 
 #if __INTEL_COMPILER
   #define __TBB_CPP11_REFERENCE_WRAPPER_PRESENT ( _TBB_CPP0X && __INTEL_COMPILER >= 1200 && \
-    ( _MSC_VER >= 1600 || __TBB_GCC_VERSION >= 40400 || ( __clang__ && __cplusplus >= 201103L ) ) )
+    ( _MSC_VER >= 1600 || __TBB_GLIBCXX_VERSION >= 40400 || ( __clang__ && __cplusplus >= 201103L ) ) )
   #define __TBB_RANGE_BASED_FOR_PRESENT ( _TBB_CPP0X && __INTEL_COMPILER >= 1300 )
   #define __TBB_SCOPED_ENUM_PRESENT ( _TBB_CPP0X && __INTEL_COMPILER > 1100 )
 #elif __clang__
-  #define __TBB_CPP11_REFERENCE_WRAPPER_PRESENT ( _TBB_CPP0X && __cplusplus >= 201103L && (__TBB_GCC_VERSION >= 40400 || _LIBCPP_VERSION) )
+  #define __TBB_CPP11_REFERENCE_WRAPPER_PRESENT ( _TBB_CPP0X && __cplusplus >= 201103L && (__TBB_GLIBCXX_VERSION >= 40400 || _LIBCPP_VERSION) )
   #define __TBB_RANGE_BASED_FOR_PRESENT ( _TBB_CPP0X && __has_feature(__cxx_range_for) )
   #define __TBB_SCOPED_ENUM_PRESENT ( _TBB_CPP0X && __has_feature(cxx_strong_enums) )
 #elif __GNUC__
@@ -76,30 +73,41 @@
 #endif
 
 //Due to libc++ limitations in C++03 mode, do not pass rvalues to std::make_shared()
-#define __TBB_CPP11_SMART_POINTERS_PRESENT ( _MSC_VER >= 1600 || _TBB_CPP0X && __TBB_GCC_VERSION >= 40400 || _LIBCPP_VERSION)
+#define __TBB_CPP11_SMART_POINTERS_PRESENT ( _MSC_VER >= 1600 || _TBB_CPP0X && __TBB_GLIBCXX_VERSION >= 40400 || _LIBCPP_VERSION)
 #define __TBB_LAMBDAS_PRESENT __TBB_CPP11_LAMBDAS_PRESENT // TODO: replace the old macro in tests
 #define __TBB_TEST_SKIP_LAMBDA (__TBB_ICC_13_0_CPP11_STDLIB_SUPPORT_BROKEN || !__TBB_CPP11_LAMBDAS_PRESENT)
 
 #if __GNUC__ && __ANDROID__
-  /** Android GCC does not support _thread keyword **/
+  /** On Android* OS, GCC does not support _thread keyword **/
   #define __TBB_THREAD_LOCAL_VARIABLES_PRESENT 0
 #else
   #define __TBB_THREAD_LOCAL_VARIABLES_PRESENT 1
 #endif
 
+//ICC has a bug in assumptions of the modifications made via atomic pointer
+#define __TBB_ICC_BUILTIN_ATOMICS_POINTER_ALIASING_BROKEN (TBB_USE_ICC_BUILTINS &&  __INTEL_COMPILER < 1400 && __INTEL_COMPILER > 1200)
+
+//clang on Android/IA-32 fails on exception thrown from static move constructor
+#define __TBB_CPP11_EXCEPTION_IN_STATIC_TEST_BROKEN (__ANDROID__ && __SIZEOF_POINTER__==4 && __clang__)
+
 //MSVC 2013 is unable to properly resolve call to overloaded operator= with std::initializer_list argument for std::pair list elements
-#define __TBB_CPP11_INIT_LIST_ASSIGN_OP_RESOLUTION_BROKEN (_MSC_FULL_VER <= 180030723 && _MSC_VER && !__INTEL_COMPILER)
+//clang on Android/IA-32 fails on "std::vector<std::pair<int,int>> vd{{1,1},{1,1},{1,1}};" line in release mode
+#define __TBB_CPP11_INIT_LIST_TEST_BROKEN (_MSC_VER <= 1800 && _MSC_VER && !__INTEL_COMPILER) || (__ANDROID__ && __TBB_x86_32 && __clang__)
 //MSVC 2013 is unable to manage lifetime of temporary objects passed to a std::initializer_list constructor properly
 #define __TBB_CPP11_INIT_LIST_TEMP_OBJS_LIFETIME_BROKEN (_MSC_FULL_VER < 180030501 && _MSC_VER && !__INTEL_COMPILER)
-//Implementation of C++11 std::placeholders in libstdc++ coming with gcc prior to 4.5 reveals bug in Intel Compiler 13 causing "multiple definition" link errors.
-#define __TBB_CPP11_STD_PLACEHOLDERS_LINKAGE_BROKEN ((__INTEL_COMPILER == 1300 || __INTEL_COMPILER == 1310 )&& __GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION < 40500)
 
-//some compilers do not generate implicitly move constructor and assignment operator, as this feature (r-value reference 3.0) was added later
-#if __clang__ &&  !__INTEL_COMPILER
-  #define __TBB_CPP11_IMPLICIT_MOVE_MEMBERS_GENERATION_BROKEN !__has_feature(cxx_implicit_moves)
-#else
-  #define __TBB_CPP11_IMPLICIT_MOVE_MEMBERS_GENERATION_BROKEN  (__TBB_CPP11_RVALUE_REF_PRESENT && ( !__INTEL_COMPILER && _MSC_VER && _MSC_VER <=1800 || __INTEL_COMPILER && __INTEL_COMPILER < 1400))
-#endif
+//Implementation of C++11 std::placeholders in libstdc++ coming with GCC prior to 4.5 reveals bug in Intel(R) C++ Compiler 13 causing "multiple definition" link errors.
+#define __TBB_CPP11_STD_PLACEHOLDERS_LINKAGE_BROKEN ((__INTEL_COMPILER == 1300 || __INTEL_COMPILER == 1310 )&& __GXX_EXPERIMENTAL_CXX0X__ && __TBB_GLIBCXX_VERSION < 40500)
+
+// Intel C++ Compiler has an issue when a scoped enum with a specified underlying type has negative values.
+#define __TBB_ICC_SCOPED_ENUM_WITH_UNDERLYING_TYPE_NEGATIVE_VALUE_BROKEN ( _MSC_VER && !__TBB_DEBUG && __INTEL_COMPILER && __INTEL_COMPILER <= 1500 )
+// Intel C++ Compiler has an issue with __atomic_load_explicit from a scoped enum with a specified underlying type.
+#define __TBB_ICC_SCOPED_ENUM_WITH_UNDERLYING_TYPE_ATOMIC_LOAD_BROKEN ( TBB_USE_ICC_BUILTINS && !__TBB_DEBUG && __INTEL_COMPILER && __INTEL_COMPILER <= 1500 )
+
+//Unable to use constexpr member functions to initialize compile time constants
+#define __TBB_CONSTEXPR_MEMBER_FUNCTION_BROKEN (__INTEL_COMPILER == 1500)
+// MSVC 2015 does not do compile-time initialization of static variables with constexpr constructors in debug mode
+#define __TBB_STATIC_CONSTEXPR_INIT_BROKEN (_MSC_VER==1900 && !__INTEL_COMPILER && _DEBUG)
 
 #if __GNUC__ && __ANDROID__
   #define __TBB_EXCEPTION_TYPE_INFO_BROKEN ( __TBB_GCC_VERSION < 40600 )
@@ -111,17 +119,38 @@
 
 //! a function ptr cannot be converted to const T& template argument without explicit cast
 #define __TBB_FUNC_PTR_AS_TEMPL_PARAM_BROKEN ( ((__linux__ || __APPLE__) && __INTEL_COMPILER && __INTEL_COMPILER < 1100) || __SUNPRO_CC )
+
 #define __TBB_UNQUALIFIED_CALL_OF_DTOR_BROKEN (__GNUC__==3 && __GNUC_MINOR__<=3)
 
 #define __TBB_CAS_8_CODEGEN_BROKEN (__TBB_x86_32 && __PIC__ && __TBB_GCC_VERSION == 40102 && !__INTEL_COMPILER)
 
-#define __TBB_THROW_FROM_DTOR_BROKEN (__clang__ &&  (__apple_build_version__ &&  __apple_build_version__ < 5000279 || __TBB_CLANG_VERSION && __TBB_CLANG_VERSION < 50000))
+#define __TBB_THROW_FROM_DTOR_BROKEN (__clang__ && __apple_build_version__ && __apple_build_version__ < 5000279)
+
+//std::uncaught_exception is broken on some version of stdlibc++ (it returns true with no active exception)
+#define __TBB_STD_UNCAUGHT_EXCEPTION_BROKEN (__TBB_GLIBCXX_VERSION == 40407)
 
 #if __TBB_LIBSTDCPP_EXCEPTION_HEADERS_BROKEN
   #define _EXCEPTION_PTR_H /* prevents exception_ptr.h inclusion */
   #define _GLIBCXX_NESTED_EXCEPTION_H /* prevents nested_exception.h inclusion */
 #endif
 
+// TODO: Investigate the cases that require this macro.
+#define __TBB_COMPLICATED_ADL_BROKEN ( __GNUC__ && __TBB_GCC_VERSION < 40400 )
+
+// Intel C++ Compiler fails to compile the comparison of tuples in some cases
+#if __INTEL_COMPILER && __INTEL_COMPILER < 1700
+  #define __TBB_TUPLE_COMPARISON_COMPILATION_BROKEN (__TBB_GLIBCXX_VERSION >= 40800 || __MIC__)
+#endif
+
+// Intel C++ Compiler fails to compile std::reference in some cases
+#if __INTEL_COMPILER && __INTEL_COMPILER < 1600 || __INTEL_COMPILER == 1600 && __INTEL_COMPILER_UPDATE <= 1
+  #define __TBB_REFERENCE_WRAPPER_COMPILATION_BROKEN (__TBB_GLIBCXX_VERSION >= 40800 && __TBB_GLIBCXX_VERSION <= 50101 || __MIC__)
+#endif
+
+// Intel C++ Compiler fails to generate non-throwing move members for a class inherited from template
+#define __TBB_NOTHROW_MOVE_MEMBERS_IMPLICIT_GENERATION_BROKEN \
+    (__INTEL_COMPILER==1700 || __INTEL_COMPILER==1600 || __INTEL_COMPILER==1500 && __INTEL_COMPILER_UPDATE>3)
+
 // The tuple-based tests with more inputs take a long time to compile.  If changes
 // are made to the tuple implementation or any switch that controls it, or if testing
 // with a new platform implementation of std::tuple, the test should be compiled with
@@ -153,6 +182,9 @@
     #endif
 #endif
 
+// std::is_copy_constructible<T>::value returns 'true' for non copyable type when MSVC compiler is used.
+#define __TBB_IS_COPY_CONSTRUCTIBLE_BROKEN ( _MSC_VER && (_MSC_VER <= 1700 || _MSC_VER <= 1800 && !__INTEL_COMPILER) )
+
 namespace Harness {
     //! Utility template function to prevent "unused" warnings by various compilers.
     template<typename T> void suppress_unused_warning( const T& ) {}
diff --git a/src/test/harness_dynamic_libs.h b/src/test/harness_dynamic_libs.h
index 5384e6c..dcf856a 100644
--- a/src/test/harness_dynamic_libs.h
+++ b/src/test/harness_dynamic_libs.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/tbb_config.h"
@@ -80,7 +80,7 @@ typedef void *LIBRARY_HANDLE;
 LIBRARY_HANDLE OpenLibrary(const char *name)
 {
 #if _WIN32 || _WIN64
-#if __TBB_WIN8UI_SUPPORT	
+#if __TBB_WIN8UI_SUPPORT
     TCHAR wlibrary[MAX_PATH];
     if ( MultiByteToWideChar(CP_UTF8, 0, name, -1, wlibrary, MAX_PATH) == 0 ) return false;
     return :: LoadPackagedLibrary( wlibrary, 0 );
diff --git a/src/test/harness_eh.h b/src/test/harness_eh.h
index dc70e4a..093538e 100644
--- a/src/test/harness_eh.h
+++ b/src/test/harness_eh.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include <typeinfo>
@@ -66,8 +66,7 @@ tbb::atomic<intptr_t> g_NumExceptionsCaught;
 #if USE_TASK_SCHEDULER_OBSERVER
 class eh_test_observer : public tbb::task_scheduler_observer {
 public:
-    /*override*/
-    void on_scheduler_entry(bool is_worker) {
+    void on_scheduler_entry(bool is_worker) __TBB_override {
         if(is_worker) {  // we've already counted the master
             size_t p = ++g_ActualCurrentThreads;
             size_t q = g_ActualMaxThreads;
@@ -79,8 +78,7 @@ public:
             // size_t q = g_ActualMaxThreads;
         }
     }
-    /*override*/
-    void on_scheduler_exit(bool is_worker) {
+    void on_scheduler_exit(bool is_worker) __TBB_override {
         if(is_worker) {
             --g_ActualCurrentThreads;
         }
@@ -114,7 +112,7 @@ class test_exception : public std::exception {
 public:
     test_exception ( const char* description ) : my_description(description) {}
 
-    const char* what() const throw() { return my_description; }
+    const char* what() const throw() __TBB_override { return my_description; }
 };
 
 class solitary_test_exception : public test_exception {
@@ -134,7 +132,7 @@ public:
 
 #if HARNESS_EH_SIMPLE_MODE
 
-static void ThrowTestException () { 
+static void ThrowTestException () {
     ++g_ExceptionsThrown;
     throw test_exception(EXCEPTION_DESCR);
 }
@@ -144,10 +142,10 @@ static void ThrowTestException () {
 static void ThrowTestException ( intptr_t threshold ) {
     bool inMaster = (Harness::CurrentTid() == g_Master);
     if ( !g_ThrowException ||   // if we're not supposed to throw
-            (!g_Flog &&         // if we're not catching throw in bodies and 
+            (!g_Flog &&         // if we're not catching throw in bodies and
              (g_ExceptionInMaster ^ inMaster)) ) { // we're the master and not expected to throw
               // or are the master and the master is not the one to throw (??)
-        return; 
+        return;
     }
     while ( Existed() < threshold )
         __TBB_Yield();
@@ -271,7 +269,7 @@ class CancellatorTask : public tbb::task {
     tbb::task_group_context &m_groupToCancel;
     intptr_t m_cancellationThreshold;
 
-    tbb::task* execute () {
+    tbb::task* execute () __TBB_override {
         Harness::ConcurrencyTracker ct;
         s_Ready = true;
         while ( g_CurExecuted < m_cancellationThreshold )
diff --git a/src/test/harness_fp.h b/src/test/harness_fp.h
index 08df60e..554db84 100644
--- a/src/test/harness_fp.h
+++ b/src/test/harness_fp.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // include system header to prevent standard library to be included under private=public first time
diff --git a/src/test/harness_graph.h b/src/test/harness_graph.h
index 58712fb..3c90826 100644
--- a/src/test/harness_graph.h
+++ b/src/test/harness_graph.h
@@ -1,24 +1,24 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
-/** @file harness_graph.cpp     
+/** @file harness_graph.cpp
     This contains common helper classes and functions for testing graph nodes
 **/
 
@@ -33,7 +33,9 @@
 #include "tbb/task.h"
 #include "tbb/task_scheduler_init.h"
 
-#define WAIT_MAX 100000
+using tbb::flow::internal::SUCCESSFULLY_ENQUEUED;
+
+#define WAIT_MAX 2000000
 #define BACKOFF_WAIT(ex,msg) \
 { \
     int wait_cnt = 0; \
@@ -70,7 +72,7 @@ struct convertor {
 template<typename InputType>
 struct convertor<InputType,tbb::flow::continue_msg> {
     static tbb::flow::continue_msg convert_value(const InputType &/*i*/) {
-        return tbb::flow::continue_msg(); 
+        return tbb::flow::continue_msg();
     }
 };
 
@@ -154,11 +156,11 @@ struct harness_graph_executor {
     static inline OutputType func( InputType v ) {
         size_t c; // Declaration separate from initialization to avoid ICC internal error on IA-64 architecture
         c = current_executors.fetch_and_increment();
-        ASSERT( max_executors == 0 || c <= max_executors, NULL ); 
+        ASSERT( max_executors == 0 || c <= max_executors, NULL );
         ++execute_count;
         OutputType v2 = (*fptr)(v);
         current_executors.fetch_and_decrement();
-        return v2; 
+        return v2;
     }
 
     template< typename RW >
@@ -177,7 +179,7 @@ struct harness_graph_executor {
         OutputType operator()( InputType i ) {
            typename RW::scoped_lock l( harness_graph_executor::mutex_holder<RW>::mutex, /*write=*/false );
            my_execute_count.fetch_and_increment();
-           return harness_graph_executor::func(i); 
+           return harness_graph_executor::func(i);
         }
     };
     typedef tfunctor<tbb::null_rw_mutex> functor;
@@ -204,7 +206,7 @@ struct harness_graph_multifunction_executor {
     static inline void func( const InputType &v, ports_type &p ) {
         size_t c; // Declaration separate from initialization to avoid ICC internal error on IA-64 architecture
         c = current_executors.fetch_and_increment();
-        ASSERT( max_executors == 0 || c <= max_executors, NULL ); 
+        ASSERT( max_executors == 0 || c <= max_executors, NULL );
         ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 1, NULL);
         ++execute_count;
         (*fptr)(v,p);
@@ -287,9 +289,9 @@ struct harness_counting_receiver : public tbb::flow::receiver<T>, NoCopy {
        num_copies = c;
     }
 
-    /* override */ tbb::task *try_put_task( const T & ) {
+    tbb::task *try_put_task( const T & ) __TBB_override {
       ++my_count;
-      return const_cast<tbb::task *>(tbb::flow::interface7::SUCCESSFULLY_ENQUEUED);
+      return const_cast<tbb::task *>(SUCCESSFULLY_ENQUEUED);
     }
 
     void validate() {
@@ -300,18 +302,15 @@ struct harness_counting_receiver : public tbb::flow::receiver<T>, NoCopy {
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     typedef typename tbb::flow::receiver<T>::built_predecessors_type built_predecessors_type;
     built_predecessors_type mbp;
-    /*override*/ built_predecessors_type &built_predecessors() { return mbp; }
+    built_predecessors_type &built_predecessors() __TBB_override { return mbp; }
     typedef typename tbb::flow::receiver<T>::predecessor_list_type predecessor_list_type;
-    /*override*/void internal_add_built_predecessor(tbb::flow::sender<T> &) {}
-    /*override*/void internal_delete_built_predecessor(tbb::flow::sender<T> &) {}
-    /*override*/void copy_predecessors(predecessor_list_type &) { }
-    /*override*/size_t predecessor_count() { return 0; }
-    /*override*/void clear_predecessors() { my_count = 0; };
-    /*override*/void reset_receiver(tbb::flow::reset_flags /*f*/) { my_count = 0; }
-#else
-    /*override*/void reset_receiver() { my_count = 0; }
+    typedef typename tbb::flow::receiver<T>::predecessor_type predecessor_type;
+    void internal_add_built_predecessor(predecessor_type &) __TBB_override {}
+    void internal_delete_built_predecessor(predecessor_type &) __TBB_override {}
+    void copy_predecessors(predecessor_list_type &) __TBB_override { }
+    size_t predecessor_count() __TBB_override { return 0; }
 #endif
-
+    void reset_receiver(tbb::flow::reset_flags /*f*/) __TBB_override { my_count = 0; }
 };
 
 //! Counts the number of puts received
@@ -340,7 +339,7 @@ struct harness_mapped_receiver : public tbb::flow::receiver<T>, NoCopy {
        my_map = new map_type;
     }
 
-    /* override */ tbb::task * try_put_task( const T &t ) {
+    tbb::task * try_put_task( const T &t ) __TBB_override {
       if ( my_map ) {
           tbb::atomic<size_t> a;
           a = 1;
@@ -352,7 +351,7 @@ struct harness_mapped_receiver : public tbb::flow::receiver<T>, NoCopy {
       } else {
           ++my_count;
       }
-      return const_cast<tbb::task *>(tbb::flow::interface7::SUCCESSFULLY_ENQUEUED);
+      return const_cast<tbb::task *>(SUCCESSFULLY_ENQUEUED);
     }
 
     void validate() {
@@ -369,17 +368,19 @@ struct harness_mapped_receiver : public tbb::flow::receiver<T>, NoCopy {
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     typedef typename tbb::flow::receiver<T>::built_predecessors_type built_predecessors_type;
     built_predecessors_type mbp;
-    /*override*/ built_predecessors_type &built_predecessors() { return mbp; }
+    built_predecessors_type &built_predecessors() __TBB_override { return mbp; }
     typedef typename tbb::flow::receiver<T>::predecessor_list_type predecessor_list_type;
-    /*override*/void internal_add_built_predecessor(tbb::flow::sender<T> &) {}
-    /*override*/void internal_delete_built_predecessor(tbb::flow::sender<T> &) {}
-    /*override*/void copy_predecessors(predecessor_list_type &) { }
-    /*override*/size_t predecessor_count() { return 0; }
-    /*override*/void clear_predecessors() { my_count = 0; };
-    /*override*/void reset_receiver(tbb::flow::reset_flags /*f*/) { my_count = 0; if(my_map) delete my_map; my_map = new map_type; }
-#else
-    /*override*/void reset_receiver() { my_count = 0; if(my_map) delete my_map; my_map = new map_type; }
+    typedef typename tbb::flow::receiver<T>::predecessor_type predecessor_type;
+    void internal_add_built_predecessor(predecessor_type &) __TBB_override {}
+    void internal_delete_built_predecessor(predecessor_type &) __TBB_override {}
+    void copy_predecessors(predecessor_list_type &) __TBB_override { }
+    size_t predecessor_count() __TBB_override { return 0; }
 #endif
+    void reset_receiver(tbb::flow::reset_flags /*f*/) __TBB_override {
+        my_count = 0;
+        if(my_map) delete my_map;
+        my_map = new map_type;
+    }
 
 };
 
@@ -387,7 +388,7 @@ struct harness_mapped_receiver : public tbb::flow::receiver<T>, NoCopy {
 template< typename T >
 struct harness_counting_sender : public tbb::flow::sender<T>, NoCopy {
 
-    typedef tbb::flow::receiver<T> successor_type;
+    typedef typename tbb::flow::sender<T>::successor_type successor_type;
     tbb::atomic< successor_type * > my_receiver;
     tbb::atomic< size_t > my_count;
     tbb::atomic< size_t > my_received;
@@ -405,12 +406,12 @@ struct harness_counting_sender : public tbb::flow::sender<T>, NoCopy {
        my_received = 0;
     }
 
-    /* override */ bool register_successor( successor_type &r ) {
+    bool register_successor( successor_type &r ) __TBB_override {
         my_receiver = &r;
         return true;
     }
 
-    /* override */ bool remove_successor( successor_type &r ) {
+    bool remove_successor( successor_type &r ) __TBB_override {
         successor_type *s = my_receiver.fetch_and_store( NULL );
         ASSERT( s == &r, NULL );
         return true;
@@ -420,15 +421,14 @@ struct harness_counting_sender : public tbb::flow::sender<T>, NoCopy {
     typedef typename tbb::flow::sender<T>::successor_list_type successor_list_type;
     typedef typename tbb::flow::sender<T>::built_successors_type built_successors_type;
     built_successors_type bst;
-    /*override*/ built_successors_type &built_successors() { return bst; }
-    /* override */ void internal_add_built_successor( successor_type &) {}
-    /* override */ void internal_delete_built_successor( successor_type &) {}
-    /* override */ void copy_successors(successor_list_type &) { }
-    /*override*/ void clear_successors() { my_receiver = NULL; }
-    /* override */ size_t successor_count() { return 0; }
+    built_successors_type &built_successors() __TBB_override { return bst; }
+    void internal_add_built_successor( successor_type &) __TBB_override {}
+    void internal_delete_built_successor( successor_type &) __TBB_override {}
+    void copy_successors(successor_list_type &) __TBB_override { }
+    size_t successor_count() __TBB_override { return 0; }
 #endif
 
-    /* override */ bool try_get( T & v ) { 
+    bool try_get( T & v ) __TBB_override {
         size_t i = my_count.fetch_and_increment();
         if ( i < my_limit ) {
            v = T( i );
@@ -457,16 +457,16 @@ struct harness_counting_sender : public tbb::flow::sender<T>, NoCopy {
         while ( s->try_put( T(i) ) ) {
             ++my_received;
             i = my_count.fetch_and_increment();
-        } 
+        }
     }
 
     void try_put_until_limit() {
         successor_type *s = my_receiver;
 
-        for ( int i = 0; i < (int)my_limit; ++i ) { 
+        for ( int i = 0; i < (int)my_limit; ++i ) {
             ASSERT( s->try_put( T(i) ), NULL );
             ++my_received;
-        } 
+        }
         ASSERT( my_received == my_limit, NULL );
     }
 
@@ -540,6 +540,7 @@ found_it:
     }
     return true;
 }
+#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */
 
 template<typename T, typename BufferType>
 void test_resets() {
@@ -551,7 +552,7 @@ void test_resets() {
     tbb::flow::queue_node<T>  q0(g);
     T j;
     bool nFound[NN];
-    
+
     // reset empties buffer
     for(T i = 0; i < NN; ++i) {
         b0.try_put(i);
@@ -651,10 +652,12 @@ void test_resets() {
         g.wait_for_all();
         ASSERT((int)serial_fn_state0 == 1, "function_node executed when it shouldn't");
         T outt;
-        ASSERT(b0.try_get(outt) && (T)23 == outt, "node lost its input"); 
+        ASSERT(b0.try_get(outt) && (T)23 == outt, "node lost its input");
     }
 }
 
+#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
+
 template< typename NODE_TYPE >
 class test_buffer_base_extract {
 protected:
@@ -683,15 +686,15 @@ protected:
     typename NODE_TYPE::successor_list_type::iterator ms_list_iter;
 
     virtual void set_up_lists() {
-        in0_p_list.clear(); 
+        in0_p_list.clear();
         in0_s_list.clear();
-        in1_p_list.clear(); 
+        in1_p_list.clear();
         in1_s_list.clear();
-        mp_list.clear(); 
+        mp_list.clear();
         ms_list.clear();
-        out0_p_list.clear(); 
+        out0_p_list.clear();
         out0_s_list.clear();
-        out1_p_list.clear(); 
+        out1_p_list.clear();
         out1_s_list.clear();
         in0.copy_predecessors(in0_p_list);
         in0.copy_successors(in0_s_list);
@@ -732,20 +735,20 @@ protected:
         int first_pred = *(mp_list.begin()) == ins[0] ? 0 : ( *(mp_list.begin()) == ins[1] ? 1 : -1 );
         mp_list_iter = mp_list.begin(); ++mp_list_iter;
         int second_pred = *mp_list_iter == ins[0] ? 0 : ( *mp_list_iter == ins[1] ? 1 : -1 );
-        ASSERT( first_pred != -1 && second_pred != -1 && first_pred != second_pred, "bad predecessor(s) for middle" ); 
+        ASSERT( first_pred != -1 && second_pred != -1 && first_pred != second_pred, "bad predecessor(s) for middle" );
 
         int first_succ = *(ms_list.begin()) == outs[0] ? 0 : ( *(ms_list.begin()) == outs[1] ? 1 : -1 );
         ms_list_iter = ++(ms_list.begin());
         int second_succ = *ms_list_iter == outs[0] ? 0 : ( *ms_list_iter == outs[1] ? 1 : -1 );
-        ASSERT( first_succ != -1 && second_succ != -1 && first_succ != second_succ, "bad successor(s) for middle" ); 
- 
+        ASSERT( first_succ != -1 && second_succ != -1 && first_succ != second_succ, "bad successor(s) for middle" );
+
         in0.try_put(1);
         in1.try_put(2);
         g.wait_for_all();
 
         int r = 0;
         int v = 0;
-    
+
         ASSERT( in0.try_get(v) == false, "buffer should not have a value" );
         ASSERT( in1.try_get(v) == false, "buffer should not have a value" );
         ASSERT( middle.try_get(v) == false, "buffer should not have a value" );
@@ -781,17 +784,17 @@ protected:
         ASSERT( out0.successor_count() == 0 && out0_s_list.size() == 0, "expected 0 successors" );
         ASSERT( out1.predecessor_count() == 1 && out1_p_list.size() == 1 && *(out1_p_list.begin()) == mp_ptr, "expected 1 predecessor" );
         ASSERT( out1.successor_count() == 0 && out1_s_list.size() == 0, "expected 0 successors" );
-    
+
         ASSERT( middle.predecessor_count() == 1 && mp_list.size() == 1, "expected two predecessors" );
         ASSERT( middle.successor_count() == 1 && ms_list.size() == 1, "expected two successors" );
-    
+
         ASSERT( *(mp_list.begin()) == ins[1], "incorrect predecessor" );
         ASSERT( *(ms_list.begin()) == outs[1], "incorrect successor" );
-    
+
         in0.try_put(1);
         in1.try_put(2);
         g.wait_for_all();
-    
+
         int v = 0;
         ASSERT( in0.try_get(v) == true && v == 1, "buffer should have a value of 1" );
         ASSERT( in1.try_get(v) == false, "buffer should not have a value" );
@@ -819,14 +822,14 @@ protected:
         ASSERT( out0.successor_count() == 0 && out0_s_list.size() == 0, "expected 0 successors" );
         ASSERT( out1.predecessor_count() == 0 && out1_p_list.size() == 0, "expected 0 predecessors" );
         ASSERT( out1.successor_count() == 0 && out1_s_list.size() == 0, "expected 0 successors" );
-    
+
         ASSERT( middle.predecessor_count() == 0 && mp_list.size() == 0, "expected 0 predecessors" );
         ASSERT( middle.successor_count() == 0 && ms_list.size() == 0, "expected 0 successors" );
-    
+
         in0.try_put(1);
         in1.try_put(2);
         g.wait_for_all();
-    
+
         int v = 0;
         ASSERT( in0.try_get(v) == true && v == 1, "buffer should have a value of 1" );
         ASSERT( in1.try_get(v) == true && v == 2, "buffer should have a value of 2" );
@@ -841,7 +844,7 @@ protected:
 
 public:
 
-    test_buffer_base_extract(tbb::flow::graph &_g, NODE_TYPE &i0, NODE_TYPE &i1, NODE_TYPE &m, NODE_TYPE &o0, NODE_TYPE &o1) : 
+    test_buffer_base_extract(tbb::flow::graph &_g, NODE_TYPE &i0, NODE_TYPE &i1, NODE_TYPE &m, NODE_TYPE &o0, NODE_TYPE &o1) :
         g(_g), in0(i0), in1(i1), middle(m), out0(o0), out1(o1) {
         ins[0] = &in0;
         ins[1] = &in1;
@@ -850,7 +853,7 @@ public:
         ms_ptr = static_cast< typename NODE_TYPE::successor_type * >(&middle);
         mp_ptr = static_cast< typename NODE_TYPE::predecessor_type *>(&middle);
     }
- 
+
     virtual ~test_buffer_base_extract() {}
 
     void run_tests() {
@@ -871,7 +874,7 @@ public:
 
         make_and_validate_full_graph();
     }
-   
+
 };
 
 template< typename NODE_TYPE >
@@ -884,7 +887,7 @@ protected:
     NODE_TYPE my_out0;
     NODE_TYPE my_out1;
 public:
-    test_buffer_extract() : test_buffer_base_extract<NODE_TYPE>( my_g, my_in0, my_in1, my_middle, my_out0, my_out1), 
+    test_buffer_extract() : test_buffer_base_extract<NODE_TYPE>( my_g, my_in0, my_in1, my_middle, my_out0, my_out1),
                             my_in0(my_g), my_in1(my_g), my_middle(my_g), my_out0(my_g), my_out1(my_g) { }
 };
 
@@ -905,15 +908,15 @@ protected:
     count_t out1_count;
 
     struct always_zero { size_t operator()(int) { return 0; } };
-    struct always_inc { 
+    struct always_inc {
         count_t *c;
         always_inc(count_t &_c) : c(&_c) {}
-        size_t operator()(int) { 
+        size_t operator()(int) {
             return c->fetch_and_increment();
-        } 
+        }
     };
 
-    /*override*/void set_up_lists() {
+    void set_up_lists() __TBB_override {
         middle_count = 0;
         out0_count = 0;
         out1_count = 0;
@@ -923,9 +926,9 @@ protected:
 
 
 public:
-    test_buffer_extract() : test_buffer_base_extract<my_node_t>( my_g, my_in0, my_in1, my_middle, my_out0, my_out1), 
-                            my_in0(my_g, always_zero()), my_in1(my_g, always_zero()), my_middle(my_g, always_inc(middle_count)), 
-                            my_out0(my_g, always_inc(out0_count)), my_out1(my_g, always_inc(out1_count)) { 
+    test_buffer_extract() : test_buffer_base_extract<my_node_t>( my_g, my_in0, my_in1, my_middle, my_out0, my_out1),
+                            my_in0(my_g, always_zero()), my_in1(my_g, always_zero()), my_middle(my_g, always_inc(middle_count)),
+                            my_out0(my_g, always_inc(out0_count)), my_out1(my_g, always_inc(out1_count)) {
     }
 };
 
@@ -945,7 +948,7 @@ void test_extract_on_node() {
         tbb::flow::make_edge(node0, q2);
         q0.try_put(ItemType(i));
         g.wait_for_all();
-    
+
         /* q0               */
         /*   \              */
         /*    \             */
@@ -953,14 +956,14 @@ void test_extract_on_node() {
         /*    /             */
         /*   /              */
         /* q1               */
-    
+
         ASSERT(node0.predecessor_count() == 2 && q0.successor_count() == 1 && q1.successor_count() == 1, "bad predecessor count");
         ASSERT(node0.successor_count() == 1 && q2.predecessor_count() == 1, "bad successor count");
 
         ASSERT(q2.try_get(dont_care) && int(dont_care) == i, "item not forwarded");
         typename NType<ItemType>::successor_list_type sv, sv1;
         typename NType<ItemType>::predecessor_list_type pv, pv1;
-    
+
         pv1.push_back(&q0);
         pv1.push_back(&q1);
         sv1.push_back(&q2);
@@ -968,7 +971,7 @@ void test_extract_on_node() {
         node0.copy_successors(sv);
         ASSERT(lists_match(pv,pv1), "predecessor vector incorrect");
         ASSERT(lists_match(sv,sv1), "successor vector incorrect");
-    
+
         if(i == 0) {
             node0.extract();
         }
diff --git a/src/test/harness_inject_scheduler.h b/src/test/harness_inject_scheduler.h
index 7f89bf3..0c13d45 100644
--- a/src/test/harness_inject_scheduler.h
+++ b/src/test/harness_inject_scheduler.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Used in tests that work with TBB scheduler but do not link to the TBB library.
@@ -34,7 +34,7 @@
 // Suppress usage of #pragma comment
 #define __TBB_NO_IMPLICIT_LINKAGE 1
 
-// Enable preview features if any 
+// Enable preview features if any
 #define __TBB_BUILD 1
 
 #undef DO_ITT_NOTIFY
diff --git a/src/test/harness_iterator.h b/src/test/harness_iterator.h
index a16dd6a..4c60a71 100644
--- a/src/test/harness_iterator.h
+++ b/src/test/harness_iterator.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef harness_iterator_H
@@ -23,135 +23,142 @@
 
 #include <iterator>
 #include <memory>
+#include "tbb/atomic.h"
+#include "harness_assert.h"
 
 namespace Harness {
 
-template <class T>
+template <typename T>
 class InputIterator {
-    T * my_ptr;
 public:
-#if HARNESS_EXTENDED_STD_COMPLIANCE
     typedef std::input_iterator_tag iterator_category;
     typedef T value_type;
     typedef typename std::allocator<T>::difference_type difference_type;
     typedef typename std::allocator<T>::pointer pointer;
     typedef typename std::allocator<T>::reference reference;
-#endif /* HARNESS_EXTENDED_STD_COMPLIANCE */
-   
-    explicit InputIterator( T * ptr): my_ptr(ptr){}
-    
-    T& operator* () { return *my_ptr; }
-    
-    InputIterator& operator++ () { ++my_ptr; return *this; }
-
-    bool operator== ( const InputIterator& r ) { return my_ptr == r.my_ptr; }
+
+    explicit InputIterator ( T * ptr ) : my_ptr(ptr), my_shared_epoch(new Epoch), my_current_epoch(0) {}
+
+    InputIterator( const InputIterator& it ) {
+        ASSERT(it.my_current_epoch == it.my_shared_epoch->epoch, "Copying an invalidated iterator");
+        my_ptr = it.my_ptr;
+        my_shared_epoch = it.my_shared_epoch;
+        my_current_epoch = it.my_current_epoch;
+        ++my_shared_epoch->refcounter;
+    }
+
+    InputIterator& operator= ( const InputIterator& it ) {
+        ASSERT(it.my_current_epoch == it.my_shared_epoch->epoch, "Assigning an invalidated iterator");
+        my_ptr = it.my_ptr;
+        my_current_epoch = it.my_current_epoch;
+        if(my_shared_epoch == it.my_shared_epoch)
+            return *this;
+        destroy();
+        my_shared_epoch = it.my_shared_epoch;
+        ++my_shared_epoch->refcounter;
+        return *this;
+    }
+
+    T& operator* () const {
+        ASSERT(my_shared_epoch->epoch == my_current_epoch, "Dereferencing an invalidated input iterator");
+        return *my_ptr;
+    }
+
+    InputIterator& operator++ () {
+        ASSERT(my_shared_epoch->epoch == my_current_epoch, "Incrementing an invalidated input iterator");
+        ++my_ptr;
+        ++my_current_epoch;
+        ++my_shared_epoch->epoch;
+        return *this;
+    }
+
+    bool operator== ( const InputIterator& it ) const {
+        ASSERT(my_shared_epoch->epoch == my_current_epoch, "Comparing an invalidated input iterator");
+        ASSERT(it.my_shared_epoch->epoch == it.my_current_epoch, "Comparing with an invalidated input iterator");
+        return my_ptr == it.my_ptr;
+    }
+
+    ~InputIterator() {
+        destroy();
+    }
+private:
+    void destroy() {
+        if(0 == --my_shared_epoch->refcounter) {
+            delete my_shared_epoch;
+        }
+    }
+    struct Epoch {
+        typedef tbb::atomic<size_t> Counter;
+        Epoch() { epoch = 0; refcounter = 1; }
+        Counter epoch;
+        Counter refcounter;
+    };
+
+    T * my_ptr;
+    Epoch *my_shared_epoch;
+    size_t my_current_epoch;
 };
 
-template <class T>
+template <typename T>
 class ForwardIterator {
     T * my_ptr;
 public:
-#if HARNESS_EXTENDED_STD_COMPLIANCE
     typedef std::forward_iterator_tag iterator_category;
     typedef T value_type;
     typedef typename std::allocator<T>::difference_type difference_type;
     typedef typename std::allocator<T>::pointer pointer;
     typedef typename std::allocator<T>::reference reference;
-#endif /* HARNESS_EXTENDED_STD_COMPLIANCE */
-   
+
     explicit ForwardIterator ( T * ptr ) : my_ptr(ptr){}
-    
+
     ForwardIterator ( const ForwardIterator& r ) : my_ptr(r.my_ptr){}
-    
-    T& operator* () { return *my_ptr; }
-    
+    T& operator* () const { return *my_ptr; }
     ForwardIterator& operator++ () { ++my_ptr; return *this; }
-
-    bool operator== ( const ForwardIterator& r ) { return my_ptr == r.my_ptr; }
+    bool operator== ( const ForwardIterator& r ) const { return my_ptr == r.my_ptr; }
 };
 
-template <class T>
+template <typename T>
 class RandomIterator {
     T * my_ptr;
-#if !HARNESS_EXTENDED_STD_COMPLIANCE
-    typedef typename std::allocator<T>::difference_type difference_type;
-#endif
-
 public:
-#if HARNESS_EXTENDED_STD_COMPLIANCE
     typedef std::random_access_iterator_tag iterator_category;
     typedef T value_type;
     typedef typename std::allocator<T>::pointer pointer;
     typedef typename std::allocator<T>::reference reference;
     typedef typename std::allocator<T>::difference_type difference_type;
-#endif /* HARNESS_EXTENDED_STD_COMPLIANCE */
 
     explicit RandomIterator ( T * ptr ) : my_ptr(ptr){}
     RandomIterator ( const RandomIterator& r ) : my_ptr(r.my_ptr){}
-    T& operator* () { return *my_ptr; }
+    T& operator* () const { return *my_ptr; }
     RandomIterator& operator++ () { ++my_ptr; return *this; }
-    bool operator== ( const RandomIterator& r ) { return my_ptr == r.my_ptr; }
-    difference_type operator- (const RandomIterator &r) {return my_ptr - r.my_ptr;}
-    RandomIterator operator+ (difference_type n) {return RandomIterator(my_ptr + n);}
+    bool operator== ( const RandomIterator& r ) const { return my_ptr == r.my_ptr; }
+    bool operator!= ( const RandomIterator& r ) const { return my_ptr != r.my_ptr; }
+    difference_type operator- (const RandomIterator &r) const {return my_ptr - r.my_ptr;}
+    RandomIterator operator+ (difference_type n) const {return RandomIterator(my_ptr + n);}
+    bool operator< (const RandomIterator &r) const {return my_ptr < r.my_ptr;}
 };
 
-template <class T>
+template <typename T>
 class ConstRandomIterator {
     const T * my_ptr;
-#if !HARNESS_EXTENDED_STD_COMPLIANCE
-    typedef typename std::allocator<T>::difference_type difference_type;
-#endif
-
 public:
-#if HARNESS_EXTENDED_STD_COMPLIANCE
     typedef std::random_access_iterator_tag iterator_category;
-    typedef T value_type;
+    typedef const T value_type;
     typedef typename std::allocator<T>::const_pointer pointer;
     typedef typename std::allocator<T>::const_reference reference;
     typedef typename std::allocator<T>::difference_type difference_type;
-#endif /* HARNESS_EXTENDED_STD_COMPLIANCE */
 
     explicit ConstRandomIterator ( const T * ptr ) : my_ptr(ptr){}
     ConstRandomIterator ( const ConstRandomIterator& r ) : my_ptr(r.my_ptr){}
-    const T& operator* () { return *my_ptr; }
+    const T& operator* () const { return *my_ptr; }
     ConstRandomIterator& operator++ () { ++my_ptr; return *this; }
-    bool operator== ( const ConstRandomIterator& r ) { return my_ptr == r.my_ptr; }
-    difference_type operator- (const ConstRandomIterator &r) {return my_ptr - r.my_ptr;}
-    ConstRandomIterator operator+ (difference_type n) {return ConstRandomIterator(my_ptr + n);}
+    bool operator== ( const ConstRandomIterator& r ) const { return my_ptr == r.my_ptr; }
+    bool operator!= ( const ConstRandomIterator& r ) const { return my_ptr != r.my_ptr; }
+    difference_type operator- (const ConstRandomIterator &r) const {return my_ptr - r.my_ptr;}
+    ConstRandomIterator operator+ (difference_type n) const {return ConstRandomIterator(my_ptr + n);}
+    bool operator< (const ConstRandomIterator &r) const {return my_ptr < r.my_ptr;}
 };
 
 } // namespace Harness
 
-#if !HARNESS_EXTENDED_STD_COMPLIANCE
-namespace std {
-    template<typename T>
-    struct iterator_traits< Harness::InputIterator<T> > {
-        typedef std::input_iterator_tag iterator_category;
-        typedef T value_type;
-        typedef value_type& reference;
-    };
-
-    template<typename T>
-    struct iterator_traits< Harness::ForwardIterator<T> > {
-        typedef std::forward_iterator_tag iterator_category;
-        typedef T value_type;
-        typedef value_type& reference;
-    };
-
-    template<typename T>
-    struct iterator_traits< Harness::RandomIterator<T> > {
-        typedef std::random_access_iterator_tag iterator_category;
-        typedef T value_type;
-        typedef value_type& reference;
-    };
-
-    template<typename T>
-    struct iterator_traits< Harness::ConstRandomIterator<T> > {
-        typedef std::random_access_iterator_tag iterator_category;
-        typedef T value_type;
-        typedef const value_type& reference;
-    };
-} // namespace std
-#endif /* !HARNESS_EXTENDED_STD_COMPLIANCE */
-
 #endif //harness_iterator_H
diff --git a/src/test/harness_m128.h b/src/test/harness_m128.h
index e20d057..4df639d 100644
--- a/src/test/harness_m128.h
+++ b/src/test/harness_m128.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 // Header that sets HAVE_m128/HAVE_m256 if vector types (__m128/__m256) are available
@@ -28,7 +28,7 @@
 //  did not always provide proper stack alignment in destructors of such objects.
 
 #if (_MSC_VER>=1600)
-//TODO: handle /arch:AVX in the right way. 
+//TODO: handle /arch:AVX in the right way.
 #pragma warning (push)
 #pragma warning (disable: 4752)
 #endif
@@ -40,7 +40,7 @@ class ClassWithVectorType {
     __Mvec field[n];
     void init( int start );
 public:
-    ClassWithVectorType() {init(-n);} 
+    ClassWithVectorType() {init(-n);}
     ClassWithVectorType( int i ) {init(i);}
     void operator=( const ClassWithVectorType& src ) {
         __Mvec stack[n];
@@ -65,7 +65,7 @@ template<typename __Mvec>
 void ClassWithVectorType<__Mvec>::init( int start ) {
     __Mvec stack[n];
     for( int i=0; i<n; ++i ) {
-        // Declaring value as a one-element array instead of a scalar quites 
+        // Declaring value as a one-element array instead of a scalar quites
         // gratuitous warnings about possible use of "value" before it was set.
         __Mvec value[1];
         for( int j=0; j<F; ++j )
diff --git a/src/test/harness_memory.h b/src/test/harness_memory.h
index 145d0ba..2da6c13 100644
--- a/src/test/harness_memory.h
+++ b/src/test/harness_memory.h
@@ -1,25 +1,25 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 // Declarations for simple estimate of the memory being used by a program.
-// Not yet implemented for OS X*.
+// Not yet implemented for macOS*.
 // This header is an optional part of the test harness.
 // It assumes that "harness_assert.h" has already been included.
 
@@ -27,11 +27,11 @@
 #include <sys/resource.h>
 #include <unistd.h>
 
-#elif __APPLE__
+#elif __APPLE__ && !__ARM_ARCH
 #include <unistd.h>
 #include <mach/mach.h>
 #include <AvailabilityMacros.h>
-#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
+#if MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_6 || __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_8_0
 #include <mach/shared_region.h>
 #else
 #include <mach/shared_memory_server.h>
@@ -42,7 +42,7 @@ const size_t shared_size = SHARED_TEXT_REGION_SIZE+SHARED_DATA_REGION_SIZE;
 const size_t shared_size = 0;
 #endif
 
-#elif _WIN32 && !_XBOX && !__TBB_WIN8UI_SUPPORT
+#elif _WIN32 && !__TBB_WIN8UI_SUPPORT
 #include <windows.h>
 #include <psapi.h>
 #if _MSC_VER
@@ -51,29 +51,44 @@ const size_t shared_size = 0;
 
 #endif /* OS selection */
 
+enum MemoryStatType {
+    currentUsage,
+    peakUsage
+};
+
 //! Return estimate of number of bytes of memory that this program is currently using.
 /* Returns 0 if not implemented on platform. */
-size_t GetMemoryUsage() { 
-#if _XBOX || __TBB_WIN8UI_SUPPORT
+size_t GetMemoryUsage(MemoryStatType stat = currentUsage) {
+    ASSERT(stat==currentUsage || stat==peakUsage, NULL);
+#if __TBB_WIN8UI_SUPPORT
     return 0;
 #elif _WIN32
     PROCESS_MEMORY_COUNTERS mem;
     bool status = GetProcessMemoryInfo(GetCurrentProcess(), &mem, sizeof(mem))!=0;
     ASSERT(status, NULL);
-    return mem.PagefileUsage;
+    return stat==currentUsage? mem.PagefileUsage : mem.PeakPagefileUsage;
 #elif __linux__
-    FILE* statsfile = fopen("/proc/self/statm","r");
-    size_t pagesize = getpagesize();
-    ASSERT(statsfile, NULL);
-    long total_mem;
-    int n = fscanf(statsfile,"%lu",&total_mem);
-    if( n!=1 ) {
-        REPORT("Warning: memory usage statistics wasn't obtained\n");
-        return 0;
+    long unsigned size = 0;
+    FILE *fst = fopen("/proc/self/status", "r");
+    ASSERT(fst, NULL);
+    const int BUF_SZ = 200;
+    char buf_stat[BUF_SZ];
+    const char *pattern = stat==peakUsage ? "VmPeak: %lu" : "VmSize: %lu";
+    while (NULL != fgets(buf_stat, BUF_SZ, fst)) {
+        if (1==sscanf(buf_stat, pattern, &size)) {
+            ASSERT(size, "Invalid value of memory consumption.");
+            break;
+        }
     }
-    fclose(statsfile);
-    return total_mem*pagesize;
-#elif __APPLE__
+    // VmPeak is available in kernels staring 2.6.15
+    if (stat!=peakUsage || LinuxKernelVersion() >= 2006015)
+        ASSERT(size, "Invalid /proc/self/status format, pattern not found.");
+    fclose(fst);
+    return size*1024;
+#elif __APPLE__ && !__ARM_ARCH
+    // TODO: find how detect peak virtual memory size under macOS
+    if (stat == peakUsage)
+        return 0;
     kern_return_t status;
     task_basic_info info;
     mach_msg_type_number_t msg_type = TASK_BASIC_INFO_COUNT;
@@ -90,7 +105,7 @@ size_t GetMemoryUsage() {
 void UseStackSpace( size_t amount, char* top=0 ) {
     char x[1000];
     memset( x, -1, sizeof(x) );
-    if( !top ) 
+    if( !top )
         top = x;
     ASSERT( x<=top, "test assumes that stacks grow downwards" );
     if( size_t(top-x)<amount )
diff --git a/src/test/harness_mic.h b/src/test/harness_mic.h
index 2157766..096e1ee 100644
--- a/src/test/harness_mic.h
+++ b/src/test/harness_mic.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef tbb_test_harness_mic_H
diff --git a/src/test/harness_preload.h b/src/test/harness_preload.h
new file mode 100644
index 0000000..b7562b5
--- /dev/null
+++ b/src/test/harness_preload.h
@@ -0,0 +1,39 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+// This file is intended for preloading (via compiler options such as -include) into every test.
+// Alas, not all compilers have such options, so the file is "optional".
+
+// Only add here things that are necessary for *every* test!
+// In particular, avoid including other headers.
+// Since this file can be omitted, checking compiler-specific conditions is strongly recommended.
+
+#ifndef harness_preload_H
+#define harness_preload_H
+
+#if __GNUC__>=5 && !__INTEL_COMPILER && !__clang__ && __GXX_EXPERIMENTAL_CXX0X__
+// GCC 5 has added -Wsuggest-override, but unfortunately enables it even in pre-C++11 mode.
+// We only want to use it for C++11 though.
+#pragma GCC diagnostic warning "-Wsuggest-override"
+#define __TBB_TEST_USE_WSUGGEST_OVERRIDE 1
+#endif
+// TODO: consider adding a similar option for clang
+
+#endif /* harness_preload_H */
diff --git a/src/test/harness_report.h b/src/test/harness_report.h
index ea70080..9f6af3f 100644
--- a/src/test/harness_report.h
+++ b/src/test/harness_report.h
@@ -1,26 +1,26 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Just the tracing portion of the harness.
 //
-// This header defines TRACE and TRACENL macros, which use REPORT like syntax and 
+// This header defines TRACE and TRACENL macros, which use REPORT like syntax and
 // are useful for duplicating trace output to the standard debug output on Windows.
 // It is possible to add the ability of automatic extending messages with additional
 // info (file, line, function, time, thread ID, ...).
@@ -88,11 +88,13 @@ namespace Harness {
         TbbHarnessReporter m_reporter;
 
     public:
-        enum  { 
+        enum  {
             prefix = 1,
             need_lf = 2
         };
 
+        Tracer(): m_flags(0), m_file(NULL), m_func(NULL), m_line(0) {}
+
         Tracer*  set_trace_info ( int flags, const char *file, size_t line, const char *func ) {
             m_flags = flags;
             m_line = line;
@@ -113,7 +115,7 @@ namespace Harness {
             va_start (argptr, fmt);
             int len = vsnprintf (msg, MAX_TRACE_SIZE, msg_fmt, argptr);
             va_end (argptr);
-            if ( m_flags & need_lf &&  
+            if ( m_flags & need_lf &&
                  len < MAX_TRACE_SIZE - 1  &&  msg_fmt[len-1] != '\n' )
             {
                 msg[len] = '\n';
@@ -160,7 +162,7 @@ namespace Harness {
 #define REMARK  !Verbose ? (void)0 : TRACENL
 
 //! printf style remark macro
-/** Produces output only when invoked first time. 
+/** Produces output only when invoked first time.
     Only one instance of this macro is allowed per source code line. **/
 #define REMARK_ONCE (!Verbose || Harness::internal::not_the_first_call<__LINE__>()) ? (void)0 : TRACE
 
diff --git a/src/test/harness_runtime_loader.h b/src/test/harness_runtime_loader.h
index a01d8dc..d4f81e4 100644
--- a/src/test/harness_runtime_loader.h
+++ b/src/test/harness_runtime_loader.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef harness_runtime_loader_H
diff --git a/src/test/harness_task.h b/src/test/harness_task.h
index 5c43234..abb4eba 100644
--- a/src/test/harness_task.h
+++ b/src/test/harness_task.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/task.h"
@@ -26,21 +26,21 @@ tbb::task* GetTaskPtr( int& counter ) {
     ++counter;
     return NULL;
 }
- 
+
 class TaskGenerator: public tbb::task {
     int m_ChildCount;
     int m_Depth;
-    
+
 public:
     TaskGenerator( int child_count, int _depth ) : m_ChildCount(child_count), m_Depth(_depth) {}
     ~TaskGenerator( ) { m_ChildCount = m_Depth = -125; }
 
-    /*override*/ tbb::task* execute() {
+    tbb::task* execute() __TBB_override {
         ASSERT( m_ChildCount>=0 && m_Depth>=0, NULL );
         if( m_Depth>0 ) {
             recycle_as_safe_continuation();
             set_ref_count( m_ChildCount+1 );
-            int k=0; 
+            int k=0;
             for( int j=0; j<m_ChildCount; ++j ) {
                 tbb::task& t = *new( allocate_child() ) TaskGenerator(m_ChildCount/2,m_Depth-1);
                 GetTaskPtr(k)->spawn(t);
diff --git a/src/test/harness_tbb_independence.h b/src/test/harness_tbb_independence.h
index 3b931da..338cd05 100644
--- a/src/test/harness_tbb_independence.h
+++ b/src/test/harness_tbb_independence.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef harness_tbb_independence_H
@@ -71,6 +71,17 @@ extern "C" int64_t __TBB_machine_cmpswp8__TBB_full_fence(volatile void *ptr, int
     return result;
 }
 
+pthread_mutex_t fetchstore_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+int64_t __TBB_machine_fetchstore8__TBB_full_fence (volatile void *ptr, int64_t value)
+{
+    pthread_mutex_lock(&fetchstore_mutex);
+    int64_t result = *(int64_t*)ptr;
+    *(int64_t*)ptr = value;
+    pthread_mutex_unlock(&fetchstore_mutex);
+    return result;
+}
+
 #endif /* __linux__  && __ia64 */
 
 #endif // harness_tbb_independence_H
diff --git a/src/test/harness_test_cases_framework.h b/src/test/harness_test_cases_framework.h
index c48ef5e..6743ab6 100644
--- a/src/test/harness_test_cases_framework.h
+++ b/src/test/harness_test_cases_framework.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef tbb_harness_test_cases_framework_H
@@ -59,7 +59,7 @@ namespace test_framework{
              my_expression(expression),
              my_comment(comment)
         {}
-        virtual const char* what() const throw(){
+        virtual const char* what() const throw() __TBB_override {
             return "test assertion failed";
         }
     };
diff --git a/src/test/harness_tls.h b/src/test/harness_tls.h
new file mode 100644
index 0000000..149b6b7
--- /dev/null
+++ b/src/test/harness_tls.h
@@ -0,0 +1,79 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+class LimitTLSKeysTo {
+#if _WIN32 || _WIN64
+    #if __TBB_WIN8UI_SUPPORT && !defined(TLS_OUT_OF_INDEXES)
+        // for SDKs for Windows*8 Store Apps that did not redirect TLS to FLS
+        #define TlsAlloc() FlsAlloc(NULL)
+        #define TlsFree FlsFree
+        #define TLS_OUT_OF_INDEXES FLS_OUT_OF_INDEXES
+    #endif
+    typedef DWORD handle;
+#else // _WIN32 || _WIN64
+    typedef pthread_key_t handle;
+#endif
+    // for platforms that not limit number of TLS keys, set artificial limit
+    static const int LIMIT = 16*1024;
+    handle handles[LIMIT];
+    int    lastUsedIdx;
+public:
+    LimitTLSKeysTo(int keep_keys) {
+        for (lastUsedIdx=0; lastUsedIdx<LIMIT; lastUsedIdx++) {
+#if _WIN32 || _WIN64
+            handle h = TlsAlloc();
+            if (h==TLS_OUT_OF_INDEXES)
+#else
+            int setspecific_dummy=10;
+            if (pthread_key_create(&handles[lastUsedIdx], NULL)!=0)
+#endif
+            {
+                break;
+            }
+#if _WIN32 || _WIN64
+            handles[lastUsedIdx] = h;
+#else
+            pthread_setspecific(handles[lastUsedIdx], &setspecific_dummy);
+#endif
+        }
+        lastUsedIdx--;
+        ASSERT(lastUsedIdx >= keep_keys-1, "Less TLS keys are available than requested");
+        for (; keep_keys>0; keep_keys--, lastUsedIdx--) {
+#if _WIN32 || _WIN64
+            TlsFree(handles[lastUsedIdx]);
+#else
+            int ret = pthread_key_delete(handles[lastUsedIdx]);
+            ASSERT(!ret, "Can't delete a key");
+#endif
+        }
+        REMARK("%d thread local objects allocated in advance\n", lastUsedIdx+1);
+    }
+    ~LimitTLSKeysTo() {
+        for (int i=0; i<=lastUsedIdx; i++) {
+#if _WIN32 || _WIN64
+            TlsFree(handles[i]);
+#else
+            int ret = pthread_key_delete(handles[i]);
+            ASSERT(!ret, "Can't delete a key");
+#endif
+        }
+        lastUsedIdx = 0;
+    }
+};
diff --git a/src/test/harness_tsx.h b/src/test/harness_tsx.h
index fba4b78..017f7e7 100644
--- a/src/test/harness_tsx.h
+++ b/src/test/harness_tsx.h
@@ -1,26 +1,26 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
-// Header that includes TSX-specific test functions
+// Header that includes Intel(R) Transactional Synchronization Extensions (Intel(R) TSX) specific test functions
 
-#if __TBB_TSX_AVAILABLE 
+#if __TBB_TSX_AVAILABLE
 #define __TBB_TSX_TESTING_ENABLED_FOR_THIS_COMPILER (__INTEL_COMPILER || __GNUC__ || _MSC_VER || __SUNPRO_CC)
 #if __TBB_TSX_TESTING_ENABLED_FOR_THIS_COMPILER
 
@@ -44,8 +44,8 @@ bool have_TSX() {
     const int reg_ebx = 1;
     int old_ecx = 0;
     __cpuidex(info, 7, old_ecx);
-    result = (info[reg_ebx] & hle_ebx_mask)!=0;
-    if( result ) ASSERT( (info[reg_ebx] & rtm_ebx_mask)!=0, NULL );
+    result = (info[reg_ebx] & rtm_ebx_mask)!=0;
+    if( result ) ASSERT( (info[reg_ebx] & hle_ebx_mask)!=0, NULL );
 #elif __GNUC__ || __SUNPRO_CC
     int32_t reg_ebx = 0;
     int32_t reg_eax = 7;
@@ -60,8 +60,8 @@ bool have_TSX() {
 #endif
                            "edx"
                            );
-    result = (reg_ebx & hle_ebx_mask)!=0 ;
-    if( result ) ASSERT( (reg_ebx & rtm_ebx_mask)!=0, NULL );
+    result = (reg_ebx & rtm_ebx_mask)!=0 ;
+    if( result ) ASSERT( (reg_ebx & hle_ebx_mask)!=0, NULL );
 #endif
     return result;
 }
diff --git a/src/test/test_ScalableAllocator.cpp b/src/test/test_ScalableAllocator.cpp
index e68b9fe..4388bf4 100644
--- a/src/test/test_ScalableAllocator.cpp
+++ b/src/test/test_ScalableAllocator.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Test whether scalable_allocator complies with the requirements in 20.1.5 of ISO C++ Standard (1998).
@@ -25,9 +25,7 @@
 
 #include "harness_assert.h"
 #if !__TBB_SOURCE_DIRECTLY_INCLUDED
-// harness_allocator.h requires atimics. We do not want dependency 
-// to TBB library to get atomics, so add rudimentary implementation of them.
-#include "harness_tbb_independence.h"
+#include "harness_tbb_independence.h" // because harness_allocator.h requires atomics
 #endif
 #include "tbb/memory_pool.h"
 #include "tbb/scalable_allocator.h"
@@ -74,8 +72,6 @@ public:
     }
 };
 
-#if TBB_USE_EXCEPTIONS
-
 class NullAllocator {
 public:
     typedef char value_type;
@@ -88,19 +84,12 @@ public:
 
 void TestZeroSpaceMemoryPool()
 {
-    try {
-        tbb::memory_pool<NullAllocator> pool;
-        ASSERT(0, "Useless allocator with no memory must not be created");
-    } catch (std::runtime_error) {
-    } catch (...) {
-        ASSERT(0, "wrong exception type; expected runtime_error");
-    }
+    tbb::memory_pool<NullAllocator> pool;
+    bool allocated = pool.malloc(16) || pool.malloc(9*1024);
+    ASSERT(!allocated, "Allocator with no memory must not allocate anything.");
 }
 
-#else // TBB_USE_EXCEPTIONS
-
-void TestZeroSpaceMemoryPool() { }
-
+#if !TBB_USE_EXCEPTIONS
 struct FixedPool {
     void  *buf;
     size_t size;
@@ -115,10 +104,9 @@ static void *fixedBufGetMem(intptr_t pool_id, size_t &bytes)
 
     ((FixedPool*)pool_id)->used = true;
     bytes = ((FixedPool*)pool_id)->size;
-    return ((FixedPool*)pool_id)->buf;
+    return bytes? ((FixedPool*)pool_id)->buf : NULL;
 }
-
-#endif // TBB_USE_EXCEPTIONS
+#endif
 
 /* test that pools in small space are either usable or not created
    (i.e., exception raised) */
@@ -136,16 +124,7 @@ void TestSmallFixedSizePool()
    that can be fulfilled from the pool. 16B allocation fits in 16KB slabs,
    so it requires at least 16KB. Requirement of 9KB allocation is more modest.
 */
-            try {
-                allocated = pool.malloc( 16 ) || pool.malloc( 9*1024 );
-                ASSERT(allocated, "If pool created, it must be useful.");
-            } catch (std::bad_alloc) {
-            } catch (...) {
-                ASSERT(0, "wrong exception type; expected bad_alloc");
-            }
-        } catch (std::runtime_error) {
-            // This occurs when no space in buf for internal pool
-            // structures. Can't predict exact size for this.
+            allocated = pool.malloc( 16 ) || pool.malloc( 9*1024 );
         } catch (std::invalid_argument) {
             ASSERT(!sz, "expect std::invalid_argument for zero-sized pool only");
         } catch (...) {
@@ -165,7 +144,6 @@ void TestSmallFixedSizePool()
 
         if (ret == rml::POOL_OK) {
             allocated = pool_malloc(pool, 16) || pool_malloc(pool, 9*1024);
-            ASSERT(allocated, "If pool created, it must be useful.");
             pool_destroy(pool);
         } else
             ASSERT(ret == rml::NO_MEMORY, "Expected that pool either valid "
diff --git a/src/test/test_ScalableAllocator_STL.cpp b/src/test/test_ScalableAllocator_STL.cpp
index 51cb6cc..c986daa 100644
--- a/src/test/test_ScalableAllocator_STL.cpp
+++ b/src/test/test_ScalableAllocator_STL.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Test whether scalable_allocator works with some of the host's STL containers.
diff --git a/src/test/test_aggregator.cpp b/src/test/test_aggregator.cpp
index a4c5a48..5bb1d2e 100644
--- a/src/test/test_aggregator.cpp
+++ b/src/test/test_aggregator.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef TBB_PREVIEW_AGGREGATOR
@@ -60,7 +60,7 @@ class BasicBody : NoAssign {
     pq_t& pq;
     tbb::aggregator& agg;
 public:
-    BasicBody(pq_t& pq_, tbb::aggregator& agg_) : pq(pq_), agg(agg_) {}  
+    BasicBody(pq_t& pq_, tbb::aggregator& agg_) : pq(pq_), agg(agg_) {}
     void operator()(const int threadID) const {
         for (int i=0; i<N; ++i) agg.execute( push_fnobj(pq, threadID) );
         for (int i=0; i<N; ++i) agg.execute( pop_fnobj(pq) );
@@ -91,7 +91,7 @@ void TestBasicLambdaInterface(int nThreads) {
         for (int i=0; i<N; ++i)
             agg.execute( [&, threadID]() { my_pq.push(threadID); } );
         for (int i=0; i<N; ++i) {
-            agg.execute( [&]() { 
+            agg.execute( [&]() {
                 ASSERT(!my_pq.empty(), "queue should not be empty yet");
                 int elem = my_pq.top();
                 my_pq.pop();
@@ -106,7 +106,7 @@ void TestBasicLambdaInterface(int nThreads) {
 #endif /* __TBB_LAMBDAS_PRESENT */
 // End of code for testing basic interface using lambda expressions
 
-// Code for testing expert interface 
+// Code for testing expert interface
 class op_data : public tbb::aggregator_operation, NoAssign {
 public:
     const int tid;
@@ -162,7 +162,7 @@ void TestExpertInterface(int nThreads) {
         ASSERT(shared_data[i] == N, "wrong number of elements pushed");
     REMARK("Done testing aggregator expert interface.\n");
 }
-// End of code for testing expert interface 
+// End of code for testing expert interface
 
 int TestMain() {
     if (MinThread < 1)
diff --git a/src/test/test_aligned_space.cpp b/src/test/test_aligned_space.cpp
index f332d00..dabb74b 100644
--- a/src/test/test_aligned_space.cpp
+++ b/src/test/test_aligned_space.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/tbb_config.h"
@@ -67,9 +67,22 @@ void TestAlignedSpaceN() {
         AssignToCheckAlignment( x.space.begin()[k-1], x.space.begin()[k] );
 }
 
-static void PrintSpaceWastingWarning( const char* type_name );
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "harness.h"
 
 #include <typeinfo>
+template<typename T>
+void PrintSpaceWastingWarning() {
+    REPORT( "Consider rewriting aligned_space<%s,N> to waste less space\n", typeid(T).name() );
+}
+
+// RTTI for long double (128 bit) is broken in libc++ up-to NDK11c. Check on newer versions of NDK.
+#if ( __ANDROID__ && __clang__ && _LIBCPP_VERSION && __TBB_x86_64 )
+template<>
+void PrintSpaceWastingWarning<long double>() {
+    REPORT( "Consider rewriting aligned_space<ld,N> to waste less space\n" );
+}
+#endif
 
 template<typename T>
 void TestAlignedSpace() {
@@ -83,12 +96,9 @@ void TestAlignedSpace() {
     TestAlignedSpaceN<T,7>();
     TestAlignedSpaceN<T,8>();
     if( SpaceWasted )
-        PrintSpaceWastingWarning( typeid(T).name() );
+        PrintSpaceWastingWarning<T>();
 }
 
-#define HARNESS_NO_PARSE_COMMAND_LINE 1
-#include "harness.h"
-
 #include "harness_m128.h"
 
 int TestMain () {
@@ -107,8 +117,3 @@ int TestMain () {
 #endif
     return Harness::Done;
 }
-
-static void PrintSpaceWastingWarning( const char* type_name ) {
-    REPORT("Consider rewriting aligned_space<%s,N> to waste less space\n", type_name ); 
-}
-
diff --git a/src/test/test_allocator.h b/src/test/test_allocator.h
index 61bf2fe..a32d7e1 100644
--- a/src/test/test_allocator.h
+++ b/src/test/test_allocator.h
@@ -1,28 +1,28 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Basic testing of an allocator
 // Tests against requirements in 20.1.5 of ISO C++ Standard (1998).
 // Does not check for thread safety or false sharing issues.
 //
-// Tests for compatibility with the host's STL are in 
+// Tests for compatibility with the host's STL are in
 // test_Allocator_STL.h.  Those tests are in a separate file
 // because they bring in lots of STL headers, and the tests here
 // are supposed to work in the abscense of STL.
@@ -59,7 +59,34 @@ inline char PseudoRandomValue( size_t j, size_t k ) {
     return char(j*3 ^ j>>4 ^ k);
 }
 
-//! T is type and A is allocator for that type 
+#if __APPLE__
+#include <fcntl.h>
+#include <unistd.h>
+
+// A RAII class to disable stderr in a certain scope. It's not thread-safe.
+class DisableStderr {
+    int stderrCopy;
+    static void dupToStderrAndClose(int fd) {
+        int ret = dup2(fd, STDERR_FILENO); // close current stderr
+        ASSERT(ret != -1, NULL);
+        ret = close(fd);
+        ASSERT(ret != -1, NULL);
+    }
+public:
+    DisableStderr() {
+        int devNull = open("/dev/null", O_WRONLY);
+        ASSERT(devNull != -1, NULL);
+        stderrCopy = dup(STDERR_FILENO);
+        ASSERT(stderrCopy != -1, NULL);
+        dupToStderrAndClose(devNull);
+    }
+    ~DisableStderr() {
+        dupToStderrAndClose(stderrCopy);
+    }
+};
+#endif
+
+//! T is type and A is allocator for that type
 template<typename T, typename A>
 void TestBasic( A& a ) {
     T x;
@@ -87,7 +114,7 @@ void TestBasic( A& a ) {
     --difference;
     ASSERT( difference<0, "not an signed integral type?" );
 
-    // "rebind" tested by our caller 
+    // "rebind" tested by our caller
 
     ASSERT( a.address(rx)==px, NULL );
 
@@ -104,8 +131,8 @@ void TestBasic( A& a ) {
 
     // Test hint argument. This can't be compiled when hint is void*, It should be const void*
     typename A::pointer a_ptr;
-    const void * const_hint = NULL;    
-    a_ptr = a.allocate (1, const_hint);    
+    const void * const_hint = NULL;
+    a_ptr = a.allocate (1, const_hint);
     a.deallocate(a_ptr, 1);
 
     // Test "a.deallocate(p,n)
@@ -118,9 +145,9 @@ void TestBasic( A& a ) {
 
     // Test "a.max_size()"
     AssertSameType( a.max_size(), typename A::size_type(0) );
-    // Following assertion catches case where max_size() is so large that computation of 
+    // Following assertion catches case where max_size() is so large that computation of
     // number of bytes for such an allocation would overflow size_type.
-    ASSERT( a.max_size()*typename A::size_type(sizeof(T))>=a.max_size(), "max_size larger than reasonable" ); 
+    ASSERT( a.max_size()*typename A::size_type(sizeof(T))>=a.max_size(), "max_size larger than reasonable" );
 
     // Test "a.construct(p,t)"
     int n = NumberOfFoo;
@@ -138,6 +165,11 @@ void TestBasic( A& a ) {
     bool exception_caught = false;
     typename A::pointer p1 = NULL;
     try {
+#if __APPLE__
+        // On macOS*, failure to map memory results in messages to stderr;
+        // suppress them.
+        DisableStderr disableStderr;
+#endif
         p1 = a.allocate(too_big);
     } catch ( std::bad_alloc ) {
         exception_caught = true;
@@ -227,7 +259,7 @@ void Test(A &a) {
     // thread safety
     NativeParallelFor( 4, Body<A>(a) );
     ASSERT( NumberOfFoo==0, "Allocate/deallocate count mismatched" );
- 
+
     ASSERT( a==b, NULL );
     ASSERT( !(a!=b), NULL );
 }
diff --git a/src/test/test_allocator_STL.h b/src/test/test_allocator_STL.h
index cc0dd8f..3f10c8e 100644
--- a/src/test/test_allocator_STL.h
+++ b/src/test/test_allocator_STL.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Tests for compatibility with the host's STL.
@@ -26,7 +26,7 @@ template<typename Container>
 void TestSequence(const typename Container::allocator_type &a) {
     Container c(a);
     for( int i=0; i<1000; ++i )
-        c.push_back(i*i);    
+        c.push_back(i*i);
     typename Container::const_iterator p = c.begin();
     for( int i=0; i<1000; ++i ) {
         ASSERT( *p==i*i, NULL );
@@ -40,7 +40,7 @@ template<typename Set>
 void TestSet(const typename Set::allocator_type &a) {
     Set s(typename Set::key_compare(), a);
     typedef typename Set::value_type value_type;
-    for( int i=0; i<100; ++i ) 
+    for( int i=0; i<100; ++i )
         s.insert(value_type(3*i));
     for( int i=0; i<300; ++i ) {
         ASSERT( s.erase(i)==size_t(i%3==0), NULL );
@@ -51,7 +51,7 @@ template<typename Map>
 void TestMap(const typename Map::allocator_type &a) {
     Map m(typename Map::key_compare(), a);
     typedef typename Map::value_type value_type;
-    for( int i=0; i<100; ++i ) 
+    for( int i=0; i<100; ++i )
         m.insert(value_type(i,i*i));
     for( int i=0; i<100; ++i )
         ASSERT( m.find(i)->second==i*i, NULL );
diff --git a/src/test/test_assembly.cpp b/src/test/test_assembly.cpp
index eb74a8e..11562f3 100644
--- a/src/test/test_assembly.cpp
+++ b/src/test/test_assembly.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Program for basic correctness testing of assembly-language routines.
@@ -41,7 +41,7 @@ using tbb::internal::reference_count;
 //TODO: remove this function when atomic function __TBB_XXX are dropped
 //! Test __TBB_CompareAndSwapW
 static void TestCompareExchange() {
-    ASSERT( intptr_t(-10)<10, "intptr_t not a signed integral type?" ); 
+    ASSERT( intptr_t(-10)<10, "intptr_t not a signed integral type?" );
     REMARK("testing __TBB_CompareAndSwapW\n");
     for( intptr_t a=-10; a<10; ++a )
         for( intptr_t b=-10; b<10; ++b )
@@ -54,8 +54,8 @@ static void TestCompareExchange() {
                 intptr_t x = a;
 #endif
                 intptr_t y = __TBB_CompareAndSwapW(&x,b,c);
-                ASSERT( y==a, NULL ); 
-                if( a==c ) 
+                ASSERT( y==a, NULL );
+                if( a==c )
                     ASSERT( x==b, NULL );
                 else
                     ASSERT( x==a, NULL );
@@ -121,8 +121,8 @@ static void TestLog2() {
             if( uintptr_t k = i*j ) {
                 uintptr_t actual = __TBB_Log2(k);
                 const uintptr_t ONE = 1; // warning suppression again
-                ASSERT( k >= ONE<<actual, NULL );          
-                ASSERT( k>>1 < ONE<<actual, NULL );        
+                ASSERT( k >= ONE<<actual, NULL );
+                ASSERT( k>>1 < ONE<<actual, NULL );
             }
         }
     }
@@ -133,6 +133,21 @@ static void TestPause() {
     __TBB_Pause(1);
 }
 
+static void TestTimeStamp() {
+    REMARK("testing __TBB_time_stamp");
+#if defined(__TBB_time_stamp)
+    tbb::internal::machine_tsc_t prev = __TBB_time_stamp();
+    for ( int i=0; i<1000; ++i ) {
+        tbb::internal::machine_tsc_t curr = __TBB_time_stamp();
+        ASSERT(curr>prev, "__TBB_time_stamp has returned non-monotonically increasing quantity");
+        prev=curr;
+    }
+    REMARK("\n");
+#else
+    REMARK(" skipped\n");
+#endif
+}
+
 int TestMain () {
     __TBB_TRY {
         TestLog2();
@@ -140,6 +155,7 @@ int TestMain () {
         TestCompareExchange();
         TestAtomicCounter();
         TestPause();
+        TestTimeStamp();
     } __TBB_CATCH(...) {
         ASSERT(0,"unexpected exception");
     }
diff --git a/src/test/test_async_msg.cpp b/src/test/test_async_msg.cpp
new file mode 100644
index 0000000..071db10
--- /dev/null
+++ b/src/test/test_async_msg.cpp
@@ -0,0 +1,652 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+#ifndef TBB_PREVIEW_FLOW_GRAPH_FEATURES
+    #define TBB_PREVIEW_FLOW_GRAPH_FEATURES 1
+#endif
+
+#include "tbb/tbb_config.h"
+
+#if __TBB_PREVIEW_ASYNC_MSG
+
+#if _MSC_VER
+#pragma warning (disable: 4503) // Suppress "decorated name length exceeded, name was truncated" warning
+#endif
+
+#include "tbb/flow_graph.h"
+#include "tbb/tbb_thread.h"
+#include "tbb/concurrent_queue.h"
+
+#include "harness.h"
+#include "harness_graph.h"
+#include "harness_barrier.h"
+
+#include <sstream>      // std::ostringstream
+#include <type_traits>  // std::is_base_of
+
+static const int USE_N = 1000;
+static const int ACTIVITY_PAUSE_MS_NODE1 = 0;//500;
+static const int ACTIVITY_PAUSE_MS_NODE2 = 0;//100;
+
+#define DO_NOT_INCREMENT_FG_WAIT_COUNT_IN_LAST_CASE 1
+
+#define _TRACE_(msg) {                                                  \
+    if (Verbose) {                                                      \
+        std::ostringstream os;                                          \
+        os << "[TID=" << tbb::this_tbb_thread::get_id() << "] " << msg; \
+        REMARK("%s\n", os.str().c_str());                               \
+    }                                                                   \
+}
+
+class UserAsyncActivity // Singleton
+{
+public:
+    static UserAsyncActivity* create(const tbb::flow::async_msg<int>& msg, int timeoutMS) {
+        ASSERT(s_Activity == NULL, "created twice");
+        _TRACE_( "Create UserAsyncActivity" );
+        s_Activity = new UserAsyncActivity(msg, timeoutMS);
+        _TRACE_( "CREATED! UserAsyncActivity" );
+        return s_Activity;
+    }
+
+    static void destroy() {
+        _TRACE_( "Start UserAsyncActivity::destroy()" );
+        ASSERT(s_Activity != NULL, "destroyed twice");
+        s_Activity->myThread.join();
+        delete s_Activity;
+        s_Activity = NULL;
+        _TRACE_( "End UserAsyncActivity::destroy()" );
+    }
+
+    static int s_Result;
+
+private:
+    static void threadFunc(UserAsyncActivity* activity) {
+        _TRACE_( "UserAsyncActivity::threadFunc" );
+
+        Harness::Sleep(activity->myTimeoutMS);
+
+        const int result = static_cast<int>(reinterpret_cast<size_t>(activity)) & 0xFF; // just different random results
+        s_Result = result;
+
+        _TRACE_( "UserAsyncActivity::threadFunc - returned result " << result );
+
+        activity->returnActivityResults(result);
+    }
+
+    UserAsyncActivity(const tbb::flow::async_msg<int>& msg, int timeoutMS) : myMsg(msg), myTimeoutMS(timeoutMS)
+        , myThread(threadFunc, this)
+    {
+        // Start local thread here...
+        _TRACE_( "Started AsyncActivity" );
+    }
+
+    // Will be called from working thread
+    void returnActivityResults(int result) {
+        myMsg.set(result);
+    }
+
+private: // DATA
+    tbb::flow::async_msg<int>   myMsg;
+    int                         myTimeoutMS;
+    tbb::tbb_thread             myThread;
+
+    static UserAsyncActivity*   s_Activity;
+};
+
+UserAsyncActivity* UserAsyncActivity::s_Activity = NULL;
+int UserAsyncActivity::s_Result = -1;
+
+class UserAsyncMsg1 : public tbb::flow::async_msg<int>
+{
+public:
+    typedef tbb::flow::async_msg<int> base;
+
+    UserAsyncMsg1() : base() {}
+    UserAsyncMsg1(int value) : base(value) {}
+    UserAsyncMsg1(const UserAsyncMsg1& msg) : base(msg) {}
+};
+
+struct F2_body : tbb::internal::no_assign
+{
+    static int          s_FinalResult;
+
+    int&                myI;
+    tbb::flow::graph&   myG;
+    bool                myAlive;
+
+    F2_body(int& i, tbb::flow::graph& g) : myI(i), myG(g), myAlive(true) {}
+
+    F2_body(const F2_body& b) : myI(b.myI), myG(b.myG), myAlive(true) {}
+
+    ~F2_body() {
+        myAlive = false;
+        _TRACE_( "~F2_body" );
+    }
+
+    void operator () (int result) {
+        __TBB_ASSERT(myAlive, "dead node");
+
+#if DO_NOT_INCREMENT_FG_WAIT_COUNT_IN_LAST_CASE
+        if (myI <= 1)
+#endif
+        {
+            _TRACE_( "DO myG.DEcrement_wait_count()" );
+            myG.decrement_wait_count();
+        }
+
+        // Handle async activity result here
+        s_FinalResult = result;
+        _TRACE_( "F2: Got async_msg result = " << result );
+    }
+};
+
+// static
+int F2_body::s_FinalResult = -2;
+
+static bool testSimplestCase() {
+    bool bOk = true;
+    _TRACE_( "--- SAMPLE 1 (simple case 3-in-1: F1(A<T>) ---> F2(T)) " );
+
+    for (int i = 0; i <= 2; ++i) {
+        _TRACE_( "CASE " << i + 1 << ": data is " << (i > 0 ? "NOT " : "") << "ready in storage" << (i > 1 ? " NO WAITING in graph" : "") );
+        _TRACE_( "MAIN THREAD" );
+
+        {
+#if DO_NOT_INCREMENT_FG_WAIT_COUNT_IN_LAST_CASE
+            tbb::task_group_context ctx(tbb::task_group_context::isolated, tbb::task_group_context::concurrent_wait | tbb::task_group_context::default_traits);
+            tbb::flow::graph g(ctx);
+#else
+            tbb::flow::graph g;
+#endif
+            tbb::flow::function_node< tbb::flow::continue_msg, UserAsyncMsg1 > f1( g, tbb::flow::unlimited,
+                [&]( tbb::flow::continue_msg ) -> UserAsyncMsg1 {
+                    _TRACE_( "F1: Created async_msg" );
+
+                    UserAsyncMsg1 a;
+                    UserAsyncActivity::create(a, (i == 0 ? 0 : 1)*ACTIVITY_PAUSE_MS_NODE1);
+
+#if DO_NOT_INCREMENT_FG_WAIT_COUNT_IN_LAST_CASE
+                    if (i <= 1)
+#endif
+                    {
+                        _TRACE_( "DO g.increment_wait_count()" );
+                        g.increment_wait_count();
+                    }
+
+                    Harness::Sleep(ACTIVITY_PAUSE_MS_NODE2); // let activity to finish
+                    return a;
+                }
+            );
+
+
+            tbb::flow::function_node< int > f2( g, tbb::flow::unlimited,
+                F2_body(i, g)
+            );
+
+            make_edge(f1, f2);
+            f1.try_put( tbb::flow::continue_msg() );
+            g.wait_for_all();
+            UserAsyncActivity::destroy();
+            _TRACE_( "Done UserAsyncActivity::destroy" );
+            g.wait_for_all();
+            _TRACE_( "Done g.wait_for_all()" );
+        }
+
+        _TRACE_( "--- THE END --- " );
+
+        if (F2_body::s_FinalResult >= 0 && UserAsyncActivity::s_Result == F2_body::s_FinalResult) {
+            _TRACE_( "CASE " << i + 1 << ": " << "PASSED" );
+        }
+        else {
+            _TRACE_( "CASE " << i + 1 << ": " << "FAILED! " << UserAsyncActivity::s_Result << " != " << F2_body::s_FinalResult );
+            bOk = false;
+            ASSERT(0, "testSimplestCase failed");
+        }
+    }
+
+    return bOk;
+}
+
+// ========================================================
+
+class UserAsyncActivityChaining;
+
+class UserAsyncMsg : public tbb::flow::async_msg<int>
+{
+public:
+    typedef tbb::flow::async_msg<int> base;
+
+    UserAsyncMsg() : base() {}
+    UserAsyncMsg(int value) : base(value) {}
+    UserAsyncMsg(const UserAsyncMsg& msg) : base(msg) {}
+
+    // Notify AsyncActivity that it must return result because async calculation chain is over
+    void finalize() const __TBB_override;
+};
+
+class UserAsyncActivityChaining // Singleton: task queue in worker thread
+{
+public:
+    static UserAsyncActivityChaining* instance() {
+        if (s_Activity == NULL) {
+            s_Activity = new UserAsyncActivityChaining();
+        }
+
+        return s_Activity;
+    }
+
+    static void destroy() {
+        ASSERT(s_Activity != NULL, "destroyed twice");
+        s_Activity->myThread.join();
+        delete s_Activity;
+        s_Activity = NULL;
+    }
+
+    static void finish(const UserAsyncMsg& msg) {
+        ASSERT(UserAsyncActivityChaining::s_Activity != NULL, "activity must be alive");
+        UserAsyncActivityChaining::s_Activity->finishTaskQueue(msg);
+    }
+
+    void addWork(int addValue, int timeout = 0) {
+        myQueue.push( MyTask(addValue, timeout) );
+    }
+
+    void finishTaskQueue(const UserAsyncMsg& msg) {
+        myMsg = msg;
+        myQueue.push( MyTask(0, 0, true) );
+    }
+
+    static int s_Result;
+
+private:
+    struct MyTask
+    {
+        MyTask(int addValue = 0, int timeout = 0, bool finishFlag = false)
+            : myAddValue(addValue), myTimeout(timeout), myFinishFlag(finishFlag) {}
+
+        int     myAddValue;
+        int     myTimeout;
+        bool    myFinishFlag;
+    };
+
+    static void threadFunc(UserAsyncActivityChaining* activity)
+    {
+        _TRACE_( "UserAsyncActivityChaining::threadFunc" );
+
+        for (;;)
+        {
+            // Process task queue
+            MyTask work;
+            activity->myQueue.pop(work); // Waits until it can succeed
+
+            _TRACE_( "UserAsyncActivityChaining::threadFunc - work: add "
+                    << work.myAddValue << " (timeout = " << work.myTimeout << ")" << (work.myFinishFlag ? " FINAL" : "") );
+
+            // 'finish flag' task is not real task, just end of queue flag
+            Harness::Sleep(work.myTimeout);
+
+            if (work.myFinishFlag) {
+                break;
+            }
+
+            activity->myQueueSum += work.myAddValue;
+        }
+
+        s_Result = activity->myQueueSum;
+        _TRACE_( "UserAsyncActivityChaining::threadFunc - returned result " << activity->myQueueSum );
+
+        // Get result back to Flow Graph
+        activity->myMsg.set(activity->myQueueSum);
+    }
+
+    UserAsyncActivityChaining()
+        : myQueueSum(0)
+        , myThread(threadFunc, this)
+    {
+        // Start local thread here...
+        _TRACE_( "Started AsyncActivityChaining" );
+    }
+
+private: // DATA
+    tbb::concurrent_bounded_queue<MyTask>   myQueue;
+    int                                     myQueueSum;
+    UserAsyncMsg                            myMsg;
+
+    tbb::tbb_thread                         myThread;
+
+    static UserAsyncActivityChaining*       s_Activity;
+};
+
+// static
+UserAsyncActivityChaining* UserAsyncActivityChaining::s_Activity = NULL;
+// static
+int UserAsyncActivityChaining::s_Result = -4;
+
+// override
+void UserAsyncMsg::finalize() const {
+    _TRACE_( "UserAsyncMsg::finalize()" );
+    UserAsyncActivityChaining::finish(*this);
+}
+
+struct F3_body : tbb::internal::no_assign
+{
+    static int          s_FinalResult;
+
+    int&                myI;
+    tbb::flow::graph&   myG;
+    bool                myAlive;
+
+    F3_body(int& _i, tbb::flow::graph& _g) : myI(_i), myG(_g), myAlive(true) {}
+
+    F3_body(const F3_body& b) : myI(b.myI), myG(b.myG), myAlive(true) {}
+
+    ~F3_body() {
+        myAlive = false;
+        _TRACE_( "~F3_body" );
+    }
+
+    void operator () (int result) {
+        __TBB_ASSERT(myAlive, "dead node");
+#if DO_NOT_INCREMENT_FG_WAIT_COUNT_IN_LAST_CASE
+        if (myI <= 1)
+#endif
+        {
+            _TRACE_( "DO myG.DEcrement_wait_count()" );
+            myG.decrement_wait_count();
+        }
+
+        // Handle async activity result here
+        s_FinalResult = result;
+        _TRACE_( "F3: Got async_msg result = " << result );
+    }
+};
+
+// static
+int F3_body::s_FinalResult = -8;
+
+static bool testChaining() {
+    bool bOk = true;
+    _TRACE_( "--- SAMPLE 2 (case with chaining: F1(A<T>) ---> F2(A<T>) ---> F3(T)) " );
+
+    for (int i = 0; i <= 2; ++i) {
+        _TRACE_( "CASE " << i + 1 << ": data is " << (i > 0 ? "NOT " : "") << "ready in storage" << (i > 1 ? " NO WAITING in graph" : "") );
+        _TRACE_( "MAIN THREAD" );
+
+#if DO_NOT_INCREMENT_FG_WAIT_COUNT_IN_LAST_CASE
+        tbb::task_group_context ctx(tbb::task_group_context::isolated, tbb::task_group_context::concurrent_wait | tbb::task_group_context::default_traits);
+        tbb::flow::graph g(ctx);
+#else
+        tbb::flow::graph g;
+#endif
+        tbb::flow::function_node< tbb::flow::continue_msg, UserAsyncMsg > f1( g, tbb::flow::unlimited,
+            [&]( tbb::flow::continue_msg ) -> UserAsyncMsg {
+                _TRACE_( "F1: Created UserAsyncMsg" );
+
+                UserAsyncMsg a;
+                UserAsyncActivityChaining::instance()->addWork(11, (i == 0 ? 0 : 1)*ACTIVITY_PAUSE_MS_NODE1);
+
+#if DO_NOT_INCREMENT_FG_WAIT_COUNT_IN_LAST_CASE
+                if (i <= 1)
+#endif
+                {
+                    _TRACE_( "DO g.DEcrement_wait_count()" );
+                    g.increment_wait_count();
+                }
+
+                return a;
+            }
+        );
+
+        tbb::flow::function_node< UserAsyncMsg, UserAsyncMsg > f2( g, tbb::flow::unlimited,
+            [&]( UserAsyncMsg a) -> UserAsyncMsg {
+                _TRACE_( "F2: resend UserAsyncMsg" );
+
+                UserAsyncActivityChaining::instance()->addWork(22, (i == 0 ? 0 : 1)*ACTIVITY_PAUSE_MS_NODE1);
+
+                Harness::Sleep(ACTIVITY_PAUSE_MS_NODE2); // let activity to finish
+                return a;
+            }
+        );
+
+        tbb::flow::function_node< int > f3( g, tbb::flow::unlimited,
+            F3_body(i, g)
+        );
+
+        make_edge(f1, f2);
+        make_edge(f2, f3);
+        f1.try_put( tbb::flow::continue_msg() );
+        g.wait_for_all();
+
+        UserAsyncActivityChaining::destroy();
+        _TRACE_( "Done UserAsyncActivityChaining::destroy" );
+        g.wait_for_all();
+        _TRACE_( "Done g.wait_for_all()" );
+
+        _TRACE_( "--- THE END ---" );
+
+        if (F3_body::s_FinalResult >= 0 && UserAsyncActivityChaining::s_Result == F3_body::s_FinalResult) {
+            _TRACE_( "CASE " << i + 1 << ": " << "PASSED" );
+        }
+        else {
+            _TRACE_( "CASE " << i + 1 << ": " << "FAILED! " << UserAsyncActivityChaining::s_Result << " != " << F3_body::s_FinalResult );
+            bOk = false;
+            ASSERT(0, "testChaining failed");
+        }
+    }
+
+    return bOk;
+}
+
+// ========================================================
+namespace testFunctionsAvailabilityNS {
+
+using namespace tbb::flow;
+using tbb::flow::interface9::internal::untyped_sender;
+using tbb::flow::interface9::internal::untyped_receiver;
+
+using tbb::internal::is_same_type;
+using tbb::internal::strip;
+using tbb::flow::interface9::internal::wrap_tuple_elements;
+using tbb::flow::interface9::internal::async_helpers;
+
+class A {}; // Any type (usually called 'T')
+struct ImpossibleType {};
+
+template <typename T>
+struct UserAsync_T   : public async_msg<T> {
+    UserAsync_T() {}
+    UserAsync_T(const T& t) : async_msg<T>(t) {}
+};
+
+typedef UserAsync_T<int  > UserAsync_int;
+typedef UserAsync_T<float> UserAsync_float;
+typedef UserAsync_T<A    > UserAsync_A;
+
+typedef tuple< UserAsync_A, UserAsync_float, UserAsync_int, async_msg<A>, async_msg<float>, async_msg<int>, A, float, int > TypeTuple;
+
+static int g_CheckerCounter = 0;
+
+template <typename T, typename U>
+struct CheckerTryPut {
+    static ImpossibleType check( ... );
+
+    template <typename C>
+    static auto check( C* p, U* q ) -> decltype(p->try_put(*q));
+
+    static const bool value = !is_same_type<decltype(check(static_cast<T*>(0), 0)), ImpossibleType>::value;
+};
+
+template <typename T1, typename T2>
+struct CheckerMakeEdge {
+    static ImpossibleType checkMake( ... );
+    static ImpossibleType checkRemove( ... );
+
+    template <typename N1, typename N2>
+    static auto checkMake( N1* n1, N2* n2 ) -> decltype(tbb::flow::make_edge(*n1, *n2));
+
+    template <typename N1, typename N2>
+    static auto checkRemove( N1* n1, N2* n2 ) -> decltype(tbb::flow::remove_edge(*n1, *n2));
+
+    static const bool valueMake   = !is_same_type<decltype(checkMake  (static_cast<T1*>(0), static_cast<T2*>(0))), ImpossibleType>::value;
+    static const bool valueRemove = !is_same_type<decltype(checkRemove(static_cast<T1*>(0), static_cast<T2*>(0))), ImpossibleType>::value;
+
+    __TBB_STATIC_ASSERT( valueMake == valueRemove, "make_edge() availability is NOT equal to remove_edge() availability" );
+    
+    static const bool value = valueMake;
+};
+
+template <typename T1, typename T2>
+struct TypeChecker {
+     TypeChecker() {
+         ++g_CheckerCounter;
+
+        REMARK("%d: %s -> %s: %s %s \n", g_CheckerCounter, typeid(T1).name(), typeid(T2).name(),
+            (bAllowed ? "YES" : "no"), (bConvertable ? " (Convertable)" : ""));
+     }
+
+// 
+// Check connection: function_node<continue_msg, SENDING_TYPE> <-> function_node<RECEIVING_TYPE>
+//                                         R E C E I V I N G   T Y P E
+// S     'bAllowed'    | int | float | A | async_msg | async_msg | async_msg | UserAsync | UserAsync | UserAsync |
+// E       value       |     |       |   |   <int>   |  <float>  |    <A>    |   _int    |  _float   |   _A      |
+// N   -------------------------------------------------------------------------------------------------------------
+// D       int         |  Y  |       |   |     Y     |           |           |    Y      |           |           |
+// I      float        |     |   Y   |   |           |    Y      |           |           |    Y      |           |
+// N        A          |     |       | Y |           |           |     Y     |           |           |     Y     |
+// G   async_msg<int>  |  Y  |       |   |     Y     |           |           |           |           |           |
+//    async_msg<float> |     |   Y   |   |           |    Y      |           |           |           |           |
+// T   async_msg<A>    |     |       | Y |           |           |     Y     |           |           |           |
+// Y   UserAsync_int   |  Y  |       |   |           |           |           |    Y      |           |           |
+// P  UserAsync_float  |     |   Y   |   |           |           |           |           |    Y      |           |
+// E   UserAsync_A     |     |       | Y |           |           |           |           |           |    Y      |
+// 
+    // Test make_edge() & remove_edge() availability
+    static const bool bAllowed = is_same_type<T1, T2>::value
+        || is_same_type<typename async_helpers<T1>::filtered_type, T2>::value
+        || is_same_type<T1, typename async_helpers<T2>::filtered_type>::value;
+
+    static const bool bConvertable = bAllowed
+        || std::is_base_of<T1, T2>::value
+        || (is_same_type<typename async_helpers<T1>::filtered_type, int>::value && is_same_type<T2, float>::value)
+        || (is_same_type<typename async_helpers<T1>::filtered_type, float>::value && is_same_type<T2, int>::value);
+
+    __TBB_STATIC_ASSERT( (bAllowed == CheckerMakeEdge<function_node<continue_msg, T1>, function_node<T2> >::value), "invalid connection Fn<T1> -> Fn<T2>" );
+    __TBB_STATIC_ASSERT( (bAllowed == CheckerMakeEdge<queue_node<T1>, function_node<T2> >::value), "invalid connection Queue<T1> -> Fn<T2>" );
+
+    // Test make_edge() & remove_edge() availability with output_port<N>(node&)
+    __TBB_STATIC_ASSERT( (bAllowed == CheckerMakeEdge<typename strip< decltype(
+        output_port<0>( *static_cast<multifunction_node< continue_msg, tuple<T1, int> >*>(0) ) ) >::type,
+        function_node<T2> >::value), "invalid connection MultuFn<0><T1,int> -> Fn<T2>" );
+
+    __TBB_STATIC_ASSERT( (bAllowed == CheckerMakeEdge<typename strip< decltype(
+        output_port<1>( *static_cast<multifunction_node< continue_msg, tuple<int, T1> >*>(0) ) ) >::type,
+        function_node<T2> >::value), "invalid connection MultuFn<1><int, T1> -> Fn<T2>" );
+
+    // Test untyped_sender connections
+    __TBB_STATIC_ASSERT( (true == CheckerMakeEdge< untyped_sender, function_node<T1> >::value), "cannot connect UntypedSender -> Fn<T1>" );
+    // Test untyped_receiver connections
+    __TBB_STATIC_ASSERT( (true == CheckerMakeEdge< function_node<continue_msg, T1>, untyped_receiver >::value), "cannot connect F<.., T1> -> UntypedReceiver" );
+
+    // Test untyped_receiver->try_put(T2) availability
+    __TBB_STATIC_ASSERT( (true  == CheckerTryPut<untyped_receiver, T2>::value), "untyped_receiver cannot try_put(T2)" );
+    // Test receiver<T1>->try_put(T2) availability
+    __TBB_STATIC_ASSERT( (bConvertable == CheckerTryPut<receiver<T1>, T2>::value), "invalid availability of receiver<T1>->try_put(T2)" );
+};
+
+template <typename T1>
+struct WrappedChecker {
+    WrappedChecker() {} // Workaround for compilation error
+
+    template <typename T2>
+    struct T1T2Checker : TypeChecker<T1, T2> {};
+
+    typename wrap_tuple_elements< tuple_size<TypeTuple>::value, T1T2Checker, TypeTuple >::type a;
+};
+
+typedef wrap_tuple_elements< tuple_size<TypeTuple>::value, WrappedChecker, TypeTuple >::type Checker;
+
+} // namespace testFunctionsAvailabilityNS
+
+static void testTryPut() {
+    {
+        tbb::flow::graph g;
+        tbb::flow::function_node< int > f(g, tbb::flow::unlimited, [&](int) {});
+
+        ASSERT(f.try_put(5), "try_put(int) must return true");
+        ASSERT(f.try_put(7), "try_put(int) must return true");
+
+        tbb::flow::async_msg<int> a1, a2;
+        ASSERT(f.try_put(a1), "try_put(async_msg) must return true");
+        ASSERT(f.try_put(a2), "try_put(async_msg) must return true");
+        g.wait_for_all();
+    }
+    {
+        tbb::flow::graph g;
+        typedef tbb::flow::indexer_node< int >::output_type output_type;
+        tbb::flow::indexer_node< int > i(g);
+        tbb::flow::function_node< output_type > f(g, tbb::flow::unlimited, [&](output_type) {});
+        make_edge(i, f);
+
+        ASSERT(tbb::flow::input_port<0>(i).try_put(5), "try_put(int) must return true");
+        ASSERT(tbb::flow::input_port<0>(i).try_put(7), "try_put(int) must return true");
+
+        tbb::flow::async_msg<int> a1, a2;
+        ASSERT(tbb::flow::input_port<0>(i).try_put(a1), "try_put(async_msg) must return true");
+        ASSERT(tbb::flow::input_port<0>(i).try_put(a2), "try_put(async_msg) must return true");
+        g.wait_for_all();
+    }
+}
+
+int TestMain() {
+    REMARK(" *** CHECKING FUNCTIONS: make_edge/remove_edge(node<.., T1>, node<T2>) & node<T1>->try_put(T2) ***\n");
+    testFunctionsAvailabilityNS::Checker a;
+    const int typeTupleSize = tbb::flow::tuple_size<testFunctionsAvailabilityNS::TypeTuple>::value;
+    ASSERT(testFunctionsAvailabilityNS::g_CheckerCounter == typeTupleSize*typeTupleSize, "Type checker counter value is incorrect");
+
+    testTryPut();
+
+    // NOTE: Use '-v' command line argument to get traces & remarks
+    tbb::task_scheduler_init init(4);
+    bool bOk = true;
+
+    for (int i = 0; i < USE_N; ++i) {
+        if (i > 0 && i%1000 == 0) {
+            REPORT(" *** Starting TEST %d... ***\n", i);
+        }
+
+        REMARK(" *** TEST %d ***\n", i);
+        bOk = bOk && testSimplestCase();
+        bOk = bOk && testChaining();
+    }
+
+    _TRACE_( " *** " << USE_N << " tests: " << (bOk ? "all tests passed" : "TESTS FAILED !!!") << " ***" );
+    return (bOk ? Harness::Done : Harness::Unknown);
+}
+
+#else // __TBB_PREVIEW_ASYNC_MSG
+
+#include "harness.h"
+
+int TestMain() {
+    return Harness::Skipped;
+}
+
+#endif // __TBB_PREVIEW_ASYNC_MSG
diff --git a/src/test/test_async_node.cpp b/src/test/test_async_node.cpp
index 11fe696..f3bf088 100644
--- a/src/test/test_async_node.cpp
+++ b/src/test/test_async_node.cpp
@@ -1,96 +1,297 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
-*/
+    Copyright (c) 2005-2017 Intel Corporation
 
-#ifndef TBB_PREVIEW_FLOW_GRAPH_NODES
-    #define TBB_PREVIEW_FLOW_GRAPH_NODES 1
-#endif
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
 
-#include "harness.h"
 
-#if __TBB_PREVIEW_ASYNC_NODE
 
+
+*/
+
+#include "harness.h"
+#include "harness_graph.h"
+#include "harness_barrier.h"
 #include "tbb/concurrent_queue.h"
 #include "tbb/flow_graph.h"
 #include "tbb/task.h"
-
 #include "tbb/tbb_thread.h"
+#include <string>
+
+class minimal_type {
+    template<typename T>
+    friend struct place_wrapper;
+
+    int value;
+
+public:
+    minimal_type() : value(-1) {}
+    minimal_type(int v) : value(v) {}
+    minimal_type(const minimal_type &m) : value(m.value) { }
+    minimal_type &operator=(const minimal_type &m) { value = m.value; return *this; }
+};
+
+template <typename T>
+struct place_wrapper {
+    typedef T wrapped_type;
+    T value;
+    tbb::tbb_thread::id thread_id;
+    tbb::task* task_ptr;
+
+    place_wrapper( ) : value(0) {
+        thread_id = tbb::this_tbb_thread::get_id();
+        task_ptr = &tbb::task::self();
+    }
+    place_wrapper( int v ) : value(v) {
+        thread_id = tbb::this_tbb_thread::get_id();
+        task_ptr = &tbb::task::self();
+    }
+
+    place_wrapper( const place_wrapper<int> &v ) : value(v.value), thread_id(v.thread_id), task_ptr(v.task_ptr) { }
 
-#include <assert.h>
+    place_wrapper( const place_wrapper<minimal_type> &v ) : value(v.value), thread_id(v.thread_id), task_ptr(v.task_ptr) { }
+};
 
-const size_t NUMBER_OF_SIGNALS = 10;
+template<typename T1, typename T2>
+struct wrapper_helper {
+    static void check(const T1 &, const T2 &) { }
 
-tbb::atomic<size_t> async_body_exec_count;
-tbb::atomic<size_t> async_activity_processed_signnals_count;
-tbb::atomic<size_t> end_body_exec_count;
+    static void copy_value(const T1 &in, T2 &out) {
+        out = in;
+    }
+};
 
-struct signal_type {
-    size_t signal;
-    tbb::task* prev_task;
+template<typename T1, typename T2>
+struct wrapper_helper< place_wrapper<T1>, place_wrapper<T2> > {
+    static void check(const place_wrapper<T1> &a, const place_wrapper<T2> &b) {
+       REMARK("a.task_ptr == %p != b.task_ptr == %p\n", a.task_ptr, b.task_ptr);
+       ASSERT( (a.thread_id != b.thread_id), "same thread used to execute adjacent nodes");
+       ASSERT( (a.task_ptr != b.task_ptr), "same task used to execute adjacent nodes");
+       return;
+    }
+    static void copy_value(const place_wrapper<T1> &in, place_wrapper<T2> &out) {
+        out.value = in.value;
+    }
 };
 
-struct async_result_type {
-    size_t signal;
-    tbb::tbb_thread::id async_thread_id;
+const int NUMBER_OF_MSGS = 10;
+const int UNKNOWN_NUMBER_OF_ITEMS = -1;
+tbb::atomic<int> async_body_exec_count;
+tbb::atomic<int> async_activity_processed_msg_count;
+tbb::atomic<int> end_body_exec_count;
+
+typedef tbb::flow::async_node< int, int > counting_async_node_type;
+typedef counting_async_node_type::gateway_type counting_gateway_type;
+
+struct counting_async_body {
+    tbb::atomic<int> my_async_body_exec_count;
+
+    counting_async_body() {
+        my_async_body_exec_count = 0;
+    }
+
+    void operator()( const int &input, counting_gateway_type& gateway) {
+        REMARK( "Body execution with input == %d\n", input);
+        ++my_async_body_exec_count;
+        ++async_body_exec_count;
+        if ( input == -1 ) {
+            bool result = tbb::task::self().group()->cancel_group_execution();
+            REMARK( "Canceling graph execution\n" );
+            ASSERT( result == true, "attempted to cancel graph twice" );
+            Harness::Sleep(50);
+        }
+        gateway.try_put(input);
+    }
 };
 
-typedef tbb::flow::async_node< signal_type, async_result_type > async_node_type;
+void test_reset() {
+    const int N = NUMBER_OF_MSGS;
+    async_body_exec_count = 0;
+
+    tbb::flow::graph g;
+    counting_async_node_type a(g, tbb::flow::serial, counting_async_body() );
+
+    const int R = 3;
+    harness_counting_receiver<int> r[R];
+    for (int i = 0; i < R; ++i) {
+#if __TBB_FLOW_GRAPH_CPP11_FEATURES
+        tbb::flow::make_edge(a, r[i]);
+#else
+        tbb::flow::make_edge( tbb::flow::output_port<0>(a), r[i] );
+#endif
+    }
+
+    REMARK( "One body execution\n" );
+    a.try_put(-1);
+    for (int i = 0; i < N; ++i) {
+       a.try_put(i);
+    }
+    g.wait_for_all();
+    // should be canceled with only 1 item reaching the async_body and the counting receivers
+    // and N items left in the node's queue
+    ASSERT( g.is_cancelled() == true, "task group not canceled" );
+
+    counting_async_body b1 = tbb::flow::copy_body<counting_async_body>(a);
+    ASSERT( int(async_body_exec_count) == int(b1.my_async_body_exec_count), "body and global body counts are different" );
+    ASSERT( int(async_body_exec_count) == 1, "global body execution count not 1"  );
+    for (int i = 0; i < R; ++i) {
+        ASSERT( int(r[i].my_count) == 1, "counting receiver count not 1" );
+    }
+
+    // should clear the async_node queue, but retain its local count at 1 and keep all edges
+    g.reset(tbb::flow::rf_reset_protocol);
+
+    REMARK( "N body executions\n" );
+    for (int i = 0; i < N; ++i) {
+       a.try_put(i);
+    }
+    g.wait_for_all();
+    ASSERT( g.is_cancelled() == false, "task group not canceled" );
+
+    // a total of N+1 items should have passed through the node body
+    // the local body count should also be N+1
+    // and the counting receivers should all have a count of N+1
+    counting_async_body b2 = tbb::flow::copy_body<counting_async_body>(a);
+    ASSERT( int(async_body_exec_count) == int(b2.my_async_body_exec_count), "local and global body execution counts are different" );
+    REMARK( "async_body_exec_count==%d\n", int(async_body_exec_count) );
+    ASSERT( int(async_body_exec_count) == N+1, "globcal body execution count not N+1"  );
+    for (int i = 0; i < R; ++i) {
+        ASSERT( int(r[i].my_count) == N+1, "counting receiver has not received N+1 items" );
+    }
+
+    REMARK( "N body executions with new bodies\n" );
+    // should clear the async_node queue and reset its local count to 0, but keep all edges
+    g.reset(tbb::flow::rf_reset_bodies);
+    for (int i = 0; i < N; ++i) {
+       a.try_put(i);
+    }
+    g.wait_for_all();
+    ASSERT( g.is_cancelled() == false, "task group not canceled" );
+
+    // a total of 2N+1 items should have passed through the node body
+    // the local body count should be N
+    // and the counting receivers should all have a count of 2N+1
+    counting_async_body b3 = tbb::flow::copy_body<counting_async_body>(a);
+    ASSERT( int(async_body_exec_count) == 2*N+1, "global body execution count not 2N+1"  );
+    ASSERT( int(b3.my_async_body_exec_count) == N, "local body execution count not N"  );
+    for (int i = 0; i < R; ++i) {
+        ASSERT( int(r[i].my_count) == 2*N+1, "counting receiver has not received 2N+1 items" );
+    }
+
+    // should clear the async_node queue and keep its local count at N and remove all edges
+    REMARK( "N body executions with no edges\n" );
+    g.reset(tbb::flow::rf_clear_edges);
+    for (int i = 0; i < N; ++i) {
+       a.try_put(i);
+    }
+    g.wait_for_all();
+    ASSERT( g.is_cancelled() == false, "task group not canceled" );
+
+    // a total of 3N+1 items should have passed through the node body
+    // the local body count should now be 2*N
+    // and the counting receivers should remain at a count of 2N+1
+    counting_async_body b4 = tbb::flow::copy_body<counting_async_body>(a);
+    ASSERT( int(async_body_exec_count) == 3*N+1, "global body execution count not 3N+1"  );
+    ASSERT( int(b4.my_async_body_exec_count) == 2*N, "local body execution count not 2N"  );
+    for (int i = 0; i < R; ++i) {
+        ASSERT( int(r[i].my_count) == 2*N+1, "counting receiver has not received 2N+1 items" );
+    }
+
+    // put back 1 edge to receiver 0
+    REMARK( "N body executions with 1 edge\n" );
+#if __TBB_FLOW_GRAPH_CPP11_FEATURES
+    tbb::flow::make_edge(a, r[0]);
+#else
+    tbb::flow::make_edge( tbb::flow::output_port<0>(a), r[0] );
+#endif
+    for (int i = 0; i < N; ++i) {
+       a.try_put(i);
+    }
+    g.wait_for_all();
+    ASSERT( g.is_cancelled() == false, "task group not canceled" );
+
+    // a total of 4N+1 items should have passed through the node body
+    // the local body count should now be 3*N
+    // and all of the counting receivers should remain at a count of 2N+1, except r[0] which should be 3N+1
+    counting_async_body b5 = tbb::flow::copy_body<counting_async_body>(a);
+    ASSERT( int(async_body_exec_count) == 4*N+1, "global body execution count not 4N+1"  );
+    ASSERT( int(b5.my_async_body_exec_count) == 3*N, "local body execution count not 3N"  );
+    ASSERT( int(r[0].my_count) == 3*N+1, "counting receiver has not received 3N+1 items" );
+    for (int i = 1; i < R; ++i) {
+        ASSERT( int(r[i].my_count) == 2*N+1, "counting receiver has not received 2N+1 items" );
+    }
+
+    // should clear the async_node queue and keep its local count at N and remove all edges
+    REMARK( "N body executions with no edges and new body\n" );
+    g.reset(static_cast<tbb::flow::reset_flags>(tbb::flow::rf_reset_bodies|tbb::flow::rf_clear_edges));
+    for (int i = 0; i < N; ++i) {
+       a.try_put(i);
+    }
+    g.wait_for_all();
+    ASSERT( g.is_cancelled() == false, "task group not canceled" );
+
+    // a total of 4N+1 items should have passed through the node body
+    // the local body count should now be 3*N
+    // and all of the counting receivers should remain at a count of 2N+1, except r[0] which should be 3N+1
+    counting_async_body b6 = tbb::flow::copy_body<counting_async_body>(a);
+    ASSERT( int(async_body_exec_count) == 5*N+1, "global body execution count not 5N+1"  );
+    ASSERT( int(b6.my_async_body_exec_count) == N, "local body execution count not N"  );
+    ASSERT( int(r[0].my_count) == 3*N+1, "counting receiver has not received 3N+1 items" );
+    for (int i = 1; i < R; ++i) {
+        ASSERT( int(r[i].my_count) == 2*N+1, "counting receiver has not received 2N+1 items" );
+    }
+}
 
 template< typename Input, typename Output >
-class AsyncActivity {
+class async_activity {
 public:
     typedef Input input_type;
     typedef Output output_type;
-    typedef typename async_node_type::async_gateway_type async_gateway_type;
+    typedef tbb::flow::async_node< input_type, output_type > async_node_type;
+    typedef typename async_node_type::gateway_type gateway_type;
+
     struct work_type {
         input_type input;
-        async_gateway_type* callback;
+        gateway_type* gateway;
     };
 
     class ServiceThreadBody {
     public:
-        ServiceThreadBody( AsyncActivity* activity ) : my_activity( activity ) {}
+        ServiceThreadBody( async_activity* activity ) : my_activity( activity ) {}
 
         void operator()() {
             my_activity->process();
         }
     private:
-        AsyncActivity* my_activity;
+        async_activity* my_activity;
     };
 
-    AsyncActivity() {
+    async_activity(int expected_items, int sleep_time = 50) : my_expected_items(expected_items), my_sleep_time(sleep_time) {
         my_quit = false;
         tbb::tbb_thread( ServiceThreadBody( this ) ).swap( my_service_thread );
     }
 
 private:
-    AsyncActivity( const AsyncActivity& ) {
-    }
+
+    async_activity( const async_activity& ) : my_expected_items(UNKNOWN_NUMBER_OF_ITEMS), my_sleep_time(0) { }
 
 public:
-    ~AsyncActivity() {
+    ~async_activity() {
         stop();
         my_service_thread.join();
     }
 
-    void submit( input_type input, async_gateway_type& callback ) {
-        work_type work = { input, &callback };
+    void submit( const input_type &input, gateway_type& gateway ) {
+        work_type work = { input, &gateway};
         my_work_queue.push( work );
     }
 
@@ -98,16 +299,15 @@ public:
         do {
             work_type work;
             if( my_work_queue.try_pop( work ) ) {
-                Harness::Sleep(500);
-                
-                ++async_activity_processed_signnals_count;
-                
-                async_result_type async_result;
-                async_result.signal = work.input.signal;
-                async_result.async_thread_id = tbb::this_tbb_thread::get_id();
-                
-                work.callback->async_try_put( async_result );
-                work.callback->async_commit();
+                Harness::Sleep(my_sleep_time);
+                ++async_activity_processed_msg_count;
+                output_type output;
+                wrapper_helper<output_type, output_type>::copy_value(work.input, output);
+                wrapper_helper<output_type, output_type>::check(work.input, output);
+                work.gateway->try_put(output);
+                if ( my_expected_items == UNKNOWN_NUMBER_OF_ITEMS || int(async_activity_processed_msg_count) == my_expected_items ) {
+                    work.gateway->release_wait();
+                }
             }
         } while( my_quit == false || !my_work_queue.empty());
     }
@@ -116,7 +316,18 @@ public:
         my_quit = true;
     }
 
+    bool should_reserve_each_time() {
+        if ( my_expected_items == UNKNOWN_NUMBER_OF_ITEMS )
+            return true;
+        else
+            return false;
+    }
+
 private:
+
+    const int my_expected_items;
+    const int my_sleep_time;
+
     tbb::concurrent_queue< work_type > my_work_queue;
 
     tbb::atomic< bool > my_quit;
@@ -124,84 +335,272 @@ private:
     tbb::tbb_thread my_service_thread;
 };
 
-class StartBody {
+template<typename Input, typename Output>
+struct basic_test {
+    typedef Input input_type;
+    typedef Output output_type;
+    typedef tbb::flow::async_node< input_type, output_type > async_node_type;
+    typedef typename async_node_type::gateway_type gateway_type;
+
+    class start_body_type {
+        typedef Input input_type;
+    public:
+        input_type operator()( int input ) {
+            return input_type(input);
+        }
+    };
+
+#if !__TBB_LAMBDAS_PRESENT
+    class async_body_type {
+        typedef Input input_type;
+        typedef Output output_type;
+        typedef tbb::flow::async_node< input_type, output_type > async_node_type;
+        typedef typename async_node_type::gateway_type gateway_type;
+    public:
+        typedef async_activity<input_type, output_type> async_activity_type;
+
+        async_body_type( async_activity_type* aa ) : my_async_activity( aa ) { }
+
+        async_body_type( const async_body_type& other ) : my_async_activity( other.my_async_activity ) { }
+
+        void operator()( const input_type &input, gateway_type& gateway ) {
+            ++async_body_exec_count;
+            my_async_activity->submit( input, gateway);
+            if ( my_async_activity->should_reserve_each_time() )
+                gateway.reserve_wait();
+        }
+
+    private:
+        async_activity_type* my_async_activity;
+    };
+#endif
+
+    class end_body_type {
+        typedef Output output_type;
+    public:
+        void operator()( const output_type &input ) {
+            ++end_body_exec_count;
+            output_type output;
+            wrapper_helper<output_type, output_type>::check(input, output);
+        }
+    };
+
+    basic_test() {}
+
 public:
-    signal_type operator()( size_t input ) {
-        //Harness::Sleep(100);
 
-        signal_type output;
-        output.signal = input;
-        output.prev_task = &tbb::task::self(); 
-        return output;
+    static int run(int async_expected_items = UNKNOWN_NUMBER_OF_ITEMS) {
+        async_activity<input_type, output_type> my_async_activity(async_expected_items);
+        tbb::flow::graph g;
+        tbb::flow::function_node< int, input_type > start_node( g, tbb::flow::unlimited, start_body_type() );
+#if __TBB_LAMBDAS_PRESENT
+        async_node_type offload_node(g, tbb::flow::unlimited, [&] (const input_type &input, gateway_type& gateway) {
+            ++async_body_exec_count;
+            my_async_activity.submit(input, gateway);
+            if(my_async_activity.should_reserve_each_time())
+                gateway.reserve_wait();
+        } );
+#else
+        async_node_type offload_node( g, tbb::flow::unlimited, async_body_type( &my_async_activity ) );
+#endif
+
+        tbb::flow::function_node< output_type > end_node( g, tbb::flow::unlimited, end_body_type() );
+
+        tbb::flow::make_edge( start_node, offload_node );
+#if __TBB_FLOW_GRAPH_CPP11_FEATURES
+        tbb::flow::make_edge( offload_node, end_node );
+#else
+        tbb::flow::make_edge( tbb::flow::output_port<0>(offload_node), end_node );
+#endif
+        async_body_exec_count = 0;
+        async_activity_processed_msg_count = 0;
+        end_body_exec_count = 0;
+
+        if (async_expected_items != UNKNOWN_NUMBER_OF_ITEMS ) {
+            offload_node.gateway().reserve_wait();
+        }
+        for (int i = 0; i < NUMBER_OF_MSGS; ++i) {
+            start_node.try_put(i);
+        }
+        g.wait_for_all();
+        ASSERT( async_body_exec_count == NUMBER_OF_MSGS, "AsyncBody procesed wrong number of signals" );
+        ASSERT( async_activity_processed_msg_count == NUMBER_OF_MSGS, "AsyncActivity processed wrong number of signals" );
+        ASSERT( end_body_exec_count == NUMBER_OF_MSGS, "EndBody processed wrong number of signals");
+        REMARK("async_body_exec_count == %d == async_activity_processed_msg_count == %d == end_body_exec_count == %d\n",
+                int(async_body_exec_count), int(async_activity_processed_msg_count), int(end_body_exec_count));
+        return Harness::Done;
     }
+
 };
 
+int test_copy_ctor() {
+    const int N = NUMBER_OF_MSGS;
+    async_body_exec_count = 0;
 
-template< typename Output >
-class AsyncBody {
-public:
-    typedef AsyncActivity< signal_type, Output > async_activity_type;
-    
-    AsyncBody( async_activity_type* async_activity ) : my_async_activity( async_activity ) {
-    }
+    harness_counting_receiver<int> r1;
+    harness_counting_receiver<int> r2;
 
-    AsyncBody( const AsyncBody& other ) : my_async_activity( other.my_async_activity ) {
-    }
+    tbb::flow::graph g;
+    counting_async_node_type a(g, tbb::flow::unlimited, counting_async_body() );
+    counting_async_node_type b(a);
+#if __TBB_FLOW_GRAPH_CPP11_FEATURES
+    tbb::flow::make_edge(a, r1);
+    tbb::flow::make_edge(b, r2);
+#else
+    tbb::flow::make_edge(tbb::flow::output_port<0>(a), r1);
+    tbb::flow::make_edge(tbb::flow::output_port<0>(b), r2);
+#endif
 
-    void operator()( signal_type input, async_node_type::async_gateway_type& my_node ) {
-        ++async_body_exec_count;
-       
-        tbb::task* current_task = &tbb::task::self();
-        ASSERT(input.prev_task != current_task, "async_node body was not executed in separate task");
-        
-        input.prev_task = current_task;
-        my_async_activity->submit( input, my_node );
-        my_node.async_reserve();
+    for (int i = 0; i < N; ++i) {
+       a.try_put(i);
     }
+    g.wait_for_all();
 
-private:
-    async_activity_type* my_async_activity;
-};
+    REMARK("async_body_exec_count = %d\n", int(async_body_exec_count));
+    REMARK("r1.my_count == %d and r2.my_count = %d\n", int(r1.my_count), int(r2.my_count));
+    ASSERT( int(async_body_exec_count) == NUMBER_OF_MSGS, "AsyncBody procesed wrong number of signals" );
+    ASSERT( int(r1.my_count) == N, "counting receiver r1 has not received N items" );
+    ASSERT( int(r2.my_count) == 0, "counting receiver r2 has not received 0 items" );
 
-/* TODO: once the task_arena submit is possible, we need to check that
- * the StartBody and EndBody run in the same arena. */
-class EndBody {
-public:
-    void operator()( async_result_type input ) {
-        ASSERT( input.async_thread_id != tbb::this_tbb_thread::get_id(), "end_node body executed in service thread" );
-        ++end_body_exec_count;
+    for (int i = 0; i < N; ++i) {
+       b.try_put(i);
     }
-};
+    g.wait_for_all();
+
+    REMARK("async_body_exec_count = %d\n", int(async_body_exec_count));
+    REMARK("r1.my_count == %d and r2.my_count = %d\n", int(r1.my_count), int(r2.my_count));
+    ASSERT( int(async_body_exec_count) == 2*NUMBER_OF_MSGS, "AsyncBody procesed wrong number of signals" );
+    ASSERT( int(r1.my_count) == N, "counting receiver r1 has not received N items" );
+    ASSERT( int(r2.my_count) == N, "counting receiver r2 has not received N items" );
+    return Harness::Done;
+}
 
-#endif // __TBB_PREVIEW_ASYNC_NODE 
+tbb::atomic<int> main_tid_count;
 
-int TestMain() {
-#if __TBB_PREVIEW_ASYNC_NODE
-    AsyncActivity< signal_type, async_result_type > async_activity;
+template<typename Input, typename Output>
+struct spin_test {
+    typedef Input input_type;
+    typedef Output output_type;
+    typedef tbb::flow::async_node< input_type, output_type > async_node_type;
+    typedef typename async_node_type::gateway_type gateway_type;
 
-    tbb::flow::graph g;
+    class start_body_type {
+        typedef Input input_type;
+    public:
+        input_type operator()( int input ) {
+            return input_type(input);
+        }
+    };
 
-    tbb::flow::function_node< size_t, signal_type > start_node( g, tbb::flow::unlimited, StartBody() );
-    
-    async_node_type async_node_obj( g, AsyncBody< async_result_type >( &async_activity ) );
+#if !__TBB_LAMBDAS_PRESENT
+    class async_body_type {
+        typedef Input input_type;
+        typedef Output output_type;
+        typedef tbb::flow::async_node< input_type, output_type > async_node_type;
+        typedef typename async_node_type::gateway_type gateway_type;
+    public:
+        typedef async_activity<input_type, output_type> async_activity_type;
 
-    tbb::flow::function_node< async_result_type > end_node(g, tbb::flow::unlimited, EndBody() );
+        async_body_type( async_activity_type* aa ) : my_async_activity( aa ) { }
 
-    make_edge( start_node, async_node_obj );
-    make_edge( async_node_obj, end_node );
+        async_body_type( const async_body_type& other ) : my_async_activity( other.my_async_activity ) { }
 
-    for (size_t i = 0; i < NUMBER_OF_SIGNALS; ++i) {
-        start_node.try_put( i );
-    }
+        void operator()(const input_type &input, gateway_type& gateway) {
+            ++async_body_exec_count;
+            my_async_activity->submit(input, gateway);
+            if(my_async_activity->should_reserve_each_time())
+                gateway.reserve_wait();
+        }
 
-    g.wait_for_all();
+    private:
+        async_activity_type* my_async_activity;
+    };
+#endif
 
-    ASSERT( async_body_exec_count == NUMBER_OF_SIGNALS, "AsyncBody procesed wrong number of signals" );
-    ASSERT( async_activity_processed_signnals_count == NUMBER_OF_SIGNALS, "AsyncActivity processed wrong number of signals" );
-    ASSERT( end_body_exec_count == NUMBER_OF_SIGNALS, "EndBody processed wrong number of signals");
+    class end_body_type {
+        typedef Output output_type;
+        tbb::tbb_thread::id my_main_tid;
+        Harness::SpinBarrier *my_barrier;
+    public:
+        end_body_type(tbb::tbb_thread::id t, Harness::SpinBarrier &b) : my_main_tid(t), my_barrier(&b) { }
 
-    return Harness::Done;
+        void operator()( const output_type & ) {
+            ++end_body_exec_count;
+            if (tbb::this_tbb_thread::get_id() == my_main_tid) {
+               ++main_tid_count;
+            }
+            my_barrier->timed_wait_noerror(10);
+        }
+    };
+
+    spin_test() {}
+
+    static int run(int nthreads, int async_expected_items = UNKNOWN_NUMBER_OF_ITEMS) {
+        async_activity<input_type, output_type> my_async_activity(async_expected_items, 0);
+        Harness::SpinBarrier spin_barrier(nthreads);
+        tbb::flow::graph g;
+        tbb::flow::function_node< int, input_type > start_node( g, tbb::flow::unlimited, start_body_type() );
+#if __TBB_LAMBDAS_PRESENT
+        async_node_type offload_node(g, tbb::flow::unlimited, [&](const input_type &input, gateway_type& gateway) {
+            ++async_body_exec_count;
+            my_async_activity.submit(input, gateway);
+            if(my_async_activity.should_reserve_each_time())
+                gateway.reserve_wait();
+        });
 #else
-    return Harness::Skipped;
+        async_node_type offload_node( g, tbb::flow::unlimited, async_body_type( &my_async_activity ) );
 #endif
+        tbb::flow::function_node< output_type > end_node( g, tbb::flow::unlimited, end_body_type(tbb::this_tbb_thread::get_id(), spin_barrier) );
+        tbb::flow::make_edge( start_node, offload_node );
+#if __TBB_FLOW_GRAPH_CPP11_FEATURES
+        tbb::flow::make_edge( offload_node, end_node );
+#else
+        tbb::flow::make_edge( tbb::flow::output_port<0>(offload_node), end_node );
+#endif
+        async_body_exec_count = 0;
+        async_activity_processed_msg_count = 0;
+        end_body_exec_count = 0;
+        main_tid_count = 0;
+
+        if (async_expected_items != UNKNOWN_NUMBER_OF_ITEMS ) {
+            offload_node.gateway().reserve_wait();
+        }
+        for (int i = 0; i < nthreads*NUMBER_OF_MSGS; ++i) {
+            start_node.try_put(i);
+        }
+        g.wait_for_all();
+        ASSERT( async_body_exec_count == nthreads*NUMBER_OF_MSGS, "AsyncBody procesed wrong number of signals" );
+        ASSERT( async_activity_processed_msg_count == nthreads*NUMBER_OF_MSGS, "AsyncActivity processed wrong number of signals" );
+        ASSERT( end_body_exec_count == nthreads*NUMBER_OF_MSGS, "EndBody processed wrong number of signals");
+        ASSERT_WARNING( main_tid_count != 0, "Main thread did not participate in end_body tasks");
+        REMARK("async_body_exec_count == %d == async_activity_processed_msg_count == %d == end_body_exec_count == %d\n",
+                int(async_body_exec_count), int(async_activity_processed_msg_count), int(end_body_exec_count));
+        return Harness::Done;
+    }
+
+};
+
+void test_for_spin_avoidance() {
+    spin_test<int, int>::run(4);
+}
+
+template< typename Input, typename Output >
+int run_tests() {
+    basic_test<Input, Output>::run();
+    basic_test<Input, Output>::run(NUMBER_OF_MSGS);
+    basic_test<place_wrapper<Input>, place_wrapper<Output> >::run();
+    basic_test<place_wrapper<Input>, place_wrapper<Output> >::run(NUMBER_OF_MSGS);
+    return Harness::Done;
 }
+
+int TestMain() {
+    tbb::task_scheduler_init init(4);
+    run_tests<int, int>();
+    run_tests<minimal_type, minimal_type>();
+    run_tests<int, minimal_type>();
+    test_reset();
+    test_copy_ctor();
+    test_for_spin_avoidance();
+    return Harness::Done;
+}
+
diff --git a/src/test/test_atomic.cpp b/src/test/test_atomic.cpp
index 3ea4ebd..53e35d6 100644
--- a/src/test/test_atomic.cpp
+++ b/src/test/test_atomic.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "harness_defs.h"
@@ -50,11 +50,6 @@ using std::memcmp;
     #pragma GCC diagnostic ignored "-Wstrict-aliasing"
 #endif
 
-// Intel(R) Compiler have an issue when a scoped enum with a specified underlying type has negative values.
-#define __TBB_ICC_SCOPED_ENUM_WITH_UNDERLYING_TYPE_NEGATIVE_VALUE_BROKEN ( _MSC_VER && !__TBB_DEBUG && __INTEL_COMPILER && __INTEL_COMPILER <= 1500 )
-// Intel(R) Compiler have an issue with __atomic_load_explicit from a scoped enum with a specified underlying type.
-#define __TBB_ICC_SCOPED_ENUM_WITH_UNDERLYING_TYPE_ATOMIC_LOAD_BROKEN ( TBB_USE_ICC_BUILTINS && !__TBB_DEBUG && __INTEL_COMPILER && __INTEL_COMPILER <= 1500 )
-
 enum LoadStoreExpression {
     UseOperators,
     UseImplicitAcqRel,
@@ -102,7 +97,7 @@ template<typename T, LoadStoreExpression E> tbb::atomic<T> TestStruct<T, E>::gCo
 //! Test compare_and_swap template members of class atomic<T> for memory_semantics=M
 template<typename T,tbb::memory_semantics M>
 void TestCompareAndSwapWithExplicitOrdering( T i, T j, T k ) {
-    ASSERT( i!=k, "values must be distinct" ); 
+    ASSERT( i!=k && i!=j, "values must be distinct" );
     // Test compare_and_swap that should fail
     TestStruct<T> x(i);
     T old = x.counter.template compare_and_swap<M>( j, k );
@@ -117,7 +112,7 @@ void TestCompareAndSwapWithExplicitOrdering( T i, T j, T k ) {
 //! i, j, k must be different values
 template<typename T>
 void TestCompareAndSwap( T i, T j, T k ) {
-    ASSERT( i!=k, "values must be distinct" );
+    ASSERT( i!=k && i!=j, "values must be distinct" );
     // Test compare_and_swap that should fail
     TestStruct<T> x(i);
     T old = x.counter.compare_and_swap( j, k );
@@ -396,6 +391,7 @@ void TestConstExprInitializationIsTranslationTime(){
     constexpr atomic_t a(8);
     ASSERT(a == 8,ct_init_failed_msg);
 
+#if !__TBB_CONSTEXPR_MEMBER_FUNCTION_BROKEN
     constexpr tbb::atomic<test_constexpr_initialization_helper::white_box_ad_hoc_type> ct_atomic(10);
     //for some unknown reason clang does not managed to enum syntax
 #if __clang__
@@ -407,6 +403,7 @@ void TestConstExprInitializationIsTranslationTime(){
     ASSERT(ct_atomic_value_ten == 10,ct_init_failed_msg);
     int array[ct_atomic_value_ten];
     ASSERT(Harness::array_length(array) == 10,ct_init_failed_msg);
+#endif //__TBB_CONSTEXPR_MEMBER_FUNCTION_BROKEN
 }
 
 #include <string>
@@ -475,7 +472,7 @@ namespace TestConstExprInitializationOfGlobalObjectsHelper{
        static_before(){ result = (static_atomic==ct_value); }            \
     } ;                                                                  \
                                                                          \
-    typename tester<T>::static_before tester<T>::static_before_;         \
+    tester<T>::static_before tester<T>::static_before_;                  \
     tbb::atomic<T> tester<T>::static_atomic(ct_value);                   \
                                                                          \
     auto_registered_tests_helper::registration<T> tester<T>::registered; \
@@ -489,11 +486,15 @@ namespace TestConstExprInitializationOfGlobalObjectsHelper{
     }
 
     void CallExprInitTests(){
+#   if __TBB_STATIC_CONSTEXPR_INIT_BROKEN
+        REPORT("Known issue: Compile-time initialization fails for static tbb::atomic variables\n");
+#   else
         using namespace auto_registered_tests_helper;
         for (size_t i =0; i<const_expr_tests.size(); ++i){
             (*const_expr_tests[i])();
         }
-        REMARK("ran  %d consrexpr static init test \n",const_expr_tests.size());
+        REMARK("ran %d constexpr static init test \n",const_expr_tests.size());
+#   endif
     }
 
     //TODO: unify somehow list of tested types with one in TestMain
@@ -612,8 +613,8 @@ void TestAlignment( const char* name ) {
 }
 
 #if _MSC_VER && !defined(__INTEL_COMPILER)
-    // unary minus operator applied to unsigned type, result still unsigned
-    #pragma warning( disable: 4146 )
+    #pragma warning( disable: 4146 ) // unary minus operator applied to unsigned type, result still unsigned
+    #pragma warning( disable: 4334 ) // result of 32-bit shift implicitly converted to 64 bits
 #endif
 
 /** T is an integral type. */
@@ -621,11 +622,12 @@ template<typename T>
 void TestAtomicInteger( const char* name ) {
     REMARK("testing atomic<%s> (size=%d)\n",name,sizeof(tbb::atomic<T>));
     TestAlignment<T>(name);
-    TestOperations<T>(0L,T(-T(1)),T(1));
+    TestOperations<T>(0L, T(-T(1)), T(1));
     for( int k=0; k<int(sizeof(long))*8-1; ++k ) {
-        TestOperations<T>(T(1L<<k),T(~(1L<<k)),T(1-(1L<<k)));
-        TestOperations<T>(T(-1L<<k),T(~(-1L<<k)),T(1-(-1L<<k)));
-        TestFetchAndAdd<T>(T(-1L<<k));
+        const long p = 1L<<k;
+        TestOperations<T>(T(p), T(~(p)), T(1-(p)));
+        TestOperations<T>(T(-(p)), T(~(-(p))), T(1-(-(p))));
+        TestFetchAndAdd<T>(T(-(p)));
     }
     TestParallel<T>( name );
 }
@@ -686,8 +688,8 @@ void TestAtomicPointerToTypeOfUnknownSize( const char* name ) {
 
 void TestAtomicBool() {
     REMARK("testing atomic<bool>\n");
-    TestOperations<bool>(true,true,false);
-    TestOperations<bool>(false,false,true);
+    TestOperations<bool>(false,true,true);
+    TestOperations<bool>(true,false,false);
     TestParallel<bool>( "bool" );
 }
 
@@ -716,9 +718,9 @@ void TestAtomicEnum() {
 enum class ScopedColor1 {ScopedRed,ScopedGreen,ScopedBlue=-1};
 // TODO: extend the test to cover 2 byte scoped enum as well
 #if __TBB_ICC_SCOPED_ENUM_WITH_UNDERLYING_TYPE_NEGATIVE_VALUE_BROKEN
-enum class ScopedColor2 : char {ScopedZero, ScopedOne,ScopedRed=42,ScopedGreen=-1,ScopedBlue=127};
+enum class ScopedColor2 : signed char {ScopedZero, ScopedOne,ScopedRed=42,ScopedGreen=-1,ScopedBlue=127};
 #else
-enum class ScopedColor2 : char {ScopedZero, ScopedOne,ScopedRed=-128,ScopedGreen=-1,ScopedBlue=127};
+enum class ScopedColor2 : signed char {ScopedZero, ScopedOne,ScopedRed=-128,ScopedGreen=-1,ScopedBlue=127};
 #endif
 
 // TODO: replace the hack of getting symbolic enum name with a better implementation
@@ -729,7 +731,7 @@ std::string to_string<ScopedColor1>(const ScopedColor1& a){
 }
 template<>
 std::string to_string<ScopedColor2>(const ScopedColor2& a){
-    return enum_strings[a==ScopedColor2::ScopedRed? 2 : 
+    return enum_strings[a==ScopedColor2::ScopedRed? 2 :
         a==ScopedColor2::ScopedGreen? 3 : a==ScopedColor2::ScopedBlue? 4 : (int)a ];
 }
 
@@ -1285,7 +1287,7 @@ public:
                     if( flag!=(T)-1 ) {
                         REPORT("ERROR: flag!=(T)-1 k=%d i=%d trial=%x type=%s (atomicity problem?)\n", k, i, trial, name );
                         ParallelError = true;
-                    } 
+                    }
                     if( !IsRelaxed(E) && message!=(T)-1 ) {
                         REPORT("ERROR: message!=(T)-1 k=%d i=%d trial=%x type=%s mode=%d (memory fence problem?)\n", k, i, trial, name, E );
                         ParallelError = true;
diff --git a/src/test/test_blocked_range.cpp b/src/test/test_blocked_range.cpp
index 42cb5e8..3045bbb 100644
--- a/src/test/test_blocked_range.cpp
+++ b/src/test/test_blocked_range.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/blocked_range.h"
diff --git a/src/test/test_blocked_range2d.cpp b/src/test/test_blocked_range2d.cpp
index 1574fe9..b2a0ae9 100644
--- a/src/test/test_blocked_range2d.cpp
+++ b/src/test/test_blocked_range2d.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/blocked_range2d.h"
@@ -28,7 +28,7 @@ template<typename Tag>
 class AbstractValueType {
     AbstractValueType() {}
     int value;
-public: 
+public:
     template<typename OtherTag>
     friend AbstractValueType<OtherTag> MakeAbstractValueType( int i );
 
@@ -131,7 +131,7 @@ void ParallelTest() {
                     ASSERT( Array[k][l]==(k<i && l<j), NULL );
                     Array[k][l] = 0;
                 }
-            }   
+            }
         }
     }
 }
diff --git a/src/test/test_blocked_range3d.cpp b/src/test/test_blocked_range3d.cpp
index 9a89848..aea2022 100644
--- a/src/test/test_blocked_range3d.cpp
+++ b/src/test/test_blocked_range3d.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/blocked_range3d.h"
@@ -28,7 +28,7 @@ template<typename Tag>
 class AbstractValueType {
     AbstractValueType() {}
     int value;
-public: 
+public:
     template<typename OtherTag>
     friend AbstractValueType<OtherTag> MakeAbstractValueType( int i );
 
@@ -161,7 +161,7 @@ void ParallelTest() {
                              Array[l][m][n] = 0;
                         }
                     }
-                }   
+                }
             }
         }
     }
@@ -170,7 +170,7 @@ void ParallelTest() {
 #include "tbb/task_scheduler_init.h"
 
 int TestMain () {
-    SerialTest(); 
+    SerialTest();
     for( int p=MinThread; p<=MaxThread; ++p ) {
         tbb::task_scheduler_init init(p);
         ParallelTest();
diff --git a/src/test/test_broadcast_node.cpp b/src/test/test_broadcast_node.cpp
index 546f85b..d65a7b6 100644
--- a/src/test/test_broadcast_node.cpp
+++ b/src/test/test_broadcast_node.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "harness.h"
@@ -56,25 +56,23 @@ public:
         return v;
     }
 
-    /* override */ tbb::task * try_put_task( const T &v ) {
+    tbb::task * try_put_task( const T &v ) __TBB_override {
         ++my_counters[(int)v];
-        return const_cast<tbb::task *>(tbb::flow::interface7::SUCCESSFULLY_ENQUEUED);
+        return const_cast<tbb::task *>(tbb::flow::internal::SUCCESSFULLY_ENQUEUED);
     }
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     typedef typename tbb::flow::receiver<T>::built_predecessors_type built_predecessors_type;
     built_predecessors_type mbp;
-    /*override*/ built_predecessors_type &built_predecessors() { return mbp; }
+    built_predecessors_type &built_predecessors() __TBB_override { return mbp; }
     typedef typename tbb::flow::receiver<T>::predecessor_list_type predecessor_list_type;
-    /*override*/void internal_add_built_predecessor(tbb::flow::sender<T> &) {}
-    /*override*/void internal_delete_built_predecessor(tbb::flow::sender<T> &) {}
-    /*override*/void copy_predecessors(predecessor_list_type &) {}
-    /*override*/size_t predecessor_count() { return 0; }
-    /*override*/void clear_predecessors() { }
-    /*override*/void reset_receiver(tbb::flow::reset_flags /*f*/) { }
-#else
-    /*override*/void reset_receiver() { }
+    typedef typename tbb::flow::receiver<T>::predecessor_type predecessor_type;
+    void internal_add_built_predecessor(predecessor_type &) __TBB_override {}
+    void internal_delete_built_predecessor(predecessor_type &) __TBB_override {}
+    void copy_predecessors(predecessor_list_type &) __TBB_override {}
+    size_t predecessor_count() __TBB_override { return 0; }
 #endif
+    void reset_receiver(tbb::flow::reset_flags /*f*/) __TBB_override { }
 
 };
 
@@ -99,7 +97,7 @@ void test_serial_broadcasts() {
 
         for ( int r = 0; r < num_receivers; ++r ) {
             tbb::flow::make_edge( b, receivers[r] );
-        } 
+        }
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         ASSERT( b.successor_count() == (size_t)num_receivers, NULL);
 #endif
@@ -113,9 +111,9 @@ void test_serial_broadcasts() {
                 ASSERT( receivers[r][n] == 1, NULL );
             }
             tbb::flow::remove_edge( b, receivers[r] );
-        } 
+        }
         ASSERT( b.try_put( (T)0 ), NULL );
-        for ( int r = 0; r < num_receivers; ++r ) 
+        for ( int r = 0; r < num_receivers; ++r )
             ASSERT( receivers[0][0] == 1, NULL ) ;
 
         delete [] receivers;
@@ -131,14 +129,14 @@ class native_body : private NoAssign {
 
 public:
 
-    native_body( tbb::flow::broadcast_node<T> &b ) : my_b(b) {} 
+    native_body( tbb::flow::broadcast_node<T> &b ) : my_b(b) {}
 
     void operator()(int) const {
         for (int n = 0; n < N; ++n ) {
             ASSERT( my_b.try_put( (T)n ), NULL );
         }
     }
- 
+
 };
 
 template< typename T >
@@ -148,7 +146,7 @@ void run_parallel_broadcasts(int p, tbb::flow::broadcast_node<T>& b) {
 
         for ( int r = 0; r < num_receivers; ++r ) {
             tbb::flow::make_edge( b, receivers[r] );
-        } 
+        }
 
         NativeParallelFor( p, native_body<T>( b ) );
 
@@ -157,9 +155,9 @@ void run_parallel_broadcasts(int p, tbb::flow::broadcast_node<T>& b) {
                 ASSERT( (int)receivers[r][n] == p, NULL );
             }
             tbb::flow::remove_edge( b, receivers[r] );
-        } 
+        }
         ASSERT( b.try_put( (T)0 ), NULL );
-        for ( int r = 0; r < num_receivers; ++r ) 
+        for ( int r = 0; r < num_receivers; ++r )
             ASSERT( (int)receivers[r][0] == p, NULL ) ;
 
         delete [] receivers;
@@ -173,13 +171,12 @@ void test_parallel_broadcasts(int p) {
     tbb::flow::graph g;
     tbb::flow::broadcast_node<T> b(g);
     run_parallel_broadcasts(p, b);
-    
+
     // test copy constructor
     tbb::flow::broadcast_node<T> b_copy(b);
     run_parallel_broadcasts(p, b_copy);
 }
 
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
 // broadcast_node does not allow successors to try_get from it (it does not allow
 // the flow edge to switch) so we only need test the forward direction.
 template<typename T>
@@ -220,6 +217,7 @@ void test_resets() {
     ASSERT(!q0.try_get(j), "edge between nodes not removed");
 }
 
+#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
 void test_extract() {
     int dont_care;
     tbb::flow::graph g;
@@ -319,7 +317,7 @@ void test_extract() {
 }
 #endif  // TBB_PREVIEW_FLOW_GRAPH_FEATURES
 
-int TestMain() { 
+int TestMain() {
     if( MinThread<1 ) {
         REPORT("number of threads must be positive\n");
         exit(1);
@@ -335,9 +333,9 @@ int TestMain() {
        test_parallel_broadcasts<int_convertable_type>(p);
    }
 
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
    test_resets<int>();
    test_resets<float>();
+#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
    test_extract();
 #endif
 
diff --git a/src/test/test_buffer_node.cpp b/src/test/test_buffer_node.cpp
index 805de8c..18348d5 100644
--- a/src/test/test_buffer_node.cpp
+++ b/src/test/test_buffer_node.cpp
@@ -1,29 +1,29 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "harness.h"
 #include "tbb/flow_graph.h"
 #include "tbb/task_scheduler_init.h"
 #include "tbb/tick_count.h"
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
 #include "harness_graph.h"
+#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
 #include <vector>
 #include <algorithm>
 #endif
@@ -63,9 +63,9 @@ struct touches {
     int my_num_threads;
 
     touches( int num_threads ) : my_num_threads(num_threads) {
-        my_touches = new bool* [my_num_threads]; 
+        my_touches = new bool* [my_num_threads];
         for ( int p = 0; p < my_num_threads; ++p) {
-            my_touches[p] = new bool[N]; 
+            my_touches[p] = new bool[N];
             for ( int n = 0; n < N; ++n)
                 my_touches[p][n] = false;
         }
@@ -80,7 +80,7 @@ struct touches {
 
     bool check( T v ) {
         ASSERT ( my_touches[v/N][v%N] == false, NULL);
-        my_touches[v/N][v%N] = true; 
+        my_touches[v/N][v%N] = true;
         return true;
     }
 
@@ -123,7 +123,7 @@ struct parallel_put_get : NoAssign {
     void operator()(int tid) const {
 
         for ( int i = 0; i < N; i+=C ) {
-            int j_end = ( N < i + C ) ? N : i + C; 
+            int j_end = ( N < i + C ) ? N : i + C;
             // dump about C values into the buffer
             for ( int j = i; j < j_end; ++j ) {
                 ASSERT( my_b.try_put( T (N*tid + j ) ) == true, NULL );
@@ -155,7 +155,7 @@ int test_reservation() {
     b.try_put(T(1));
     b.try_put(T(2));
     b.try_put(T(3));
- 
+
     T v, vsum;
     ASSERT( b.try_reserve(v) == true, NULL );
     ASSERT( b.try_release() == true, NULL );
@@ -166,12 +166,12 @@ int test_reservation() {
     vsum += v;
     v = bogus_value;
     g.wait_for_all();
- 
+
     ASSERT( b.try_get(v) == true, NULL );
     vsum += v;
     v = bogus_value;
     g.wait_for_all();
-    
+
     ASSERT( b.try_reserve(v) == true, NULL );
     ASSERT( b.try_release() == true, NULL );
     v = bogus_value;
@@ -293,6 +293,7 @@ int test_parallel(int num_threads) {
     ASSERT( b_copy.try_get( j ) == false, NULL );
     ASSERT( j == bogus_value, NULL );
 
+    delete [] next_value;
     return 0;
 }
 
@@ -300,7 +301,7 @@ int test_parallel(int num_threads) {
 // Tests
 //
 // Predecessors cannot be registered
-// Empty buffer rejects item requests 
+// Empty buffer rejects item requests
 // Single serial sender, items in arbitrary order
 // Chained buffers ( 2 & 3 ), single sender, items at last buffer in arbitrary order
 //
@@ -426,18 +427,18 @@ int test_serial() {
     return 0;
 }
 
-int TestMain() { 
+int TestMain() {
     tbb::tick_count start = tbb::tick_count::now(), stop;
     for (int p = 2; p <= 4; ++p) {
         tbb::task_scheduler_init init(p);
         test_serial<int>();
         test_parallel<int>(p);
-    } 
+    }
     stop = tbb::tick_count::now();
     REMARK("Buffer_Node Time=%6.6f\n", (stop-start).seconds());
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     test_resets<int,tbb::flow::buffer_node<int> >();
     test_resets<float,tbb::flow::buffer_node<float> >();
+#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     test_buffer_extract<tbb::flow::buffer_node<int> >().run_tests();
 #endif
     return Harness::Done;
diff --git a/src/test/test_cache_aligned_allocator.cpp b/src/test/test_cache_aligned_allocator.cpp
index 645f853..60b64e1 100644
--- a/src/test/test_cache_aligned_allocator.cpp
+++ b/src/test/test_cache_aligned_allocator.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Test whether cache_aligned_allocator works with some of the host's STL containers.
diff --git a/src/test/test_cache_aligned_allocator_STL.cpp b/src/test/test_cache_aligned_allocator_STL.cpp
index ebce6e4..0f9b68d 100644
--- a/src/test/test_cache_aligned_allocator_STL.cpp
+++ b/src/test/test_cache_aligned_allocator_STL.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Test whether cache_aligned_allocator works with some of the host's STL containers.
diff --git a/src/test/test_cilk_common.h b/src/test/test_cilk_common.h
index 85f8826..d501490 100644
--- a/src/test/test_cilk_common.h
+++ b/src/test/test_cilk_common.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 // This file is a common part of test_cilk_interop and test_cilk_dynamic_load tests
@@ -25,7 +25,7 @@ int TBB_Fib( int n );
 class FibCilkSubtask: public tbb::task {
     int n;
     int& result;
-    /*override*/ task* execute() {
+    task* execute() __TBB_override {
         if( n<2 ) {
             result = n;
         } else {
@@ -44,7 +44,7 @@ public:
 class FibTask: public tbb::task {
     int n;
     int& result;
-    /*override*/ task* execute() {
+    task* execute() __TBB_override {
         if( !g_sandwich && n<2 ) {
             result = n;
         } else {
@@ -60,7 +60,7 @@ class FibTask: public tbb::task {
                 spawn (*new( allocate_child() ) FibTask(x,n-1));
                 spawn (*new( allocate_child() ) FibTask(y,n-2));
             }
-            wait_for_all(); 
+            wait_for_all();
             task* self1 = &task::self();
             ASSERT( self0 == self1, "failed to preserve TBB TLS" );
             result = x+y;
diff --git a/src/test/test_cilk_dynamic_load.cpp b/src/test/test_cilk_dynamic_load.cpp
index 4fbd27e..de632b9 100644
--- a/src/test/test_cilk_dynamic_load.cpp
+++ b/src/test/test_cilk_dynamic_load.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/tbb_config.h"
@@ -93,7 +93,7 @@ CILK_SHUTDOWN CilkShutdown = 0;
 class FibTask: public tbb::task {
     int n;
     int& result;
-    /*override*/ task* execute() {
+    task* execute() __TBB_override {
         if( n<2 ) {
             result = n;
         } else {
@@ -131,7 +131,7 @@ int TBB_Fib( int n ) {
     }
 }
 
-void RunSandwich() { 
+void RunSandwich() {
     tbb::task_scheduler_init init(P_outer);
     int m = TBB_Fib(N);
     ASSERT( m == F, NULL );
diff --git a/src/test/test_cilk_interop.cpp b/src/test/test_cilk_interop.cpp
index 00d27f6..e3b8d5d 100644
--- a/src/test/test_cilk_interop.cpp
+++ b/src/test/test_cilk_interop.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/tbb_config.h"
@@ -124,7 +124,7 @@ void RunCilkOnlyConcurrently ( tbb_sched_injection_mode_t sim ) {
     NativeParallelFor( P_outer, FibBody() );
 }
 
-void RunSandwich( bool sandwich ) { 
+void RunSandwich( bool sandwich ) {
     g_sandwich = sandwich;
     tbb::task_scheduler_init init(P_outer);
     int m = TBB_Fib(N);
diff --git a/src/test/test_combinable.cpp b/src/test/test_combinable.cpp
index 59be641..4d3e063 100644
--- a/src/test/test_combinable.cpp
+++ b/src/test/test_combinable.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #define HARNESS_DEFAULT_MIN_THREADS 0
@@ -46,6 +46,7 @@
 
 #include "harness_assert.h"
 #include "harness.h"
+#include "test_container_move_support.h"
 
 #if __TBB_GCC_WARNING_SUPPRESSION_PRESENT
 #pragma GCC diagnostic ignored "-Wuninitialized"
@@ -80,7 +81,6 @@ public:
 
 //// functors for initialization and combine
 
-// Addition
 template <typename T>
 struct FunctorAddFinit {
     T operator()() { return 0; }
@@ -106,9 +106,6 @@ struct FunctorAddCombineRef {
 };
 
 template <typename T>
-T my_finit( ) { return 0; }
-
-template <typename T>
 T my_combine( T left, T right) { return left + right; }
 
 template <typename T>
@@ -119,9 +116,9 @@ class CombineEachHelper {
 public:
     CombineEachHelper(T& _result) : my_result(_result) {}
     void operator()(const T& new_bit) { my_result +=  new_bit; }
-    CombineEachHelper& operator=(const CombineEachHelper& other) { 
-        my_result =  other; 
-        return *this; 
+    CombineEachHelper& operator=(const CombineEachHelper& other) {
+        my_result =  other;
+        return *this;
     }
 private:
     T& my_result;
@@ -132,10 +129,10 @@ class CombineEachHelperCnt {
 public:
     CombineEachHelperCnt(T& _result, int& _nbuckets) : my_result(_result), nBuckets(_nbuckets) {}
     void operator()(const T& new_bit) { my_result +=  new_bit; ++nBuckets; }
-    CombineEachHelperCnt& operator=(const CombineEachHelperCnt& other) { 
-        my_result =  other.my_result; 
+    CombineEachHelperCnt& operator=(const CombineEachHelperCnt& other) {
+        my_result =  other.my_result;
         nBuckets = other.nBuckets;
-        return *this; 
+        return *this;
     }
 private:
     T& my_result;
@@ -147,146 +144,144 @@ class CombineEachVectorHelper {
 public:
     typedef std::vector<T, tbb::tbb_allocator<T> > ContainerType;
     CombineEachVectorHelper(T& _result) : my_result(_result) { }
-    void operator()(const ContainerType& new_bit) { 
+    void operator()(const ContainerType& new_bit) {
         for(typename ContainerType::const_iterator ci = new_bit.begin(); ci != new_bit.end(); ++ci) {
             my_result +=  *ci;
         }
     }
-    CombineEachVectorHelper& operator=(const CombineEachVectorHelper& other) { my_result=other.my_result; return *this;}
+    CombineEachVectorHelper& operator=(const CombineEachVectorHelper& other) {
+        my_result=other.my_result;
+        return *this;
+    }
+
 private:
     T& my_result;
 };
 
-
-
 //// end functors
 
-template< typename T >
-void run_serial_scalar_tests(const char *test_name) {
-    tbb::tick_count t0;
-    T sum = 0;
-
-    REMARK("Testing serial %s... ", test_name);
-    for (int t = -1; t < REPETITIONS; ++t) {
-        if (Verbose && t == 0) t0 = tbb::tick_count::now(); 
-        for (int i = 0; i < N; ++i) {
-            sum += 1; 
-        }
-    }
- 
-    double ResultValue = sum;
-    ASSERT( EXPECTED_SUM == ResultValue, NULL);
-    REMARK("done\nserial %s, 0, %g, %g\n", test_name, ResultValue, ( tbb::tick_count::now() - t0).seconds());
-}
-
-
+// parallel body with a test for first access
 template <typename T>
 class ParallelScalarBody: NoAssign {
-    
+
     tbb::combinable<T> &sums;
- 
+
 public:
 
     ParallelScalarBody ( tbb::combinable<T> &_sums ) : sums(_sums) { }
 
     void operator()( const tbb::blocked_range<int> &r ) const {
-        for (int i = r.begin(); i != r.end(); ++i) { 
+        for (int i = r.begin(); i != r.end(); ++i) {
             bool was_there;
             T& my_local = sums.local(was_there);
             if(!was_there) my_local = 0;
              my_local +=  1 ;
         }
     }
-   
+
 };
 
-// parallel body with no test for first access.
+// parallel body with no test for first access
 template <typename T>
 class ParallelScalarBodyNoInit: NoAssign {
-    
+
     tbb::combinable<T> &sums;
- 
+
 public:
 
     ParallelScalarBodyNoInit ( tbb::combinable<T> &_sums ) : sums(_sums) { }
 
     void operator()( const tbb::blocked_range<int> &r ) const {
-        for (int i = r.begin(); i != r.end(); ++i) { 
+        for (int i = r.begin(); i != r.end(); ++i) {
              sums.local() +=  1 ;
         }
     }
-   
+
 };
 
 template< typename T >
 void RunParallelScalarTests(const char *test_name) {
 
     tbb::task_scheduler_init init(tbb::task_scheduler_init::deferred);
-
-    for (int p = MinThread; p <= MaxThread; ++p) { 
-
+    for (int p = MinThread; p <= MaxThread; ++p) {
 
         if (p == 0) continue;
-
-        REMARK("Testing parallel %s on %d thread(s)... ", test_name, p); 
+        REMARK("  Testing parallel %s on %d thread(s)...\n", test_name, p);
         init.initialize(p);
 
         tbb::tick_count t0;
-
-        T assign_sum(0);
-
         T combine_sum(0);
-
         T combine_ref_sum(0);
-
-        T combine_each_sum(0);
-
         T combine_finit_sum(0);
-
+        T combine_each_sum(0);
+        T copy_construct_sum(0);
+        T copy_assign_sum(0);
+#if __TBB_ETS_USE_CPP11
+        T move_construct_sum(0);
+        T move_assign_sum(0);
+#endif
         for (int t = -1; t < REPETITIONS; ++t) {
-            if (Verbose && t == 0) t0 = tbb::tick_count::now(); 
+            if (Verbose && t == 0) t0 = tbb::tick_count::now();
 
+            // test uninitialized parallel combinable
             tbb::combinable<T> sums;
+            tbb::parallel_for( tbb::blocked_range<int>( 0, N, 10000 ), ParallelScalarBody<T>( sums ) );
+            combine_sum += sums.combine(my_combine<T>);
+            combine_ref_sum += sums.combine(my_combine_ref<T>);
+
+            // test parallel combinable preinitialized with a functor that returns 0
             FunctorAddFinit<T> my_finit_decl;
             tbb::combinable<T> finit_combinable(my_finit_decl);
-                                    
-
             tbb::parallel_for( tbb::blocked_range<int>( 0, N, 10000 ), ParallelScalarBodyNoInit<T>( finit_combinable ) );
-            tbb::parallel_for( tbb::blocked_range<int>( 0, N, 10000 ), ParallelScalarBody<T>( sums ) );
-
-            // Use combine
-            combine_sum +=  sums.combine(my_combine<T>);
-            combine_ref_sum +=  sums.combine(my_combine_ref<T>);
+            combine_finit_sum += finit_combinable.combine(my_combine<T>);
 
+            // test another way of combining the elements using CombineEachHelper<T> functor
             CombineEachHelper<T> my_helper(combine_each_sum);
             sums.combine_each(my_helper);
-           
-            // test assignment
+
+            // test copy constructor for parallel combinable
+            tbb::combinable<T> copy_constructed(sums);
+            copy_construct_sum += copy_constructed.combine(my_combine<T>);
+
+            // test copy assignment for uninitialized parallel combinable
             tbb::combinable<T> assigned;
             assigned = sums;
+            copy_assign_sum += assigned.combine(my_combine<T>);
 
-            assign_sum +=  assigned.combine(my_combine<T>);
+#if __TBB_ETS_USE_CPP11
+            // test move constructor for parallel combinable
+            tbb::combinable<T> moved1(std::move(sums));
+            move_construct_sum += moved1.combine(my_combine<T>);
 
-            combine_finit_sum += finit_combinable.combine(my_combine<T>);
+            // test move assignment for uninitialized parallel combinable
+            tbb::combinable<T> moved2;
+            moved2=std::move(finit_combinable);
+            move_assign_sum += moved2.combine(my_combine<T>);
+#endif
         }
-
+        // Here and below comparison for equality of float numbers succeeds
+        // as the rounding error doesn't accumulate and doesn't affect the comparison
         ASSERT( EXPECTED_SUM == combine_sum, NULL);
         ASSERT( EXPECTED_SUM == combine_ref_sum, NULL);
-        ASSERT( EXPECTED_SUM == assign_sum, NULL);
         ASSERT( EXPECTED_SUM == combine_finit_sum, NULL);
-
-        REMARK("done\nparallel %s, %d, %g, %g\n", test_name, p, static_cast<double>(combine_sum), 
+        ASSERT( EXPECTED_SUM == combine_each_sum, NULL);
+        ASSERT( EXPECTED_SUM == copy_construct_sum, NULL);
+        ASSERT( EXPECTED_SUM == copy_assign_sum, NULL);
+#if __TBB_ETS_USE_CPP11
+        ASSERT( EXPECTED_SUM == move_construct_sum, NULL);
+        ASSERT( EXPECTED_SUM == move_assign_sum, NULL);
+#endif
+        REMARK("  done parallel %s, %d, %g, %g\n", test_name, p, static_cast<double>(combine_sum),
                                                       ( tbb::tick_count::now() - t0).seconds());
         init.terminate();
     }
 }
 
-
 template <typename T>
 class ParallelVectorForBody: NoAssign {
-    
+
     tbb::combinable< std::vector<T, tbb::tbb_allocator<T> > > &locals;
- 
+
 public:
 
     ParallelVectorForBody ( tbb::combinable< std::vector<T, tbb::tbb_allocator<T> > > &_locals ) : locals(_locals) { }
@@ -298,61 +293,175 @@ public:
             locals.local().push_back( one );
         }
     }
-   
+
 };
 
 template< typename T >
 void RunParallelVectorTests(const char *test_name) {
-    tbb::tick_count t0;
+
     tbb::task_scheduler_init init(tbb::task_scheduler_init::deferred);
+
     typedef std::vector<T, tbb::tbb_allocator<T> > ContainerType;
 
-    for (int p = MinThread; p <= MaxThread; ++p) { 
+    for (int p = MinThread; p <= MaxThread; ++p) {
 
         if (p == 0) continue;
-        REMARK("Testing parallel %s on %d thread(s)... ", test_name, p);
+        REMARK("  Testing parallel %s on %d thread(s)... \n", test_name, p);
         init.initialize(p);
 
-        T sum = 0;
-        T sum2 = 0;
-        T sum3 = 0;
-
+        tbb::tick_count t0;
+        T defaultConstructed_sum(0);
+        T copyConstructed_sum(0);
+        T copyAssigned_sum(0);
+#if __TBB_ETS_USE_CPP11
+        T moveConstructed_sum(0);
+        T moveAssigned_sum(0);
+#endif
         for (int t = -1; t < REPETITIONS; ++t) {
-            if (Verbose && t == 0) t0 = tbb::tick_count::now(); 
+            if (Verbose && t == 0) t0 = tbb::tick_count::now();
+
             typedef typename tbb::combinable< ContainerType > CombinableType;
-            CombinableType vs;
 
-            tbb::parallel_for ( tbb::blocked_range<int> (0, N, 10000), ParallelVectorForBody<T>( vs ) );
+            // test uninitialized parallel combinable
+            CombinableType vs;
+            tbb::parallel_for( tbb::blocked_range<int> (0, N, 10000), ParallelVectorForBody<T>( vs ) );
+            CombineEachVectorHelper<T> MyCombineEach(defaultConstructed_sum);
+            vs.combine_each(MyCombineEach); // combine_each sums all elements of each vector into the result
 
-            // copy construct
-            CombinableType vs2(vs); // this causes an assertion failure, related to allocators...
+            // test copy constructor for parallel combinable with vectors
+            CombinableType vs2(vs);
+            CombineEachVectorHelper<T> MyCombineEach2(copyConstructed_sum);
+            vs2.combine_each(MyCombineEach2);
 
-            // assign
+            // test copy assignment for uninitialized parallel combinable with vectors
             CombinableType vs3;
             vs3 = vs;
-
-            CombineEachVectorHelper<T> MyCombineEach(sum);
-            vs.combine_each(MyCombineEach);
-
-            CombineEachVectorHelper<T> MyCombineEach2(sum2);
-            vs2.combine_each(MyCombineEach2);
-
-            CombineEachVectorHelper<T> MyCombineEach3(sum3);
-            vs2.combine_each(MyCombineEach3);
-            // combine_each sums all elements of each vector into the result.
+            CombineEachVectorHelper<T> MyCombineEach3(copyAssigned_sum);
+            vs3.combine_each(MyCombineEach3);
+
+#if __TBB_ETS_USE_CPP11
+            // test move constructor for parallel combinable with vectors
+            CombinableType vs4(std::move(vs2));
+            CombineEachVectorHelper<T> MyCombineEach4(moveConstructed_sum);
+            vs4.combine_each(MyCombineEach4);
+
+            // test move assignment for uninitialized parallel combinable with vectors
+            vs4=std::move(vs3);
+            CombineEachVectorHelper<T> MyCombineEach5(moveAssigned_sum);
+            vs4.combine_each(MyCombineEach5);
+#endif
         }
 
-        double ResultValue = sum;
+        double ResultValue = defaultConstructed_sum;
+        ASSERT( EXPECTED_SUM == ResultValue, NULL);
+        ResultValue = copyConstructed_sum;
         ASSERT( EXPECTED_SUM == ResultValue, NULL);
-        ResultValue = sum2;
+        ResultValue = copyAssigned_sum;
         ASSERT( EXPECTED_SUM == ResultValue, NULL);
-        ResultValue = sum3;
+#if __TBB_ETS_USE_CPP11
+        ResultValue = moveConstructed_sum;
         ASSERT( EXPECTED_SUM == ResultValue, NULL);
-        REMARK("done\nparallel %s, %d, %g, %g\n", test_name, p, ResultValue, ( tbb::tick_count::now() - t0).seconds());
+        ResultValue = moveAssigned_sum;
+        ASSERT( EXPECTED_SUM == ResultValue, NULL);
+#endif
+        REMARK("  done parallel %s, %d, %g, %g\n", test_name, p, ResultValue, ( tbb::tick_count::now() - t0).seconds());
         init.terminate();
     }
 }
 
+void
+RunParallelTests() {
+    REMARK("Running RunParallelTests\n");
+    RunParallelScalarTests<int>("int");
+    RunParallelScalarTests<double>("double");
+    RunParallelScalarTests<minimal>("minimal");
+    RunParallelVectorTests<int>("std::vector<int, tbb::tbb_allocator<int> >");
+    RunParallelVectorTests<double>("std::vector<double, tbb::tbb_allocator<double> >");
+}
+
+template <typename T>
+void
+RunAssignmentAndCopyConstructorTest(const char *test_name) {
+    REMARK("  Testing assignment and copy construction for combinable<%s>...\n", test_name);
+
+    // test creation with finit function (combine returns finit return value if no threads have created locals)
+    FunctorAddFinit7<T> my_finit7_decl;
+    tbb::combinable<T> create1(my_finit7_decl);
+    ASSERT(7 == create1.combine(my_combine<T>), "Unexpected combine result for combinable object preinitialized with functor");
+
+    // test copy construction with function initializer
+    tbb::combinable<T> copy1(create1);
+    ASSERT(7 == copy1.combine(my_combine<T>), "Unexpected combine result for copy-constructed combinable object");
+
+    // test copy assignment with function initializer
+    FunctorAddFinit<T> my_finit_decl;
+    tbb::combinable<T> assign1(my_finit_decl);
+    assign1 = create1;
+    ASSERT(7 == assign1.combine(my_combine<T>), "Unexpected combine result for copy-assigned combinable object");
+
+#if __TBB_ETS_USE_CPP11
+    // test move construction with function initializer
+    tbb::combinable<T> move1(std::move(create1));
+    ASSERT(7 == move1.combine(my_combine<T>), "Unexpected combine result for move-constructed combinable object");
+
+    // test move assignment with function initializer
+    tbb::combinable<T> move2;
+    move2=std::move(copy1);
+    ASSERT(7 == move2.combine(my_combine<T>), "Unexpected combine result for move-assigned combinable object");
+#endif
+
+    REMARK("  done\n");
+
+}
+
+void
+RunAssignmentAndCopyConstructorTests() {
+    REMARK("Running assignment and copy constructor tests:\n");
+    RunAssignmentAndCopyConstructorTest<int>("int");
+    RunAssignmentAndCopyConstructorTest<double>("double");
+    RunAssignmentAndCopyConstructorTest<minimal>("minimal");
+}
+
+void
+RunMoveSemanticsForStateTrackableObjectTest() {
+    REMARK("Testing move assignment and move construction for combinable<Harness::StateTrackable>...\n");
+
+    tbb::combinable< Harness::StateTrackable<true> > create1;
+    ASSERT(create1.local().state == Harness::StateTrackable<true>::DefaultInitialized,
+           "Unexpected value in default combinable object");
+
+    // Copy constructing of the new combinable causes copying of stored values
+    tbb::combinable< Harness::StateTrackable<true> > copy1(create1);
+    ASSERT(copy1.local().state == Harness::StateTrackable<true>::CopyInitialized,
+           "Unexpected value in copy-constructed combinable object");
+
+    // Copy assignment also causes copying of stored values
+    tbb::combinable< Harness::StateTrackable<true> > copy2;
+    ASSERT(copy2.local().state == Harness::StateTrackable<true>::DefaultInitialized,
+           "Unexpected value in default combinable object");
+    copy2=create1;
+    ASSERT(copy2.local().state == Harness::StateTrackable<true>::CopyInitialized,
+           "Unexpected value in copy-assigned combinable object");
+
+#if __TBB_ETS_USE_CPP11
+    // Store some marked values in the initial combinable object
+    create1.local().state = static_cast<Harness::StateTrackable<true>::State>(1);
+
+    // Move constructing of the new combinable must not cause copying of stored values
+    tbb::combinable< Harness::StateTrackable<true> > move1(std::move(create1));
+    ASSERT(move1.local().state == 1, "Unexpected value in move-constructed combinable object");
+
+    // Move assignment must not cause copying of stored values
+    copy1=std::move(move1);
+    ASSERT(copy1.local().state == 1, "Unexpected value in move-assigned combinable object");
+
+    // Make the stored values valid again in order to delete StateTrackable object correctly
+    copy1.local().state = Harness::StateTrackable<true>::MoveAssigned;
+#endif
+
+    REMARK("done\n");
+}
+
 #include "harness_barrier.h"
 
 Harness::SpinBarrier sBarrier;
@@ -363,7 +472,6 @@ struct Body : NoAssign {
     const int nIters;
     Body( int nthread_, int niters_ ) : nthread(nthread_), nIters(niters_) { sBarrier.initialize(nthread_); }
 
-
     void operator()(int thread_id ) const {
         bool existed;
         sBarrier.wait();
@@ -398,43 +506,16 @@ TestLocalAllocations( int nthread ) {
     ASSERT(mySum == (nthread - 1) * nthread / 2, "Incorrect values in result");
 }
 
-
-void 
-RunParallelTests() {
-    RunParallelScalarTests<int>("int");
-    RunParallelScalarTests<double>("double");
-    RunParallelScalarTests<minimal>("minimal");
-    RunParallelVectorTests<int>("std::vector<int, tbb::tbb_allocator<int> >");
-    RunParallelVectorTests<double>("std::vector<double, tbb::tbb_allocator<double> >");
-}
-
-template <typename T>
-void
-RunAssignmentAndCopyConstructorTest(const char *test_name) {
-    REMARK("Testing assignment and copy construction for %s\n", test_name);
-
-    // test creation with finit function (combine returns finit return value if no threads have created locals)
-    FunctorAddFinit7<T> my_finit7_decl;
-    tbb::combinable<T> create2(my_finit7_decl);
-    ASSERT(7 == create2.combine(my_combine<T>), NULL);
-
-    // test copy construction with function initializer
-    tbb::combinable<T> copy2(create2);
-    ASSERT(7 == copy2.combine(my_combine<T>), NULL);
-
-    // test copy assignment with function initializer
-    FunctorAddFinit<T> my_finit_decl;
-    tbb::combinable<T> assign2(my_finit_decl);
-    assign2 = create2;
-    ASSERT(7 == assign2.combine(my_combine<T>), NULL);
-}
-
 void
-RunAssignmentAndCopyConstructorTests() {
-    REMARK("Running assignment and copy constructor tests\n");
-    RunAssignmentAndCopyConstructorTest<int>("int");
-    RunAssignmentAndCopyConstructorTest<double>("double");
-    RunAssignmentAndCopyConstructorTest<minimal>("minimal");
+RunLocalAllocationsTests() {
+    REMARK("Testing local() allocations\n");
+    for(int i = 1 <= MinThread ? MinThread : 1; i <= MaxThread; ++i) {
+        REMARK("  Testing local() allocation with nthreads=%d...\n", i);
+        for(int j = 0; j < 100; ++j) {
+            TestLocalAllocations(i);
+        }
+        REMARK("  done\n");
+    }
 }
 
 int TestMain () {
@@ -442,12 +523,8 @@ int TestMain () {
         RunParallelTests();
     }
     RunAssignmentAndCopyConstructorTests();
-    for(int i = 1 <= MinThread ? MinThread : 1; i <= MaxThread; ++i) {
-        REMARK("Testing local() allocation with nthreads=%d\n", i);
-        for(int j = 0; j < 100; ++j) {
-            TestLocalAllocations(i);
-        }
-    }
+    RunMoveSemanticsForStateTrackableObjectTest();
+    RunLocalAllocationsTests();
     return Harness::Done;
 }
 
diff --git a/src/test/test_composite_node.cpp b/src/test/test_composite_node.cpp
index ac4d5bd..9c061a2 100644
--- a/src/test/test_composite_node.cpp
+++ b/src/test/test_composite_node.cpp
@@ -1,29 +1,25 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
-*/
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
 
-#ifndef TBB_PREVIEW_FLOW_GRAPH_NODES
-    #define TBB_PREVIEW_FLOW_GRAPH_NODES 1
-#endif
+
+
+*/
 
 #include "harness.h"
-#if __TBB_PREVIEW_COMPOSITE_NODE 
+#if __TBB_FLOW_GRAPH_CPP11_FEATURES
 
 #include "tbb/flow_graph.h"
 #include <tuple>
@@ -41,17 +37,17 @@ class src_body{
     int finish;
     int step;
 public:
-    src_body(int f, int s) : start(1), finish(f), step(s) {} 
+    src_body(int f, int s) : start(1), finish(f), step(s) {}
     bool operator()(int &a) {
        a = start;
        if (start <= finish) {
            a = start;
            start+=step;
            return true;
-       } 
+       }
        else {
            return false;
-       };  
+       };
    }
 };
 
@@ -69,7 +65,7 @@ int operator()(int i){return i;}
 };
 
 template<int N, typename T1, typename T2>
-struct compare { 
+struct compare {
     static void compare_refs(T1 tuple1, T2 tuple2) {
     ASSERT( &tbb::flow::get<N>(tuple1) == &tbb::flow::get<N>(tuple2), "ports not set correctly");
     compare<N-1, T1, T2>::compare_refs(tuple1, tuple2);
@@ -77,7 +73,7 @@ struct compare {
 };
 
 template<typename T1, typename T2>
-struct compare<1, T1, T2> { 
+struct compare<1, T1, T2> {
     static void compare_refs(T1 tuple1, T2 tuple2) {
     ASSERT(&tbb::flow::get<0>(tuple1) == &tbb::flow::get<0>(tuple2), "port 0 not correctly set");
     }
@@ -86,10 +82,10 @@ struct compare<1, T1, T2> {
 void add_all_nodes (){
     tbb::flow::graph g;
 
-    typedef tbb::flow::tuple<tbb::flow::continue_msg, tbb::flow::tuple<int, int>, int, int, int, int, 
-                             int, int, int, int, int, int, int, int > InputTupleType; 
+    typedef tbb::flow::tuple<tbb::flow::continue_msg, tbb::flow::tuple<int, int>, int, int, int, int,
+                             int, int, int, int, int, int, int, int > InputTupleType;
 
-    typedef tbb::flow::tuple<tbb::flow::continue_msg, tbb::flow::tuple<int, int>, tbb::flow::tagged_msg<size_t, int, float>, 
+    typedef tbb::flow::tuple<tbb::flow::continue_msg, tbb::flow::tuple<int, int>, tbb::flow::tagged_msg<size_t, int, float>,
                              int, int, int, int, int, int, int, int, int, int, int, int >  OutputTupleType;
 
     typedef tbb::flow::tuple< > EmptyTupleType;
@@ -118,33 +114,28 @@ void add_all_nodes (){
     tbb::flow::overwrite_node<int> ovw(g);
     tbb::flow::sequencer_node<int> seq(g, seq_body());
 
-    #if !(__GNUC__==4 && __GNUC_MINOR__==4  && !defined(__clang__)) 
-    // upcasting of a tuple of reference from derived to base fails on gcc4.4 (and all icc in this environment)
-    // if std::tie is used to create the tuple of references
-    auto input_tuple = std::tie(ct, s, m_fxn, fxn, bc, tbb::flow::input_port<0>(j), lim, q, tbb::flow::input_port<0>(ind), 
+#if !__TBB_UPCAST_OF_TUPLE_OF_REF_BROKEN || __clang__
+    auto input_tuple = std::tie(ct, s, m_fxn, fxn, bc, tbb::flow::input_port<0>(j), lim, q, tbb::flow::input_port<0>(ind),
                                 pq, ovw, wo, bf, seq);
-    auto output_tuple = std::tie(ct,j, ind, fxn, src, bc, tbb::flow::output_port<0>(s), lim, tbb::flow::output_port<0>(m_fxn), 
+    auto output_tuple = std::tie(ct,j, ind, fxn, src, bc, tbb::flow::output_port<0>(s), lim, tbb::flow::output_port<0>(m_fxn),
                                  q, pq, ovw, wo, bf, seq );
-    #else
-    input_output_type::input_ports_type input_tuple(ct, s, m_fxn, fxn, bc, tbb::flow::input_port<0>(j), lim, q, 
+#else
+    // upcasting from derived to base for a tuple of references created by std::tie
+    // fails on gcc 4.4 (and all icc in that environment)
+    input_output_type::input_ports_type input_tuple(ct, s, m_fxn, fxn, bc, tbb::flow::input_port<0>(j), lim, q,
                                                     tbb::flow::input_port<0>(ind), pq, ovw, wo, bf, seq);
 
     input_output_type::output_ports_type output_tuple(ct,j, ind, fxn, src, bc, tbb::flow::output_port<0>(s),
                                                       lim, tbb::flow::output_port<0>(m_fxn), q, pq, ovw, wo, bf, seq);
-    #endif
+#endif
 
-    //composite_node with both input_ports and output_ports 
+    //composite_node with both input_ports and output_ports
     input_output_type a_node(g);
-    a_node.set_external_ports(input_tuple, output_tuple); 
-   
-    bool a_visible_nodes_added = false;
-    a_visible_nodes_added = a_node.add_visible_nodes(src, fxn, m_fxn, bc, lim, ind, s, ct, j, q, bf, pq, wo, ovw, seq);
-    ASSERT(a_visible_nodes_added == true, "not all nodes were added"); 
-
-    bool a_nodes_added = false;
-    a_nodes_added = a_node.add_nodes(src, fxn, m_fxn, bc, lim, ind, s, ct, j, q, bf, pq, wo, ovw, seq);
-    ASSERT(a_nodes_added == true, "not all nodes were added");
-    
+    a_node.set_external_ports(input_tuple, output_tuple);
+
+    a_node.add_visible_nodes(src, fxn, m_fxn, bc, lim, ind, s, ct, j, q, bf, pq, wo, ovw, seq);
+    a_node.add_nodes(src, fxn, m_fxn, bc, lim, ind, s, ct, j, q, bf, pq, wo, ovw, seq);
+
     auto a_node_input_ports_ptr = a_node.input_ports();
     compare<NUM_INPUTS-1, decltype(a_node_input_ports_ptr), decltype(input_tuple)>::compare_refs(a_node_input_ports_ptr, input_tuple);
     ASSERT (NUM_INPUTS == tbb::flow::tuple_size<decltype(a_node_input_ports_ptr)>::value, "not all declared input ports were bound to nodes");
@@ -154,32 +145,23 @@ void add_all_nodes (){
     ASSERT(NUM_OUTPUTS == tbb::flow::tuple_size<decltype(a_node_output_ports_ptr)>::value, "not all declared output ports were bound to nodes");
 
     //composite_node with only input_ports
-    input_only_type b_node(g); 
+    input_only_type b_node(g);
     b_node.set_external_ports(input_tuple);
 
-    bool b_visible_nodes_added = false;
-    b_visible_nodes_added = b_node.add_visible_nodes(src, fxn, m_fxn, bc, lim, ind, s, ct, j, q, bf, pq, wo, ovw, seq);
-    ASSERT(b_visible_nodes_added == true, "not all nodes were added");
-
-    bool b_nodes_added = false;
-    b_nodes_added = b_node.add_nodes(src, fxn, m_fxn, bc, lim, ind, s, ct, j, q, bf, pq, wo, ovw, seq);
-    ASSERT(b_nodes_added == true, "not all nodes were added");
+    b_node.add_visible_nodes(src, fxn, m_fxn, bc, lim, ind, s, ct, j, q, bf, pq, wo, ovw, seq);
+    b_node.add_nodes(src, fxn, m_fxn, bc, lim, ind, s, ct, j, q, bf, pq, wo, ovw, seq);
 
     auto b_node_input_ports_ptr = b_node.input_ports();
     compare<NUM_INPUTS-1, decltype(b_node_input_ports_ptr), decltype(input_tuple)>::compare_refs(b_node_input_ports_ptr, input_tuple);
     ASSERT (NUM_INPUTS == tbb::flow::tuple_size<decltype(b_node_input_ports_ptr)>::value, "not all declared input ports were bound to nodes");
 
     //composite_node with only output_ports
-    output_only_type c_node(g); 
+    output_only_type c_node(g);
     c_node.set_external_ports(output_tuple);
 
-    bool c_visible_nodes_added = false;
-    c_visible_nodes_added = c_node.add_visible_nodes(src, fxn, m_fxn, bc, lim, ind, s, ct, j, q, bf, pq, wo, ovw, seq);
-    ASSERT(c_visible_nodes_added == true, "not all nodes were added");
+    c_node.add_visible_nodes(src, fxn, m_fxn, bc, lim, ind, s, ct, j, q, bf, pq, wo, ovw, seq);
 
-    bool c_nodes_added = false;
-    c_nodes_added = c_node.add_nodes(src, fxn, m_fxn, bc, lim, ind, s, ct, j, q, bf, pq, wo, ovw, seq);
-    ASSERT(c_nodes_added == true, "not all nodes were added");
+    c_node.add_nodes(src, fxn, m_fxn, bc, lim, ind, s, ct, j, q, bf, pq, wo, ovw, seq);
 
     auto c_node_output_ports_ptr = c_node.output_ports();
     compare<NUM_OUTPUTS-1, decltype(c_node_output_ports_ptr), decltype(output_tuple)>::compare_refs(c_node_output_ports_ptr, output_tuple);
@@ -194,18 +176,16 @@ struct tiny_node : public tbb::flow::composite_node< tbb::flow::tuple< int >, tb
 public:
     tiny_node(tbb::flow::graph &g, bool hidden = false) : base_type(g), f1(g, tbb::flow::unlimited, passthru_body() ), f2(g, tbb::flow::unlimited, passthru_body() ) {
         tbb::flow::make_edge( f1, f2 );
-        
+
         tbb::flow::tuple<tbb::flow::function_node< int, int >& > input_tuple(f1);
         tbb::flow::tuple<tbb::flow::function_node< int, int >& > output_tuple(f2);
         base_type::set_external_ports( input_tuple, output_tuple );
-        bool nodes_added = false;
 
         if(hidden)
-            nodes_added  = base_type::add_nodes(f1, f2);
+            base_type::add_nodes(f1, f2);
         else
-            nodes_added = base_type::add_visible_nodes(f1, f2);
+            base_type::add_visible_nodes(f1, f2);
 
-        ASSERT(nodes_added == true, "nodes not added properly");
     }
 };
 
@@ -236,7 +216,7 @@ int test_tiny(bool hidden = false) {
 
     int i, j =0;
     q.try_get(i);
-    ASSERT( i == 1, "item did not go through graph");  
+    ASSERT( i == 1, "item did not go through graph");
     q.try_get(j);
     ASSERT( !j, "unexpected item in graph");
     g.wait_for_all();
@@ -247,20 +227,20 @@ int test_tiny(bool hidden = false) {
 
     tbb::flow::make_edge( t1 , f3 );
     tbb::flow::make_edge(f3, q);
-   
+
     f0.try_put(2);
     g.wait_for_all();
 
     q.try_get(i);
-    ASSERT( i == 2, "item did not go through graph after removal of edge");  
+    ASSERT( i == 2, "item did not go through graph after removal of edge");
     q.try_get(j);
     ASSERT( !j, "unexpected item in graph after removal of edge");
 
-    return 0; 
+    return 0;
 }
 
 class adder_node : public tbb::flow::composite_node< tbb::flow::tuple< int, int >, tbb::flow::tuple< int > > {
-public: 
+public:
     tbb::flow::join_node< tbb::flow::tuple< int, int >, tbb::flow::queueing > j;
     tbb::flow::function_node< tbb::flow::tuple< int, int >, int > f;
 private:
@@ -275,25 +255,21 @@ private:
 public:
     adder_node(tbb::flow::graph &g, bool hidden = false) : base_type(g), j(g), f(g, tbb::flow::unlimited, f_body() ) {
         tbb::flow::make_edge( j, f );
-        
-        base_type::input_ports_type input_tuple(tbb::flow::input_port<0>(j), tbb::flow::input_port<1>(j) );  
-        base_type::output_ports_type output_tuple(f);
-        base_type::set_external_ports( input_tuple, output_tuple );
-        bool nodes_added = false;
-       
+
+        base_type::set_external_ports(base_type::input_ports_type(tbb::flow::input_port<0>(j), tbb::flow::input_port<1>(j)), base_type::output_ports_type(f));
+
         if (hidden)
-           nodes_added = base_type::add_nodes(j, f);
+            base_type::add_nodes(j, f);
         else
-           nodes_added = base_type::add_visible_nodes(j, f);
+            base_type::add_visible_nodes(j, f);
 
-        ASSERT(nodes_added == true, "either j or f not added"); 
     }
 };
 
 struct square_body { int operator()(int v) { return v*v; } };
 struct cube_body { int operator()(int v) { return v*v*v; } };
 int adder_sum(int i) {
-    return (int)(pow(3*pow(i,3) + pow(i, 2),2)); 
+    return (int)(pow(3*pow(i,3) + pow(i, 2),2));
 }
 int test_adder(bool hidden = false) {
     tbb::flow::graph g;
@@ -323,7 +299,7 @@ int test_adder(bool hidden = false) {
 
     tbb::flow::function_node<int,int> s2(g, tbb::flow::unlimited, square_body());
     tbb::flow::queue_node<int> q(g);
- 
+
     tbb::flow::make_edge( s, tbb::flow::input_port<0>(a0) );
     tbb::flow::make_edge( c, tbb::flow::input_port<1>(a0) );
 
@@ -335,7 +311,7 @@ int test_adder(bool hidden = false) {
 
     tbb::flow::make_edge( tbb::flow::output_port<0>(a2), s2 );
     tbb::flow::make_edge( s2, q );
-      
+
     int sum_total=0;
     int result=0;
     for ( int i = 1; i < 4; ++i ) {
@@ -348,7 +324,7 @@ int test_adder(bool hidden = false) {
     int j;
     for ( int i = 1; i < 4; ++i ) {
         q.try_get(j);
-        result += j;  
+        result += j;
     }
     g.wait_for_all();
     ASSERT(result == sum_total, "the sum from the graph does not match the calculated value");
@@ -371,12 +347,72 @@ int test_adder(bool hidden = false) {
 
     for ( int i = 10; i < 20; ++i ) {
         q.try_get(j);
-        result += j;  
+        result += j;
     }
     g.wait_for_all();
     ASSERT(result == sum_total, "the new sum after the replacement of the nodes does not match the calculated value");
 
-    return 0; 
+    return 0;
+}
+
+/*
+                                              outer composite node (outer_node)
+                                     |-------------------------------------------------------------------|
+                                     |                                                                   |
+                                     |  |------------------|  |------------------|  |------------------| |
+             |---------------------| |--| inner composite  | /| inner composite  | /| inner composite  | | |-------------------|
+             |broadcast node(input)|/|  | node             |/ | node             |/ | node             |-+-| queue node(output)|
+             |---------------------|\|  |(inner_node1)     |\ | (inner_node2)    |\ | (inner_node3)    | | |-------------------|
+                                     |--|                  | \|                  | \|                  | |
+                                     |  |------------------|  |------------------|  |------------------| |
+                                     |                                                                   |
+                                     |-------------------------------------------------------------------|
+
+*/
+int test_nested_adder(bool hidden=false) {
+    tbb::flow::graph g;
+    tbb::flow::composite_node<tbb::flow::tuple<int, int>, tbb::flow::tuple<int> > outer_node(g);
+    typedef tbb::flow::composite_node<tbb::flow::tuple<int, int>, tbb::flow::tuple<int> > base_type;
+    tbb::flow::broadcast_node<int> input(g);
+    tbb::flow::queue_node<int> output(g);
+
+    adder_node inner_node1(g, hidden);
+    adder_node inner_node2(g, hidden);
+    adder_node inner_node3(g, hidden);
+
+    outer_node.set_external_ports(base_type::input_ports_type(tbb::flow::input_port<0>(inner_node1), tbb::flow::input_port<1>(inner_node1)), base_type::output_ports_type(tbb::flow::output_port<0>(inner_node3)));
+
+    ASSERT(&tbb::flow::input_port<0>(outer_node) == &tbb::flow::input_port<0>(inner_node1), "input port 0 of inner_node1 not bound to input port 0 in outer_node");
+    ASSERT(&tbb::flow::input_port<1>(outer_node) == &tbb::flow::input_port<1>(inner_node1), "input port 1 of inner_node1 not bound to input port 1 in outer_node");
+    ASSERT(&tbb::flow::output_port<0>(outer_node) == &tbb::flow::output_port<0>(inner_node3), "output port 0 of inner_node3 not bound to output port 0 in outer_node");
+
+    tbb::flow::make_edge(input, tbb::flow::input_port<0>(outer_node)/*inner_node1*/);
+    tbb::flow::make_edge(input, tbb::flow::input_port<1>(outer_node)/*inner_node1*/);
+
+    tbb::flow::make_edge(inner_node1, tbb::flow::input_port<0>(inner_node2));
+    tbb::flow::make_edge(inner_node1, tbb::flow::input_port<1>(inner_node2));
+
+    tbb::flow::make_edge(inner_node2, tbb::flow::input_port<0>(inner_node3));
+    tbb::flow::make_edge(inner_node2, tbb::flow::input_port<1>(inner_node3));
+
+    tbb::flow::make_edge(outer_node/*inner_node3*/, output);
+
+    if(hidden)
+        outer_node.add_nodes(inner_node1, inner_node2, inner_node3);
+    else
+        outer_node.add_visible_nodes(inner_node1, inner_node2, inner_node3);
+
+    int out;
+    for (int i = 1; i < 200000; ++i) {
+        input.try_put(i);
+        g.wait_for_all();
+        output.try_get(out);
+        ASSERT(tbb::flow::output_port<0>(outer_node).try_get(out) == output.try_get(out), "output from outer_node does not match output from graph");
+        ASSERT(out == 8*i, "output from outer_node not correct");
+    }
+    g.wait_for_all();
+
+    return 0;
 }
 
 template< typename T >
@@ -403,7 +439,6 @@ public:
     prefix_node(tbb::flow::graph &g, bool hidden = false ) : base_type(g), j(g), s(g), f(g, tbb::flow::serial, f_body() ) {
         tbb::flow::make_edge( j, f );
         tbb::flow::make_edge( f, s );
-        bool nodes_added = false;
 
     typename base_type::input_ports_type input_tuple(tbb::flow::input_port<0>(j), tbb::flow::input_port<1>(j), tbb::flow::input_port<2>(j), tbb::flow::input_port<3>(j), tbb::flow::input_port<4>(j));
 
@@ -412,11 +447,10 @@ public:
     base_type::set_external_ports(input_tuple, output_tuple);
 
         if(hidden)
-            nodes_added = base_type::add_nodes(j,s,f);
+            base_type::add_nodes(j,s,f);
         else
-            nodes_added = base_type::add_visible_nodes(j,s,f);
-        
-        ASSERT(nodes_added == true, "nodes not properly added");
+            base_type::add_visible_nodes(j,s,f);
+
     }
 };
 
@@ -429,7 +463,7 @@ int test_prefix(bool hidden = false) {
     ASSERT(&tbb::flow::get<2>(p.input_ports()) == &tbb::flow::input_port<2>(p.j), "input port 2 of j is not bound to input port 2 of composite node p");
     ASSERT(&tbb::flow::input_port<3>(p.j) == &tbb::flow::input_port<3>(p.j), "input port 3 of j is not bound to input port 3 of composite node p");
     ASSERT(&tbb::flow::get<4>(p.input_ports()) == &tbb::flow::input_port<4>(p.j), "input port 4 of j is not bound to input port 4 of composite node p");
-    
+
 
     ASSERT(&tbb::flow::get<0>(p.output_ports()) == &tbb::flow::output_port<0>(p.s), "output port 0 of s is not bound to output port 0 of composite node p");
     ASSERT(&tbb::flow::output_port<1>(p.s) == &tbb::flow::output_port<1>(p.s), "output port 1 of s is not bound to output port 1 of composite node p");
@@ -461,12 +495,16 @@ int test_prefix(bool hidden = false) {
             g.wait_for_all();
         }
     }
-    return 0; 
+    return 0;
 }
 
 void input_only_output_only_composite(bool hidden) {
     tbb::flow::graph g;
-    tbb::flow::composite_node<tbb::flow::tuple<int>, tbb::flow::tuple<int> > input_output(g, "aaaaa");
+#if TBB_PREVIEW_FLOW_GRAPH_TRACE
+    tbb::flow::composite_node<tbb::flow::tuple<int>, tbb::flow::tuple<int> > input_output(g, "test_name");
+#else
+    tbb::flow::composite_node<tbb::flow::tuple<int>, tbb::flow::tuple<int> > input_output(g);
+#endif
     typedef tbb::flow::composite_node<tbb::flow::tuple<int>, tbb::flow::tuple<> > input_only_composite;
     typedef tbb::flow::composite_node<tbb::flow::tuple<>, tbb::flow::tuple<int> > output_only_composite;
     typedef tbb::flow::source_node<int> src_type;
@@ -476,8 +514,6 @@ void input_only_output_only_composite(bool hidden) {
     int num = 0;
     int finish=1000;
     int step = 4;
-    bool a_in_nodes_added = false;
-    bool a_out_nodes_added = false;
 
     input_only_composite a_in(g);
     output_only_composite a_out(g);
@@ -490,20 +526,17 @@ void input_only_output_only_composite(bool hidden) {
     a_in.set_external_ports(input_tuple);
     ASSERT(&tbb::flow::get<0>(a_in.input_ports()) == &f, "f not bound to input port 0 in composite_node a_in");
 
-    tbb::flow::tuple<src_type&> output_tuple(src); 
+    tbb::flow::tuple<src_type&> output_tuple(src);
     a_out.set_external_ports(output_tuple);
     ASSERT(&tbb::flow::get<0>(a_out.output_ports()) == &src, "src not bound to output port 0 in composite_node a_out");
-    
-    if(hidden) { 
-        a_in_nodes_added = a_in.add_nodes(f, que); 
-        a_out_nodes_added = a_out.add_nodes(src); 
-    } else {
-        a_in_nodes_added = a_in.add_visible_nodes(f, que); 
-        a_out_nodes_added = a_out.add_visible_nodes(src);
 
-        ASSERT(a_in_nodes_added == true, "either f or que was not properly added to a_in");
-        ASSERT(a_out_nodes_added == true, "src node not properly added to a_out");  
-    }    
+    if(hidden) {
+        a_in.add_nodes(f, que);
+        a_out.add_nodes(src);
+    } else {
+        a_in.add_visible_nodes(f, que);
+        a_out.add_visible_nodes(src);
+    }
 
     tbb::flow::make_edge(a_out, a_in);
     tbb::flow::make_edge(f, que);
@@ -517,25 +550,27 @@ void input_only_output_only_composite(bool hidden) {
     g.wait_for_all();
 }
 
-#endif // __TBB_PREVIEW_COMPOSITE_NODE
+#endif // __TBB_FLOW_GRAPH_CPP11_FEATURES
 
 int TestMain() {
 
-#if __TBB_PREVIEW_COMPOSITE_NODE 
+#if __TBB_FLOW_GRAPH_CPP11_FEATURES
 
     add_all_nodes();
     test_tiny(false);
     test_tiny(true);
     test_adder(false);
     test_adder(true);
+    test_nested_adder(true);
+    test_nested_adder(false);
     test_prefix(false);
     test_prefix(true);
     input_only_output_only_composite(true);
     input_only_output_only_composite(false);
 
-    return Harness::Done; 
-#else 
-    return Harness::Skipped; 
-#endif 
+    return Harness::Done;
+#else
+    return Harness::Skipped;
+#endif
 
 }
diff --git a/src/test/test_concurrent_hash_map.cpp b/src/test/test_concurrent_hash_map.cpp
index 2c79281..020c45d 100644
--- a/src/test/test_concurrent_hash_map.cpp
+++ b/src/test/test_concurrent_hash_map.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef TBB_USE_PERFORMANCE_WARNINGS
@@ -87,7 +87,7 @@ tbb::concurrent_hash_map<std::pair<std::pair<int,std::string>,const char*>,int>
 
 class MyException : public std::bad_alloc {
 public:
-    virtual const char *what() const throw() { return "out of items limit"; }
+    virtual const char *what() const throw() __TBB_override { return "out of items limit"; }
     virtual ~MyException() throw() {}
 };
 
@@ -1263,7 +1263,7 @@ void TestCPP11Types() {
     for ( int i=0; i<NUMBER; ++i ) arrIntInt.push_back( int_int_t(i, NUMBER-i) );
     TypeTester</*default_construction_present = */true>( arrIntInt );
 
-#if __TBB_CPP11_REFERENCE_WRAPPER_PRESENT
+#if __TBB_CPP11_REFERENCE_WRAPPER_PRESENT && !__TBB_REFERENCE_WRAPPER_COMPILATION_BROKEN
     typedef std::pair<const std::reference_wrapper<const int>, int> ref_int_t;
     std::list<ref_int_t> arrRefInt;
     for ( std::list<int_int_t>::iterator it = arrIntInt.begin(); it != arrIntInt.end(); ++it )
@@ -1277,7 +1277,7 @@ void TestCPP11Types() {
     TypeTester</*default_construction_present = */false>( arrIntRef );
 #else
     REPORT("Known issue: C++11 reference wrapper tests are skipped.\n");
-#endif /* __TBB_CPP11_REFERENCE_WRAPPER_PRESENT */
+#endif /* __TBB_CPP11_REFERENCE_WRAPPER_PRESENT && !__TBB_REFERENCE_WRAPPER_COMPILATION_BROKEN*/
 
     typedef std::pair< const int, tbb::atomic<int> > int_tbb_t;
     std::list<int_tbb_t> arrIntTbb;
diff --git a/src/test/test_concurrent_lru_cache.cpp b/src/test/test_concurrent_lru_cache.cpp
index 1dedbf4..5f936fd 100644
--- a/src/test/test_concurrent_lru_cache.cpp
+++ b/src/test/test_concurrent_lru_cache.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if _MSC_VER
diff --git a/src/test/test_concurrent_monitor.cpp b/src/test/test_concurrent_monitor.cpp
index 40e5eb2..c16355f 100644
--- a/src/test/test_concurrent_monitor.cpp
+++ b/src/test/test_concurrent_monitor.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #define HARNESS_DEFAULT_MIN_THREADS 6
@@ -328,7 +328,7 @@ struct AllButOneSleep : NoAssign {
                 try {
                     ++n_sleepers;
                     mon->commit_wait( thr_ctx );
-                    if( --n_sleepers>VLN ) 
+                    if( --n_sleepers>VLN )
                         break;
                 } catch( tbb::user_abort& ) {
                     // can no longer access 'mon'
diff --git a/src/test/test_concurrent_priority_queue.cpp b/src/test/test_concurrent_priority_queue.cpp
index 6ea9cc8..22f5d96 100644
--- a/src/test/test_concurrent_priority_queue.cpp
+++ b/src/test/test_concurrent_priority_queue.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "harness_defs.h"
@@ -29,9 +29,6 @@
 #include <vector>
 #include "test_container_move_support.h"
 
-// std::is_copy_constructible<T>::value returns 'true' for non copyable type when MSVC compiler is used.
-#define __TBB_IS_COPY_CONSTRUCTIBLE_BROKEN ( _MSC_VER && (_MSC_VER <= 1700 || _MSC_VER <= 1800 && !__INTEL_COMPILER) )
-
 #if _MSC_VER==1500 && !__INTEL_COMPILER
     // VS2008/VC9 seems to have an issue; limits pull in math.h
     #pragma warning( push )
@@ -85,8 +82,8 @@ class my_throwing_type : public my_data_type {
 public:
     static int throw_flag;
     my_throwing_type() : my_data_type() {}
-    my_throwing_type(const my_throwing_type& src) : my_data_type(src) { 
-        if (my_throwing_type::throw_flag) throw 42; 
+    my_throwing_type(const my_throwing_type& src) : my_data_type(src) {
+        if (my_throwing_type::throw_flag) throw 42;
         priority = src.priority;
     }
 };
@@ -122,7 +119,7 @@ class FillBody : NoAssign {
     T my_max, my_min;
     concurrent_priority_queue<T, C> *q;
     C less_than;
-public:  
+public:
     FillBody(int nThread_, T max_, T min_, concurrent_priority_queue<T, C> *q_) : nThread(nThread_), my_max(max_), my_min(min_), q(q_) {}
     void operator()(const int threadID) const {
         T elem = my_min + T(threadID);
@@ -162,8 +159,8 @@ class FloggerBody : NoAssign {
     int nThread;
     concurrent_priority_queue<T, C> *q;
 public:
-    FloggerBody(int nThread_, concurrent_priority_queue<T, C> *q_) : 
-        nThread(nThread_), q(q_) {}  
+    FloggerBody(int nThread_, concurrent_priority_queue<T, C> *q_) :
+        nThread(nThread_), q(q_) {}
     void operator()(const int threadID) const {
         T elem = T(threadID+1);
         for (size_t i=0; i<MAX_ITER; ++i) {
@@ -292,7 +289,7 @@ void TestAssignmentClearSwap() {
     qo = new cpq_type();
 
     REMARK("Testing assignment (1).\n");
-    *qo = *q; 
+    *qo = *q;
     REMARK("Assignment complete.\n");
     ASSERT(qo->size()==42, "FAILED assignment/size test.");
     ASSERT(!qo->empty(), "FAILED assignment/empty test.");
@@ -349,7 +346,7 @@ void TestSerialPushPop() {
     REMARK("Pushing complete.\n");
     ASSERT(q->size()==MAX_ITER, "FAILED push/size test.");
     ASSERT(!q->empty(), "FAILED push/empty test.");
-    
+
     REMARK("Testing serial pop.\n");
     while (!q->empty()) {
         ASSERT(q->try_pop(e), "FAILED pop test.");
@@ -378,7 +375,7 @@ void TestParallelPushPop(int nThreads, T t_max, T t_min, C /*compare*/) {
     qsize = q->size();
     ASSERT(q->size()==nThreads*MAX_ITER, "FAILED push/size test.");
     ASSERT(!q->empty(), "FAILED push/empty test.");
-    
+
     REMARK("Testing parallel pop.\n");
     NativeParallelFor(nThreads, emptier);
     REMARK("Popping complete.\n");
@@ -399,7 +396,10 @@ void TestExceptions() {
         my_throwing_type::throw_flag = 1;
         cpq_ex_test_type q;
     } catch(...) {
+#if !(_MSC_VER==1900)
         ASSERT(false, "FAILED: allocating empty queue should not throw exception.\n");
+        // VS2015 warns about the code in this catch block being unreachable
+#endif
     }
     // Allocate small queue should not throw for reasonably sized type
     try {
@@ -531,15 +531,15 @@ struct special_member_calls_t {
     size_t move_constructor_called_times;
     size_t copy_assignment_called_times;
     size_t move_assignment_called_times;
-    
+
     bool friend operator==(special_member_calls_t const& lhs, special_member_calls_t const& rhs){
-        return 
-                lhs.copy_constructor_called_times == rhs.copy_constructor_called_times 
+        return
+                lhs.copy_constructor_called_times == rhs.copy_constructor_called_times
              && lhs.move_constructor_called_times == rhs.move_constructor_called_times
              && lhs.copy_assignment_called_times == rhs.copy_assignment_called_times
              && lhs.move_assignment_called_times == rhs.move_assignment_called_times;
     }
-    
+
 };
 #if __TBB_CPP11_RVALUE_REF_PRESENT
 struct MoveOperationTracker {
@@ -805,9 +805,10 @@ void TestMoveSupportInPushPop() {
     ASSERT(o.value1 == 8 && o.value2 == 8, "Unexpected data popped; possible emplace() failure.");
     ASSERT(!q2.try_pop(o), "The queue should be empty.");
 
+    //TODO: revise this test
     concurrent_priority_queue<ForwardInEmplaceTester> q3;
     ASSERT( ForwardInEmplaceTester::moveCtorCalled == false, NULL );
-    q3.emplace( tbb::internal::move( ForwardInEmplaceTester(5) ), 2 );
+    q3.emplace( ForwardInEmplaceTester(5), 2 );
     ASSERT( ForwardInEmplaceTester::moveCtorCalled == true, "Not used std::forward in emplace()?" );
     ForwardInEmplaceTester obj( 0 );
     q3.try_pop( obj );
@@ -995,6 +996,7 @@ void TypeTesterUniquePtr(const std::vector<T> &vec) {
     Examine</*isCopyCtor=*/false>(q1, q1Copy, vecSorted);
     Examine</*isCopyCtor=*/false>(q2, q2Copy, vecSorted);
 
+#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT
     Queue q3Copy;
     QueueDebugAlloc q4Copy;
 
@@ -1011,6 +1013,7 @@ void TypeTesterUniquePtr(const std::vector<T> &vec) {
     QueueDebugAlloc q4( std::move(q2) );
     Examine</*isCopyCtor=*/false>(q3, q3Copy, vecSorted);
     Examine</*isCopyCtor=*/false>(q4, q4Copy, vecSorted);
+#endif //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT
 }
 #endif /* __TBB_CPP11_SMART_POINTERS_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_IS_COPY_CONSTRUCTIBLE_PRESENT */
 
diff --git a/src/test/test_concurrent_queue.cpp b/src/test/test_concurrent_queue.cpp
index 885899a..3f552cf 100644
--- a/src/test/test_concurrent_queue.cpp
+++ b/src/test/test_concurrent_queue.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #define NOMINMAX
@@ -25,6 +25,8 @@
 #include "harness.h"
 #include "harness_allocator.h"
 
+using tbb::internal::spin_wait_while;
+
 #include <vector>
 
 static tbb::atomic<long> FooConstructed;
@@ -76,7 +78,7 @@ static const int N = 50000;     // # of bytes
 //! Exception for concurrent_queue
 class Foo_exception : public std::bad_alloc {
 public:
-    virtual const char *what() const throw() { return "out of Foo limit"; }
+    virtual const char *what() const throw() __TBB_override { return "out of Foo limit"; }
     virtual ~Foo_exception() throw() {}
 };
 
@@ -520,7 +522,7 @@ bool operator!=(const BarIterator& bia, const BarIterator& bib) {
 #if TBB_USE_EXCEPTIONS
 class Bar_exception : public std::bad_alloc {
 public:
-    virtual const char *what() const throw() { return "making the entry invalid"; }
+    virtual const char *what() const throw() __TBB_override { return "making the entry invalid"; }
     virtual ~Bar_exception() throw() {}
 };
 
@@ -713,7 +715,7 @@ void TestConstructors ()
 #endif /* TBB_USE_EXCEPTIONS */
 
 #if __TBB_CPP11_RVALUE_REF_PRESENT
-    // Testing work of move constructors
+    // Testing work of move constructors. TODO: merge into TestMoveConstructors?
     src_queue.clear();
 
     typedef typename CQ::size_type qsize_t;
@@ -788,24 +790,25 @@ void TestMoveConstructors() {
     const size_t size = 10;
     for( size_t i = 0; i < size; ++i )
         src_queue.push( T(i + (i ^ size)) );
-
     ASSERT( T::construction_num == 2 * size, NULL );
     ASSERT( T::destruction_num == size, NULL );
+
     const T* locations[size];
     typename CQ::const_iterator qit = src_queue.unsafe_begin();
     for( size_t i = 0; i < size; ++i, ++qit )
         locations[i] = &(*qit);
 
     // Ensuring allocation operation takes place during move when allocators are different
+    T::construction_num = T::destruction_num = 0;
     CQ dst_queue( std::move(src_queue), allocator<T>(1) );
-    ASSERT( T::construction_num == 2 * size + size, NULL );
-    ASSERT( T::destruction_num == 2 * size + size, NULL );
+    ASSERT( T::construction_num == size, NULL );
+    ASSERT( T::destruction_num == size+1, NULL ); // One item is used by the queue destructor
 
     TestQueueOperabilityAfterDataMove<T>( src_queue );
 
     qit = dst_queue.unsafe_begin();
     for( size_t i = 0; i < size; ++i, ++qit ) {
-        ASSERT( locations[i] != &(*qit), "item was not moved" );
+        ASSERT( locations[i] != &(*qit), "an item should have been copied but was not" );
         locations[i] = &(*qit);
     }
 
@@ -819,7 +822,7 @@ void TestMoveConstructors() {
 
     qit = dst_queue2.unsafe_begin();
     for( size_t i = 0; i < size; ++i, ++qit ) {
-        ASSERT( locations[i] == &(*qit), "item was moved" );
+        ASSERT( locations[i] == &(*qit), "an item should have been moved but was not" );
     }
 
     for( size_t i = 0; i < size; ++i) {
@@ -837,6 +840,7 @@ void TestMoveConstruction() {
     REMARK("Testing move constructors with specified allocators...");
     TestMoveConstructors< ConcQWithSizeWrapper< Bar, allocator<Bar> >, Bar >();
     TestMoveConstructors< tbb::concurrent_bounded_queue< Bar, allocator<Bar> >, Bar >();
+    // TODO: add tests with movable data
     REMARK(" work\n");
 }
 #endif /* __TBB_CPP11_RVALUE_REF_PRESENT */
@@ -1025,7 +1029,7 @@ void TestNegativeQueue( int nthread ) {
 }
 
 #if TBB_USE_EXCEPTIONS
-template<typename CQ,typename A1,typename A2,typename T>
+template<template<typename, typename> class CQ,typename A1,typename A2,typename T>
 void TestExceptionBody() {
     enum methods {
         m_push = 0,
@@ -1038,11 +1042,12 @@ void TestExceptionBody() {
     // Do test on queues of two different types at the same time to
     // catch problem with incorrect sharing between templates.
     {
-        CQ queue0;
-        tbb::concurrent_queue<int,A1> queue1;
+        CQ<T,A1> queue0;
+        CQ<int,A1> queue1;
         for( int i=0; i<2; ++i ) {
             bool caught = false;
             try {
+                // concurrent_queue internally rebinds the allocator to the one for 'char'
                 A2::init_counters();
                 A2::set_limits(N/2);
                 for( int k=0; k<N; k++ ) {
@@ -1063,9 +1068,9 @@ void TestExceptionBody() {
         int n_pushed=0, n_popped=0;
         for(int t = 0; t <= 1; t++)// exception type -- 0 : from allocator(), 1 : from Foo's constructor
         {
-            CQ queue_test;
+            CQ<T,A1> queue_test;
             for( int m=m_push; m<=m_pop; m++ ) {
-                // concurrent_queue internally rebinds the allocator to one with 'char'
+                // concurrent_queue internally rebinds the allocator to the one for 'char'
                 A2::init_counters();
 
                 if(t) MaxFooCount = MaxFooCount + 400;
@@ -1074,64 +1079,62 @@ void TestExceptionBody() {
                 try {
                     switch(m) {
                     case m_push:
-                            for( int k=0; k<N; k++ ) {
-                                push( queue_test, T(), k );
-                                n_pushed++;
-                            }
-                            break;
+                        for( int k=0; k<N; k++ ) {
+                            push( queue_test, T(), k );
+                            n_pushed++;
+                        }
+                        break;
                     case m_pop:
-                            n_popped=0;
-                            for( int k=0; k<n_pushed; k++ ) {
-                                T elt;
-                                queue_test.try_pop( elt );
-                                n_popped++;
-                            }
-                            n_pushed = 0;
-                            A2::set_limits();
-                            break;
+                        n_popped=0;
+                        for( int k=0; k<n_pushed; k++ ) {
+                            T elt;
+                            queue_test.try_pop( elt );
+                            n_popped++;
+                        }
+                        n_pushed = 0;
+                        A2::set_limits();
+                        break;
                     }
                     if( !t && m==m_push ) ASSERT(false, "should throw an exception");
                 } catch ( Foo_exception & ) {
+                    long tc = MaxFooCount;
+                    MaxFooCount = 0; // disable exception
                     switch(m) {
-                    case m_push: {
-                                ASSERT( ptrdiff_t(queue_test.size())==n_pushed, "incorrect queue size" );
-                                long tc = MaxFooCount;
-                                MaxFooCount = 0;
-                                for( int k=0; k<(int)tc; k++ ) {
-                                    push( queue_test, T(), k );
-                                    n_pushed++;
-                                }
-                                MaxFooCount = tc;
-                            }
-                            break;
+                    case m_push:
+                        ASSERT( ptrdiff_t(queue_test.size())==n_pushed, "incorrect queue size" );
+                        for( int k=0; k<(int)tc; k++ ) {
+                            push( queue_test, T(), k );
+                            n_pushed++;
+                        }
+                        break;
                     case m_pop:
-                            MaxFooCount = 0; // disable exception
-                            n_pushed -= (n_popped+1); // including one that threw an exception
-                            ASSERT( n_pushed>=0, "n_pushed cannot be less than 0" );
-                            for( int k=0; k<1000; k++ ) {
-                                push( queue_test, T(), k );
-                                n_pushed++;
-                            }
-                            ASSERT( !queue_test.empty(), "queue must not be empty" );
-                            ASSERT( ptrdiff_t(queue_test.size())==n_pushed, "queue size must be equal to n pushed" );
-                            for( int k=0; k<n_pushed; k++ ) {
-                                T elt;
-                                queue_test.try_pop( elt );
-                            }
-                            ASSERT( queue_test.empty(), "queue must be empty" );
-                            ASSERT( queue_test.size()==0, "queue must be empty" );
-                            break;
+                        n_pushed -= (n_popped+1); // including one that threw the exception
+                        ASSERT( n_pushed>=0, "n_pushed cannot be less than 0" );
+                        for( int k=0; k<1000; k++ ) {
+                            push( queue_test, T(), k );
+                            n_pushed++;
+                        }
+                        ASSERT( !queue_test.empty(), "queue must not be empty" );
+                        ASSERT( ptrdiff_t(queue_test.size())==n_pushed, "queue size must be equal to n pushed" );
+                        for( int k=0; k<n_pushed; k++ ) {
+                            T elt;
+                            queue_test.try_pop( elt );
+                        }
+                        ASSERT( queue_test.empty(), "queue must be empty" );
+                        ASSERT( queue_test.size()==0, "queue must be empty" );
+                        break;
                     }
+                    MaxFooCount = tc;
                 } catch ( std::bad_alloc & ) {
                     A2::set_limits(); // disable exception from allocator
                     size_t size = queue_test.size();
                     switch(m) {
                     case m_push:
-                            ASSERT( size>0, "incorrect queue size");
-                            break;
+                        ASSERT( size>0, "incorrect queue size");
+                        break;
                     case m_pop:
-                            if( !t ) ASSERT( false, "should not throw an exceptin" );
-                            break;
+                        if( !t ) ASSERT( false, "should not throw an exception" );
+                        break;
                     }
                 }
                 REMARK("... for t=%d and m=%d, exception test passed\n", t, m);
@@ -1149,8 +1152,8 @@ void TestExceptions() {
 #elif TBB_USE_EXCEPTIONS
     typedef static_counting_allocator<std::allocator<FooEx>, size_t> allocator_t;
     typedef static_counting_allocator<std::allocator<char>, size_t> allocator_char_t;
-    TestExceptionBody<ConcQWithSizeWrapper<FooEx, allocator_t>,allocator_t,allocator_char_t,FooEx>();
-    TestExceptionBody<tbb::concurrent_bounded_queue<FooEx, allocator_t>,allocator_t,allocator_char_t,FooEx>();
+    TestExceptionBody<ConcQWithSizeWrapper,allocator_t,allocator_char_t,FooEx>();
+    TestExceptionBody<tbb::concurrent_bounded_queue,allocator_t,allocator_char_t,FooEx>();
 #endif /* TBB_USE_EXCEPTIONS */
 }
 
@@ -1236,7 +1239,7 @@ void TestFullness()
     TestFullQueue<tbb::concurrent_bounded_queue<Foo>,Foo>();
 }
 
-void TestClearWorks() 
+void TestClearWorks()
 {
     REMARK(" Test concurrent_queue::clear() works\n");
     TestClear<ConcQWithCapacity<Foo> >();
@@ -1264,7 +1267,7 @@ void TestQueueIteratorWorks()
 #endif
 class Empty;
 
-void TestQueueConstructors() 
+void TestQueueConstructors()
 {
     REMARK(" Test concurrent_queue's constructors work\n");
     TestConstructors<ConcQWithSizeWrapper<Bar>,Bar,BarIterator,ConcQWithSizeWrapper<BAR_EX>,BAR_EX>();
@@ -1333,9 +1336,12 @@ class SimplePushBody {
     int max;
 public:
     SimplePushBody(tbb::concurrent_bounded_queue<int>* _q, int hi_thr) : q(_q), max(hi_thr) {}
+    bool operator()() { // predicate for spin_wait_while
+        return q->size()<max;
+    }
     void operator()(int thread_id) const {
         if (thread_id == max) {
-            Harness::Sleep(50);
+            spin_wait_while( *this );
             q->abort();
             return;
         }
@@ -1351,12 +1357,18 @@ public:
 class SimplePopBody {
     tbb::concurrent_bounded_queue<int>* q;
     int max;
+    int prefill;
 public:
-    SimplePopBody(tbb::concurrent_bounded_queue<int>* _q, int hi_thr) : q(_q), max(hi_thr) {}
+    SimplePopBody(tbb::concurrent_bounded_queue<int>* _q, int hi_thr, int nitems)
+    : q(_q), max(hi_thr), prefill(nitems) {}
+    bool operator()() { // predicate for spin_wait_while
+        // There should be `max` pops, and `prefill` should succeed
+        return q->size()>prefill-max;
+    }
     void operator()(int thread_id) const {
         int e;
         if (thread_id == max) {
-            Harness::Sleep(50);
+            spin_wait_while( *this );
             q->abort();
             return;
         }
@@ -1384,8 +1396,14 @@ void TestAbort() {
             NativeParallelFor( nthreads+1, my_push_body1 );
             ASSERT(num_pushed == 0, "no elements should have been pushed to zero-sized queue");
             ASSERT((int)failed_pushes == nthreads, "All threads should have failed to push an element to zero-sized queue");
+            // Do not test popping each time in order to test queue destruction with no previous pops
+            if (nthreads < (MaxThread+MinThread)/2) {
+                int e;
+                bool queue_empty = !iq1.try_pop(e);
+                ASSERT(queue_empty, "no elements should have been popped from zero-sized queue");
+            }
         }
-        
+
         REMARK("...testing pushing to small-sized queue\n");
         tbb::concurrent_bounded_queue<int> iq2;
         iq2.set_capacity(2);
@@ -1394,12 +1412,12 @@ void TestAbort() {
             SimplePushBody my_push_body2(&iq2, nthreads);
             NativeParallelFor( nthreads+1, my_push_body2 );
             ASSERT(num_pushed <= 2, "at most 2 elements should have been pushed to queue of size 2");
-            if (nthreads >= 2) 
+            if (nthreads >= 2)
                 ASSERT((int)failed_pushes == nthreads-2, "nthreads-2 threads should have failed to push an element to queue of size 2");
             int e;
             while (iq2.try_pop(e)) ;
         }
-        
+
         REMARK("...testing popping from small-sized queue\n");
         tbb::concurrent_bounded_queue<int> iq3;
         iq3.set_capacity(2);
@@ -1407,8 +1425,8 @@ void TestAbort() {
             num_pushed = num_popped = failed_pushes = failed_pops = 0;
             iq3.push(42);
             iq3.push(42);
-            SimplePopBody my_pop_body(&iq3, nthreads);
-            NativeParallelFor( nthreads+1, my_pop_body);
+            SimplePopBody my_pop_body(&iq3, nthreads, 2);
+            NativeParallelFor( nthreads+1, my_pop_body );
             ASSERT(num_popped <= 2, "at most 2 elements should have been popped from queue of size 2");
             if (nthreads >= 2)
                 ASSERT((int)failed_pops == nthreads-2, "nthreads-2 threads should have failed to pop an element from queue of size 2");
@@ -1428,10 +1446,10 @@ void TestAbort() {
             SimplePushBody my_push_body2(&iq4, nthreads);
             NativeParallelFor( nthreads+1, my_push_body2 );
             ASSERT((int)num_pushed <= cap, "at most cap elements should have been pushed to queue of size cap");
-            if (nthreads >= cap) 
+            if (nthreads >= cap)
                 ASSERT((int)failed_pushes == nthreads-cap, "nthreads-cap threads should have failed to push an element to queue of size cap");
-            SimplePopBody my_pop_body(&iq4, nthreads);
-            NativeParallelFor( nthreads+1, my_pop_body);
+            SimplePopBody my_pop_body(&iq4, nthreads, (int)num_pushed);
+            NativeParallelFor( nthreads+1, my_pop_body );
             ASSERT((int)num_popped <= cap, "at most cap elements should have been popped from queue of size cap");
             if (nthreads >= cap)
                 ASSERT((int)failed_pops == nthreads-cap, "nthreads-cap threads should have failed to pop an element from queue of size cap");
diff --git a/src/test/test_concurrent_queue_whitebox.cpp b/src/test/test_concurrent_queue_whitebox.cpp
index b501946..539839e 100644
--- a/src/test/test_concurrent_queue_whitebox.cpp
+++ b/src/test/test_concurrent_queue_whitebox.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 #define HARNESS_DEFINE_PRIVATE_PUBLIC 1
diff --git a/src/test/test_concurrent_unordered_common.h b/src/test/test_concurrent_unordered_common.h
index 37e2106..4af2886 100644
--- a/src/test/test_concurrent_unordered_common.h
+++ b/src/test/test_concurrent_unordered_common.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /* Some tests in this source file are based on PPL tests provided by Microsoft. */
@@ -70,6 +70,8 @@ struct ValueFactory {
     static V make(const K &value) { return V(value, value); }
     static Kstrip key(const V &value) { return value.first; }
     static Kstrip get(const V &value) { return (Kstrip)value.second; }
+    template< typename U >
+    static U convert(const V &value) { return U(value.second); }
 };
 
 // generator for cuset
@@ -78,10 +80,17 @@ struct ValueFactory<T, T> {
     static T make(const T &value) { return value; }
     static T key(const T &value) { return value; }
     static T get(const T &value) { return value; }
+    template< typename U >
+    static U convert(const T &value) { return U(value); }
 };
 
 template <typename T>
-struct Value : ValueFactory<typename T::key_type, typename T::value_type> {};
+struct Value : ValueFactory<typename T::key_type, typename T::value_type> {
+    template<typename U>
+    static bool compare( const typename T::iterator& it, U val ) {
+        return (Value::template convert<U>(*it) == val);
+    }
+};
 
 #if _MSC_VER
 #pragma warning(disable: 4189) // warning 4189 -- local variable is initialized but not referenced
@@ -148,34 +157,35 @@ void check_value_state(/* typename do_check_element_state =*/ tbb::internal::fal
 #define ASSERT_VALUE_STATE(do_check_element_state,state,value) check_value_state<state>(do_check_element_state,value,__FILE__,__LINE__)
 
 #if __TBB_CPP11_RVALUE_REF_PRESENT
-template<typename T, typename do_check_element_state>
-void test_rvalue_insert()
+template<typename T, typename do_check_element_state, typename V>
+void test_rvalue_insert(V v1, V v2)
 {
     typedef T container_t;
 
     container_t cont;
 
-    std::pair<typename container_t::iterator, bool> ins = cont.insert(Value<container_t>::make(1));
-    ASSERT(ins.second == true && Value<container_t>::get(*(ins.first)) == 1, "Element 1 has not been inserted properly");
+    std::pair<typename container_t::iterator, bool> ins = cont.insert(Value<container_t>::make(v1));
+    ASSERT(ins.second == true && Value<container_t>::get(*(ins.first)) == v1, "Element 1 has not been inserted properly");
     ASSERT_VALUE_STATE(do_check_element_state(),Harness::StateTrackableBase::MoveInitialized,*ins.first);
 
-    typename container_t::iterator it2 = cont.insert(ins.first, Value<container_t>::make(2));
-    ASSERT(Value<container_t>::get(*(it2)) == 2, "Element 2 has not been inserted properly");
+    typename container_t::iterator it2 = cont.insert(ins.first, Value<container_t>::make(v2));
+    ASSERT(Value<container_t>::get(*(it2)) == v2, "Element 2 has not been inserted properly");
     ASSERT_VALUE_STATE(do_check_element_state(),Harness::StateTrackableBase::MoveInitialized,*it2);
 
 }
 #if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT
+// The test does not use variadic templates, but emplace() does.
 
 namespace emplace_helpers {
 template<typename container_t, typename arg_t, typename value_t>
 std::pair<typename container_t::iterator, bool> call_emplace_impl(container_t& c, arg_t&& k, value_t *){
-    //this a set
+    // this is a set
     return c.emplace(std::forward<arg_t>(k));
 }
 
 template<typename container_t, typename arg_t, typename first_t, typename second_t>
 std::pair<typename container_t::iterator, bool> call_emplace_impl(container_t& c, arg_t&& k, std::pair<first_t, second_t> *){
-    //this is a map
+    // this is a map
     return c.emplace(k, std::forward<arg_t>(k));
 }
 
@@ -187,13 +197,13 @@ std::pair<typename container_t::iterator, bool> call_emplace(container_t& c, arg
 
 template<typename container_t, typename arg_t, typename value_t>
 typename container_t::iterator call_emplace_hint_impl(container_t& c, typename container_t::const_iterator hint, arg_t&& k, value_t *){
-    //this a set
+    // this is a set
     return c.emplace_hint(hint, std::forward<arg_t>(k));
 }
 
 template<typename container_t, typename arg_t, typename first_t, typename second_t>
 typename container_t::iterator call_emplace_hint_impl(container_t& c, typename container_t::const_iterator hint, arg_t&& k, std::pair<first_t, second_t> *){
-    //this is a map
+    // this is a map
     return c.emplace_hint(hint, k, std::forward<arg_t>(k));
 }
 
@@ -203,18 +213,17 @@ typename container_t::iterator call_emplace_hint(container_t& c, typename contai
     return call_emplace_hint_impl(c, hint, std::forward<arg_t>(k), selector);
 }
 }
-template<typename T, typename do_check_element_state>
-void test_emplace_insert(){
+template<typename T, typename do_check_element_state, typename V>
+void test_emplace_insert(V v1, V v2){
     typedef T container_t;
-
     container_t cont;
 
-    std::pair<typename container_t::iterator, bool> ins = emplace_helpers::call_emplace(cont, 1);
-    ASSERT(ins.second == true && Value<container_t>::get(*(ins.first)) == 1, "Element 1 has not been inserted properly");
+    std::pair<typename container_t::iterator, bool> ins = emplace_helpers::call_emplace(cont, v1);
+    ASSERT(ins.second == true && Value<container_t>::compare(ins.first, v1), "Element 1 has not been inserted properly");
     ASSERT_VALUE_STATE(do_check_element_state(),Harness::StateTrackableBase::DirectInitialized,*ins.first);
 
-    typename container_t::iterator it2 = emplace_helpers::call_emplace_hint(cont, ins.first, 2);
-    ASSERT(Value<container_t>::get(*(it2)) == 2, "Element 2 has not been inserted properly");
+    typename container_t::iterator it2 = emplace_helpers::call_emplace_hint(cont, ins.first, v2);
+    ASSERT(Value<container_t>::compare(it2, v2), "Element 2 has not been inserted properly");
     ASSERT_VALUE_STATE(do_check_element_state(),Harness::StateTrackableBase::DirectInitialized,*it2);
 }
 #endif //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT
@@ -246,9 +255,9 @@ void test_basic(const char * str, do_check_element_state)
     ASSERT(ins.second == true && Value<T>::get(*(ins.first)) == 1, "Element 1 has not been inserted properly");
 
 #if __TBB_CPP11_RVALUE_REF_PRESENT
-    test_rvalue_insert<T,do_check_element_state>();
+    test_rvalue_insert<T,do_check_element_state>(1,2);
 #if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT
-    test_emplace_insert<T,do_check_element_state>();
+    test_emplace_insert<T,do_check_element_state>(1,2);
 #endif // __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT
 #endif // __TBB_CPP11_RVALUE_REF_PRESENT
 
@@ -540,14 +549,14 @@ template<typename ContainerType, typename RangeType>
 struct ParallelTraverseBody: NoAssign {
     const int n;
     AtomicByte* const array;
-    ParallelTraverseBody( AtomicByte an_array[], int a_n ) : 
+    ParallelTraverseBody( AtomicByte an_array[], int a_n ) :
         n(a_n), array(an_array)
     {}
     void operator()( const RangeType& range ) const {
         for( typename RangeType::iterator i = range.begin(); i!=range.end(); ++i ) {
-            int k = Value<ContainerType>::key(*i);
+            int k = static_cast<int>(Value<ContainerType>::key(*i));
             ASSERT( k == Value<ContainerType>::get(*i), NULL );
-            ASSERT( 0<=k && k<n, NULL ); 
+            ASSERT( 0<=k && k<n, NULL );
             array[k]++;
         }
     }
@@ -686,6 +695,17 @@ public:
 };
 
 #if __TBB_CPP11_SMART_POINTERS_PRESENT
+// For the sake of simplified testing, make unique_ptr implicitly convertible to/from the pointer
+namespace test {
+    template<typename T>
+    class unique_ptr : public std::unique_ptr<T> {
+    public:
+        typedef typename std::unique_ptr<T>::pointer pointer;
+        unique_ptr( pointer p ) : std::unique_ptr<T>(p) {}
+        operator pointer() const { return this->get(); }
+    };
+}
+
 namespace tbb {
     template<> class tbb_hash< std::shared_ptr<int> > {
     public:
@@ -703,6 +723,14 @@ namespace tbb {
     public:
         size_t operator()( const std::weak_ptr<int>& key ) const { return tbb_hasher( *key.lock( ) ); }
     };
+    template<> class tbb_hash< test::unique_ptr<int> > {
+    public:
+        size_t operator()( const test::unique_ptr<int>& key ) const { return tbb_hasher( *key ); }
+    };
+    template<> class tbb_hash< const test::unique_ptr<int> > {
+    public:
+        size_t operator()( const test::unique_ptr<int>& key ) const { return tbb_hasher( *key ); }
+    };
 }
 #endif /* __TBB_CPP11_SMART_POINTERS_PRESENT */
 
@@ -781,13 +809,14 @@ struct unordered_move_traits_base {
 };
 
 template<typename container_traits>
-void test_rvalue_ref_support(const char* /*container_name*/){
+void test_rvalue_ref_support(const char* container_name){
     TestMoveConstructor<container_traits>();
     TestMoveAssignOperator<container_traits>();
 #if TBB_USE_EXCEPTIONS
     TestExceptionSafetyGuaranteesMoveConstructorWithUnEqualAllocatorMemoryFailure<container_traits>();
     TestExceptionSafetyGuaranteesMoveConstructorWithUnEqualAllocatorExceptionInElementCtor<container_traits>();
 #endif //TBB_USE_EXCEPTIONS
+    REMARK("passed -- %s move support tests\n", container_name);
 }
 #endif //__TBB_CPP11_RVALUE_REF_PRESENT
 
diff --git a/src/test/test_concurrent_unordered_map.cpp b/src/test/test_concurrent_unordered_map.cpp
index fe2e023..5107739 100644
--- a/src/test/test_concurrent_unordered_map.cpp
+++ b/src/test/test_concurrent_unordered_map.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #define __TBB_EXTRA_DEBUG 1
@@ -58,7 +58,7 @@ struct SpecialTests <MyMap> {
         // mapped_type& operator[](const key_type& k);
         cont[1] = 2;
 
-        // bool empty() const;    
+        // bool empty() const;
         ASSERT( !ccont.empty( ), "Concurrent container empty after adding an element" );
 
         // size_type size() const;
@@ -114,7 +114,7 @@ struct SpecialTests <MyMultiMap> {
         // mapped_type& operator[](const key_type& k);
         cont.insert( std::make_pair( 1, one_values[0] ) );
 
-        // bool empty() const;    
+        // bool empty() const;
         ASSERT( !ccont.empty( ), "Concurrent container empty after adding an element" );
 
         // size_type size() const;
@@ -125,7 +125,7 @@ struct SpecialTests <MyMultiMap> {
 
         cont.insert( std::make_pair( 1, one_values[1] ) );
 
-        // bool empty() const;    
+        // bool empty() const;
         ASSERT( !ccont.empty( ), "Concurrent container empty after adding an element" );
 
         // size_type size() const;
@@ -142,7 +142,7 @@ struct SpecialTests <MyMultiMap> {
 
         cont.insert( std::make_pair( 0, zero_values[0] ) );
 
-        // bool empty() const;    
+        // bool empty() const;
         ASSERT( !ccont.empty( ), "Concurrent container empty after adding an element" );
 
         // size_type size() const;
@@ -257,7 +257,7 @@ void TestTypes() {
     }
     TestTypesMap</*defCtorPresent = */true>( arrIntTbb );
 
-#if __TBB_CPP11_REFERENCE_WRAPPER_PRESENT
+#if __TBB_CPP11_REFERENCE_WRAPPER_PRESENT && !__TBB_REFERENCE_WRAPPER_COMPILATION_BROKEN
     std::list< std::pair<const std::reference_wrapper<const int>, int> > arrRefInt;
     for ( std::list< std::pair<const int, int> >::iterator it = arrIntInt.begin(); it != arrIntInt.end(); ++it )
         arrRefInt.push_back( std::make_pair( std::reference_wrapper<const int>( it->first ), it->second ) );
@@ -269,7 +269,7 @@ void TestTypes() {
         arrIntRef.push_back( std::pair<const int, std::reference_wrapper<int> >( it->first, std::reference_wrapper<int>( it->second ) ) );
     }
     TestTypesMap</*defCtorPresent = */false>( arrIntRef );
-#endif /* __TBB_CPP11_REFERENCE_WRAPPER_PRESENT */
+#endif /* __TBB_CPP11_REFERENCE_WRAPPER_PRESENT && !__TBB_REFERENCE_WRAPPER_COMPILATION_BROKEN */
 
 #if __TBB_CPP11_SMART_POINTERS_PRESENT
     std::list< std::pair< const std::shared_ptr<int>, std::shared_ptr<int> > > arrShrShr;
@@ -282,6 +282,15 @@ void TestTypes() {
     std::list< std::pair< const std::weak_ptr<int>, std::weak_ptr<int> > > arrWkWk;
     std::copy( arrShrShr.begin(), arrShrShr.end(), std::back_inserter( arrWkWk ) );
     TestTypesMap</*defCtorPresent = */true>( arrWkWk );
+
+#if __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT
+    // Regression test for a problem with excessive requirements of emplace()
+    test_emplace_insert<tbb::concurrent_unordered_map< int*, test::unique_ptr<int> >,
+                        tbb::internal::false_type>( new int, new int );
+    test_emplace_insert<tbb::concurrent_unordered_multimap< int*, test::unique_ptr<int> >,
+                        tbb::internal::false_type>( new int, new int );
+#endif
+
 #else
     REPORT( "Known issue: C++11 smart pointer tests are skipped.\n" );
 #endif /* __TBB_CPP11_SMART_POINTERS_PRESENT */
@@ -303,6 +312,7 @@ int TestMain() {
     { Check<MyCheckedMap::value_type> checkit; test_basic<MyCheckedMap>( "concurrent unordered map (checked)" ); }
     { Check<MyCheckedMap::value_type> checkit; test_concurrent<MyCheckedMap>( "concurrent unordered map (checked)" ); }
     test_basic<MyCheckedStateMap>("concurrent unordered map (checked state of elements)", tbb::internal::true_type());
+    test_concurrent<MyCheckedStateMap>("concurrent unordered map (checked state of elements)");
 
     { Check<MyCheckedMultiMap::value_type> checkit; test_basic<MyCheckedMultiMap>( "concurrent unordered MultiMap (checked)" ); }
     { Check<MyCheckedMultiMap::value_type> checkit; test_concurrent<MyCheckedMultiMap>( "concurrent unordered MultiMap (checked)" ); }
@@ -320,7 +330,7 @@ int TestMain() {
     test_rvalue_ref_support<cu_map_type>( "concurrent unordered map" );
     test_rvalue_ref_support<cu_multimap_type>( "concurrent unordered multimap" );
 #endif /* __TBB_CPP11_RVALUE_REF_PRESENT */
-    
+
     TestTypes();
 
     return Harness::Done;
diff --git a/src/test/test_concurrent_unordered_set.cpp b/src/test/test_concurrent_unordered_set.cpp
index 454bb70..b747cb8 100644
--- a/src/test/test_concurrent_unordered_set.cpp
+++ b/src/test/test_concurrent_unordered_set.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "harness_defs.h"
@@ -100,12 +100,12 @@ void TestTypes( ) {
     for ( std::list< tbb::atomic<int> >::iterator it = arrTbb.begin(); it != arrTbb.end(); ++it, ++seq ) *it = seq;
     TestTypesSet</*defCtorPresent = */true>( arrTbb );
 
-#if __TBB_CPP11_REFERENCE_WRAPPER_PRESENT
+#if __TBB_CPP11_REFERENCE_WRAPPER_PRESENT && !__TBB_REFERENCE_WRAPPER_COMPILATION_BROKEN
     std::list< std::reference_wrapper<int> > arrRef;
     for ( std::list<int>::iterator it = arrInt.begin( ); it != arrInt.end( ); ++it )
         arrRef.push_back( std::reference_wrapper<int>(*it) );
     TestTypesSet</*defCtorPresent = */false>( arrRef );
-#endif /* __TBB_CPP11_REFERENCE_WRAPPER_PRESENT */
+#endif /* __TBB_CPP11_REFERENCE_WRAPPER_PRESENT && !__TBB_REFERENCE_WRAPPER_COMPILATION_BROKEN */
 
 #if __TBB_CPP11_SMART_POINTERS_PRESENT
     std::list< std::shared_ptr<int> > arrShr;
@@ -115,6 +115,15 @@ void TestTypes( ) {
     std::list< std::weak_ptr<int> > arrWk;
     std::copy( arrShr.begin( ), arrShr.end( ), std::back_inserter( arrWk ) );
     TestTypesSet</*defCtorPresent = */true>( arrWk );
+
+#if __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT
+    // Regression test for a problem with excessive requirements of emplace()
+    test_emplace_insert<tbb::concurrent_unordered_set< test::unique_ptr<int> >,
+                        tbb::internal::false_type>( new int, new int );
+    test_emplace_insert<tbb::concurrent_unordered_multiset< test::unique_ptr<int> >,
+                        tbb::internal::false_type>( new int, new int );
+#endif
+
 #else
     REPORT( "Known issue: C++11 smart pointer tests are skipped.\n" );
 #endif /* __TBB_CPP11_SMART_POINTERS_PRESENT */
@@ -164,6 +173,7 @@ int TestMain() {
     { Check<MyCheckedSet::value_type> checkit; test_basic<MyCheckedSet>( "concurrent_unordered_set (checked)" ); }
     { Check<MyCheckedSet::value_type> checkit; test_concurrent<MyCheckedSet>( "concurrent unordered set (checked)" ); }
     test_basic<MyCheckedStateSet>("concurrent unordered set (checked element state)", tbb::internal::true_type());
+    test_concurrent<MyCheckedStateSet>("concurrent unordered set (checked element state)");
 
     { Check<MyCheckedMultiSet::value_type> checkit; test_basic<MyCheckedMultiSet>("concurrent_unordered_multiset (checked)"); }
     { Check<MyCheckedMultiSet::value_type> checkit; test_concurrent<MyCheckedMultiSet>( "concurrent unordered multiset (checked)" ); }
diff --git a/src/test/test_concurrent_vector.cpp b/src/test/test_concurrent_vector.cpp
index 2e68944..6e54b22 100644
--- a/src/test/test_concurrent_vector.cpp
+++ b/src/test/test_concurrent_vector.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if _MSC_VER
@@ -172,6 +172,9 @@ struct CheckElement {
 #include "tbb/parallel_for.h"
 #include "harness.h"
 
+//! Problem size
+const size_t N = 500000;
+
 //! Test parallel access by iterators
 void TestParallelFor( int nthread ) {
     typedef tbb::concurrent_vector<int> vector_t;
@@ -247,8 +250,8 @@ void CheckIteratorComparison( V& u ) {
             ASSERT( (i>j)==(i_count>j_count), NULL );
             ASSERT( (i<=j)==(i_count<=j_count), NULL );
             ASSERT( (i>=j)==(i_count>=j_count), NULL );
-            ASSERT( !(i==i2), NULL ); 
-            ASSERT( i!=i2, NULL ); 
+            ASSERT( !(i==i2), NULL );
+            ASSERT( i!=i2, NULL );
             ++j;
             ++i2;
         }
@@ -924,13 +927,21 @@ void TestSerialGrowByWithMoveIterators(){
 namespace test_move_in_shrink_to_fit_helpers {
     struct dummy : Harness::StateTrackable<>{
         int i;
-        dummy(int an_i) __TBB_NOTHROW : Harness::StateTrackable<>(0), i(an_i)  {};
-#if __TBB_CPP11_IMPLICIT_MOVE_MEMBERS_GENERATION_BROKEN
-        dummy(dummy &&src) __TBB_NOTHROW : Harness::StateTrackable<>(std::move(src)), i(src.i)  {};
-    //somehow magically this declaration make std::is_nothrow_move_constructible<pod>::value to works correctly on icc14+msvc2013
-        ~dummy() __TBB_NOTHROW {};
-#endif //__TBB_CPP11_IMPLICIT_MOVE_MEMBERS_GENERATION_BROKEN
-        friend bool operator== ( const dummy & lhs, const dummy & rhs){ return lhs.i == rhs.i; }
+        dummy(int an_i) __TBB_NOTHROW : Harness::StateTrackable<>(0), i(an_i) {}
+#if !__TBB_IMPLICIT_MOVE_PRESENT || __TBB_NOTHROW_MOVE_MEMBERS_IMPLICIT_GENERATION_BROKEN
+        dummy(const dummy &src) __TBB_NOTHROW : Harness::StateTrackable<>(src), i(src.i) {}
+        dummy(dummy &&src) __TBB_NOTHROW : Harness::StateTrackable<>(std::move(src)), i(src.i) {}
+
+        dummy& operator=(dummy &&src) __TBB_NOTHROW {
+            Harness::StateTrackable<>::operator=(std::move(src));
+            i = src.i;
+            return *this;
+        }
+
+        //somehow magically this declaration make std::is_nothrow_move_constructible<pod>::value to works correctly on icc14+msvc2013
+        ~dummy() __TBB_NOTHROW {}
+#endif //!__TBB_IMPLICIT_MOVE_PRESENT || __TBB_NOTHROW_MOVE_MEMBERS_IMPLICIT_GENERATION_BROKEN
+        friend bool operator== (const dummy &lhs, const dummy &rhs){ return lhs.i == rhs.i; }
     };
 }
 void TestSerialMoveInShrinkToFit(){
@@ -1043,11 +1054,7 @@ void TestFindPrimes() {
     double t2 = TimeFindPrimes( tbb::task_scheduler_init::automatic );
 
     // Time parallel run that is very likely oversubscribed.
-#if _XBOX
-    double t128 = TimeFindPrimes(32);  //XBOX360 can't handle too many threads
-#else
     double t128 = TimeFindPrimes(128);
-#endif
     REMARK("TestFindPrimes: t2==%g t128=%g k=%g\n", t2, t128, t128/t2);
 
     // We allow the 128-thread run a little extra time to allow for thread overhead.
@@ -1216,7 +1223,7 @@ void TestExceptions() {
                         int i;
                         for(i = 1; ; ++i)
                             if(!victim[i].zero_bar()) break;
-                            else ASSERT(victim[i].bar() == (m == assign_ir)? i : initial_value_of_bar, NULL);
+                            else ASSERT(victim[i].bar() == (m == assign_ir? i : initial_value_of_bar), NULL);
                         for(; size_t(i) < size; ++i) ASSERT(!victim[i].zero_bar(), NULL);
                         ASSERT(size_t(i) == size, NULL);
                         break;
@@ -1676,14 +1683,14 @@ void TestTypes() {
     for ( int i=0; i<NUMBER; ++i ) intArr.push_back(i);
     TypeTester</*default_construction_present = */true>( intArr );
 
-#if __TBB_CPP11_REFERENCE_WRAPPER_PRESENT
+#if __TBB_CPP11_REFERENCE_WRAPPER_PRESENT && !__TBB_REFERENCE_WRAPPER_COMPILATION_BROKEN
     std::vector< std::reference_wrapper<int> > refArr;
     // The constructor of std::reference_wrapper<T> from T& is explicit in some versions of libstdc++.
     for ( int i=0; i<NUMBER; ++i ) refArr.push_back( std::reference_wrapper<int>(intArr[i]) );
     TypeTester</*default_construction_present = */false>( refArr );
 #else
     REPORT( "Known issue: C++11 reference wrapper tests are skipped.\n" );
-#endif /* __TBB_CPP11_REFERENCE_WRAPPER_PRESENT */
+#endif /* __TBB_CPP11_REFERENCE_WRAPPER_PRESENT && !__TBB_REFERENCE_WRAPPER_COMPILATION_BROKEN */
 
     std::vector< tbb::atomic<int> > tbbIntArr( NUMBER );
     for ( int i=0; i<NUMBER; ++i ) tbbIntArr[i] = i;
@@ -1772,7 +1779,7 @@ int TestMain () {
     TestExceptionSafetyGuaranteesMoveConstructorWithUnEqualAllocatorExceptionInElementCtor<c_vector_type>();
     TestExceptionSafetyGuaranteesForMoveAssignOperatorWithUnEqualAllocatorMemoryFailure();
     TestExceptionSafetyGuaranteesForMoveAssignOperatorWithUnEqualAllocatorExceptionInElementCtor();
-    TestPushBackMoveExceptionSafety();    
+    TestPushBackMoveExceptionSafety();
 #if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT
     TestEmplaceBackExceptionSafety();
 #endif /*__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT */
diff --git a/src/test/test_condition_variable.h b/src/test/test_condition_variable.h
index 0bb0420..b2212f1 100644
--- a/src/test/test_condition_variable.h
+++ b/src/test/test_condition_variable.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if !TBB_USE_EXCEPTIONS && _MSC_VER
diff --git a/src/test/test_container_move_support.h b/src/test/test_container_move_support.h
index 28981c5..efda72d 100644
--- a/src/test/test_container_move_support.h
+++ b/src/test/test_container_move_support.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_test_container_move_support_H
@@ -100,13 +100,10 @@ namespace Harness{
 tbb::atomic<size_t> FooCount;
 size_t MaxFooCount = 0;
 
-//! Problem size
-const size_t N = 500000;
-
 //! Exception for concurrent_container
 class Foo_exception : public std::bad_alloc {
 public:
-    virtual const char *what() const throw() { return "out of Foo limit"; }
+    virtual const char *what() const throw() __TBB_override { return "out of Foo limit"; }
     virtual ~Foo_exception() throw() {}
 };
 
@@ -152,7 +149,7 @@ public:
     }
     Foo(){
         my_bar = initial_value_of_bar;
-        FooCount++;        
+        FooCount++;
     }
     Foo( const Foo& foo ): FooLimit(), StateTrackable(foo){
         my_bar = foo.my_bar;
@@ -328,7 +325,7 @@ void TestFoo(){
     TestMoveConstructor<Foo>();
     TestMoveConstructor<FooWithAssign>();
     TestMoveAssignOperator<FooWithAssign>();
-#if TBB_USE_EXCEPTIONS
+#if TBB_USE_EXCEPTIONS && !__TBB_CPP11_EXCEPTION_IN_STATIC_TEST_BROKEN
     TestMoveConstructorException();
 #endif //TBB_USE_EXCEPTIONS
 #endif //__TBB_CPP11_RVALUE_REF_PRESENT
@@ -498,7 +495,7 @@ struct memory_locations {
 void TestMemoryLocaionsHelper(){
     const size_t test_sequence_len =  15;
     std::vector<char> source(test_sequence_len, 0);
-    std::generate_n(source.begin(), source.size(), std::rand);
+    std::generate_n(source.begin(), source.size(), Harness::FastRandomBody<char>(1));
 
     memory_locations source_memory_locations((source));
 
diff --git a/src/test/test_continue_node.cpp b/src/test/test_continue_node.cpp
index 794577c..5f047fe 100644
--- a/src/test/test_continue_node.cpp
+++ b/src/test/test_continue_node.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "harness_graph.h"
@@ -35,19 +35,18 @@ struct empty_no_assign : private NoAssign {
 // A class to use as a fake predecessor of continue_node
 struct fake_continue_sender : public tbb::flow::sender<tbb::flow::continue_msg>
 {
-    typedef tbb::flow::receiver<tbb::flow::continue_msg> successor_type;
+    typedef tbb::flow::sender<tbb::flow::continue_msg>::successor_type successor_type;
     // Define implementations of virtual methods that are abstract in the base class
-    /*override*/ bool register_successor( successor_type& ) { return false; }
-    /*override*/ bool remove_successor( successor_type& )   { return false; }  
+    bool register_successor( successor_type& ) __TBB_override { return false; }
+    bool remove_successor( successor_type& )   __TBB_override { return false; }
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     typedef tbb::flow::sender<tbb::flow::continue_msg>::built_successors_type built_successors_type;
     built_successors_type bst;
-    /*override*/ built_successors_type &built_successors() { return bst; }
-    /*override*/void internal_add_built_successor( successor_type &) { }
-    /*override*/void internal_delete_built_successor( successor_type &) { }
-    /*override*/void copy_successors(successor_list_type &) {}
-    /*override*/void clear_successors() {}
-    /*override*/size_t successor_count() {return 0;}
+    built_successors_type &built_successors() __TBB_override { return bst; }
+    void internal_add_built_successor( successor_type &) __TBB_override { }
+    void internal_delete_built_successor( successor_type &) __TBB_override { }
+    void copy_successors(successor_list_type &) __TBB_override {}
+    size_t successor_count() __TBB_override {return 0;}
 #endif
 };
 
@@ -111,6 +110,7 @@ void run_continue_nodes( int p, tbb::flow::graph& g, tbb::flow::continue_node< O
             tbb::flow::remove_edge( n, receivers[r] );
         }
 #endif
+        delete [] receivers;
     }
 }
 
@@ -176,6 +176,10 @@ void continue_nodes_with_copy( ) {
                 // 3) the nodes will send to multiple successors.
                 ASSERT( (int)c == p, NULL );
             }
+            for (size_t r = 0; r < num_receivers; ++r ) {
+                tbb::flow::remove_edge( exe_node, receivers[r] );
+            }
+            delete [] receivers;
         }
 
         // validate that the local body matches the global execute_count and both are correct
@@ -184,12 +188,10 @@ void continue_nodes_with_copy( ) {
         size_t global_count = global_execute_count;
         size_t inc_count = body_copy.local_execute_count;
         ASSERT( global_count == expected_count && global_count == inc_count, NULL );
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         g.reset(tbb::flow::rf_reset_bodies);
         body_copy = tbb::flow::copy_body< inc_functor<OutputType> >( exe_node );
         inc_count = body_copy.local_execute_count;
         ASSERT( Offset == inc_count, "reset(rf_reset_bodies) did not reset functor" );
-#endif
 
     }
 }
@@ -214,7 +216,7 @@ void test_concurrency(int num_threads) {
 }
 /*
  * Connection of two graphs is not currently supported, but works to some limited extent.
- * This test is included to check for backward compatibility. It checks that a continue_node 
+ * This test is included to check for backward compatibility. It checks that a continue_node
  * with predecessors in two different graphs receives the required
  * number of continue messages before it executes.
  */
@@ -247,7 +249,7 @@ void test_two_graphs(){
     start_h.try_put(continue_msg());
     g.wait_for_all();
     ASSERT(count==1, "Not all continue messages received");
- 
+
     //two try_puts from the graph that doesn't contain the node
     count=0;
     start_h.try_put(continue_msg());
@@ -280,13 +282,13 @@ void test_extract() {
         ASSERT(b1.predecessor_count() == 0 && b1.successor_count() == 1, "b1 has incorrect counts");
         ASSERT(c0.predecessor_count() == 2 && c0.successor_count() == 1, "c0 has incorrect counts");
         ASSERT(q0.predecessor_count() == 1 && q0.successor_count() == 0, "q0 has incorrect counts");
-    
+
         /* b0         */
         /*   \        */
         /*    c0 - q0 */
         /*   /        */
         /* b1         */
-    
+
         b0.try_put(tbb::flow::continue_msg());
         g.wait_for_all();
         ASSERT(my_count == 0, "continue_node fired too soon");
@@ -294,15 +296,15 @@ void test_extract() {
         g.wait_for_all();
         ASSERT(my_count == 1, "continue_node didn't fire");
         ASSERT(q0.try_get(cm), "continue_node didn't forward");
-    
+
         b0.extract();
-    
+
         /* b0         */
         /*            */
         /*    c0 - q0 */
         /*   /        */
         /* b1         */
-    
+
         ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 0, "b0 has incorrect counts");
         ASSERT(b1.predecessor_count() == 0 && b1.successor_count() == 1, "b1 has incorrect counts");
         ASSERT(c0.predecessor_count() == 1 && c0.successor_count() == 1, "c0 has incorrect counts");
@@ -315,15 +317,15 @@ void test_extract() {
         g.wait_for_all();
         ASSERT(my_count == 2, "continue_node didn't fire though it has only one predecessor");
         ASSERT(q0.try_get(cm), "continue_node didn't forward second time");
-    
+
         c0.extract();
-    
+
         /* b0         */
         /*            */
         /*    c0   q0 */
         /*            */
         /* b1         */
-    
+
         ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 0, "b0 has incorrect counts");
         ASSERT(b1.predecessor_count() == 0 && b1.successor_count() == 0, "b1 has incorrect counts");
         ASSERT(c0.predecessor_count() == 0 && c0.successor_count() == 0, "c0 has incorrect counts");
@@ -336,24 +338,24 @@ void test_extract() {
         ASSERT(my_count == 2, "continue didn't fire though it has only one predecessor");
         ASSERT(!q0.try_get(cm), "continue_node forwarded though it shouldn't");
         make_edge(b0, c0);
-    
+
         /* b0         */
         /*   \        */
         /*    c0   q0 */
         /*            */
         /* b1         */
-    
+
         ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 1, "b0 has incorrect counts");
         ASSERT(b1.predecessor_count() == 0 && b1.successor_count() == 0, "b1 has incorrect counts");
         ASSERT(c0.predecessor_count() == 1 && c0.successor_count() == 0, "c0 has incorrect counts");
         ASSERT(q0.predecessor_count() == 0 && q0.successor_count() == 0, "q0 has incorrect counts");
-    
+
         b0.try_put(tbb::flow::continue_msg());
         g.wait_for_all();
-    
+
         ASSERT(my_count == 3, "continue didn't fire though it has only one predecessor");
         ASSERT(!q0.try_get(cm), "continue_node forwarded though it shouldn't");
-    
+
         tbb::flow::make_edge(b1, c0);
         tbb::flow::make_edge(c0, q0);
         my_count = 0;
diff --git a/src/test/test_critical_section.cpp b/src/test/test_critical_section.cpp
index 70a82ca..3b2a072 100644
--- a/src/test/test_critical_section.cpp
+++ b/src/test/test_critical_section.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // test critical section
@@ -41,11 +41,11 @@ struct BusyBody : NoAssign {
     bool test_throw;
 
     BusyBody( int nThread_, int workRatiox100_, tbb::enumerable_thread_specific<double> &locals_, int &unprotected_count_, bool test_throw_) :
-        locals(locals_), 
-        nThread(nThread_), 
-        WorkRatiox100(workRatiox100_), 
+        locals(locals_),
+        nThread(nThread_),
+        WorkRatiox100(workRatiox100_),
         unprotected_count(unprotected_count_),
-        test_throw(test_throw_) { 
+        test_throw(test_throw_) {
         sBarrier.initialize(nThread_);
     }
 
@@ -60,7 +60,7 @@ struct BusyBody : NoAssign {
             }
             cs.lock();
             ASSERT( !cs.try_lock(), "recursive try_lock must fail" );
-#if TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN 
+#if TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN
             if(test_throw && j == (nIters / 2)) {
                 bool was_caught = false,
                      unknown_exception = false;
@@ -96,11 +96,11 @@ struct BusyBodyScoped : NoAssign {
     bool test_throw;
 
     BusyBodyScoped( int nThread_, int workRatiox100_, tbb::enumerable_thread_specific<double> &locals_, int &unprotected_count_, bool test_throw_) :
-        locals(locals_), 
-        nThread(nThread_), 
-        WorkRatiox100(workRatiox100_), 
+        locals(locals_),
+        nThread(nThread_),
+        WorkRatiox100(workRatiox100_),
         unprotected_count(unprotected_count_),
-        test_throw(test_throw_) { 
+        test_throw(test_throw_) {
         sBarrier.initialize(nThread_);
     }
 
@@ -113,7 +113,7 @@ struct BusyBodyScoped : NoAssign {
             for(int i = 0; i < MAX_WORK * (100 - WorkRatiox100); i++) {
                 locals.local() += 1.0;
             }
-            { 
+            {
                 tbb::critical_section::scoped_lock my_lock(cs);
                 for(int i = 0; i < MAX_WORK * WorkRatiox100; i++) {
                     locals.local() += 1.0;
@@ -168,7 +168,7 @@ RunOneCriticalSectionTest(int nThreads, int csWorkRatio, bool test_throw) {
             // amount of time.  If non-zero, the difference is divided by the time, and the
             // negative log is taken.  If > 2, then the difference is on the order of 0.01*t
             // where T is the average time.  We aritrarily define this as "fair."
-            etsSigma = sqrt(etsSigmaSq/double(nThreads)); 
+            etsSigma = sqrt(etsSigmaSq/double(nThreads));
             etsMax -= etsAvg;  // max - a == delta1
             etsMin = etsAvg - etsMin;  // a - min == delta2
             if(etsMax < etsMin) etsMax = etsMin;
diff --git a/src/test/test_dynamic_link.cpp b/src/test/test_dynamic_link.cpp
index 06108c1..ade55b9 100644
--- a/src/test/test_dynamic_link.cpp
+++ b/src/test/test_dynamic_link.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 enum FOO_TYPE {
@@ -67,7 +67,7 @@ int TestMain () {
     ASSERT( Harness::GetAddress( Harness::OpenLibrary(NULL), "foo1" ) && Harness::GetAddress( Harness::OpenLibrary(NULL), "foo2" ),
             "The executable doesn't export its symbols. Is the -rdynamic switch set during linking?" );
 #endif /* !_WIN32 */
-    // We want to link (or fail to link) to the symbols available from the 
+    // We want to link (or fail to link) to the symbols available from the
     // executable so it doesn't matter what the library name is specified in
     // the dynamic_link call - let it be an empty string.
     // Generally speaking the test has sense only on Linux but on Windows it
diff --git a/src/test/test_eh_algorithms.cpp b/src/test/test_eh_algorithms.cpp
index 0e40e18..8d1f638 100644
--- a/src/test/test_eh_algorithms.cpp
+++ b/src/test/test_eh_algorithms.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #define HARNESS_DEFAULT_MIN_THREADS 2
@@ -378,7 +378,7 @@ template<class B>
 class ParForLauncherTask : public tbb::task {
     tbb::task_group_context &my_ctx;
 
-    tbb::task* execute () {
+    tbb::task* execute () __TBB_override {
         tbb::parallel_for( range_type(0, FLAT_RANGE, FLAT_GRAIN), B(), tbb::simple_partitioner(), my_ctx );
         return NULL;
     }
@@ -395,7 +395,7 @@ void TestCancelation1 () {
 class CancellatorTask2 : public tbb::task {
     tbb::task_group_context &m_GroupToCancel;
 
-    tbb::task* execute () {
+    tbb::task* execute () __TBB_override {
         Harness::ConcurrencyTracker ct;
         WaitUntilConcurrencyPeaks();
         m_GroupToCancel.cancel_group_execution();
@@ -844,7 +844,7 @@ template<class B, class Iterator>
 class ParDoWorkerTask : public tbb::task {
     tbb::task_group_context &my_ctx;
 
-    tbb::task* execute () {
+    tbb::task* execute () __TBB_override {
         PREPARE_RANGE(Iterator, INNER_ITER_RANGE);
         tbb::parallel_do<Iterator, B>( begin, end, B(), my_ctx );
         return NULL;
@@ -949,7 +949,7 @@ public:
         m_Buffer[NUM_ITEMS] = c_DataEndTag;
     }
 
-    void* operator()( void* ) {
+    void* operator()( void* ) __TBB_override {
         size_t item = m_Item.fetch_and_increment();
         if(g_Master == Harness::CurrentTid()) g_MasterExecuted = true;
         else g_NonMasterExecuted = true;
@@ -980,7 +980,7 @@ public:
         : filter(is_parallel? tbb::filter::parallel : tbb::filter::serial_in_order),
         m_Value(value), m_Operation(_operation)
     {}
-    void* operator()(void* item) {
+    void* operator()(void* item) __TBB_override {
         size_t &value = *(size_t*)item;
         if(g_Master == Harness::CurrentTid()) g_MasterExecuted = true;
         else g_NonMasterExecuted = true;
@@ -1030,7 +1030,7 @@ class SimpleFilter : public tbb::filter {
     bool m_canThrow;
 public:
     SimpleFilter (tbb::filter::mode _mode, bool canThrow ) : filter (_mode), m_canThrow(canThrow) {}
-    void* operator()(void* item) {
+    void* operator()(void* item) __TBB_override {
         ++g_CurExecuted;
         if(g_Master == Harness::CurrentTid()) g_MasterExecuted = true;
         else g_NonMasterExecuted = true;
@@ -1115,7 +1115,7 @@ class OuterFilter : public tbb::filter {
 public:
     OuterFilter (tbb::filter::mode _mode, bool ) : filter (_mode) {}
 
-    void* operator()(void* item) {
+    void* operator()(void* item) __TBB_override {
         ++g_OuterParCalls;
         SimplePipeline testPipeline(serial_parallel);
         testPipeline.run();
@@ -1151,7 +1151,7 @@ class OuterFilterWithIsolatedCtx : public tbb::filter {
 public:
     OuterFilterWithIsolatedCtx(tbb::filter::mode m, bool ) : filter(m) {}
 
-    void* operator()(void* item) {
+    void* operator()(void* item) __TBB_override {
         ++g_OuterParCalls;
         tbb::task_group_context ctx(tbb::task_group_context::isolated);
         // create inner pipeline with serial input, parallel output filter, second filter throws
@@ -1234,7 +1234,7 @@ class OuterFilterWithEhBody : public tbb::filter {
 public:
     OuterFilterWithEhBody(tbb::filter::mode m, bool ) : filter(m) {}
 
-    void* operator()(void* item) {
+    void* operator()(void* item) __TBB_override {
         tbb::task_group_context ctx(tbb::task_group_context::isolated);
         ++g_OuterParCalls;
         SimplePipeline testPipeline(serial_parallel);
@@ -1304,7 +1304,7 @@ public:
     FinalizationBaseFilter ( tbb::filter::mode m ) : filter(m) {}
 
     // Deletes buffers if exception occurred
-    virtual void finalize( void* item ) {
+    virtual void finalize( void* item ) __TBB_override {
         size_t* m_Item = (size_t*)item;
         delete[] m_Item;
         --g_AllocatedCount;
@@ -1317,7 +1317,7 @@ public:
     InputFilterWithFinalization() : FinalizationBaseFilter(tbb::filter::serial) {
         g_TotalCount = 0;
     }
-    void* operator()( void* ){
+    void* operator()( void* ) __TBB_override {
         if (g_TotalCount == NUM_BUFFERS)
             return NULL;
         size_t* item = new size_t[BUFFER_SIZE];
@@ -1334,7 +1334,7 @@ class ProcessingFilterWithFinalization : public FinalizationBaseFilter {
 public:
     ProcessingFilterWithFinalization (tbb::filter::mode _mode, bool) : FinalizationBaseFilter (_mode) {}
 
-    void* operator()( void* item) {
+    void* operator()( void* item) __TBB_override {
         if(g_Master == Harness::CurrentTid()) g_MasterExecuted = true;
         else g_NonMasterExecuted = true;
         if( tbb::task::self().is_cancelled()) ++g_TGCCancelled;
@@ -1352,7 +1352,7 @@ class OutputFilterWithFinalization : public FinalizationBaseFilter {
 public:
     OutputFilterWithFinalization (tbb::filter::mode m) : FinalizationBaseFilter (m) {}
 
-    void* operator()( void* item){
+    void* operator()( void* item) __TBB_override {
         size_t* m_Item = (size_t*)item;
         delete[] m_Item;
         --g_AllocatedCount;
@@ -1398,7 +1398,7 @@ public:
     FilterToCancel(bool is_parallel)
         : filter( is_parallel ? tbb::filter::parallel : tbb::filter::serial_in_order )
     {}
-    void* operator()(void* item) {
+    void* operator()(void* item) __TBB_override {
         ++g_CurExecuted;
         CancellatorTask::WaitUntilReady();
         return item;
@@ -1411,7 +1411,7 @@ class PipelineLauncherTask : public tbb::task {
 public:
     PipelineLauncherTask ( tbb::task_group_context& ctx ) : my_ctx(ctx) {}
 
-    tbb::task* execute () {
+    tbb::task* execute () __TBB_override {
         // Run test when serial filter is the first non-input filter
         InputFilter inputFilter;
         Filter_to_cancel filterToCancel(true);
@@ -1449,7 +1449,7 @@ public:
         : filter ( is_parallel ? tbb::filter::parallel : tbb::filter::serial_in_order)
     {}
 
-    void* operator()(void* item) {
+    void* operator()(void* item) __TBB_override {
         ++g_CurExecuted;
         Harness::ConcurrencyTracker ct;
         // The test will hang (and be timed out by the test system) if is_cancelled() is broken
@@ -1499,11 +1499,11 @@ public:
     MyCapturedException () : tbb::captured_exception("MyCapturedException", "test") { ++m_refCount; }
     ~MyCapturedException () throw() { --m_refCount; }
 
-    MyCapturedException* move () throw() {
+    MyCapturedException* move () throw() __TBB_override {
         MyCapturedException* movee = (MyCapturedException*)malloc(sizeof(MyCapturedException));
         return ::new (movee) MyCapturedException;
     }
-    void destroy () throw() {
+    void destroy () throw() __TBB_override {
         this->~MyCapturedException();
         free(this);
     }
diff --git a/src/test/test_eh_flow_graph.cpp b/src/test/test_eh_flow_graph.cpp
index bc6ac9a..879541b 100644
--- a/src/test/test_eh_flow_graph.cpp
+++ b/src/test/test_eh_flow_graph.cpp
@@ -1,27 +1,26 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
-*/
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
 
-#include "harness_defs.h"
+
+
+*/
 
 #define HARNESS_DEFAULT_MIN_THREADS 2
 #define HARNESS_DEFAULT_MAX_THREADS 4
+#include "harness_defs.h"
 
 #if _MSC_VER
     #pragma warning (disable: 4503) // Suppress "decorated name length exceeded, name was truncated" warning
@@ -121,15 +120,15 @@ protected:
 // for nodes with limited concurrency, if that concurrency is < g_NumThreads, we need
 // to make sure enough other nodes wait for concurrency to peak.  If we are attached to
 // N successors, for each item we pass to a successor, we will get N executions of the
-// "absorbers" (because we broadcast to successors.)  for an odd number of threads we 
-// need (g_NumThreads - limited + 1) / 2 items (that will give us one extra execution 
+// "absorbers" (because we broadcast to successors.)  for an odd number of threads we
+// need (g_NumThreads - limited + 1) / 2 items (that will give us one extra execution
 // of an "absorber", but we can't change that without changing the behavior of the node.)
 template<>
 class WaitThrow<limited_type,nonThrowing> {
 protected:
     void WaitAndThrow(int cnt, const char * /*name*/) {
         if(cnt <= (g_NumThreads - (int)limited_type + 1)/2) {
-            return; 
+            return;
         }
         Harness::ConcurrencyTracker ct;
         WaitUntilConcurrencyPeaks();
@@ -142,7 +141,7 @@ protected:
     void WaitAndThrow(int cnt, const char * /*name*/) {
         Harness::ConcurrencyTracker ct;
         if(cnt <= (g_NumThreads - (int)limited_type + 1)/2) {
-            return; 
+            return;
         }
         WaitUntilConcurrencyPeaks();
         ThrowTestException(1);
@@ -314,7 +313,7 @@ class tag_func {
 public:
     tag_func(TT multiplier) : my_mult(multiplier) { }
     void operator=( const tag_func& other){my_mult = other.my_mult;}
-    // operator() will return [0 .. Count) 
+    // operator() will return [0 .. Count)
     tbb::flow::tag_value operator()( TT v) {
         tbb::flow::tag_value t = tbb::flow::tag_value(v / my_mult);
         return t;
@@ -409,7 +408,7 @@ void run_one_source_node_test(bool throwException, bool flog) {
             ASSERT(src_cnt == g_NumItems, "Incorrect # source_node items emitted");
             ASSERT(sink_cnt == src_cnt, "Incorrect # source_node items received");
         }
-        g.reset();  // resets the body of the source_node and the absorb_nodes. 
+        g.reset();  // resets the body of the source_node and the absorb_nodes.
         source_body_count = 0;
         absorber_body_count = 0;
         ASSERT(!g.exception_thrown(), "Reset didn't clear exception_thrown()");
@@ -559,14 +558,14 @@ run_one_functype_node_test(bool throwException, bool flog, const char * /*name*/
             ASSERT(t_cnt == 2*g_NumItems, "Not all items reached test node");
             ASSERT(nb0_cnt == 2*g_NumItems && nb1_cnt == 2*g_NumItems, "Missing items in absorbers");
         }
-        g.reset();  // resets the body of the source_nodes, test_node and the absorb_nodes. 
+        g.reset();  // resets the body of the source_nodes, test_node and the absorb_nodes.
         source0_count = source1_count = sink0_count = sink1_count = test_count = 0;
         ASSERT(0 == tbb::flow::copy_body<SourceNodeBodyType0>(source0).count_value(),"Reset source 0 failed");
         ASSERT(0 == tbb::flow::copy_body<SourceNodeBodyType1>(source1).count_value(),"Reset source 1 failed");
         ASSERT(0 == tbb::flow::copy_body<TestNodeBodyType>(node_to_test).count_value(),"Reset test_node failed");
         ASSERT(0 == tbb::flow::copy_body<SinkNodeBodyType0>(sink0).count_value(),"Reset sink 0 failed");
         ASSERT(0 == tbb::flow::copy_body<SinkNodeBodyType1>(sink1).count_value(),"Reset sink 1 failed");
-        
+
         g_Wakeup_Msg = saved_msg;
     }
 #if USE_TASK_SCHEDULER_OBSERVER
@@ -575,7 +574,7 @@ run_one_functype_node_test(bool throwException, bool flog, const char * /*name*/
 }
 
 //  Test function_node
-// 
+//
 // graph being tested is
 //
 //        source_node -\                 /- parallel function_node
@@ -585,8 +584,8 @@ run_one_functype_node_test(bool throwException, bool flog, const char * /*name*/
 //        source_node -/                 \- parallel function_node
 //
 //    After each run the graph is reset(), to test the reset functionality.
-// 
-template< 
+//
+template<
     TestNodeTypeEnum SType1,                          // does source node 1 throw?
     TestNodeTypeEnum SType2,                          // does source node 2 throw?
     class Item12,                                     // type of item passed between sources and test node
@@ -594,7 +593,7 @@ template<
     class Item23,                                     // type passed from function_node to sink nodes
     TestNodeTypeEnum NType1,                          // does sink node 1 throw?
     TestNodeTypeEnum NType2,                          // does sink node 1 throw?
-    tbb::flow::graph_buffer_policy NodePolicy,        // rejecting,queueing
+    class NodePolicy,                                 // rejecting,queueing
     size_t Conc                                       // is node concurrent? {serial | limited | unlimited}
 >
 void run_function_node_test() {
@@ -677,7 +676,7 @@ void test_function_node() {
 
 // ----------------------------------- multifunction_node ----------------------------------
 //  Test multifunction_node.
-// 
+//
 // graph being tested is
 //
 //        source_node -\                      /- parallel function_node
@@ -689,8 +688,8 @@ void test_function_node() {
 //    After each run the graph is reset(), to test the reset functionality.  The
 //    multifunction_node will put an item to each successor for every item
 //    received.
-// 
-template< 
+//
+template<
     TestNodeTypeEnum SType0,                          // does source node 1 throw?
     TestNodeTypeEnum SType1,                          // does source node 2 thorw?
     class Item12,                                 // type of item passed between sources and test node
@@ -698,7 +697,7 @@ template<
     class ItemTuple,                              // tuple of types passed from multifunction_node to sink nodes
     TestNodeTypeEnum NType1,                          // does sink node 1 throw?
     TestNodeTypeEnum NType2,                          // does sink node 2 throw?
-    tbb::flow::graph_buffer_policy NodePolicy,    // rejecting,queueing
+    class  NodePolicy,                            // rejecting,queueing
     size_t Conc                                   // is node concurrent? {serial | limited | unlimited}
 >
 void run_multifunction_node_test() {
@@ -798,7 +797,7 @@ void test_multifunction_node() {
 //
 // The continue_node has unlimited parallelism, no input buffering, and broadcasts to successors.
 // The absorber is parallel, so each item emitted by the source will result in one thread
-// spinning.  So for N threads we pass N-1 continue_messages, then spin wait and then throw if 
+// spinning.  So for N threads we pass N-1 continue_messages, then spin wait and then throw if
 // we are allowed to.
 
 template < class SourceNodeType, class SourceNodeBodyType, class TTestNodeType, class TestNodeBodyType,
@@ -857,7 +856,7 @@ void run_one_continue_node_test (bool throwException, bool flog) {
             ASSERT(t_cnt == g_NumItems, "Not all items reached test node");
             ASSERT(nb_cnt == g_NumItems, "Missing items in absorbers");
         }
-        g.reset();  // resets the body of the source_nodes, test_node and the absorb_nodes. 
+        g.reset();  // resets the body of the source_nodes, test_node and the absorb_nodes.
         source_count = test_count = sink_count = 0;
         ASSERT(0 == (int)test_count, "Atomic wasn't reset properly");
         ASSERT(0 == tbb::flow::copy_body<SourceNodeBodyType>(source).count_value(),"Reset source failed");
@@ -898,7 +897,7 @@ void run_continue_node_test() {
     }
 }
 
-// 
+//
 void test_continue_node() {
     REMARK("Testing continue_node\n");
     g_Wakeup_Msg = "buffer_node(non,is,non): Missed wakeup or machine is overloaded?";
@@ -918,7 +917,7 @@ void test_continue_node() {
 // ---------- buffer_node queue_node overwrite_node --------------
 
 template<
-    class BufferItemType,       // 
+    class BufferItemType,       //
     class SourceNodeType,
     class SourceNodeBodyType,
     class TestNodeType,
@@ -1057,7 +1056,7 @@ void test_buffer_queue_and_overwrite_node() {
 
 
 template<
-    class BufferItemType,       // 
+    class BufferItemType,       //
     class SourceNodeType,
     class SourceNodeBodyType,
     class TestNodeType,
@@ -1297,10 +1296,10 @@ void test_priority_queue_node() {
 }
 
 // ------------------- join_node ----------------
-template<tbb::flow::graph_buffer_policy JP> struct graph_policy_name{
+template<class JP> struct graph_policy_name{
     static const char* name() {return "unknown"; }
 };
-template<> struct graph_policy_name<tbb::flow::queueing>  { 
+template<> struct graph_policy_name<tbb::flow::queueing>  {
     static const char* name() {return "queueing"; }
 };
 template<> struct graph_policy_name<tbb::flow::reserving> {
@@ -1312,14 +1311,14 @@ template<> struct graph_policy_name<tbb::flow::tag_matching> {
 
 
 template<
-    tbb::flow::graph_buffer_policy JP,
+    class JP,
     class OutputTuple,
     class SourceType0,
     class SourceBodyType0,
-    class SourceType1, 
+    class SourceType1,
     class SourceBodyType1,
     class TestJoinType,
-    class SinkType, 
+    class SinkType,
     class SinkBodyType
     >
 struct run_one_join_node_test {
@@ -1415,10 +1414,10 @@ template<
     class OutputTuple,
     class SourceType0,
     class SourceBodyType0,
-    class SourceType1, 
+    class SourceType1,
     class SourceBodyType1,
     class TestJoinType,
-    class SinkType, 
+    class SinkType,
     class SinkBodyType
     >
 struct run_one_join_node_test<
@@ -1430,7 +1429,7 @@ struct run_one_join_node_test<
         SourceBodyType1,
         TestJoinType,
         SinkType,
-        SinkBodyType 
+        SinkBodyType
     > {
     run_one_join_node_test() {}
     static void execute_test(bool throwException,bool flog) {
@@ -1493,7 +1492,7 @@ struct run_one_join_node_test<
                 tbb::flow::input_port<0>(node_to_test).try_put(ItemType0(g_NumItems + 4));
                 tbb::flow::input_port<1>(node_to_test).try_put(ItemType1(g_NumItems + 2));
                 g.wait_for_all();   // have to wait for the graph to stop again....
-                g.reset();  // resets the body of the source_nodes, test_node and the absorb_nodes. 
+                g.reset();  // resets the body of the source_nodes, test_node and the absorb_nodes.
                 source0_count = source1_count = sink_count = 0;
                 make_edge(node_to_test, sink);
                 g.wait_for_all();   // have to wait for the graph to stop again....
@@ -1515,7 +1514,7 @@ struct run_one_join_node_test<
     }
 };  // run_one_join_node_test<tag_matching>
 
-template<tbb::flow::graph_buffer_policy JP, class OutputTuple,
+template<class JP, class OutputTuple,
              TestNodeTypeEnum SourceThrowType,
              TestNodeTypeEnum SinkThrowType>
 void run_join_node_test() {
@@ -1547,7 +1546,7 @@ void run_join_node_test() {
     }
 }
 
-template<tbb::flow::graph_buffer_policy JP>
+template<class JP>
 void test_join_node() {
     REMARK("Testing join_node<%s>\n", graph_policy_name<JP>::name());
     // only doing two-input joins
@@ -1565,7 +1564,7 @@ void test_join_node() {
 // ------------------- limiter_node -------------
 
 template<
-    class BufferItemType,       // 
+    class BufferItemType,       //
     class SourceNodeType,
     class SourceNodeBodyType,
     class TestNodeType,
@@ -1743,7 +1742,7 @@ void run_one_split_node_test(bool throwException, bool flog) {
             ASSERT(sb_cnt == g_NumItems, "Missing invocations of source_nodes");
             ASSERT(nb0_cnt == g_NumItems && nb1_cnt == g_NumItems, "Missing items in absorbers");
         }
-        g.reset();  // resets the body of the source_nodes and the absorb_nodes. 
+        g.reset();  // resets the body of the source_nodes and the absorb_nodes.
         source_count = sink0_count = sink1_count = 0;
         ASSERT(0 == tbb::flow::copy_body<SourceBodyType>(source).count_value(),"Reset source failed");
         ASSERT(0 == tbb::flow::copy_body<SinkBodyType0>(sink0).count_value(),"Reset sink 0 failed");
@@ -1946,7 +1945,7 @@ public:
     }
 };
 
-// test from user ahelwer: http://software.intel.com/en-us/forums/showthread.php?t=103786 
+// test from user ahelwer: http://software.intel.com/en-us/forums/showthread.php?t=103786
 // exception thrown in graph node, not caught in wait_for_all()
 void
 test_flow_graph_exception0() {
@@ -1959,7 +1958,7 @@ test_flow_graph_exception0() {
     // Construct graph and nodes
     tbb::flow::graph g;
     tbb::flow::broadcast_node<tbb::flow::continue_msg> start(g);
-    tbb::flow::continue_node<tbb::flow::continue_msg> fooNode(g, f); 
+    tbb::flow::continue_node<tbb::flow::continue_msg> fooNode(g, f);
 
     // Construct edge
     tbb::flow::make_edge(start, fooNode);
@@ -1999,7 +1998,7 @@ void TestOneThreadNum(int nThread) {
     REMARK("Testing %d threads\n", nThread);
     g_NumItems = ((nThread > NUM_ITEMS) ? nThread *2 : NUM_ITEMS);
     g_NumThreads = nThread;
-    tbb::task_scheduler_init init(nThread); 
+    tbb::task_scheduler_init init(nThread);
     // whole-graph exception catch and rethrow test
     test_flow_graph_exception0();
     for(int i = 0; i < 4; ++i) {
diff --git a/src/test/test_eh_tasks.cpp b/src/test/test_eh_tasks.cpp
index 103d2a7..900f3f1 100644
--- a/src/test/test_eh_tasks.cpp
+++ b/src/test/test_eh_tasks.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #define HARNESS_DEFAULT_MIN_THREADS 2
@@ -112,12 +112,12 @@ inline void WaitForException () {
 }
 
 class TaskBase : public tbb::task {
-    tbb::task* execute () {
+    tbb::task* execute () __TBB_override {
         tbb::task* t = NULL;
-        __TBB_TRY { 
+        __TBB_TRY {
             t = do_execute();
-        } __TBB_CATCH( ... ) { 
-            g_CurStat.IncExecuted(); 
+        } __TBB_CATCH( ... ) {
+            g_CurStat.IncExecuted();
             __TBB_RETHROW();
         }
         g_CurStat.IncExecuted();
@@ -133,7 +133,7 @@ protected:
 }; // class TaskBase
 
 class LeafTask : public TaskBase {
-    tbb::task* do_execute () {
+    tbb::task* do_execute () __TBB_override {
         Harness::ConcurrencyTracker ct;
         WaitUntilConcurrencyPeaks();
         if ( g_BoostExecutedCount )
@@ -149,7 +149,7 @@ public:
 };
 
 class SimpleRootTask : public TaskBase {
-    tbb::task* do_execute () {
+    tbb::task* do_execute () __TBB_override {
         set_ref_count(NUM_CHILD_TASKS + 1);
         for ( size_t i = 0; i < NUM_CHILD_TASKS; ++i )
             spawn( *new( allocate_child() ) LeafTask(m_Throw) );
@@ -164,7 +164,7 @@ public:
 
 class SimpleThrowingTask : public tbb::task {
 public:
-    tbb::task* execute () { throw 0; }
+    tbb::task* execute () __TBB_override { throw 0; }
     ~SimpleThrowingTask() {}
 };
 
@@ -183,13 +183,13 @@ void Test0 () {
     r.destroy( r );
 }
 
-//! Default exception behavior test. 
-/** Allocates a root task that spawns a bunch of children, one or several of which throw 
+//! Default exception behavior test.
+/** Allocates a root task that spawns a bunch of children, one or several of which throw
     a test exception in a worker or master thread (depending on the global setting). **/
 void Test1 () {
     ResetGlobals();
     tbb::empty_task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;
-    ASSERT (!g_CurStat.Existing() && !g_CurStat.Existed() && !g_CurStat.Executed(), 
+    ASSERT (!g_CurStat.Existing() && !g_CurStat.Existed() && !g_CurStat.Executed(),
             "something wrong with the task accounting");
     r.set_ref_count(NUM_CHILD_TASKS + 1);
     for ( int i = 0; i < NUM_CHILD_TASKS; ++i )
@@ -201,15 +201,15 @@ void Test1 () {
     ASSERT_TEST_POSTCOND();
 } // void Test1 ()
 
-//! Default exception behavior test. 
+//! Default exception behavior test.
 /** Allocates and spawns root task that runs a bunch of children, one of which throws
-    a test exception in a worker thread. (Similar to Test1, except that the root task 
-    is spawned by the test function, and children are created by the root task instead 
+    a test exception in a worker thread. (Similar to Test1, except that the root task
+    is spawned by the test function, and children are created by the root task instead
     of the test function body.) **/
 void Test2 () {
     ResetGlobals();
     SimpleRootTask &r = *new( tbb::task::allocate_root() ) SimpleRootTask;
-    ASSERT (g_CurStat.Existing() == 1 && g_CurStat.Existed() == 1 && !g_CurStat.Executed(), 
+    ASSERT (g_CurStat.Existing() == 1 && g_CurStat.Existed() == 1 && !g_CurStat.Executed(),
             "something wrong with the task accounting");
     TRY();
         tbb::task::spawn_root_and_wait(r);
@@ -219,13 +219,13 @@ void Test2 () {
 } // void Test2 ()
 
 //! The same as Test2() except the root task has explicit context.
-/** The context is initialized as bound in order to check correctness of its associating 
+/** The context is initialized as bound in order to check correctness of its associating
     with a root task. **/
 void Test3 () {
     ResetGlobals();
     tbb::task_group_context  ctx(tbb::task_group_context::bound);
     SimpleRootTask &r = *new( tbb::task::allocate_root(ctx) ) SimpleRootTask;
-    ASSERT (g_CurStat.Existing() == 1 && g_CurStat.Existed() == 1 && !g_CurStat.Executed(), 
+    ASSERT (g_CurStat.Existing() == 1 && g_CurStat.Existed() == 1 && !g_CurStat.Executed(),
             "something wrong with the task accounting");
     TRY();
         tbb::task::spawn_root_and_wait(r);
@@ -236,8 +236,8 @@ void Test3 () {
 
 class RootLauncherTask : public TaskBase {
     tbb::task_group_context::kind_type m_CtxKind;
- 
-    tbb::task* do_execute () {
+
+    tbb::task* do_execute () __TBB_override {
         tbb::task_group_context  ctx(m_CtxKind);
         SimpleRootTask &r = *new( allocate_root() ) SimpleRootTask;
         r.change_group(ctx);
@@ -253,8 +253,8 @@ public:
     RootLauncherTask ( tbb::task_group_context::kind_type ctx_kind = tbb::task_group_context::isolated ) : m_CtxKind(ctx_kind) {}
 };
 
-/** Allocates and spawns a bunch of roots, which allocate and spawn new root with 
-    isolated context, which at last spawns a bunch of children each, one of which 
+/** Allocates and spawns a bunch of roots, which allocate and spawn new root with
+    isolated context, which at last spawns a bunch of children each, one of which
     throws a test exception in a worker thread. **/
 void Test4 () {
     ResetGlobals();
@@ -291,7 +291,7 @@ void Test4_1 () {
 
 
 class RootsGroupLauncherTask : public TaskBase {
-    tbb::task* do_execute () {
+    tbb::task* do_execute () __TBB_override {
         tbb::task_group_context  ctx (tbb::task_group_context::isolated);
         tbb::task_list  tl;
         for ( size_t i = 0; i < NUM_ROOT_TASKS; ++i )
@@ -305,8 +305,8 @@ class RootsGroupLauncherTask : public TaskBase {
     }
 };
 
-/** Allocates and spawns a bunch of roots, which allocate and spawn groups of roots 
-    with an isolated context shared by all group members, which at last spawn a bunch 
+/** Allocates and spawns a bunch of roots, which allocate and spawn groups of roots
+    with an isolated context shared by all group members, which at last spawn a bunch
     of children each, one of which throws a test exception in a worker thread. **/
 void Test5 () {
     ResetGlobals();
@@ -326,7 +326,7 @@ void Test5 () {
 } // void Test5 ()
 
 class ThrowingRootLauncherTask : public TaskBase {
-    tbb::task* do_execute () {
+    tbb::task* do_execute () __TBB_override {
         tbb::task_group_context  ctx (tbb::task_group_context::bound);
         SimpleRootTask &r = *new( allocate_root(ctx) ) SimpleRootTask(false);
         TRY();
@@ -347,7 +347,7 @@ class BoundHierarchyLauncherTask : public TaskBase {
             tl.push_back( *new( allocate_root(ctx) ) ThrowingRootLauncherTask );
     }
 
-    tbb::task* do_execute () {
+    tbb::task* do_execute () __TBB_override {
         tbb::task_group_context  ctx (tbb::task_group_context::isolated);
         tbb::task_list tl;
         alloc_roots(ctx, tl);
@@ -381,10 +381,10 @@ public:
 }; // class BoundHierarchyLauncherTask
 
 //! Test for bound contexts forming 2 level tree. Exception is thrown on the 1st (root) level.
-/** Allocates and spawns a root that spawns a bunch of 2nd level roots sharing 
-    the same isolated context, each of which in their turn spawns a single 3rd level 
-    root with  the bound context, and these 3rd level roots spawn bunches of leaves 
-    in the end. Leaves do not generate exceptions. The test exception is generated 
+/** Allocates and spawns a root that spawns a bunch of 2nd level roots sharing
+    the same isolated context, each of which in their turn spawns a single 3rd level
+    root with  the bound context, and these 3rd level roots spawn bunches of leaves
+    in the end. Leaves do not generate exceptions. The test exception is generated
     by one of the 2nd level roots. **/
 void Test6 () {
     ResetGlobals();
@@ -393,14 +393,14 @@ void Test6 () {
         tbb::task::spawn_root_and_wait(r);
     CATCH_AND_ASSERT();
     ASSERT (!l_ExceptionCaughtAtCurrentLevel, "unexpected exception intercepted");
-    // After the first of the branches (ThrowingRootLauncherTask) completes, 
+    // After the first of the branches (ThrowingRootLauncherTask) completes,
     // the rest of the task tree may be collapsed before having a chance to execute leaves.
     // A number of branches running concurrently with the first one will be able to spawn leaves though.
     /// \todo: If additional checkpoints are added to scheduler the following assertion must weaken
     intptr_t  num_tasks_expected = 1 + NUM_ROOT_TASKS * (2 + NUM_CHILD_TASKS);
     intptr_t  min_num_tasks_created = 1 + g_NumThreads * 2 + NUM_CHILD_TASKS;
     // 2 stands for BoundHierarchyLauncherTask and SimpleRootTask
-    // 1 corresponds to BoundHierarchyLauncherTask 
+    // 1 corresponds to BoundHierarchyLauncherTask
     intptr_t  min_num_tasks_executed = 2 + 1 + NUM_CHILD_TASKS;
     ASSERT (g_CurStat.Existed() <= num_tasks_expected, "Number of expected tasks is calculated incorrectly");
     ASSERT (g_CurStat.Existed() >= min_num_tasks_created, "Too few tasks created");
@@ -409,10 +409,10 @@ void Test6 () {
 } // void Test6 ()
 
 //! Tests task_group_context::unbind and task_group_context::reset methods.
-/** Allocates and spawns a root that spawns a bunch of 2nd level roots sharing 
-    the same isolated context, each of which in their turn spawns a single 3rd level 
-    root with  the bound context, and these 3rd level roots spawn bunches of leaves 
-    in the end. Leaves do not generate exceptions. The test exception is generated 
+/** Allocates and spawns a root that spawns a bunch of 2nd level roots sharing
+    the same isolated context, each of which in their turn spawns a single 3rd level
+    root with  the bound context, and these 3rd level roots spawn bunches of leaves
+    in the end. Leaves do not generate exceptions. The test exception is generated
     by one of the 2nd level roots. **/
 void Test7 () {
     ResetGlobals();
@@ -425,7 +425,7 @@ void Test7 () {
 } // void Test6 ()
 
 class BoundHierarchyLauncherTask2 : public TaskBase {
-    tbb::task* do_execute () {
+    tbb::task* do_execute () __TBB_override {
         tbb::task_group_context  ctx;
         tbb::task_list  tl;
         for ( size_t i = 0; i < NUM_ROOT_TASKS; ++i )
@@ -440,9 +440,9 @@ class BoundHierarchyLauncherTask2 : public TaskBase {
 }; // class BoundHierarchyLauncherTask2
 
 //! Test for bound contexts forming 2 level tree. Exception is thrown in the 2nd (outer) level.
-/** Allocates and spawns a root that spawns a bunch of 2nd level roots sharing 
-    the same isolated context, each of which in their turn spawns a single 3rd level 
-    root with  the bound context, and these 3rd level roots spawn bunches of leaves 
+/** Allocates and spawns a root that spawns a bunch of 2nd level roots sharing
+    the same isolated context, each of which in their turn spawns a single 3rd level
+    root with  the bound context, and these 3rd level roots spawn bunches of leaves
     in the end. The test exception is generated by one of the leaves. **/
 void Test8 () {
     ResetGlobals();
@@ -465,7 +465,7 @@ void Test8 () {
 template<typename T>
 void ThrowMovableException ( intptr_t threshold, const T& data ) {
     if ( !IsThrowingThread() )
-        return; 
+        return;
     if ( !g_SolitaryException ) {
 #if __TBB_ATOMICS_CODEGEN_BROKEN
         g_ExceptionsThrown = g_ExceptionsThrown + 1;
@@ -483,7 +483,7 @@ void ThrowMovableException ( intptr_t threshold, const T& data ) {
 const int g_IntExceptionData = -375;
 const std::string g_StringExceptionData = "My test string";
 
-// Exception data class implementing minimal requirements of tbb::movable_exception 
+// Exception data class implementing minimal requirements of tbb::movable_exception
 class ExceptionData {
     const ExceptionData& operator = ( const ExceptionData& src );
     explicit ExceptionData ( int n ) : m_Int(n), m_String(g_StringExceptionData) {}
@@ -505,7 +505,7 @@ typedef tbb::movable_exception<int> SolitaryMovableException;
 typedef tbb::movable_exception<ExceptionData> MultipleMovableException;
 
 class LeafTaskWithMovableExceptions : public TaskBase {
-    tbb::task* do_execute () {
+    tbb::task* do_execute () __TBB_override {
         Harness::ConcurrencyTracker ct;
         WaitUntilConcurrencyPeaks();
         if ( g_SolitaryException )
@@ -517,8 +517,8 @@ class LeafTaskWithMovableExceptions : public TaskBase {
 };
 
 void CheckException ( tbb::tbb_exception& e ) {
-    ASSERT (strcmp(e.name(), (g_SolitaryException ? typeid(SolitaryMovableException) 
-                                                   : typeid(MultipleMovableException)).name() ) == 0, 
+    ASSERT (strcmp(e.name(), (g_SolitaryException ? typeid(SolitaryMovableException)
+                                                   : typeid(MultipleMovableException)).name() ) == 0,
                                                    "Unexpected original exception name");
     ASSERT (strcmp(e.what(), "tbb::movable_exception") == 0, "Unexpected original exception info ");
     if ( g_SolitaryException ) {
@@ -543,7 +543,7 @@ void CheckException () {
 }
 
 //! Test for movable_exception behavior, and external exception recording.
-/** Allocates a root task that spawns a bunch of children, one or several of which throw 
+/** Allocates a root task that spawns a bunch of children, one or several of which throw
     a movable exception in a worker or master thread (depending on the global settings).
     The test also checks the correctness of multiple rethrowing of the pending exception. **/
 void TestMovableException () {
@@ -552,7 +552,7 @@ void TestMovableException () {
     bool bUnsupported = false;
     tbb::task_group_context ctx;
     tbb::empty_task *r = new( tbb::task::allocate_root() ) tbb::empty_task;
-    ASSERT (!g_CurStat.Existing() && !g_CurStat.Existed() && !g_CurStat.Executed(), 
+    ASSERT (!g_CurStat.Existing() && !g_CurStat.Existed() && !g_CurStat.Executed(),
             "something wrong with the task accounting");
     r->set_ref_count(NUM_CHILD_TASKS + 1);
     for ( int i = 0; i < NUM_CHILD_TASKS; ++i )
@@ -608,7 +608,7 @@ template<class T>
 class CtxLauncherTask : public tbb::task {
     tbb::task_group_context &m_Ctx;
 
-    tbb::task* execute () {
+    tbb::task* execute () __TBB_override {
         spawn_root_and_wait( *new( allocate_root(m_Ctx) ) T );
         return NULL;
     }
@@ -634,7 +634,7 @@ void TestCancelation () {
 class CtxDestroyerTask : public tbb::task {
     int m_nestingLevel;
 
-    tbb::task* execute () {
+    tbb::task* execute () __TBB_override {
         ASSERT ( m_nestingLevel >= 0 && m_nestingLevel < MaxNestingDepth, "Wrong nesting level. The test is broken" );
         tbb::task_group_context  ctx;
         tbb::task *t = new( allocate_root(ctx) ) tbb::empty_task;
diff --git a/src/test/test_enumerable_thread_specific.cpp b/src/test/test_enumerable_thread_specific.cpp
index 96ab940..55a6f14 100644
--- a/src/test/test_enumerable_thread_specific.cpp
+++ b/src/test/test_enumerable_thread_specific.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #define HARNESS_DEFAULT_MIN_THREADS 0
@@ -94,17 +94,17 @@ public:
 static size_t AlignMask = 0;  // set to cache-line-size - 1
 
 template<typename T>
-T& check_alignment(T& t, const char *aname) { 
-    if( (size_t(&t) & AlignMask) != 0) {
-        REPORT_ONCE("alignment error with %s allocator (%x)\n", aname, (int)size_t(&t) & AlignMask);
+T& check_alignment(T& t, const char *aname) {
+    if( !tbb::internal::is_aligned(&t, AlignMask)) {
+        REPORT_ONCE("alignment error with %s allocator (%x)\n", aname, (int)size_t(&t) & (AlignMask-1));
     }
     return t;
 }
 
 template<typename T>
 const T& check_alignment(const T& t, const char *aname) {
-    if( (size_t(&t) & AlignMask) != 0) {
-        REPORT_ONCE("alignment error with %s allocator (%x)\n", aname, (int)size_t(&t) & AlignMask);
+    if( !tbb::internal::is_aligned(&t, AlignMask)) {
+        REPORT_ONCE("alignment error with %s allocator (%x)\n", aname, (int)size_t(&t) & (AlignMask-1));
     }
     return t;
 }
@@ -127,11 +127,11 @@ public:
     }
 };
 
-// MyThrower field of ThrowingConstructor will throw after a certain number of 
+// MyThrower field of ThrowingConstructor will throw after a certain number of
 // construction calls.  The constructor unwinder wshould unconstruct the instance
 // of check_type<int> that was constructed just before.
 class ThrowingConstructor {
-    check_type<int> m_checktype; 
+    check_type<int> m_checktype;
     Thrower m_throwing_field;
 public:
     int m_cnt;
@@ -549,7 +549,7 @@ void run_parallel_scalar_tests(const char *test_name, const char *allocator_name
                         ASSERT( !sums.empty(), NULL);
 
                         ASSERT(static_sums.empty(), NULL);
-                        tbb::parallel_for( tbb::blocked_range<int>( 0, N, RANGE_MIN ), 
+                        tbb::parallel_for( tbb::blocked_range<int>( 0, N, RANGE_MIN ),
                                 parallel_scalar_body<T,Allocator>( static_sums, allocator_name ) );
                         ASSERT( !static_sums.empty(), NULL);
 
@@ -695,7 +695,8 @@ void run_parallel_vector_tests(const char *test_name, const char *allocator_name
             T minus_one;
             test_helper<T>::set(minus_one, -1);
             // Set ETS to construct "local" vectors pre-occupied with 25 "minus_one"s
-            ets_type vvs(25, minus_one, tbb::tbb_allocator<T>());
+            // Cast 25 to size_type to prevent Intel Compiler SFINAE compilation issues with gcc 5.
+            ets_type vvs( typename container_type::size_type(25), minus_one, tbb::tbb_allocator<T>() );
             ASSERT( vvs.empty(), NULL );
             tbb::parallel_for ( tbb::blocked_range<int> (0, N, RANGE_MIN), parallel_vector_for_body<T,Allocator>( vvs, allocator_name ) );
             ASSERT( !vvs.empty(), NULL );
@@ -720,7 +721,7 @@ void run_parallel_vector_tests(const char *test_name, const char *allocator_name
 template<typename T, template<class> class Allocator>
 void run_cross_type_vector_tests(const char *test_name) {
     tbb::tick_count t0;
-    const char* allocator_name = "default"; 
+    const char* allocator_name = "default";
     typedef std::vector<T, tbb::tbb_allocator<T> > container_type;
 
     for (int p = MinThread; p <= MaxThread; ++p) {
@@ -1080,7 +1081,7 @@ void run_segmented_iterator_tests() {
 }
 
 template<typename T, template<class> class Allocator, typename Init>
-tbb::enumerable_thread_specific<T> MakeETS( Init init ) {
+tbb::enumerable_thread_specific<T,Allocator<T> > MakeETS( Init init ) {
     return tbb::enumerable_thread_specific<T,Allocator<T> >(init);
 }
 #if __TBB_ETS_USE_CPP11
@@ -1102,22 +1103,52 @@ tbb::enumerable_thread_specific<T,Allocator<T> > MakeETS( tbb::internal::stored_
 
 template<typename T, template<class> class Allocator, typename InitSrc, typename InitDst, typename Validator>
 void ets_copy_assign_test( InitSrc init1, InitDst init2, Validator check, const char *allocator_name ) {
-    // Create the source instance
     typedef tbb::enumerable_thread_specific<T, Allocator<T> > ets_type;
-    const ets_type& temporary_binder = MakeETS<T, Allocator>(init1);
-    ets_type& source = const_cast<ets_type&>(temporary_binder);
+
+    // Create the source instance
+    const ets_type& cref_binder = MakeETS<T, Allocator>(init1);
+    ets_type& source = const_cast<ets_type&>(cref_binder);
     check(check_alignment(source.local(),allocator_name));
 
     // Test copy construction
-    source.clear();
+    bool existed = false;
     ets_type copy(source);
+    check(check_alignment(copy.local(existed),allocator_name));
+    ASSERT(existed, "Local data not created by ETS copy constructor");
+    copy.clear();
     check(check_alignment(copy.local(),allocator_name));
 
     // Test assignment
-    source.clear();
+    existed = false;
     ets_type assign(init2);
     assign = source;
+    check(check_alignment(assign.local(existed),allocator_name));
+    ASSERT(existed, "Local data not created by ETS assignment");
+    assign.clear();
     check(check_alignment(assign.local(),allocator_name));
+
+#if __TBB_ETS_USE_CPP11
+    // Create the source instance
+    ets_type&& rvref_binder = MakeETS<T, Allocator>(init1);
+    check(check_alignment(rvref_binder.local(),allocator_name));
+
+    // Test move construction
+    existed = false;
+    ets_type moved(rvref_binder);
+    check(check_alignment(moved.local(existed),allocator_name));
+    ASSERT(existed, "Local data not created by ETS move constructor");
+    moved.clear();
+    check(check_alignment(moved.local(),allocator_name));
+
+    // Test assignment
+    existed = false;
+    ets_type move_assign(init2);
+    move_assign = std::move(moved);
+    check(check_alignment(move_assign.local(existed),allocator_name));
+    ASSERT(existed, "Local data not created by ETS move assignment");
+    move_assign.clear();
+    check(check_alignment(move_assign.local(),allocator_name));
+#endif
 }
 
 template<typename T, int Expected>
@@ -1189,11 +1220,12 @@ struct HasNoDefaultConstructorCombine {
 };
 
 #if __TBB_ETS_USE_CPP11
-// Class that only has a constructor with multiple parameters
-class HasSpecialConstructor : NoCopy {
-    HasSpecialConstructor();
+// Class that only has a constructor with multiple parameters and a move constructor
+class HasSpecialAndMoveCtor : NoCopy {
+    HasSpecialAndMoveCtor();
 public:
-    HasSpecialConstructor( SecretTagType, size_t = size_t(0), const char* = "" ) {}
+    HasSpecialAndMoveCtor( SecretTagType, size_t = size_t(0), const char* = "" ) {}
+    HasSpecialAndMoveCtor( HasSpecialAndMoveCtor&& ) {}
 };
 #endif
 
@@ -1256,25 +1288,35 @@ void TestInstantiation(const char *allocator_name) {
     REMARK("TestInstantiation<%s>\n", allocator_name);
     // Test instantiation is possible when copy constructor is not required.
     tbb::enumerable_thread_specific<NoCopy, Allocator<NoCopy> > ets1;
+    ets1.local();
     ets1.combine_each(EmptyCombineEach<NoCopy>());
 
     // Test instantiation when default constructor is not required, because exemplar is provided.
     HasNoDefaultConstructor x(SecretTag);
     tbb::enumerable_thread_specific<HasNoDefaultConstructor, Allocator<HasNoDefaultConstructor> > ets2(x);
+    ets2.local();
     ets2.combine(HasNoDefaultConstructorCombine());
 
     // Test instantiation when default constructor is not required, because init function is provided.
     HasNoDefaultConstructorFinit f;
     tbb::enumerable_thread_specific<HasNoDefaultConstructor, Allocator<HasNoDefaultConstructor> > ets3(f);
+    ets3.local();
     ets3.combine(HasNoDefaultConstructorCombine());
 
 #if __TBB_ETS_USE_CPP11
     // Test instantiation with multiple arguments
-    tbb::enumerable_thread_specific<HasSpecialConstructor, Allocator<HasSpecialConstructor> > ets4(SecretTag, 0x42, "meaningless");
-    ets4.combine_each(EmptyCombineEach<HasSpecialConstructor>());
+    tbb::enumerable_thread_specific<HasSpecialAndMoveCtor, Allocator<HasSpecialAndMoveCtor> > ets4(SecretTag, 0x42, "meaningless");
+    ets4.local();
+    ets4.combine_each(EmptyCombineEach<HasSpecialAndMoveCtor>());
     // Test instantiation with one argument that should however use the variadic constructor
-    tbb::enumerable_thread_specific<HasSpecialConstructor, Allocator<HasSpecialConstructor> > ets5(SecretTag);
-    ets5.combine_each(EmptyCombineEach<HasSpecialConstructor>());
+    tbb::enumerable_thread_specific<HasSpecialAndMoveCtor, Allocator<HasSpecialAndMoveCtor> > ets5(SecretTag);
+    ets5.local();
+    ets5.combine_each(EmptyCombineEach<HasSpecialAndMoveCtor>());
+    // Test that move operations do not impose extra requirements
+    // Default allocator is used. If it does not match Allocator, there will be elementwise move
+    tbb::enumerable_thread_specific<HasSpecialAndMoveCtor> ets6( std::move(ets4) );
+    ets6.combine_each(EmptyCombineEach<HasSpecialAndMoveCtor>());
+    ets6 = std::move(ets5);
 #endif
 }
 
@@ -1300,17 +1342,18 @@ void TestConstructorWithBigType(const char *allocator_name) {
 
 int TestMain () {
     size_t tbb_allocator_mask;
-    size_t cache_allocator_mask = tbb::internal::NFS_GetLineSize() - 1;
+    size_t cache_allocator_mask = tbb::internal::NFS_GetLineSize();
     REMARK("estimatedCacheLineSize == %d, NFS_GetLineSize() returns %d\n",
                 (int)estimatedCacheLineSize, (int)tbb::internal::NFS_GetLineSize());
+    //TODO: use __TBB_alignof(T) to check for local() results instead of using internal knowledges of ets element padding
     if(tbb::tbb_allocator<int>::allocator_type() == tbb::tbb_allocator<int>::standard) {
         // scalable allocator is not available.
-        tbb_allocator_mask = 0;
+        tbb_allocator_mask = 1;
         REMARK("tbb::tbb_allocator is not available\n");
     }
     else {
         // this value is for large objects, but will be correct for small.
-        tbb_allocator_mask = estimatedCacheLineSize - 1;
+        tbb_allocator_mask = estimatedCacheLineSize;
     }
     AlignMask = cache_allocator_mask;
     TestInstantiation<tbb::cache_aligned_allocator>("tbb::cache_aligned_allocator");
diff --git a/src/test/test_examples_common_utility.cpp b/src/test/test_examples_common_utility.cpp
index d599c7b..1a5ec8f 100644
--- a/src/test/test_examples_common_utility.cpp
+++ b/src/test/test_examples_common_utility.cpp
@@ -1,23 +1,29 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
+#if __TBB_TEST_USE_WSUGGEST_OVERRIDE
+// __TBB_override may not be used in the tested header file
+#pragma GCC diagnostic ignored "-Wsuggest-override"
+#undef __TBB_TEST_USE_WSUGGEST_OVERRIDE
+#endif
+
 #include "harness_defs.h" // for suppress_unused_warning
 #include "harness_assert.h"
 #include "../../examples/common/utility/utility.h"
diff --git a/src/test/test_fast_random.cpp b/src/test/test_fast_random.cpp
index b91b298..664532a 100644
--- a/src/test/test_fast_random.cpp
+++ b/src/test/test_fast_random.cpp
@@ -1,26 +1,26 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /**
-    The test checks that for different ranges of random numbers (from 0 to 
-    [MinThread, MaxThread]) generated with different seeds the probability 
+    The test checks that for different ranges of random numbers (from 0 to
+    [MinThread, MaxThread]) generated with different seeds the probability
     of each number in the range deviates from the ideal random distribution
     by no more than AcceptableDeviation percent.
 **/
@@ -41,7 +41,7 @@ const double AcceptableDeviation = 2.1;
 //! Tolerable probability of failure to achieve tolerable distribution
 const double AcceptableProbabilityOfOutliers = 1e-5;
 //! Coefficient defining the length of random numbers series used to estimate the distribution
-/** Number of random values generated per each range element. I.e. the larger is 
+/** Number of random values generated per each range element. I.e. the larger is
     the range, the longer is the series of random values. **/
 const uintptr_t SeriesBaseLen = 100;
 //! Number of random numbers series to generate
@@ -175,7 +175,7 @@ int TestMain () {
     NumLowOutliers = NumHighOutliers = 0;
     // Parallelism is used in this test only to speed up the long serial checks
     // Essentially it is a loop over random number ranges
-    // Ideally tbb::parallel_for could be used to parallelize the outermost loop 
+    // Ideally tbb::parallel_for could be used to parallelize the outermost loop
     // in CheckDistributionBody, but it is not used to avoid unit test contamination.
     int P = tbb::tbb_thread::hardware_concurrency();
     enum {reproducibilitySeedsToTest=1000};
diff --git a/src/test/test_flow_graph.cpp b/src/test/test_flow_graph.cpp
index a4e230f..1502b0a 100644
--- a/src/test/test_flow_graph.cpp
+++ b/src/test/test_flow_graph.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "harness_graph.h"
@@ -66,13 +66,13 @@ bool functor_flag[F];
 
 struct set_functor {
     int my_i;
-    set_functor( int i ) : my_i(i) {} 
+    set_functor( int i ) : my_i(i) {}
     void operator()() { functor_flag[my_i] = true; }
 };
 
 struct return_functor {
     int my_i;
-    return_functor( int i ) : my_i(i) {} 
+    return_functor( int i ) : my_i(i) {}
     int operator()() { return my_i; }
 };
 
@@ -98,12 +98,12 @@ static void test_run() {
 
         for ( int j = 0; j < F; ++j ) {
             #if __TBB_LAMBDAS_PRESENT
-                h.run( [=]() { lambda_flag[j] = true; } );  
-                h.run( lambda_r, [=]() { return j; } );  
+                h.run( [=]() { lambda_flag[j] = true; } );
+                h.run( lambda_r, [=]() { return j; } );
             #endif
             h.run( set_functor(j) );
             h.run( functor_r, return_functor(j) );
-        } 
+        }
         h.wait_for_all();
         for ( int j = 0; j < F; ++j ) {
         #if __TBB_LAMBDAS_PRESENT
@@ -172,8 +172,8 @@ class AddRemoveBody : NoAssign {
     int nThreads;
     Harness::SpinBarrier &barrier;
 public:
-    AddRemoveBody(int nthr, Harness::SpinBarrier &barrier_, tbb::flow::graph& _g) : 
-        g(_g), nThreads(nthr), barrier(barrier_) 
+    AddRemoveBody(int nthr, Harness::SpinBarrier &barrier_, tbb::flow::graph& _g) :
+        g(_g), nThreads(nthr), barrier(barrier_)
     {}
     void operator()(const int /*threadID*/) const {
         my_int_buffer b(g);
@@ -194,7 +194,7 @@ public:
         for (tbb::flow::graph::iterator it = g.begin(); it != g.end(); ++it) {
             count++;
         }
-        ASSERT(count==nThreads, "error in iterator count"); 
+        ASSERT(count==nThreads, "error in iterator count");
         barrier.wait();  // wait until all threads are done counting
     } // initial node gets deleted
 };
@@ -206,7 +206,7 @@ void test_parallel(int nThreads) {
     NativeParallelFor(nThreads, body);
 }
 
-int TestMain() { 
+int TestMain() {
     if( MinThread<1 ) {
         REPORT("number of threads must be positive\n");
         exit(1);
diff --git a/src/test/test_flow_graph_whitebox.cpp b/src/test/test_flow_graph_whitebox.cpp
index 60eab53..40a5fdd 100644
--- a/src/test/test_flow_graph_whitebox.cpp
+++ b/src/test/test_flow_graph_whitebox.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #define HARNESS_DEFAULT_MIN_THREADS 3
@@ -36,12 +36,11 @@
 #include "harness.h"
 #include <string> // merely prevents LNK2001 error to happen (on ICL+VC9 configurations)
 
-#define TBB_PREVIEW_GRAPH_NODES 1
-
 // need these to get proper external names for private methods in library.
 #include "tbb/spin_mutex.h"
 #include "tbb/spin_rw_mutex.h"
 #include "tbb/task.h"
+#include "tbb/task_arena.h"
 
 #define private public
 #define protected public
@@ -51,18 +50,6 @@
 #include "tbb/task_scheduler_init.h"
 #include "harness_graph.h"
 
-#define BACKOFF_WAIT(ex,msg) \
-{ \
-    int wait_cnt = 0; \
-    tbb::internal::atomic_backoff backoff; \
-    do { \
-        backoff.pause(); \
-        ++wait_cnt; \
-    } \
-    while( (ex) && (wait_cnt < WAIT_MAX)); \
-    ASSERT(wait_cnt < WAIT_MAX, msg); \
-}
-
 template<typename T>
 struct receiverBody {
     tbb::flow::continue_msg operator()(const T &/*in*/) {
@@ -87,10 +74,8 @@ void TestSplitNode() {
     g.wait_for_all();
     g.reset();
     ASSERT(!(tbb::flow::output_port<0>(snode).my_successors.empty()), "after reset(), split_node has no successor.");
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     g.reset(tbb::flow::rf_clear_edges);
     ASSERT(tbb::flow::output_port<0>(snode).my_successors.empty(), "after reset(rf_clear_edges), split_node has a successor.");
-#endif
 }
 
 // buffering nodes cannot have predecessors
@@ -145,7 +130,6 @@ void TestBufferingNode(const char * name) {
     g.wait_for_all();
     g.reset();  // should be in forward direction again
     ASSERT(!bnode.my_successors.empty(), "buffering node has no successor after reset()");
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     REMARK(" remove_edge");
     g.reset(tbb::flow::rf_clear_edges);
     ASSERT(bnode.my_successors.empty(), "buffering node has a successor after reset(rf_clear_edges)");
@@ -158,7 +142,6 @@ void TestBufferingNode(const char * name) {
     g.reset(tbb::flow::rf_clear_edges);
     ASSERT(bnode.my_successors.empty(), "buffering node has no successor after reset()");
     ASSERT(tbb::flow::input_port<0>(jnode).my_predecessors.empty(), "predecessor not reset");
-#endif
     REMARK("  done\n");
     g.wait_for_all();
 }
@@ -219,7 +202,6 @@ void TestContinueNode() {
             ASSERT(cnode.my_predecessor_count == 2, "predecessor_count reset (after reset)");
         }
         else {  // we're going to see if the rf_clear_edges resets things.
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
             g.wait_for_all();
             REMARK(" reset(rf_clear_edges)");
             ASSERT(!cnode.my_successors.empty(), "Empty successors in built graph (before reset)");
@@ -228,7 +210,6 @@ void TestContinueNode() {
             ASSERT(cnode.my_current_count == 0, "state of continue_receiver incorrect after reset(rf_clear_edges)");
             ASSERT(cnode.my_successors.empty(), "buffering node has a successor after reset(rf_clear_edges)");
             ASSERT(cnode.my_predecessor_count == cnode.my_initial_predecessor_count, "predecessor count not reset");
-#endif
         }
     }
 
@@ -282,7 +263,7 @@ void TestFunctionNode() {
     qnode0.try_put(1);
     BACKOFF_WAIT(!serial_fn_state0,"rejecting function_node didn't start");
     qnode0.try_put(2);   // rejecting node should reject, reverse.
-    BACKOFF_WAIT(!fnode0.my_predecessors.empty(), "Missing predecessor ---");
+    BACKOFF_WAIT(fnode0.my_predecessors.empty(), "Missing predecessor ---");
     serial_fn_state0 = 2;   // release function_node body.
     g.wait_for_all();
     REMARK(" reset");
@@ -326,11 +307,9 @@ void TestFunctionNode() {
     serial_fn_state0 = 2;
     g.wait_for_all();
     ASSERT(!fnode0.my_predecessors.empty() && qnode0.my_successors.empty(), "function_node edge not reversed");
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     g.reset(tbb::flow::rf_clear_edges);
     ASSERT(fnode0.my_predecessors.empty() && qnode0.my_successors.empty(), "function_node edge not removed");
     ASSERT(fnode0.my_successors.empty(), "successor to fnode not removed");
-#endif
     REMARK(" done\n");
 }
 
@@ -340,19 +319,18 @@ class tag_func {
 public:
     tag_func(TT multiplier) : my_mult(multiplier) { }
     void operator=( const tag_func& other){my_mult = other.my_mult;}
-    // operator() will return [0 .. Count) 
+    // operator() will return [0 .. Count)
     tbb::flow::tag_value operator()( TT v) {
         tbb::flow::tag_value t = tbb::flow::tag_value(v / my_mult);
         return t;
     }
 };
 
-template<tbb::flow::graph_buffer_policy JNODE_TYPE>
+template<typename JNODE_TYPE>
 void
 TestSimpleSuccessorArc(const char *name) {
     tbb::flow::graph g;
     {
-        //tbb::flow::join_node<tbb::flow::tuple<int>, tbb::flow::queueing> qj(g);
         REMARK("Join<%s> successor test ", name);
         tbb::flow::join_node<tbb::flow::tuple<int>, JNODE_TYPE> qj(g);
         tbb::flow::broadcast_node<tbb::flow::tuple<int> > bnode(g);
@@ -360,10 +338,8 @@ TestSimpleSuccessorArc(const char *name) {
         ASSERT(!qj.my_successors.empty(),"successor missing after linking");
         g.reset();
         ASSERT(!qj.my_successors.empty(),"successor missing after reset()");
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         g.reset(tbb::flow::rf_clear_edges);
         ASSERT(qj.my_successors.empty(), "successors not removed after reset(rf_clear_edges)");
-#endif
     }
 }
 
@@ -383,10 +359,8 @@ TestSimpleSuccessorArc<tbb::flow::tag_matching>(const char *name) {
         ASSERT(!qj.my_successors.empty(),"successor missing after linking");
         g.reset();
         ASSERT(!qj.my_successors.empty(),"successor missing after reset()");
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         g.reset(tbb::flow::rf_clear_edges);
         ASSERT(qj.my_successors.empty(), "successors not removed after reset(rf_clear_edges)");
-#endif
     }
 }
 
@@ -420,7 +394,6 @@ TestJoinNode() {
         g.reset();
         ASSERT((tbb::flow::input_port<1>(rj).my_predecessors.empty()),"reversed port has pred after reset()");
         ASSERT((tbb::flow::input_port<0>(rj).my_predecessors.empty()),"non-reversed port has pred after reset()");
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         // should reset predecessors just as regular reset.
         q1.try_put(3);
         g.wait_for_all();  // quiesce
@@ -431,7 +404,6 @@ TestJoinNode() {
         ASSERT((tbb::flow::input_port<0>(rj).my_predecessors.empty()),"non-reversed port has pred after reset()");
         ASSERT(q0.my_successors.empty(), "edge not removed by reset(rf_clear_edges)");
         ASSERT(q1.my_successors.empty(), "edge not removed by reset(rf_clear_edges)");
-#endif
     }
     REMARK(" done\n");
 }
@@ -477,7 +449,6 @@ TestLimiterNode() {
     g.wait_for_all();
     ASSERT(outq.try_get(out_int) && out_int == 3, "limiter_node didn't pass third value");
 
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     REMARK(" rf_clear_edges");
     // currently the limiter_node will not pass another message
     g.reset(tbb::flow::rf_clear_edges);
@@ -501,7 +472,6 @@ TestLimiterNode() {
     bn.try_put(tbb::flow::continue_msg());
     g.wait_for_all();
     ASSERT(!outq.try_get(out_int),"second output incorrectly passed (rf_clear_edges)");
-#endif
     REMARK(" done\n");
 }
 
@@ -514,13 +484,13 @@ struct mf_body {
             *_flag = 1;
             BACKOFF_WAIT(*_flag == 1, "multifunction_node not released");
         }
- 
+
         if(in & 0x1) tbb::flow::get<1>(outports).try_put(in);
         else         tbb::flow::get<0>(outports).try_put(in);
     }
 };
 
-template<tbb::flow::graph_buffer_policy P, typename T>
+template<typename P, typename T>
 struct test_reversal;
 template<typename T>
 struct test_reversal<tbb::flow::queueing, T> {
@@ -535,7 +505,7 @@ struct test_reversal<tbb::flow::rejecting, T> {
     bool operator()( T &node) { return !node.my_predecessors.empty(); }
 };
 
-template<tbb::flow::graph_buffer_policy P>
+template<typename P>
 void
 TestMultifunctionNode() {
     typedef tbb::flow::multifunction_node<int, tbb::flow::tuple<int, int>, P> multinode_type;
@@ -551,13 +521,7 @@ TestMultifunctionNode() {
     tbb::flow::make_edge(tbb::flow::output_port<0>(mf), qeven_out);
     tbb::flow::make_edge(tbb::flow::output_port<1>(mf), qodd_out);
     g.wait_for_all();
-    for( int ii = 0; ii <
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-            2
-#else
-            1
-#endif
-            ; ++ii) {
+    for( int ii = 0; ii < 2 ; ++ii) {
         serial_fn_state0 = 0;
         if(ii == 0) REMARK(" reset preds"); else REMARK(" 2nd");
         qin.try_put(0);
@@ -571,7 +535,6 @@ TestMultifunctionNode() {
         serial_fn_state0 = 2;
         g.wait_for_all();
         ASSERT(my_test(mf), "fail cancel group test");
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         if( ii == 1) {
             REMARK(" rf_clear_edges");
             g.reset(tbb::flow::rf_clear_edges);
@@ -579,7 +542,6 @@ TestMultifunctionNode() {
             ASSERT(tbb::flow::output_port<1>(mf).my_successors.empty(), "output_port<1> not reset (rf_clear_edges)");
         }
         else
-#endif
         {
             g.reset();
         }
@@ -603,10 +565,8 @@ TestIndexerNode() {
     ASSERT(!inode.my_successors.empty(), "successor of indexer_node missing");
     g.reset();
     ASSERT(!inode.my_successors.empty(), "successor of indexer_node missing after reset");
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     g.reset(tbb::flow::rf_clear_edges);
     ASSERT(inode.my_successors.empty(), "successor of indexer_node not removed by reset(rf_clear_edges)");
-#endif
     REMARK(" done\n");
 }
 
@@ -622,10 +582,8 @@ TestScalarNode(const char *name) {
     ASSERT(!on.my_successors.empty(), "edge not added");
     g.reset();
     ASSERT(!on.my_successors.empty(), "edge improperly removed");
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     g.reset(tbb::flow::rf_clear_edges);
     ASSERT(on.my_successors.empty(), "edge not removed by reset(rf_clear_edges)");
-#endif
     REMARK(" done\n");
 }
 
@@ -668,12 +626,10 @@ TestSequencerNode() {
     g.wait_for_all();
     g.reset();  // should be in forward direction again
     ASSERT(!bnode.my_successors.empty(), "buffering node has no successor after reset()");
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     REMARK(" remove_edge");
     g.reset(tbb::flow::rf_clear_edges);  // should be in forward direction again
     ASSERT(bnode.my_successors.empty(), "buffering node has a successor after reset(rf_clear_edges)");
     ASSERT(fnode.my_predecessors.empty(), "buffering node reversed after reset(rf_clear_edges)");
-#endif
     REMARK("  done\n");
     g.wait_for_all();
 }
@@ -697,7 +653,7 @@ TestSourceNode() {
     tbb::flow::queue_node<int> qin(g);
     tbb::flow::join_node<tbb::flow::tuple<int,int>, tbb::flow::reserving> jn(g);
     tbb::flow::queue_node<tbb::flow::tuple<int,int> > qout(g);
-    
+
     REMARK(" make_edges");
     tbb::flow::make_edge(sn, tbb::flow::input_port<0>(jn));
     tbb::flow::make_edge(qin, tbb::flow::input_port<1>(jn));
@@ -706,7 +662,6 @@ TestSourceNode() {
     g.wait_for_all();
     g.reset();
     ASSERT(!sn.my_successors.empty(), "source node has no successor after reset");
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     g.wait_for_all();
     g.reset(tbb::flow::rf_clear_edges);
     ASSERT(sn.my_successors.empty(), "source node has successor after reset(rf_clear_edges)");
@@ -714,7 +669,6 @@ TestSourceNode() {
     tbb::flow::make_edge(qin, tbb::flow::input_port<1>(jn));
     tbb::flow::make_edge(jn,qout);
     g.wait_for_all();
-#endif
     REMARK(" activate");
     sn.activate();  // will forward to the fnode
     REMARK(" wait1");
@@ -732,7 +686,7 @@ int TestMain() {
 
     if(MinThread < 3) MinThread = 3;
     tbb::task_scheduler_init init(MinThread);  // tests presume at least three threads
-    
+
     TestBufferingNode< tbb::flow::buffer_node<int> >("buffer_node");
     TestBufferingNode< tbb::flow::priority_queue_node<int> >("priority_queue_node");
     TestBufferingNode< tbb::flow::queue_node<int> >("queue_node");
diff --git a/src/test/test_fp.cpp b/src/test/test_fp.cpp
index 527e4f1..18ee0fc 100644
--- a/src/test/test_fp.cpp
+++ b/src/test/test_fp.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /** This test checks the automatic propagation of master thread FPU settings
@@ -186,7 +186,7 @@ class TestContextFpuEnvTask : public tbb::task {
 #endif
 public:
     TestContextFpuEnvTask( int _arenaNum, int _mode, int _depth = 0 ) : arenaNum(_arenaNum), mode(_mode), depth(_depth) {}
-    tbb::task* execute() {
+    tbb::task* execute() __TBB_override {
         AssertMode( mode );
         if ( depth < MAX_DEPTH ) {
             // Test default context.
@@ -248,13 +248,13 @@ void TestContextFpuEnvBody::operator()( const tbb::blocked_range<int> &r ) const
     int end = r.end();
     if ( end-1 == numModes ) {
         // For a default context our mode should be inherited.
-        tbb::task::spawn_root_and_wait( 
+        tbb::task::spawn_root_and_wait(
             *new( tbb::task::allocate_root() ) TestContextFpuEnvTask( arenaNum, mode, depth ) );
         AssertMode( newMode );
         end--;
     }
     for ( int i=r.begin(); i<end; ++i ) {
-        tbb::task::spawn_root_and_wait( 
+        tbb::task::spawn_root_and_wait(
             *new( tbb::task::allocate_root(*contexts[i]) ) TestContextFpuEnvTask( arenaNum, i, depth ) );
         AssertMode( newMode );
     }
@@ -346,7 +346,7 @@ tbb::task_group_context glbIsolatedCtx( tbb::task_group_context::isolated );
 int glbIsolatedCtxMode = -1;
 
 struct TestGlobalIsolatedContextTask : public tbb::task {
-    tbb::task* execute() {
+    tbb::task* execute() __TBB_override {
         AssertFPMode( glbIsolatedCtxMode );
         return NULL;
     }
diff --git a/src/test/test_function_node.cpp b/src/test/test_function_node.cpp
index ab19f9e..a2ecf46 100644
--- a/src/test/test_function_node.cpp
+++ b/src/test/test_function_node.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "harness_graph.h"
@@ -53,12 +53,12 @@ template<typename IO>
 struct pass_through {
     IO operator()(const IO& i) { return i; }
 };
-     
+
 template< typename InputType, typename OutputType, typename Body >
 void buffered_levels( size_t concurrency, Body body ) {
 
    // Do for lc = 1 to concurrency level
-   for ( size_t lc = 1; lc <= concurrency; ++lc ) { 
+   for ( size_t lc = 1; lc <= concurrency; ++lc ) {
    tbb::flow::graph g;
 
    // Set the execute_counter back to zero in the harness
@@ -71,7 +71,7 @@ void buffered_levels( size_t concurrency, Body body ) {
    // Create the function_node with the appropriate concurrency level, and use default buffering
    tbb::flow::function_node< InputType, OutputType > exe_node( g, lc, body );
    tbb::flow::function_node<InputType, InputType> pass_thru( g, tbb::flow::unlimited, pass_through<InputType>());
-   
+
    // Create a vector of identical exe_nodes and pass_thrus
    std::vector< tbb::flow::function_node< InputType, OutputType > > exe_vec(2, exe_node);
    std::vector< tbb::flow::function_node< InputType, InputType > > pass_thru_vec(2, pass_thru);
@@ -102,17 +102,17 @@ void buffered_levels( size_t concurrency, Body body ) {
 
             // Initialize the receivers so they know how many senders and messages to check for
             for (size_t r = 0; r < num_receivers; ++r ) {
-                 receivers[r].initialize_map( N, num_senders ); 
+                 receivers[r].initialize_map( N, num_senders );
             }
 
             // Do the test
             NativeParallelFor( (int)num_senders, parallel_put_until_limit<InputType>(senders) );
             g.wait_for_all();
 
-            // confirm that each sender was requested from N times 
+            // confirm that each sender was requested from N times
             for (size_t s = 0; s < num_senders; ++s ) {
                 size_t n = senders[s].my_received;
-                ASSERT( n == N, NULL ); 
+                ASSERT( n == N, NULL );
                 ASSERT( senders[s].my_receiver == &pass_thru_vec[node_idx], NULL );
             }
             // validate the receivers
@@ -149,7 +149,7 @@ struct inc_functor {
     int operator()( int i ) {
        ++global_execute_count;
        ++local_execute_count;
-       return i; 
+       return i;
     }
 
 };
@@ -158,13 +158,13 @@ template< typename InputType, typename OutputType >
 void buffered_levels_with_copy( size_t concurrency ) {
 
     // Do for lc = 1 to concurrency level
-    for ( size_t lc = 1; lc <= concurrency; ++lc ) { 
+    for ( size_t lc = 1; lc <= concurrency; ++lc ) {
         tbb::flow::graph g;
 
         inc_functor cf;
         cf.local_execute_count = Offset;
         global_execute_count = Offset;
-       
+
         tbb::flow::function_node< InputType, OutputType > exe_node( g, lc, cf );
 
         for (size_t num_receivers = 1; num_receivers <= MAX_NODES; ++num_receivers ) {
@@ -182,7 +182,7 @@ void buffered_levels_with_copy( size_t concurrency ) {
                 }
 
                 for (size_t r = 0; r < num_receivers; ++r ) {
-                    receivers[r].initialize_map( N, num_senders ); 
+                    receivers[r].initialize_map( N, num_senders );
                 }
 
                 NativeParallelFor( (int)num_senders, parallel_put_until_limit<InputType>(senders) );
@@ -190,7 +190,7 @@ void buffered_levels_with_copy( size_t concurrency ) {
 
                 for (size_t s = 0; s < num_senders; ++s ) {
                     size_t n = senders[s].my_received;
-                    ASSERT( n == N, NULL ); 
+                    ASSERT( n == N, NULL );
                     ASSERT( senders[s].my_receiver == &exe_node, NULL );
                 }
                 for (size_t r = 0; r < num_receivers; ++r ) {
@@ -211,16 +211,14 @@ void buffered_levels_with_copy( size_t concurrency ) {
 
         // validate that the local body matches the global execute_count and both are correct
         inc_functor body_copy = tbb::flow::copy_body<inc_functor>( exe_node );
-        const size_t expected_count = N/2 * MAX_NODES * MAX_NODES * ( MAX_NODES + 1 ) + MAX_NODES + Offset; 
+        const size_t expected_count = N/2 * MAX_NODES * MAX_NODES * ( MAX_NODES + 1 ) + MAX_NODES + Offset;
         size_t global_count = global_execute_count;
         size_t inc_count = body_copy.local_execute_count;
-        ASSERT( global_count == expected_count && global_count == inc_count, NULL ); 
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
+        ASSERT( global_count == expected_count && global_count == inc_count, NULL );
         g.reset(tbb::flow::rf_reset_bodies);
         body_copy = tbb::flow::copy_body<inc_functor>( exe_node );
         inc_count = body_copy.local_execute_count;
-        ASSERT( Offset == inc_count, "reset(rf_reset_bodies) did not reset functor" ); 
-#endif
+        ASSERT( Offset == inc_count, "reset(rf_reset_bodies) did not reset functor" );
     }
 }
 
@@ -238,16 +236,16 @@ void run_buffered_levels( int c ) {
 //! Performs test on executable nodes with limited concurrency
 /** Theses tests check:
     1) that the nodes will accepts puts up to the concurrency limit,
-    2) the nodes do not exceed the concurrency limit even when run with more threads (this is checked in the harness_graph_executor), 
+    2) the nodes do not exceed the concurrency limit even when run with more threads (this is checked in the harness_graph_executor),
     3) the nodes will receive puts from multiple successors simultaneously,
     and 4) the nodes will send to multiple predecessors.
     There is no checking of the contents of the messages for corruption.
 */
-     
+
 template< typename InputType, typename OutputType, typename Body >
 void concurrency_levels( size_t concurrency, Body body ) {
 
-   for ( size_t lc = 1; lc <= concurrency; ++lc ) { 
+   for ( size_t lc = 1; lc <= concurrency; ++lc ) {
    tbb::flow::graph g;
 
    // Set the execute_counter back to zero in the harness
@@ -307,10 +305,10 @@ void concurrency_levels( size_t concurrency, Body body ) {
             // wait for graph to settle down
             g.wait_for_all();
 
-            // confirm that each sender was requested from N times 
+            // confirm that each sender was requested from N times
             for (size_t s = 0; s < num_senders; ++s ) {
                 size_t n = senders[s].my_received;
-                ASSERT( n == N, NULL ); 
+                ASSERT( n == N, NULL );
                 ASSERT( senders[s].my_receiver == &exe_node, NULL );
             }
             // confirm that each receivers got N * num_senders + the initial lc puts
@@ -345,7 +343,7 @@ void run_concurrency_levels( int c ) {
 }
 
 
-struct empty_no_assign { 
+struct empty_no_assign {
    empty_no_assign() {}
    empty_no_assign( int ) {}
    operator int() { return 0; }
@@ -392,16 +390,20 @@ void unlimited_concurrency( Body body ) {
             }
 
             NativeParallelFor( p, parallel_puts<InputType>(exe_node) );
-            g.wait_for_all(); 
+            g.wait_for_all();
 
             // 2) the nodes will receive puts from multiple predecessors simultaneously,
             size_t ec = harness_graph_executor<InputType, OutputType>::execute_count;
-            ASSERT( (int)ec == p*N, NULL ); 
+            ASSERT( (int)ec == p*N, NULL );
             for (size_t r = 0; r < num_receivers; ++r ) {
                 size_t c = receivers[r].my_count;
                 // 3) the nodes will send to multiple successors.
                 ASSERT( (int)c == p*N, NULL );
             }
+            for (size_t r = 0; r < num_receivers; ++r ) {
+                tbb::flow::remove_edge( exe_node, receivers[r] );
+            }
+            delete [] receivers;
         }
     }
 }
@@ -430,10 +432,10 @@ void test_function_node_with_continue_msg_as_input() {
 
     tbb::flow::function_node<tbb::flow::continue_msg, int, tbb::flow::rejecting> FN1( g, tbb::flow::serial, continue_msg_to_int(42));
     tbb::flow::function_node<tbb::flow::continue_msg, int, tbb::flow::rejecting> FN2( g, tbb::flow::serial, continue_msg_to_int(43));
-    
+
     tbb::flow::make_edge( Start, FN1 );
     tbb::flow::make_edge( Start, FN2 );
-    
+
     Start.try_put( tbb::flow::continue_msg() );
     g.wait_for_all();
 }
@@ -460,7 +462,7 @@ struct add_to_counter {
     int operator()(int i){*counter+=1; return i + 1;}
 };
 
-template<tbb::flow::graph_buffer_policy FTYPE>
+template<typename FTYPE>
 void test_extract() {
     int my_count = 0;
     int cm;
@@ -478,13 +480,13 @@ void test_extract() {
         ASSERT(b1.predecessor_count() == 0 && b1.successor_count() == 1, "b1 has incorrect counts");
         ASSERT(f0.predecessor_count() == 2 && f0.successor_count() == 1, "f0 has incorrect counts");
         ASSERT(q0.predecessor_count() == 1 && q0.successor_count() == 0, "q0 has incorrect counts");
-    
+
         /* b0         */
         /*   \        */
         /*    f0 - q0 */
         /*   /        */
         /* b1         */
-    
+
         b0.try_put(1);
         g.wait_for_all();
         ASSERT(my_count == 1, "function_node didn't fire");
@@ -493,15 +495,15 @@ void test_extract() {
         g.wait_for_all();
         ASSERT(my_count == 2, "function_node didn't fire");
         ASSERT(q0.try_get(cm), "function_node didn't forward");
-    
+
         b0.extract();
-    
+
         /* b0         */
         /*            */
         /*    f0 - q0 */
         /*   /        */
         /* b1         */
-    
+
         ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 0, "b0 has incorrect counts");
         ASSERT(b1.predecessor_count() == 0 && b1.successor_count() == 1, "b1 has incorrect counts");
         ASSERT(f0.predecessor_count() == 1 && f0.successor_count() == 1, "f0 has incorrect counts");
@@ -514,15 +516,15 @@ void test_extract() {
         g.wait_for_all();
         ASSERT(my_count == 3, "function_node didn't fire though it has only one predecessor");
         ASSERT(q0.try_get(cm), "function_node didn't forward second time");
-    
+
         f0.extract();
-    
+
         /* b0         */
         /*            */
         /*    f0   q0 */
         /*            */
         /* b1         */
-    
+
         ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 0, "b0 has incorrect counts");
         ASSERT(b1.predecessor_count() == 0 && b1.successor_count() == 0, "b1 has incorrect counts");
         ASSERT(f0.predecessor_count() == 0 && f0.successor_count() == 0, "f0 has incorrect counts");
@@ -535,24 +537,24 @@ void test_extract() {
         ASSERT(my_count == 3, "function_node didn't fire though it has only one predecessor");
         ASSERT(!q0.try_get(cm), "function_node forwarded though it shouldn't");
         make_edge(b0, f0);
-    
+
         /* b0         */
         /*   \        */
         /*    f0   q0 */
         /*            */
         /* b1         */
-    
+
         ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 1, "b0 has incorrect counts");
         ASSERT(b1.predecessor_count() == 0 && b1.successor_count() == 0, "b1 has incorrect counts");
         ASSERT(f0.predecessor_count() == 1 && f0.successor_count() == 0, "f0 has incorrect counts");
         ASSERT(q0.predecessor_count() == 0 && q0.successor_count() == 0, "q0 has incorrect counts");
-    
+
         b0.try_put(int());
         g.wait_for_all();
-    
+
         ASSERT(my_count == 4, "function_node didn't fire though it has only one predecessor");
         ASSERT(!q0.try_get(cm), "function_node forwarded though it shouldn't");
-    
+
         tbb::flow::make_edge(b1, f0);
         tbb::flow::make_edge(f0, q0);
         my_count = 0;
@@ -560,7 +562,7 @@ void test_extract() {
 }
 #endif
 
-int TestMain() { 
+int TestMain() {
     if( MinThread<1 ) {
         REPORT("number of threads must be positive\n");
         exit(1);
diff --git a/src/test/test_gfx_factory.cpp b/src/test/test_gfx_factory.cpp
new file mode 100644
index 0000000..e50fb96
--- /dev/null
+++ b/src/test/test_gfx_factory.cpp
@@ -0,0 +1,309 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+#define TBB_PREVIEW_FLOW_GRAPH_NODES 1
+#define TBB_PREVIEW_FLOW_GRAPH_FEATURES 1
+
+#include "tbb/tbb_config.h"
+
+#if __TBB_PREVIEW_GFX_FACTORY && __TBB_PREVIEW_STREAMING_NODE
+
+#if _MSC_VER
+#pragma warning (disable: 4503) // Suppress "decorated name length exceeded, name was truncated" warning
+#endif
+
+#include "tbb/flow_graph.h"
+#include "tbb/gfx_factory.h"
+
+#include <cilk/cilk.h>
+
+#include "harness.h"
+#include "harness_assert.h"
+
+using namespace tbb::flow;
+
+//---------------------------------------------------------------------------------------------------------------------------------
+// Helpers
+//---------------------------------------------------------------------------------------------------------------------------------
+
+typedef tuple< gfx_buffer<int>, size_t > kernel_args;
+typedef streaming_node< kernel_args, queueing, gfx_factory > gfx_node;
+
+template <typename T>
+void init_random_buffer(gfx_buffer<T>& buf) {
+    Harness::FastRandom rnd(42);
+    std::generate(buf.begin(), buf.end(), [&rnd]() { return rnd.get(); });
+}
+
+template <typename T>
+void copy_buffer_to_vector(gfx_buffer<T>& buf, std::vector<T>& vect) {
+    std::copy(buf.begin(), buf.end(), std::back_inserter(vect));
+}
+
+//---------------------------------------------------------------------------------------------------------------------------------
+
+// GFX functions to offload
+static __declspec(target(gfx_kernel))
+void sq_vec(int *v, size_t n) {
+    cilk_for(size_t i = 0; i < n; ++i) {
+        v[i] = v[i] * v[i];
+    }
+}
+
+// Reference function
+void sq_vec_ref(std::vector<int>& v) {
+    for (size_t i = 0; i < v.size(); ++i) {
+        v[i] = v[i] * v[i];
+    }
+}
+
+//---------------------------------------------------------------------------------------------------------------------------------
+
+void TestDynamicKernelArgs_finalize() {
+    REMARK("    TestDynamicKernelArgs_finalize: ");
+
+    // Initialize input data
+    const size_t array_size = 1000;
+    gfx_buffer<int> buffer(array_size);
+
+    // Generate random buffer values
+    init_random_buffer(buffer);
+
+    // Copy buffer to vector for the next validation
+    std::vector<int> check_vec;
+    copy_buffer_to_vector(buffer, check_vec);
+
+    // Obtain reference result
+    sq_vec_ref(check_vec);
+
+    graph g;
+    gfx_factory factory(g);
+
+    gfx_node streaming_n(g, sq_vec, gfx_factory::dummy_device_selector(), factory);
+
+    streaming_n.set_args(port_ref<0, 1>);
+    input_port<0>(streaming_n).try_put(buffer);
+    input_port<1>(streaming_n).try_put(array_size);
+
+    g.wait_for_all();
+
+    ASSERT((buffer.size() == check_vec.size()), "Validation has failed");
+    ASSERT((std::equal(buffer.begin(), buffer.end(), check_vec.begin())), "Validation has failed");
+    REMARK("done\n");
+}
+
+void TestConstantKernelArgs_finalize() {
+    REMARK("    TestConstantKernelArgs_finalize: ");
+
+    // Initialize input data
+    const size_t array_size = 1000;
+    gfx_buffer<int> buffer(array_size);
+
+    // Generate random buffer values
+    init_random_buffer(buffer);
+
+    // Copy buffer to vector for the next validation
+    std::vector<int> check_vec;
+    copy_buffer_to_vector(buffer, check_vec);
+
+    // Obtain reference result
+    sq_vec_ref(check_vec);
+
+    graph g;
+    gfx_factory factory(g);
+
+    streaming_node< tuple< gfx_buffer<int> >, queueing, gfx_factory > streaming_n(g, sq_vec, gfx_factory::dummy_device_selector(), factory);
+
+    streaming_n.set_args(port_ref<0>(), array_size);
+    input_port<0>(streaming_n).try_put(buffer);
+
+    g.wait_for_all();
+
+    ASSERT((buffer.size() == check_vec.size()), "Validation has failed");
+    ASSERT((std::equal(buffer.begin(), buffer.end(), check_vec.begin())), "Validation has failed");
+
+    REMARK("done\n");
+}
+
+void TestGfxStreamingFactory_finalize() {
+    REMARK("TestGfxStreamingFactory_finalize: ");
+    TestDynamicKernelArgs_finalize();
+    TestConstantKernelArgs_finalize();
+    REMARK("done\n");
+}
+
+//---------------------------------------------------------------------------------------------------------------------------------
+
+void TestDynamicKernelArgs_send_kernel() {
+    REMARK("    TestDynamicKernelArgs_send_kernel: ");
+
+    // Initialize input data
+    const size_t array_size = 1000;
+    gfx_buffer<int> buffer(array_size);
+
+    // Generate random buffer values
+    init_random_buffer(buffer);
+
+    // Copy buffer to vector for the next validation
+    std::vector<int> check_vec;
+    copy_buffer_to_vector(buffer, check_vec);
+
+    // Obtain reference result
+    sq_vec_ref(check_vec);
+
+    graph g;
+    gfx_factory factory(g);
+
+    gfx_node streaming_n(g, sq_vec, gfx_factory::dummy_device_selector(), factory);
+
+    join_node< kernel_args > join_n(g);
+    function_node< kernel_args > function_n(g, unlimited, [&check_vec](const kernel_args& result) {
+        gfx_buffer<int> buffer = get<0>(result);
+
+        ASSERT((buffer.size() == check_vec.size()), "Validation has failed");
+        ASSERT((std::equal(buffer.begin(), buffer.end(), check_vec.begin())), "Validation has failed");
+    });
+
+    make_edge(output_port<0>(streaming_n), input_port<0>(join_n));
+    make_edge(output_port<1>(streaming_n), input_port<1>(join_n));
+    make_edge(join_n, function_n);
+
+    streaming_n.set_args(port_ref<0, 1>);
+    input_port<0>(streaming_n).try_put(buffer);
+    input_port<1>(streaming_n).try_put(array_size);
+
+    g.wait_for_all();
+
+    REMARK("done\n");
+}
+
+void TestConstantKernelArgs_send_kernel() {
+    REMARK("    TestConstantKernelArgs_send_kernel: ");
+
+    // Initialize input data
+    const size_t array_size = 1000;
+    gfx_buffer<int> buffer(array_size);
+
+    // Generate random buffer values
+    init_random_buffer(buffer);
+
+    // Copy buffer to vector for the next validation
+    std::vector<int> check_vec;
+    copy_buffer_to_vector(buffer, check_vec);
+
+    // Obtain reference result
+    sq_vec_ref(check_vec);
+
+    graph g;
+    gfx_factory factory(g);
+
+    streaming_node< tuple< gfx_buffer<int> >, queueing, gfx_factory > streaming_n(g, sq_vec, gfx_factory::dummy_device_selector(), factory);
+
+    join_node< tuple< gfx_buffer<int> > > join_n(g);
+    function_node< tuple< gfx_buffer<int> > > function_n(g, unlimited, [&check_vec](const tuple< gfx_buffer<int> >& result) {
+        gfx_buffer<int> buffer = get<0>(result);
+
+        ASSERT((buffer.size() == check_vec.size()), "Validation has failed");
+        ASSERT((std::equal(buffer.begin(), buffer.end(), check_vec.begin())), "Validation has failed");
+    });
+
+    make_edge(output_port<0>(streaming_n), input_port<0>(join_n));
+    make_edge(join_n, function_n);
+
+    streaming_n.set_args(port_ref<0>(), array_size);
+    input_port<0>(streaming_n).try_put(buffer);
+
+    g.wait_for_all();
+
+    REMARK("done\n");
+}
+
+void TestGfxStreamingFactory_send_kernel() {
+    REMARK("TestGfxStreamingFactory_send_kernel:\n");
+    TestDynamicKernelArgs_send_kernel();
+    TestConstantKernelArgs_send_kernel();
+    REMARK("done\n");
+}
+
+//---------------------------------------------------------------------------------------------------------------------------------
+
+void ConcurrencyTest() {
+    REMARK("ConcurrencyTest: ");
+
+    // Initialize input data
+    const size_t array_size = 1000;
+    gfx_buffer<int> buffer(array_size);
+
+    // Generate random buffer values
+    init_random_buffer(buffer);
+
+    // Copy buffer to vector for the next validation
+    std::vector<int> check_vec;
+    copy_buffer_to_vector(buffer, check_vec);
+
+    // Obtain reference result
+    sq_vec_ref(check_vec);
+
+    graph g;
+    gfx_factory factory(g);
+
+    streaming_node< tuple< gfx_buffer<int> >, queueing, gfx_factory > streaming_n(g, sq_vec, gfx_factory::dummy_device_selector(), factory);
+
+    join_node< tuple< gfx_buffer<int> > > join_n(g);
+    function_node< tuple< gfx_buffer<int> > > function_n(g, unlimited, [&check_vec](const tuple< gfx_buffer<int> >& result) {
+        gfx_buffer<int> buffer = get<0>(result);
+
+        ASSERT((buffer.size() == check_vec.size()), "Validation has failed");
+        ASSERT((std::equal(buffer.begin(), buffer.end(), check_vec.begin())), "Validation has failed");
+    });
+
+    make_edge(output_port<0>(streaming_n), input_port<0>(join_n));
+    make_edge(join_n, function_n);
+
+    streaming_n.set_args(port_ref<0>(), array_size);
+
+    for (int i = 0; i < 100; i++) {
+        gfx_buffer<int> input(array_size);
+
+        for (int i = 0; i < buffer.size(); i++) {
+            input[i] = buffer[i];
+        }
+
+        input_port<0>(streaming_n).try_put(input);
+    }
+
+    g.wait_for_all();
+
+    REMARK("done\n");
+}
+
+//---------------------------------------------------------------------------------------------------------------------------------
+
+int TestMain() {
+    TestGfxStreamingFactory_finalize();
+    TestGfxStreamingFactory_send_kernel();
+    ConcurrencyTest();
+    return Harness::Done;
+}
+
+#else
+#define HARNESS_SKIP_TEST 1
+#include "harness.h"
+#endif
diff --git a/src/test/test_global_control.cpp b/src/test/test_global_control.cpp
index 0677e32..4da9b1b 100644
--- a/src/test/test_global_control.cpp
+++ b/src/test/test_global_control.cpp
@@ -1,27 +1,29 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #define TBB_PREVIEW_WAITING_FOR_WORKERS 1
 #define TBB_PREVIEW_GLOBAL_CONTROL 1
 #include "tbb/global_control.h"
 #include "harness.h"
+#define TBB_PREVIEW_LOCAL_OBSERVER 1
+#include "tbb/task_scheduler_observer.h"
 
 const size_t MB = 1024*1024;
 const double BARRIER_TIMEOUT = 10.;
@@ -40,13 +42,9 @@ void TestStackSizeSimpleControl()
     }
 }
 
-#include "harness_concurrency_checker.h"
-#include "tbb/parallel_for.h"
+#include "harness_concurrency_tracker.h"
 #include "tbb/task_scheduler_init.h"
-#include "tbb/blocked_range.h"
-#include "tbb/combinable.h"
 #include <limits.h>   // for UINT_MAX
-#include <functional> // for std::plus
 
 struct StackSizeRun: NoAssign {
     int                   num_threads;
@@ -71,55 +69,31 @@ void TestStackSizeThreadsControl()
     NativeParallelFor( threads, StackSizeRun(threads, &barr1, &barr2) );
 }
 
-class CheckWorkersNum {
-    static tbb::atomic<Harness::SpinBarrier*> barrier;
-    // count unique worker threads
-    static tbb::combinable<size_t>            uniqThreads;
-public:
-    CheckWorkersNum(Harness::SpinBarrier *barr) {
-        barrier = barr;
-    }
-    void operator()(const tbb::blocked_range<int>&) const {
-        uniqThreads.local() = 1;
-        if (barrier) {
-            barrier->timed_wait(BARRIER_TIMEOUT);
-            Harness::Sleep(10);
-            barrier = NULL;
-        }
-    }
-    static void check(size_t expected) {
-        size_t seen = uniqThreads.combine(std::plus<size_t>());
-        ASSERT(seen == expected, NULL);
-    }
-    static void clear() { uniqThreads.clear(); }
-    static const size_t LOOP_ITERS = 10*1000;
-};
-
-tbb::atomic<Harness::SpinBarrier*> CheckWorkersNum::barrier;
-tbb::combinable<size_t>  CheckWorkersNum::uniqThreads;
-
 void RunWorkersLimited(int tsi_max_threads, size_t parallelism, bool wait)
 {
     tbb::global_control s(tbb::global_control::max_allowed_parallelism, parallelism);
     // try both configuration with already sleeping workers and with not yet sleeping
     if (wait)
         Harness::Sleep(100);
-    // current implementation can't have effective active value below 2
-    const unsigned active_parallelism = max(2U, (unsigned)parallelism);
-    const unsigned expected_threads = tsi_max_threads>0?
-        min( (unsigned)tsi_max_threads, active_parallelism )
-        : ( tbb::tbb_thread::hardware_concurrency()==1? 1 : active_parallelism );
-    Harness::SpinBarrier barr(expected_threads);
-
-    CheckWorkersNum::clear();
-    tbb::parallel_for(tbb::blocked_range<int>(0, CheckWorkersNum::LOOP_ITERS, 1),
-                      CheckWorkersNum(&barr), tbb::simple_partitioner());
-    CheckWorkersNum::check(expected_threads);
+    const size_t expected_threads = tsi_max_threads>0?
+        min( (unsigned)tsi_max_threads, parallelism )
+        : ( tbb::tbb_thread::hardware_concurrency()==1? 1 : parallelism );
+    Harness::ExactConcurrencyLevel::check(expected_threads);
 }
 
+class blocking_task_scheduler_init {
+    tbb::task_scheduler_init init;
+public:
+    blocking_task_scheduler_init(int num_threads = tbb::task_scheduler_init::automatic) : init(num_threads) {}
+    ~blocking_task_scheduler_init() {
+        bool ok = init.blocking_terminate(std::nothrow);
+        ASSERT(ok, "blocking_terminate has failed");
+    }
+};
+
 void TSI_and_RunWorkers(int tsi_max_threads, size_t parallelism, size_t max_value)
 {
-    tbb::task_scheduler_init tsi(tsi_max_threads, 0, /*blocking=*/true);
+    blocking_task_scheduler_init tsi(tsi_max_threads);
     size_t active = tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism);
     ASSERT(active == max(2U, max_value), "active_value must not be changed by task_scheduler_init");
     RunWorkersLimited(tsi_max_threads, parallelism, /*wait=*/false);
@@ -161,7 +135,7 @@ void TestWorkers(size_t curr_par)
 void TestWorkersConstraints() {
     const size_t max_parallelism =
         tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism);
-    tbb::task_scheduler_init tsi(tbb::task_scheduler_init::automatic, 0, /*blocking=*/true);
+    blocking_task_scheduler_init tsi;
     if (max_parallelism > 3) {
         tbb::global_control c(tbb::global_control::max_allowed_parallelism, max_parallelism-1);
         ASSERT(max_parallelism-1 ==
@@ -182,6 +156,17 @@ void TestWorkersConstraints() {
     }
 }
 
+struct DummyBody {
+    void operator()(int) const {
+        __TBB_Pause(1);
+    }
+};
+
+void RunParallelWork() {
+    const int LOOP_ITERS = 10*1000;
+    tbb::parallel_for(0, LOOP_ITERS, DummyBody(), tbb::simple_partitioner());
+}
+
 struct SetUseRun: NoAssign {
     Harness::SpinBarrier *barr;
 
@@ -189,10 +174,8 @@ struct SetUseRun: NoAssign {
     void operator()( int id ) const {
         if (id == 0) {
             for (int i=0; i<10; i++) {
-                tbb::task_scheduler_init tsi(tbb::task_scheduler_init::automatic, 0,
-                                             /*blocking=*/true);
-                tbb::parallel_for(tbb::blocked_range<int>(0, CheckWorkersNum::LOOP_ITERS, 1),
-                                  CheckWorkersNum(NULL), tbb::simple_partitioner());
+                blocking_task_scheduler_init tsi;
+                RunParallelWork();
                 barr->timed_wait(BARRIER_TIMEOUT);
             }
         } else {
@@ -217,23 +200,13 @@ void TestAutoInit()
         tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism);
     const unsigned expected_threads = tbb::tbb_thread::hardware_concurrency()==1?
         1 : (unsigned)max_parallelism;
-    Harness::SpinBarrier barr(expected_threads);
-
-    CheckWorkersNum::clear();
-    tbb::parallel_for(tbb::blocked_range<int>(0, CheckWorkersNum::LOOP_ITERS, 1),
-                      CheckWorkersNum(&barr), tbb::simple_partitioner());
+    Harness::ExactConcurrencyLevel::check(expected_threads);
     ASSERT(tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism)
            == max_parallelism, "max_allowed_parallelism must not be changed after auto init");
-    CheckWorkersNum::check(expected_threads);
     if (max_parallelism > 2) {
         // after autoinit it's possible to decrease workers number
         tbb::global_control s(tbb::global_control::max_allowed_parallelism, max_parallelism-1);
-        const unsigned expected_threads_1 = max(2U, (unsigned)max_parallelism-1);
-        barr.initialize(expected_threads_1);
-        CheckWorkersNum::clear();
-        tbb::parallel_for(tbb::blocked_range<int>(0, CheckWorkersNum::LOOP_ITERS, 1),
-                          CheckWorkersNum(&barr), tbb::simple_partitioner());
-        CheckWorkersNum::check(expected_threads_1);
+        Harness::ExactConcurrencyLevel::check(max_parallelism-1);
     }
 }
 
@@ -248,28 +221,28 @@ void TestInvalidParallelism()
 #if TRY_BAD_EXPR_ENABLED
     const size_t max_parallelism =
         tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism);
-    for (size_t par = 0; par<=1; par++) {
-        {
-            tbb::set_assertion_handler( AssertionFailureHandler );
-            TRY_BAD_EXPR( tbb::global_control c(tbb::global_control::max_allowed_parallelism, par), "Values of 1 and 0 are not supported for max_allowed_parallelism." );
-            tbb::set_assertion_handler( ReportError );
-            ASSERT(tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism)
-                   == max_parallelism, NULL);
-        }
-        {
-            const size_t P = 2;
-            tbb::global_control c(tbb::global_control::max_allowed_parallelism, P);
-            ASSERT(tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism)
-                   == P, NULL);
-            tbb::set_assertion_handler( AssertionFailureHandler );
-            TRY_BAD_EXPR( tbb::global_control cZ(tbb::global_control::max_allowed_parallelism, par), "Values of 1 and 0 are not supported for max_allowed_parallelism." );
-            tbb::set_assertion_handler( ReportError );
-            ASSERT(tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism)
-                   == P, NULL);
-        }
+    {
+        tbb::set_assertion_handler( AssertionFailureHandler );
+        TRY_BAD_EXPR( tbb::global_control c(tbb::global_control::max_allowed_parallelism, 0),
+                       "max_allowed_parallelism cannot be 0." );
+        tbb::set_assertion_handler( ReportError );
         ASSERT(tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism)
                == max_parallelism, NULL);
     }
+    {
+        const size_t P = 2;
+        tbb::global_control c(tbb::global_control::max_allowed_parallelism, P);
+        ASSERT(tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism)
+               == P, NULL);
+        tbb::set_assertion_handler( AssertionFailureHandler );
+        TRY_BAD_EXPR( tbb::global_control cZ(tbb::global_control::max_allowed_parallelism, 0),
+                      "max_allowed_parallelism cannot be 0." );
+        tbb::set_assertion_handler( ReportError );
+        ASSERT(tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism)
+               == P, NULL);
+    }
+    ASSERT(tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism)
+           == max_parallelism, NULL);
 #endif /* TRY_BAD_EXPR_ENABLED */
 }
 
@@ -306,17 +279,496 @@ void TestTooBigStack()
     }
 }
 
+struct ParallelForRun: NoAssign {
+    int                   num_threads;
+    Harness::SpinBarrier *barr1, *barr2;
+
+    ParallelForRun(Harness::SpinBarrier *b1, Harness::SpinBarrier *b2) :
+        barr1(b1), barr2(b2) {}
+    void operator()( int /*id*/ ) const {
+        barr1->timed_wait(BARRIER_TIMEOUT);
+        RunParallelWork();
+        barr2->timed_wait(BARRIER_TIMEOUT);
+    }
+};
+
+class FFTask: public tbb::task {
+    tbb::atomic<int> *counter;
+    tbb::task* execute() __TBB_override {
+        (*counter)++;
+       return NULL;
+   }
+public:
+    FFTask(tbb::atomic<int> *counter_) : counter(counter_) {}
+};
+
+class WaiterTask: public tbb::task {
+    tbb::atomic<bool> *flag;
+    tbb::task* execute() __TBB_override {
+        while(!*flag)
+            __TBB_Yield();
+       return NULL;
+   }
+public:
+    WaiterTask(tbb::atomic<bool> *flag_) : flag(flag_) {}
+};
+
+class WorkAndEnqueueTask: public tbb::task {
+    tbb::atomic<int> *counter;
+    tbb::atomic<bool> *signalToLeave;
+    tbb::task* execute() __TBB_override {
+        RunParallelWork();
+        *signalToLeave = true;
+        for (int i=0; i<ENQUEUE_TASKS; i++) {
+            FFTask* t = new( tbb::task::allocate_root() ) FFTask(counter);
+            tbb::task::enqueue(*t);
+        }
+
+        return NULL;
+   }
+public:
+    static const int ENQUEUE_TASKS = 10;
+    WorkAndEnqueueTask(tbb::atomic<int> *counter_, tbb::atomic<bool> *signal_)
+        : counter(counter_), signalToLeave(signal_) {}
+};
+
+#if __TBB_TASK_PRIORITY
+tbb::priority_t getPriorityByInt(int i) {
+    return i%3==0? tbb::priority_low : (i%3==1? tbb::priority_normal :
+                                        tbb::priority_high);
+}
+#endif
+
+class FFTasksRun: NoAssign {
+    void enqTasks(int id) const {
+        for (int i=0; i<ITERS; i++) {
+            FFTask* t = new( tbb::task::allocate_root() ) FFTask(cnt);
+#if __TBB_TASK_PRIORITY
+            tbb::priority_t p = getPriorityByInt(i+id);
+            tbb::task::enqueue(*t, p);
+#else
+            tbb::internal::suppress_unused_warning(id);
+            tbb::task::enqueue(*t);
+#endif
+        }
+    }
+public:
+    static const int ITERS = 20;
+    Harness::SpinBarrier *barr;
+    tbb::atomic<int> *cnt;
+
+    FFTasksRun(Harness::SpinBarrier *b, tbb::atomic<int> *c) :
+        barr(b), cnt(c) {}
+    void operator()(int id) const {
+        if (id)
+            enqTasks(id);
+        barr->wait();
+        if (!id)
+            enqTasks(id);
+    }
+};
+
+void TestTaskEnqueue()
+{
+    {
+        blocking_task_scheduler_init tsi(20);
+        tbb::atomic<int> flag;
+        tbb::atomic<bool> taskDoneFlag;
+        flag = 0;
+        taskDoneFlag = false;
+
+        for (int i=0; i<10; i++) {
+            WaiterTask* w = new( tbb::task::allocate_root() ) WaiterTask(&taskDoneFlag);
+            tbb::task::enqueue(*w);
+        }
+        tbb::global_control c(tbb::global_control::max_allowed_parallelism, 1);
+        taskDoneFlag = true;
+
+        FFTask* t = new( tbb::task::allocate_root() ) FFTask(&flag);
+        tbb::task::enqueue(*t);
+        while(!flag)
+            __TBB_Yield();
+    }
+    {
+        blocking_task_scheduler_init tsi(1);
+        tbb::atomic<int> flag;
+        tbb::atomic<bool> taskDoneFlag;
+        flag = 0;
+        taskDoneFlag = false;
+
+        WaiterTask* w = new( tbb::task::allocate_root() ) WaiterTask(&taskDoneFlag);
+        tbb::task::enqueue(*w);
+        taskDoneFlag = true;
+
+        tbb::global_control c(tbb::global_control::max_allowed_parallelism, 1);
+
+        FFTask* t = new( tbb::task::allocate_root() ) FFTask(&flag);
+        tbb::task::enqueue(*t);
+        while(!flag)
+            __TBB_Yield();
+    }
+    {
+        blocking_task_scheduler_init tsi(2);
+        tbb::atomic<int> flag;
+        flag = 0;
+
+        tbb::global_control c(tbb::global_control::max_allowed_parallelism, 1);
+
+        FFTask* t = new( tbb::task::allocate_root() ) FFTask(&flag);
+        tbb::task::enqueue(*t);
+        while(!flag)
+            __TBB_Yield();
+    }
+    {
+        blocking_task_scheduler_init tsi(2);
+        tbb::atomic<int> flag;
+        flag = 0;
+
+        FFTask* t = new( tbb::task::allocate_root() ) FFTask(&flag);
+        tbb::task::enqueue(*t);
+        tbb::global_control c(tbb::global_control::max_allowed_parallelism, 1);
+
+        while(!flag)
+            __TBB_Yield();
+    }
+
+    tbb::global_control c(tbb::global_control::max_allowed_parallelism, 1);
+
+    { // check that enqueue() guarantee mandatory parallelism
+        blocking_task_scheduler_init tsi(1);
+        tbb::atomic<int> flag;
+        flag = 0;
+
+        FFTask* t = new( tbb::task::allocate_root() ) FFTask(&flag);
+        tbb::task::enqueue(*t);
+        while(!flag)
+            __TBB_Yield();
+    }
+    {
+        tbb::atomic<int> flag;
+        flag = 0;
+        {
+            blocking_task_scheduler_init tsi(1);
+
+            for (int i=0; i<10; i++) {
+                FFTask* t = new( tbb::task::allocate_root() ) FFTask(&flag);
+#if __TBB_TASK_PRIORITY
+                const tbb::priority_t p = getPriorityByInt(i);
+                tbb::task::enqueue(*t, p);
+#else
+                tbb::task::enqueue(*t);
+#endif
+            }
+        }
+        ASSERT(flag==10, "The tasks must be terminated when task_scheduler_init destroyed.");
+    }
+    const unsigned threads = 2;
+    {
+        blocking_task_scheduler_init tsi(1);
+        Harness::SpinBarrier barr1(threads), barr2(threads);
+        RunWorkersLimited(1, 1, false);
+
+        NativeParallelFor( threads, ParallelForRun(&barr1, &barr2) );
+    }
+
+    tbb::atomic<int> counter;
+    counter = 0;
+    {
+        blocking_task_scheduler_init tsi(1);
+        Harness::SpinBarrier barr(threads);
+        RunWorkersLimited(1, 1, false);
+
+        NativeParallelFor( threads, FFTasksRun(&barr, &counter) );
+    }
+    ASSERT(counter == threads*FFTasksRun::ITERS, "All tasks must be done when task_scheduler_init destroyed.");
+    counter = 0;
+    { // an enqueued task can enqueue other tasks and calls parallel_for
+        tbb::atomic<bool> signalToLeave;
+        blocking_task_scheduler_init tsi(1);
+
+        signalToLeave = false;
+        WorkAndEnqueueTask *t = new( tbb::task::allocate_root() )
+            WorkAndEnqueueTask(&counter, &signalToLeave);
+        tbb::task::enqueue(*t);
+        RunParallelWork();
+
+        while (!signalToLeave)
+            __TBB_Yield();
+    }
+    ASSERT(counter == WorkAndEnqueueTask::ENQUEUE_TASKS, "All tasks must be done when task_scheduler_init destroyed.");
+}
+
+class CountWorkersTask: public tbb::task {
+    tbb::atomic<bool> *flag;
+    // count unique worker threads
+    static tbb::combinable<size_t> uniqThreads;
+
+    tbb::task* execute() __TBB_override {
+        uniqThreads.local() = 1;
+        Harness::Sleep(10);
+        *flag = 1;
+        return NULL;
+   }
+public:
+    CountWorkersTask(tbb::atomic<bool> *flag_) : flag(flag_) {}
+    static size_t observedThreads() {
+        return uniqThreads.combine(std::plus<size_t>());
+    }
+};
+
+tbb::combinable<size_t> CountWorkersTask::uniqThreads;
+
+tbb::atomic<int> activeArenas;
+
+class ArenaObserver: public tbb::task_scheduler_observer {
+public:
+    ArenaObserver() : tbb::task_scheduler_observer(/*local=*/true) {
+    }
+    void on_scheduler_entry( bool worker ) __TBB_override {
+        if (worker) {
+            ++activeArenas;
+        }
+    }
+    void on_scheduler_exit( bool worker ) __TBB_override {
+        if (worker) {
+            --activeArenas;
+        }
+    }
+};
+
+ArenaObserver observers[2];
+
+struct ArenasObserveRun: NoAssign {
+    Harness::SpinBarrier *barr;
+
+    ArenasObserveRun(Harness::SpinBarrier *b) : barr(b) {}
+    void operator()( int id ) const {
+        observers[id].observe(true);
+        ArenaObserver o;
+        tbb::atomic<bool> flag;
+        flag = false;
+
+        CountWorkersTask* t = new( tbb::task::allocate_root() )
+            CountWorkersTask(&flag);
+        barr->wait();
+        tbb::task::enqueue(*t);
+        while(!flag)
+            __TBB_Yield();
+    }
+};
+
+struct ArenaRun: NoAssign {
+    tbb::atomic<int> *counter;
+
+    ArenaRun(tbb::atomic<int> *counter_) : counter(counter_) {}
+    void operator()() const {
+        (*counter)++;
+    }
+};
+
+struct ArenaUserRun: NoAssign {
+    static const int ENQUEUE_TASKS = 10;
+    tbb::task_arena *arena;
+    Harness::SpinBarrier *barr;
+    tbb::atomic<int> *counter;
+
+    ArenaUserRun(tbb::task_arena *a, Harness::SpinBarrier *b, tbb::atomic<int> *c) :
+        arena(a), barr(b), counter(c)  {}
+    void operator()( int id ) const {
+
+        for (int i=0; i<ENQUEUE_TASKS; i++)
+            arena->enqueue(ArenaRun(counter));
+        barr->wait();
+        if (!id)
+            arena->terminate();
+    }
+};
+
+void TestConcurrentArenas()
+{
+    Harness::SpinBarrier barrier(2);
+    tbb::global_control c(tbb::global_control::max_allowed_parallelism, 1);
+    {
+        blocking_task_scheduler_init tsi(2);
+        ArenaObserver observer;
+        observer.observe(true);
+
+        Harness::ExactConcurrencyLevel::check(1); // must have 0 worker threads
+
+        NativeParallelFor( 2, ArenasObserveRun(&barrier) );
+        ASSERT(1 == CountWorkersTask::observedThreads(),
+               "Single worker is expecting to serve mandatory parallelism.");
+        while(activeArenas) // wait till single worker termination
+            __TBB_Yield();
+
+        // check that without mandatory parallelism, still have 0 worker threads
+        Harness::ExactConcurrencyLevel::check(1);
+    }
+    tbb::atomic<int> counter;
+    counter = 0;
+    {
+        blocking_task_scheduler_init tsi(1);
+        tbb::task_arena arena(2);
+
+        NativeParallelFor( 2, ArenaUserRun(&arena, &barrier, &counter) );
+    }
+    ASSERT(counter == 2*ArenaUserRun::ENQUEUE_TASKS, "All tasks must be done.");
+}
+
+void TestParallelismRestored()
+{
+    const int TASKS = 5;
+    tbb::atomic<int> counter;
+    counter = 0;
+    {
+        const int P = 4;
+        blocking_task_scheduler_init tsi(P);
+        {
+            tbb::global_control s(tbb::global_control::max_allowed_parallelism, 1);
+            Harness::ExactConcurrencyLevel::check(1);
+            // create enforced concurrency in the arena
+            for (int i=0; i<TASKS; i++) {
+                FFTask* t = new( tbb::task::allocate_root() ) FFTask(&counter);
+                tbb::task::enqueue(*t);
+            }
+        }
+        // global control is off, check that concurrency P is available
+        Harness::ExactConcurrencyLevel::check(P);
+    }
+    ASSERT(counter==TASKS, "The tasks must be executed at this point.");
+}
+
+class NoUnwantedEnforcedRun {
+    Harness::SpinBarrier *globalBarrier;
+public:
+    NoUnwantedEnforcedRun(Harness::SpinBarrier *b) : globalBarrier(b) {}
+    void operator()( int id ) const {
+        Harness::SpinBarrier barr(1);
+
+        tbb::combinable<size_t> uniqThreads;
+        Harness::ExactConcurrencyLevel::check(1);
+        globalBarrier->wait();
+        if (id) {
+            for (int i=0; i<20; i++) {
+                Harness::ExactConcurrencyLevel::check(1); // no workers expected in the thread
+            }
+        } else {
+            // create enforced concurrency in a separate thread, thus provoke enforced worker without
+            // work to do to join arena with parallel_for
+            for (int i=0; i<10; i++) {
+                tbb::atomic<int> flag;
+                flag = 0;
+                FFTask* t = new( tbb::task::allocate_root() ) FFTask(&flag);
+                tbb::task::enqueue(*t);
+                Harness::ExactConcurrencyLevel::checkLessOrEqual(2, &uniqThreads);
+                size_t seen = uniqThreads.combine(std::plus<size_t>());
+                ASSERT(seen==1 || seen==2, NULL);
+                while(!flag)
+                    __TBB_Yield();
+            }
+        }
+    }
+};
+
+// test that enforced concurrency from one thread doesn't affect another
+void TestNoUnwantedEnforced()
+{
+    Harness::SpinBarrier barrier(2);
+    tbb::global_control c(tbb::global_control::max_allowed_parallelism, 1);
+    blocking_task_scheduler_init tsi(4);
+    NativeParallelFor( 2, NoUnwantedEnforcedRun(&barrier) );
+}
+
+class TestMultipleControlsRun {
+    Harness::SpinBarrier *barrier;
+public:
+    TestMultipleControlsRun(Harness::SpinBarrier *b) : barrier(b) {}
+    void operator()( int id ) const {
+        barrier->wait();
+        if (id) {
+            {
+                tbb::global_control c(tbb::global_control::max_allowed_parallelism, 1);
+                Harness::ExactConcurrencyLevel::check(1);
+                barrier->wait();
+            }
+            Harness::ExactConcurrencyLevel::check(1);
+            barrier->wait();
+            {
+                tbb::global_control c(tbb::global_control::max_allowed_parallelism, 2);
+                Harness::ExactConcurrencyLevel::check(1);
+                barrier->wait();
+                Harness::ExactConcurrencyLevel::check(2);
+                barrier->wait();
+            }
+        } else {
+            {
+                Harness::ExactConcurrencyLevel::check(1);
+                tbb::global_control c(tbb::global_control::max_allowed_parallelism, 1);
+                barrier->wait();
+                Harness::ExactConcurrencyLevel::check(1);
+                barrier->wait();
+                Harness::ExactConcurrencyLevel::check(1);
+                barrier->wait();
+            }
+            Harness::ExactConcurrencyLevel::check(2);
+            barrier->wait();
+        }
+    }
+};
+
+// test that global controls from different thread with overlapping lifetime
+// still keep parallelism under control
+void TestMultipleControls()
+{
+    blocking_task_scheduler_init tsi(2); // to prevent autoinitialization
+    Harness::SpinBarrier barrier(2);
+    NativeParallelFor( 2, TestMultipleControlsRun(&barrier) );
+}
+
+// enqueued tasks with priority below current must not be forgotten,
+// when enqueue enforced priority is enabled
+void TestForgottenEnqueuedTasks()
+{
+    tbb::task_scheduler_init tsi(2);
+    tbb::atomic<int> counter;
+    tbb::atomic<bool> waitFlag;
+
+    waitFlag = false;
+    counter = 0;
+    tbb::task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;
+    r.set_ref_count(3);
+    for (int i=0; i<2; i++) {
+        tbb::task &t = *new( r.allocate_child() ) WaiterTask(&waitFlag);
+        tbb::task::spawn(t);
+    }
+    // all workers are occupied by blocked WaiterTask()
+    FFTask* t = new( tbb::task::allocate_root() ) FFTask(&counter);
+    tbb::task::enqueue(*t, tbb::priority_low);
+    {
+        tbb::global_control c(tbb::global_control::max_allowed_parallelism, 1);
+        waitFlag = true; // WaiterTask() done, workers ready to use
+        while (!counter) // wait till FFTask() executed
+            __TBB_Yield();
+    }
+    r.wait_for_all();
+    tbb::task::destroy(r);
+}
+
 int TestMain()
 {
+    TestTaskEnqueue();
+    TestConcurrentArenas();
+    TestMultipleControls();
+    TestNoUnwantedEnforced();
     const unsigned h_c = tbb::tbb_thread::hardware_concurrency();
     bool excessHC;
     {
         tbb::task_scheduler_init t(h_c+1);
-        excessHC = Harness::CanReachConcurrencyLevel(h_c+1);
+        excessHC = Harness::ExactConcurrencyLevel::isEqual(h_c+1);
     }
     if (h_c>2)
         TestWorkers(h_c-1);
-    if (excessHC)  // this requires hardware concurrency +1, and hang if not provided
+    if (excessHC)  // requires hardware concurrency +1, otherwise hangs
         TestWorkers(h_c+1);
     if (excessHC || h_c >= 2)
         TestWorkers(2);
@@ -336,6 +788,5 @@ int TestMain()
 #endif
     TestTooBigStack();
     ASSERT(default_ss == tbb::global_control::active_value(tbb::global_control::thread_stack_size), NULL);
-
     return Harness::Done;
 }
diff --git a/src/test/test_global_control_whitebox.cpp b/src/test/test_global_control_whitebox.cpp
index d55e451..8af3bd6 100644
--- a/src/test/test_global_control_whitebox.cpp
+++ b/src/test/test_global_control_whitebox.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #define HARNESS_DEFINE_PRIVATE_PUBLIC 1
diff --git a/src/test/test_halt.cpp b/src/test/test_halt.cpp
index 6c76768..95f7399 100644
--- a/src/test/test_halt.cpp
+++ b/src/test/test_halt.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #define HARNESS_DEFAULT_MIN_THREADS 4
@@ -53,7 +53,7 @@ public:
         for(;;) {
             typename M::scoped_lock lock( mutex );
             if(SharedI >= SharedN) break;
-            volatile double sum = 7.3; 
+            volatile double sum = 7.3;
             sum *= 11.17;
             ++SharedI;
         }
@@ -64,8 +64,8 @@ public:
 template<class M>
 void SharedSerialFib(int n)
 {
-    SharedI = 1; 
-    SharedN = n; 
+    SharedI = 1;
+    SharedN = n;
     M mutex;
     parallel_for( blocked_range<int>(0,4,1), SharedSerialFibBody<M>( mutex ) );
 }
diff --git a/src/test/test_handle_perror.cpp b/src/test/test_handle_perror.cpp
index 41cdc1e..3c5af75 100644
--- a/src/test/test_handle_perror.cpp
+++ b/src/test/test_handle_perror.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Program for basic correctness of handle_perror, which is internal
@@ -48,7 +48,7 @@ static void TestHandlePerror() {
 #if TBB_USE_EXCEPTIONS
         REMARK("caught runtime_exception('%s')\n",e.what());
         ASSERT( memcmp(e.what(),"apple: ",7)==0, NULL );
-        ASSERT( strlen(strstr(e.what(), strerror(EAGAIN))), "bad error message?" ); 
+        ASSERT( strlen(strstr(e.what(), strerror(EAGAIN))), "bad error message?" );
 #endif /* TBB_USE_EXCEPTIONS */
         caught = true;
     }
diff --git a/src/test/test_hw_concurrency.cpp b/src/test/test_hw_concurrency.cpp
index a9094bf..3c7ab8a 100644
--- a/src/test/test_hw_concurrency.cpp
+++ b/src/test/test_hw_concurrency.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "harness_defs.h"
diff --git a/src/test/test_indexer_node.cpp b/src/test/test_indexer_node.cpp
index b31f97f..587a0ec 100644
--- a/src/test/test_indexer_node.cpp
+++ b/src/test/test_indexer_node.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "harness.h"
@@ -25,7 +25,7 @@
 // Tests
 //
 
- #if defined(_MSC_VER) && _MSC_VER < 1600
+#if defined(_MSC_VER) && _MSC_VER < 1600
     #pragma warning (disable : 4503) //disabling the "decorated name length exceeded" warning for VS2008 and earlier
 #endif
 
@@ -107,8 +107,8 @@ protected:
     }
 
     void make_and_validate_full_graph() {
-        /*     in0                         */ 
-        /*         \                       */ 
+        /*     in0                         */
+        /*         \                       */
         /*           port0          out0   */
         /*         /       |      /        */
         /*     in1         middle          */
@@ -139,15 +139,15 @@ protected:
         int first_pred = *(mp0_list.begin()) == ins[0] ? 0 : ( *(mp0_list.begin()) == ins[1] ? 1 : -1 );
         typename in_node_t::predecessor_list_type::iterator piv = mp0_list.begin();++piv;
         int second_pred = *piv == ins[0] ? 0 : ( *piv == ins[1] ? 1 : -1 );
-        ASSERT( first_pred != -1 && second_pred != -1 && first_pred != second_pred, "bad predecessor(s) for middle port 0" ); 
+        ASSERT( first_pred != -1 && second_pred != -1 && first_pred != second_pred, "bad predecessor(s) for middle port 0" );
 
         ASSERT( *(mp1_list.begin()) == ins[2], "bad predecessor for middle port 1" );
 
         int first_succ = *(ms_list.begin()) == outs[0] ? 0 : ( *(ms_list.begin()) == outs[1] ? 1 : -1 );
         typename out_node_t::successor_list_type::iterator ms_vec_iter = ms_list.begin(); ++ms_vec_iter;
         int second_succ = *ms_vec_iter == outs[0] ? 0 : ( *ms_vec_iter == outs[1] ? 1 : -1 );
-        ASSERT( first_succ != -1 && second_succ != -1 && first_succ != second_succ, "bad successor(s) for middle" ); 
- 
+        ASSERT( first_succ != -1 && second_succ != -1 && first_succ != second_succ, "bad successor(s) for middle" );
+
         in0.try_put(1);
         in1.try_put(2);
         in2.try_put(8);
@@ -155,7 +155,7 @@ protected:
         g.wait_for_all();
 
         T v_in;
-    
+
         ASSERT( in0.try_get(v_in) == false, "buffer should not have a value" );
         ASSERT( in1.try_get(v_in) == false, "buffer should not have a value" );
         ASSERT( in1.try_get(v_in) == false, "buffer should not have a value" );
@@ -180,8 +180,8 @@ protected:
     }
 
     void validate_partial_graph() {
-        /*     in0                         */ 
-        /*                                 */ 
+        /*     in0                         */
+        /*                                 */
         /*           port0          out0   */
         /*         /       |               */
         /*     in1         middle          */
@@ -208,7 +208,7 @@ protected:
         in2.try_put(8);
         in2.try_put(4);
         g.wait_for_all();
-    
+
         T v_in;
         typename my_node_t::output_type v;
 
@@ -227,8 +227,8 @@ protected:
     }
 
     void validate_empty_graph() {
-        /*     in0                         */ 
-        /*                                 */ 
+        /*     in0                         */
+        /*                                 */
         /*            port0         out0   */
         /*                |                */
         /*     in1         middle          */
@@ -255,7 +255,7 @@ protected:
         in2.try_put(8);
         in2.try_put(4);
         g.wait_for_all();
-    
+
         T v_in;
         typename my_node_t::output_type v;
 
@@ -281,7 +281,7 @@ public:
         ms_p1_ptr = static_cast< typename in_node_t::successor_type * >(&tbb::flow::input_port<1>(middle));
         mp_ptr = static_cast< typename out_node_t::predecessor_type *>(&middle);
     }
- 
+
     virtual ~test_indexer_extract() {}
 
     void run_tests() {
@@ -548,7 +548,7 @@ public:
         }
         for(int nInputs = 1; nInputs <= MaxNSources; ++nInputs) {
             tbb::flow::graph g;
-            IType* my_indexer = new IType(g); //makeIndexer<IType>::create(); 
+            IType* my_indexer = new IType(g); //makeIndexer<IType>::create();
             tbb::flow::queue_node<TType> outq1(g);
             tbb::flow::queue_node<TType> outq2(g);
 
@@ -725,7 +725,7 @@ static void test() {
 
 template<
       template<typename> class TestType,  // serial_test or parallel_test
-      typename T0, typename T1=void, typename T2=void, typename T3=void, typename T4=void, 
+      typename T0, typename T1=void, typename T2=void, typename T3=void, typename T4=void,
       typename T5=void, typename T6=void, typename T7=void, typename T8=void, typename T9=void> // type of the inputs to the indexer_node
 class generate_test {
 public:
@@ -737,9 +737,9 @@ public:
 
 //specializations for indexer node inputs
 template<
-      template<typename> class TestType,  
-      typename T0, typename T1, typename T2, typename T3, typename T4, 
-      typename T5, typename T6, typename T7, typename T8> 
+      template<typename> class TestType,
+      typename T0, typename T1, typename T2, typename T3, typename T4,
+      typename T5, typename T6, typename T7, typename T8>
 class generate_test<TestType, T0, T1, T2, T3, T4, T5, T6, T7, T8> {
 public:
     typedef tbb::flow::indexer_node<T0, T1, T2, T3, T4, T5, T6, T7, T8>  indexer_node_type;
@@ -749,9 +749,9 @@ public:
 };
 
 template<
-      template<typename> class TestType, 
-      typename T0, typename T1, typename T2, typename T3, typename T4, 
-      typename T5, typename T6, typename T7> 
+      template<typename> class TestType,
+      typename T0, typename T1, typename T2, typename T3, typename T4,
+      typename T5, typename T6, typename T7>
 class generate_test<TestType, T0, T1, T2, T3, T4, T5, T6, T7> {
 public:
     typedef tbb::flow::indexer_node<T0, T1, T2, T3, T4, T5, T6, T7>  indexer_node_type;
@@ -761,9 +761,9 @@ public:
 };
 
 template<
-      template<typename> class TestType, 
-      typename T0, typename T1, typename T2, typename T3, typename T4, 
-      typename T5, typename T6> 
+      template<typename> class TestType,
+      typename T0, typename T1, typename T2, typename T3, typename T4,
+      typename T5, typename T6>
 class generate_test<TestType, T0, T1, T2, T3, T4, T5, T6> {
 public:
     typedef tbb::flow::indexer_node<T0, T1, T2, T3, T4, T5, T6>  indexer_node_type;
@@ -773,9 +773,9 @@ public:
 };
 
 template<
-      template<typename> class TestType, 
-      typename T0, typename T1, typename T2, typename T3, typename T4, 
-      typename T5> 
+      template<typename> class TestType,
+      typename T0, typename T1, typename T2, typename T3, typename T4,
+      typename T5>
 class generate_test<TestType, T0, T1, T2, T3, T4, T5>  {
 public:
     typedef tbb::flow::indexer_node<T0, T1, T2, T3, T4, T5>  indexer_node_type;
@@ -785,8 +785,8 @@ public:
 };
 
 template<
-      template<typename> class TestType, 
-      typename T0, typename T1, typename T2, typename T3, typename T4> 
+      template<typename> class TestType,
+      typename T0, typename T1, typename T2, typename T3, typename T4>
 class generate_test<TestType, T0, T1, T2, T3, T4>  {
 public:
     typedef tbb::flow::indexer_node<T0, T1, T2, T3, T4>  indexer_node_type;
@@ -796,8 +796,8 @@ public:
 };
 
 template<
-      template<typename> class TestType,  
-      typename T0, typename T1, typename T2, typename T3>  
+      template<typename> class TestType,
+      typename T0, typename T1, typename T2, typename T3>
 class generate_test<TestType, T0, T1, T2, T3> {
 public:
     typedef tbb::flow::indexer_node<T0, T1, T2, T3>  indexer_node_type;
@@ -807,8 +807,8 @@ public:
 };
 
 template<
-      template<typename> class TestType,  
-      typename T0, typename T1, typename T2> 
+      template<typename> class TestType,
+      typename T0, typename T1, typename T2>
 class generate_test<TestType, T0, T1, T2> {
 public:
     typedef tbb::flow::indexer_node<T0, T1, T2>  indexer_node_type;
@@ -818,8 +818,8 @@ public:
 };
 
 template<
-      template<typename> class TestType,  
-      typename T0, typename T1>           
+      template<typename> class TestType,
+      typename T0, typename T1>
 class generate_test<TestType, T0, T1> {
 public:
     typedef tbb::flow::indexer_node<T0, T1>  indexer_node_type;
@@ -829,8 +829,8 @@ public:
 };
 
 template<
-      template<typename> class TestType,  
-      typename T0>           
+      template<typename> class TestType,
+      typename T0>
 class generate_test<TestType, T0> {
 public:
     typedef tbb::flow::indexer_node<T0>  indexer_node_type;
@@ -874,7 +874,7 @@ int TestMain() {
 #if MAX_TUPLE_TEST_SIZE >= 9
        generate_test<parallel_test, float, double, int, double, double, long, int, float, long>::do_test();
 #endif
-   }   
+   }
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
    test_indexer_extract<int>().run_tests();
 #endif
diff --git a/src/test/test_initializer_list.h b/src/test/test_initializer_list.h
index b943fc0..114bafc 100644
--- a/src/test/test_initializer_list.h
+++ b/src/test/test_initializer_list.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifndef __TBB_test_initializer_list_H
@@ -143,7 +143,7 @@ namespace initializer_list_support_tests{
     __TBB_TEST_INIT_LIST_SUITE_SINGLE(TestCompilerSupportInt, initializer_list_helpers::ad_hoc_container, int, AD_HOC_INIT_SEQ )
     #undef AD_HOC_INIT_SEQ
 
-    #if __TBB_CPP11_INIT_LIST_ASSIGN_OP_RESOLUTION_BROKEN
+    #if __TBB_CPP11_INIT_LIST_TEST_BROKEN
         void TestCompilerSupportIntPair(){
             REPORT("Known issue: skip initializer_list compiler test for std::pair list elements.\n");
         }
diff --git a/src/test/test_inits_loop.cpp b/src/test/test_inits_loop.cpp
index bbe0932..8447331 100644
--- a/src/test/test_inits_loop.cpp
+++ b/src/test/test_inits_loop.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if __APPLE__
diff --git a/src/test/test_intrusive_list.cpp b/src/test/test_intrusive_list.cpp
index 095ebe3..921ea4e 100644
--- a/src/test/test_intrusive_list.cpp
+++ b/src/test/test_intrusive_list.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #define HARNESS_NO_PARSE_COMMAND_LINE 1
@@ -66,9 +66,9 @@ public:
 };
 
 typedef tbb::internal::intrusive_list<DataItemWithInheritedNode> IntrusiveList1;
-typedef tbb::internal::memptr_intrusive_list<DataItemWithMemberNodes, 
+typedef tbb::internal::memptr_intrusive_list<DataItemWithMemberNodes,
         DataItemWithMemberNodeBase, &DataItemWithMemberNodeBase::m_BaseNode> IntrusiveList2;
-typedef tbb::internal::memptr_intrusive_list<DataItemWithMemberNodes, 
+typedef tbb::internal::memptr_intrusive_list<DataItemWithMemberNodes,
         DataItemWithMemberNodes, &DataItemWithMemberNodes::m_Node> IntrusiveList3;
 
 const int NumElements = 256 * 1024;
diff --git a/src/test/test_ittnotify.cpp b/src/test/test_ittnotify.cpp
index a664aec..aee94a7 100644
--- a/src/test/test_ittnotify.cpp
+++ b/src/test/test_ittnotify.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #define HARNESS_DEFAULT_MIN_THREADS 2
diff --git a/src/test/test_join_node.cpp b/src/test/test_join_node.cpp
index 80ec191..78cb655 100644
--- a/src/test/test_join_node.cpp
+++ b/src/test/test_join_node.cpp
@@ -1,38 +1,358 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
+#if _MSC_VER
+// Suppress "decorated name length exceeded, name was truncated" warning
+#if __INTEL_COMPILER
+    #pragma warning( disable: 2586 )
+#else
+    #pragma warning( disable: 4503 )
+#endif
+#endif
+
+#define TBB_PREVIEW_FLOW_GRAPH_FEATURES 1
 #include "harness.h"
+#include "harness_defs.h"
 #include "tbb/atomic.h"
 #include "harness_checktype.h"
 
 #include "tbb/flow_graph.h"
 #include "tbb/task_scheduler_init.h"
 
-#if defined(_MSC_VER) && _MSC_VER < 1600
-    #pragma warning (disable : 4503) //disabling the "decorated name length exceeded" warning for VS2008 and earlier
+#define __TBB_MIC_OFFLOAD_TEST_COMPILATION_BROKEN __TBB_MIC_OFFLOAD
+
+const char *names[] = {
+    "Adam", "Bruce", "Charles", "Daniel", "Evan", "Frederich", "George", "Hiram", "Ichabod",
+    "John", "Kevin", "Leonard", "Michael", "Ned", "Olin", "Paul", "Quentin", "Ralph", "Steven",
+    "Thomas", "Ulysses", "Victor", "Walter", "Xerxes", "Yitzhak", "Zebediah", "Anne", "Bethany",
+    "Clarisse", "Dorothy", "Erin", "Fatima", "Gabrielle", "Helen", "Irene", "Jacqueline",
+    "Katherine", "Lana", "Marilyn", "Noelle", "Okiilani", "Pauline", "Querida", "Rose", "Sybil",
+    "Tatiana", "Umiko", "Victoria", "Wilma", "Xena", "Yolanda", "Zoe", "Algernon", "Benjamin",
+    "Caleb", "Dylan", "Ezra", "Felix", "Gabriel", "Henry", "Issac", "Jasper", "Keifer",
+    "Lincoln", "Milo", "Nathaniel", "Owen", "Peter", "Quincy", "Ronan", "Silas", "Theodore",
+    "Uriah", "Vincent", "Wilbur", "Xavier", "Yoda", "Zachary", "Amelia", "Brielle", "Charlotte",
+    "Daphne", "Emma", "Fiona", "Grace", "Hazel", "Isla", "Juliet", "Keira", "Lily", "Mia",
+    "Nora", "Olivia", "Penelope", "Quintana", "Ruby", "Sophia", "Tessa", "Ursula", "Violet",
+    "Willow", "Xanthe", "Yvonne", "ZsaZsa", "Asher", "Bennett", "Connor", "Dominic", "Ethan",
+    "Finn", "Grayson", "Hudson", "Ian", "Jackson", "Kent", "Liam", "Matthew", "Noah", "Oliver",
+    "Parker", "Quinn", "Rhys", "Sebastian", "Taylor", "Umberto", "Vito", "William", "Xanto",
+    "Yogi", "Zane", "Ava", "Brenda", "Chloe", "Delilah", "Ella", "Felicity", "Genevieve",
+    "Hannah", "Isabella", "Josephine", "Kacie", "Lucy", "Madeline", "Natalie", "Octavia",
+    "Piper", "Qismah", "Rosalie", "Scarlett", "Tanya", "Uta", "Vivian", "Wendy", "Xola",
+    "Yaritza", "Zanthe" };
+
+static const int NameCnt = sizeof(names) / sizeof(char *);
+
+template<typename K>
+struct index_to_key {
+    K operator()(const int indx){
+        return (K)(3*indx+1);
+    }
+};
+
+template<>
+struct index_to_key<std::string>{
+    std::string operator()(const int indx){
+        return std::string(names[indx % NameCnt]);
+    }
+};
+
+template<typename K>
+struct K_deref {
+    typedef K type;
+};
+
+template<typename K>
+struct K_deref<K&> {
+    typedef K type;
+};
+
+template<typename K, typename V>
+struct MyKeyFirst {
+    K my_key;
+    V my_value;
+    MyKeyFirst(int i=0, int v=0 ) : my_key(index_to_key<K>()(i)), my_value((V)v){
+    }
+    void print_val() const {
+        REMARK("MyKeyFirst{");print_my_value(my_key); REMARK(","); print_my_value(my_value);REMARK("}");
+    }
+    operator int() const { return (int)my_value; }
+};
+
+template<typename K, typename V>
+struct MyKeySecond {
+    V my_value;
+    K my_key;
+    MyKeySecond(int i=0, int v = 0) : my_value((V)v), my_key(index_to_key<K>()(i)) {
+    }
+    void print_val() const {
+        REMARK("MyKeySecond{");print_my_value(my_key); REMARK(","); print_my_value(my_value);REMARK("}");
+    }
+    operator int() const { return (int)my_value; }
+};
+
+template<typename K, typename V>
+struct MyMessageKeyWithoutKey {
+    V my_value;
+    K my_message_key;
+    MyMessageKeyWithoutKey(int i=0, int v = 0) : my_value((V)v), my_message_key(index_to_key<K>()(i)) {
+    }
+    void print_val() const {
+        REMARK("MyMessageKeyWithoutKey{");print_my_value(my_message_key); REMARK(","); print_my_value(my_value);REMARK("}");
+    }
+    operator int() const { return (int)my_value; }
+    const K& key() const {
+        return my_message_key;
+    }
+};
+
+template<typename K, typename V>
+struct MyMessageKeyWithBrokenKey {
+    V my_value;
+    K my_key;
+    K my_message_key;
+    MyMessageKeyWithBrokenKey(int i=0, int v = 0) : my_value((V)v), my_key(), my_message_key(index_to_key<K>()(i)) {
+    }
+    void print_val() const {
+        REMARK("MyMessageKeyWithBrokenKey{");print_my_value(my_message_key); REMARK(","); print_my_value(my_value);REMARK("}");
+    }
+    operator int() const { return (int)my_value; }
+    const K& key() const {
+        return my_message_key;
+    }
+
+};
+
+template<typename K, typename V>
+struct MyKeyWithBrokenMessageKey {
+    V my_value;
+    K my_key;
+    MyKeyWithBrokenMessageKey(int i=0, int v = 0) : my_value((V)v), my_key(index_to_key<K>()(i)) {
+    }
+    void print_val() const {
+        REMARK("MyKeyWithBrokenMessageKey{");print_my_value(my_key); REMARK(","); print_my_value(my_value);REMARK("}");
+    }
+    operator int() const { return (int)my_value; }
+    K key() const {
+        ASSERT(false, "The method should never be called");
+        return K();
+    }
+};
+
+template<typename K, typename V>
+struct MyMessageKeyWithoutKeyMethod {
+    V my_value;
+    K my_message_key;
+    MyMessageKeyWithoutKeyMethod(int i=0, int v = 0) : my_value((V)v), my_message_key(index_to_key<K>()(i)) {
+    }
+    void print_val() const {
+        REMARK("MyMessageKeyWithoutKeyMethod{");print_my_value(my_message_key); REMARK(","); print_my_value(my_value);REMARK("}");
+    }
+    operator int() const { return (int)my_value; }
+#if __TBB_COMPLICATED_ADL_BROKEN
+    const K& key() const { return my_message_key; }
 #endif
+    //K key() const; // Do not define
+};
+
+// Overload for MyMessageKeyWithoutKeyMethod
+template <typename K, typename V>
+K key_from_message(const MyMessageKeyWithoutKeyMethod<typename tbb::internal::strip<K>::type, V> &m) {
+    return m.my_message_key;
+}
+
+
+// pattern for creating values in the tag_matching and key_matching, given an integer and the index in the tuple
+template<typename TT, size_t INDEX>
+struct make_thingie {
+    TT operator()(int const &i) {
+        return TT(i * (INDEX+1));
+    }
+};
+
+template<template <typename, typename> class T, typename K, typename V, size_t INDEX>
+struct make_thingie<T<K,V>, INDEX> {
+    T<K,V> operator()(int const &i) {
+        return T<K,V>(i, i*(INDEX+1));
+    }
+};
+
+// cast_from<T>::my_int_val(i);
+template<typename T>
+struct cast_from {
+    static int my_int_val(T const &i) { return (int)i; }
+};
+
+template<typename K, typename V>
+struct cast_from<MyKeyFirst<K,V> > {
+    static int my_int_val(MyKeyFirst<K,V> const &i) { return (int)(i.my_value); }
+};
+
+template<typename K, typename V>
+struct cast_from<MyKeySecond<K,V> > {
+    static int my_int_val(MyKeySecond<K,V> const &i) { return (int)(i.my_value); }
+};
+
+template<typename T>
+void print_my_value(T const &i) {
+    REMARK(" %d ", cast_from<T>::my_int_val(i));
+}
+
+template<typename K, typename V>
+void print_my_value(MyKeyFirst<K,V> const &i) {
+    i.print_val();
+}
+
+template<typename K, typename V>
+void print_my_value(MyKeySecond<K,V> const &i) {
+    i.print_val();
+}
+
+template<>
+void print_my_value(std::string const &i) {
+    REMARK("\"%s\"", i.c_str());
+}
 
 //
 // Tests
 //
 
+//!
+// my_struct_key == given a type V with a field named my_key of type K, will return a copy of my_key
+template<class K, typename V>
+struct my_struct_key{
+    K operator()(const V& mv) {
+        return mv.my_key;
+    }
+};
+
+// specialization returning reference to my_key.
+template<class K, typename V>
+struct my_struct_key<K&, V>{
+    const K& operator()(const V& mv) {
+        return const_cast<const K&>(mv.my_key);
+    }
+};
+
+using tbb::internal::is_ref;
+
+template<class K, class V> struct VtoKFB {
+    typedef tbb::flow::interface9::internal::type_to_key_function_body<V, K> type;
+};
+
+template<typename K> struct make_hash_compare{ typedef typename tbb::tbb_hash_compare<K> type;};
+
+template<typename K, class V>
+void hash_buffer_test(const char *sname) {
+    typedef typename K_deref<K>::type KnoR;
+    tbb::flow::interface9::internal::hash_buffer<
+        K,
+        V,
+        typename VtoKFB<K,V>::type,
+        tbb::tbb_hash_compare<KnoR>
+        > my_hash_buffer;
+    const bool k_is_ref = is_ref<K>::value;
+    typedef tbb::flow::interface9::internal::type_to_key_function_body_leaf<
+        V, K, my_struct_key<K,V> > my_func_body_type;
+    typename VtoKFB<K,V>::type *kp = new my_func_body_type(my_struct_key<K,V>());
+    my_hash_buffer.set_key_func(kp);
+    REMARK("Running hash_buffer test on %s; is ref == %s\n", sname, k_is_ref ? "true":"false");
+    V mv1, mv0;
+    bool res;
+    for(int cnt = 0; cnt < 2; ++cnt) {
+        // insert 50 items after checking they are not already in the table
+        for( int i = 0; i < 50; ++i) {
+            KnoR kk = index_to_key<KnoR>()(i);
+            mv1.my_key = kk;
+            mv1.my_value = 0.5*i;
+            res = my_hash_buffer.find_with_key(kk, mv0);
+            ASSERT(!res, "Found non-inserted item");
+            res = my_hash_buffer.insert_with_key(mv1);
+            ASSERT(res, "insert failed");
+            res = my_hash_buffer.find_with_key(kk, mv0);
+            ASSERT(res, "not found after insert");
+            ASSERT(mv0.my_value == mv1.my_value, "result not correct");
+        }
+        // go backwards checking they are still there.
+        for( int i = 49; i >= 0; --i) {
+            KnoR kk = index_to_key<KnoR>()(i);
+            double value = 0.5*i;
+            res = my_hash_buffer.find_with_key(kk, mv0);
+            ASSERT(res, "find failed");
+            ASSERT(mv0.my_value == value, "result not correct");
+        }
+        // delete every third item, check they are gone
+        for(int i = 0; i < 50; i += 3) {
+            KnoR kk = index_to_key<KnoR>()(i);
+            my_hash_buffer.delete_with_key(kk);
+            res = my_hash_buffer.find_with_key(kk, mv0);
+            ASSERT(!res, "Found deleted item");
+        }
+        // check the deleted items are gone, the non-deleted items are there.
+        for(int i = 0; i < 50; ++i) {
+            KnoR kk = index_to_key<KnoR>()(i);
+            double value = 0.5*i;
+            if(i%3 == 0) {
+                res = my_hash_buffer.find_with_key(kk, mv0);
+                ASSERT(!res, "found an item that was previously deleted");
+            }
+            else {
+                res = my_hash_buffer.find_with_key(kk, mv0);
+                ASSERT(res, "find failed");
+                ASSERT(mv0.my_value == value, "result not correct");
+            }
+        }
+        // insert new items, check the deleted items return true, the non-deleted items return false.
+        for(int i = 0; i < 50; ++i) {
+            KnoR kk = index_to_key<KnoR>()(i);
+            double value = 1.5*i;
+            mv1.my_key = kk;
+            mv1.my_value = value;
+            res = my_hash_buffer.insert_with_key(mv1);
+            if(i%3 == 0) {
+                ASSERT(res, "didn't insert in empty slot");
+            }
+            else {
+                ASSERT(!res, "slot was empty on insert");
+            }
+        }
+        // delete all items
+        for(int i = 0; i < 50; ++i) {
+            KnoR kk = index_to_key<KnoR>()(i);
+            my_hash_buffer.delete_with_key(kk);
+            res = my_hash_buffer.find_with_key(kk, mv0);
+            ASSERT(!res, "Found deleted item");
+        }
+    }  // perform tasks twice
+}
+
+void
+TestTaggedBuffers() {
+    hash_buffer_test<int, MyKeyFirst<int,double> >("MyKeyFirst<int,double>");
+    hash_buffer_test<int&, MyKeyFirst<int,double> >("MyKeyFirst<int,double> with int&");
+    hash_buffer_test<int, MyKeySecond<int,double> >("MyKeySecond<int,double>");
+
+    hash_buffer_test<std::string, MyKeyFirst<std::string,double> >("MyKeyFirst<std::string,double>");
+    hash_buffer_test<std::string&, MyKeySecond<std::string,double> >("MyKeySecond<std::string,double> with std::string&");
+}
+
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
 template< typename T, typename NODE_TYPE >
 class test_join_base_extract : NoAssign {
@@ -98,7 +418,7 @@ protected:
     }
 
     void check_tuple( T &r, tuple_t &v ) {
-        T t0 = tbb::flow::get<0>(v); 
+        T t0 = tbb::flow::get<0>(v);
         T t1 = tbb::flow::get<1>(v);
         ASSERT( (t0 == 1 || t0 == 2) && (t0&r) == 0, "duplicate value" );
         r |= t0;
@@ -107,8 +427,8 @@ protected:
     }
 
     void make_and_validate_full_graph() {
-        /*     in0                         */ 
-        /*         \                       */ 
+        /*     in0                         */
+        /*         \                       */
         /*           port0          out0   */
         /*         /       |      /        */
         /*     in1         middle          */
@@ -139,15 +459,15 @@ protected:
         typename in_queue_t::predecessor_list_type::iterator mp0_list_iter = mp0_list.begin(); ++mp0_list_iter;
         int first_pred = *(mp0_list.begin()) == ins[0] ? 0 : ( *(mp0_list.begin()) == ins[1] ? 1 : -1 );
         int second_pred = *mp0_list_iter == ins[0] ? 0 : ( *mp0_list_iter == ins[1] ? 1 : -1 );
-        ASSERT( first_pred != -1 && second_pred != -1 && first_pred != second_pred, "bad predecessor(s) for middle port 0" ); 
+        ASSERT( first_pred != -1 && second_pred != -1 && first_pred != second_pred, "bad predecessor(s) for middle port 0" );
 
         ASSERT( *(mp1_list.begin()) == ins[2], "bad predecessor for middle port 1" );
 
         typename out_queue_t::successor_list_type::iterator ms_list_iter = ms_list.begin(); ++ms_list_iter;
         int first_succ = *(ms_list.begin()) == outs[0] ? 0 : ( *(ms_list.begin()) == outs[1] ? 1 : -1 );
         int second_succ = *ms_list_iter == outs[0] ? 0 : ( *ms_list_iter == outs[1] ? 1 : -1 );
-        ASSERT( first_succ != -1 && second_succ != -1 && first_succ != second_succ, "bad successor(s) for middle" ); 
- 
+        ASSERT( first_succ != -1 && second_succ != -1 && first_succ != second_succ, "bad successor(s) for middle" );
+
         in0.try_put(1);
         in1.try_put(2);
         in2.try_put(8);
@@ -156,7 +476,7 @@ protected:
 
         T v_in;
         tuple_t v;
-    
+
         ASSERT( in0.try_get(v_in) == false, "buffer should not have a value" );
         ASSERT( in1.try_get(v_in) == false, "buffer should not have a value" );
         ASSERT( in1.try_get(v_in) == false, "buffer should not have a value" );
@@ -180,8 +500,8 @@ protected:
     }
 
     void validate_partial_graph() {
-        /*     in0                         */ 
-        /*                                 */ 
+        /*     in0                         */
+        /*                                 */
         /*           port0          out0   */
         /*         /       |               */
         /*     in1         middle          */
@@ -208,7 +528,7 @@ protected:
         in2.try_put(8);
         in2.try_put(4);
         g.wait_for_all();
-    
+
         T v_in;
         tuple_t v;
 
@@ -222,8 +542,8 @@ protected:
     }
 
     void validate_empty_graph() {
-        /*     in0                         */ 
-        /*                                 */ 
+        /*     in0                         */
+        /*                                 */
         /*            port0         out0   */
         /*                |                */
         /*     in1         middle          */
@@ -250,7 +570,7 @@ protected:
         in2.try_put(8);
         in2.try_put(4);
         g.wait_for_all();
-    
+
         T v_in;
         tuple_t v;
 
@@ -266,7 +586,7 @@ protected:
 
 public:
 
-    test_join_base_extract(tbb::flow::graph &_g, in_queue_t &_in0, in_queue_t &_in1, in_queue_t &_in2, NODE_TYPE &m, out_queue_t &_out0, out_queue_t &_out1) : 
+    test_join_base_extract(tbb::flow::graph &_g, in_queue_t &_in0, in_queue_t &_in1, in_queue_t &_in2, NODE_TYPE &m, out_queue_t &_out0, out_queue_t &_out1) :
         g(_g), in0(_in0), in1(_in1), in2(_in2), middle(m), out0(_out0), out1(_out1) {
         ins[0] = &in0;
         ins[1] = &in1;
@@ -277,7 +597,7 @@ public:
         ms_p1_ptr = static_cast< typename in_queue_t::successor_type * >(&tbb::flow::input_port<1>(middle));
         mp_ptr = static_cast< typename out_queue_t::predecessor_type *>(&middle);
     }
- 
+
     virtual ~test_join_base_extract() {}
 
     void run_tests() {
@@ -342,12 +662,12 @@ protected:
     out_queue_t my_out1;
 
 public:
-    test_join_extract() : test_join_base_extract<T, NODE_TYPE>( my_g, my_in0, my_in1, my_in2, my_middle, my_out0, my_out1 ), 
+    test_join_extract() : test_join_base_extract<T, NODE_TYPE>( my_g, my_in0, my_in1, my_in2, my_middle, my_out0, my_out1 ),
                           my_in0(my_g), my_in1(my_g), my_in2(my_g), my_middle(my_g), my_out0(my_g), my_out1(my_g) { }
 };
 
 template< typename T >
-class test_join_extract<T, tbb::flow::join_node< tbb::flow::tuple<T,T>, tbb::flow::tag_matching> > : 
+class test_join_extract<T, tbb::flow::join_node< tbb::flow::tuple<T,T>, tbb::flow::tag_matching> > :
     public test_join_base_extract< T, tbb::flow::join_node< tbb::flow::tuple<T,T>, tbb::flow::tag_matching> > {
 protected:
     typedef tbb::flow::join_node< tbb::flow::tuple<T,T>, tbb::flow::tag_matching> my_node_t;
@@ -366,7 +686,7 @@ protected:
     struct tag_match_0 { size_t operator()(T v) { return v; } };
     struct tag_match_1 { size_t operator()(T v) { return v/4; } };
 public:
-    test_join_extract() : test_join_base_extract<T, my_node_t>( my_g, my_in0, my_in1, my_in2, my_middle, my_out0, my_out1 ), 
+    test_join_extract() : test_join_base_extract<T, my_node_t>( my_g, my_in0, my_in1, my_in2, my_middle, my_out0, my_out1 ),
                           my_in0(my_g), my_in1(my_g), my_in2(my_g), my_middle(my_g, tag_match_0(), tag_match_1()), my_out0(my_g), my_out1(my_g) { }
 };
 #endif
@@ -375,19 +695,22 @@ struct threebyte {
     unsigned char b1;
     unsigned char b2;
     unsigned char b3;
-    threebyte(int i=0) { b1 = (unsigned char)i; }
+    threebyte(int i=0) {
+        b1 = (unsigned char)(i & 0xFF);
+        b2 = (unsigned char)((i >> 8) & 0xFF);
+        b3 = (unsigned char)((i >> 16) & 0xFF);
+    }
     threebyte(const threebyte &other) : b1(other.b1), b2(other.b2), b3(other.b3) { }
-    operator int() { return (int)b1; }
+    operator int() const { return (int)(b1 + (b2 << 8) + (b3 << 16)); }
 };
 
 const int Count = 150;
+
 const int Recirc_count = 1000;  // number of tuples to be generated
 const int MaxPorts = 10;
 const int MaxNSources = 5; // max # of source_nodes to register for each join_node input in parallel test
 bool outputCheck[MaxPorts][Count];  // for checking output
 
-using tbb::flow::NO_TAG;
-
 void
 check_outputCheck( int nUsed, int maxCnt) {
     for(int i=0; i < nUsed; ++i) {
@@ -446,6 +769,43 @@ class name_of<threebyte> {
 public:
     static const char* name() {return "threebyte"; }
 };
+template<>
+class name_of<std::string> {
+public:
+    static const char* name() {return "std::string"; }
+};
+template<typename K,typename V>
+class name_of<MyKeyFirst<K,V> > {
+public:
+    static const char* name() {return "MyKeyFirst<K,V>"; }
+};
+template<typename K,typename V>
+class name_of<MyKeySecond<K,V> > {
+public:
+    static const char* name() {return "MyKeySecond<K,V>"; }
+};
+
+// The additional policy to differ message based key matching from usual key matching.
+// It only has sense for the test because join_node is created with the key_matching policy for the both cases.
+template <typename K, typename KHash = tbb::tbb_hash_compare<typename tbb::internal::strip<K>::type > >
+struct message_based_key_matching {};
+
+// test for key_matching
+template<class JP>
+struct is_key_matching_join {
+    static const bool value = false;
+    typedef int key_type;  // have to define it to something
+};
+template<class K, class KHash>
+struct is_key_matching_join<tbb::flow::key_matching<K,KHash> > {
+    static const bool value = true;
+    typedef K key_type;
+};
+template<class K, class KHash>
+struct is_key_matching_join<message_based_key_matching<K,KHash> > {
+    static const bool value = true;
+    typedef K key_type;
+};
 
 // for recirculating tags, input is tuple<index,continue_msg>
 // output is index*my_mult cast to the right type
@@ -471,7 +831,7 @@ public:
     bool operator()(tbb::flow::continue_msg &v ) {
         --input_count;
         v = tbb::flow::continue_msg();
-        return 0 <= input_count; 
+        return 0 <= input_count;
     }
 };
 
@@ -481,17 +841,16 @@ public:
 // source nodes to a join_port, and each will generate part of the numerical series the port is expecting
 // to receive.  If there is only one source node, the series order will be maintained; if more than one,
 // this is not guaranteed.
-template<typename TT>
+template<typename TT, size_t INDEX>
 class source_body {
-    TT my_mult;
     int my_count;
     int addend;
 public:
-    source_body(TT multiplier, int init_val, int addto) : my_mult(multiplier), my_count(init_val), addend(addto) { }
-    void operator=( const source_body& other) {my_mult=other.my_mult; my_count=other.my_count; addend=other.addend;}
+    source_body(int init_val, int addto) : my_count(init_val), addend(addto) { }
+    void operator=( const source_body& other) {my_count=other.my_count; addend=other.addend;}
     bool operator()( TT &v) {
         int lc = my_count;
-        v = my_mult * (TT)my_count;
+        v = make_thingie<TT, INDEX>()(my_count);
         my_count += addend;
         return lc < Count;
     }
@@ -503,17 +862,28 @@ class tag_func {
 public:
     tag_func(TT multiplier) : my_mult(multiplier) { }
     void operator=( const tag_func& other){my_mult = other.my_mult;}
-    // operator() will return [0 .. Count) 
+    // operator() will return [0 .. Count)
     tbb::flow::tag_value operator()( TT v) {
         tbb::flow::tag_value t = tbb::flow::tag_value(v / my_mult);
         return t;
     }
 };
 
-// allocator for join_node.  This is specialized for tag_matching joins because they  require a variable number
+template <class JP>
+struct filter_out_message_based_key_matching {
+    typedef JP policy;
+};
+
+template <typename K, typename KHash>
+struct filter_out_message_based_key_matching<message_based_key_matching<K, KHash> > {
+    // To have message based key matching in join_node, the key_matchig policy should be specified.
+    typedef tbb::flow::key_matching<K, KHash> policy;
+};
+
+// allocator for join_node.  This is specialized for tag_matching and key_matching joins because they require a variable number
 // of tag_value methods passed to the constructor
 
-template<int N, typename JType, tbb::flow::graph_buffer_policy JP>
+template<int N, typename JType, class JP>
 class makeJoin {
 public:
     static JType *create(tbb::flow::graph& g) {
@@ -523,6 +893,23 @@ public:
     static void destroy(JType *p) { delete p; }
 };
 
+// for general key_matching case, each type in the tuple is a class that has the my_key field and the my_value field.
+//
+template<typename JType, typename K, typename KHash>
+class makeJoin<2,JType,tbb::flow::key_matching<K,KHash> > {
+    typedef typename JType::output_type TType;
+    typedef typename tbb::flow::tuple_element<0, TType>::type T0;
+    typedef typename tbb::flow::tuple_element<1, TType>::type T1;
+public:
+    static JType *create(tbb::flow::graph& g) {
+        JType *temp = new JType(g,
+            my_struct_key<K,T0>(),
+            my_struct_key<K,T1>()
+            );
+        return temp;
+    }
+    static void destroy(JType *p) { delete p; }
+};
 
 template<typename JType>
 class makeJoin<2,JType,tbb::flow::tag_matching> {
@@ -531,7 +918,7 @@ class makeJoin<2,JType,tbb::flow::tag_matching> {
     typedef typename tbb::flow::tuple_element<1, TType>::type T1;
 public:
     static JType *create(tbb::flow::graph& g) {
-        JType *temp = new JType(g, 
+        JType *temp = new JType(g,
             tag_func<T0>(T0(2)),
             tag_func<T1>(T1(3))
             );
@@ -541,6 +928,24 @@ public:
 };
 
 #if MAX_TUPLE_TEST_SIZE >= 3
+template<typename JType, typename K, typename KHash>
+class makeJoin<3,JType,tbb::flow::key_matching<K,KHash> > {
+    typedef typename JType::output_type TType;
+    typedef typename tbb::flow::tuple_element<0, TType>::type T0;
+    typedef typename tbb::flow::tuple_element<1, TType>::type T1;
+    typedef typename tbb::flow::tuple_element<2, TType>::type T2;
+public:
+    static JType *create(tbb::flow::graph& g) {
+        JType *temp = new JType(g,
+            my_struct_key<K,T0>(),
+            my_struct_key<K,T1>(),
+            my_struct_key<K,T2>()
+            );
+        return temp;
+    }
+    static void destroy(JType *p) { delete p; }
+};
+
 template<typename JType>
 class makeJoin<3,JType,tbb::flow::tag_matching> {
     typedef typename JType::output_type TType;
@@ -549,7 +954,7 @@ class makeJoin<3,JType,tbb::flow::tag_matching> {
     typedef typename tbb::flow::tuple_element<2, TType>::type T2;
 public:
     static JType *create(tbb::flow::graph& g) {
-        JType *temp = new JType(g, 
+        JType *temp = new JType(g,
             tag_func<T0>(T0(2)),
             tag_func<T1>(T1(3)),
             tag_func<T2>(T2(4))
@@ -558,8 +963,30 @@ public:
     }
     static void destroy(JType *p) { delete p; }
 };
+
 #endif
 #if MAX_TUPLE_TEST_SIZE >= 4
+
+template<typename JType, typename K, typename KHash>
+class makeJoin<4,JType,tbb::flow::key_matching<K,KHash> > {
+    typedef typename JType::output_type TType;
+    typedef typename tbb::flow::tuple_element<0, TType>::type T0;
+    typedef typename tbb::flow::tuple_element<1, TType>::type T1;
+    typedef typename tbb::flow::tuple_element<2, TType>::type T2;
+    typedef typename tbb::flow::tuple_element<3, TType>::type T3;
+public:
+    static JType *create(tbb::flow::graph& g) {
+        JType *temp = new JType(g,
+            my_struct_key<K,T0>(),
+            my_struct_key<K,T1>(),
+            my_struct_key<K,T2>(),
+            my_struct_key<K,T3>()
+            );
+        return temp;
+    }
+    static void destroy(JType *p) { delete p; }
+};
+
 template<typename JType>
 class makeJoin<4,JType,tbb::flow::tag_matching> {
     typedef typename JType::output_type TType;
@@ -569,7 +996,7 @@ class makeJoin<4,JType,tbb::flow::tag_matching> {
     typedef typename tbb::flow::tuple_element<3, TType>::type T3;
 public:
     static JType *create(tbb::flow::graph& g) {
-        JType *temp = new JType(g, 
+        JType *temp = new JType(g,
             tag_func<T0>(T0(2)),
             tag_func<T1>(T1(3)),
             tag_func<T2>(T2(4)),
@@ -579,8 +1006,31 @@ public:
     }
     static void destroy(JType *p) { delete p; }
 };
+
 #endif
 #if MAX_TUPLE_TEST_SIZE >= 5
+template<typename JType, typename K, typename KHash>
+class makeJoin<5,JType,tbb::flow::key_matching<K,KHash> > {
+    typedef typename JType::output_type TType;
+    typedef typename tbb::flow::tuple_element<0, TType>::type T0;
+    typedef typename tbb::flow::tuple_element<1, TType>::type T1;
+    typedef typename tbb::flow::tuple_element<2, TType>::type T2;
+    typedef typename tbb::flow::tuple_element<3, TType>::type T3;
+    typedef typename tbb::flow::tuple_element<4, TType>::type T4;
+public:
+    static JType *create(tbb::flow::graph& g) {
+        JType *temp = new JType(g,
+            my_struct_key<K,T0>(),
+            my_struct_key<K,T1>(),
+            my_struct_key<K,T2>(),
+            my_struct_key<K,T3>(),
+            my_struct_key<K,T4>()
+            );
+        return temp;
+    }
+    static void destroy(JType *p) { delete p; }
+};
+
 template<typename JType>
 class makeJoin<5,JType,tbb::flow::tag_matching> {
     typedef typename JType::output_type TType;
@@ -591,7 +1041,7 @@ class makeJoin<5,JType,tbb::flow::tag_matching> {
     typedef typename tbb::flow::tuple_element<4, TType>::type T4;
 public:
     static JType *create(tbb::flow::graph& g) {
-        JType *temp = new JType(g, 
+        JType *temp = new JType(g,
             tag_func<T0>(T0(2)),
             tag_func<T1>(T1(3)),
             tag_func<T2>(T2(4)),
@@ -604,6 +1054,30 @@ public:
 };
 #endif
 #if MAX_TUPLE_TEST_SIZE >= 6
+template<typename JType, typename K, typename KHash>
+class makeJoin<6,JType,tbb::flow::key_matching<K,KHash> > {
+    typedef typename JType::output_type TType;
+    typedef typename tbb::flow::tuple_element<0, TType>::type T0;
+    typedef typename tbb::flow::tuple_element<1, TType>::type T1;
+    typedef typename tbb::flow::tuple_element<2, TType>::type T2;
+    typedef typename tbb::flow::tuple_element<3, TType>::type T3;
+    typedef typename tbb::flow::tuple_element<4, TType>::type T4;
+    typedef typename tbb::flow::tuple_element<5, TType>::type T5;
+public:
+    static JType *create(tbb::flow::graph& g) {
+        JType *temp = new JType(g,
+            my_struct_key<K,T0>(),
+            my_struct_key<K,T1>(),
+            my_struct_key<K,T2>(),
+            my_struct_key<K,T3>(),
+            my_struct_key<K,T4>(),
+            my_struct_key<K,T5>()
+            );
+        return temp;
+    }
+    static void destroy(JType *p) { delete p; }
+};
+
 template<typename JType>
 class makeJoin<6,JType,tbb::flow::tag_matching> {
     typedef typename JType::output_type TType;
@@ -615,7 +1089,7 @@ class makeJoin<6,JType,tbb::flow::tag_matching> {
     typedef typename tbb::flow::tuple_element<5, TType>::type T5;
 public:
     static JType *create(tbb::flow::graph& g) {
-        JType *temp = new JType(g, 
+        JType *temp = new JType(g,
             tag_func<T0>(T0(2)),
             tag_func<T1>(T1(3)),
             tag_func<T2>(T2(4)),
@@ -630,6 +1104,32 @@ public:
 #endif
 
 #if MAX_TUPLE_TEST_SIZE >= 7
+template<typename JType, typename K, typename KHash>
+class makeJoin<7,JType,tbb::flow::key_matching<K,KHash> > {
+    typedef typename JType::output_type TType;
+    typedef typename tbb::flow::tuple_element<0, TType>::type T0;
+    typedef typename tbb::flow::tuple_element<1, TType>::type T1;
+    typedef typename tbb::flow::tuple_element<2, TType>::type T2;
+    typedef typename tbb::flow::tuple_element<3, TType>::type T3;
+    typedef typename tbb::flow::tuple_element<4, TType>::type T4;
+    typedef typename tbb::flow::tuple_element<5, TType>::type T5;
+    typedef typename tbb::flow::tuple_element<6, TType>::type T6;
+public:
+    static JType *create(tbb::flow::graph& g) {
+        JType *temp = new JType(g,
+            my_struct_key<K,T0>(),
+            my_struct_key<K,T1>(),
+            my_struct_key<K,T2>(),
+            my_struct_key<K,T3>(),
+            my_struct_key<K,T4>(),
+            my_struct_key<K,T5>(),
+            my_struct_key<K,T6>()
+            );
+        return temp;
+    }
+    static void destroy(JType *p) { delete p; }
+};
+
 template<typename JType>
 class makeJoin<7,JType,tbb::flow::tag_matching> {
     typedef typename JType::output_type TType;
@@ -642,7 +1142,7 @@ class makeJoin<7,JType,tbb::flow::tag_matching> {
     typedef typename tbb::flow::tuple_element<6, TType>::type T6;
 public:
     static JType *create(tbb::flow::graph& g) {
-        JType *temp = new JType(g, 
+        JType *temp = new JType(g,
             tag_func<T0>(T0(2)),
             tag_func<T1>(T1(3)),
             tag_func<T2>(T2(4)),
@@ -658,6 +1158,34 @@ public:
 #endif
 
 #if MAX_TUPLE_TEST_SIZE >= 8
+template<typename JType, typename K, typename KHash>
+class makeJoin<8,JType,tbb::flow::key_matching<K,KHash> > {
+    typedef typename JType::output_type TType;
+    typedef typename tbb::flow::tuple_element<0, TType>::type T0;
+    typedef typename tbb::flow::tuple_element<1, TType>::type T1;
+    typedef typename tbb::flow::tuple_element<2, TType>::type T2;
+    typedef typename tbb::flow::tuple_element<3, TType>::type T3;
+    typedef typename tbb::flow::tuple_element<4, TType>::type T4;
+    typedef typename tbb::flow::tuple_element<5, TType>::type T5;
+    typedef typename tbb::flow::tuple_element<6, TType>::type T6;
+    typedef typename tbb::flow::tuple_element<7, TType>::type T7;
+public:
+    static JType *create(tbb::flow::graph& g) {
+        JType *temp = new JType(g,
+            my_struct_key<K,T0>(),
+            my_struct_key<K,T1>(),
+            my_struct_key<K,T2>(),
+            my_struct_key<K,T3>(),
+            my_struct_key<K,T4>(),
+            my_struct_key<K,T5>(),
+            my_struct_key<K,T6>(),
+            my_struct_key<K,T7>()
+            );
+        return temp;
+    }
+    static void destroy(JType *p) { delete p; }
+};
+
 template<typename JType>
 class makeJoin<8,JType,tbb::flow::tag_matching> {
     typedef typename JType::output_type TType;
@@ -671,7 +1199,7 @@ class makeJoin<8,JType,tbb::flow::tag_matching> {
     typedef typename tbb::flow::tuple_element<7, TType>::type T7;
 public:
     static JType *create(tbb::flow::graph& g) {
-        JType *temp = new JType(g, 
+        JType *temp = new JType(g,
             tag_func<T0>(T0(2)),
             tag_func<T1>(T1(3)),
             tag_func<T2>(T2(4)),
@@ -688,6 +1216,36 @@ public:
 #endif
 
 #if MAX_TUPLE_TEST_SIZE >= 9
+template<typename JType, typename K, typename KHash>
+class makeJoin<9,JType,tbb::flow::key_matching<K,KHash> > {
+    typedef typename JType::output_type TType;
+    typedef typename tbb::flow::tuple_element<0, TType>::type T0;
+    typedef typename tbb::flow::tuple_element<1, TType>::type T1;
+    typedef typename tbb::flow::tuple_element<2, TType>::type T2;
+    typedef typename tbb::flow::tuple_element<3, TType>::type T3;
+    typedef typename tbb::flow::tuple_element<4, TType>::type T4;
+    typedef typename tbb::flow::tuple_element<5, TType>::type T5;
+    typedef typename tbb::flow::tuple_element<6, TType>::type T6;
+    typedef typename tbb::flow::tuple_element<7, TType>::type T7;
+    typedef typename tbb::flow::tuple_element<8, TType>::type T8;
+public:
+    static JType *create(tbb::flow::graph& g) {
+        JType *temp = new JType(g,
+            my_struct_key<K,T0>(),
+            my_struct_key<K,T1>(),
+            my_struct_key<K,T2>(),
+            my_struct_key<K,T3>(),
+            my_struct_key<K,T4>(),
+            my_struct_key<K,T5>(),
+            my_struct_key<K,T6>(),
+            my_struct_key<K,T7>(),
+            my_struct_key<K,T8>()
+            );
+        return temp;
+    }
+    static void destroy(JType *p) { delete p; }
+};
+
 template<typename JType>
 class makeJoin<9,JType,tbb::flow::tag_matching> {
     typedef typename JType::output_type TType;
@@ -702,7 +1260,7 @@ class makeJoin<9,JType,tbb::flow::tag_matching> {
     typedef typename tbb::flow::tuple_element<8, TType>::type T8;
 public:
     static JType *create(tbb::flow::graph& g) {
-        JType *temp = new JType(g, 
+        JType *temp = new JType(g,
             tag_func<T0>(T0(2)),
             tag_func<T1>(T1(3)),
             tag_func<T2>(T2(4)),
@@ -720,6 +1278,38 @@ public:
 #endif
 
 #if MAX_TUPLE_TEST_SIZE >= 10
+template<typename JType, typename K, typename KHash>
+class makeJoin<10,JType,tbb::flow::key_matching<K,KHash> > {
+    typedef typename JType::output_type TType;
+    typedef typename tbb::flow::tuple_element<0, TType>::type T0;
+    typedef typename tbb::flow::tuple_element<1, TType>::type T1;
+    typedef typename tbb::flow::tuple_element<2, TType>::type T2;
+    typedef typename tbb::flow::tuple_element<3, TType>::type T3;
+    typedef typename tbb::flow::tuple_element<4, TType>::type T4;
+    typedef typename tbb::flow::tuple_element<5, TType>::type T5;
+    typedef typename tbb::flow::tuple_element<6, TType>::type T6;
+    typedef typename tbb::flow::tuple_element<7, TType>::type T7;
+    typedef typename tbb::flow::tuple_element<8, TType>::type T8;
+    typedef typename tbb::flow::tuple_element<9, TType>::type T9;
+public:
+    static JType *create(tbb::flow::graph& g) {
+        JType *temp = new JType(g,
+            my_struct_key<K,T0>(),
+            my_struct_key<K,T1>(),
+            my_struct_key<K,T2>(),
+            my_struct_key<K,T3>(),
+            my_struct_key<K,T4>(),
+            my_struct_key<K,T5>(),
+            my_struct_key<K,T6>(),
+            my_struct_key<K,T7>(),
+            my_struct_key<K,T8>(),
+            my_struct_key<K,T9>()
+            );
+        return temp;
+    }
+    static void destroy(JType *p) { delete p; }
+};
+
 template<typename JType>
 class makeJoin<10,JType,tbb::flow::tag_matching> {
     typedef typename JType::output_type TType;
@@ -735,7 +1325,7 @@ class makeJoin<10,JType,tbb::flow::tag_matching> {
     typedef typename tbb::flow::tuple_element<9, TType>::type T9;
 public:
     static JType *create(tbb::flow::graph& g) {
-        JType *temp = new JType(g, 
+        JType *temp = new JType(g,
             tag_func<T0>(T0(2)),
             tag_func<T1>(T1(3)),
             tag_func<T2>(T2(4)),
@@ -772,7 +1362,7 @@ public:
     }
     static void add_source_nodes(join_node_type &my_join, tbb::flow::graph &g, int nInputs) {
         for(int i=0; i < nInputs; ++i) {
-            my_source_node_type *new_node = new my_source_node_type(g, source_body<IT>((IT)(ELEM+1), i, nInputs));
+            my_source_node_type *new_node = new my_source_node_type(g, source_body<IT,ELEM>(i, nInputs));
             tbb::flow::make_edge( *new_node, tbb::flow::input_port<ELEM-1>(my_join) );
             all_source_nodes[ELEM-1][i] = (void *)new_node;
         }
@@ -836,7 +1426,7 @@ public:
     }
     static void add_source_nodes(join_node_type &my_join, tbb::flow::graph &g, int nInputs) {
         for(int i=0; i < nInputs; ++i) {
-            my_source_node_type *new_node = new my_source_node_type(g, source_body<IT>((IT)2, i, nInputs));
+            my_source_node_type *new_node = new my_source_node_type(g, source_body<IT,1>(i, nInputs));
             tbb::flow::make_edge( *new_node, tbb::flow::input_port<0>(my_join) );
             all_source_nodes[0][i] = (void *)new_node;
         }
@@ -961,16 +1551,30 @@ public:
     }
 };
 
-template<typename JType, tbb::flow::graph_buffer_policy JP>
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    // Suppress "conditional expression is constant" warning.
+    #pragma warning( push )
+    #pragma warning( disable: 4127 )
+#endif
+
+template<typename JType, class JP>
 class parallel_test {
 public:
     typedef typename JType::output_type TType;
     static const int TUPLE_SIZE = tbb::flow::tuple_size<TType>::value;
-    static const tbb::flow::graph_buffer_policy jp = JP;
+    typedef typename is_key_matching_join<JP>::key_type            key_type;
+    static const bool is_key_matching = is_key_matching_join<JP>::value;
     static void test() {
         TType v;
         source_node_helper<TUPLE_SIZE,JType>::print_remark("Parallel test of join_node");
-        REMARK(" >\n");
+        REMARK(" > ");
+        if(is_key_matching) {
+            REMARK("with K == %s", name_of<typename K_deref<typename is_key_matching_join<JP>::key_type>::type >::name());
+            if(is_ref<typename is_key_matching_join<JP>::key_type>::value) {
+                REMARK("&");
+            }
+        }
+        REMARK("\n");
         for(int i=0; i < MaxPorts; ++i) {
             for(int j=0; j < MaxNSources; ++j) {
                 all_source_nodes[i][j] = NULL;
@@ -978,8 +1582,7 @@ public:
         }
         for(int nInputs = 1; nInputs <= MaxNSources; ++nInputs) {
             tbb::flow::graph g;
-            // JType my_join(g);
-            bool not_out_of_order = (nInputs == 1) && (jp != tbb::flow::tag_matching);
+            bool not_out_of_order = (nInputs == 1) && (!is_key_matching);
             JType* my_join = makeJoin<TUPLE_SIZE,JType,JP>::create(g);
             tbb::flow::queue_node<TType> outq1(g);
             tbb::flow::queue_node<TType> outq2(g);
@@ -1034,24 +1637,28 @@ public:
         tbb::flow::make_edge( *new_node, tbb::flow::get<ELEM-1>(my_join.input_ports()) );
         all_source_nodes[ELEM-1][0] = (void *)new_node;
     }
+
     static void fill_one_queue(int maxVal) {
         // fill queue to "left" of me
         my_queue_node_type *qptr = reinterpret_cast<my_queue_node_type *>(all_source_nodes[ELEM-1][0]);
         serial_queue_helper<ELEM-1,JType>::fill_one_queue(maxVal);
         for(int i = 0; i < maxVal; ++i) {
-            ASSERT(qptr->try_put((IT)(i*(ELEM+1))), NULL);
+            ASSERT(qptr->try_put(make_thingie<IT,ELEM>()(i)), NULL);
         }
     }
+
     static void put_one_queue_val(int myVal) {
         // put this val to my "left".
         serial_queue_helper<ELEM-1,JType>::put_one_queue_val(myVal);
         my_queue_node_type *qptr = reinterpret_cast<my_queue_node_type *>(all_source_nodes[ELEM-1][0]);
-        ASSERT(qptr->try_put((IT)(myVal*(ELEM+1))), NULL);
+        ASSERT(qptr->try_put(make_thingie<IT,ELEM>()(myVal)), NULL);
     }
+
     static void check_queue_value(int i, TT &v) {
         serial_queue_helper<ELEM-1,JType>::check_queue_value(i, v);
-        ASSERT( tbb::flow::get<ELEM-1>(v) == (IT)(i * (ELEM+1)), NULL);
+        ASSERT( cast_from<IT>::my_int_val(tbb::flow::get<ELEM-1>(v)) == i * (ELEM+1), NULL);
     }
+
     static void remove_queue_nodes(JType &my_join) {
         my_queue_node_type *vptr = reinterpret_cast<my_queue_node_type *>(all_source_nodes[ELEM-1][0]);
         tbb::flow::remove_edge( *vptr, tbb::flow::get<ELEM-1>(my_join.input_ports()) );
@@ -1069,24 +1676,30 @@ public:
     static void print_remark() {
         REMARK("Serial test of join_node< %s", name_of<IT>::name());
     }
+
     static void add_queue_nodes(tbb::flow::graph &g, JType &my_join) {
         my_queue_node_type *new_node = new my_queue_node_type(g);
         tbb::flow::make_edge( *new_node, tbb::flow::input_port<0>(my_join) );
         all_source_nodes[0][0] = (void *)new_node;
     }
+
     static void fill_one_queue(int maxVal) {
         my_queue_node_type *qptr = reinterpret_cast<my_queue_node_type *>(all_source_nodes[0][0]);
         for(int i = 0; i < maxVal; ++i) {
-            ASSERT(qptr->try_put((IT)(i*2)), NULL);
+            ASSERT(qptr->try_put(make_thingie<IT,1>()(i)), NULL);
         }
     }
+
     static void put_one_queue_val(int myVal) {
         my_queue_node_type *qptr = reinterpret_cast<my_queue_node_type *>(all_source_nodes[0][0]);
-        ASSERT(qptr->try_put((IT)(myVal*2)), NULL);
+        IT my_val = make_thingie<IT,1>()(myVal);
+        ASSERT(qptr->try_put(my_val), NULL);
     }
+
     static void check_queue_value(int i, TT &v) {
-        ASSERT( tbb::flow::get<0>(v) == (IT)(i*2), NULL);
+        ASSERT( cast_from<IT>::my_int_val(tbb::flow::get<0>(v)) == i * 2, NULL);
     }
+
     static void remove_queue_nodes(JType &my_join) {
         my_queue_node_type *vptr = reinterpret_cast<my_queue_node_type *>(all_source_nodes[0][0]);
         tbb::flow::remove_edge( *vptr, tbb::flow::get<0>(my_join.input_ports()) );
@@ -1099,10 +1712,11 @@ public:
 //   * put to buffer before port0, then put to buffer before port1, ...
 //   * fill buffer before port0 then fill buffer before port1, ...
 
-template<typename JType, tbb::flow::graph_buffer_policy JP>
+template<typename JType, class JP>
 void test_one_serial( JType &my_join, tbb::flow::graph &g) {
     typedef typename JType::output_type TType;
     static const int TUPLE_SIZE = tbb::flow::tuple_size<TType>::value;
+    bool is_key_matching = is_key_matching_join<JP>::value;
     std::vector<bool> flags;
     serial_queue_helper<TUPLE_SIZE, JType>::add_queue_nodes(g,my_join);
     typedef TType q3_input_type;
@@ -1118,12 +1732,11 @@ void test_one_serial( JType &my_join, tbb::flow::graph &g) {
     }
 
     g.wait_for_all();
-    tbb::flow::graph_buffer_policy jp = JP;
     for (int i = 0; i < Count; ++i ) {
         q3_input_type v;
         g.wait_for_all();
         ASSERT(q3.try_get( v ), "Error in try_get()");
-        if(jp == tbb::flow::tag_matching) {
+        if(is_key_matching) {
             // because we look up tags in the hash table, the output may be out of order.
             int j = int(tbb::flow::get<0>(v)) / 2;  // figure what the index should be
             serial_queue_helper<TUPLE_SIZE,JType>::check_queue_value(j, v);
@@ -1134,7 +1747,7 @@ void test_one_serial( JType &my_join, tbb::flow::graph &g) {
         }
     }
 
-    if(jp == tbb::flow::tag_matching) {
+    if(is_key_matching) {
         for(int i = 0; i < Count; ++i) {
             ASSERT(flags[i], NULL);
             flags[i] = false;
@@ -1149,7 +1762,7 @@ void test_one_serial( JType &my_join, tbb::flow::graph &g) {
         q3_input_type v;
         g.wait_for_all();
         ASSERT(q3.try_get( v ), "Error in try_get()");
-        if(jp == tbb::flow::tag_matching) {
+        if(is_key_matching) {
             int j = int(tbb::flow::get<0>(v)) / 2;
             serial_queue_helper<TUPLE_SIZE,JType>::check_queue_value(j, v);
             flags[i] = true;
@@ -1159,7 +1772,7 @@ void test_one_serial( JType &my_join, tbb::flow::graph &g) {
         }
     }
 
-    if(jp == tbb::flow::tag_matching) {
+    if(is_key_matching) {
         for(int i = 0; i < Count; ++i) {
             ASSERT(flags[i], NULL);
         }
@@ -1169,7 +1782,7 @@ void test_one_serial( JType &my_join, tbb::flow::graph &g) {
 
 }
 
-template<typename JType, tbb::flow::graph_buffer_policy JP>
+template<typename JType, class JP>
 class serial_test {
     typedef typename JType::output_type TType;
     static const int TUPLE_SIZE = tbb::flow::tuple_size<TType>::value;
@@ -1178,9 +1791,17 @@ public:
 static void test() {
     tbb::flow::graph g;
     std::vector<bool> flags;
+    bool is_key_matching = is_key_matching_join<JP>::value;
     flags.reserve(Count);
     JType* my_join = makeJoin<TUPLE_SIZE,JType,JP>::create(g);
-    serial_queue_helper<TUPLE_SIZE, JType>::print_remark(); REMARK(" >\n");
+    serial_queue_helper<TUPLE_SIZE, JType>::print_remark(); REMARK(" >");
+    if(is_key_matching) {
+        REMARK("with K == %s", name_of<typename K_deref<typename is_key_matching_join<JP>::key_type>::type >::name());
+        if(is_ref<typename is_key_matching_join<JP>::key_type>::value) {
+            REMARK("&");
+        }
+    }
+    REMARK("\n");
 
     test_one_serial<JType,JP>( *my_join, g);
     // build the vector with copy construction from the used join node.
@@ -1196,13 +1817,17 @@ static void test() {
 
 }; // serial_test
 
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    #pragma warning( pop )
+#endif
+
 template<
-      template<typename, tbb::flow::graph_buffer_policy> class TestType,  // serial_test or parallel_test
+      template<typename, class > class TestType,  // serial_test or parallel_test
       typename OutputTupleType,           // type of the output of the join
-      tbb::flow::graph_buffer_policy J>                 // graph_buffer_policy (reserving, queueing or tag_matching)
+      class J>                 // graph_buffer_policy (reserving, queueing, tag_matching or key_matching)
 class generate_test {
 public:
-    typedef tbb::flow::join_node<OutputTupleType,J> join_node_type;
+    typedef tbb::flow::join_node<OutputTupleType,typename filter_out_message_based_key_matching<J>::policy> join_node_type;
     static void do_test() {
         TestType<join_node_type,J>::test();
     }
@@ -1217,7 +1842,7 @@ public:
     }
 };
 
-template<tbb::flow::graph_buffer_policy JP>
+template<class JP>
 void test_input_port_policies();
 
 // join_node (reserving) does not consume inputs until an item is available at
@@ -1440,7 +2065,7 @@ void test_input_port_policies<tbb::flow::tag_matching>() {
     JoinNodeType testJoinNode(g, myTagValue<int>(), myTagValue<check_type<int> >());
     tbb::flow::queue_node<CheckTupleType> checkTupleQueue0(g);
     tbb::flow::queue_node<CheckTupleType> checkTupleQueue1(g);
-    { 
+    {
         Check<check_type<int> > my_check;
 
 
@@ -1471,11 +2096,10 @@ void test_input_port_policies<tbb::flow::tag_matching>() {
 #endif
 
         // we'll put four discrete values in the inputs to the join_node.  Each
-        // set of inputs should result in one output.  (NO_TAG is currently defined
-        // to be tag_value(-1), so zero is an allowed tag_value.)
+        // set of inputs should result in one output.
         for(int loop = 0; loop < 4; ++loop) {
             // place one item in intInputQueue
-            ASSERT(intInputQueue.try_put(loop), "Error putting to intInputQueue"); 
+            ASSERT(intInputQueue.try_put(loop), "Error putting to intInputQueue");
             // attach intInputQueue to intEmptyTestQueue
             tbb::flow::make_edge( intInputQueue, intEmptyTestQueue );
             // intEmptyTestQueue should not have an item in it.  (the join consumed it.)
@@ -1504,7 +2128,6 @@ void test_input_port_policies<tbb::flow::tag_matching>() {
             {
                 int intVal1;
                 check_type<int> checkVal1;
-                //REMARK("loop == %d point 4.7 count is %d %d\n", loop, my_check(), my_check(1) );  // +1
                 ASSERT(!intEmptyTestQueue.try_get(intVal1), "intInputQueue still had value in it");
                 ASSERT(!checkEmptyTestQueue.try_get(checkVal1), "checkInputQueue still had value in it");
             }
@@ -1520,7 +2143,7 @@ void test_input_port_policies<tbb::flow::tag_matching>() {
 
         for(int loop = 4; loop < 4+nValues; ++loop) {
             // place one item in intInputQueue
-            ASSERT(intInputQueue.try_put(loop), "Error putting to intInputQueue"); 
+            ASSERT(intInputQueue.try_put(loop), "Error putting to intInputQueue");
             g.wait_for_all();
             {
                 CheckTupleType t3;
@@ -1553,8 +2176,7 @@ int TestMain() {
 #else
     REMARK("  Using platform tuple\n");
 #endif
-
-
+    TestTaggedBuffers();
     test_input_port_policies<tbb::flow::reserving>();
     test_input_port_policies<tbb::flow::queueing>();
     test_input_port_policies<tbb::flow::tag_matching>();
@@ -1651,13 +2273,88 @@ int TestMain() {
        generate_recirc_test<tbb::flow::tuple<double, double, int, int, short> >::do_test();
 #endif
    }
+        REMARK("key_matching\n");
+       generate_test<serial_test,tbb::flow::tuple<MyKeyFirst<int,double>,MyKeySecond<int,float> >,tbb::flow::key_matching<int> >::do_test();
+       generate_test<serial_test,tbb::flow::tuple<MyKeyFirst<std::string,double>,MyKeySecond<std::string,float> >,tbb::flow::key_matching<std::string> >::do_test();
+#if MAX_TUPLE_TEST_SIZE >= 3
+       generate_test<serial_test,tbb::flow::tuple<MyKeyFirst<std::string,double>,MyKeySecond<std::string,float>, MyKeyWithBrokenMessageKey<std::string, int> >,tbb::flow::key_matching<std::string&> >::do_test();
+#endif
+#if MAX_TUPLE_TEST_SIZE >= 7
+       generate_test<serial_test,tbb::flow::tuple<
+           MyKeyFirst<std::string,double>,
+           MyKeyWithBrokenMessageKey<std::string,int>,
+           MyKeyFirst<std::string, int>,
+           MyKeySecond<std::string,size_t>,
+           MyKeyWithBrokenMessageKey<std::string, int>,
+           MyKeySecond<std::string,short>,
+           MyKeySecond<std::string,threebyte>
+        > ,tbb::flow::key_matching<std::string&> >::do_test();
+#endif
+
+       generate_test<parallel_test,tbb::flow::tuple<MyKeyFirst<int,double>,MyKeySecond<int,float> >,tbb::flow::key_matching<int> >::do_test();
+       generate_test<parallel_test,tbb::flow::tuple<MyKeyFirst<int,double>,MyKeySecond<int,float> >,tbb::flow::key_matching<int&> >::do_test();
+       generate_test<parallel_test,tbb::flow::tuple<MyKeyFirst<std::string,double>,MyKeySecond<std::string,float> >,tbb::flow::key_matching<std::string&> >::do_test();
+#if MAX_TUPLE_TEST_SIZE >= 10
+       generate_test<parallel_test,tbb::flow::tuple<
+           MyKeyFirst<std::string,double>,
+           MyKeySecond<std::string,int>,
+           MyKeyFirst<std::string, int>,
+           MyKeyWithBrokenMessageKey<std::string,size_t>,
+           MyKeyWithBrokenMessageKey<std::string, int>,
+           MyKeySecond<std::string,short>,
+           MyKeySecond<std::string,threebyte>,
+           MyKeyFirst<std::string, int>,
+           MyKeySecond<std::string,threebyte>,
+           MyKeyWithBrokenMessageKey<std::string,size_t>
+        > ,tbb::flow::key_matching<std::string&> >::do_test();
+#endif
+
+        REMARK("message based key_matching\n");
+       generate_test<serial_test,tbb::flow::tuple<MyMessageKeyWithBrokenKey<int,double>,MyMessageKeyWithoutKey<int,float> >,message_based_key_matching<int> >::do_test();
+       generate_test<serial_test,tbb::flow::tuple<MyMessageKeyWithoutKeyMethod<std::string,double>,MyMessageKeyWithBrokenKey<std::string,float> >,message_based_key_matching<std::string> >::do_test();
+#if !__TBB_MIC_OFFLOAD_TEST_COMPILATION_BROKEN
+#if MAX_TUPLE_TEST_SIZE >= 3
+       generate_test<serial_test,tbb::flow::tuple<MyMessageKeyWithoutKey<std::string,double>,MyMessageKeyWithoutKeyMethod<std::string,float>,MyMessageKeyWithBrokenKey<std::string, int> >,message_based_key_matching<std::string&> >::do_test();
+#endif
+#if MAX_TUPLE_TEST_SIZE >= 7
+       generate_test<serial_test,tbb::flow::tuple<
+           MyMessageKeyWithoutKey<std::string,double>,
+           MyMessageKeyWithoutKeyMethod<std::string,int>,
+           MyMessageKeyWithBrokenKey<std::string, int>,
+           MyMessageKeyWithoutKey<std::string,size_t>,
+           MyMessageKeyWithoutKeyMethod<std::string, int>,
+           MyMessageKeyWithBrokenKey<std::string,short>,
+           MyMessageKeyWithoutKey<std::string,threebyte>
+        > ,message_based_key_matching<std::string&> >::do_test();
+#endif
+
+       generate_test<parallel_test,tbb::flow::tuple<MyMessageKeyWithBrokenKey<int,double>,MyMessageKeyWithoutKey<int,float> >,message_based_key_matching<int> >::do_test();
+       generate_test<parallel_test,tbb::flow::tuple<MyMessageKeyWithoutKeyMethod<int,double>,MyMessageKeyWithBrokenKey<int,float> >,message_based_key_matching<int&> >::do_test();
+       generate_test<parallel_test,tbb::flow::tuple<MyMessageKeyWithoutKey<std::string,double>,MyMessageKeyWithoutKeyMethod<std::string,float> >,message_based_key_matching<std::string&> >::do_test();
+
+#if MAX_TUPLE_TEST_SIZE >= 10
+       generate_test<parallel_test,tbb::flow::tuple<
+           MyMessageKeyWithoutKeyMethod<std::string,double>,
+           MyMessageKeyWithBrokenKey<std::string,int>,
+           MyMessageKeyWithoutKey<std::string, int>,
+           MyMessageKeyWithoutKeyMethod<std::string,size_t>,
+           MyMessageKeyWithBrokenKey<std::string, int>,
+           MyMessageKeyWithoutKeyMethod<std::string,short>,
+           MyMessageKeyWithoutKeyMethod<std::string,threebyte>,
+           MyMessageKeyWithBrokenKey<std::string, int>,
+           MyMessageKeyWithoutKeyMethod<std::string,threebyte>,
+           MyMessageKeyWithBrokenKey<std::string,size_t>
+        > ,message_based_key_matching<std::string&> >::do_test();
+#endif
+#endif /* __TBB_MIC_OFFLOAD_TEST_COMPILATION_BROKEN */
+
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
    REMARK("test queueing extract\n");
-   test_join_extract<int, tbb::flow::join_node< tbb::flow::tuple<int,int>, tbb::flow::queueing> >().run_tests(); 
+   test_join_extract<int, tbb::flow::join_node< tbb::flow::tuple<int,int>, tbb::flow::queueing> >().run_tests();
    REMARK("test tag_matching extract\n");
-   test_join_extract<int, tbb::flow::join_node< tbb::flow::tuple<int,int>, tbb::flow::tag_matching> >().run_tests(); 
+   test_join_extract<int, tbb::flow::join_node< tbb::flow::tuple<int,int>, tbb::flow::tag_matching> >().run_tests();
    REMARK("test reserving extract\n");
-   test_join_extract<int, tbb::flow::join_node< tbb::flow::tuple<int,int>, tbb::flow::reserving> >().run_tests(); 
+   test_join_extract<int, tbb::flow::join_node< tbb::flow::tuple<int,int>, tbb::flow::reserving> >().run_tests();
 #endif
    return Harness::Done;
 }
diff --git a/src/test/test_lambda.cpp b/src/test/test_lambda.cpp
index 384e556..1da0a17 100644
--- a/src/test/test_lambda.cpp
+++ b/src/test/test_lambda.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "harness_defs.h"
@@ -211,7 +211,7 @@ int TestMain () {
                                  return std::make_pair(x.first<y.first?x.first:y.first,
                                                        x.second>y.second?x.second:y.second);
                              });
-        ASSERT(minmax_result_c.first==0 && minmax_result_c.second==999, 
+        ASSERT(minmax_result_c.first==0 && minmax_result_c.second==999,
                "combinable w/lambda failed.\n");
         REMARK("passed.\n");
 
diff --git a/src/test/test_limiter_node.cpp b/src/test/test_limiter_node.cpp
index 6610b9e..cf16c6a 100644
--- a/src/test/test_limiter_node.cpp
+++ b/src/test/test_limiter_node.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "harness.h"
@@ -29,33 +29,32 @@
 const int L = 10;
 const int N = 1000;
 
+using tbb::flow::internal::SUCCESSFULLY_ENQUEUED;
+
 template< typename T >
 struct serial_receiver : public tbb::flow::receiver<T> {
    T next_value;
 
    serial_receiver() : next_value(T(0)) {}
 
-   /* override */ tbb::task *try_put_task( const T &v ) {
+   tbb::task *try_put_task( const T &v ) __TBB_override {
        ASSERT( next_value++  == v, NULL );
-       return const_cast<tbb::task *>(tbb::flow::interface7::SUCCESSFULLY_ENQUEUED);
+       return const_cast<tbb::task *>(SUCCESSFULLY_ENQUEUED);
    }
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     typedef typename tbb::flow::receiver<T>::built_predecessors_type built_predecessors_type;
     typedef typename tbb::flow::receiver<T>::predecessor_list_type predecessor_list_type;
+    typedef typename tbb::flow::receiver<T>::predecessor_type predecessor_type;
     built_predecessors_type bpt;
-    built_predecessors_type &built_predecessors() { return bpt; }
-    void internal_add_built_predecessor( tbb::flow::sender<T> & ) { }
-    void internal_delete_built_predecessor( tbb::flow::sender<T> & ) { }
-    void copy_predecessors( predecessor_list_type & ) { }
-    size_t predecessor_count() { return 0; }
+    built_predecessors_type &built_predecessors() __TBB_override { return bpt; }
+    void internal_add_built_predecessor( predecessor_type & ) __TBB_override { }
+    void internal_delete_built_predecessor( predecessor_type & ) __TBB_override { }
+    void copy_predecessors( predecessor_list_type & ) __TBB_override { }
+    size_t predecessor_count() __TBB_override { return 0; }
 #endif
 
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-   /*override*/void reset_receiver(tbb::flow::reset_flags /*f*/) {next_value = T(0);}
-#else
-   /*override*/void reset_receiver() {next_value = T(0);}
-#endif
+   void reset_receiver(tbb::flow::reset_flags /*f*/) __TBB_override {next_value = T(0);}
 };
 
 template< typename T >
@@ -65,41 +64,41 @@ struct parallel_receiver : public tbb::flow::receiver<T> {
 
    parallel_receiver() { my_count = 0; }
 
-   /* override */ tbb::task *try_put_task( const T &/*v*/ ) {
+   tbb::task *try_put_task( const T &/*v*/ ) __TBB_override {
        ++my_count;
-       return const_cast<tbb::task *>(tbb::flow::interface7::SUCCESSFULLY_ENQUEUED);
+       return const_cast<tbb::task *>(tbb::flow::internal::SUCCESSFULLY_ENQUEUED);
    }
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     typedef typename tbb::flow::receiver<T>::built_predecessors_type built_predecessors_type;
     typedef typename tbb::flow::receiver<T>::predecessor_list_type predecessor_list_type;
+    typedef typename tbb::flow::receiver<T>::predecessor_type predecessor_type;
     built_predecessors_type bpt;
-    built_predecessors_type &built_predecessors() { return bpt; }
-    void internal_add_built_predecessor( tbb::flow::sender<T> & ) { }
-    void internal_delete_built_predecessor( tbb::flow::sender<T> & ) { }
-    void copy_predecessors( predecessor_list_type & ) { }
-    size_t predecessor_count( ) { return 0; }
-   /*override*/void reset_receiver(tbb::flow::reset_flags /*f*/) {my_count = 0;}
-#else
-   /*override*/void reset_receiver() {my_count = 0;}
+    built_predecessors_type &built_predecessors() __TBB_override { return bpt; }
+    void internal_add_built_predecessor( predecessor_type & ) __TBB_override { }
+    void internal_delete_built_predecessor( predecessor_type & ) __TBB_override { }
+    void copy_predecessors( predecessor_list_type & ) __TBB_override { }
+    size_t predecessor_count( ) __TBB_override { return 0; }
 #endif
+    void reset_receiver(tbb::flow::reset_flags /*f*/) __TBB_override {my_count = 0;}
 };
 
 template< typename T >
 struct empty_sender : public tbb::flow::sender<T> {
-        /* override */ bool register_successor( tbb::flow::receiver<T> & ) { return false; }
-        /* override */ bool remove_successor( tbb::flow::receiver<T> & ) { return false; }
+        typedef typename tbb::flow::sender<T>::successor_type successor_type;
+
+        bool register_successor( successor_type & ) __TBB_override { return false; }
+        bool remove_successor( successor_type & ) __TBB_override { return false; }
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
         typedef typename tbb::flow::sender<T>::built_successors_type built_successors_type;
         typedef typename tbb::flow::sender<T>::successor_list_type successor_list_type;
         built_successors_type bst;
-        built_successors_type &built_successors() { return bst; }
-        void    internal_add_built_successor( tbb::flow::receiver<T> & ) { }
-        void internal_delete_built_successor( tbb::flow::receiver<T> & ) { }
-        void copy_successors( successor_list_type & ) { }
-        size_t successor_count() { return 0; }
+        built_successors_type &built_successors() __TBB_override { return bst; }
+        void    internal_add_built_successor( successor_type & ) __TBB_override { }
+        void internal_delete_built_successor( successor_type & ) __TBB_override { }
+        void copy_successors( successor_list_type & ) __TBB_override { }
+        size_t successor_count() __TBB_override { return 0; }
 #endif
-
 };
 
 
@@ -109,14 +108,14 @@ struct put_body : NoAssign {
     tbb::flow::limiter_node<T> &my_lim;
     tbb::atomic<int> &my_accept_count;
 
-    put_body( tbb::flow::limiter_node<T> &lim, tbb::atomic<int> &accept_count ) : 
+    put_body( tbb::flow::limiter_node<T> &lim, tbb::atomic<int> &accept_count ) :
         my_lim(lim), my_accept_count(accept_count) {}
 
     void operator()( int ) const {
         for ( int i = 0; i < L; ++i ) {
             bool msg = my_lim.try_put( T(i) );
             if ( msg == true )
-               ++my_accept_count; 
+               ++my_accept_count;
         }
     }
 };
@@ -127,7 +126,7 @@ struct put_dec_body : NoAssign {
     tbb::flow::limiter_node<T> &my_lim;
     tbb::atomic<int> &my_accept_count;
 
-    put_dec_body( tbb::flow::limiter_node<T> &lim, tbb::atomic<int> &accept_count ) : 
+    put_dec_body( tbb::flow::limiter_node<T> &lim, tbb::atomic<int> &accept_count ) :
         my_lim(lim), my_accept_count(accept_count) {}
 
     void operator()( int ) const {
@@ -138,7 +137,7 @@ struct put_dec_body : NoAssign {
                 ++local_accept_count;
                 ++my_accept_count;
                 my_lim.decrement.try_put( tbb::flow::continue_msg() );
-            } 
+            }
         }
     }
 
@@ -156,7 +155,7 @@ void test_puts_with_decrements( int num_threads, tbb::flow::limiter_node< T >& l
     ASSERT(lim.decrement.predecessor_count() == 1, NULL);
     ASSERT(lim.successor_count() == 1, NULL);
     ASSERT(lim.predecessor_count() == 0, NULL);
-    typename tbb::flow::interface7::internal::decrementer<tbb::flow::limiter_node<T> >::predecessor_list_type dec_preds;
+    typename tbb::flow::interface9::internal::decrementer<tbb::flow::limiter_node<T> >::predecessor_list_type dec_preds;
     lim.decrement.copy_predecessors(dec_preds);
     ASSERT(dec_preds.size() == 1, NULL);
 #endif
@@ -172,11 +171,11 @@ void test_puts_with_decrements( int num_threads, tbb::flow::limiter_node< T >& l
 //
 // limiter only forwards below the limit, multiple parallel senders / single receiver
 // mutiple parallel senders that put to decrement at each accept, limiter accepts new messages
-// 
-// 
+//
+//
 template< typename T >
 int test_parallel(int num_threads) {
- 
+
    // test puts with no decrements
    for ( int i = 0; i < L; ++i ) {
        tbb::flow::graph g;
@@ -209,10 +208,10 @@ int test_parallel(int num_threads) {
 //
 // limiter only forwards below the limit, single sender / single receiver
 // at reject, a put to decrement, will cause next message to be accepted
-// 
+//
 template< typename T >
 int test_serial() {
- 
+
    // test puts with no decrements
    for ( int i = 0; i < L; ++i ) {
        tbb::flow::graph g;
@@ -375,7 +374,7 @@ void test_reserve_release_messages() {
     //edges
     make_edge(input_queue, limit);
     make_edge(limit, output_queue);
-    make_edge(broad,limit.decrement); 
+    make_edge(broad,limit.decrement);
 
     int list[4] = {19, 33, 72, 98}; //list to be put to the input queue
 
@@ -519,7 +518,7 @@ void test_extract() {
 }
 #endif  // TBB_PREVIEW_FLOW_GRAPH_FEATURES
 
-int TestMain() { 
+int TestMain() {
     for (int i = 1; i <= 8; ++i) {
         tbb::task_scheduler_init init(i);
         test_serial<int>();
diff --git a/src/test/test_malloc_atexit.cpp b/src/test/test_malloc_atexit.cpp
index b2013c0..2f3776d 100644
--- a/src/test/test_malloc_atexit.cpp
+++ b/src/test/test_malloc_atexit.cpp
@@ -1,38 +1,33 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
-/* Regression test against a bug in TBB allocator manifested when 
+/* Regression test against a bug in TBB allocator manifested when
    dynamic library calls atexit() or registers dtors of static objects.
-   If the allocator is not initialized yet, we can get deadlock, 
+   If the allocator is not initialized yet, we can get deadlock,
    because allocator library has static object dtors as well, they
-   registered during allocator initialization, and atexit() is protected 
+   registered during allocator initialization, and atexit() is protected
    by non-recursive mutex in some versions of GLIBC.
  */
 
 #include <stdlib.h>
-#include "../tbbmalloc/proxy.h" // __TBB_malloc_safer_msize
-#include "tbb/tbb_config.h"     // for __TBB_WIN8UI_SUPPORT
-
-#if !(_WIN32||_WIN64 || MALLOC_UNIXLIKE_OVERLOAD_ENABLED || MALLOC_ZONE_OVERLOAD_ENABLED) || __TBB_WIN8UI_SUPPORT || __MINGW32__ || __MINGW64__
-#define HARNESS_SKIP_TEST 1
-#endif
+#include "harness_allocator_overload.h"
 
 // __TBB_malloc_safer_msize() returns 0 for unknown objects,
 // thus we can detect ownership
@@ -156,9 +151,6 @@ int TestMain () {
 #ifdef _PGO_INSTRUMENT
     REPORT("Known issue: test_malloc_atexit hangs if compiled with -prof-genx\n");
     return Harness::Skipped;
-#elif __TBB_MIC_OFFLOAD
-    REPORT("Known issue: libmalloc_proxy.so is loaded too late in the offload mode on the target when linked via -lmalloc_proxy\n");
-    return Harness::Skipped;
 #else
     ASSERT( dll_isMallocOverloaded(), "malloc was not replaced" );
     ASSERT( exe_isMallocOverloaded(), "malloc was not replaced" );
diff --git a/src/test/test_malloc_compliance.cpp b/src/test/test_malloc_compliance.cpp
index 1bf124e..045fda3 100644
--- a/src/test/test_malloc_compliance.cpp
+++ b/src/test/test_malloc_compliance.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 const unsigned MByte = 1024*1024;
@@ -165,25 +165,29 @@ typedef void* TestAlignedMalloc(size_t size, size_t alignment);
 typedef void* TestAlignedRealloc(void* memblock, size_t size, size_t alignment);
 typedef void  TestAlignedFree(void* memblock);
 
-TestMalloc*  Tmalloc;
-TestCalloc*  Tcalloc;
-TestRealloc* Trealloc;
+// pointers to tested functions
+TestMalloc*  Rmalloc;
+TestCalloc*  Rcalloc;
+TestRealloc* Rrealloc;
 TestFree*    Tfree;
+TestPosixMemalign*  Rposix_memalign;
+TestAlignedMalloc*  Raligned_malloc;
+TestAlignedRealloc* Raligned_realloc;
 TestAlignedFree* Taligned_free;
-// call alignment-related function via pointer and check result's alignment
+
+// call functions via pointer and check result's alignment
+void* Tmalloc(size_t size);
+void* Tcalloc(size_t num, size_t size);
+void* Trealloc(void* memblock, size_t size);
 int   Tposix_memalign(void **memptr, size_t alignment, size_t size);
 void* Taligned_malloc(size_t size, size_t alignment);
 void* Taligned_realloc(void* memblock, size_t size, size_t alignment);
 
-// pointers to alignment-related functions used while testing
-TestPosixMemalign*  Rposix_memalign;
-TestAlignedMalloc*  Raligned_malloc;
-TestAlignedRealloc* Raligned_realloc;
 
 bool error_occurred = false;
 
 #if __APPLE__
-// Tests that use the variables are skipped on OS X*
+// Tests that use the variables are skipped on macOS*
 #else
 const size_t COUNT_ELEM_CALLOC = 2;
 const int COUNT_TESTS = 1000;
@@ -214,9 +218,7 @@ public:
         {
             srand((UINT)time(NULL));
             FullLog=isVerbose;
-            rand();
         }
-    void InvariantDataRealloc(bool aligned); //realloc does not change data
     void NULLReturn(UINT MinSize, UINT MaxSize, int total_threads); // NULL pointer + check errno
     void UniquePointer(); // unique pointer - check with padding
     void AddrArifm(); // unique pointer - check with pointer arithmetic
@@ -254,19 +256,23 @@ struct RoundRobin: NoAssign {
 
 bool CMemTest::firstTime = true;
 
+inline size_t choose_random_alignment() {
+    return sizeof(void*)<<(rand() % POWERS_OF_2);
+}
+
 static void setSystemAllocs()
 {
-    Tmalloc=malloc;
-    Trealloc=realloc;
-    Tcalloc=calloc;
+    Rmalloc=malloc;
+    Rrealloc=realloc;
+    Rcalloc=calloc;
     Tfree=free;
 #if _WIN32 || _WIN64
     Raligned_malloc=_aligned_malloc;
     Raligned_realloc=_aligned_realloc;
     Taligned_free=_aligned_free;
     Rposix_memalign=0;
-#elif  __APPLE__ || __sun || __ANDROID__ 
-// OS X*, Solaris, and Android don't have posix_memalign
+#elif  __APPLE__ || __sun || __ANDROID__
+// macOS, Solaris*, and Android* don't have posix_memalign
     Raligned_malloc=0;
     Raligned_realloc=0;
     Taligned_free=0;
@@ -359,14 +365,76 @@ void CheckArgumentsOverflow()
     ASSERT_ERRNO(errno==ENOMEM, NULL);
 }
 
+void InvariantDataRealloc(bool aligned, size_t maxAllocSize, bool checkData)
+{
+    Harness::FastRandom fastRandom(1);
+    size_t size = 0, start = 0;
+    char *ptr = NULL,
+        // master to create copies and compare ralloc result against it
+        *master = (char*)Tmalloc(2*maxAllocSize);
+
+    ASSERT(master, NULL);
+    ASSERT(!(2*maxAllocSize%sizeof(unsigned short)),
+           "The loop below expects that 2*maxAllocSize contains sizeof(unsigned short)");
+    for (size_t k = 0; k<2*maxAllocSize; k+=sizeof(unsigned short))
+        *(unsigned short*)(master+k) = fastRandom.get();
+
+    for (int i=0; i<100; i++) {
+        // don't want sizeNew==0 here
+        const size_t sizeNew = fastRandom.get() % (maxAllocSize-1) + 1;
+        char *ptrNew = aligned?
+            (char*)Taligned_realloc(ptr, sizeNew, choose_random_alignment())
+            : (char*)Trealloc(ptr, sizeNew);
+        ASSERT(ptrNew, NULL);
+        // check that old data not changed
+        if (checkData)
+            ASSERT(!memcmp(ptrNew, master+start, min(size, sizeNew)), "broken data");
+
+        // prepare fresh data, copying them from random position in master
+        size = sizeNew;
+        ptr = ptrNew;
+        if (checkData) {
+            start = fastRandom.get() % maxAllocSize;
+            memcpy(ptr, master+start, size);
+        }
+    }
+    if (aligned)
+        Taligned_realloc(ptr, 0, choose_random_alignment());
+    else
+        Trealloc(ptr, 0);
+    Tfree(master);
+}
+
+#include "harness_memory.h"
+
+void CheckReallocLeak()
+{
+    int i;
+    const int ITER_TO_STABILITY = 10;
+    // do bootstrap
+    for (int k=0; k<3; k++)
+        InvariantDataRealloc(/*aligned=*/false, 128*MByte, /*checkData=*/false);
+    size_t prev = GetMemoryUsage(peakUsage);
+    // expect realloc to not increase peak memory consumption after ITER_TO_STABILITY-1 iterations
+    for (i=0; i<ITER_TO_STABILITY; i++) {
+        for (int k=0; k<3; k++)
+            InvariantDataRealloc(/*aligned=*/false, 128*MByte, /*checkData=*/false);
+        size_t curr = GetMemoryUsage(peakUsage);
+        if (prev == curr)
+            break;
+        prev = curr;
+    }
+    ASSERT(i < ITER_TO_STABILITY, "Can't stabilize memory consumption.");
+}
+
 HARNESS_EXPORT
 int main(int argc, char* argv[]) {
     argC=argc;
     argV=argv;
     MaxThread = MinThread = 1;
-    Tmalloc=scalable_malloc;
-    Trealloc=scalable_realloc;
-    Tcalloc=scalable_calloc;
+    Rmalloc=scalable_malloc;
+    Rrealloc=scalable_realloc;
+    Rcalloc=scalable_calloc;
     Tfree=scalable_free;
     Rposix_memalign=scalable_posix_memalign;
     Raligned_malloc=scalable_aligned_malloc;
@@ -402,7 +470,7 @@ int main(int argc, char* argv[]) {
 #endif
     //-------------------------------------
 #if __APPLE__
-    /* Skip due to lack of memory limit enforcing under OS X*. */
+    /* Skip due to lack of memory limit enforcing under macOS. */
 #else
     limitMem(200);
     ReallocParam();
@@ -438,6 +506,7 @@ int main(int argc, char* argv[]) {
 #endif // _MSC_VER
 
     CheckArgumentsOverflow();
+    CheckReallocLeak();
     for( int p=MaxThread; p>=MinThread; --p ) {
         REMARK("testing with %d threads\n", p );
         for (int limit=0; limit<2; limit++) {
@@ -488,6 +557,36 @@ struct TestStruct
     double field8;
 };
 
+void* Tmalloc(size_t size)
+{
+    // For compatibility, on 64-bit systems malloc should align to 16 bytes
+    size_t alignment = (sizeof(intptr_t)>4 && size>8) ? 16 : 8;
+    void *ret = Rmalloc(size);
+    if (0 != ret)
+        ASSERT(0==((uintptr_t)ret & (alignment-1)),
+               "allocation result should be properly aligned");
+    return ret;
+}
+void* Tcalloc(size_t num, size_t size)
+{
+    // For compatibility, on 64-bit systems calloc should align to 16 bytes
+    size_t alignment = (sizeof(intptr_t)>4 && num && size>8) ? 16 : 8;
+    void *ret = Rcalloc(num, size);
+    if (0 != ret)
+        ASSERT(0==((uintptr_t)ret & (alignment-1)),
+               "allocation result should be properly aligned");
+    return ret;
+}
+void* Trealloc(void* memblock, size_t size)
+{
+    // For compatibility, on 64-bit systems realloc should align to 16 bytes
+    size_t alignment = (sizeof(intptr_t)>4 && size>8) ? 16 : 8;
+    void *ret = Rrealloc(memblock, size);
+    if (0 != ret)
+        ASSERT(0==((uintptr_t)ret & (alignment-1)),
+               "allocation result should be properly aligned");
+    return ret;
+}
 int Tposix_memalign(void **memptr, size_t alignment, size_t size)
 {
     int ret = Rposix_memalign(memptr, alignment, size);
@@ -513,48 +612,6 @@ void* Taligned_realloc(void* memblock, size_t size, size_t alignment)
     return ret;
 }
 
-inline size_t choose_random_alignment() {
-    return sizeof(void*)<<(rand() % POWERS_OF_2);
-}
-
-void CMemTest::InvariantDataRealloc(bool aligned)
-{
-    const size_t MAX_ALLOC = 8*MByte;
-    Harness::FastRandom fastRandom(1);
-    size_t size = 0, start = 0;
-    char *ptr = NULL,
-        // master to create copies and compare ralloc result against it
-        *master = (char*)Tmalloc(2*MAX_ALLOC);
-
-    ASSERT(master, NULL);
-    __TBB_STATIC_ASSERT(!(2*MAX_ALLOC%sizeof(unsigned short)),
-                        "The loop below expects that 2*MAX_ALLOC contains sizeof(unsigned short)");
-    for (size_t k = 0; k<2*MAX_ALLOC; k+=sizeof(unsigned short))
-        *(unsigned short*)(master+k) = fastRandom.get();
-
-    for (int i=0; i<100; i++) {
-        // don't want sizeNew==0 here
-        const size_t sizeNew = rand() % (MAX_ALLOC-1) + 1;
-        char *ptrNew = aligned?
-            (char*)Taligned_realloc(ptr, sizeNew, choose_random_alignment())
-            : (char*)Trealloc(ptr, sizeNew);
-        ASSERT(ptrNew, NULL);
-        // check that old data not changed
-        ASSERT(!memcmp(ptrNew, master+start, min(size, sizeNew)), "broken data");
-
-        // prepare fresh data, copying them from random position in master
-        size = sizeNew;
-        ptr = ptrNew;
-        start = rand() % MAX_ALLOC;
-        memcpy(ptr, master+start, size);
-    }
-    if (aligned)
-        Taligned_realloc(ptr, 0, choose_random_alignment());
-    else
-        Trealloc(ptr, 0);
-    Tfree(master);
-}
-
 struct PtrSize {
     void  *ptr;
     size_t size;
@@ -709,7 +766,7 @@ void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize, int total_threads)
 
     /* There is a bug in the specific version of GLIBC (2.5-12) shipped
        with RHEL5 that leads to erroneous working of the test
-       on Intel64 and IPF systems when setrlimit-related part is enabled.
+       on Intel(R) 64 and Itanium(R) architecture when setrlimit-related part is enabled.
        Switching to GLIBC 2.5-18 from RHEL5.1 resolved the issue.
      */
     if (perProcessLimits)
@@ -1061,14 +1118,14 @@ void CMemTest::RunAllTests(int total_threads)
 {
     Zerofilling();
     Free_NULL();
-    InvariantDataRealloc(/*aligned=*/false);
+    InvariantDataRealloc(/*aligned=*/false, 8*MByte, /*checkData=*/true);
     if (Raligned_realloc)
-        InvariantDataRealloc(/*aligned=*/true);
+        InvariantDataRealloc(/*aligned=*/true, 8*MByte, /*checkData=*/true);
     TestAlignedParameters();
     UniquePointer();
     AddrArifm();
 #if __APPLE__
-    REPORT("Known issue: some tests are skipped on OS X*\n");
+    REPORT("Known issue: some tests are skipped on macOS\n");
 #else
     NULLReturn(1*MByte,100*MByte,total_threads);
 #endif
diff --git a/src/test/test_malloc_init_shutdown.cpp b/src/test/test_malloc_init_shutdown.cpp
index 135f9dd..c5cf840 100644
--- a/src/test/test_malloc_init_shutdown.cpp
+++ b/src/test/test_malloc_init_shutdown.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/scalable_allocator.h"
diff --git a/src/test/test_malloc_lib_unload.cpp b/src/test/test_malloc_lib_unload.cpp
index dba6777..f9427d5 100644
--- a/src/test/test_malloc_lib_unload.cpp
+++ b/src/test/test_malloc_lib_unload.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if _USRDLL
@@ -29,7 +29,7 @@
 const char *globalCallMsg = "A TBB allocator function call is resolved into wrong implementation.";
 
 #if _WIN32||_WIN64
-// must be defined in DLL for linker to not drop the dependence on the DLL.
+// must be defined in DLL for linker to not drop the dependency on the DLL.
 extern "C" {
     extern __declspec(dllexport) void *scalable_malloc(size_t);
     extern __declspec(dllexport) void scalable_free (void *);
@@ -117,7 +117,9 @@ extern "C" size_t safer_scalable_msize (void *, size_t (*)(void*))
 // system headers that come from tbb_stddef.h
 #include "harness_defs.h"
 #include "tbb/tbb_stddef.h"
-#if __TBB_WIN8UI_SUPPORT || __TBB_SOURCE_DIRECTLY_INCLUDED
+#if __TBB_WIN8UI_SUPPORT || __TBB_SOURCE_DIRECTLY_INCLUDED || __TBB_MIC_OFFLOAD
+// The test does not work if dynamic load is unavailable.
+// For MIC offload, it fails because liboffload brings libiomp which observes and uses the fake scalable_* calls.
 #define HARNESS_SKIP_TEST 1
 #endif
 #define HARNESS_NO_PARSE_COMMAND_LINE 1
diff --git a/src/test/test_malloc_overload.cpp b/src/test/test_malloc_overload.cpp
index 8fe361e..1db37c1 100644
--- a/src/test/test_malloc_overload.cpp
+++ b/src/test/test_malloc_overload.cpp
@@ -1,26 +1,26 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 
 #if (_WIN32 || _WIN64)
-// As the test is intentionally build with /EHs-, suppress multiple VS2005's 
+// As the test is intentionally build with /EHs-, suppress multiple VS2005's
 // warnings like C4530: C++ exception handler used, but unwind semantics are not enabled
 #if defined(_MSC_VER) && !__INTEL_COMPILER
 /* ICC 10.1 and 11.0 generates code that uses std::_Raise_handler,
@@ -29,28 +29,22 @@
 #undef  _HAS_EXCEPTIONS
 #define _HAS_EXCEPTIONS _CPPUNWIND
 #endif
-// to use strdup and putenv w/o warnings
+// to use strdup w/o warnings
 #define _CRT_NONSTDC_NO_DEPRECATE 1
 #endif // _WIN32 || _WIN64
 
+#define _ISOC11_SOURCE 1 // to get C11 declarations for GLIBC
 #define HARNESS_NO_PARSE_COMMAND_LINE 1
 
-#include "tbb/tbb_config.h" // to get __TBB_WIN8UI_SUPPORT
+#include "harness_allocator_overload.h"
 
-#if __linux__ || __APPLE__
-#define MALLOC_REPLACEMENT_AVAILABLE 1
-#elif _WIN32 && !__MINGW32__ && !__MINGW64__ && !__TBB_WIN8UI_SUPPORT
-#define MALLOC_REPLACEMENT_AVAILABLE 2
+#if MALLOC_WINDOWS_OVERLOAD_ENABLED
 #include "tbb/tbbmalloc_proxy.h"
 #endif
 
-// LD_PRELOAD mechanism is broken in offload, no support for MSVC 2015 in debug for now
-#if __TBB_MIC_OFFLOAD || !MALLOC_REPLACEMENT_AVAILABLE || (_MSC_VER >= 1900 && _DEBUG)
-#define HARNESS_SKIP_TEST 1
-#endif
 #include "harness.h"
 
-#if MALLOC_REPLACEMENT_AVAILABLE
+#if !HARNESS_SKIP_TEST
 
 #if __ANDROID__
   #include <android/api-level.h> // for __ANDROID_API__
@@ -58,6 +52,10 @@
 
 #define __TBB_POSIX_MEMALIGN_PRESENT (__linux__ && !__ANDROID__) || __APPLE__
 #define __TBB_PVALLOC_PRESENT __linux__ && !__ANDROID__
+#if __GLIBC__
+  // aligned_alloc available since GLIBC 2.16
+  #define __TBB_ALIGNED_ALLOC_PRESENT __GLIBC_PREREQ(2, 16)
+#endif // __GLIBC__
  // later Android doesn't have valloc or dlmalloc_usable_size
 #define __TBB_VALLOC_PRESENT (__linux__ && __ANDROID_API__<21) || __APPLE__
 #define __TBB_DLMALLOC_USABLE_SIZE_PRESENT  __ANDROID__ && __ANDROID_API__<21
@@ -71,7 +69,7 @@
 #endif
 #include <stdio.h>
 #include <new>
-#if MALLOC_REPLACEMENT_AVAILABLE == 1
+#if MALLOC_UNIXLIKE_OVERLOAD_ENABLED || MALLOC_ZONE_OVERLOAD_ENABLED
 #include <unistd.h> // for sysconf
 #include <dlfcn.h>
 #endif
@@ -111,12 +109,12 @@ typedef unsigned __int64 uint64_t;
 #endif /* OS selection */
 
 #if _WIN32
-// On Windows, the trick with string "dependence on msvcpXX.dll" is necessary to create 
-// dependence on msvcpXX.dll, for sake of a regression test.
+// On Windows, the trick with string "dependency on msvcpXX.dll" is necessary to create
+// dependency on msvcpXX.dll, for sake of a regression test.
 // On Linux, C++ RTL headers are undesirable because of breaking strict ANSI mode.
 #if defined(_MSC_VER) && _MSC_VER >= 1300 && _MSC_VER <= 1310 && !defined(__INTEL_COMPILER)
 /* Fixing compilation error reported by VS2003 for exception class
-   when _HAS_EXCEPTIONS is 0: 
+   when _HAS_EXCEPTIONS is 0:
    bad_cast that inherited from exception is not in std namespace.
 */
 using namespace std;
@@ -144,6 +142,7 @@ public:
     static BackRefIdx newBackRef(bool largeObj);
 };
 
+class MemoryPool;
 class ExtMemoryPool;
 
 class BlockI {
@@ -151,9 +150,10 @@ class BlockI {
 };
 
 struct LargeMemoryBlock : public BlockI {
+    MemoryPool       *pool;          // owner pool
     LargeMemoryBlock *next,          // ptrs in list of cached blocks
                      *prev,
-                     *gPrev,         // in pool's global list 
+                     *gPrev,         // in pool's global list
                      *gNext;
     uintptr_t         age;           // age of block while in cache
     size_t            objectSize;    // the size requested by a client
@@ -166,7 +166,7 @@ struct LargeMemoryBlock : public BlockI {
 
 struct LargeObjectHdr {
     LargeMemoryBlock *memoryBlock;
-    /* Have to duplicate it here from CachedObjectHdr, 
+    /* Have to duplicate it here from CachedObjectHdr,
        as backreference must be checked without further pointer dereference.
        Points to LargeObjectHdr. */
     BackRefIdx       backRefIdx;
@@ -186,25 +186,25 @@ const uint32_t minLargeObjectSize = fittingSize5 + 1;
 
 static void scalableMallocCheckSize(void *object, size_t size)
 {
+#if __clang__
+// This prevents Clang from throwing out the calls to new & delete in CheckNewDeleteOverload().
+    static void *v = object;
+#endif
     ASSERT(object, NULL);
     if (size >= minLargeObjectSize) {
         LargeMemoryBlock *lmb = ((LargeObjectHdr*)object-1)->memoryBlock;
         ASSERT(uintptr_t(lmb)<uintptr_t(((LargeObjectHdr*)object-1))
                && lmb->objectSize >= size, NULL);
     }
-#if MALLOC_REPLACEMENT_AVAILABLE == 1
+#if MALLOC_UNIXLIKE_OVERLOAD_ENABLED || MALLOC_ZONE_OVERLOAD_ENABLED
     ASSERT(malloc_usable_size(object) >= size, NULL);
-#elif MALLOC_REPLACEMENT_AVAILABLE == 2
+#elif MALLOC_WINDOWS_OVERLOAD_ENABLED
     // Check that _msize works correctly
     ASSERT(_msize(object) >= size, NULL);
     ASSERT(size<8 || _aligned_msize(object,8,0) >= size, NULL);
 #endif
 }
 
-struct BigStruct {
-    char f[minLargeObjectSize];
-};
-
 void CheckStdFuncOverload(void *(*malloc_p)(size_t), void *(*calloc_p)(size_t, size_t),
                           void *(*realloc_p)(void *, size_t), void (*free_p)(void *))
 {
@@ -219,7 +219,7 @@ void CheckStdFuncOverload(void *(*malloc_p)(size_t), void *(*calloc_p)(size_t, s
     free_p(ptr1);
 }
 
-#if MALLOC_REPLACEMENT_AVAILABLE == 1
+#if MALLOC_UNIXLIKE_OVERLOAD_ENABLED || MALLOC_ZONE_OVERLOAD_ENABLED
 
 void CheckMemalignFuncOverload(void *(*memalign_p)(size_t, size_t),
                                void (*free_p)(void*))
@@ -252,9 +252,9 @@ void CheckPvalloc(void *(*pvalloc_p)(size_t), void (*free_p)(void*))
     }
 }
 
-#endif // MALLOC_REPLACEMENT_AVAILABLE
+#endif // MALLOC_UNIXLIKE_OVERLOAD_ENABLED || MALLOC_ZONE_OVERLOAD_ENABLED
 
-// regression test: on OS X scalable_free() treated small aligned object,
+// regression test: on macOS scalable_free() treated small aligned object,
 // placed in large block, as small block
 void CheckFreeAligned() {
     size_t sz[] = {8, 4*1024, 16*1024, 0};
@@ -266,7 +266,7 @@ void CheckFreeAligned() {
 #if __TBB_POSIX_MEMALIGN_PRESENT
             int ret = posix_memalign(&ptr, align[a], sz[s]);
             ASSERT(!ret, NULL);
-#elif MALLOC_REPLACEMENT_AVAILABLE == 2
+#elif MALLOC_WINDOWS_OVERLOAD_ENABLED
             ptr = _aligned_malloc(sz[s], align[a]);
 #endif
             ASSERT(is_aligned(ptr, align[a]), NULL);
@@ -307,12 +307,36 @@ void TestZoneOverload() {
 #define TestZoneOverload()
 #endif
 
+struct BigStruct {
+    char f[minLargeObjectSize];
+};
+
+void CheckNewDeleteOverload() {
+    BigStruct *s1, *s2, *s3, *s4;
+
+    s1 = new BigStruct;
+    scalableMallocCheckSize(s1, sizeof(BigStruct));
+    delete s1;
+
+    s2 = new BigStruct[10];
+    scalableMallocCheckSize(s2, 10*sizeof(BigStruct));
+    delete []s2;
+
+    s3 = new(std::nothrow) BigStruct;
+    scalableMallocCheckSize(s3, sizeof(BigStruct));
+    delete s3;
+
+    s4 = new(std::nothrow) BigStruct[2];
+    scalableMallocCheckSize(s4, 2*sizeof(BigStruct));
+    delete []s4;
+}
+
 int TestMain() {
     void *ptr, *ptr1;
 
-#if MALLOC_REPLACEMENT_AVAILABLE == 1
+#if MALLOC_UNIXLIKE_OVERLOAD_ENABLED || MALLOC_ZONE_OVERLOAD_ENABLED
     ASSERT(dlsym(RTLD_DEFAULT, "scalable_malloc"),
-           "Lost dependence on malloc_proxy or LD_PRELOAD was not set?");
+           "Lost dependency on malloc_proxy or LD_PRELOAD was not set?");
 #endif
 
 /* On Windows, memory block size returned by _msize() is sometimes used
@@ -327,20 +351,15 @@ int TestMain() {
     ASSERT(strcmp(pathCopy,getenv("PATH")) == 0, "strdup workaround does not work as expected.");
 #endif
     const char *newEnvName = "__TBBMALLOC_OVERLOAD_REGRESSION_TEST_FOR_REALLOC_AND_MSIZE";
-    char *newEnv = (char*)malloc(3 + strlen(newEnvName));
-
     ASSERT(!getenv(newEnvName), "Environment variable should not be used before.");
-    strcpy(newEnv, newEnvName);
-    strcat(newEnv, "=1");
-    int r = putenv(newEnv);
+    int r = Harness::SetEnv(newEnvName,"1");
     ASSERT(!r, NULL);
     char *path = getenv("PATH");
     ASSERT(path && 0==strcmp(path, pathCopy), "Environment was changed erroneously.");
     free(pathCopy);
-    free(newEnv);
 
     CheckStdFuncOverload(malloc, calloc, realloc, free);
-#if MALLOC_REPLACEMENT_AVAILABLE == 1
+#if MALLOC_UNIXLIKE_OVERLOAD_ENABLED || MALLOC_ZONE_OVERLOAD_ENABLED
 
 #if __TBB_POSIX_MEMALIGN_PRESENT
     int ret = posix_memalign(&ptr, 1024, 3*minLargeObjectSize);
@@ -357,6 +376,9 @@ int TestMain() {
 #endif
 #if __linux__
     CheckMemalignFuncOverload(memalign, free);
+#if __TBB_ALIGNED_ALLOC_PRESENT
+    CheckMemalignFuncOverload(aligned_alloc, free);
+#endif
 
     struct mallinfo info = mallinfo();
     // right now mallinfo initialized by zero
@@ -375,7 +397,7 @@ int TestMain() {
  #endif
 #endif // __linux__
 
-#elif MALLOC_REPLACEMENT_AVAILABLE == 2
+#else // MALLOC_WINDOWS_OVERLOAD_ENABLED
 
     ptr = _aligned_malloc(minLargeObjectSize, 16);
     scalableMallocCheckSize(ptr, minLargeObjectSize);
@@ -395,28 +417,13 @@ int TestMain() {
 #endif
     CheckFreeAligned();
 
-    BigStruct *f = new BigStruct;
-    scalableMallocCheckSize(f, sizeof(BigStruct));
-    delete f;
-
-    f = new BigStruct[10];
-    scalableMallocCheckSize(f, 10*sizeof(BigStruct));
-    delete []f;
-
-    f = new(std::nothrow) BigStruct;
-    scalableMallocCheckSize(f, sizeof(BigStruct));
-    delete f;
-
-    f = new(std::nothrow) BigStruct[2];
-    scalableMallocCheckSize(f, 2*sizeof(BigStruct));
-    delete []f;
-
+    CheckNewDeleteOverload();
 #if _WIN32
-    std::string stdstring = "dependence on msvcpXX.dll";
-    ASSERT(strcmp(stdstring.c_str(), "dependence on msvcpXX.dll") == 0, NULL);
+    std::string stdstring = "dependency on msvcpXX.dll";
+    ASSERT(strcmp(stdstring.c_str(), "dependency on msvcpXX.dll") == 0, NULL);
 #endif
     TestZoneOverload();
 
     return Harness::Done;
 }
-#endif /* MALLOC_REPLACEMENT_AVAILABLE */
+#endif // !HARNESS_SKIP_TEST
diff --git a/src/test/test_malloc_pools.cpp b/src/test/test_malloc_pools.cpp
index a926f4b..2ca7d72 100644
--- a/src/test/test_malloc_pools.cpp
+++ b/src/test/test_malloc_pools.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/scalable_allocator.h"
@@ -23,6 +23,7 @@
 #define HARNESS_TBBMALLOC_THREAD_SHUTDOWN 1
 #include "harness.h"
 #include "harness_barrier.h"
+#include "harness_tls.h"
 #if !__TBB_SOURCE_DIRECTLY_INCLUDED
 #include "harness_tbb_independence.h"
 #endif
@@ -98,14 +99,16 @@ void TestPoolReset()
         ASSERT(pool_malloc(pool, 50*1024), NULL);
     }
     int regionsBeforeReset = liveRegions;
-    pool_reset(pool);
+    bool ok = pool_reset(pool);
+    ASSERT(ok, NULL);
     for (int i=0; i<100; i++) {
         ASSERT(pool_malloc(pool, 8), NULL);
         ASSERT(pool_malloc(pool, 50*1024), NULL);
     }
     ASSERT(regionsBeforeReset == liveRegions,
            "Expected no new regions allocation.");
-    pool_destroy(pool);
+    ok = pool_destroy(pool);
+    ASSERT(ok, NULL);
     ASSERT(!liveRegions, "Expected all regions were released.");
 }
 
@@ -188,7 +191,8 @@ void TestSharedPool()
     delete []afterTerm;
     delete []crossThread;
 
-    pool_destroy(pool);
+    bool ok = pool_destroy(pool);
+    ASSERT(ok, NULL);
     ASSERT(!liveRegions, "Expected all regions were released.");
 }
 
@@ -260,7 +264,8 @@ public:
         for (int i=0; i<10*myPool; i++)
             ASSERT(myPool==obj[myPool][i], NULL);
         pool_free(pool[myPool], obj[myPool]);
-        pool_destroy(pool[myPool]);
+        bool ok = pool_destroy(pool[myPool]);
+        ASSERT(ok, NULL);
     }
 };
 
@@ -269,7 +274,7 @@ Harness::SpinBarrier CrossThreadRun::barrier;
 rml::MemoryPool **CrossThreadRun::pool;
 char **CrossThreadRun::obj;
 
-// pools created, used and destored by different threads
+// pools created, used and destroyed by different threads
 void TestCrossThreadPools()
 {
     for (int p=MinThread; p<=MaxThread; p++) {
@@ -282,7 +287,7 @@ void TestCrossThreadPools()
     }
 }
 
-// buffer is too small to pool be created, but must not leak resourses
+// buffer is too small to pool be created, but must not leak resources
 void TestTooSmallBuffer()
 {
     poolSpace = new PoolSpace(8*1024);
@@ -290,36 +295,56 @@ void TestTooSmallBuffer()
     rml::MemPoolPolicy pol(CrossThreadGetMem, CrossThreadPutMem);
     rml::MemoryPool *pool;
     pool_create_v1(0, &pol, &pool);
-    pool_destroy(pool);
+    bool ok = pool_destroy(pool);
+    ASSERT(ok, NULL);
     ASSERT(!poolSpace[0].regions, "No leaks.");
 
     delete poolSpace;
 }
 
-static void *fixedBufGetMem(intptr_t /*pool_id*/, size_t &bytes)
-{
-    static const size_t BUF_SZ = 8*1024*1024;
-    static char buf[BUF_SZ];
-    static bool used;
+class FixedPoolHeadBase : NoAssign {
+    size_t   size;
+    intptr_t used;
+    char    *data;
+public:
+    FixedPoolHeadBase(size_t s) : size(s), used(false) {
+        data = new char[size];
+    }
+    void *useData(size_t &bytes) {
+        intptr_t wasUsed = __TBB_FetchAndStoreW(&used, true);
+        ASSERT(!wasUsed, "The buffer must not be used twice.");
+        bytes = size;
+        return data;
+    }
+    ~FixedPoolHeadBase() {
+        delete []data;
+    }
+};
 
-    if (used)
-        return NULL;
-    used = true;
-    bytes = BUF_SZ;
-    return buf;
+template<size_t SIZE>
+class FixedPoolHead : FixedPoolHeadBase {
+public:
+    FixedPoolHead() : FixedPoolHeadBase(SIZE) { }
+};
+
+static void *fixedBufGetMem(intptr_t pool_id, size_t &bytes)
+{
+    return ((FixedPoolHeadBase*)pool_id)->useData(bytes);
 }
 
-class FixedPoolRun: NoAssign {
-    Harness::SpinBarrier *startB;
+class FixedPoolUse: NoAssign {
+    static Harness::SpinBarrier startB;
     rml::MemoryPool *pool;
     size_t reqSize;
+    int iters;
 public:
-    FixedPoolRun(Harness::SpinBarrier *b, rml::MemoryPool *p, size_t sz) :
-        startB(b), pool(p), reqSize(sz) {}
+    FixedPoolUse(unsigned threads, rml::MemoryPool *p, size_t sz, int it) :
+        pool(p), reqSize(sz), iters(it) {
+        startB.initialize(threads);
+    }
     void operator()( int /*id*/ ) const {
-        const int ITERS = 10000;
-        startB->wait();
-        for (int i=0; i<ITERS; i++) {
+        startB.wait();
+        for (int i=0; i<iters; i++) {
             void *o = pool_malloc(pool, reqSize);
             ASSERT(o, NULL);
             pool_free(pool, o);
@@ -327,6 +352,45 @@ public:
     }
 };
 
+Harness::SpinBarrier FixedPoolUse::startB;
+
+class FixedPoolNomem: NoAssign {
+    Harness::SpinBarrier *startB;
+    rml::MemoryPool *pool;
+public:
+    FixedPoolNomem(Harness::SpinBarrier *b, rml::MemoryPool *p) :
+        startB(b), pool(p) {}
+    void operator()(int id) const {
+        startB->wait();
+        void *o = pool_malloc(pool, id%2? 64 : 128*1024);
+        ASSERT(!o, "All memory must be consumed.");
+    }
+};
+
+class FixedPoolSomeMem: NoAssign {
+    Harness::SpinBarrier *barrier;
+    rml::MemoryPool *pool;
+public:
+    FixedPoolSomeMem(Harness::SpinBarrier *b, rml::MemoryPool *p) :
+        barrier(b), pool(p) {}
+    void operator()(int id) const {
+        barrier->wait();
+        Harness::Sleep(2*id);
+        void *o = pool_malloc(pool, id%2? 64 : 128*1024);
+        barrier->wait();
+        pool_free(pool, o);
+    }
+};
+
+bool haveEnoughSpace(rml::MemoryPool *pool, size_t sz)
+{
+    if (void *p = pool_malloc(pool, sz)) {
+        pool_free(pool, p);
+        return true;
+    }
+    return false;
+}
+
 void TestFixedBufferPool()
 {
     const int ITERS = 7;
@@ -335,35 +399,76 @@ void TestFixedBufferPool()
     rml::MemPoolPolicy pol(fixedBufGetMem, NULL, 0, /*fixedSizePool=*/true,
                            /*keepMemTillDestroy=*/false);
     rml::MemoryPool *pool;
+    {
+        FixedPoolHead<MAX_OBJECT + 1024*1024> head;
 
-    pool_create_v1(0, &pol, &pool);
-    void *largeObj = pool_malloc(pool, MAX_OBJECT);
-    ASSERT(largeObj, NULL);
-    pool_free(pool, largeObj);
+        pool_create_v1((intptr_t)&head, &pol, &pool);
+        {
+            NativeParallelFor( 1, FixedPoolUse(1, pool, MAX_OBJECT, 2) );
 
-    largeObj = pool_malloc(pool, MAX_OBJECT);
-    ASSERT(largeObj, NULL);
-    pool_free(pool, largeObj);
+            for (int i=0; i<ITERS; i++) {
+                ptrs[i] = pool_malloc(pool, MAX_OBJECT/ITERS);
+                ASSERT(ptrs[i], NULL);
+            }
+            for (int i=0; i<ITERS; i++)
+                pool_free(pool, ptrs[i]);
 
-    for (int i=0; i<ITERS; i++) {
-        ptrs[i] = pool_malloc(pool, MAX_OBJECT/ITERS);
-        ASSERT(ptrs[i], NULL);
+            NativeParallelFor( 1, FixedPoolUse(1, pool, MAX_OBJECT, 1) );
+        }
+        // each thread asks for an MAX_OBJECT/p/2 object,
+        // /2 is to cover fragmentation
+        for (int p=MinThread; p<=MaxThread; p++)
+            NativeParallelFor( p, FixedPoolUse(p, pool, MAX_OBJECT/p/2, 10000) );
+        {
+            const int p=128;
+            NativeParallelFor( p, FixedPoolUse(p, pool, MAX_OBJECT/p/2, 1) );
+        }
+        {
+            size_t maxSz;
+            const int p = 512;
+            Harness::SpinBarrier barrier(p);
+
+            // Find maximal useful object size. Start with MAX_OBJECT/2,
+            // as the pool might be fragmented by BootStrapBlocks consumed during
+            // FixedPoolRun.
+            size_t l, r;
+            ASSERT(haveEnoughSpace(pool, MAX_OBJECT/2), NULL);
+            for (l = MAX_OBJECT/2, r = MAX_OBJECT + 1024*1024; l < r-1; ) {
+                size_t mid = (l+r)/2;
+                if (haveEnoughSpace(pool, mid))
+                    l = mid;
+                else
+                    r = mid;
+            }
+            maxSz = l;
+            ASSERT(!haveEnoughSpace(pool, maxSz+1), "Expect to find boundary value.");
+            // consume all available memory
+            void *largeObj = pool_malloc(pool, maxSz);
+            ASSERT(largeObj, NULL);
+            void *o = pool_malloc(pool, 64);
+            if (o) // pool fragmented, skip FixedPoolNomem
+                pool_free(pool, o);
+            else
+                NativeParallelFor( p, FixedPoolNomem(&barrier, pool) );
+            pool_free(pool, largeObj);
+            // keep some space unoccupied
+            largeObj = pool_malloc(pool, maxSz-512*1024);
+            ASSERT(largeObj, NULL);
+            NativeParallelFor( p, FixedPoolSomeMem(&barrier, pool) );
+            pool_free(pool, largeObj);
+        }
+        bool ok = pool_destroy(pool);
+        ASSERT(ok, NULL);
     }
-    for (int i=0; i<ITERS; i++)
-        pool_free(pool, ptrs[i]);
-
-    largeObj = pool_malloc(pool, MAX_OBJECT);
-    ASSERT(largeObj, NULL);
-    pool_free(pool, largeObj);
-
-    // each thread asks for an MAX_OBJECT/p/2 object,
-    // /2 is to cover fragmentation
-    for (int p=MinThread; p<=MaxThread; p++) {
-        Harness::SpinBarrier startB(p);
-        NativeParallelFor( p, FixedPoolRun(&startB, pool,
-                                           MAX_OBJECT/p/2) );
+    // check that fresh untouched pool can successfully fulfil requests from 128 threads
+    {
+        FixedPoolHead<MAX_OBJECT + 1024*1024> head;
+        pool_create_v1((intptr_t)&head, &pol, &pool);
+        int p=128;
+        NativeParallelFor( p, FixedPoolUse(p, pool, MAX_OBJECT/p/2, 1) );
+        bool ok = pool_destroy(pool);
+        ASSERT(ok, NULL);
     }
-    pool_destroy(pool);
 }
 
 static size_t currGranularity;
@@ -396,21 +501,25 @@ void TestPoolGranularity()
             ASSERT(p, "Can't allocate memory in pool.");
             pool_free(pool, p);
         }
-        pool_destroy(pool);
+        bool ok = pool_destroy(pool);
+        ASSERT(ok, NULL);
     }
 }
 
-static size_t putMemCalls, getMemCalls;
+static size_t putMemAll, getMemAll, getMemSuccessful;
 
-static void *getMemPolicy(intptr_t /*pool_id*/, size_t &bytes)
+static void *getMemMalloc(intptr_t /*pool_id*/, size_t &bytes)
 {
-    getMemCalls++;
-    return malloc(bytes);
+    getMemAll++;
+    void *p = malloc(bytes);
+    if (p)
+        getMemSuccessful++;
+    return p;
 }
 
-static int putMemPolicy(intptr_t /*pool_id*/, void *ptr, size_t /*bytes*/)
+static int putMemFree(intptr_t /*pool_id*/, void *ptr, size_t /*bytes*/)
 {
-    putMemCalls++;
+    putMemAll++;
     free(ptr);
     return 0;
 }
@@ -419,13 +528,13 @@ void TestPoolKeepTillDestroy()
 {
     const int ITERS = 50*1024;
     void *ptrs[2*ITERS+1];
-    rml::MemPoolPolicy pol(getMemPolicy, putMemPolicy);
+    rml::MemPoolPolicy pol(getMemMalloc, putMemFree);
     rml::MemoryPool *pool;
 
     // 1st create default pool that returns memory back to callback,
     // then use keepMemTillDestroy policy
     for (int keep=0; keep<2; keep++) {
-        getMemCalls = putMemCalls = 0;
+        getMemAll = putMemAll = 0;
         if (keep)
             pol.keepAllMemory = 1;
         pool_create_v1(0, &pol, &pool);
@@ -434,28 +543,31 @@ void TestPoolKeepTillDestroy()
             ptrs[i+1] = pool_malloc(pool, 10*1024);
         }
         ptrs[2*ITERS] = pool_malloc(pool, 8*1024*1024);
-        ASSERT(!putMemCalls, NULL);
+        ASSERT(!putMemAll, NULL);
         for (int i=0; i<2*ITERS; i++)
             pool_free(pool, ptrs[i]);
         pool_free(pool, ptrs[2*ITERS]);
-        size_t totalPutMemCalls = putMemCalls;
+        size_t totalPutMemCalls = putMemAll;
         if (keep)
-            ASSERT(!putMemCalls, NULL);
+            ASSERT(!putMemAll, NULL);
         else {
-            ASSERT(putMemCalls, NULL);
-            putMemCalls = 0;
+            ASSERT(putMemAll, NULL);
+            putMemAll = 0;
         }
-        size_t currGetCalls = getMemCalls;
-        pool_malloc(pool, 8*1024*1024);
+        size_t getCallsBefore = getMemAll;
+        void *p = pool_malloc(pool, 8*1024*1024);
+        ASSERT(p, NULL);
         if (keep)
-            ASSERT(currGetCalls == getMemCalls, "Must not lead to new getMem call");
-        size_t currPuts = putMemCalls;
-        pool_reset(pool);
-        ASSERT(currPuts == putMemCalls, "Pool is not releasing memory during reset.");
-        pool_destroy(pool);
-        ASSERT(putMemCalls, NULL);
-        totalPutMemCalls += putMemCalls;
-        ASSERT(getMemCalls == totalPutMemCalls, "Memory leak detected.");
+            ASSERT(getCallsBefore == getMemAll, "Must not lead to new getMem call");
+        size_t putCallsBefore = putMemAll;
+        bool ok = pool_reset(pool);
+        ASSERT(ok, NULL);
+        ASSERT(putCallsBefore == putMemAll, "Pool is not releasing memory during reset.");
+        ok = pool_destroy(pool);
+        ASSERT(ok, NULL);
+        ASSERT(putMemAll, NULL);
+        totalPutMemCalls += putMemAll;
+        ASSERT(getMemAll == totalPutMemCalls, "Memory leak detected.");
     }
 
 }
@@ -502,29 +614,234 @@ void TestEntries()
             pool_free(pool, p2);
         }
 
-    pool_destroy(pool);
+    bool ok = pool_destroy(pool);
+    ASSERT(ok, NULL);
+
+    bool fail = rml::pool_destroy(NULL);
+    ASSERT(!fail, NULL);
+    fail = rml::pool_reset(NULL);
+    ASSERT(!fail, NULL);
 }
 
-void TestPoolCreation()
+rml::MemoryPool *CreateUsablePool(size_t size)
+{
+    rml::MemoryPool *pool;
+    rml::MemPoolPolicy okPolicy(getMemMalloc, putMemFree);
+
+    putMemAll = getMemAll = getMemSuccessful = 0;
+    rml::MemPoolError res = pool_create_v1(0, &okPolicy, &pool);
+    if (res != rml::POOL_OK) {
+        ASSERT(!getMemAll && !putMemAll, "No callbacks after fail.");
+        return NULL;
+    }
+    void *o = pool_malloc(pool, size);
+    if (!getMemSuccessful) {
+        // no memory from callback, valid reason to leave
+        ASSERT(!o, "The pool must be unusable.");
+        return NULL;
+    }
+    ASSERT(o, "Created pool must be useful.");
+    ASSERT(getMemSuccessful == 1 || getMemAll > getMemSuccessful,
+           "Multiple requests are allowed only when unsuccessful request occurred.");
+    ASSERT(!putMemAll, NULL);
+    pool_free(pool, o);
+
+    return pool;
+}
+
+void CheckPoolLeaks(size_t poolsAlwaysAvailable)
 {
-    using namespace rml;
+    const size_t MAX_POOLS = 16*1000;
+    const int ITERS = 20, CREATED_STABLE = 3;
+    rml::MemoryPool *pools[MAX_POOLS];
+    size_t created, maxCreated = MAX_POOLS;
+    int maxNotChangedCnt = 0;
+
+    // expecting that for ITERS runs, max number of pools that can be created
+    // can be stabilized and still stable CREATED_STABLE times
+    for (int j=0; j<ITERS && maxNotChangedCnt<CREATED_STABLE; j++) {
+        for (created=0; created<maxCreated; created++) {
+            rml::MemoryPool *p = CreateUsablePool(1024);
+            if (!p)
+                break;
+            pools[created] = p;
+        }
+        ASSERT(created>=poolsAlwaysAvailable,
+               "Expect that the reasonable number of pools can be always created.");
+        for (size_t i=0; i<created; i++) {
+            bool ok = pool_destroy(pools[i]);
+            ASSERT(ok, NULL);
+        }
+        if (created < maxCreated) {
+            maxCreated = created;
+            maxNotChangedCnt = 0;
+        } else
+            maxNotChangedCnt++;
+    }
+    ASSERT(maxNotChangedCnt == CREATED_STABLE, "The number of created pools must be stabilized.");
+}
 
-    putMemCalls = getMemCalls = 0;
+void TestPoolCreation()
+{
+    putMemAll = getMemAll = getMemSuccessful = 0;
 
-    MemPoolPolicy nullPolicy(NULL, putMemPolicy),
-        emptyFreePolicy(getMemPolicy, NULL),
-        okPolicy(getMemPolicy, putMemPolicy);
-    MemoryPool *pool;
+    rml::MemPoolPolicy nullPolicy(NULL, putMemFree),
+        emptyFreePolicy(getMemMalloc, NULL),
+        okPolicy(getMemMalloc, putMemFree);
+    rml::MemoryPool *pool;
 
-    MemPoolError res = pool_create_v1(0, &nullPolicy, &pool);
-    ASSERT(res==INVALID_POLICY, "pool with empty pAlloc can't be created");
+    rml::MemPoolError res = pool_create_v1(0, &nullPolicy, &pool);
+    ASSERT(res==rml::INVALID_POLICY, "pool with empty pAlloc can't be created");
     res = pool_create_v1(0, &emptyFreePolicy, &pool);
-    ASSERT(res==INVALID_POLICY, "pool with empty pFree can't be created");
-    ASSERT(!putMemCalls && !getMemCalls, "no callback calls are expected");
+    ASSERT(res==rml::INVALID_POLICY, "pool with empty pFree can't be created");
+    ASSERT(!putMemAll && !getMemAll, "no callback calls are expected");
     res = pool_create_v1(0, &okPolicy, &pool);
-    ASSERT(res==POOL_OK, NULL);
-    pool_destroy(pool);
-    ASSERT(putMemCalls == getMemCalls, "no leaks after pool_destroy");
+    ASSERT(res==rml::POOL_OK, NULL);
+    bool ok = pool_destroy(pool);
+    ASSERT(ok, NULL);
+    ASSERT(putMemAll == getMemSuccessful, "no leaks after pool_destroy");
+
+    // 32 is a guess for a number of pools that is acceptable everywere
+    CheckPoolLeaks(32);
+    // try to consume all but 16 TLS keys
+    LimitTLSKeysTo limitTLSTo(16);
+    // ...and check that we can create at least 16 pools
+    CheckPoolLeaks(16);
+}
+
+struct AllocatedObject {
+    rml::MemoryPool *pool;
+};
+
+const size_t BUF_SIZE = 1024*1024;
+
+class PoolIdentityCheck : NoAssign {
+    rml::MemoryPool** const pools;
+    AllocatedObject** const objs;
+public:
+    PoolIdentityCheck(rml::MemoryPool** p, AllocatedObject** o) : pools(p), objs(o) {}
+    void operator()(int id) const {
+        objs[id] = (AllocatedObject*)pool_malloc(pools[id], BUF_SIZE/2);
+        ASSERT(objs[id], NULL);
+        rml::MemoryPool *act_pool = rml::pool_identify(objs[id]);
+        ASSERT(act_pool == pools[id], NULL);
+
+        for (size_t total=0; total<2*BUF_SIZE; total+=256) {
+            AllocatedObject *o = (AllocatedObject*)pool_malloc(pools[id], 256);
+            ASSERT(o, NULL);
+            act_pool = rml::pool_identify(o);
+            ASSERT(act_pool == pools[id], NULL);
+            pool_free(act_pool, o);
+        }
+        if( id&1 ) { // make every second returned object "small"
+            pool_free(act_pool, objs[id]);
+            objs[id] = (AllocatedObject*)pool_malloc(pools[id], 16);
+            ASSERT(objs[id], NULL);
+        }
+        objs[id]->pool = act_pool;
+    }
+};
+
+void TestPoolDetection()
+{
+    const int POOLS = 4;
+    rml::MemPoolPolicy pol(fixedBufGetMem, NULL, 0, /*fixedSizePool=*/true,
+                           /*keepMemTillDestroy=*/false);
+    rml::MemoryPool *pools[POOLS];
+    FixedPoolHead<BUF_SIZE*POOLS> head[POOLS];
+    AllocatedObject *objs[POOLS];
+
+    for (int i=0; i<POOLS; i++)
+        pool_create_v1((intptr_t)(head+i), &pol, &pools[i]);
+    // if object somehow released to different pools, subsequent allocation
+    // from affected pools became impossible
+    for (int k=0; k<10; k++) {
+        PoolIdentityCheck check(pools, objs);
+        if( k&1 )
+            NativeParallelFor( POOLS, check);
+        else 
+            for (int i=0; i<POOLS; i++) check(i);
+
+        for (int i=0; i<POOLS; i++) {
+            rml::MemoryPool *p = rml::pool_identify(objs[i]);
+            ASSERT(p == objs[i]->pool, NULL);
+            pool_free(p, objs[i]);
+        }
+    }
+    for (int i=0; i<POOLS; i++) {
+        bool ok = pool_destroy(pools[i]);
+        ASSERT(ok, NULL);
+    }
+}
+
+void TestLazyBootstrap()
+{
+    rml::MemPoolPolicy pol(getMemMalloc, putMemFree);
+    const size_t sizes[] = {8, 9*1024, 0};
+
+    for (int i=0; sizes[i]; i++) {
+        rml::MemoryPool *pool = CreateUsablePool(sizes[i]);
+        bool ok = pool_destroy(pool);
+        ASSERT(ok, NULL);
+        ASSERT(getMemSuccessful == putMemAll, "No leak.");
+    }
+}
+
+class NoLeakOnDestroyRun: NoAssign {
+    rml::MemoryPool      *pool;
+    Harness::SpinBarrier *barrier;
+public:
+    NoLeakOnDestroyRun(rml::MemoryPool *p, Harness::SpinBarrier *b) : pool(p), barrier(b) {}
+    void operator()(int id) const {
+        void *p = pool_malloc(pool, id%2? 8 : 9000);
+        ASSERT(p && liveRegions, NULL);
+        barrier->wait();
+        if (!id) {
+            bool ok = pool_destroy(pool);
+            ASSERT(ok, NULL);
+            ASSERT(!liveRegions, "Expected all regions were released.");
+        }
+        // other threads must wait till pool destruction,
+        // to not call thread destruction cleanup before this
+        barrier->wait();
+    }
+};
+
+void TestNoLeakOnDestroy()
+{
+    liveRegions = 0;
+    for (int p=MinThread; p<=MaxThread; p++) {
+        rml::MemPoolPolicy pol(getMallocMem, putMallocMem);
+        Harness::SpinBarrier barrier(p);
+        rml::MemoryPool *pool;
+
+        pool_create_v1(0, &pol, &pool);
+        NativeParallelFor(p, NoLeakOnDestroyRun(pool, &barrier));
+    }
+}
+
+
+static int putMallocMemError(intptr_t /*pool_id*/, void *ptr, size_t bytes)
+{
+    MallocPoolHeader *hdr = (MallocPoolHeader*)ptr-1;
+    ASSERT(bytes == hdr->userSize, "Invalid size in pool callback.");
+    free(hdr->rawPtr);
+
+    liveRegions--;
+
+    return -1;
+}
+
+void TestDestroyFailed()
+{
+    rml::MemPoolPolicy pol(getMallocMem, putMallocMemError);
+    rml::MemoryPool *pool;
+    pool_create_v1(0, &pol, &pool);
+    void *ptr = pool_malloc(pool, 16);
+    ASSERT(ptr, NULL);
+    bool fail = pool_destroy(pool);
+    ASSERT(fail==false, "putMemPolicyError callback returns error, "
+           "expect pool_destroy() failure");
 }
 
 int TestMain () {
@@ -537,6 +854,10 @@ int TestMain () {
     TestPoolKeepTillDestroy();
     TestEntries();
     TestPoolCreation();
+    TestPoolDetection();
+    TestLazyBootstrap();
+    TestNoLeakOnDestroy();
+    TestDestroyFailed();
 
     return Harness::Done;
 }
diff --git a/src/test/test_malloc_pure_c.c b/src/test/test_malloc_pure_c.c
index 6043db9..fa72ca1 100644
--- a/src/test/test_malloc_pure_c.c
+++ b/src/test/test_malloc_pure_c.c
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #ifdef __cplusplus
diff --git a/src/test/test_malloc_regression.cpp b/src/test/test_malloc_regression.cpp
index b9cb0fd..272dbe2 100644
--- a/src/test/test_malloc_regression.cpp
+++ b/src/test/test_malloc_regression.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #define HARNESS_NO_PARSE_COMMAND_LINE 1
diff --git a/src/test/test_malloc_used_by_lib.cpp b/src/test/test_malloc_used_by_lib.cpp
index 0347578..81734d6 100644
--- a/src/test/test_malloc_used_by_lib.cpp
+++ b/src/test/test_malloc_used_by_lib.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if _USRDLL
diff --git a/src/test/test_malloc_whitebox.cpp b/src/test/test_malloc_whitebox.cpp
index 71b2f73..4cba63d 100644
--- a/src/test/test_malloc_whitebox.cpp
+++ b/src/test/test_malloc_whitebox.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /* to prevent loading dynamic TBBmalloc at startup, that is not needed
@@ -26,10 +26,6 @@
 // iff __STDC_LIMIT_MACROS pre-defined
 #define __STDC_LIMIT_MACROS 1
 
-// To disable exceptions in <vector> and <list> on Windows*
-#undef _HAS_EXCEPTIONS
-#define _HAS_EXCEPTIONS _CPPUNWIND
-
 #define HARNESS_TBBMALLOC_THREAD_SHUTDOWN 1
 
 #include "harness.h"
@@ -44,11 +40,21 @@
 // help trigger rare race condition
 #define WhiteboxTestingYield() (__TBB_Yield(), __TBB_Yield(), __TBB_Yield(), __TBB_Yield())
 
+#if __INTEL_COMPILER && __TBB_MIC_OFFLOAD
+// 2571 is variable has not been declared with compatible "target" attribute
+// 3218 is class/struct may fail when offloaded because this field is misaligned
+//         or contains data that is misaligned
+    #pragma warning(push)
+    #pragma warning(disable:2571 3218)
+#endif
 #define protected public
 #define private public
 #include "../tbbmalloc/frontend.cpp"
 #undef protected
 #undef private
+#if __INTEL_COMPILER && __TBB_MIC_OFFLOAD
+    #pragma warning(pop)
+#endif
 #include "../tbbmalloc/backend.cpp"
 #include "../tbbmalloc/backref.cpp"
 
@@ -116,7 +122,7 @@ public:
                 }
             }
         }
-        
+
         barrier.wait();
 
         // check caching correctness
@@ -125,7 +131,7 @@ public:
             for (int j=0; j<LARGE_MEM_SIZES_NUM-1; j++, curr++)
                 new (allocs+curr) AllocInfo(largeMemSizes[j]);
 
-            new (allocs+curr) 
+            new (allocs+curr)
                 AllocInfo((int)(4*minLargeObjectSize +
                                 2*minLargeObjectSize*(1.*rand()/RAND_MAX)));
             curr++;
@@ -143,7 +149,7 @@ int TestLargeObjCache::largeMemSizes[LARGE_MEM_SIZES_NUM];
 void TestLargeObjectCache()
 {
     for (int i=0; i<LARGE_MEM_SIZES_NUM; i++)
-        TestLargeObjCache::largeMemSizes[i] = 
+        TestLargeObjCache::largeMemSizes[i] =
             (int)(minLargeObjectSize + 2*minLargeObjectSize*(1.*rand()/RAND_MAX));
 
     for( int p=MaxThread; p>=MinThread; --p ) {
@@ -170,14 +176,14 @@ public:
         for (int i=0; i<ITERS; i++) {
             blocks1[i].sz = rand() % minLargeObjectSize;
             blocks1[i].ptr = StartupBlock::allocate(blocks1[i].sz);
-            ASSERT(blocks1[i].ptr && StartupBlock::msize(blocks1[i].ptr)>=blocks1[i].sz 
+            ASSERT(blocks1[i].ptr && StartupBlock::msize(blocks1[i].ptr)>=blocks1[i].sz
                    && 0==(uintptr_t)blocks1[i].ptr % sizeof(void*), NULL);
             memset(blocks1[i].ptr, i, blocks1[i].sz);
         }
         for (int i=0; i<ITERS; i++) {
             blocks2[i].sz = rand() % minLargeObjectSize;
             blocks2[i].ptr = StartupBlock::allocate(blocks2[i].sz);
-            ASSERT(blocks2[i].ptr && StartupBlock::msize(blocks2[i].ptr)>=blocks2[i].sz 
+            ASSERT(blocks2[i].ptr && StartupBlock::msize(blocks2[i].ptr)>=blocks2[i].sz
                    && 0==(uintptr_t)blocks2[i].ptr % sizeof(void*), NULL);
             memset(blocks2[i].ptr, i, blocks2[i].sz);
 
@@ -197,24 +203,33 @@ public:
 
 #endif /* MALLOC_CHECK_RECURSION */
 
+#include <deque>
+
+template<int ITERS>
 class BackRefWork: NoAssign {
     struct TestBlock {
-        intptr_t   data;
         BackRefIdx idx;
+        char       data;
+        TestBlock(BackRefIdx idx_) : idx(idx_) {}
     };
-    static const int ITERS = 2*BR_MAX_CNT+2;
 public:
     BackRefWork() {}
     void operator()(int) const {
-        TestBlock blocks[ITERS];
-
-        for (int i=0; i<ITERS; i++) {
-            blocks[i].idx = BackRefIdx::newBackRef(/*largeObj=*/false);
-            setBackRef(blocks[i].idx, &blocks[i].data);
+        size_t cnt;
+        // it's important to not invalidate pointers to the contents of the container
+        std::deque<TestBlock> blocks;
+
+        // for ITERS==0 consume all available backrefs
+        for (cnt=0; !ITERS || cnt<ITERS; cnt++) {
+            BackRefIdx idx = BackRefIdx::newBackRef(/*largeObj=*/false);
+            if (idx.isInvalid())
+                break;
+            blocks.push_back(TestBlock(idx));
+            setBackRef(blocks.back().idx, &blocks.back().data);
         }
-        for (int i=0; i<ITERS; i++)
+        for (int i=0; i<cnt; i++)
             ASSERT((Block*)&blocks[i].data == getBackRef(blocks[i].idx), NULL);
-        for (int i=ITERS-1; i>=0; i--)
+        for (int i=cnt-1; i>=0; i--)
             removeBackRef(blocks[i].idx);
     }
 };
@@ -300,14 +315,14 @@ void TestBackRef() {
 
     beforeNumBackRef = allocatedBackRefCount();
     for( int p=MaxThread; p>=MinThread; --p )
-        NativeParallelFor( p, BackRefWork() );
+        NativeParallelFor( p, BackRefWork<2*BR_MAX_CNT+2>() );
     afterNumBackRef = allocatedBackRefCount();
     ASSERT(beforeNumBackRef==afterNumBackRef, "backreference leak detected");
 
     // lastUsed marks peak resource consumption. As we allocate below the mark,
     // it must not move up, otherwise there is a resource leak.
     int sustLastUsed = backRefMaster->lastUsed;
-    NativeParallelFor( 1, BackRefWork() );
+    NativeParallelFor( 1, BackRefWork<2*BR_MAX_CNT+2>() );
     ASSERT(sustLastUsed == backRefMaster->lastUsed, "backreference leak detected");
 
     // check leak of back references while per-thread caches are in use
@@ -327,6 +342,10 @@ void TestBackRef() {
     // seems valid BackRefIdx for large objects, and thus trigger the bug.
     TestInvalidBackrefs::initBarrier(MaxThread);
     NativeParallelFor( MaxThread, TestInvalidBackrefs() );
+    // Consume all available backrefs and check they work correctly.
+    // For now test 32-bit machines only, because for 64-bit memory consumption is too high.
+    if (sizeof(uintptr_t) == 4)
+        NativeParallelFor( MaxThread, BackRefWork<0>() );
 }
 
 void *getMem(intptr_t /*pool_id*/, size_t &bytes)
@@ -519,7 +538,7 @@ void TestObjectRecognition() {
     unsigned falseObjectSize = 113; // unsigned is the type expected by getObjectSize
     size_t obtainedSize;
 
-    ASSERT(sizeof(BackRefIdx)==4, "Unexpected size of BackRefIdx");
+    ASSERT(sizeof(BackRefIdx)==sizeof(uintptr_t), "Unexpected size of BackRefIdx");
     ASSERT(getObjectSize(falseObjectSize)!=falseObjectSize, "Error in test: bad choice for false object size");
 
     void* mem = scalable_malloc(2*slabSize);
@@ -531,7 +550,7 @@ void TestObjectRecognition() {
 
     void* bufferLOH = scalable_malloc(2*slabSize + headersSize);
     ASSERT(bufferLOH, "Memory was not allocated");
-    LargeObjectHdr* falseLO = 
+    LargeObjectHdr* falseLO =
         (LargeObjectHdr*)alignUp((uintptr_t)bufferLOH + headersSize, slabSize);
     LargeObjectHdr* headerLO = (LargeObjectHdr*)falseLO-1;
     headerLO->memoryBlock = (LargeMemoryBlock*)bufferLOH;
@@ -549,7 +568,7 @@ void TestObjectRecognition() {
         for (int master = -10; master<10; master++) {
             falseBlock->backRefIdx.master = (uint16_t)master;
             headerLO->backRefIdx.master = (uint16_t)master;
-        
+
             for (int bl = -10; bl<BR_MAX_CNT+10; bl++) {
                 falseBlock->backRefIdx.offset = (uint16_t)bl;
                 headerLO->backRefIdx.offset = (uint16_t)bl;
@@ -755,64 +774,62 @@ void checkNoHugePages()
 }
 
 /*---------------------------------------------------------------------------*/
-// The regression test against a bug in TBBMALLOC_CLEAN_ALL_BUFFERS allocation
-// command. When cleanup is requested the backend should process the queue of
-// postponed coalescing requests otherwise not all unsued memory might be
-// deallocated.
-
-const size_t alloc_size = 16*1024;
-const int total_alloc_size = 100 * 1024 * 1024;
-const int num_allocs = total_alloc_size / alloc_size;
+// The regression test against bugs in TBBMALLOC_CLEAN_ALL_BUFFERS allocation command.
+// The idea is to allocate and deallocate a set of objects randomly in parallel.
+// For large sizes (16K), it forces conflicts in backend during coalescing.
+// For small sizes (4K), it forces cross-thread deallocations and then orphaned slabs.
+// Global cleanup should process orphaned slabs and the queue of postponed coalescing
+// requests, otherwise it will not be able to unmap all unused memory.
+
+const int num_allocs = 10*1024;
 void *ptrs[num_allocs];
+tbb::atomic<int> alloc_counter;
 
-tbb::atomic<int> deallocs_counter;
-
-struct TestCleanAllBuffersDeallocate : public SimpleBarrier {
+template<int AllocSize>
+struct TestCleanAllBuffersBody : public SimpleBarrier {
     void operator() ( int ) const {
         barrier.wait();
-        for( int i = deallocs_counter++; i < num_allocs; i = deallocs_counter++ )
-           scalable_free( ptrs[i] );
+        for( int i = alloc_counter++; i < num_allocs; i = alloc_counter++ ) {
+           ptrs[i] = scalable_malloc( AllocSize );
+           ASSERT( ptrs[i] != NULL, "scalable_malloc returned zero." );
+        }
+        barrier.wait();
+        for( int i = --alloc_counter; i >= 0; i = --alloc_counter )
+           if (i<num_allocs) scalable_free( ptrs[i] );
     }
 };
 
-// The idea is to allocate a set of objects and then deallocate them in random
-// order in parallel to force occurring conflicts in backend during coalescing.
-// Thus if the backend does not check the queue of postponed coalescing
-// requests it will not be able to unmap all memory and a memory leak will be
-// observed.
+template<int AllocSize>
 void TestCleanAllBuffers() {
     const int num_threads = 8;
     // Clean up if something was allocated before the test
     scalable_allocation_command(TBBMALLOC_CLEAN_ALL_BUFFERS,0);
 
     size_t memory_in_use_before = getMemSize();
-    for ( int i=0; i<num_allocs; ++i ) {
-        ptrs[i] = scalable_malloc( alloc_size );
-        ASSERT( ptrs[i] != NULL, "scalable_malloc has return zero." );
-    }
-    deallocs_counter = 0;
-    TestCleanAllBuffersDeallocate::initBarrier(num_threads);
-    NativeParallelFor(num_threads, TestCleanAllBuffersDeallocate());
-    // TODO: reproduce the conditions for bug reproduction more reliably
+    alloc_counter = 0;
+    TestCleanAllBuffersBody<AllocSize>::initBarrier(num_threads);
+    NativeParallelFor(num_threads, TestCleanAllBuffersBody<AllocSize>());
+    // TODO: reproduce the bug conditions more reliably
     if ( defaultMemPool->extMemPool.backend.coalescQ.blocksToFree == NULL )
         REMARK( "Warning: The queue of postponed coalescing requests is empty. Unable to create the condition for bug reproduction.\n" );
-    ASSERT( scalable_allocation_command(TBBMALLOC_CLEAN_ALL_BUFFERS,0) == TBBMALLOC_OK, "The cleanup request has not cleaned anything." );
+    int result = scalable_allocation_command(TBBMALLOC_CLEAN_ALL_BUFFERS,0);
+    ASSERT( result == TBBMALLOC_OK, "The cleanup request has not cleaned anything." );
     size_t memory_in_use_after = getMemSize();
 
-    REMARK( "memory_in_use_before = %ld\nmemory_in_use_after = %ld\n", memory_in_use_before, memory_in_use_after );
-
     size_t memory_leak = memory_in_use_after - memory_in_use_before;
-    ASSERT( memory_leak == 0, "The backend has not processed the queue of postponed coalescing requests during cleanup." );
+    REMARK( "memory_in_use_before = %ld\nmemory_in_use_after = %ld\n", memory_in_use_before, memory_in_use_after );
+    ASSERT( memory_leak == 0, "Cleanup was unable to release all allocated memory." );
 }
 /*---------------------------------------------------------------------------*/
 /*------------------------- Large Object Cache tests ------------------------*/
 #if _MSC_VER==1600 || _MSC_VER==1500
-  // ignore C4275: non dll-interface class 'stdext::exception' used as
-  // base for dll-interface class 'std::bad_cast'
-  #pragma warning (disable: 4275)
+    // ignore C4275: non dll-interface class 'stdext::exception' used as
+    // base for dll-interface class 'std::bad_cast'
+    #pragma warning (disable: 4275)
 #endif
 #include <vector>
 #include <list>
+#include __TBB_STD_SWAP_HEADER
 
 // default constructor of CacheBin
 template<typename Props>
@@ -953,7 +970,7 @@ void LOCModelTester() {
             defaultMemPool->extMemPool.freeLargeObject(lmb);
             cacheBinModel.putList(num);
         } else {
-            scen.saveLmb(defaultMemPool->extMemPool.mallocLargeObject(allocationSize));
+            scen.saveLmb(defaultMemPool->extMemPool.mallocLargeObject(defaultMemPool, allocationSize));
             cacheBinModel.get();
         }
 
@@ -1029,7 +1046,7 @@ public:
         barrier.wait();
         for ( int i=0; i<NUM_ALLOCS; ++i ) {
             defaultMemPool->extMemPool.freeLargeObject(
-                    defaultMemPool->extMemPool.mallocLargeObject(allocationSize) );
+                defaultMemPool->extMemPool.mallocLargeObject(defaultMemPool, allocationSize) );
         }
     }
 
@@ -1065,7 +1082,7 @@ public:
         barrier.wait();
         rml::internal::LargeMemoryBlock *lmbArray[NUM_ALLOCS];
         for ( int i=0; i<NUM_ALLOCS; ++i )
-            lmbArray[i] = defaultMemPool->extMemPool.mallocLargeObject(allocationSize);
+            lmbArray[i] = defaultMemPool->extMemPool.mallocLargeObject(defaultMemPool, allocationSize);
 
         barrier.wait(CheckNumAllocs(num_threads));
         for ( int i=0; i<NUM_ALLOCS; ++i )
@@ -1106,10 +1123,34 @@ void TestLOC() {
 }
 /*---------------------------------------------------------------------------*/
 
+void *findCacheLine(void *p) {
+    return (void*)alignDown((uintptr_t)p, estimatedCacheLineSize);
+}
+
+// test that internals of Block are at expected cache lines
+void TestSlabAlignment() {
+    const size_t min_sz = 8;
+    const int space = 2*16*1024; // fill at least 2 slabs
+    void *ptrs[space / min_sz];  // the worst case is min_sz byte object
+
+    for (size_t sz = min_sz; sz <= 64; sz *= 2) {
+        for (int i = 0; i < space/sz; i++) {
+            ptrs[i] = scalable_malloc(sz);
+            Block *block = (Block *)alignDown(ptrs[i], slabSize);
+            MALLOC_ASSERT(findCacheLine(&block->isFull) != findCacheLine(ptrs[i]),
+                          "A user object must not share a cache line with slab control structures.");
+            MALLOC_ASSERT(findCacheLine(&block->next) != findCacheLine(&block->nextPrivatizable),
+                          "GlobalBlockFields and LocalBlockFields must be on different cache lines.");
+        }
+        for (int i = 0; i < space/sz; i++)
+            scalable_free(ptrs[i]);
+    }
+}
+
 int TestMain () {
     scalable_allocation_mode(USE_HUGE_PAGES, 0);
-#if !_XBOX && !__TBB_WIN8UI_SUPPORT
-    putenv((char*)"TBB_MALLOC_USE_HUGE_PAGES=yes");
+#if !__TBB_WIN8UI_SUPPORT
+    Harness::SetEnv("TBB_MALLOC_USE_HUGE_PAGES","yes");
 #endif
     checkNoHugePages();
     // backreference requires that initialization was done
@@ -1117,6 +1158,8 @@ int TestMain () {
     checkNoHugePages();
     // to succeed, leak detection must be the 1st memory-intensive test
     TestBackRef();
+    TestCleanAllBuffers<4*1024>();
+    TestCleanAllBuffers<16*1024>();
     TestPools();
     TestBackend();
 
@@ -1132,7 +1175,7 @@ int TestMain () {
     TestObjectRecognition();
     TestBitMask();
     TestHeapLimit();
-    TestCleanAllBuffers();
     TestLOC();
+    TestSlabAlignment();
     return Harness::Done;
 }
diff --git a/src/test/test_model_plugin.cpp b/src/test/test_model_plugin.cpp
index 9ddb43b..56cb58a 100644
--- a/src/test/test_model_plugin.cpp
+++ b/src/test/test_model_plugin.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #define HARNESS_DEFAULT_MIN_THREADS 4
@@ -129,9 +129,9 @@ void plugin_call(int maxthread)
 
 #else /* _USRDLL undefined */
 
-#define HARNESS_NO_ASSERT 1
 #include "harness.h"
 #include "harness_dynamic_libs.h"
+#include "harness_tls.h"
 
 extern "C" void plugin_call(int);
 
@@ -156,35 +156,6 @@ void report_error_in(const char* function_name)
 #endif
 }
 
-int use_lot_of_tls() {
-    int count = 0;
-#if _WIN32 || _WIN64
-    DWORD last_handles[10];
-    DWORD result;
-    result = TlsAlloc();
-    while( result!=TLS_OUT_OF_INDEXES ) {
-        last_handles[++count%10] = result;
-        result = TlsAlloc();
-    }
-    for( int i=0; i<10; ++i )
-        TlsFree(last_handles[i]);
-#else
-    pthread_key_t last_handles[10];
-    pthread_key_t result;
-    int setspecific_dummy=10;
-    while( pthread_key_create(&result, NULL)==0 
-           && count < 4096 ) // Sun Solaris doesn't have any built-in limit, so we set something big enough
-    {
-        last_handles[++count%10] = result;
-        pthread_setspecific(result,&setspecific_dummy);
-    }
-    REMARK("Created %d keys\n", count);
-    for( int i=0; i<10; ++i )
-        pthread_key_delete(last_handles[i]);
-#endif
-    return count-10;
-}
-
 typedef void (*PLUGIN_CALL)(int);
 
 #if __linux__
@@ -197,8 +168,7 @@ int TestMain () {
 #if !RML_USE_WCRM
     PLUGIN_CALL my_plugin_call;
 
-    int tls_key_count = use_lot_of_tls();
-    REMARK("%d thread local objects allocated in advance\n", tls_key_count);
+    LimitTLSKeysTo limitTLS(10);
 
     Harness::LIBRARY_HANDLE hLib;
 #if _WIN32 || _WIN64
diff --git a/src/test/test_multifunction_node.cpp b/src/test/test_multifunction_node.cpp
index 9883d15..53a07c2 100644
--- a/src/test/test_multifunction_node.cpp
+++ b/src/test/test_multifunction_node.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "harness_graph.h"
@@ -52,13 +52,13 @@ struct parallel_put_until_limit : private NoAssign {
     }
 
 };
-     
-//! exercise buffered multifunction_node.  
+
+//! exercise buffered multifunction_node.
 template< typename InputType, typename OutputTuple, typename Body >
 void buffered_levels( size_t concurrency, Body body ) {
     typedef typename tbb::flow::tuple_element<0,OutputTuple>::type OutputType;
     // Do for lc = 1 to concurrency level
-    for ( size_t lc = 1; lc <= concurrency; ++lc ) { 
+    for ( size_t lc = 1; lc <= concurrency; ++lc ) {
         tbb::flow::graph g;
 
         // Set the execute_counter back to zero in the harness
@@ -70,7 +70,7 @@ void buffered_levels( size_t concurrency, Body body ) {
 
         // Create the function_node with the appropriate concurrency level, and use default buffering
         tbb::flow::multifunction_node< InputType, OutputTuple > exe_node( g, lc, body );
-   
+
         //Create a vector of identical exe_nodes
         std::vector< tbb::flow::multifunction_node< InputType, OutputTuple > > exe_vec(2, exe_node);
 
@@ -95,17 +95,17 @@ void buffered_levels( size_t concurrency, Body body ) {
 
                     // Initialize the receivers so they know how many senders and messages to check for
                     for (size_t r = 0; r < num_receivers; ++r ) {
-                         receivers[r].initialize_map( N, num_senders ); 
+                         receivers[r].initialize_map( N, num_senders );
                     }
 
                     // Do the test
                     NativeParallelFor( (int)num_senders, parallel_put_until_limit<InputType>(senders) );
                     g.wait_for_all();
 
-                    // confirm that each sender was requested from N times 
+                    // confirm that each sender was requested from N times
                     for (size_t s = 0; s < num_senders; ++s ) {
                         size_t n = senders[s].my_received;
-                        ASSERT( n == N, NULL ); 
+                        ASSERT( n == N, NULL );
                         ASSERT( senders[s].my_receiver == &exe_vec[node_idx], NULL );
                     }
                     // validate the receivers
@@ -125,7 +125,7 @@ void buffered_levels( size_t concurrency, Body body ) {
                 }
                 delete [] receivers;
             }
-        } 
+        }
     }
 }
 
@@ -151,13 +151,13 @@ template< typename InputType, typename OutputTuple >
 void buffered_levels_with_copy( size_t concurrency ) {
     typedef typename tbb::flow::tuple_element<0,OutputTuple>::type OutputType;
     // Do for lc = 1 to concurrency level
-    for ( size_t lc = 1; lc <= concurrency; ++lc ) { 
+    for ( size_t lc = 1; lc <= concurrency; ++lc ) {
         tbb::flow::graph g;
 
         inc_functor cf;
         cf.local_execute_count = Offset;
         global_execute_count = Offset;
-       
+
         tbb::flow::multifunction_node< InputType, OutputTuple > exe_node( g, lc, cf );
 
         for (size_t num_receivers = 1; num_receivers <= MAX_NODES; ++num_receivers ) {
@@ -175,7 +175,7 @@ void buffered_levels_with_copy( size_t concurrency ) {
                 }
 
                 for (size_t r = 0; r < num_receivers; ++r ) {
-                    receivers[r].initialize_map( N, num_senders ); 
+                    receivers[r].initialize_map( N, num_senders );
                 }
 
                 NativeParallelFor( (int)num_senders, parallel_put_until_limit<InputType>(senders) );
@@ -183,7 +183,7 @@ void buffered_levels_with_copy( size_t concurrency ) {
 
                 for (size_t s = 0; s < num_senders; ++s ) {
                     size_t n = senders[s].my_received;
-                    ASSERT( n == N, NULL ); 
+                    ASSERT( n == N, NULL );
                     ASSERT( senders[s].my_receiver == &exe_node, NULL );
                 }
                 for (size_t r = 0; r < num_receivers; ++r ) {
@@ -204,10 +204,10 @@ void buffered_levels_with_copy( size_t concurrency ) {
 
         // validate that the local body matches the global execute_count and both are correct
         inc_functor body_copy = tbb::flow::copy_body<inc_functor>( exe_node );
-        const size_t expected_count = N/2 * MAX_NODES * MAX_NODES * ( MAX_NODES + 1 ) + MAX_NODES + Offset; 
+        const size_t expected_count = N/2 * MAX_NODES * MAX_NODES * ( MAX_NODES + 1 ) + MAX_NODES + Offset;
         size_t global_count = global_execute_count;
         size_t inc_count = body_copy.local_execute_count;
-        ASSERT( global_count == expected_count && global_count == inc_count, NULL ); 
+        ASSERT( global_count == expected_count && global_count == inc_count, NULL );
     }
 }
 
@@ -226,16 +226,16 @@ void run_buffered_levels( int c ) {
 //! Performs test on executable nodes with limited concurrency
 /** Theses tests check:
     1) that the nodes will accepts puts up to the concurrency limit,
-    2) the nodes do not exceed the concurrency limit even when run with more threads (this is checked in the harness_graph_executor), 
+    2) the nodes do not exceed the concurrency limit even when run with more threads (this is checked in the harness_graph_executor),
     3) the nodes will receive puts from multiple successors simultaneously,
     and 4) the nodes will send to multiple predecessors.
     There is no checking of the contents of the messages for corruption.
 */
-     
+
 template< typename InputType, typename OutputTuple, typename Body >
 void concurrency_levels( size_t concurrency, Body body ) {
     typedef typename tbb::flow::tuple_element<0,OutputTuple>::type OutputType;
-    for ( size_t lc = 1; lc <= concurrency; ++lc ) { 
+    for ( size_t lc = 1; lc <= concurrency; ++lc ) {
         tbb::flow::graph g;
 
         // Set the execute_counter back to zero in the harness
@@ -257,34 +257,34 @@ void concurrency_levels( size_t concurrency, Body body ) {
             }
 
             harness_counting_sender<InputType> *senders = NULL;
-    
+
             for (size_t num_senders = 1; num_senders <= MAX_NODES; ++num_senders ) {
                 {
                     // Exclusively lock m to prevent exe_node from finishing
                     tbb::spin_rw_mutex::scoped_lock l( harness_graph_multifunction_executor< InputType, OutputTuple>::template mutex_holder<tbb::spin_rw_mutex>::mutex );
-    
+
                     // put to lc level, it will accept and then block at m
                     for ( size_t c = 0 ; c < lc ; ++c ) {
                         ASSERT( exe_node.try_put( InputType() ) == true, NULL );
                     }
                     // it only accepts to lc level
                     ASSERT( exe_node.try_put( InputType() ) == false, NULL );
-    
+
                     senders = new harness_counting_sender<InputType>[num_senders];
                     for (size_t s = 0; s < num_senders; ++s ) {
                        // register a sender
                        senders[s].my_limit = N;
                        exe_node.register_predecessor( senders[s] );
                     }
-    
+
                 } // release lock at end of scope, setting the exe node free to continue
                 // wait for graph to settle down
                 g.wait_for_all();
-    
-                // confirm that each sender was requested from N times 
+
+                // confirm that each sender was requested from N times
                 for (size_t s = 0; s < num_senders; ++s ) {
                     size_t n = senders[s].my_received;
-                    ASSERT( n == N, NULL ); 
+                    ASSERT( n == N, NULL );
                     ASSERT( senders[s].my_receiver == &exe_node, NULL );
                 }
                 // confirm that each receivers got N * num_senders + the initial lc puts
@@ -319,7 +319,7 @@ void run_concurrency_levels( int c ) {
 }
 
 
-struct empty_no_assign { 
+struct empty_no_assign {
    empty_no_assign() {}
    empty_no_assign( int ) {}
    operator int() { return 0; }
@@ -367,16 +367,20 @@ void unlimited_concurrency( Body body ) {
             }
 
             NativeParallelFor( p, parallel_puts<InputType>(exe_node) );
-            g.wait_for_all(); 
+            g.wait_for_all();
 
             // 2) the nodes will receive puts from multiple predecessors simultaneously,
             size_t ec = harness_graph_multifunction_executor<InputType, OutputTuple>::execute_count;
-            ASSERT( (int)ec == p*N, NULL ); 
+            ASSERT( (int)ec == p*N, NULL );
             for (size_t r = 0; r < num_receivers; ++r ) {
                 size_t c = receivers[r].my_count;
                 // 3) the nodes will send to multiple successors.
                 ASSERT( (int)c == p*N, NULL );
             }
+            for (size_t r = 0; r < num_receivers; ++r ) {
+                tbb::flow::remove_edge( tbb::flow::output_port<0>(exe_node), receivers[r] );
+            }
+            delete [] receivers;
         }
     }
 }
@@ -492,7 +496,7 @@ struct add_to_counter {
     int my_inner() { return my_invocations; }
 };
 
-template<tbb::flow::graph_buffer_policy FTYPE>
+template<class FTYPE>
 void test_extract() {
     int my_count = 0;
     int cm;
@@ -508,7 +512,7 @@ void test_extract() {
     tbb::flow::make_edge(tbb::flow::output_port<0>(mf0), q0);
     tbb::flow::make_edge(tbb::flow::output_port<1>(mf0), q1);
     for( int i = 0; i < 2; ++i ) {
-    
+
         /* b0          */
         /*   \   |--q0 */
         /*    mf0+     */
@@ -533,16 +537,16 @@ void test_extract() {
         ASSERT(my_count == 2, "multifunction_node didn't fire");
         ASSERT(q0.try_get(cm), "multifunction_node didn't forward to 0");
         ASSERT(q1.try_get(cm), "multifunction_node didn't forward to 1");
-    
+
         b0.extract();
-    
-    
+
+
         /* b0          */
         /*       |--q0 */
         /*    mf0+     */
         /*   /   |--q1 */
         /* b1          */
-    
+
         ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 0, "b0 has incorrect counts");
         ASSERT(b1.predecessor_count() == 0 && b1.successor_count() == 1, "b1 has incorrect counts");
         ASSERT(mf0.predecessor_count() == 1
@@ -562,13 +566,13 @@ void test_extract() {
         ASSERT(q1.try_get(cm), "multifunction_node didn't forward second time");
 
         q0.extract();
-    
+
         /* b0          */
         /*       |  q0 */
         /*    mf0+     */
         /*   /   |--q1 */
         /* b1          */
-    
+
         ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 0, "b0 has incorrect counts");
         ASSERT(b1.predecessor_count() == 0 && b1.successor_count() == 1, "b1 has incorrect counts");
         ASSERT(mf0.predecessor_count() == 1
@@ -587,20 +591,20 @@ void test_extract() {
         ASSERT(!q0.try_get(cm), "multifunction_node forwarded");
         ASSERT(q1.try_get(cm), "multifunction_node forwarded");
         mf0.extract();
-    
+
         if(i == 0) {
         }
         else {
             g.reset(tbb::flow::rf_reset_bodies);
         }
-    
-    
+
+
         /* b0          */
         /*       |  q0 */
         /*    mf0+     */
         /*       |  q1 */
         /* b1          */
-    
+
         ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 0, "b0 has incorrect counts");
         ASSERT(b1.predecessor_count() == 0 && b1.successor_count() == 0, "b1 has incorrect counts");
         ASSERT(mf0.predecessor_count() == 0
@@ -619,13 +623,13 @@ void test_extract() {
         ASSERT(!q0.try_get(cm), "multifunction_node forwarded");
         ASSERT(!q1.try_get(cm), "multifunction_node forwarded");
         make_edge(b0, mf0);
-    
+
         /* b0          */
         /*   \   |  q0 */
         /*    mf0+     */
         /*       |  q1 */
         /* b1          */
-    
+
         ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 1, "b0 has incorrect counts");
         ASSERT(b1.predecessor_count() == 0 && b1.successor_count() == 0, "b1 has incorrect counts");
         ASSERT(mf0.predecessor_count() == 1
@@ -642,7 +646,7 @@ void test_extract() {
         ASSERT(my_count == 5, "multifunction_node fired though it has only one predecessor");
         ASSERT(!q0.try_get(cm), "multifunction_node forwarded");
         ASSERT(!q1.try_get(cm), "multifunction_node forwarded");
-    
+
         tbb::flow::make_edge(b1, mf0);
         tbb::flow::make_edge(tbb::flow::output_port<0>(mf0), q0);
         tbb::flow::make_edge(tbb::flow::output_port<1>(mf0), q1);
@@ -653,7 +657,7 @@ void test_extract() {
 }
 #endif
 
-int TestMain() { 
+int TestMain() {
     if( MinThread<1 ) {
         REPORT("number of threads must be positive\n");
         exit(1);
diff --git a/src/test/test_mutex.cpp b/src/test/test_mutex.cpp
index 091c116..23c80ec 100644
--- a/src/test/test_mutex.cpp
+++ b/src/test/test_mutex.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 //------------------------------------------------------------------------
diff --git a/src/test/test_mutex_native_threads.cpp b/src/test/test_mutex_native_threads.cpp
index 3f4c467..2b8abe4 100644
--- a/src/test/test_mutex_native_threads.cpp
+++ b/src/test/test_mutex_native_threads.cpp
@@ -1,27 +1,29 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/spin_mutex.h"
 #include "tbb/queuing_mutex.h"
 #include "tbb/queuing_rw_mutex.h"
 #include "tbb/spin_rw_mutex.h"
+#include "tbb/mutex.h"
+
 #include "tbb/tick_count.h"
 #include "tbb/atomic.h"
 
@@ -34,7 +36,7 @@ template<typename M>
 struct Counter {
     typedef M mutex_type;
     M mutex;
-    volatile long value; 
+    volatile long value;
     void flog_once( size_t mode );
 };
 
@@ -83,7 +85,7 @@ struct Invariant {
     bool is_okay() {
         return value_is( value[0] );
     }
-    void flog_once( size_t mode ); 
+    void flog_once( size_t mode );
 };
 
 template<typename M, long N>
@@ -159,7 +161,7 @@ struct Work: NoAssign {
     void operator()( int ) const {
         size_t step;
         while( (step=Order.fetch_and_add<tbb::acquire>(chunk))<TestSize )
-            for( size_t i=0; i<chunk && step<TestSize; ++i, ++step ) 
+            for( size_t i=0; i<chunk && step<TestSize; ++i, ++step )
                 state.flog_once(step);
     }
 };
@@ -211,6 +213,7 @@ int TestMain () {
         Test<tbb::queuing_mutex>( "queuing_mutex", p );
         Test<tbb::queuing_rw_mutex>( "queuing_rw_mutex", p );
         Test<tbb::spin_rw_mutex>( "spin_rw_mutex", p );
+        Test<tbb::mutex>( "mutex", p );
         TestReaderWriter<tbb::queuing_rw_mutex>( "queuing_rw_mutex", p );
         TestReaderWriter<tbb::spin_rw_mutex>( "spin_rw_mutex", p );
     }
diff --git a/src/test/test_opencl_kernel_32.spir b/src/test/test_opencl_kernel_32.spir
new file mode 100644
index 0000000..9905539
Binary files /dev/null and b/src/test/test_opencl_kernel_32.spir differ
diff --git a/src/test/test_opencl_kernel_64.spir b/src/test/test_opencl_kernel_64.spir
new file mode 100644
index 0000000..0f62ab5
Binary files /dev/null and b/src/test/test_opencl_kernel_64.spir differ
diff --git a/src/test/test_opencl_node.cl b/src/test/test_opencl_node.cl
new file mode 100644
index 0000000..40c529c
--- /dev/null
+++ b/src/test/test_opencl_node.cl
@@ -0,0 +1,189 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+static size_t my_strlen( __constant char* str ) {
+    size_t len = 0;
+    if ( str ) while ( *str++ ) ++len;
+    return len;
+}
+
+static void my_strcpy(__global char *dest, __constant char *src, size_t n) {
+    while ( n-- ) *dest++ = *src++;
+}
+
+static void set_error_msg( __global char *error_msg, size_t error_msg_size, __constant char *msg ) {
+    const size_t msg_len = my_strlen(msg);
+    const size_t len  = msg_len < error_msg_size ? msg_len : error_msg_size-1;
+    my_strcpy( error_msg, msg, len );
+    error_msg[len] = 0;
+}
+
+__kernel
+void TestArgumentPassing( 
+    __global int *b1, __global int *b2, int stride_x, int stride_y, int stride_z, int dim, __global char *error_msg, int error_msg_size ) {
+    const int x = get_global_id(0);
+    const int y = get_global_id(1);
+    const int z = get_global_id(2);
+    
+    if ( dim < 2 ) {
+        if ( y != 0 ) {
+            set_error_msg( error_msg, (size_t)error_msg_size, "Y dimension does not equal 0" );
+            return;
+        }
+        if ( stride_y != 0 ) {
+            set_error_msg( error_msg, (size_t)error_msg_size, "stride_y does not equal 0" );
+            return;
+        }
+    }
+    
+    if ( dim < 3 ) {
+        if ( z != 0 ) {
+            set_error_msg( error_msg, (size_t)error_msg_size, "Z dimension does not equal 0" );
+            return;
+        }
+        if ( stride_z != 0 ) {
+            set_error_msg( error_msg, (size_t)error_msg_size, "stride_z does not equal 0" );
+            return;
+        }
+    }
+    
+    const int index = x*stride_x+y*stride_y+z*stride_z;
+    b2[index] = b1[index];
+    
+    set_error_msg( error_msg, (size_t)error_msg_size, "Done" );
+}
+
+__kernel
+void Sum(
+       __global float *b1, __global float *b2 )
+{
+    const int index = get_global_id(0);
+    b2[index] += b1[index];
+}
+
+__kernel
+void Mul(
+       __global int *b1, __global int *b2 )
+{
+    const int index = get_global_id(0);
+    b1[index] *= b2[index];
+}
+
+__kernel
+void Sqr(
+    __global float *b2, __global float *b3   )
+{
+    const int index = get_global_id(0);
+    b3[index] = b2[index]*b2[index];
+}
+
+__kernel
+void DiamondDependencyTestFill(
+    __global short *b, short v )
+{
+    const int index = get_global_id(0);
+    b[index] = v;
+}
+
+__kernel
+void DiamondDependencyTestSquare(
+    __global short *b1, __global int *b2 )
+{
+    const int index = get_global_id(0);
+    b2[index] = b1[index]*b1[index];
+}
+
+__kernel
+void DiamondDependencyTestCube(
+    __global short *b1, __global int *b2 )
+{
+    const int index = get_global_id(0);
+    b2[index] = b1[index]*b1[index]*b1[index];
+}
+
+__kernel
+void DiamondDependencyTestDivision(
+    __global short *b, __global int *b1, __global int *b2 )
+{
+    const int index = get_global_id(0);
+    b[index] *= b2[index]/b1[index];
+}
+
+__kernel
+void LoopTestIter( __global long *b1, __global long *b2 ) {
+    const int index = get_global_id(0);
+    b1[index] += b2[index]++;
+}
+
+__kernel
+void ConcurrencyTestIter( __global char *b1, __global short *b2 ) {
+    const int index = get_global_id(0);
+    b2[index] += b1[index];
+}
+
+__kernel
+void BroadcastTest( __global int *b1, __global int *b2 ) {
+    const int index = get_global_id(0);
+    b2[index] = b1[index];
+}
+
+#if __IMAGE_SUPPORT__
+const sampler_t sampler = CLK_NORMALIZED_COORDS_FALSE | CLK_ADDRESS_NONE | CLK_FILTER_NEAREST;
+
+__kernel
+void Image2dTest (
+    __read_only image2d_t src,
+    __write_only image2d_t dst,
+    char type)
+{
+    const int x = get_global_id(0);
+    const int y = get_global_id(1);
+    int2 coord = (int2)(x, y);
+    switch ( type ) { 
+    case 'f':
+        write_imagef(dst, coord, read_imagef( src, sampler, coord )) ;
+        break;
+    case 'i':
+        write_imagei(dst, coord, read_imagei( src, sampler, coord )) ;
+        break;
+    case 'u':
+        write_imageui(dst, coord, read_imageui( src, sampler, coord )) ;
+        break;
+    }
+
+}
+
+__kernel
+void Image2dTestDepth (
+#if __OPENCL_VERSION__ >= 200
+    __read_only image2d_depth_t src,
+    __write_only image2d_depth_t dst,
+#else
+    __read_only image2d_t src,
+    __write_only image2d_t dst,
+#endif
+    char type )
+{
+    const int x = get_global_id(0);
+    const int y = get_global_id(1);
+    int2 coord = (int2)(x, y);
+    write_imagef(dst, coord, read_imagef( src, sampler, coord )) ;
+}
+#endif /* __IMAGE_SUPPORT__ */
diff --git a/src/test/test_opencl_node.cpp b/src/test/test_opencl_node.cpp
new file mode 100644
index 0000000..a987243
--- /dev/null
+++ b/src/test/test_opencl_node.cpp
@@ -0,0 +1,851 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+#define TBB_PREVIEW_FLOW_GRAPH_NODES 1
+#define TBB_PREVIEW_FLOW_GRAPH_FEATURES 1
+
+#include "tbb/tbb_config.h"
+
+// The old versions of MSVC 2013 fail to compile the test with fatal error
+#define __TBB_MSVC_TEST_COMPILATION_BROKEN (_MSC_VER && _MSC_FULL_VER <= 180021005 && !__INTEL_COMPILER)
+
+#if __TBB_PREVIEW_OPENCL_NODE && !__TBB_MSVC_TEST_COMPILATION_BROKEN
+#if _MSC_VER
+#pragma warning (disable: 4503) // Suppress "decorated name length exceeded, name was truncated" warning
+#endif
+#include <iterator>
+#include "tbb/task_scheduler_init.h"
+#include <vector>
+#include <iostream>
+
+#include "tbb/flow_graph_opencl_node.h"
+using namespace tbb::flow;
+
+#include "harness_assert.h"
+
+#if ( __INTEL_COMPILER && __INTEL_COMPILER <= 1500 ) || __clang__
+// In some corner cases the compiler fails to perform automatic type deduction for function pointer.
+// Workaround is to replace a function pointer with a function call.
+#define BROKEN_FUNCTION_POINTER_DEDUCTION(...) __VA_ARGS__()
+#else
+#define BROKEN_FUNCTION_POINTER_DEDUCTION(...) __VA_ARGS__
+#endif
+
+#if _MSC_VER <= 1800 && !__INTEL_COMPILER
+// In some corner cases the compiler fails to perform automatic std::initializer_list deduction for curly brackets.
+// Workaround is to perform implicit conversion.
+template <typename T>
+std::initializer_list<T> make_initializer_list( std::initializer_list<T> il ) { return il; }
+#define BROKEN_INITIALIZER_LIST_DEDUCTION(...) make_initializer_list(__VA_ARGS__)
+#else
+#define BROKEN_INITIALIZER_LIST_DEDUCTION(...) __VA_ARGS__
+#endif
+
+#include "harness.h"
+
+#include <mutex>
+std::once_flag tbbRootFlag;
+char *tbbRoot = NULL;
+std::string PathToFile(const std::string& fileName) {
+    std::call_once(tbbRootFlag, [] { tbbRoot = Harness::GetEnv("tbb_root"); });
+    std::string prefix = tbbRoot ? tbbRoot : "../..";
+    return prefix + "/src/test/" + fileName;
+}
+
+typedef tbb::flow::opencl_range OCLRange;
+
+void TestArgumentPassing() {
+    REMARK( "TestArgumentPassing: " );
+    opencl_graph g;
+
+    opencl_node <tuple<opencl_buffer<int>, opencl_buffer<int>, OCLRange>> k( g,
+        opencl_program<>( g, PathToFile( "test_opencl_node.cl" ) ).get_kernel( "TestArgumentPassing" ) );
+    split_node <tuple<opencl_buffer<int>, opencl_buffer<int>, OCLRange>> s( g );
+
+    make_edge( output_port<0>( s ), input_port<0>( k ) );
+    make_edge( output_port<1>( s ), input_port<1>( k ) );
+    make_edge( output_port<2>( s ), input_port<2>( k ) );
+
+    const int N = 1 * 1024 * 1024;
+    opencl_buffer<int> b1( g, N ), b2( g, N );
+
+    const int err_size = 128;
+    opencl_buffer<char> err( g, err_size );
+
+    OCLRange l;
+
+    *err.data() = 0; ASSERT( err.data() != std::string( "Done" ), NULL );
+    std::fill( b1.begin(), b1.end(), 1 );
+    k.set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ N }), BROKEN_INITIALIZER_LIST_DEDUCTION({ 16 }) } );
+    k.set_args( port_ref<0, 1>(), /* stride_x */ 1, /* stride_y */ 0, /* stride_z */ 0, /* dim */ 1, err, err_size );
+    s.try_put( std::tie( b1, b2, l ) );
+    g.wait_for_all();
+    ASSERT( err.data() == std::string( "Done" ), "Validation has failed" );
+    ASSERT( std::all_of( b2.begin(), b2.end(), []( int c ) { return c == 1; } ), "Validation has failed" );
+
+    // By default, the first device is used.
+    opencl_device d = *g.available_devices().begin();
+    std::array<size_t, 3> maxSizes = d.max_work_item_sizes();
+
+    *err.data() = 0; ASSERT( err.data() != std::string( "Done" ), NULL );
+    std::fill( b1.begin(), b1.end(), 2 );
+    int stride_x = 1;
+    k.set_args( port_ref<0>(), BROKEN_FUNCTION_POINTER_DEDUCTION( port_ref<1, 1> ), stride_x, /* stride_y */ 1024, /* stride_z */ 0, /* dim */ 2, err, err_size );
+    k.set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ 1024, 1024 }),
+                   BROKEN_INITIALIZER_LIST_DEDUCTION({ 16, min( (int)maxSizes[1], 16 ) }) } );
+    s.try_put( std::tie( b1, b2, l ) );
+    g.wait_for_all();
+    ASSERT( err.data() == std::string( "Done" ), "Validation has failed" );
+    ASSERT( std::all_of( b2.begin(), b2.end(), []( int c ) { return c == 2; } ), "Validation has failed" );
+
+    *err.data() = 0; ASSERT( err.data() != std::string( "Done" ), NULL );
+    std::fill( b1.begin(), b1.end(), 3 );
+    stride_x = 2; // Nothing should be changed
+    s.try_put( std::tie( b1, b2, l ) );
+    g.wait_for_all();
+    ASSERT( err.data() == std::string( "Done" ), "Validation has failed" );
+    ASSERT( std::all_of( b2.begin(), b2.end(), []( int c ) { return c == 3; } ), "Validation has failed" );
+
+    *err.data() = 0; ASSERT( err.data() != std::string( "Done" ), NULL );
+    std::fill( b1.begin(), b1.end(), 4 );
+    int stride_z = 64 * 64;
+    ASSERT( stride_z * 64 < N, NULL );
+    k.set_args( port_ref<0>(), BROKEN_FUNCTION_POINTER_DEDUCTION( port_ref<1> ), /* stride_x */ 1, /* stride_y */ 64, /* stride_z */ stride_z, /* dim */ 3, err, err_size );
+    k.set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ 64, 64, 64 }),
+                   BROKEN_INITIALIZER_LIST_DEDUCTION({ 4, min( (int)maxSizes[1], 4 ), min( (int)maxSizes[2], 4 ) }) } );
+    s.try_put( std::make_tuple( b1, b2, OCLRange() ) );
+    g.wait_for_all();
+    ASSERT( err.data() == std::string( "Done" ), "Validation has failed" );
+    ASSERT( std::all_of( b2.begin(), b2.begin() + stride_z * 64, []( int c ) { return c == 4; } ), "Validation has failed" );
+    ASSERT( std::all_of( b2.begin() + stride_z * 64, b2.end(), []( int c ) { return c == 3; } ), "Validation has failed" );
+
+    *err.data() = 0; ASSERT( err.data() != std::string( "Done" ), NULL );
+    std::fill( b1.begin(), b1.end(), 5 );
+    ASSERT( 2 * 64 * 64 < N, NULL );
+    k.set_args( port_ref<0, 1>(), /* stride_x */ 2, /* stride_y */ 2 * 64, /* stride_z */ 2 * 64 * 64, /* dim */ 3, err, err_size );
+    k.set_range( BROKEN_FUNCTION_POINTER_DEDUCTION( port_ref<2> ) );
+    l = { BROKEN_INITIALIZER_LIST_DEDUCTION({ 64, 64, 64 }),
+          BROKEN_INITIALIZER_LIST_DEDUCTION({ 4, min( (int)maxSizes[1], 4 ), min( (int)maxSizes[2], 4 ) }) };
+    s.try_put( std::make_tuple( b1, b2, l ) );
+    g.wait_for_all();
+    ASSERT( err.data() == std::string( "Done" ), "Validation has failed" );
+    auto it = b2.begin();
+    for ( size_t i = 0; i < 64 * 64 * 64; ++i ) ASSERT( it[i] == (i % 2 ? 4 : 5), "Validation has failed" );
+    for ( size_t i = 64 * 64 * 64; i < 2 * 64 * 64 * 64; ++i ) ASSERT( it[i] == (i % 2 ? 3 : 5), "Validation has failed" );
+    ASSERT( std::all_of( b2.begin() + 2 * stride_z * 64, b2.end(), []( int c ) { return c == 3; } ), "Validation has failed" );
+
+    *err.data() = 0; ASSERT( err.data() != std::string( "Done" ), NULL );
+    std::fill( b1.begin(), b1.end(), 6 );
+    k.set_args( port_ref<0, 1>(), /* stride_x */ 1, /* stride_y */ 1024, /* stride_z */ 0, /* dim */ 2, err, err_size );
+    k.set_range( std::deque<int>( { 1024, 1024 } ) );
+    s.try_put( std::make_tuple( b1, b2, l ) );
+    g.wait_for_all();
+    ASSERT( err.data() == std::string( "Done" ), "Validation has failed" );
+    ASSERT( std::all_of( b2.begin(), b2.end(), []( int c ) { return c == 6; } ), "Validation has failed" );
+    REMARK( "done\n" );
+}
+
+void SimpleDependencyTest() {
+    REMARK( "SimpleDependencyTest: " );
+    opencl_graph g;
+
+    const int N = 1 * 1024 * 1024;
+    opencl_buffer<float> b1( g, N ), b2( g, N ), b3( g, N );
+    std::vector<float> v1( N ), v2( N ), v3( N );
+
+    auto i1 = b1.access<write_only>();
+    auto i2 = b2.access<write_only>();
+
+    for ( int i = 0; i < N; ++i ) {
+        i1[i] = v1[i] = float( i );
+        i2[i] = v2[i] = float( 2 * i );
+    }
+
+    opencl_program<> p( g, PathToFile("test_opencl_node.cl") ) ;
+    opencl_node <tuple<opencl_buffer<float>, opencl_buffer<float>>> k1( g, p.get_kernel( "Sum" ) );
+    k1.set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ N }), BROKEN_INITIALIZER_LIST_DEDUCTION({ 16 }) } );
+
+    opencl_node <tuple<opencl_buffer<float>, opencl_buffer<float>>> k2( g, p.get_kernel( "Sqr" ) );
+    k2.set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ N }), BROKEN_INITIALIZER_LIST_DEDUCTION({ 16 }) } );
+
+    make_edge( output_port<1>( k1 ), input_port<0>( k2 ) );
+
+    split_node< tuple<opencl_buffer<float>, opencl_buffer<float>, opencl_buffer<float>> > s( g );
+
+    make_edge( output_port<0>( s ), input_port<0>( k1 ) );
+    make_edge( output_port<1>( s ), input_port<1>( k1 ) );
+    make_edge( output_port<2>( s ), input_port<1>( k2 ) );
+
+    s.try_put( std::tie( b1, b2, b3 ) );
+
+    g.wait_for_all();
+
+    // validation
+    for ( int i = 0; i < N; ++i ) {
+        v2[i] += v1[i];
+        v3[i] = v2[i] * v2[i];
+    }
+
+    auto o2 = b2.access<read_only>();
+    auto o3 = b3.access<read_only>();
+
+    ASSERT( memcmp( &o2[0], &v2[0], N*sizeof( float ) ) == 0, "Validation has failed" );
+    ASSERT( memcmp( &o3[0], &v3[0], N*sizeof( float ) ) == 0, "Validation has failed" );
+    REMARK( "done\n" );
+}
+
+class device_selector {
+    enum state {
+        DEFAULT_INITIALIZED,
+        COPY_INITIALIZED,
+        DELETED
+    };
+    state my_state;
+public:
+    device_selector() : my_state( DEFAULT_INITIALIZED ) {}
+    device_selector( const device_selector& ) : my_state( COPY_INITIALIZED ) {}
+    device_selector( device_selector&& ) : my_state( COPY_INITIALIZED ) {}
+    ~device_selector() { my_state = DELETED; }
+
+    template <typename D>
+    opencl_device operator()( opencl_factory<D> &f ) {
+        ASSERT( my_state == COPY_INITIALIZED, NULL );
+        ASSERT( ! f.devices().empty(), NULL );
+        return *( f.devices().begin() );
+    }
+};
+
+void BroadcastTest() {
+    REMARK( "BroadcastTest: " );
+    opencl_graph g;
+
+    const int N = 1 * 1024;
+    opencl_buffer<cl_int> b( g, N );
+
+    const int numNodes = 4 * tbb::task_scheduler_init::default_num_threads();
+    typedef opencl_node <tuple<opencl_buffer<cl_int>, opencl_buffer<cl_int>>> NodeType;
+    std::vector<NodeType> nodes( numNodes, NodeType( g,
+        opencl_program<>( g, PathToFile("test_opencl_node.cl") ).get_kernel( "BroadcastTest" ),
+        device_selector() ) );
+
+    for ( std::vector<NodeType>::iterator it = nodes.begin(); it != nodes.end(); ++it )
+        it->set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ N }), BROKEN_INITIALIZER_LIST_DEDUCTION({ 16 }) } );
+
+    broadcast_node<opencl_buffer<cl_int>> bc( g );
+    for ( auto &x : nodes ) make_edge( bc, x );
+
+    std::vector<opencl_buffer<cl_int>> res;
+    for ( int i = 0; i < numNodes; ++i ) res.emplace_back( g, N );
+
+    for ( cl_int r = 1; r < 100; ++r ) {
+        std::fill( b.begin(), b.end(), r );
+        bc.try_put( b );
+        for ( int i = 0; i < numNodes; ++i ) input_port<1>( nodes[i] ).try_put( res[i] );
+        g.wait_for_all();
+
+        ASSERT( std::all_of( res.begin(), res.end(), [r]( const opencl_buffer<cl_int> &buf ) {
+            return std::all_of( buf.begin(), buf.end(), [r]( cl_int c ) { return c == r; } );
+        } ), "Validation has failed" );
+    }
+    REMARK( "done\n" );
+}
+
+void DiamondDependencyTest() {
+    REMARK( "DiamondDependencyTest: " );
+    opencl_graph g;
+
+    const int N = 1 * 1024 * 1024;
+    opencl_buffer<cl_short> b( g, N );
+    opencl_buffer<cl_int> b1( g, N ), b2( g, N );
+
+    device_selector d;
+    opencl_program<> p( g, PathToFile("test_opencl_node.cl") );
+    opencl_node <tuple<opencl_buffer<cl_short>, cl_short>> k0( g, p.get_kernel( "DiamondDependencyTestFill" ), d );
+    k0.set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ N }) } );
+    opencl_node <tuple<opencl_buffer<cl_short>, opencl_buffer<cl_int>>> k1( g, p.get_kernel( "DiamondDependencyTestSquare" ) );
+    k1.set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ N }) } );
+    opencl_node <tuple<opencl_buffer<cl_short>, opencl_buffer<cl_int>>> k2( g, p.get_kernel( "DiamondDependencyTestCube" ) );
+    k2.set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ N }) } );
+    opencl_node <tuple<opencl_buffer<cl_short>, opencl_buffer<cl_int>, opencl_buffer<cl_int>>> k3( g, p.get_kernel( "DiamondDependencyTestDivision" ) );
+    k3.set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ N }) } );
+
+    make_edge( output_port<0>( k0 ), input_port<0>( k1 ) );
+    make_edge( output_port<0>( k0 ), input_port<0>( k2 ) );
+    make_edge( output_port<0>( k0 ), input_port<0>( k3 ) );
+
+    make_edge( output_port<1>( k1 ), input_port<1>( k3 ) );
+    make_edge( output_port<1>( k2 ), input_port<2>( k3 ) );
+
+    split_node< tuple<opencl_buffer<cl_short>, cl_short, opencl_buffer<cl_int>, opencl_buffer<cl_int>> > s( g );
+
+    make_edge( output_port<0>( s ), input_port<0>( k0 ) );
+    make_edge( output_port<1>( s ), input_port<1>( k0 ) );
+    make_edge( output_port<2>( s ), input_port<1>( k1 ) );
+    make_edge( output_port<3>( s ), input_port<1>( k2 ) );
+
+    for ( cl_short i = 1; i < 10; ++i ) {
+        s.try_put( std::tie( b, i, b1, b2 ) );
+        g.wait_for_all();
+        ASSERT( std::all_of( b.begin(), b.end(), [i]( cl_short c ) {return c == i*i; } ), "Validation has failed" );
+    }
+    REMARK( "done\n" );
+}
+
+void LoopTest() {
+    REMARK( "LoopTest: " );
+    opencl_graph g;
+
+    const int N = 1 * 1024;
+    opencl_buffer<cl_long> b1( g, N ), b2( g, N );
+
+    std::fill( b1.begin(), b1.end(), 0 );
+    std::fill( b2.begin(), b2.end(), 1 );
+
+    opencl_node <tuple<opencl_buffer<cl_long>, opencl_buffer<cl_long>>> k( g,
+        opencl_program<>( g, PathToFile("test_opencl_node.cl") ).get_kernel( "LoopTestIter" ) );
+    k.set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ N }) } );
+
+    make_edge( output_port<1>( k ), input_port<1>( k ) );
+
+    const cl_long numIters = 1000;
+    cl_long iter = 0;
+    typedef multifunction_node < dependency_msg<opencl_buffer<cl_long>>, tuple < opencl_buffer<cl_long>, dependency_msg<opencl_buffer<cl_long>> > > multinode;
+    multinode mf( g, serial, [&iter, numIters]( const dependency_msg<opencl_buffer<cl_long>> &b, multinode::output_ports_type& op ) {
+        if ( ++iter < numIters ) get<1>( op ).try_put( b );
+        else get<0>( op ).try_put( b );
+    } );
+
+    make_edge( output_port<1>( mf ), input_port<0>( k ) );
+    make_edge( output_port<0>( k ), mf );
+
+    function_node<opencl_buffer<cl_long>> f( g, unlimited, [numIters]( const opencl_buffer<cl_long> &b ) {
+        ASSERT( std::all_of( b.begin(), b.end(), [numIters]( cl_long c ) { return c == numIters*(numIters + 1) / 2; } ), "Validation has failed" );
+    } );
+
+    make_edge( output_port<0>( mf ), f );
+
+    split_node< tuple<opencl_buffer<cl_long>, opencl_buffer<cl_long> > > s( g );
+
+    make_edge( output_port<0>( s ), input_port<0>( k ) );
+    make_edge( output_port<1>( s ), input_port<1>( k ) );
+
+    s.try_put( std::tie( b1, b2 ) );
+    g.wait_for_all();
+    REMARK( "done\n" );
+}
+
+#include "harness_barrier.h"
+
+template <typename Factory>
+struct ConcurrencyTestBodyData {
+    typedef opencl_node< tuple<opencl_buffer<cl_char, Factory>, opencl_subbuffer<cl_short, Factory>>, queueing, Factory > NodeType;
+    typedef std::vector< NodeType* > VectorType;
+
+    Harness::SpinBarrier barrier;
+    VectorType nodes;
+    function_node< opencl_subbuffer<cl_short, Factory> > validationNode;
+    tbb::atomic<int> numChecks;
+
+    ConcurrencyTestBodyData( opencl_graph &g, int numThreads ) : barrier( numThreads ), nodes(numThreads),
+        validationNode( g, unlimited, [numThreads, this]( const opencl_subbuffer<cl_short, Factory> &b ) {
+            ASSERT( std::all_of( b.begin(), b.end(), [numThreads]( cl_short c ) { return c == numThreads; } ), "Validation has failed" );
+            --numChecks;
+        } )
+    {
+        numChecks = 100;
+        // The test creates subbers in pairs so numChecks should be even.
+        ASSERT( numChecks % 2 == 0, NULL );
+    }
+
+    ~ConcurrencyTestBodyData() {
+        ASSERT( numChecks == 0, NULL );
+        for ( NodeType *n : nodes ) delete n;
+    }
+};
+
+template <typename Factory>
+class ConcurrencyTestBody : NoAssign {
+    opencl_graph &g;
+    std::shared_ptr<ConcurrencyTestBodyData<Factory>> data;
+    Factory &f;
+    const std::vector<opencl_device> &filteredDevices;
+
+    class RoundRobinDeviceSelector : NoAssign {
+    public:
+        RoundRobinDeviceSelector( size_t cnt_, int num_checks_, const std::vector<opencl_device> &filteredDevices_ )
+            : cnt( cnt_ ), num_checks( num_checks_ ), filteredDevices( filteredDevices_ ) {
+        }
+        RoundRobinDeviceSelector( const RoundRobinDeviceSelector &src )
+            : cnt( src.cnt ), num_checks( src.num_checks ), filteredDevices( src.filteredDevices ) {
+            ASSERT( src.num_checks, "The source has already been copied" );
+            src.num_checks = 0;
+        }
+        ~RoundRobinDeviceSelector() {
+            ASSERT( !num_checks, "Device Selector has not been called required number of times" );
+        }
+        opencl_device operator()( Factory &f ) {
+            const opencl_device_list& devices = f.devices();
+            ASSERT( filteredDevices.size() == devices.size(), "Incorrect list of devices" );
+            std::vector<opencl_device>::const_iterator it = filteredDevices.cbegin();
+            for ( auto d = devices.begin(); d != devices.end(); ++d ) ASSERT( (*d) == *it++, "Incorrect list of devices" );
+            --num_checks;
+            return *(devices.begin() + cnt++ % devices.size());
+        }
+    private:
+        size_t cnt;
+        mutable int num_checks;
+        const std::vector<opencl_device> &filteredDevices;
+    };
+
+public:
+    ConcurrencyTestBody( opencl_graph &g_, int numThreads, Factory &f_, const std::vector<opencl_device> &filteredDevices_ )
+        : g( g_ )
+        , data( std::make_shared<ConcurrencyTestBodyData<Factory>>( g, numThreads ) )
+        , f( f_ )
+        , filteredDevices( filteredDevices_ ) {
+    }
+    void operator()( int idx ) const {
+        data->barrier.wait();
+
+        const int N = 1 * 1024;
+        const int numChecks = data->numChecks;
+
+        typedef typename ConcurrencyTestBodyData<Factory>::NodeType NodeType;
+        NodeType *n1 = new NodeType( g,
+            opencl_program<Factory>( f, PathToFile( "test_opencl_node.cl" ) ).get_kernel( "ConcurrencyTestIter" ),
+            RoundRobinDeviceSelector( idx, numChecks, filteredDevices ), f );
+        // n2 is used to test the copy constructor
+        NodeType *n2 = new NodeType( *n1 );
+        delete n1;
+        data->nodes[idx] = n2;
+        n2->set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ N }) } );
+
+        data->barrier.wait();
+
+        for ( size_t i = 0; i < data->nodes.size() - 1; ++i ) {
+            make_edge( output_port<0>( *data->nodes[i] ), input_port<0>( *data->nodes[i + 1] ) );
+            make_edge( output_port<1>( *data->nodes[i] ), input_port<1>( *data->nodes[i + 1] ) );
+        }
+        make_edge( output_port<1>( *data->nodes.back() ), data->validationNode );
+        for ( size_t i = 0; i < data->nodes.size() - 1; ++i ) {
+            remove_edge( output_port<0>( *data->nodes[i] ), input_port<0>( *data->nodes[i + 1] ) );
+            if ( i != (size_t)idx )
+                remove_edge( output_port<1>( *data->nodes[i] ), input_port<1>( *data->nodes[i + 1] ) );
+        }
+        if ( (size_t)idx != data->nodes.size() - 1 )
+            remove_edge( output_port<1>( *data->nodes.back() ), data->validationNode );
+
+        data->barrier.wait();
+        if ( idx == 0 ) {
+            // The first node needs two buffers.
+           Harness::FastRandom rnd(42);
+            cl_uint alignment = 0;
+            for (  auto d = filteredDevices.begin(); d != filteredDevices.end(); ++d ) {
+                cl_uint deviceAlignment;
+                (*d).info( CL_DEVICE_MEM_BASE_ADDR_ALIGN, deviceAlignment );
+                alignment = max( alignment, deviceAlignment );
+            }
+            alignment /= CHAR_BIT;
+            cl_uint alignmentMask = ~(alignment-1);
+            for ( int i = 0; i < numChecks; i += 2 ) {
+                for ( int j = 0; j < 2; ++j ) {
+                    opencl_buffer<cl_char, Factory> b1( f, N );
+                    std::fill( b1.begin(), b1.end(), 1 );
+                    input_port<0>( *n2 ).try_put( b1 );
+                }
+
+                // The subbers are created in pairs from one big buffer
+                opencl_buffer<cl_short, Factory> b( f, 4*N );
+                size_t id0 = (rnd.get() % N) & alignmentMask;
+                opencl_subbuffer<cl_short, Factory> sb1( b, id0, N );
+                std::fill( sb1.begin(), sb1.end(), 0 );
+                input_port<1>( *n2 ).try_put( sb1 );
+
+                size_t id1 = (rnd.get() % N) & alignmentMask;
+                opencl_subbuffer<cl_short, Factory> sb2 = b.subbuffer( 2*N + id1, N );
+                std::fill( sb2.begin(), sb2.end(), 0 );
+                input_port<1>( *n2 ).try_put( sb2 );
+            }
+        } else {
+            // Other nodes need only one buffer each because input_port<1> is connected with
+            // output_port<1> of the previous node.
+            for ( int i = 0; i < numChecks; ++i ) {
+                opencl_buffer<cl_char, Factory> b( f, N );
+                std::fill( b.begin(), b.end(), 1 );
+                input_port<0>( *n2 ).try_put( b );
+            }
+        }
+
+        g.wait_for_all();
+
+        // n2 will be deleted in destructor of ConcurrencyTestBodyData
+    }
+};
+
+const int concurrencyTestNumRepeats = 5;
+
+template <typename Factory = interface9::default_opencl_factory>
+void ConcurrencyTest( const std::vector<opencl_device> &filteredDevices ) {
+    const int numThreads = min( tbb::task_scheduler_init::default_num_threads(), 8 );
+    for ( int i = 0; i < concurrencyTestNumRepeats; ++i ) {
+        tbb::task_group_context ctx( tbb::task_group_context::isolated, tbb::task_group_context::default_traits | tbb::task_group_context::concurrent_wait );
+        opencl_graph g( ctx );
+        opencl_device_list dl;
+        Factory f( g );
+        ConcurrencyTestBody<Factory> body( g, numThreads, f, filteredDevices );
+        NativeParallelFor( numThreads, body );
+    }
+}
+
+#include <unordered_map>
+
+enum FilterPolicy {
+    MAX_DEVICES,
+    ONE_DEVICE
+};
+
+template <FilterPolicy Policy>
+struct DeviceFilter {
+    DeviceFilter() {
+        filteredDevices.clear();
+    }
+    opencl_device_list operator()( opencl_device_list device_list ) {
+        ASSERT( filteredDevices.size() == 0, NULL );
+        switch ( Policy ) {
+        case MAX_DEVICES:
+        {
+            std::unordered_map<std::string, std::vector<opencl_device>> platforms;
+            for (auto d = device_list.begin(); d != device_list.end(); ++d) {
+                platforms[(*d).platform_name()].push_back(*d);
+            }
+
+            // Select a platform with maximum number of devices.
+            filteredDevices = std::max_element( platforms.begin(), platforms.end(),
+                []( const std::pair<std::string, std::vector<opencl_device>>& p1, const std::pair<std::string, std::vector<opencl_device>>& p2 ) {
+                return p1.second.size() < p2.second.size();
+            } )->second;
+
+            if ( !numRuns ) {
+                REMARK( "  Chosen devices from the same platform (%s):\n", filteredDevices[0].platform_name().c_str() );
+                for ( auto d = filteredDevices.begin(); d != filteredDevices.end(); d++ ) {
+                    REMARK( "    %s\n", (*d).name().c_str() );
+                }
+            }
+
+            if ( filteredDevices.size() < 2 )
+                REPORT_ONCE( "Known issue: the system does not have several devices in one platform\n" );
+            break;
+        }
+        case ONE_DEVICE:
+        {
+            ASSERT( deviceNum < device_list.size(), NULL );
+            opencl_device_list::iterator it = device_list.begin();
+            std::advance( it, deviceNum );
+            filteredDevices.push_back( *it );
+            break;
+        }
+        default:
+            ASSERT( false, NULL );
+        }
+        opencl_device_list dl;
+        for ( auto d = filteredDevices.begin(); d != filteredDevices.end(); ++d ) dl.add( *d );
+
+        ++numRuns;
+
+        return dl;
+    }
+    static opencl_device_list::size_type deviceNum;
+    static int numRuns;
+    static std::vector<opencl_device> filteredDevices;
+};
+
+template <FilterPolicy Policy>
+opencl_device_list::size_type DeviceFilter<Policy>::deviceNum;
+template <FilterPolicy Policy>
+int DeviceFilter<Policy>::numRuns;
+template <FilterPolicy Policy>
+std::vector<opencl_device> DeviceFilter<Policy>::filteredDevices;
+
+void CustomFactoryTest() {
+    REMARK( "CustomFactoryTest:\n" );
+    REMARK( "  Multi device test:\n" );
+    DeviceFilter<MAX_DEVICES>::numRuns = 0;
+    typedef tbb::flow::opencl_factory <DeviceFilter<MAX_DEVICES>> custom_factory;
+    ConcurrencyTest<custom_factory>( DeviceFilter<MAX_DEVICES>::filteredDevices );
+    ASSERT( DeviceFilter<MAX_DEVICES>::numRuns == concurrencyTestNumRepeats, NULL );
+
+    REMARK( "  One device tests:\n" );
+    opencl_graph g;
+    for ( int i = 0; i < (int)g.available_devices().size(); ++i ) {
+        opencl_device_list::const_iterator it = g.available_devices().begin();
+        std::advance( it, i );
+        REMARK( "    %s: ", it->name().c_str() );
+        DeviceFilter<ONE_DEVICE>::numRuns = 0;
+        DeviceFilter<ONE_DEVICE>::deviceNum = i;
+        typedef tbb::flow::opencl_factory <DeviceFilter<ONE_DEVICE>> one_device_factory;
+        ConcurrencyTest<one_device_factory>( DeviceFilter<ONE_DEVICE>::filteredDevices );
+        ASSERT( DeviceFilter<ONE_DEVICE>::numRuns == concurrencyTestNumRepeats, NULL );
+        ASSERT( DeviceFilter<ONE_DEVICE>::filteredDevices[0] == *it, NULL );
+        REMARK( "done\n" );
+    }
+    REMARK( "CustomFactoryTest: done\n" );
+}
+
+void DefaultConcurrencyTest() {
+    REMARK( "DefaultConcurrencyTest: " );
+    // By default, the first device is selected.
+    opencl_graph g;
+    ConcurrencyTest( { *g.available_devices().begin() } );
+    REMARK( "done\n" );
+}
+
+
+void SpirKernelTest() {
+    REMARK( "SpirKernelTest:\n" );
+
+    const opencl_device_list devices = opencl_graph().available_devices();
+
+    for( auto d = devices.begin(); d != devices.end(); d++ ) {
+        if( !(*d).extension_available( "cl_khr_spir" ) ) {
+            REMARK( "  Extension 'cl_khr_spir' is not available on the device '%s'\n", (*d).name().c_str() );
+            continue;
+        }
+        opencl_graph g;
+        bool init = g.opencl_factory().init( { *d } );
+        ASSERT( init, "It should be the first initialization" );
+
+        std::string path_to_file = PathToFile(std::string("test_opencl_kernel_") +
+                                              std::to_string((*d).address_bits()) + std::string(".spir") );
+        REMARK("  Using SPIR file '%s' on device '%s'\n", path_to_file.c_str(), (*d).name().c_str());
+        const int N = 1 * 1024 * 1024;
+        opencl_buffer<float> b1( g, N ), b2( g, N );
+        std::vector<float> v1( N ), v2( N );
+
+        auto i1 = b1.access<write_only>();
+        auto i2 = b2.access<write_only>();
+
+        for ( int i = 0; i < N; ++i ) {
+            i1[i] = v1[i] = float( i );
+            i2[i] = v2[i] = float( 2 * i );
+        }
+
+        opencl_node < tuple<opencl_buffer<float>, opencl_buffer<float> > > k1( g,
+            opencl_program<>( g, opencl_program_type::SPIR, path_to_file ).get_kernel( "custom_summer" ) );
+        k1.set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ N }) } );
+
+        input_port<0>(k1).try_put( b1 );
+        input_port<1>(k1).try_put( b2 );
+
+        g.wait_for_all();
+
+        // validation
+        for ( int i = 0; i < N; ++i ) {
+            v2[i] += v1[i];
+        }
+
+        ASSERT( memcmp( &b2[0], &v2[0], N*sizeof( float ) ) == 0, "Validation has failed" );
+    }
+    REMARK( "done\n" );
+}
+
+void PrecompiledKernelTest() {
+    REMARK( "PrecompiledKernelTest:\n" );
+
+    opencl_graph g;
+    const opencl_device_list &devices = g.available_devices();
+    opencl_device_list::const_iterator it = std::find_if(
+        devices.cbegin(), devices.cend(),
+        []( const opencl_device &d ) {
+            std::string vendor_name = d.vendor();
+            return std::string::npos != vendor_name.find( "Intel" ) && CL_DEVICE_TYPE_GPU == d.type();
+        } );
+
+    if ( it == devices.cend() ) {
+        REPORT( "Known issue: there is no device in the system that supports the precompiled GPU kernel.\n" );
+        return;
+    }
+    bool init = g.opencl_factory().init( { *it } );
+    ASSERT( init, "It should be the first initialization" );
+    REMARK( "  Device name '%s', %s\n", it->name().c_str(), it->version().c_str() );
+
+    const int N = 1 * 1024 * 1024;
+    opencl_buffer<float> b1( g, N ), b2( g, N );
+    std::vector<float> v1( N ), v2( N );
+
+    auto i1 = b1.access<write_only>();
+    auto i2 = b2.access<write_only>();
+
+    for ( int i = 0; i < N; ++i ) {
+        i1[i] = v1[i] = float( i );
+        i2[i] = v2[i] = float( 2 * i );
+    }
+
+    std::string path_to_file = PathToFile(std::string("test_opencl_precompiled_kernel_gpu_") + std::to_string((*it).address_bits()) + std::string(".ir"));
+
+    opencl_program<> p(g, opencl_program_type::PRECOMPILED, path_to_file);
+    opencl_node < tuple<opencl_buffer<float>, opencl_buffer<float> > > k1(g, p.get_kernel("custom_subtractor"));
+    k1.set_range({ BROKEN_INITIALIZER_LIST_DEDUCTION({ N }) });
+
+    input_port<0>(k1).try_put( b1 );
+    input_port<1>(k1).try_put( b2 );
+
+    g.wait_for_all();
+
+    // validation
+    for ( int i = 0; i < N; ++i ) {
+        v2[i] -= v1[i];
+    }
+
+    ASSERT( memcmp( &b2[0], &v2[0], N*sizeof( float ) ) == 0, "Validation has failed" );
+    REMARK( "done\n" );
+}
+
+/*
+    /--functional_node-\   /-functional_node-\                       /--functional_node-\
+    |                  |   |                 |   /--opencl_node--\   |                  |
+    O Buffer generator O---O  Buffer filler  O---O               O---O Result validator O
+    |                  |   |                 |   |               |   |                  |
+    \------------------/   \-----------------/   |               |   \------------------/
+    |   Multiplier  |
+    /--functional_node-\   /-functional_node-\   |               |
+    |                  |   |                 |   |               |
+    O Buffer generator O---O  Buffer filler  O---O               O
+    |                  |   |                 |   \---------------/
+    \------------------/   \-----------------/
+    */
+
+template <typename Key>
+struct BufferWithKey : public opencl_buffer<int> {
+    typedef typename std::decay<Key>::type KeyType;
+    KeyType my_key;
+    int my_idx;
+
+    // TODO: investigate why defaul ctor is required
+    BufferWithKey() {}
+    BufferWithKey( opencl_graph &g, size_t N, int idx ) : opencl_buffer<int>( g, N ), my_idx( idx ) {}
+    const KeyType& key() const { return my_key; }
+};
+
+template <typename Key>
+Key KeyGenerator( int i );
+
+template <>
+int KeyGenerator<int>( int i ) { return i; }
+
+template <>
+std::string KeyGenerator<std::string>( int i ) { return std::to_string( i ); }
+
+template <typename Key>
+BufferWithKey<Key> GenerateRandomBuffer( BufferWithKey<Key> b ) {
+    b.my_key = KeyGenerator<typename std::decay<Key>::type>( b.my_idx );
+    Harness::FastRandom r( b.my_idx );
+    std::generate( b.begin(), b.end(), [&r]() { return r.get(); } );
+    return b;
+}
+
+template <typename Key, typename JP>
+bool KeyMatchingTest() {
+    const int N = 1000;
+    const int numMessages = 100;
+
+    opencl_graph g;
+    broadcast_node<int> b( g );
+
+    // Use dependency_msg's to have non-blocking map to host
+    function_node<int, dependency_msg<BufferWithKey<Key>>>
+        bufGenerator1( g, unlimited, [&g, N]( int i ) { return dependency_msg<BufferWithKey<Key>>( g, BufferWithKey<Key>( g, N, i ) ); } ),
+        bufGenerator2 = bufGenerator1;
+
+    function_node<BufferWithKey<Key>, BufferWithKey<Key>>
+        bufFiller1( g, unlimited, []( const BufferWithKey<Key> &b ) { return GenerateRandomBuffer<Key>( b ); } ),
+        bufFiller2 = bufFiller1;
+
+    opencl_node< tuple< BufferWithKey<Key>, BufferWithKey<Key> >, JP > k( g,
+        opencl_program<>( g, PathToFile( "test_opencl_node.cl" ) ).get_kernel( "Mul" ) );
+    k.set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ N }) } );
+
+    bool success = true;
+    function_node<BufferWithKey<Key>> checker( g, unlimited, [&success, N]( BufferWithKey<Key> b ) {
+        Harness::FastRandom r( b.my_idx );
+        std::for_each( b.begin(), b.end(), [&success, &r]( int bv ) {
+            const int rv = r.get();
+            if ( bv != rv*rv ) {
+                success = false;
+                return;
+            }
+        } );
+    } );
+
+    make_edge( bufGenerator1, bufFiller1 );
+    make_edge( bufGenerator2, bufFiller2 );
+    make_edge( bufFiller1, input_port<0>( k ) );
+    make_edge( bufFiller2, input_port<1>( k ) );
+    make_edge( output_port<0>( k ), checker );
+
+    for ( int i = 0; i < numMessages; ++i ) {
+        bufGenerator1.try_put( i );
+        bufGenerator2.try_put( numMessages - i - 1 );
+    }
+
+    g.wait_for_all();
+
+    return success;
+}
+
+void KeyMatchingTest() {
+    REMARK( "KeyMatchingTest:\n" );
+    REMARK( "  Queueing negative test: " );
+    bool res = !KeyMatchingTest<int, queueing>(); // The test should fail with the queueing policy, so the negative result is expected.
+    ASSERT( res, "Queueing negative test has failed" );
+    REMARK( "done\n  key_matching<int> test: " );
+    res = KeyMatchingTest<int, key_matching<int>>();
+    ASSERT( res, "key_matching<int> test has failed" );
+    REMARK( "done\n  key_matching<string&> test: " );
+    res = KeyMatchingTest<std::string&, key_matching<std::string&>>();
+    ASSERT( res, "key_matching<string&> test has failed" );
+    REMARK( "done\n" );
+    REMARK( "KeyMatchingTest: done\n" );
+}
+
+int TestMain() {
+    TestArgumentPassing();
+
+    SimpleDependencyTest();
+    BroadcastTest();
+    DiamondDependencyTest();
+    LoopTest();
+
+    DefaultConcurrencyTest();
+    CustomFactoryTest();
+
+    SpirKernelTest();
+#if !__APPLE__
+    // Consider better support for precompiled programs on Apple
+    PrecompiledKernelTest();
+#endif
+
+    KeyMatchingTest();
+
+    return Harness::Done;
+}
+#else
+#define HARNESS_SKIP_TEST 1
+#include "harness.h"
+#endif
diff --git a/src/test/test_opencl_precompiled_kernel_gpu_32.ir b/src/test/test_opencl_precompiled_kernel_gpu_32.ir
new file mode 100644
index 0000000..d65513a
Binary files /dev/null and b/src/test/test_opencl_precompiled_kernel_gpu_32.ir differ
diff --git a/src/test/test_opencl_precompiled_kernel_gpu_64.ir b/src/test/test_opencl_precompiled_kernel_gpu_64.ir
new file mode 100644
index 0000000..f05cdc6
Binary files /dev/null and b/src/test/test_opencl_precompiled_kernel_gpu_64.ir differ
diff --git a/src/test/test_openmp.cpp b/src/test/test_openmp.cpp
index 86790de..364a2c9 100644
--- a/src/test/test_openmp.cpp
+++ b/src/test/test_openmp.cpp
@@ -1,26 +1,26 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Test mixing OpenMP and TBB
 
-/* SCR #471 
+/* SCR #471
  Below is workaround to compile test within environment of Intel Compiler
  but by Microsoft Compiler. So, there is wrong "omp.h" file included and
  manifest section is missed from .exe file - restoring here.
@@ -40,42 +40,42 @@
 
     #if defined(_DEBUG)
         #if defined(_M_IX86)
-            #pragma comment(linker,"/manifestdependency:\"type='win32' "            \
-                "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".DebugOpenMP' "         \
+            #pragma comment(linker,"/manifestdependency:\"type='win32' "        \
+                "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".DebugOpenMP' "      \
                 "version='" _CRT_ASSEMBLY_VERSION "' "                          \
                 "processorArchitecture='x86' "                                  \
                 "publicKeyToken='" _VC_ASSEMBLY_PUBLICKEYTOKEN "'\"")
         #elif defined(_M_X64)
-            #pragma comment(linker,"/manifestdependency:\"type='win32' "            \
-                "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".DebugOpenMP' "         \
+            #pragma comment(linker,"/manifestdependency:\"type='win32' "        \
+                "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".DebugOpenMP' "      \
                 "version='" _CRT_ASSEMBLY_VERSION "' "                          \
-                "processorArchitecture='amd64' "                                  \
+                "processorArchitecture='amd64' "                                \
                 "publicKeyToken='" _VC_ASSEMBLY_PUBLICKEYTOKEN "'\"")
         #elif defined(_M_IA64)
-            #pragma comment(linker,"/manifestdependency:\"type='win32' "            \
-                "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".DebugOpenMP' "         \
+            #pragma comment(linker,"/manifestdependency:\"type='win32' "        \
+                "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".DebugOpenMP' "      \
                 "version='" _CRT_ASSEMBLY_VERSION "' "                          \
-                "processorArchitecture='ia64' "                                  \
+                "processorArchitecture='ia64' "                                 \
                 "publicKeyToken='" _VC_ASSEMBLY_PUBLICKEYTOKEN "'\"")
         #endif
     #else   // _DEBUG
         #if defined(_M_IX86)
-            #pragma comment(linker,"/manifestdependency:\"type='win32' "            \
-                "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".OpenMP' "              \
+            #pragma comment(linker,"/manifestdependency:\"type='win32' "        \
+                "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".OpenMP' "           \
                 "version='" _CRT_ASSEMBLY_VERSION "' "                          \
                 "processorArchitecture='x86' "                                  \
                 "publicKeyToken='" _VC_ASSEMBLY_PUBLICKEYTOKEN "'\"")
         #elif defined(_M_X64)
-            #pragma comment(linker,"/manifestdependency:\"type='win32' "            \
-                "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".OpenMP' "              \
+            #pragma comment(linker,"/manifestdependency:\"type='win32' "        \
+                "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".OpenMP' "           \
                 "version='" _CRT_ASSEMBLY_VERSION "' "                          \
-                "processorArchitecture='amd64' "                                  \
+                "processorArchitecture='amd64' "                                \
                 "publicKeyToken='" _VC_ASSEMBLY_PUBLICKEYTOKEN "'\"")
         #elif defined(_M_IA64)
-            #pragma comment(linker,"/manifestdependency:\"type='win32' "            \
-                "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".OpenMP' "              \
+            #pragma comment(linker,"/manifestdependency:\"type='win32' "        \
+                "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".OpenMP' "           \
                 "version='" _CRT_ASSEMBLY_VERSION "' "                          \
-                "processorArchitecture='ia64' "                                  \
+                "processorArchitecture='ia64' "                                 \
                 "publicKeyToken='" _VC_ASSEMBLY_PUBLICKEYTOKEN "'\"")
         #endif
     #endif  // _DEBUG
@@ -90,9 +90,9 @@ typedef short T;
 void SerialConvolve( T c[], const T a[], int m, const T b[], int n ) {
     for( int i=0; i<m+n-1; ++i ) {
         int start = i<n ? 0 : i-n+1;
-        int finish = i<m ? i+1 : m; 
+        int finish = i<m ? i+1 : m;
         T sum = 0;
-        for( int j=start; j<finish; ++j ) 
+        for( int j=start; j<finish; ++j )
             sum += a[j]*b[i-j];
         c[i] = sum;
     }
@@ -126,11 +126,11 @@ public:
     {}
     InnerBody( InnerBody& x, split ) :
         my_a(x.my_a), my_b(x.my_b), i(x.i), sum(0)
-    { 
+    {
     }
     void join( InnerBody& x ) {sum += x.sum;}
     void operator()( const blocked_range<int>& range ) {
-        for( int j=range.begin(); j!=range.end(); ++j ) 
+        for( int j=range.begin(); j!=range.end(); ++j )
             sum += my_a[j]*my_b[i-j];
     }
 };
@@ -142,13 +142,13 @@ public:
 //! Test OpenMMP loop around TBB loop
 void OpenMP_TBB_Convolve( T c[], const T a[], int m, const T b[], int n ) {
     REMARK("testing OpenMP loop around TBB loop\n");
-#pragma omp parallel 
+#pragma omp parallel
     {
         task_scheduler_init init;
 #pragma omp for
         for( int i=0; i<m+n-1; ++i ) {
             int start = i<n ? 0 : i-n+1;
-            int finish = i<m ? i+1 : m; 
+            int finish = i<m ? i+1 : m;
             InnerBody body(c,a,b,i);
             parallel_reduce( blocked_range<int>(start,finish,10), body );
             c[i] = body.sum;
@@ -163,17 +163,16 @@ class OuterBody: NoAssign {
     const int m;
     const int n;
 public:
-    T sum;
     OuterBody( T c[], const T a[], int m_, const T b[], int n_ ) :
         my_a(a), my_b(b), my_c(c), m(m_), n(n_)
     {}
     void operator()( const blocked_range<int>& range ) const {
         for( int i=range.begin(); i!=range.end(); ++i ) {
             int start = i<n ? 0 : i-n+1;
-            int finish = i<m ? i+1 : m; 
+            int finish = i<m ? i+1 : m;
             T sum = 0;
 #pragma omp parallel for reduction(+:sum)
-            for( int j=start; j<finish; ++j ) 
+            for( int j=start; j<finish; ++j )
                 sum += my_a[j]*my_b[i-j];
             my_c[i] = sum;
         }
@@ -186,29 +185,57 @@ void TBB_OpenMP_Convolve( T c[], const T a[], int m, const T b[], int n ) {
     parallel_for( blocked_range<int>(0,m+n-1,10), OuterBody( c, a, m, b, n ) );
 }
 
-#include <stdio.h>
+#if __INTEL_COMPILER
+// A regression test on OpenMP affinity settings affecting TBB.
+// Testing only with __INTEL_COMPILER because we do not provide interoperability with other OpenMP implementations.
+
+#define __TBB_NUM_THREADS_AFFECTED_BY_LIBIOMP (KMP_VERSION_BUILD<20150922)
+
+void TestNumThreads() {
+#if __TBB_NUM_THREADS_AFFECTED_BY_LIBIOMP
+    REPORT("Known issue: the default number of threads is affected by OpenMP affinity\n");
+#else
+    REMARK("Compare default number of threads for OpenMP and TBB\n");
+    Harness::SetEnv("KMP_AFFINITY","compact");
+    // Make an OpenMP call before initializing TBB
+    int omp_nthreads = omp_get_max_threads();
+    #pragma omp parallel
+    {}
+    int tbb_nthreads = tbb::task_scheduler_init::default_num_threads();
+    REMARK("# of threads (OpenMP): %d\n", omp_nthreads);
+    REMARK("# of threads (TBB): %d\n", tbb_nthreads);
+    // For the purpose of testing, assume that OpenMP and TBB should utilize the same # of threads.
+    // If it's not true on some platforms, the test will need to be adjusted.
+    ASSERT( tbb_nthreads==omp_nthreads, "Initialization of TBB is possibly affected by OpenMP");
+#endif
+}
+#endif // __INTEL_COMPILER
 
 const int M = 17*17;
 const int N = 13*13;
-T a[M], b[N];
+T A[M], B[N];
 T expected[M+N], actual[M+N];
 
 template <class Func>
 void RunTest( Func F, int m, int n, int p, bool wait_workers = false ) {
-    task_scheduler_init init( p, 0, wait_workers );
+    task_scheduler_init init( p );
     memset( actual, -1, (m+n)*sizeof(T) );
-    F( actual, a, m, b, n );
+    F( actual, A, m, B, n );
     ASSERT( memcmp(actual, expected, (m+n-1)*sizeof(T))==0, NULL );
+    wait_workers? init.blocking_terminate() : init.terminate();
 }
 
 int TestMain () {
+#if __INTEL_COMPILER
+    TestNumThreads(); // Testing initialization-related behavior; must be the first
+#endif // __INTEL_COMPILER
     MinThread = 1;
     for( int p=MinThread; p<=MaxThread; ++p ) {
         for( int m=1; m<=M; m*=17 ) {
             for( int n=1; n<=N; n*=13 ) {
-                for( int i=0; i<m; ++i ) a[i] = T(1+i/5);
-                for( int i=0; i<n; ++i ) b[i] = T(1+i/7);
-                SerialConvolve( expected, a, m, b, n );
+                for( int i=0; i<m; ++i ) A[i] = T(1+i/5);
+                for( int i=0; i<n; ++i ) B[i] = T(1+i/7);
+                SerialConvolve( expected, A, m, B, n );
                 RunTest( OpenMP_TBB_Convolve, m, n, p );
                 RunTest( TBB_OpenMP_Convolve, m, n, p
 #if OPENMP_ASYNC_SHUTDOWN_BROKEN
diff --git a/src/test/test_overwrite_node.cpp b/src/test/test_overwrite_node.cpp
index 647a1bb..1a98b8b 100644
--- a/src/test/test_overwrite_node.cpp
+++ b/src/test/test_overwrite_node.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "harness_graph.h"
@@ -23,7 +23,7 @@
 #include "tbb/task_scheduler_init.h"
 
 #define N 300
-#define T 4 
+#define T 4
 #define M 5
 
 template< typename R >
@@ -138,7 +138,7 @@ void parallel_read_write_tests() {
     }
 }
 
-int TestMain() { 
+int TestMain() {
     if( MinThread<1 ) {
         REPORT("number of threads must be positive\n");
         exit(1);
diff --git a/src/test/test_parallel_do.cpp b/src/test/test_parallel_do.cpp
index 3c28ee5..d5d55ef 100644
--- a/src/test/test_parallel_do.cpp
+++ b/src/test/test_parallel_do.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/parallel_do.h"
@@ -39,7 +39,10 @@ class value_t {
     value_t& operator= ( const value_t& );
 public:
     value_t ( size_t xx ) : x(xx) { ++g_values_counter; }
-    value_t ( const value_t& v ) : x(v.value()) { ++g_values_counter; }
+    value_t ( const value_t& v ) : x(v.x) { ++g_values_counter; }
+#if __TBB_CPP11_RVALUE_REF_PRESENT
+    value_t ( value_t&& v ) : x(v.x) { ++g_values_counter; }
+#endif
     ~value_t () { --g_values_counter; }
     size_t value() const volatile { return x; }
 };
@@ -89,12 +92,23 @@ public:
     }
 };
 
+#if __TBB_CPP11_RVALUE_REF_PRESENT
+/** Work item is passed by rvalue reference here. **/
+class FakeTaskGeneratorBody_RvalueRefVersion {
+public:
+    void operator() ( value_t&& depth ) const {
+        g_tasks_observed += FindNumOfTasks(depth.value());
+    }
+};
+#endif
+
 void do_work ( const value_t& depth, tbb::parallel_do_feeder<value_t>& feeder ) {
     ++g_tasks_observed;
-    size_t  d=depth.value();
-    --d;
-    for( size_t i = 0; i < depth.value(); ++i)
-        feeder.add(value_t(d));
+    value_t new_value(depth.value()-1);
+    for( size_t i = 0; i < depth.value(); ++i) {
+        if (i%2) feeder.add( new_value ); // pass lvalue
+        else     feeder.add( value_t(depth.value()-1) ); // pass rvalue
+    }
 }
 
 //! Standard form of the parallel_do functor object.
@@ -110,8 +124,9 @@ private:
     // Assert that parallel_do does not ever access body constructors
     TaskGeneratorBody () {}
     TaskGeneratorBody ( const TaskGeneratorBody& );
-    // TestBody() needs access to the default constructor
+    // These functions need access to the default constructor
     template<class Body, class Iterator> friend void TestBody( size_t );
+    template<class Body, class Iterator> friend void TestBody_MoveOnly( size_t );
 };
 
 /** Work item is passed by reference here. **/
@@ -159,9 +174,38 @@ public:
     }
 };
 
+#if __TBB_CPP11_RVALUE_REF_PRESENT
+/** Work item is passed by rvalue reference here. **/
+class TaskGeneratorBody_RvalueRefVersion
+{
+public:
+    void operator() ( value_t&& depth, tbb::parallel_do_feeder<value_t>& feeder ) const {
+        do_work(depth, feeder);
+    }
+};
+#endif
 
 static value_t g_depths[N_DEPTHS] = {0, 1, 2, 3, 4, 0, 1, 0, 1, 2, 0, 1, 2, 3, 0, 1, 2, 0, 1, 2};
 
+#if __TBB_CPP11_RVALUE_REF_PRESENT
+template<class Body, class Iterator>
+void TestBody_MoveIter ( const Body& body, Iterator begin, Iterator end  ) {
+    typedef std::move_iterator<Iterator> MoveIterator;
+    MoveIterator mbegin(begin);
+    MoveIterator mend(end);
+    g_tasks_observed = 0;
+    tbb::parallel_do(mbegin, mend, body);
+    ASSERT (g_tasks_observed == g_tasks_expected, NULL);
+}
+
+template<class Body, class Iterator>
+void TestBody_MoveOnly ( size_t depth ) {
+    typedef typename std::iterator_traits<Iterator>::value_type value_type;
+    value_type a_depths[N_DEPTHS] = {0, 1, 2, 3, 4, 0, 1, 0, 1, 2, 0, 1, 2, 3, 0, 1, 2, 0, 1, 2};
+    TestBody_MoveIter( Body(), Iterator(a_depths), Iterator(a_depths + depth));
+}
+#endif
+
 template<class Body, class Iterator>
 void TestBody ( size_t depth ) {
     typedef typename std::iterator_traits<Iterator>::value_type value_type;
@@ -172,10 +216,13 @@ void TestBody ( size_t depth ) {
     g_tasks_observed = 0;
     tbb::parallel_do(begin, end, body);
     ASSERT (g_tasks_observed == g_tasks_expected, NULL);
+#if __TBB_CPP11_RVALUE_REF_PRESENT
+    TestBody_MoveIter( body, Iterator(a_depths), Iterator(a_depths + depth) );
+#endif
 }
 
 template<class Iterator>
-void TestIterator_RvalueOnly ( int /*nthread*/, size_t depth ) {
+void TestIterator_Common ( size_t depth ) {
     TestBody<FakeTaskGeneratorBody, Iterator> (depth);
     TestBody<FakeTaskGeneratorBody_ConstRefVersion, Iterator> (depth);
     TestBody<TaskGeneratorBody, Iterator> (depth);
@@ -184,30 +231,48 @@ void TestIterator_RvalueOnly ( int /*nthread*/, size_t depth ) {
 }
 
 template<class Iterator>
-void TestIterator ( int nthread, size_t depth ) {
-    TestIterator_RvalueOnly<Iterator>(nthread, depth);
+void TestIterator_Const ( size_t depth ) {
+    TestIterator_Common<Iterator>(depth);
+    TestBody<TaskGeneratorBody_ConstVolatileRefVersion, Iterator> (depth);
+}
+
+template<class Iterator>
+void TestIterator_Modifiable ( size_t depth ) {
+    TestIterator_Const<Iterator>(depth);
     TestBody<FakeTaskGeneratorBody_RefVersion, Iterator> (depth);
     TestBody<FakeTaskGeneratorBody_VolatileRefVersion, Iterator> (depth);
     TestBody<TaskGeneratorBody_RefVersion, Iterator> (depth);
     TestBody<TaskGeneratorBody_VolatileRefVersion, Iterator> (depth);
-    TestBody<TaskGeneratorBody_ConstVolatileRefVersion, Iterator> (depth);
+#if __TBB_CPP11_RVALUE_REF_PRESENT
+    TestBody_MoveOnly<FakeTaskGeneratorBody_RvalueRefVersion, Iterator> (depth);
+    TestBody_MoveOnly<TaskGeneratorBody_RvalueRefVersion, Iterator> (depth);
+#endif
+}
+
+template<class Iterator>
+void TestIterator_Movable ( size_t depth ) {
+    TestIterator_Common<Iterator>(depth);
+#if __TBB_CPP11_RVALUE_REF_PRESENT
+    TestBody<FakeTaskGeneratorBody_RvalueRefVersion, Iterator> (depth);
+    TestBody<TaskGeneratorBody_RvalueRefVersion, Iterator> (depth);
+#endif
 }
 
-void Run( int nthread ) {
+void Run( int /*nthread*/ ) {
     for( size_t depth = 0; depth <= N_DEPTHS; ++depth ) {
         g_tasks_expected = 0;
         for ( size_t i=0; i < depth; ++i )
             g_tasks_expected += FindNumOfTasks( g_depths[i].value() );
         // Test for iterators over values convertible to work item type
-        TestIterator_RvalueOnly<size_t*>(nthread, depth);
+        TestIterator_Movable<size_t*>(depth);
         // Test for random access iterators
-        TestIterator<value_t*>(nthread, depth);
+        TestIterator_Modifiable<value_t*>(depth);
         // Test for input iterators
-        TestIterator<Harness::InputIterator<value_t> >(nthread, depth);
+        TestIterator_Modifiable<Harness::InputIterator<value_t> >(depth);
         // Test for forward iterators
-        TestIterator<Harness::ForwardIterator<value_t> >(nthread, depth);
+        TestIterator_Modifiable<Harness::ForwardIterator<value_t> >(depth);
         // Test for const random access iterators
-        TestIterator_RvalueOnly<Harness::ConstRandomIterator<value_t> >(nthread, depth);
+        TestIterator_Const<Harness::ConstRandomIterator<value_t> >(depth);
     }
 }
 
@@ -264,6 +329,94 @@ void range_do_test() {
     ASSERT(range_based_for_accumulate(v, std::plus<size_t>(), init_sum) == init_sum, "elements of v not all zeros");
 }
 
+#if __TBB_CPP11_RVALUE_REF_PRESENT
+struct Movable {
+    Movable() : alive(true), addtofeed(true) {}
+    Movable(bool addtofeed_) : alive(true), addtofeed(addtofeed_) {}
+    Movable(Movable&& other) {
+        ASSERT(other.alive, "Moving from a dead object");
+        alive = true;
+        addtofeed = other.addtofeed;
+        other.alive = false;
+    }
+    Movable& operator=(Movable&& other) {
+        ASSERT(alive, "Assignment to a dead object");
+        ASSERT(other.alive, "Assignment of a dead object");
+        other.alive = false;
+        return *this;
+    }
+    Movable(const Movable&) { REPORT("Error: copy ctor prefered.\n"); }
+    Movable& operator=(const Movable&) { REPORT("Error: copy assing operator prefered.\n"); return *this; }
+    ~Movable() { alive = false; }
+    volatile bool alive;
+    bool addtofeed;
+};
+
+struct MoveOnly : Movable, NoCopy {
+    MoveOnly() : Movable() {}
+    MoveOnly(bool addtofeed_) : Movable(addtofeed_) {}
+    MoveOnly(MoveOnly&& other): Movable(std::move(other)) {}
+};
+
+template<typename T>
+void RecordAndAdd(const T& in, tbb::parallel_do_feeder<T>& feeder) {
+    ASSERT(in.alive, "Got dead object in body");
+    size_t i = ++g_tasks_observed;
+    if (in.addtofeed) {
+        if (i%2) feeder.add(T(false));
+        else {
+            T a(false);
+            feeder.add(std::move(a));
+        }
+    }
+}
+// Take an item by rvalue reference
+template<typename T>
+struct TestMoveIteratorBody {
+    void operator() (T&& in, tbb::parallel_do_feeder<T>& feeder) const { RecordAndAdd(in, feeder); }
+};
+// Take an item by value
+template<typename T>
+struct TestMoveIteratorBodyByValue {
+    void operator() (T in, tbb::parallel_do_feeder<T>& feeder) const { RecordAndAdd(in, feeder); }
+};
+
+template<typename Iterator, typename Body>
+void TestMoveIterator() {
+    typedef typename std::iterator_traits<Iterator>::value_type value_type;
+
+    Body body;
+    const size_t size = 65;
+    g_tasks_observed = 0;
+    value_type a[size];
+    tbb::parallel_do( std::make_move_iterator(Iterator(a)), std::make_move_iterator(Iterator(a+size)), body );
+    ASSERT(size * 2  == g_tasks_observed, NULL);
+}
+
+template<typename T>
+void DoTestMoveSemantics() {
+    TestMoveIterator< Harness::InputIterator<T>, TestMoveIteratorBody<T> >();
+    TestMoveIterator< Harness::ForwardIterator<T>, TestMoveIteratorBody<T> >();
+    TestMoveIterator< Harness::RandomIterator<T>, TestMoveIteratorBody<T> >();
+
+    TestMoveIterator< Harness::InputIterator<T>, TestMoveIteratorBodyByValue<T> >();
+    TestMoveIterator< Harness::ForwardIterator<T>, TestMoveIteratorBodyByValue<T> >();
+    TestMoveIterator< Harness::RandomIterator<T>, TestMoveIteratorBodyByValue<T> >();
+}
+
+void TestMoveSemantics() {
+    DoTestMoveSemantics<Movable>();
+#if __TBB_CPP11_IS_COPY_CONSTRUCTIBLE_PRESENT && !__TBB_IS_COPY_CONSTRUCTIBLE_BROKEN
+    //  parallel_do uses is_copy_constructible to support non-copyable types
+    DoTestMoveSemantics<MoveOnly>();
+#endif
+}
+#else /* __TBB_CPP11_RVALUE_REF_PRESENT */
+void TestMoveSemantics() {
+    REPORT("Known issue: move support tests are skipped.\n");
+}
+#endif
+
 int TestMain () {
     if( MinThread<1 ) {
         REPORT("number of threads must be positive\n");
@@ -277,8 +430,10 @@ int TestMain () {
         // Test that all workers sleep when no work
         TestCPUUserTime(p);
     }
-    // This check must be performed after the scheduler terminated because only in this 
-    // case there is a guarantee that the workers already destroyed their last tasks. 
+    // This check must be performed after the scheduler terminated because only in this
+    // case there is a guarantee that the workers already destroyed their last tasks.
     ASSERT( g_values_counter == 0, "Value objects were leaked" );
+
+    TestMoveSemantics();
     return Harness::Done;
 }
diff --git a/src/test/test_parallel_for.cpp b/src/test/test_parallel_for.cpp
index 958d5ca..2913996 100644
--- a/src/test/test_parallel_for.cpp
+++ b/src/test/test_parallel_for.cpp
@@ -1,26 +1,26 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Test for function template parallel_for.h
 
-// Enable testing of serial subset.
+// These features are pure additions and thus can be always "on" in the test
 #define TBB_PREVIEW_SERIAL_SUBSET 1
 #include "harness_defs.h"
 
@@ -114,19 +114,20 @@ struct empty_partitioner_tag {};
 template <typename Flavor, typename Partitioner, typename Range, typename Body>
 struct Invoker;
 
+#if TBB_PREVIEW_SERIAL_SUBSET
 template <typename Range, typename Body>
 struct Invoker<serial_tag, empty_partitioner_tag, Range, Body> {
     void operator()( const Range& r, const Body& body, empty_partitioner_tag& ) {
         tbb::serial:: parallel_for( r, body );
     }
 };
-
 template <typename Partitioner, typename Range, typename Body>
 struct Invoker<serial_tag, Partitioner, Range, Body> {
     void operator()( const Range& r, const Body& body, Partitioner& p ) {
         tbb::serial:: parallel_for( r, body, p );
     }
 };
+#endif
 
 template <typename Range, typename Body>
 struct Invoker<parallel_tag, empty_partitioner_tag, Range, Body> {
@@ -145,6 +146,7 @@ struct Invoker<parallel_tag, Partitioner, Range, Body> {
 template <typename Flavor, typename Partitioner, typename T, typename Body>
 struct InvokerStep;
 
+#if TBB_PREVIEW_SERIAL_SUBSET
 template <typename T, typename Body>
 struct InvokerStep<serial_tag, empty_partitioner_tag, T, Body> {
     void operator()( const T& first, const T& last, const Body& f, empty_partitioner_tag& ) {
@@ -164,6 +166,7 @@ struct InvokerStep<serial_tag, Partitioner, T, Body> {
         tbb::serial:: parallel_for( first, last, step, f, p );
     }
 };
+#endif
 
 template <typename T, typename Body>
 struct InvokerStep<parallel_tag, empty_partitioner_tag, T, Body> {
@@ -358,7 +361,7 @@ class my_worker_pfor_step_task : public tbb::task
 {
     tbb::task_group_context &my_ctx;
 
-    tbb::task* execute () {
+    tbb::task* execute () __TBB_override {
         if (g_worker_task_step == 0){
             tbb::parallel_for((size_t)0, (size_t)PFOR_BUFFER_TEST_SIZE, functor_to_cancel(), my_ctx);
         }else{
@@ -525,6 +528,7 @@ void test() {
     const Body sync_body( sb );
     tbb::affinity_partitioner ap;
     tbb::parallel_for( range, sync_body, ap );
+    tbb::parallel_for( range, sync_body, tbb::static_partitioner() );
 }
 
 } // namespace uniform_distribution
@@ -578,6 +582,116 @@ void test() {
 
 } // namespace various_range_implementations
 
+#include <map>
+#include <utility>
+#include "tbb/task_arena.h"
+#include "tbb/enumerable_thread_specific.h"
+
+namespace parallel_for_within_task_arena {
+
+using namespace test_partitioner_utils::TestRanges;
+using tbb::split;
+using tbb::proportional_split;
+
+class BlockedRangeWhitebox;
+
+typedef std::pair<size_t, size_t> range_borders;
+typedef std::multimap<BlockedRangeWhitebox*, range_borders> MapType;
+typedef tbb::enumerable_thread_specific<MapType> ETSType;
+ETSType ets;
+
+class BlockedRangeWhitebox : public BlockedRange {
+public:
+    static const bool is_splittable_in_proportion = true;
+    BlockedRangeWhitebox(size_t _begin, size_t _end)
+        : BlockedRange(_begin, _end, NULL, false, false) { }
+
+    BlockedRangeWhitebox(BlockedRangeWhitebox& r, proportional_split& p)
+        :BlockedRange(r, p) {
+        update_ets(r);
+        update_ets(*this);
+    }
+
+    BlockedRangeWhitebox(BlockedRangeWhitebox& r, split)
+        :BlockedRange(r, split()) { }
+
+    void update_ets(BlockedRangeWhitebox& range) {
+        std::pair<MapType::iterator, MapType::iterator> equal_range = ets.local().equal_range(&range);
+        for (MapType::iterator it = equal_range.first; it != equal_range.second;++it) {
+            if (it->second.first <= range.begin() && range.end() <= it->second.second) {
+                ASSERT(!(it->second.first == range.begin() && it->second.second == range.end()), "Only one border of the range should be equal to the original");
+                it->second.first = range.begin();
+                it->second.second = range.end();
+                return;
+            }
+        }
+        ets.local().insert(std::make_pair<BlockedRangeWhitebox*, range_borders>(&range, range_borders(range.begin(), range.end())));
+    }
+};
+
+template <typename Partitioner>
+struct ArenaBody {
+    size_t range_begin;
+    size_t range_end;
+
+    ArenaBody(size_t _range_begin, size_t _range_end)
+        :range_begin(_range_begin), range_end(_range_end) { }
+
+    void operator()() const {
+        Partitioner my_partitioner;
+        tbb::parallel_for(BlockedRangeWhitebox(range_begin, range_end), test_partitioner_utils::SimpleBody(), my_partitioner);
+    }
+};
+
+struct CombineBody {
+    MapType operator()(MapType x, const MapType& y) const {
+        x.insert(y.begin(), y.end());
+        for (MapType::iterator it = x.begin(); it != x.end();++it)
+            for (MapType::iterator internal_it = x.begin(); internal_it != x.end(); ++internal_it) {
+                if (it != internal_it && internal_it->second.first <= it->second.first && it->second.second <= internal_it->second.second) {
+                    x.erase(internal_it);
+                    break;
+                }
+            }
+        return x;
+    }
+};
+
+range_borders combine_range(const MapType& map) {
+    range_borders result_range = map.begin()->second;
+    for (MapType::const_iterator it = map.begin(); it != map.end(); it++)
+        result_range = range_borders((std::min)(result_range.first, it->second.first), (std::max)(result_range.second, it->second.second));
+    return result_range;
+}
+
+template <typename Partitioner>
+void test_body() {
+    for (unsigned int num_threads = tbb::tbb_thread::hardware_concurrency() / 4 + 1; num_threads < tbb::tbb_thread::hardware_concurrency(); num_threads *= 2)
+        for (size_t range_begin = 0, range_end = num_threads * 10 - 1, i = 0; i < 3; range_begin += num_threads, range_end += num_threads + 1, ++i) {
+            ets = ETSType(MapType());
+            tbb::task_arena limited(num_threads);
+            limited.execute(ArenaBody<Partitioner>(range_begin, range_end));
+            MapType combined_map = ets.combine(CombineBody());
+            range_borders result_borders = combine_range(combined_map);
+            ASSERT(result_borders.first == range_begin, "Restored range begin does not match initial one");
+            ASSERT(result_borders.second == range_end, "Restored range end does not match initial one");
+            ASSERT((combined_map.size() == num_threads), "Incorrect number or post-proportional split ranges");
+            size_t expected_size = (range_end - range_begin) / num_threads;
+            for (MapType::iterator it = combined_map.begin(); it != combined_map.end(); ++it) {
+                size_t size = it->second.second - it->second.first;
+                ASSERT((size == expected_size || size == expected_size + 1), "Incorrect post-proportional range size");
+            }
+        }
+
+}
+
+void test() {
+    test_body<tbb::affinity_partitioner>();
+    test_body<tbb::static_partitioner>();
+}
+
+} // namespace parallel_for_within_task_arena
+
 int TestMain () {
     if( MinThread<1 ) {
         REPORT("number of threads must be positive\n");
@@ -603,6 +717,7 @@ int TestMain () {
             TestParallelForWithStepSupport<parallel_tag,unsigned long long>();
             TestParallelForWithStepSupport<parallel_tag,size_t>();
 
+#if TBB_PREVIEW_SERIAL_SUBSET
             // This is for testing serial implementation.
             if( p == MaxThread ) {
                 Flog<serial_tag,1>(p);
@@ -618,6 +733,7 @@ int TestMain () {
                 TestParallelForWithStepSupport<serial_tag,unsigned long long>();
                 TestParallelForWithStepSupport<serial_tag,size_t>();
             }
+#endif
 
 #if TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN
             TestExceptionsSupport();
@@ -648,6 +764,7 @@ int TestMain () {
 
     various_range_implementations::test();
     interaction_with_range_and_partitioner::test();
+    parallel_for_within_task_arena::test();
     return Harness::Done;
 }
 
diff --git a/src/test/test_parallel_for_each.cpp b/src/test/test_parallel_for_each.cpp
index 2ca101d..f1948ba 100644
--- a/src/test/test_parallel_for_each.cpp
+++ b/src/test/test_parallel_for_each.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if _MSC_VER && !defined(__INTEL_COMPILER)
@@ -51,7 +51,7 @@ void RunPForEachTests()
     sum = 0;
     size_t test_sum = 0;
 
-    for (size_t i =0; i < NUMBER_OF_ELEMENTS; i++) { 
+    for (size_t i =0; i < NUMBER_OF_ELEMENTS; i++) {
         test_vector[i] = i;
         test_sum += i;
     }
@@ -102,7 +102,7 @@ void TestExceptionsSupport()
     REMARK (__FUNCTION__);
     size_t test_vector[NUMBER_OF_ELEMENTS + 1];
 
-    for (size_t i = 0; i < NUMBER_OF_ELEMENTS; i++) { 
+    for (size_t i = 0; i < NUMBER_OF_ELEMENTS; i++) {
         test_vector[i] = i;
     }
 
@@ -115,7 +115,7 @@ void TestExceptionsSupport()
 }
 #endif /* TBB_USE_EXCEPTIONS */
 
-// Cancelation support test
+// Cancellation support test
 void function_to_cancel(size_t ) {
     ++g_CurExecuted;
     CancellatorTask::WaitUntilReady();
@@ -126,16 +126,16 @@ class my_worker_pforeach_task : public tbb::task
 {
     tbb::task_group_context &my_ctx;
 
-    tbb::task* execute () {
+    tbb::task* execute () __TBB_override {
         size_t test_vector[NUMBER_OF_ELEMENTS + 1];
-        for (size_t i = 0; i < NUMBER_OF_ELEMENTS; i++) { 
+        for (size_t i = 0; i < NUMBER_OF_ELEMENTS; i++) {
             test_vector[i] = i;
         }
         Iterator begin(&test_vector[0]);
         Iterator end(&test_vector[NUMBER_OF_ELEMENTS]);
 
         tbb::parallel_for_each(begin, end, (TestFunctionType)function_to_cancel);
-        
+
         return NULL;
     }
 public:
diff --git a/src/test/test_parallel_for_vectorization.cpp b/src/test/test_parallel_for_vectorization.cpp
index e8ce9c6..32d8434 100644
--- a/src/test/test_parallel_for_vectorization.cpp
+++ b/src/test/test_parallel_for_vectorization.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // The test checks if the vectorization happens when PPL-style parallel_for is
@@ -25,9 +25,9 @@
 // 2. "#pragma ivdep" has a peculiarity which also can be used for detection of
 // successful vectorization. See the comment below.
 
-// For now, only Intel(R) C++ Compiler 12.0 and later is supported. Also, no
+// For now, only Intel(R) C++ Compiler 14.0 and later is supported. Also, no
 // sense to run the test in debug mode.
-#define HARNESS_SKIP_TEST ( __INTEL_COMPILER < 1200  || TBB_USE_DEBUG )
+#define HARNESS_SKIP_TEST ( __INTEL_COMPILER < 1400  || TBB_USE_DEBUG )
 
 // __TBB_ASSERT_ON_VECTORIZATION_FAILURE enables "pragma always assert" for
 // Intel(R) C++ Compiler.
@@ -38,12 +38,14 @@
 #include "harness.h"
 #include "harness_assert.h"
 
+#include <algorithm>
+
 class Body : NoAssign {
-    int ∑
+    int *out_, *in_;
 public:
-    Body( int& s ) : sum(s) {}
+    Body( int* out, int *in ) : out_(out), in_(in) {}
     void operator() ( int i ) const {
-        sum += i / i;
+        out_[i] = in_[i] + 1;
     }
 };
 
@@ -51,17 +53,23 @@ int TestMain () {
     // Should be big enough that the partitioner generated at least a one range
     // with a size greater than 1. See the comment below.
     const int N = 10000;
-    int sum = 1;
     tbb::task_scheduler_init init(1);
-    tbb::parallel_for( 1, N, Body(sum) );
+    int array1[N];
+    std::fill( array1, array1+N, 0 );
+    // Use the same array (with a shift) for both input and output
+    tbb::parallel_for( 0, N-1, Body(array1+1, array1) );
+
+    int array2[N];
+    std::fill( array2, array2+N, 0 );
+    Body b(array2+1, array2);
+    for ( int i=0; i<N-1; ++i )
+        b(i);
 
     // The ppl-style parallel_for implementation has pragma ivdep before the
-    // range loop. This pragma suppresses the dependency about "sum" in "Body".
-    // Thus the vectorizer should generate code which just add to "sum" only
-    // one iteration of the range (despite the real number of iterations in the
-    // range). So "sum" is just number of calls of "Body". And it should be
-    // less than N if at least one range was greater than 1.
-    ASSERT( sum < N, "The loop was not vectorized." );
+    // range loop. This pragma suppresses the dependency of overlapping arrays
+    // in "Body". Thus the vectorizer should generate code that produces incorrect
+    // results.
+    ASSERT( !std::equal( array1, array1+N, array2 ), "The loop was not vectorized." );
 
     return  Harness::Done;
 }
diff --git a/src/test/test_parallel_invoke.cpp b/src/test/test_parallel_invoke.cpp
index a45317e..c6fb801 100644
--- a/src/test/test_parallel_invoke.cpp
+++ b/src/test/test_parallel_invoke.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if _MSC_VER && !defined(__INTEL_COMPILER)
@@ -84,7 +84,7 @@ TEST_FUNCTOR(9)
 #define INIT_TEST function_counter = 0;
 
 #define VALIDATE_INVOKE_RUN(number_of_args, test_type) \
-    ASSERT( (size_t)function_counter == (size_t)(1 << number_of_args) - 1, "parallel_invoke called with " #number_of_args " arguments didn't process all " #test_type);
+    ASSERT( size_t(function_counter) == (size_t(1) << number_of_args) - 1, "parallel_invoke called with " #number_of_args " arguments didn't process all " #test_type);
 
 // Calls parallel_invoke for different number of arguments
 // It can be called with and without user context
@@ -235,7 +235,7 @@ void TestExceptionHandling()
 {
     REMARK (__FUNCTION__);
     for( size_t n = 2; n <= 10; ++n ) {
-        for( exception_mask = 1; exception_mask < (size_t) (1 << n); ++exception_mask ) {
+        for( exception_mask = 1; exception_mask < (size_t(1) << n); ++exception_mask ) {
             ResetEhGlobals();
             TRY();
                 REMARK("Calling parallel_invoke, number of functions = %d, exception_mask = %d\n", n, exception_mask);
@@ -247,7 +247,7 @@ void TestExceptionHandling()
 }
 #endif /* TBB_USE_EXCEPTIONS */
 
-// Cancelation support test
+// Cancellation support test
 void function_to_cancel() {
     ++g_CurExecuted;
     CancellatorTask::WaitUntilReady();
@@ -266,7 +266,7 @@ class ParInvokeLauncherTask : public tbb::task
     tbb::task_group_context &my_ctx;
     void(*func_array[10])(void);
 
-    tbb::task* execute () {
+    tbb::task* execute () __TBB_override {
         func_array[g_functionToCancel] = &function_to_cancel;
         call_parallel_invoke(g_numFunctions, func_array[0], func_array[1], func_array[2], func_array[3],
             func_array[4], func_array[5], func_array[6], func_array[7], func_array[8], func_array[9], &my_ctx);
diff --git a/src/test/test_parallel_pipeline.cpp b/src/test/test_parallel_pipeline.cpp
index c846f1a..14495bc 100644
--- a/src/test/test_parallel_pipeline.cpp
+++ b/src/test/test_parallel_pipeline.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Before including pipeline.h, set up the variable to count heap allocated
@@ -35,7 +35,7 @@ const unsigned n_tokens = 8;
 // we can conceivably have two buffers used in the middle filter for every token in flight, so
 // we must allocate two buffers for every token.  Unlikely, but possible.
 const unsigned n_buffers = 2*n_tokens;
-const unsigned max_counter = 16;
+const int max_counter = 16;
 static tbb::atomic<int> output_counter;
 static tbb::atomic<int> input_counter;
 static tbb::atomic<int> non_pointer_specialized_calls;
@@ -47,7 +47,7 @@ static tbb::spin_mutex buffer_mutex;
 static int intbuffer[max_counter];  // store results for <int,int> parallel pipeline test
 static bool check_intbuffer;
 
-static void* buffers[n_buffers]; 
+static void* buffers[n_buffers];
 static bool buf_available[n_buffers];
 
 void *fetchNextBuffer() {
@@ -121,7 +121,7 @@ public:
         AssertLive();
         if( --input_counter < 0 ) {
             control.stop();
-        } 
+        }
         else  // only count successful reads
             ++non_pointer_specialized_calls;
         return U();  // default constructed
@@ -157,7 +157,7 @@ public:
         if( --input_counter < 0 ) {
             control.stop();
         }
-        else 
+        else
             ++non_pointer_specialized_calls;
     }
 
@@ -327,10 +327,10 @@ void checkCounters(final_assert_type my_t) {
             ASSERT(pointer_specialized_calls+first_pointer_specialized_calls+second_pointer_specialized_calls == 0, "non-pointer filters specialized to pointer");
             ASSERT(non_pointer_specialized_calls == 3*max_counter, "bad count for non-pointer filters");
             if(check_intbuffer) {
-                for(int i = 1; i <= (int)max_counter; ++i) {
+                for(int i = 1; i <= max_counter; ++i) {
                     int j = i*i;
                     bool found_val = false;
-                    for(int k = 0; k < (int)max_counter; ++k) {
+                    for(int k = 0; k < max_counter; ++k) {
                         if(intbuffer[k] == j) {
                             found_val = true;
                             break;
@@ -347,7 +347,7 @@ void checkCounters(final_assert_type my_t) {
                     second_pointer_specialized_calls == 0, "incorrect specialization for firstpointer");
             break;
         case assert_secondpointer:
-            ASSERT(pointer_specialized_calls == max_counter && 
+            ASSERT(pointer_specialized_calls == max_counter &&
                     first_pointer_specialized_calls == 0 &&
                     non_pointer_specialized_calls == max_counter &&  // input filter
                     second_pointer_specialized_calls == max_counter, "incorrect specialization for firstpointer");
@@ -361,7 +361,7 @@ void checkCounters(final_assert_type my_t) {
     }
 }
 
-static const tbb::filter::mode filter_table[] = { tbb::filter::parallel, tbb::filter::serial_in_order, tbb::filter::serial_out_of_order}; 
+static const tbb::filter::mode filter_table[] = { tbb::filter::parallel, tbb::filter::serial_in_order, tbb::filter::serial_out_of_order};
 const unsigned number_of_filter_types = sizeof(filter_table)/sizeof(filter_table[0]);
 
 typedef tbb::filter_t<void, void> filter_chain;
@@ -397,7 +397,7 @@ void run_function_spec() {
         tbb::atomic<int> counter;
         counter = max_counter;
         // Construct filter using lambda-syntax when parallel_pipeline() is being run;
-        tbb::parallel_pipeline( n_tokens, 
+        tbb::parallel_pipeline( n_tokens,
             tbb::make_filter<void, void>(filter_table[i], [&counter]( tbb::flow_control& control ) {
                     if( counter-- == 0 )
                         control.stop();
@@ -410,11 +410,11 @@ void run_function_spec() {
 }
 
 template<typename t1, typename t2>
-void run_filter_set( 
-        input_filter<t1>& i_filter, 
-        middle_filter<t1,t2>& m_filter, 
-        output_filter<t2>& o_filter, 
-        mode_array *filter_type, 
+void run_filter_set(
+        input_filter<t1>& i_filter,
+        middle_filter<t1,t2>& m_filter,
+        output_filter<t2>& o_filter,
+        mode_array *filter_type,
         final_assert_type my_t) {
     tbb::filter_t<void, t1> filter1( filter_type[0], i_filter );
     tbb::filter_t<t1, t2> filter2( filter_type[1], m_filter );
@@ -450,7 +450,7 @@ void run_filter_set(
 
     // Construct filters and create the sequence when parallel_pipeline() is being run
     resetCounters();
-    tbb::parallel_pipeline( n_tokens, 
+    tbb::parallel_pipeline( n_tokens,
                tbb::make_filter<void, t1>(filter_type[0], i_filter) &
                tbb::make_filter<t1, t2>(filter_type[1], m_filter) &
                tbb::make_filter<t2, void>(filter_type[2], o_filter) );
@@ -490,7 +490,7 @@ void run_lambdas_test( mode_array *filter_type ) {
     counter = max_counter;
     // Construct filters using lambda-syntax and create the sequence when parallel_pipeline() is being run;
     resetCounters();  // only need the output_counter reset.
-    tbb::parallel_pipeline( n_tokens, 
+    tbb::parallel_pipeline( n_tokens,
         tbb::make_filter<void, t1>(filter_type[0], [&counter]( tbb::flow_control& control ) -> t1 {
                 if( --counter < 0 )
                     control.stop();
@@ -499,15 +499,15 @@ void run_lambdas_test( mode_array *filter_type ) {
         tbb::make_filter<t1, t2>(filter_type[1], []( t1 /*my_storage*/ ) -> t2 {
                 return t2(); }
         ) &
-        tbb::make_filter<t2, void>(filter_type[2], [] ( t2 ) -> void { 
+        tbb::make_filter<t2, void>(filter_type[2], [] ( t2 ) -> void {
                 output_counter++; }
-        ) 
+        )
     );
     checkCounters(no_pointer_counts);  // don't have to worry about specializations
     counter = max_counter;
     // pointer filters
     resetCounters();
-    tbb::parallel_pipeline( n_tokens, 
+    tbb::parallel_pipeline( n_tokens,
         tbb::make_filter<void, t1*>(filter_type[0], [&counter]( tbb::flow_control& control ) -> t1* {
                 if( --counter < 0 ) {
                     control.stop();
@@ -519,17 +519,17 @@ void run_lambdas_test( mode_array *filter_type ) {
                 tbb::tbb_allocator<t1>().destroy(my_storage); // my_storage->~t1();
                 return new(my_storage) t2(); }
         ) &
-        tbb::make_filter<t2*, void>(filter_type[2], [] ( t2* my_storage ) -> void { 
+        tbb::make_filter<t2*, void>(filter_type[2], [] ( t2* my_storage ) -> void {
                 tbb::tbb_allocator<t2>().destroy(my_storage);  // my_storage->~t2();
                 freeBuffer(my_storage);
                 output_counter++; }
-        ) 
+        )
     );
     checkCounters(no_pointer_counts);
     // first filter outputs pointer
     counter = max_counter;
     resetCounters();
-    tbb::parallel_pipeline( n_tokens, 
+    tbb::parallel_pipeline( n_tokens,
         tbb::make_filter<void, t1*>(filter_type[0], [&counter]( tbb::flow_control& control ) -> t1* {
                 if( --counter < 0 ) {
                     control.stop();
@@ -542,15 +542,15 @@ void run_lambdas_test( mode_array *filter_type ) {
                 freeBuffer(my_storage);
                 return t2(); }
         ) &
-        tbb::make_filter<t2, void>(filter_type[2], [] ( t2 /*my_storage*/) -> void { 
+        tbb::make_filter<t2, void>(filter_type[2], [] ( t2 /*my_storage*/) -> void {
                 output_counter++; }
-        ) 
+        )
     );
     checkCounters(no_pointer_counts);
     // second filter outputs pointer
     counter = max_counter;
     resetCounters();
-    tbb::parallel_pipeline( n_tokens, 
+    tbb::parallel_pipeline( n_tokens,
         tbb::make_filter<void, t1>(filter_type[0], [&counter]( tbb::flow_control& control ) -> t1 {
                 if( --counter < 0 ) {
                     control.stop();
@@ -560,11 +560,11 @@ void run_lambdas_test( mode_array *filter_type ) {
         tbb::make_filter<t1, t2*>(filter_type[1], []( t1 /*my_storage*/ ) -> t2* {
                 return new(fetchNextBuffer()) t2(); }
         ) &
-        tbb::make_filter<t2*, void>(filter_type[2], [] ( t2* my_storage) -> void { 
+        tbb::make_filter<t2*, void>(filter_type[2], [] ( t2* my_storage) -> void {
                 tbb::tbb_allocator<t2>().destroy(my_storage);  // my_storage->~t2();
                 freeBuffer(my_storage);
                 output_counter++; }
-        ) 
+        )
     );
     checkCounters(no_pointer_counts);
 }
diff --git a/src/test/test_parallel_reduce.cpp b/src/test/test_parallel_reduce.cpp
index c708266..529c490 100644
--- a/src/test/test_parallel_reduce.cpp
+++ b/src/test/test_parallel_reduce.cpp
@@ -1,23 +1,24 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
+
 #include "tbb/parallel_reduce.h"
 #include "tbb/atomic.h"
 #include "harness_assert.h"
@@ -62,11 +63,11 @@ private:
     FooBody() {++FooBodyCount;}
 public:
     ~FooBody() {
-        forked = 0xDEADBEEF; 
+        forked = 0xDEADBEEF;
         sum=0xDEADBEEF;
         join_count=0xDEADBEEF;
         --FooBodyCount;
-    } 
+    }
     FooBody( FooBody& other, tbb::split ) {
         ++FooBodyCount;
         ++ForkCount;
@@ -79,7 +80,7 @@ public:
     void join( FooBody& s ) {
         ASSERT( s.forked==1, NULL );
         ASSERT( this!=&s, NULL );
-        ASSERT( this==s.parent, NULL ); 
+        ASSERT( this==s.parent, NULL );
         ASSERT( end==s.begin, NULL );
         end = s.end;
         sum += s.sum;
@@ -105,7 +106,7 @@ public:
 void Flog( int nthread, bool interference=false ) {
     for (int mode = 0;  mode < 4; mode++) {
         tbb::tick_count T0 = tbb::tick_count::now();
-        long join_count = 0;        
+        long join_count = 0;
         tbb::affinity_partitioner ap;
         for( size_t i=0; i<=1000; ++i ) {
             FooBody f;
@@ -127,7 +128,7 @@ void Flog( int nthread, bool interference=false ) {
                 case 2:
                     tbb::parallel_reduce( MinimalRange(i), f, tbb::auto_partitioner() );
                     break;
-                case 3: 
+                case 3:
                     tbb::parallel_reduce( MinimalRange(i), f, ap );
                     break;
             }
@@ -166,31 +167,68 @@ struct Accumulator {
     }
 };
 
-void ParallelSum () {
-    const ValueType I = 0,
-                    N = 1000000,
-                    R = N * (N + 1) / 2;
-    ValueType *array = new ValueType[N + 1];
-    for ( ValueType i = 0; i < N; ++i )
-        array[i] = i + 1;
-    tbb::blocked_range<ValueType*> range(array, array + N);
-    ValueType r1 = tbb::parallel_reduce( range, I, Accumulator(), Sum() );
-    ASSERT( r1 == R, NULL );
+class ParallelSumTester: public NoAssign {
+public:
+    ParallelSumTester() {
+        m_array = new ValueType[unsigned(N)];
+        for ( ValueType i = 0; i < N; ++i )
+            m_array[i] = i + 1;
+        m_range = tbb::blocked_range<ValueType*>( m_array, m_array + N );
+    }
+    ~ParallelSumTester() { delete[] m_array; }
+    template<typename Partitioner>
+    void CheckParallelReduce() {
+        Partitioner partitioner;
+        ValueType r1 = tbb::parallel_reduce( m_range, I, Accumulator(), Sum(), partitioner );
+        ASSERT( r1 == R, NULL );
 #if __TBB_LAMBDAS_PRESENT
-    ValueType r2 = tbb::parallel_reduce( range, I, 
-        [](const tbb::blocked_range<ValueType*>& r, ValueType value) -> ValueType { 
-            for ( ValueType* pv = r.begin(); pv != r.end(); ++pv )
-                value += *pv;
-            return value;
-        },
-        Sum()
-    );
-    ASSERT( r2 == R, NULL );
+        ValueType r2 = tbb::parallel_reduce(
+            m_range, I,
+            [](const tbb::blocked_range<ValueType*>& r, ValueType value) -> ValueType {
+                for ( const ValueType* pv = r.begin(); pv != r.end(); ++pv )
+                    value += *pv;
+                return value;
+            },
+            Sum(),
+            partitioner
+        );
+        ASSERT( r2 == R, NULL );
 #endif /* LAMBDAS */
-    delete[] array;
-}
+    }
+    void CheckParallelReduceDefault() {
+        ValueType r1 = tbb::parallel_reduce( m_range, I, Accumulator(), Sum() );
+        ASSERT( r1 == R, NULL );
+#if __TBB_LAMBDAS_PRESENT
+        ValueType r2 = tbb::parallel_reduce(
+            m_range, I,
+            [](const tbb::blocked_range<ValueType*>& r, ValueType value) -> ValueType {
+                for ( const ValueType* pv = r.begin(); pv != r.end(); ++pv )
+                    value += *pv;
+                return value;
+            },
+            Sum()
+        );
+        ASSERT( r2 == R, NULL );
+#endif /* LAMBDAS */
+    }
+private:
+    ValueType* m_array;
+    tbb::blocked_range<ValueType*> m_range;
+    static const ValueType I, N, R;
+};
+
+const ValueType ParallelSumTester::I = 0;
+const ValueType ParallelSumTester::N = 1000000;
+const ValueType ParallelSumTester::R = N * (N + 1) / 2;
 
-const int N = 1000;
+void ParallelSum () {
+    ParallelSumTester pst;
+    pst.CheckParallelReduceDefault();
+    pst.CheckParallelReduce<tbb::simple_partitioner>();
+    pst.CheckParallelReduce<tbb::auto_partitioner>();
+    pst.CheckParallelReduce<tbb::affinity_partitioner>();
+    pst.CheckParallelReduce<tbb::static_partitioner>();
+}
 
 #include "harness_concurrency_tracker.h"
 
@@ -217,6 +255,7 @@ struct ReduceBody {
 
 template <class Op>
 void TestDeterministicReduction () {
+    const int N = 1000;
     typedef typename Op::Type Type;
     const tbb::blocked_range<int> range(0, N);
     ReduceBody<Op> body;
@@ -227,7 +266,7 @@ void TestDeterministicReduction () {
         tbb::parallel_deterministic_reduce( range,body2 );
         ASSERT( body2.my_value == R, NULL );
 #if __TBB_LAMBDAS_PRESENT
-        Type r = tbb::parallel_deterministic_reduce( range, Type(), 
+        Type r = tbb::parallel_deterministic_reduce( range, Type(),
             [](const tbb::blocked_range<int>& br, Type value) -> Type {
                 Harness::ConcurrencyTracker ct;
                 for ( int ii = br.begin(); ii != br.end(); ++ii ) {
@@ -279,6 +318,13 @@ void test() {
     parallel_reduce(Range5(false, true), body, ap);
     parallel_reduce(Range6(false, true), body, ap);
 
+    parallel_reduce(Range1(true, false), body, tbb::static_partitioner());
+    parallel_reduce(Range2(true, false), body, tbb::static_partitioner());
+    parallel_reduce(Range3(true, false), body, tbb::static_partitioner());
+    parallel_reduce(Range4(false, true), body, tbb::static_partitioner());
+    parallel_reduce(Range5(false, true), body, tbb::static_partitioner());
+    parallel_reduce(Range6(false, true), body, tbb::static_partitioner());
+
     parallel_reduce(Range1(false, true), body, tbb::simple_partitioner());
     parallel_reduce(Range2(false, true), body, tbb::simple_partitioner());
     parallel_reduce(Range3(false, true), body, tbb::simple_partitioner());
@@ -311,7 +357,6 @@ int TestMain () {
         // Test that all workers sleep when no work
         TestCPUUserTime(p);
     }
-
     interaction_with_range_and_partitioner::test();
     return Harness::Done;
 }
diff --git a/src/test/test_parallel_scan.cpp b/src/test/test_parallel_scan.cpp
index 872a069..d61e919 100644
--- a/src/test/test_parallel_scan.cpp
+++ b/src/test/test_parallel_scan.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/parallel_scan.h"
@@ -28,12 +28,12 @@ static volatile bool ScanIsRunning = false;
 
 //! Sum of 0..i with wrap around on overflow.
 inline int TriangularSum( int i ) {
-    return i&1 ? ((i>>1)+1)*i : (i>>1)*(i+1); 
+    return i&1 ? ((i>>1)+1)*i : (i>>1)*(i+1);
 }
 
-//! Verify that sum is sum of integers in closed interval [start_index..finish_index].
+//! Verify that sum is init plus sum of integers in closed interval [0..finish_index].
 /** line should be the source line of the caller */
-static void VerifySum( long start_index, long finish_index, int sum, int line );
+static void VerifySum( int init, long finish_index, int sum, int line );
 
 const int MAXN = 2000;
 
@@ -43,11 +43,11 @@ enum AddendFlag {
     USED_FINAL=2
 };
 
-//! Array recording how each addend was used. 
+//! Array recording how each addend was used.
 /** 'unsigned char' instead of AddendFlag for sake of compactness. */
 static unsigned char AddendHistory[MAXN];
 
-//! Set to 1 for debugging output 
+//! Set to 1 for debugging output
 #define PRINT_DEBUG 0
 
 #include "tbb/atomic.h"
@@ -75,11 +75,32 @@ class Accumulator: BodyId {
     const T* my_array;
     T* my_sum;
     Range my_range;
+    enum state_type {
+        full,       // Accumulator has sufficient information for final scan,
+                    // i.e. has seen all iterations to its left.
+                    // It's either the original Accumulator provided by the user
+                    // or a Accumulator constructed by a splitting constructor *and* subsequently
+                    // subjected to a reverse_join with a full accumulator.
+
+        partial,    // Accumulator has only enough information for pre_scan.
+                    // i.e. has not seen all iterations to its left.
+                    // It's an Accumulator created by a splitting constructor that
+                    // has not yet been subjected to a reverse_join with a full accumulator.
+
+        summary,    // Accumulator has summary of iterations processed, but not necessarily
+                    // the information required for a final_scan or pre_scan.
+                    // It's the result of "assign".
+
+        trash       // Accumulator with possibly no useful information.
+                    // It was the source for "assign".
+    };
+    //! True if *this was assigned from.
+    mutable state_type my_state;
     //! Equals this while object is fully constructed, NULL otherwise.
     /** Used to detect premature destruction and accidental bitwise copy. */
     Accumulator* self;
-    Accumulator( const T array[], T sum[] ) :
-        my_total(), my_array(array), my_sum(sum), my_range(-1,-1,1)
+    Accumulator( T init, const T array[], T sum[] ) :
+        my_total(init), my_array(array), my_sum(sum), my_range(-1,-1,1), my_state(full)
     {
         ++NumberOfLiveAccumulator;
         // Set self as last action of constructor, to indicate that object is fully constructed.
@@ -94,15 +115,16 @@ public:
 #endif /* PRINT_DEBUG */
     ~Accumulator() {
 #if PRINT_DEBUG
-        REPORT("%d [%ld..%ld) destroyed\n",id,my_range.begin(),my_range.end() ); 
+        REPORT("%d [%ld..%ld) destroyed\n",id,my_range.begin(),my_range.end() );
 #endif /* PRINT_DEBUG */
         // Clear self as first action of destructor, to indicate that object is not fully constructed.
         self = 0;
         --NumberOfLiveAccumulator;
     }
-    Accumulator( Accumulator& a, tbb::split ) : 
-        my_total(0), my_array(a.my_array), my_sum(a.my_sum), my_range(-1,-1,1)  
+    Accumulator( Accumulator& a, tbb::split ) :
+        my_total(0), my_array(a.my_array), my_sum(a.my_sum), my_range(-1,-1,1), my_state(partial)
     {
+        ASSERT(a.my_state==full || a.my_state==partial, NULL);
         ++NumberOfLiveAccumulator;
 #if PRINT_DEBUG
         REPORT("%d forked from %d\n",id,a.id);
@@ -111,9 +133,10 @@ public:
         // Set self as last action of constructor, to indicate that object is fully constructed.
         self = this;
     }
-    template<typename Tag> 
+    template<typename Tag>
     void operator()( const Range& r, Tag /*tag*/ ) {
         Snooze(true);
+        ASSERT( Tag::is_final_scan() ? my_state==full : my_state==partial, NULL );
 #if PRINT_DEBUG
         if( my_range.empty() )
             REPORT("%d computing %s [%ld..%ld)\n",id,Tag::is_final_scan()?"final":"lookahead",r.begin(),r.end() );
@@ -127,11 +150,11 @@ public:
                 ASSERT( AddendHistory[i]<USED_FINAL, "addend used 'finally' twice?" );
                 AddendHistory[i] |= USED_FINAL;
                 my_sum[i] = my_total;
-                VerifySum( 0L, i, int(my_sum[i]), __LINE__ );
+                VerifySum( 42, i, int(my_sum[i]), __LINE__ );
             } else {
                 ASSERT( AddendHistory[i]==UNUSED, "addend used too many times" );
                 AddendHistory[i] |= USED_NONFINAL;
-            }   
+            }
         }
         if( my_range.empty() )
             my_range = r;
@@ -147,32 +170,39 @@ public:
                id,my_range.begin(),my_range.end());
 #endif /* PRINT_DEBUG */
         Snooze(true);
-        ASSERT( ScanIsRunning, NULL );     
+        ASSERT( my_state==partial, NULL );
+        ASSERT( left.my_state==full || left.my_state==partial, NULL );
+        ASSERT( ScanIsRunning, NULL );
         ASSERT( left.my_range.end()==my_range.begin(), NULL );
         my_total += left.my_total;
         my_range = Range( left.my_range.begin(), my_range.end(), 1 );
-        ASSERT( ScanIsRunning, NULL );     
+        ASSERT( ScanIsRunning, NULL );
         Snooze(true);
-        ASSERT( ScanIsRunning, NULL );     
+        ASSERT( ScanIsRunning, NULL );
         ASSERT( self==this, NULL );
         ASSERT( left.self==&left, NULL );
+        my_state = left.my_state;
     }
     void assign( const Accumulator& other ) {
+        ASSERT(other.my_state==full, NULL);
+        ASSERT(my_state==full, NULL);
         my_total = other.my_total;
         my_range = other.my_range;
         ASSERT( self==this, NULL );
         ASSERT( other.self==&other, "other Accumulator corrupted or prematurely destroyed" );
+        my_state = summary;
+        other.my_state = trash;
     }
 };
 
 #include "tbb/tick_count.h"
 #include "harness.h"
 
-static void VerifySum( long start_index, long finish_index, int sum, int line ) {
-    int expected = TriangularSum( finish_index ) - TriangularSum( start_index );
+static void VerifySum( int init, long finish_index, int sum, int line ) {
+    int expected = init + TriangularSum( finish_index );
     if( expected!=sum ) {
-        REPORT( "line %d: sum[%ld..%ld] should be = %d, but was computed as %d\n",
-                line, start_index, finish_index, expected, sum );
+        REPORT( "line %d: sum[0..%ld] should be = %d, but was computed as %d\n",
+                line, finish_index, expected, sum );
         abort();
     }
 }
@@ -189,7 +219,7 @@ void TestAccumulator( int mode, int nthread ) {
         }
         for( long i=0; i<n; ++i )
             addend[i] = i;
-        Accumulator<T> acc( addend, sum );
+        Accumulator<T> acc( 42, addend, sum );
         tbb::tick_count t0 = tbb::tick_count::now();
 #if PRINT_DEBUG
         REPORT("--------- mode=%d range=[0..%ld)\n",mode,n);
@@ -215,18 +245,18 @@ void TestAccumulator( int mode, int nthread ) {
         Snooze(false);
         tbb::tick_count t1 = tbb::tick_count::now();
         long used_once_count = 0;
-        for( long i=0; i<n; ++i ) 
+        for( long i=0; i<n; ++i )
             if( !(AddendHistory[i]&USED_FINAL) ) {
                 REPORT("failed to use addend[%ld] %s\n",i,AddendHistory[i]&USED_NONFINAL?"(but used nonfinal)":"");
             }
         for( long i=0; i<n; ++i ) {
-            VerifySum( 0, i, sum[i], __LINE__ );
+            VerifySum( 42, i, sum[i], __LINE__ );
             used_once_count += AddendHistory[i]==USED_FINAL;
         }
         if( n )
             ASSERT( acc.my_total==sum[n-1], NULL );
         else
-            ASSERT( acc.my_total==0, NULL );
+            ASSERT( acc.my_total==42, NULL );
         REMARK("time [n=%ld] = %g\tused_once%% = %g\tnthread=%d\n",n,(t1-t0).seconds(), n==0 ? 0 : 100.0*used_once_count/n,nthread);
     }
     delete[] addend;
@@ -253,7 +283,7 @@ int TestMain () {
             TestCPUUserTime(p);
 
             // Checking has to be done late, because when parallel_scan makes copies of
-            // the user's "Body", the copies might be destroyed slightly after parallel_scan 
+            // the user's "Body", the copies might be destroyed slightly after parallel_scan
             // returns.
             ASSERT( NumberOfLiveAccumulator==0, NULL );
         }
diff --git a/src/test/test_parallel_sort.cpp b/src/test/test_parallel_sort.cpp
index d4c7bf1..f98da23 100644
--- a/src/test/test_parallel_sort.cpp
+++ b/src/test/test_parallel_sort.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "harness_defs.h"
@@ -50,18 +50,18 @@ class Minimal {
 public:
     Minimal() {}
     void set_val(int i) { val = i; }
-    static bool CompareWith (const Minimal &a, const Minimal &b) { 
+    static bool CompareWith (const Minimal &a, const Minimal &b) {
         return (a.val < b.val);
     }
-    static bool AreEqual( Minimal &a,  Minimal &b) { 
-       return a.val == b.val; 
+    static bool AreEqual( Minimal &a,  Minimal &b) {
+       return a.val == b.val;
     }
 };
 
-//! Defines a comparison function object for Minimal 
+//! Defines a comparison function object for Minimal
 class MinimalCompare {
 public:
-    bool operator() (const Minimal &a, const Minimal &b) const { 
+    bool operator() (const Minimal &a, const Minimal &b) const {
         return Minimal::CompareWith(a,b);
     }
 };
@@ -73,9 +73,9 @@ bool Validate(RandomAccessIterator a, RandomAccessIterator b, size_t n) {
         ASSERT( a[i] == b[i], NULL );
     }
     return true;
-} 
+}
 
-//! A Validate specialized to string for debugging-only 
+//! A Validate specialized to string for debugging-only
 template<>
 bool Validate<std::string *>(std::string * a, std::string * b, size_t n) {
     for (size_t i = 0; i < n; i++) {
@@ -89,18 +89,18 @@ bool Validate<std::string *>(std::string * a, std::string * b, size_t n) {
     return true;
 }
 
-//! A Validate specialized to Minimal since it does not define an operator== 
+//! A Validate specialized to Minimal since it does not define an operator==
 template<>
 bool Validate<Minimal *>(Minimal *a, Minimal *b, size_t n) {
     for (size_t i = 0; i < n; i++) {
         ASSERT( Minimal::AreEqual(a[i],b[i]), NULL );
     }
     return true;
-} 
+}
 
-//! A Validate specialized to concurrent_vector<Minimal> since it does not define an operator== 
+//! A Validate specialized to concurrent_vector<Minimal> since it does not define an operator==
 template<>
-bool Validate<tbb::concurrent_vector<Minimal>::iterator>(tbb::concurrent_vector<Minimal>::iterator a, 
+bool Validate<tbb::concurrent_vector<Minimal>::iterator>(tbb::concurrent_vector<Minimal>::iterator a,
                                                          tbb::concurrent_vector<Minimal>::iterator b, size_t n) {
     for (size_t i = 0; i < n; i++) {
         ASSERT( Minimal::AreEqual(a[i],b[i]), NULL );
@@ -108,8 +108,8 @@ bool Validate<tbb::concurrent_vector<Minimal>::iterator>(tbb::concurrent_vector<
     return true;
 }
 
-//! used in Verbose mode for identifying which data set is being used 
-static std::string test_type; 
+//! used in Verbose mode for identifying which data set is being used
+static std::string test_type;
 
 //! The default initialization routine.
 /*! This routine assumes that you can assign to the elements from a float.
@@ -117,12 +117,12 @@ static std::string test_type;
     them according to the current data set (tracked by a local static variable).
     Returns true if a valid test has been setup, or false if there is no test to
     perform.
-*/ 
-   
+*/
+
 template < typename RandomAccessIterator, typename Compare >
 bool init_iter(RandomAccessIterator iter, RandomAccessIterator sorted_list, size_t n, const Compare &compare, bool reset) {
-    static char test_case = 0; 
-    const char num_cases = 3; 
+    static char test_case = 0;
+    const char num_cases = 3;
 
     if (reset) test_case = 0;
 
@@ -132,24 +132,24 @@ bool init_iter(RandomAccessIterator iter, RandomAccessIterator sorted_list, size
             case 0:
                 /* use sin to generate the values */
                 test_type = "sin";
-                for (size_t i = 0; i < n; i++) 
+                for (size_t i = 0; i < n; i++)
                     iter[i] = sorted_list[i] = static_cast<typename std::iterator_traits< RandomAccessIterator >::value_type>(sin(float(i)));
                 break;
             case 1:
-                /* presorted list */ 
+                /* presorted list */
                 test_type = "pre-sorted";
-                for (size_t i = 0; i < n; i++) 
+                for (size_t i = 0; i < n; i++)
                     iter[i] = sorted_list[i] = static_cast<typename std::iterator_traits< RandomAccessIterator >::value_type>(i);
                 break;
             case 2:
-                /* reverse-sorted list */ 
+                /* reverse-sorted list */
                 test_type = "reverse-sorted";
-                for (size_t i = 0; i < n; i++) 
+                for (size_t i = 0; i < n; i++)
                     iter[i] = sorted_list[i] = static_cast<typename std::iterator_traits< RandomAccessIterator >::value_type>(n - i);
                 break;
-        } 
+        }
 
-        // pre-sort sorted_list for later validity testing 
+        // pre-sort sorted_list for later validity testing
         std::sort(sorted_list, sorted_list + n, compare);
         test_case++;
         return true;
@@ -170,24 +170,30 @@ bool init_iter(T * iter, T * sorted_list, size_t n, const Compare &compare, bool
             case 0:
                 /* use sin to generate the values */
                 test_type = "sin";
-                for (size_t i = 0; i < n; i++)
-                    iter[i] = sorted_list[i] = T(sin(float(i)));
+                for (size_t i = 0; i < n; i++) {
+                    iter[i] = T(sin(float(i)));
+                    sorted_list[i] = T(sin(float(i)));
+                }
                 break;
             case 1:
                 /* presorted list */
                 test_type = "pre-sorted";
-                for (size_t i = 0; i < n; i++)
-                    iter[i] = sorted_list[i] = T(i);
+                for (size_t i = 0; i < n; i++) {
+                    iter[i] = T(i);
+                    sorted_list[i] = T(i);
+                }
                 break;
             case 2:
                 /* reverse-sorted list */
                 test_type = "reverse-sorted";
-                for (size_t i = 0; i < n; i++)
-                    iter[i] = sorted_list[i] = T(n - i);
+                for (size_t i = 0; i < n; i++) {
+                    iter[i] = T(n - i);
+                    sorted_list[i] = T(n - i);
+                }
                 break;
         }
 
-        // pre-sort sorted_list for later validity testing 
+        // pre-sort sorted_list for later validity testing
         std::sort(sorted_list, sorted_list + n, compare);
         test_case++;
         return true;
@@ -196,14 +202,14 @@ bool init_iter(T * iter, T * sorted_list, size_t n, const Compare &compare, bool
 }
 
 
-//! The initialization routine specialized to the class Minimal 
+//! The initialization routine specialized to the class Minimal
 /*! Minimal cannot have floats assigned to it.  This function uses the set_val method
 */
 
 template < >
 bool init_iter(Minimal* iter, Minimal * sorted_list, size_t n, const MinimalCompare &compare, bool reset) {
     static char test_case = 0;
-    const char num_cases = 3; 
+    const char num_cases = 3;
 
     if (reset) test_case = 0;
 
@@ -218,22 +224,22 @@ bool init_iter(Minimal* iter, Minimal * sorted_list, size_t n, const MinimalComp
                 }
                 break;
             case 1:
-                /* presorted list */ 
+                /* presorted list */
                 test_type = "pre-sorted";
                 for (size_t i = 0; i < n; i++) {
-                    iter[i].set_val( int(i) ); 
+                    iter[i].set_val( int(i) );
                     sorted_list[i].set_val( int(i) );
                 }
                 break;
             case 2:
-                /* reverse-sorted list */ 
+                /* reverse-sorted list */
                 test_type = "reverse-sorted";
                 for (size_t i = 0; i < n; i++) {
-                    iter[i].set_val( int(n-i) ); 
+                    iter[i].set_val( int(n-i) );
                     sorted_list[i].set_val( int(n-i) );
                 }
                 break;
-        } 
+        }
         std::sort(sorted_list, sorted_list + n, compare);
         test_case++;
         return true;
@@ -241,12 +247,12 @@ bool init_iter(Minimal* iter, Minimal * sorted_list, size_t n, const MinimalComp
     return false;
 }
 
-//! The initialization routine specialized to the class concurrent_vector<Minimal> 
+//! The initialization routine specialized to the class concurrent_vector<Minimal>
 /*! Minimal cannot have floats assigned to it.  This function uses the set_val method
 */
 
 template < >
-bool init_iter(tbb::concurrent_vector<Minimal>::iterator iter, tbb::concurrent_vector<Minimal>::iterator sorted_list, 
+bool init_iter(tbb::concurrent_vector<Minimal>::iterator iter, tbb::concurrent_vector<Minimal>::iterator sorted_list,
                size_t n, const MinimalCompare &compare, bool reset) {
     static char test_case = 0;
     const char num_cases = 3;
@@ -287,15 +293,15 @@ bool init_iter(tbb::concurrent_vector<Minimal>::iterator iter, tbb::concurrent_v
     return false;
 }
 
-//! The initialization routine specialized to the class string 
-/*! strings are created from floats. 
+//! The initialization routine specialized to the class string
+/*! strings are created from floats.
 */
 
 template<>
 bool init_iter(std::string *iter, std::string *sorted_list, size_t n, const std::less<std::string> &compare, bool reset) {
     static char test_case = 0;
-    const char num_cases = 1; 
- 
+    const char num_cases = 1;
+
     if (reset) test_case = 0;
 
     if (test_case < num_cases) {
@@ -305,17 +311,16 @@ bool init_iter(std::string *iter, std::string *sorted_list, size_t n, const std:
                 test_type = "sin";
                 for (size_t i = 0; i < n; i++) {
                     char buffer[20];
-// Getting rid of secure warning issued by C++ 14.00 and newer
-// sprintf_s is not defined in msvcrt.dll in windows XP and windows 2003 (used by MinGW gcc 4.5.2 with default spec)
-#if __STDC_SECURE_LIB__>=200411 && !__MINGW64__
+// Getting rid of secure warning issued by VC 14 and newer
+#if _MSC_VER && __STDC_SECURE_LIB__>=200411
                     sprintf_s(buffer, sizeof(buffer), "%f", float(sin(float(i))));
 #else
                     sprintf(buffer, "%f", float(sin(float(i))));
-#endif /* __STDC_SECURE_LIB__>=200411 || && !__MINGW64__ */
+#endif
                     sorted_list[i] = iter[i] = std::string(buffer);
                 }
                 break;
-        } 
+        }
         std::sort(sorted_list, sorted_list + n, compare);
         test_case++;
         return true;
@@ -323,14 +328,14 @@ bool init_iter(std::string *iter, std::string *sorted_list, size_t n, const std:
     return false;
 }
 
-//! The current number of threads in use (for Verbose only) 
+//! The current number of threads in use (for Verbose only)
 static size_t current_p;
 
-//! The current data type being sorted (for Verbose only) 
-static std::string current_type; 
+//! The current data type being sorted (for Verbose only)
+static std::string current_type;
 
 //! The default test routine.
-/*! Tests all data set sizes from 0 to N, all grainsizes from 0 to G=10, and selects from 
+/*! Tests all data set sizes from 0 to N, all grainsizes from 0 to G=10, and selects from
     all possible interfaces to parallel_sort depending on whether a scratch space and
     compare have been provided.
 */
@@ -338,18 +343,18 @@ template<typename RandomAccessIterator, typename Compare>
 bool parallel_sortTest(size_t n, RandomAccessIterator iter, RandomAccessIterator sorted_list, const Compare *comp) {
     bool passed = true;
 
-    Compare local_comp; 
+    Compare local_comp;
 
     init_iter(iter, sorted_list, n, local_comp, true);
     do {
-        REMARK("%s %s p=%llu n=%llu :",current_type.c_str(), test_type.c_str(), 
+        REMARK("%s %s p=%llu n=%llu :",current_type.c_str(), test_type.c_str(),
                    static_cast<unsigned long long>(current_p), static_cast<unsigned long long>(n));
         if (comp != NULL) {
             tbb::parallel_sort(iter, iter + n, local_comp );
          } else {
             tbb::parallel_sort(iter, iter + n );
          }
-        if (!Validate(iter, sorted_list, n)) 
+        if (!Validate(iter, sorted_list, n))
             passed = false;
         REMARK("passed\n");
     } while (init_iter(iter, sorted_list, n, local_comp, false));
@@ -379,17 +384,17 @@ bool parallel_sortTest(size_t n, Minimal * iter, Minimal * sorted_list, const Mi
 
 //! The test routine specialize to concurrent_vector of Minimal, since it does not have a less defined for it
 template<>
-bool parallel_sortTest(size_t n, tbb::concurrent_vector<Minimal>::iterator iter, 
+bool parallel_sortTest(size_t n, tbb::concurrent_vector<Minimal>::iterator iter,
                        tbb::concurrent_vector<Minimal>::iterator sorted_list, const MinimalCompare *compare) {
     bool passed = true;
 
     if (compare == NULL) return passed;
-    
+
     init_iter(iter, sorted_list, n, *compare, true);
     do {
         REMARK("%s %s p=%llu n=%llu :",current_type.c_str(), test_type.c_str(),
                     static_cast<unsigned long long>(current_p), static_cast<unsigned long long>(n));
-    
+
         tbb::parallel_sort(iter, iter + n, *compare );
 
         if (!Validate(iter, sorted_list, n))
@@ -404,13 +409,13 @@ bool parallel_sortTest(size_t n, tbb::concurrent_vector<Minimal>::iterator iter,
     by each type are tested.
 */
 void Flog() {
-    // For each type create: 
-    // the list to be sorted by parallel_sort (array) 
+    // For each type create:
+    // the list to be sorted by parallel_sort (array)
     // the list to be sort by STL sort (array_2)
     // and a less function object
 
     const size_t N = 50000;
-    
+
     Minimal *minimal_array = new Minimal[N];
     Minimal *minimal_array_2 = new Minimal[N];
     MinimalCompare minimal_less;
@@ -432,8 +437,8 @@ void Flog() {
     tbb::concurrent_vector<Minimal> minimal_cv2;
     minimal_cv1.grow_to_at_least(N);
     minimal_cv2.grow_to_at_least(N);
- 
- 
+
+
     // run the appropriate tests for each type
 
     current_type = "Minimal(less)";
@@ -444,18 +449,18 @@ void Flog() {
     parallel_sortTest(50000, minimal_array, minimal_array_2, &minimal_less);
 
     current_type = "float (no less)";
-    parallel_sortTest(0, float_array, float_array_2, static_cast<std::less<float> *>(NULL)); 
-    parallel_sortTest(1, float_array, float_array_2, static_cast<std::less<float> *>(NULL)); 
-    parallel_sortTest(10, float_array, float_array_2, static_cast<std::less<float> *>(NULL)); 
-    parallel_sortTest(9999, float_array, float_array_2, static_cast<std::less<float> *>(NULL)); 
-    parallel_sortTest(50000, float_array, float_array_2, static_cast<std::less<float> *>(NULL)); 
+    parallel_sortTest(0, float_array, float_array_2, static_cast<std::less<float> *>(NULL));
+    parallel_sortTest(1, float_array, float_array_2, static_cast<std::less<float> *>(NULL));
+    parallel_sortTest(10, float_array, float_array_2, static_cast<std::less<float> *>(NULL));
+    parallel_sortTest(9999, float_array, float_array_2, static_cast<std::less<float> *>(NULL));
+    parallel_sortTest(50000, float_array, float_array_2, static_cast<std::less<float> *>(NULL));
 
     current_type = "float (less)";
-    parallel_sortTest(0, float_array, float_array_2, &float_less); 
-    parallel_sortTest(1, float_array, float_array_2, &float_less); 
-    parallel_sortTest(10, float_array, float_array_2, &float_less); 
-    parallel_sortTest(9999, float_array, float_array_2, &float_less); 
-    parallel_sortTest(50000, float_array, float_array_2, &float_less); 
+    parallel_sortTest(0, float_array, float_array_2, &float_less);
+    parallel_sortTest(1, float_array, float_array_2, &float_less);
+    parallel_sortTest(10, float_array, float_array_2, &float_less);
+    parallel_sortTest(9999, float_array, float_array_2, &float_less);
+    parallel_sortTest(50000, float_array, float_array_2, &float_less);
 
     current_type = "concurrent_vector<float> (no less)";
     parallel_sortTest(0, float_cv1.begin(), float_cv2.begin(), static_cast<std::less<float> *>(NULL));
@@ -572,7 +577,7 @@ int TestMain () {
             // Test that all workers sleep when no work
             TestCPUUserTime(p);
         }
-    } 
+    }
     return Harness::Done;
 }
 
diff --git a/src/test/test_parallel_while.cpp b/src/test/test_parallel_while.cpp
index 0bffcbf..7f7996f 100644
--- a/src/test/test_parallel_while.cpp
+++ b/src/test/test_parallel_while.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/parallel_while.h"
@@ -32,7 +32,7 @@ class MinimalArgumentType {
     enum {
         DEAD=0xDEAD,
         LIVE=0x2718,
-        INITIALIZED=0x3141 
+        INITIALIZED=0x3141
     } my_state;
 public:
     ~MinimalArgumentType() {
@@ -50,7 +50,7 @@ public:
     long get_value() const {
         ASSERT( my_state==INITIALIZED, NULL );
         return my_value;
-    } 
+    }
 };
 
 class IntegerStream {
@@ -59,7 +59,7 @@ class IntegerStream {
 public:
     IntegerStream( long n ) : my_limit(n), my_index(0) {}
     bool pop_if_present( MinimalArgumentType& v ) {
-        if( my_index>=my_limit ) 
+        if( my_index>=my_limit )
             return false;
         v.set_value( my_index );
         my_index+=2;
@@ -82,11 +82,11 @@ public:
             value.set_value(i+1);
             my_while.add( value );
         }
-        for( int j=0; j<n; ++j )    
+        for( int j=0; j<n; ++j )
             c[i][j] = 0;
         for( int k=0; k<n; ++k ) {
             Element aik = a[i][k];
-            for( int j=0; j<n; ++j )    
+            for( int j=0; j<n; ++j )
                 c[i][j] += aik*b[k][j];
         }
     }
@@ -110,12 +110,12 @@ using namespace std;
 static long Iterations = 5;
 
 static void SerialMatrixMultiply( Element c[N][N], Element a[N][N], Element b[N][N], int n ) {
-    for( int i=0; i<n; ++i ) {   
-        for( int j=0; j<n; ++j )    
+    for( int i=0; i<n; ++i ) {
+        for( int j=0; j<n; ++j )
             c[i][j] = 0;
         for( int k=0; k<n; ++k ) {
             Element aik = a[i][k];
-            for( int j=0; j<n; ++j )    
+            for( int j=0; j<n; ++j )
                 c[i][j] += aik*b[k][j];
         }
     }
@@ -144,8 +144,8 @@ static void Run( int nthread, int n ) {
     SerialMatrixMultiply( D, A, B, n );
 
     // Check result
-    for( int i=0; i<n; ++i )   
-        for( int j=0; j<n; ++j )    
+    for( int i=0; i<n; ++i )
+        for( int j=0; j<n; ++j )
             ASSERT( C[i][j]==D[i][j], NULL );
     REMARK("time=%g\tnthread=%d\tn=%d\n",(t1-t0).seconds(),nthread,n);
 }
diff --git a/src/test/test_partitioner.h b/src/test/test_partitioner.h
index 916f0e9..40ec34d 100644
--- a/src/test/test_partitioner.h
+++ b/src/test/test_partitioner.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if _MSC_VER==1500 && !__INTEL_COMPILER
@@ -121,8 +121,7 @@ public:
         r.my_end = my_begin = middle;
     }
 
-    RangeBase(RangeBase& r, proportional_split& p)
-        : RangeStatisticCollector(r, p) {
+    RangeBase(RangeBase& r, proportional_split& p) : RangeStatisticCollector(r, p) {
         *this = r;
         size_t original_size = r.size();
         T right = self().compute_right_part(r, p);
diff --git a/src/test/test_partitioner_whitebox.cpp b/src/test/test_partitioner_whitebox.cpp
index e88efa6..80026eb 100644
--- a/src/test/test_partitioner_whitebox.cpp
+++ b/src/test/test_partitioner_whitebox.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "harness_assert.h"
@@ -23,6 +23,7 @@
 
 using uniform_iterations_distribution::ParallelTestBody;
 
+template<typename Partitioner>
 class ParallelBody: public ParallelTestBody {
 public:
     ParallelBody(size_t parallel_group_thread_starting_index)
@@ -38,7 +39,7 @@ public:
             0,                                                              // above_threads_size_tolerance
             0,                                                              // below_threads_size_tolerance
             0,                                                              // between_min_max_ranges_tolerance
-            &ParallelTestBody::uniform_distribution_checker
+            &ParallelTestBody::uniform_distribution_checker                 // checker function for a particular test case
         };
         g_threadNums.local() = settings.thread_num;
         using namespace test_partitioner_utils::TestRanges;
@@ -47,16 +48,16 @@ public:
             settings.factors_array_len = sizeof(factors) / sizeof(factors[0]);
 
             settings.between_min_max_ranges_tolerance = 0; // it should be equal to zero for blocked_range
-            test<BlockedRange>(settings, factors);
+            test<BlockedRange, Partitioner>(settings, factors);
 
             settings.checker = &ParallelTestBody::nonuniform_distribution_checker;
-            test<InvertedProportionRange>(settings, factors);
-            test<RoundedDownRange>(settings, factors);
-            test<RoundedUpRange>(settings, factors);
+            test<InvertedProportionRange, Partitioner>(settings, factors);
+            test<RoundedDownRange, Partitioner>(settings, factors);
+            test<RoundedUpRange, Partitioner>(settings, factors);
 
-            test<Range1_2>(settings, factors);
-            test<Range1_999>(settings, factors);
-            test<Range999_1>(settings, factors);
+            test<Range1_2, Partitioner>(settings, factors);
+            test<Range1_999, Partitioner>(settings, factors);
+            test<Range999_1, Partitioner>(settings, factors);
         }
 
         {
@@ -66,16 +67,16 @@ public:
 
             settings.between_min_max_ranges_tolerance = 1; // it should be equal to one for blocked_range
             settings.checker = &ParallelTestBody::uniform_distribution_checker;
-            test<BlockedRange>(settings, factors);
+            test<BlockedRange, Partitioner>(settings, factors);
 
             settings.checker = &ParallelTestBody::nonuniform_distribution_checker;
-            test<InvertedProportionRange>(settings, factors);
-            test<RoundedDownRange>(settings, factors);
-            test<RoundedUpRange>(settings, factors);
+            test<InvertedProportionRange, Partitioner>(settings, factors);
+            test<RoundedDownRange, Partitioner>(settings, factors);
+            test<RoundedUpRange, Partitioner>(settings, factors);
 
-            test<Range1_2>(settings, factors);
-            test<Range1_999>(settings, factors);
-            test<Range999_1>(settings, factors);
+            test<Range1_2, Partitioner>(settings, factors);
+            test<Range1_999, Partitioner>(settings, factors);
+            test<Range999_1, Partitioner>(settings, factors);
         }
 
         {
@@ -84,36 +85,36 @@ public:
             settings.factors_array_len = sizeof(factors) / sizeof(factors[0]);
 
             settings.checker = &ParallelTestBody::uniform_distribution_checker;
-            test<BlockedRange>(settings, factors, &shifted_left_range_size_generator);
-            test<BlockedRange>(settings, factors, &shifted_right_range_size_generator);
+            test<BlockedRange, Partitioner>(settings, factors, &shifted_left_range_size_generator);
+            test<BlockedRange, Partitioner>(settings, factors, &shifted_right_range_size_generator);
 
             settings.checker = &ParallelTestBody::nonuniform_distribution_checker;
-            test<InvertedProportionRange>(settings, factors, &shifted_left_range_size_generator);
-            test<InvertedProportionRange>(settings, factors, &shifted_right_range_size_generator);
+            test<InvertedProportionRange, Partitioner>(settings, factors, &shifted_left_range_size_generator);
+            test<InvertedProportionRange, Partitioner>(settings, factors, &shifted_right_range_size_generator);
 
-            test<RoundedDownRange>(settings, factors, &shifted_left_range_size_generator);
-            test<RoundedDownRange>(settings, factors, &shifted_right_range_size_generator);
+            test<RoundedDownRange, Partitioner>(settings, factors, &shifted_left_range_size_generator);
+            test<RoundedDownRange, Partitioner>(settings, factors, &shifted_right_range_size_generator);
 
-            test<RoundedUpRange>(settings, factors, &shifted_left_range_size_generator);
-            test<RoundedUpRange>(settings, factors, &shifted_right_range_size_generator);
+            test<RoundedUpRange, Partitioner>(settings, factors, &shifted_left_range_size_generator);
+            test<RoundedUpRange, Partitioner>(settings, factors, &shifted_right_range_size_generator);
 
-            test<Range1_2>(settings, factors, &shifted_left_range_size_generator);
-            test<Range1_2>(settings, factors, &shifted_right_range_size_generator);
+            test<Range1_2, Partitioner>(settings, factors, &shifted_left_range_size_generator);
+            test<Range1_2, Partitioner>(settings, factors, &shifted_right_range_size_generator);
 
-            test<Range1_999>(settings, factors, &shifted_left_range_size_generator);
-            test<Range1_999>(settings, factors, &shifted_right_range_size_generator);
+            test<Range1_999, Partitioner>(settings, factors, &shifted_left_range_size_generator);
+            test<Range1_999, Partitioner>(settings, factors, &shifted_right_range_size_generator);
 
-            test<Range999_1>(settings, factors, &shifted_left_range_size_generator);
-            test<Range999_1>(settings, factors, &shifted_right_range_size_generator);
+            test<Range999_1, Partitioner>(settings, factors, &shifted_left_range_size_generator);
+            test<Range999_1, Partitioner>(settings, factors, &shifted_right_range_size_generator);
         }
 
         {
             settings.factors_array_len = 1;
             settings.between_min_max_ranges_tolerance = 1; // since range iterations are not divided without remainder
             settings.checker = &ParallelTestBody::uniform_distribution_checker;
-            test<ExactSplitRange, size_t>(settings, NULL, &max_range_size_generator);
+            test<ExactSplitRange, Partitioner, size_t>(settings, NULL, &max_range_size_generator);
             settings.range_begin = size_t(-1) - 10000;
-            test<ExactSplitRange, size_t>(settings, NULL, &max_range_size_generator);
+            test<ExactSplitRange, Partitioner, size_t>(settings, NULL, &max_range_size_generator);
         }
 
         {
@@ -121,28 +122,28 @@ public:
             settings.factors_array_len = 2 * unsigned(settings.thread_num);
             settings.checker = &ParallelTestBody::nonuniform_distribution_checker;
 
-            test<RoundedUpRange, size_t>(settings, NULL, &simple_size_generator);
-            test<RoundedDownRange, size_t>(settings, NULL, &simple_size_generator);
+            test<RoundedUpRange, Partitioner, size_t>(settings, NULL, &simple_size_generator);
+            test<RoundedDownRange, Partitioner, size_t>(settings, NULL, &simple_size_generator);
 
-            test<InvertedProportionRange, size_t>(settings, NULL, &simple_size_generator);
-            test<Range1_2, size_t>(settings, NULL, &simple_size_generator);
-            test<Range1_999, size_t>(settings, NULL, &simple_size_generator);
-            test<Range999_1, size_t>(settings, NULL, &simple_size_generator);
+            test<InvertedProportionRange, Partitioner, size_t>(settings, NULL, &simple_size_generator);
+            test<Range1_2, Partitioner, size_t>(settings, NULL, &simple_size_generator);
+            test<Range1_999, Partitioner, size_t>(settings, NULL, &simple_size_generator);
+            test<Range999_1, Partitioner, size_t>(settings, NULL, &simple_size_generator);
 
             settings.ensure_non_empty_size = false;
-            test<RoundedUpRange, size_t>(settings, NULL, &simple_size_generator);
-            test<RoundedDownRange, size_t>(settings, NULL, &simple_size_generator);
-
-            test<InvertedProportionRange, size_t>(settings, NULL, &simple_size_generator);
-            test<Range1_2, size_t>(settings, NULL, &simple_size_generator);
-            test<Range1_999, size_t>(settings, NULL, &simple_size_generator);
-            test<Range999_1, size_t>(settings, NULL, &simple_size_generator);
+            test<RoundedUpRange, Partitioner, size_t>(settings, NULL, &simple_size_generator);
+            test<RoundedDownRange, Partitioner, size_t>(settings, NULL, &simple_size_generator);
 
+            test<InvertedProportionRange, Partitioner, size_t>(settings, NULL, &simple_size_generator);
+            test<Range1_2, Partitioner, size_t>(settings, NULL, &simple_size_generator);
+            test<Range1_999, Partitioner, size_t>(settings, NULL, &simple_size_generator);
+            test<Range999_1, Partitioner, size_t>(settings, NULL, &simple_size_generator);
         }
     }
 };
 
 int TestMain() {
-    uniform_iterations_distribution::test<ParallelBody>();
+    uniform_iterations_distribution::test<ParallelBody <tbb::affinity_partitioner> >();
+    uniform_iterations_distribution::test<ParallelBody <tbb::static_partitioner> >();
     return Harness::Done;
 }
diff --git a/src/test/test_partitioner_whitebox.h b/src/test/test_partitioner_whitebox.h
index 448fdd0..a4cc44d 100644
--- a/src/test/test_partitioner_whitebox.h
+++ b/src/test/test_partitioner_whitebox.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 /* Common part for the partitioner whitebox tests */
@@ -108,7 +108,7 @@ void my_affinity_partitioner_base_v3::resize( unsigned factor ) {
 
 } //namespace internal
 // simulate a subset of parallel_for
-namespace interface7 {
+namespace interface9 {
 namespace internal {
 
 // parallel_for algorithm that executes sequentially
@@ -169,7 +169,7 @@ public:
         my_partition.set_affinity(*this);
         my_partition.align_depth( d );
     }
-    fake_task* execute() {
+    fake_task* execute() __TBB_override {
         my_partition.check_being_stolen( *this );
         size_t origBegin = my_range.begin();
         size_t origEnd = my_range.end();
@@ -215,11 +215,11 @@ public:
 };
 
 } //namespace internal
-} //namespace interface7
+} //namespace interfaceX
 } //namespace tbb
 
 namespace whitebox_simulation {
-using namespace tbb::interface7::internal;
+using namespace tbb::interface9::internal;
 template<typename Range, typename Body, typename Partitioner>
 void parallel_for( const Range& range, const Body& body, Partitioner& partitioner,
                    test_partitioner_utils::BinaryTree* tree = NULL) {
@@ -310,9 +310,9 @@ public:
             uint64_t disparity =
                 max(stat.m_rangeNum, settings->thread_num) - min(stat.m_rangeNum, settings->thread_num);
             if (disparity > settings->above_threads_size_tolerance) {
-                REPORT("ERROR: '%s (f=%d|e=%d)': |#ranges-#threads|=%llu > %llu=tolerance\n",
-                    rangeName, int(settings->provide_feedback), int(settings->ensure_non_empty_size),
-                    disparity, uint64_t(settings->above_threads_size_tolerance));
+                REPORT("ERROR: '%s (f=%d|e=%d)': |#ranges(%llu)-#threads(%llu)|=%llu > %llu=tolerance\n",
+                    rangeName, int(settings->provide_feedback), int(settings->ensure_non_empty_size), stat.m_rangeNum,
+                    settings->thread_num, disparity, uint64_t(settings->above_threads_size_tolerance));
                 ASSERT(disparity <= settings->above_threads_size_tolerance, "Incorrect number of range "
                     "objects was created before work balancing phase started");
             }
@@ -360,7 +360,7 @@ public:
 protected:
     size_t m_parallel_group_thread_starting_index; // starting index of thread
 
-    template <typename Range, typename T>
+    template <typename Range, typename Partitioner, typename T>
     void test(use_case_settings_t& settings, T factors[], size_t (*rsgFunc)(T*, unsigned, size_t)
         = &default_range_size_generator<T>) const
     {
@@ -370,8 +370,8 @@ protected:
                 /*maximal size of range=*/ 0, /*minimal size of range was not rewritten yet=*/ false };
             Range range = Range(settings.range_begin, range_end, &stat, settings.provide_feedback,
                                 settings.ensure_non_empty_size);
-            tbb::affinity_partitioner ap;
-            test_case(range, SimpleBody(), ap, NULL);
+            Partitioner my_partitioner;
+            test_case(range, SimpleBody(), my_partitioner, NULL);
             size_t range_size = range_end - settings.range_begin;
             const char* rangeName = typeid(range).name();
             settings.checker(rangeName, range_size, &settings, stat);
diff --git a/src/test/test_pipeline.cpp b/src/test/test_pipeline.cpp
index 7fa6e57..ae8119b 100644
--- a/src/test/test_pipeline.cpp
+++ b/src/test/test_pipeline.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 #include "tbb/tbb_stddef.h"
@@ -64,11 +64,11 @@ static unsigned out_of_order_count;
 
 class BaseFilter: public tbb::filter {
     bool* const my_done;
-    const bool my_is_last;  
+    const bool my_is_last;
     bool my_is_running;
 public:
     tbb::atomic<tbb::internal::Token> current_token;
-    BaseFilter( tbb::filter::mode type, bool done[], bool is_last ) : 
+    BaseFilter( tbb::filter::mode type, bool done[], bool is_last ) :
         filter(type),
         my_done(done),
         my_is_last(is_last),
@@ -78,8 +78,8 @@ public:
     virtual Buffer* get_buffer( void* item ) {
         current_token++;
         return static_cast<Buffer*>(item);
-    } 
-    /*override*/void* operator()( void* item ) {
+    }
+    void* operator()( void* item ) __TBB_override {
         Harness::ConcurrencyTracker ct;
         if( is_serial() )
             ASSERT( !my_is_running, "premature entry to serial stage" );
@@ -87,7 +87,7 @@ public:
         Buffer* b = get_buffer(item);
         if( b ) {
             if( is_ordered() ) {
-                if( b->sequence_number == Buffer::unused ) 
+                if( b->sequence_number == Buffer::unused )
                     b->sequence_number = current_token-1;
                 else
                     ASSERT( b->sequence_number==current_token-1, "item arrived out of order" );
@@ -95,8 +95,8 @@ public:
                 if( b->sequence_number != current_token-1 && b->sequence_number != Buffer::unused )
                     out_of_order_count++;
             }
-            ASSERT( b->id < StreamSize, NULL ); 
-            ASSERT( !my_done[b->id], "duplicate processing of token?" ); 
+            ASSERT( b->id < StreamSize, NULL );
+            ASSERT( !my_done[b->id], "duplicate processing of token?" );
             ASSERT( b->is_busy, NULL );
             my_done[b->id] = true;
             if( my_is_last ) {
@@ -106,7 +106,7 @@ public:
             }
         }
         my_is_running = false;
-        return b;  
+        return b;
     }
 };
 
@@ -119,14 +119,14 @@ public:
         BaseFilter(type, done, is_last),
         my_number_of_tokens(ntokens)
     {}
-    /*override*/Buffer* get_buffer( void* ) {
+    Buffer* get_buffer( void* ) __TBB_override {
         unsigned long next_input;
-        unsigned free_buffer = 0; 
+        unsigned free_buffer = 0;
         { // lock protected scope
             tbb::spin_mutex::scoped_lock lock(input_lock);
             if( current_token>=StreamSize )
                 return NULL;
-            next_input = current_token++; 
+            next_input = current_token++;
             // once in a while, emulate waiting for input; this only makes sense for serial input
             if( is_serial() && WaitTest.required() )
                 WaitTest.probe( );
@@ -139,9 +139,9 @@ public:
                 }
         }
         ASSERT( free_buffer<my_number_of_tokens, "premature reuse of buffer" );
-        Buffer* b = &buffer[free_buffer]; 
-        ASSERT( &buffer[0] <= b, NULL ); 
-        ASSERT( b <= &buffer[MaxBuffer-1], NULL ); 
+        Buffer* b = &buffer[free_buffer];
+        ASSERT( &buffer[0] <= b, NULL );
+        ASSERT( b <= &buffer[MaxBuffer-1], NULL );
         ASSERT( b->id == Buffer::unused, NULL);
         b->id = next_input;
         ASSERT( b->sequence_number == Buffer::unused, NULL);
@@ -190,8 +190,8 @@ bool do_hacking_tests = true;
 const tbb::internal::Token tokens_before_wraparound = 0xF;
 
 void TestTrivialPipeline( unsigned nthread, unsigned number_of_filters ) {
-    // There are 3 filter types: parallel, serial_in_order and serial_out_of_order 
-    static const tbb::filter::mode filter_table[] = { tbb::filter::parallel, tbb::filter::serial_in_order, tbb::filter::serial_out_of_order}; 
+    // There are 3 filter types: parallel, serial_in_order and serial_out_of_order
+    static const tbb::filter::mode filter_table[] = { tbb::filter::parallel, tbb::filter::serial_in_order, tbb::filter::serial_out_of_order};
     const unsigned number_of_filter_types = sizeof(filter_table)/sizeof(filter_table[0]);
     REMARK( "testing with %lu threads and %lu filters\n", nthread, number_of_filters );
     ASSERT( number_of_filters<=MaxFilters, "too many filters" );
@@ -234,7 +234,7 @@ void TestTrivialPipeline( unsigned nthread, unsigned number_of_filters ) {
             }
         }
         // Account for clipping of parallelism.
-        if( parallelism_limit>nthread ) 
+        if( parallelism_limit>nthread )
             parallelism_limit = nthread;
         if( parallelism_limit>ntokens )
             parallelism_limit = (unsigned)ntokens;
@@ -259,7 +259,7 @@ void TestTrivialPipeline( unsigned nthread, unsigned number_of_filters ) {
                 StreamSize = StreamSize*8/3;
             }
         }
-        if( Harness::ConcurrencyTracker::PeakParallelism() < parallelism_limit ) 
+        if( Harness::ConcurrencyTracker::PeakParallelism() < parallelism_limit )
             REMARK( "nthread=%lu ntokens=%lu MaxParallelism=%lu parallelism_limit=%lu\n",
                 nthread, ntokens, Harness::ConcurrencyTracker::PeakParallelism(), parallelism_limit );
         for( unsigned i=0; i < number_of_filters; ++i ) {
diff --git a/src/test/test_pipeline_with_tbf.cpp b/src/test/test_pipeline_with_tbf.cpp
index 509dcfe..a38b894 100644
--- a/src/test/test_pipeline_with_tbf.cpp
+++ b/src/test/test_pipeline_with_tbf.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/pipeline.h"
@@ -72,11 +72,11 @@ static unsigned out_of_order_count;
 template<typename T>
 class BaseFilter: public T {
     bool* const my_done;
-    const bool my_is_last;  
+    const bool my_is_last;
     bool my_is_running;
 public:
     tbb::atomic<tbb::internal::Token> current_token;
-    BaseFilter( tbb::filter::mode type, bool done[], bool is_last ) : 
+    BaseFilter( tbb::filter::mode type, bool done[], bool is_last ) :
         T(type),
         my_done(done),
         my_is_last(is_last),
@@ -86,9 +86,9 @@ public:
     virtual Buffer* get_buffer( void* item ) {
         current_token++;
         return static_cast<Buffer*>(item);
-    } 
-    /*override*/void* operator()( void* item ) {
-        // Check if work is done only on one thread when ntokens==1 or 
+    }
+    void* operator()( void* item ) __TBB_override {
+        // Check if work is done only on one thread when ntokens==1 or
         // when pipeline has only one filter that is serial and non-thread-bound
         if( is_serial_execution && !this->is_bound() ) {
             // Get id of current thread
@@ -97,7 +97,7 @@ public:
             // Serialized execution is expected, so there should be no race.
             if( thread_id == id0 )
                 thread_id = id;
-            // Check if work is done on one thread 
+            // Check if work is done on one thread
             ASSERT( thread_id == id, "non-thread-bound stages executed on different threads when must be executed on a single one");
         }
         Harness::ConcurrencyTracker ct;
@@ -118,7 +118,7 @@ public:
                 }
             }
             if( this->is_ordered() ) {
-                if( b->sequence_number == Buffer::unused ) 
+                if( b->sequence_number == Buffer::unused )
                     b->sequence_number = current_token-1;
                 else
                     ASSERT( b->sequence_number==current_token-1, "item arrived out of order" );
@@ -126,8 +126,8 @@ public:
                 if( b->sequence_number != current_token-1 && b->sequence_number != Buffer::unused )
                     out_of_order_count++;
             }
-            ASSERT( b->id < StreamSize, NULL ); 
-            ASSERT( !my_done[b->id], "duplicate processing of token?" ); 
+            ASSERT( b->id < StreamSize, NULL );
+            ASSERT( !my_done[b->id], "duplicate processing of token?" );
             ASSERT( b->is_busy, NULL );
             my_done[b->id] = true;
             if( my_is_last ) {
@@ -137,7 +137,7 @@ public:
             }
         }
         my_is_running = false;
-        return b;  
+        return b;
     }
 };
 
@@ -151,14 +151,14 @@ public:
         BaseFilter<T>(type, done, is_last),
         my_number_of_tokens(ntokens)
     {}
-    /*override*/Buffer* get_buffer( void* ) {
+    Buffer* get_buffer( void* ) __TBB_override {
         unsigned long next_input;
-        unsigned free_buffer = 0; 
+        unsigned free_buffer = 0;
         { // lock protected scope
             tbb::spin_mutex::scoped_lock lock(input_lock);
             if( this->current_token>=StreamSize )
                 return NULL;
-            next_input = this->current_token++; 
+            next_input = this->current_token++;
             // once in a while, emulate waiting for input; this only makes sense for serial input
             if( this->is_serial() && WaitTest.required() )
                 WaitTest.probe( );
@@ -171,9 +171,9 @@ public:
                 }
         }
         ASSERT( free_buffer<my_number_of_tokens, "premature reuse of buffer" );
-        Buffer* b = &buffer[free_buffer]; 
-        ASSERT( &buffer[0] <= b, NULL ); 
-        ASSERT( b <= &buffer[MaxBuffer-1], NULL ); 
+        Buffer* b = &buffer[free_buffer];
+        ASSERT( &buffer[0] <= b, NULL );
+        ASSERT( b <= &buffer[MaxBuffer-1], NULL );
         ASSERT( b->id == Buffer::unused, NULL);
         b->id = next_input;
         ASSERT( b->sequence_number == Buffer::unused, NULL);
@@ -243,10 +243,10 @@ void clear_global_state() {
 
 class PipelineTest {
     // There are 3 non-thread-bound filter types: serial_in_order and serial_out_of_order, parallel
-    static const tbb::filter::mode non_tb_filters_table[3]; // = { tbb::filter::serial_in_order, tbb::filter::serial_out_of_order, tbb::filter::parallel}; 
-    // There are 2 thread-bound filter types: serial_in_order and serial_out_of_order 
-    static const tbb::filter::mode tb_filters_table[2]; // = { tbb::filter::serial_in_order, tbb::filter::serial_out_of_order }; 
-    
+    static const tbb::filter::mode non_tb_filters_table[3]; // = { tbb::filter::serial_in_order, tbb::filter::serial_out_of_order, tbb::filter::parallel};
+    // There are 2 thread-bound filter types: serial_in_order and serial_out_of_order
+    static const tbb::filter::mode tb_filters_table[2]; // = { tbb::filter::serial_in_order, tbb::filter::serial_out_of_order };
+
     static const unsigned number_of_non_tb_filter_types = sizeof(non_tb_filters_table)/sizeof(non_tb_filters_table[0]);
     static const unsigned number_of_tb_filter_types = sizeof(tb_filters_table)/sizeof(tb_filters_table[0]);
     static const unsigned number_of_filter_types = number_of_non_tb_filter_types + number_of_tb_filter_types;
@@ -282,11 +282,11 @@ const tbb::filter::mode PipelineTest::non_tb_filters_table[3] = {
     tbb::filter::serial_in_order,       // 0
     tbb::filter::serial_out_of_order,   // 2
     tbb::filter::parallel               // 4
-}; 
+};
 const tbb::filter::mode PipelineTest::tb_filters_table[2] = {
     tbb::filter::serial_in_order,       // 1
     tbb::filter::serial_out_of_order    // 3
-}; 
+};
 
 #include "harness_cpu.h"
 
@@ -334,7 +334,7 @@ double PipelineTest::TestOneConfiguration(unsigned numeral, unsigned nthread, un
     ASSERT(number_of_tb_filters,NULL);
     clear_global_state();
     // Account for clipping of parallelism.
-    if( parallelism_limit>nthread ) 
+    if( parallelism_limit>nthread )
         parallelism_limit = nthread;
     if( parallelism_limit>ntokens )
         parallelism_limit = (unsigned)ntokens;
@@ -360,7 +360,7 @@ double PipelineTest::TestOneConfiguration(unsigned numeral, unsigned nthread, un
         for( unsigned j=0; j<StreamSize; ++j ) {
             ASSERT( Done[i][j]==(i<number_of_filters), NULL );
         }
-    if( Harness::ConcurrencyTracker::PeakParallelism() < parallelism_limit ) 
+    if( Harness::ConcurrencyTracker::PeakParallelism() < parallelism_limit )
         REMARK( "nthread=%lu ntokens=%lu MaxParallelism=%lu parallelism_limit=%lu\n",
             nthread, ntokens, Harness::ConcurrencyTracker::PeakParallelism(), parallelism_limit );
     for( unsigned i=0; i < number_of_filters; ++i ) {
@@ -379,12 +379,12 @@ void PipelineTest::TestTrivialPipeline( unsigned nthread, unsigned number_of_fil
     ASSERT( number_of_filters<=MaxFilters, "too many filters" );
     tbb::internal::Token max_tokens = nthread < MaxBuffer ? nthread : MaxBuffer;
     // The loop has 1 iteration if max_tokens=1 and 2 iterations if max_tokens>1:
-    // one iteration for ntokens=1 and second for ntokens=max_tokens 
-    // Iteration for ntokens=1 is required in each test case to check if pipeline run only on one thread 
-    unsigned max_iteration = max_tokens > 1 ? 2 : 1; 
+    // one iteration for ntokens=1 and second for ntokens=max_tokens
+    // Iteration for ntokens=1 is required in each test case to check if pipeline run only on one thread
+    unsigned max_iteration = max_tokens > 1 ? 2 : 1;
     tbb::internal::Token ntokens = 1;
     for( unsigned iteration = 0; iteration < max_iteration; iteration++) {
-        if( iteration > 0 ) 
+        if( iteration > 0 )
             ntokens = max_tokens;
         // Count maximum iterations number
         unsigned limit = 1;
@@ -511,8 +511,8 @@ int TestMain () {
 
         // Test pipelines with 1 and maximal number of filters
         for( unsigned n=1; n<=MaxFilters; n*=MaxFilters ) {
-            // Thread-bound stages are serviced by user-created threads; those 
-            // don't run the pipeline and don't service non-thread-bound stages 
+            // Thread-bound stages are serviced by user-created threads; those
+            // don't run the pipeline and don't service non-thread-bound stages
             PipelineTest::TestTrivialPipeline(nthread,n);
         }
 
diff --git a/src/test/test_priority_queue_node.cpp b/src/test/test_priority_queue_node.cpp
index 9bd2e51..d853439 100644
--- a/src/test/test_priority_queue_node.cpp
+++ b/src/test/test_priority_queue_node.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // TO DO: Add overlapping put / receive tests
@@ -25,9 +25,7 @@
 #include "harness_checktype.h"
 #include "tbb/task_scheduler_init.h"
 #include "tbb/tick_count.h"
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
 #include "harness_graph.h"
-#endif
 
 #include <cstdio>
 
@@ -80,7 +78,7 @@ struct parallel_put_get : NoAssign {
     parallel_put_get( tbb::flow::priority_queue_node<T> &q ) : my_q(q) {}
     void operator()(int tid) const {
         for ( int i = 0; i < N; i+=C ) {
-            int j_end = ( N < i + C ) ? N : i + C; 
+            int j_end = ( N < i + C ) ? N : i + C;
             // dump about C values into the Q
             for ( int j = i; j < j_end; ++j ) {
                 ASSERT( my_q.try_put( T (N*tid + j ) ) == true, NULL );
@@ -117,23 +115,23 @@ int test_reservation(int) {
 
         T v=bogus_value, w=bogus_value;
         ASSERT( q.try_reserve(v) == true, NULL );
-        ASSERT( v == T(3), NULL ); 
+        ASSERT( v == T(3), NULL );
         ASSERT( q.try_release() == true, NULL );
         v = bogus_value;
         g.wait_for_all();
         ASSERT( q.try_reserve(v) == true, NULL );
-        ASSERT( v == T(3), NULL ); 
+        ASSERT( v == T(3), NULL );
         ASSERT( q.try_consume() == true, NULL );
         v = bogus_value;
         g.wait_for_all();
- 
+
         ASSERT( q.try_get(v) == true, NULL );
-        ASSERT( v == T(2), NULL ); 
+        ASSERT( v == T(2), NULL );
         v = bogus_value;
         g.wait_for_all();
 
         ASSERT( q.try_reserve(v) == true, NULL );
-        ASSERT( v == T(1), NULL ); 
+        ASSERT( v == T(1), NULL );
         ASSERT( q.try_reserve(w) == false, NULL );
         ASSERT( w == bogus_value, NULL );
         ASSERT( q.try_get(w) == false, NULL );
@@ -142,7 +140,7 @@ int test_reservation(int) {
         v = bogus_value;
         g.wait_for_all();
         ASSERT( q.try_reserve(v) == true, NULL );
-        ASSERT( v == T(1), NULL ); 
+        ASSERT( v == T(1), NULL );
         ASSERT( q.try_consume() == true, NULL );
         v = bogus_value;
         g.wait_for_all();
@@ -232,7 +230,7 @@ int test_parallel(int num_threads) {
 // Tests
 //
 // Predecessors cannot be registered
-// Empty Q rejects item requests 
+// Empty Q rejects item requests
 // Single serial sender, items in FIFO order
 // Chained Qs ( 2 & 3 ), single sender, items at last Q in FIFO order
 //
@@ -333,7 +331,7 @@ int test_serial() {
     return 0;
 }
 
-int TestMain() { 
+int TestMain() {
     tbb::tick_count start = tbb::tick_count::now(), stop;
     for (int p = 2; p <= 4; ++p) {
         tbb::task_scheduler_init init(p);
@@ -341,13 +339,13 @@ int TestMain() {
         test_reservation<int>(p);
         test_reservation<check_type<int> >(p);
         test_parallel<int>(p);
-    } 
+    }
     stop = tbb::tick_count::now();
     REMARK("Priority_Queue_Node Time=%6.6f\n", (stop-start).seconds());
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     REMARK("Testing resets\n");
     test_resets<int,tbb::flow::priority_queue_node<int> >();
     test_resets<float,tbb::flow::priority_queue_node<float> >();
+#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     test_buffer_extract<tbb::flow::priority_queue_node<int> >().run_tests();
 #endif
     return Harness::Done;
diff --git a/src/test/test_queue_node.cpp b/src/test/test_queue_node.cpp
index 3a71594..158c764 100644
--- a/src/test/test_queue_node.cpp
+++ b/src/test/test_queue_node.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // TO DO: Add overlapping put / receive tests
@@ -25,9 +25,7 @@
 #include "tbb/task_scheduler_init.h"
 #include "tbb/tick_count.h"
 #include "harness_checktype.h"
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
 #include "harness_graph.h"
-#endif
 
 #include <cstdio>
 
@@ -73,14 +71,14 @@ struct touches {
     int my_num_threads;
 
     touches( int num_threads ) : my_num_threads(num_threads) {
-        my_last_touch = new T* [my_num_threads]; 
-        my_touches = new bool* [my_num_threads]; 
+        my_last_touch = new T* [my_num_threads];
+        my_touches = new bool* [my_num_threads];
         for ( int p = 0; p < my_num_threads; ++p) {
             my_last_touch[p] = new T[my_num_threads];
-            for ( int p2 = 0; p2 < my_num_threads; ++p2) 
+            for ( int p2 = 0; p2 < my_num_threads; ++p2)
                 my_last_touch[p][p2] = -1;
 
-            my_touches[p] = new bool[N*my_num_threads]; 
+            my_touches[p] = new bool[N*my_num_threads];
             for ( int n = 0; n < N*my_num_threads; ++n)
                 my_touches[p][n] = false;
         }
@@ -105,8 +103,8 @@ struct touches {
             printf("Error: value seen in wrong order by local thread\n");
             return false;
         }
-        my_last_touch[tid][v_tid] = v; 
-        my_touches[tid][v] = true; 
+        my_last_touch[tid][v_tid] = v;
+        my_touches[tid][v] = true;
         return true;
     }
 
@@ -114,7 +112,7 @@ struct touches {
         bool *all_touches = new bool[N*my_num_threads];
         for ( int n = 0; n < N*my_num_threads; ++n)
             all_touches[n] = false;
-     
+
         for ( int p = 0; p < my_num_threads; ++p) {
             for ( int n = 0; n < N*my_num_threads; ++n) {
                 if ( my_touches[p][n] == true ) {
@@ -163,7 +161,7 @@ struct parallel_put_get : NoAssign {
     void operator()(int tid) const {
 
         for ( int i = 0; i < N; i+=C ) {
-            int j_end = ( N < i + C ) ? N : i + C; 
+            int j_end = ( N < i + C ) ? N : i + C;
             // dump about C values into the Q
             for ( int j = i; j < j_end; ++j ) {
                 ASSERT( my_q.try_put( T (N*tid + j ) ) == true, NULL );
@@ -195,31 +193,31 @@ int test_reservation() {
     q.try_put(T(1));
     q.try_put(T(2));
     q.try_put(T(3));
- 
+
     T v;
     ASSERT( q.reserve_item(v) == true, NULL );
-    ASSERT( v == T(1), NULL ); 
+    ASSERT( v == T(1), NULL );
     ASSERT( q.release_reservation() == true, NULL );
     v = bogus_value;
     g.wait_for_all();
     ASSERT( q.reserve_item(v) == true, NULL );
-    ASSERT( v == T(1), NULL ); 
+    ASSERT( v == T(1), NULL );
     ASSERT( q.consume_reservation() == true, NULL );
     v = bogus_value;
     g.wait_for_all();
- 
+
     ASSERT( q.try_get(v) == true, NULL );
-    ASSERT( v == T(2), NULL ); 
+    ASSERT( v == T(2), NULL );
     v = bogus_value;
     g.wait_for_all();
-    
+
     ASSERT( q.reserve_item(v) == true, NULL );
-    ASSERT( v == T(3), NULL ); 
+    ASSERT( v == T(3), NULL );
     ASSERT( q.release_reservation() == true, NULL );
     v = bogus_value;
     g.wait_for_all();
     ASSERT( q.reserve_item(v) == true, NULL );
-    ASSERT( v == T(3), NULL ); 
+    ASSERT( v == T(3), NULL );
     ASSERT( q.consume_reservation() == true, NULL );
     v = bogus_value;
     g.wait_for_all();
@@ -335,7 +333,7 @@ int test_parallel(int num_threads) {
 // Tests
 //
 // Predecessors cannot be registered
-// Empty Q rejects item requests 
+// Empty Q rejects item requests
 // Single serial sender, items in FIFO order
 // Chained Qs ( 2 & 3 ), single sender, items at last Q in FIFO order
 //
@@ -448,7 +446,7 @@ int test_serial() {
     return 0;
 }
 
-int TestMain() { 
+int TestMain() {
     tbb::tick_count start = tbb::tick_count::now(), stop;
     for (int p = 2; p <= 4; ++p) {
         tbb::task_scheduler_init init(p);
@@ -456,13 +454,13 @@ int TestMain() {
         test_serial<check_type<int> >();
         test_parallel<int>(p);
         test_parallel<check_type<int> >(p);
-    } 
+    }
     stop = tbb::tick_count::now();
     REMARK("Queue_Node Time=%6.6f\n", (stop-start).seconds());
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     REMARK("Testing resets\n");
     test_resets<int, tbb::flow::queue_node<int> >();
     test_resets<float, tbb::flow::queue_node<float> >();
+#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     test_buffer_extract<tbb::flow::queue_node<int> >().run_tests();
 #endif
     return Harness::Done;
diff --git a/src/test/test_range_based_for.h b/src/test/test_range_based_for.h
index d668e0e..9c26754 100644
--- a/src/test/test_range_based_for.h
+++ b/src/test/test_range_based_for.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 #ifndef __TBB_test_range_based_for_H
diff --git a/src/test/test_reader_writer_lock.cpp b/src/test/test_reader_writer_lock.cpp
index 3beb16e..c133615 100644
--- a/src/test/test_reader_writer_lock.cpp
+++ b/src/test/test_reader_writer_lock.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // test reader_writer_lock
diff --git a/src/test/test_runtime_loader.cpp b/src/test/test_runtime_loader.cpp
index 1c862e5..6766bf9 100644
--- a/src/test/test_runtime_loader.cpp
+++ b/src/test/test_runtime_loader.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if !TBB_USE_EXCEPTIONS && _MSC_VER
@@ -196,9 +196,9 @@ int TestMain() {
                     // Check what?
                 }
 
-                // There was a problem on Linux* OS, and still a problem on OS X*.
+                // There was a problem on Linux* OS, and still a problem on macOS*.
                 SAY( "Throw an exception." );
-                // Iterate thru all the ids first.
+                // Iterate through all the ids first.
                 for ( int id = 1; id < tbb::internal::eid_max; ++ id ) {
                     bool ex_caught = false;
                     __TBB_TRY {
diff --git a/src/test/test_rwm_upgrade_downgrade.cpp b/src/test/test_rwm_upgrade_downgrade.cpp
index cde95d6..602d003 100644
--- a/src/test/test_rwm_upgrade_downgrade.cpp
+++ b/src/test/test_rwm_upgrade_downgrade.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 #define HARNESS_DEFAULT_MIN_THREADS 4
@@ -66,7 +66,7 @@ int TestMain () {
     for( int p=MinThread; p<=MaxThread; ++p ) {
         REMARK("Testing on %d threads", p);
         Count = 0;
-        NativeParallelFor( p, Hammer<queuing_rw_mutex>(QRW_mutex) ); 
+        NativeParallelFor( p, Hammer<queuing_rw_mutex>(QRW_mutex) );
         Count = 0;
         NativeParallelFor( p, Hammer<spin_rw_mutex>(SRW_mutex) );
     }
diff --git a/src/test/test_semaphore.cpp b/src/test/test_semaphore.cpp
index 0a57d39..b7e3415 100644
--- a/src/test/test_semaphore.cpp
+++ b/src/test/test_semaphore.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 //
@@ -235,7 +235,7 @@ void FilterBase::Produce(const int /*tid*/) {
         if(totTokens)
             nextBuffer[curToken&(MAX_TOKENS-1)] = curToken*3+1;
         else
-            nextBuffer[curToken&(MAX_TOKENS-1)] = (unsigned)NULL;
+            nextBuffer[curToken&(MAX_TOKENS-1)] = 0;
         ++curToken;
         Harness::Sleep(myWait);
         unsigned temp = ++otherTokens;
diff --git a/src/test/test_sequencer_node.cpp b/src/test/test_sequencer_node.cpp
index 692fedf..a98bef8 100644
--- a/src/test/test_sequencer_node.cpp
+++ b/src/test/test_sequencer_node.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "harness.h"
@@ -73,11 +73,11 @@ struct touches {
     int my_num_threads;
 
     touches( int num_threads ) : my_num_threads(num_threads) {
-        my_last_touch = new T[my_num_threads]; 
-        my_touches = new bool* [my_num_threads]; 
+        my_last_touch = new T[my_num_threads];
+        my_touches = new bool* [my_num_threads];
         for ( int p = 0; p < my_num_threads; ++p) {
             my_last_touch[p] = T(-1);
-            my_touches[p] = new bool[N]; 
+            my_touches[p] = new bool[N];
             for ( int n = 0; n < N; ++n)
                 my_touches[p][n] = false;
         }
@@ -100,8 +100,8 @@ struct touches {
             printf("Error: value seen in wrong order by local thread\n");
             return false;
         }
-        my_last_touch[tid] = v; 
-        my_touches[tid][v] = true; 
+        my_last_touch[tid] = v;
+        my_touches[tid][v] = true;
         return true;
     }
 
@@ -109,7 +109,7 @@ struct touches {
         bool *all_touches = new bool[N];
         for ( int n = 0; n < N; ++n)
             all_touches[n] = false;
-     
+
         for ( int p = 0; p < my_num_threads; ++p) {
             for ( int n = 0; n < N; ++n) {
                 if ( my_touches[p][n] == true ) {
@@ -141,7 +141,7 @@ struct parallel_gets : NoAssign {
     void operator()(int tid) const {
         for (int j = tid; j < N; j+=my_num_threads) {
             T v;
-            spin_try_get( my_q, v );    
+            spin_try_get( my_q, v );
             my_touches.check( tid, v );
         }
     }
@@ -154,10 +154,10 @@ struct parallel_put_get : NoAssign {
     tbb::flow::sequencer_node<T> &my_s1;
     tbb::flow::sequencer_node<T> &my_s2;
     int my_num_threads;
-    tbb::atomic< int > &my_counter;    
-    touches<T> &my_touches; 
+    tbb::atomic< int > &my_counter;
+    touches<T> &my_touches;
 
-    parallel_put_get( tbb::flow::sequencer_node<T> &s1, tbb::flow::sequencer_node<T> &s2, int num_threads, 
+    parallel_put_get( tbb::flow::sequencer_node<T> &s1, tbb::flow::sequencer_node<T> &s2, int num_threads,
                       tbb::atomic<int> &counter, touches<T> &t ) : my_s1(s1), my_s2(s2), my_num_threads(num_threads), my_counter(counter), my_touches(t) {}
 
     void operator()(int tid) const {
@@ -172,7 +172,7 @@ struct parallel_put_get : NoAssign {
 
             for (int i = i_start; i < i_end; ++i) {
                 T v;
-                spin_try_get( my_s2, v );    
+                spin_try_get( my_s2, v );
                 my_touches.check( tid, v );
             }
         }
@@ -180,7 +180,7 @@ struct parallel_put_get : NoAssign {
 
 };
 
-// 
+//
 // Tests
 //
 // multiple parallel senders, multiple receivers, properly sequenced (relative to receiver) at output
@@ -244,7 +244,7 @@ int test_parallel(int num_threads) {
 }
 
 
-// 
+//
 // Tests
 //
 // No predecessors can be registered
@@ -388,13 +388,13 @@ int test_serial() {
     return 0;
 }
 
-int TestMain() { 
+int TestMain() {
     tbb::tick_count start = tbb::tick_count::now(), stop;
     for (int p = 2; p <= 4; ++p) {
         tbb::task_scheduler_init init(p);
         test_serial<int>();
         test_parallel<int>(p);
-    } 
+    }
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     test_buffer_extract<tbb::flow::sequencer_node<int> >().run_tests();
 #endif
diff --git a/src/test/test_source_node.cpp b/src/test/test_source_node.cpp
index 3f1ec07..be900e4 100644
--- a/src/test/test_source_node.cpp
+++ b/src/test/test_source_node.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // have to expose the reset_node method to be able to reset a function_body
@@ -34,42 +34,36 @@ class test_push_receiver : public tbb::flow::receiver<T> {
 
 public:
 
-    test_push_receiver() {  
-        for (int i = 0; i < N; ++i ) 
+    test_push_receiver() {
+        for (int i = 0; i < N; ++i )
             my_counters[i] = 0;
     }
 
     int get_count( int i ) {
-       int v = my_counters[i]; 
+       int v = my_counters[i];
        return v;
     }
 
-    typedef tbb::flow::sender<T> predecessor_type;
+    typedef typename tbb::flow::receiver<T>::predecessor_type predecessor_type;
 
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     typedef typename tbb::flow::receiver<T>::built_predecessors_type built_predecessors_type;
     typedef typename tbb::flow::receiver<T>::predecessor_list_type predecessor_list_type;
     built_predecessors_type bpt;
-    built_predecessors_type &built_predecessors() { return bpt; }
-    void internal_add_built_predecessor( predecessor_type & ) { }
-    void internal_delete_built_predecessor( predecessor_type & ) { }
-    void copy_predecessors( predecessor_list_type & ) { }
-    size_t predecessor_count() { return 0; }
+    built_predecessors_type &built_predecessors() __TBB_override { return bpt; }
+    void internal_add_built_predecessor( predecessor_type & ) __TBB_override { }
+    void internal_delete_built_predecessor( predecessor_type & ) __TBB_override { }
+    void copy_predecessors( predecessor_list_type & ) __TBB_override { }
+    size_t predecessor_count() __TBB_override { return 0; }
 #endif
 
-    tbb::task *try_put_task( const T &v ) {
+    tbb::task *try_put_task( const T &v ) __TBB_override {
        int i = (int)v;
        ++my_counters[i];
-       return const_cast<tbb::task *>(tbb::flow::interface7::SUCCESSFULLY_ENQUEUED);
+       return const_cast<tbb::task *>(SUCCESSFULLY_ENQUEUED);
     }
 
-
-
-#if TBB_PREVIEW_FLOW_GRAPH_FEATURES
-    /*override*/void reset_receiver(tbb::flow::reset_flags /*f*/) {}
-#else
-    /*override*/void reset_receiver() {}
-#endif
+    void reset_receiver(tbb::flow::reset_flags /*f*/) __TBB_override {}
 };
 
 template< typename T >
@@ -77,7 +71,7 @@ class source_body {
 
    tbb::atomic<int> my_count;
    int *ninvocations;
- 
+
 public:
 
    source_body() : ninvocations(NULL) { my_count = 0; }
@@ -90,7 +84,7 @@ public:
          return true;
       else
          return false;
-   } 
+   }
 
 };
 
@@ -101,15 +95,15 @@ class function_body {
 
 public:
 
-    function_body( tbb::atomic<int> *counters ) : my_counters(counters) {  
-        for (int i = 0; i < N; ++i ) 
+    function_body( tbb::atomic<int> *counters ) : my_counters(counters) {
+        for (int i = 0; i < N; ++i )
             my_counters[i] = 0;
     }
 
     bool operator()( T v ) {
         ++my_counters[(int)v];
         return true;
-    } 
+    }
 
 };
 
@@ -123,7 +117,7 @@ void test_single_dest() {
    tbb::flow::make_edge( src, dest );
    g.wait_for_all();
    for (int i = 0; i < N; ++i ) {
-       ASSERT( dest.get_count(i) == 1, NULL ); 
+       ASSERT( dest.get_count(i) == 1, NULL );
    }
 
    // push only
@@ -135,10 +129,10 @@ void test_single_dest() {
    g.wait_for_all();
    for (int i = 0; i < N; ++i ) {
        int v = counters3[i];
-       ASSERT( v == 1, NULL ); 
+       ASSERT( v == 1, NULL );
    }
 
-   // push & pull 
+   // push & pull
    tbb::flow::source_node<T> src2(g, source_body<T>() );
    tbb::atomic<int> counters2[N];
    function_body<T> b2( counters2 );
@@ -153,7 +147,7 @@ void test_single_dest() {
    g.wait_for_all();
    for (int i = 0; i < N; ++i ) {
        int v = counters2[i];
-       ASSERT( v == 1, NULL ); 
+       ASSERT( v == 1, NULL );
    }
 
    // test copy constructor
@@ -162,10 +156,99 @@ void test_single_dest() {
    ASSERT( src_copy.register_successor(dest_c), NULL );
    g.wait_for_all();
    for (int i = 0; i < N; ++i ) {
-       ASSERT( dest_c.get_count(i) == 1, NULL ); 
+       ASSERT( dest_c.get_count(i) == 1, NULL );
    }
 }
 
+void test_reset() {
+    //    source_node -> function_node
+    tbb::flow::graph g;
+    tbb::atomic<int> counters3[N];
+    tbb::flow::source_node<int> src3(g, source_body<int>() );
+    tbb::flow::source_node<int> src_inactive(g, source_body<int>(), /*active*/ false );
+    function_body<int> b3( counters3 );
+    tbb::flow::function_node<int,bool> dest3(g, tbb::flow::unlimited, b3 );
+    tbb::flow::make_edge( src3, dest3 );
+    //    source_node already in active state.  Let the graph run,
+    g.wait_for_all();
+    //    check the array for each value.
+    for (int i = 0; i < N; ++i ) {
+        int v = counters3[i];
+        ASSERT( v == 1, NULL );
+        counters3[i] = 0;
+    }
+    g.reset(tbb::flow::rf_reset_bodies);  // <-- re-initializes the counts.
+    // and spawns task to run source
+    g.wait_for_all();
+    //    check output queue again.  Should be the same contents.
+    for (int i = 0; i < N; ++i ) {
+        int v = counters3[i];
+        ASSERT( v == 1, NULL );
+        counters3[i] = 0;
+    }
+    g.reset();  // doesn't reset the source_node_body to initial state, but does spawn a task
+                // to run the source_node.
+
+    g.wait_for_all();
+    // array should be all zero
+    for (int i = 0; i < N; ++i ) {
+        int v = counters3[i];
+        ASSERT( v == 0, NULL );
+    }
+
+    remove_edge(src3, dest3);
+    make_edge(src_inactive, dest3);
+
+    // src_inactive doesn't run
+    g.wait_for_all();
+    for (int i = 0; i < N; ++i ) {
+        int v = counters3[i];
+        ASSERT( v == 0, NULL );
+    }
+
+    // run graph
+    src_inactive.activate();
+    g.wait_for_all();
+    // check output
+    for (int i = 0; i < N; ++i ) {
+        int v = counters3[i];
+        ASSERT( v == 1, NULL );
+        counters3[i] = 0;
+    }
+    g.reset(tbb::flow::rf_reset_bodies);  // <-- reinitializes the counts
+    // src_inactive doesn't run
+    g.wait_for_all();
+    for (int i = 0; i < N; ++i ) {
+        int v = counters3[i];
+        ASSERT( v == 0, NULL );
+    }
+
+    // start it up
+    src_inactive.activate();
+    g.wait_for_all();
+    for (int i = 0; i < N; ++i ) {
+        int v = counters3[i];
+        ASSERT( v == 1, NULL );
+        counters3[i] = 0;
+    }
+    g.reset();  // doesn't reset the source_node_body to initial state, and doesn't
+                // spawn a task to run the source_node.
+
+    g.wait_for_all();
+    // array should be all zero
+    for (int i = 0; i < N; ++i ) {
+        int v = counters3[i];
+        ASSERT( v == 0, NULL );
+    }
+    src_inactive.activate();
+    // source_node_body is already in final state, so source_node will not forward a message.
+    g.wait_for_all();
+    for (int i = 0; i < N; ++i ) {
+        int v = counters3[i];
+        ASSERT( v == 0, NULL );
+    }
+}
+
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
 void test_extract() {
     int counts = 0;
@@ -173,7 +256,7 @@ void test_extract() {
     tbb::flow::graph g;
     typedef tbb::flow::source_node<int> snode_type;
     typedef snode_type::successor_list_type successor_list_type;
-    snode_type s0(g, source_body<int>(counts), /*is_active*/false ); 
+    snode_type s0(g, source_body<int>(counts), /*is_active*/false );
     tbb::flow::join_node< tbb::flow::tuple<int,int>, tbb::flow::reserving > j0(g);
     tbb::flow::join_node< tbb::flow::tuple<int,int>, tbb::flow::reserving > j1(g);
     tbb::flow::join_node< tbb::flow::tuple<int,int>, tbb::flow::reserving > j2(g);
@@ -312,7 +395,7 @@ void test_extract() {
 }
 #endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */
 
-int TestMain() { 
+int TestMain() {
     if( MinThread<1 ) {
         REPORT("number of threads must be positive\n");
         exit(1);
@@ -322,6 +405,7 @@ int TestMain() {
         test_single_dest<int>();
         test_single_dest<float>();
     }
+    test_reset();
 #if TBB_PREVIEW_FLOW_GRAPH_FEATURES
     test_extract();
 #endif
diff --git a/src/test/test_split_node.cpp b/src/test/test_split_node.cpp
index 7710f6d..9f3d3ca 100644
--- a/src/test/test_split_node.cpp
+++ b/src/test/test_split_node.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "harness.h"
diff --git a/src/test/test_static_assert.cpp b/src/test/test_static_assert.cpp
index d659ebf..1a55fcb 100644
--- a/src/test/test_static_assert.cpp
+++ b/src/test/test_static_assert.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/tbb_stddef.h"
diff --git a/src/test/test_std_thread.cpp b/src/test/test_std_thread.cpp
index 2ab4103..7f5547c 100644
--- a/src/test/test_std_thread.cpp
+++ b/src/test/test_std_thread.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #define TBB_IMPLEMENT_CPP0X 1
diff --git a/src/test/test_streaming_node.cpp b/src/test/test_streaming_node.cpp
new file mode 100644
index 0000000..ef487ee
--- /dev/null
+++ b/src/test/test_streaming_node.cpp
@@ -0,0 +1,895 @@
+/*
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
+*/
+
+#define TBB_PREVIEW_FLOW_GRAPH_NODES 1
+#define TBB_PREVIEW_FLOW_GRAPH_FEATURES 1
+
+#include "tbb/tbb_config.h"
+
+#if __TBB_PREVIEW_STREAMING_NODE
+
+#if _MSC_VER
+#pragma warning (disable: 4503) // Suppress "decorated name length exceeded, name was truncated" warning
+#pragma warning (disable: 4702) // Suppress "unreachable code" warning
+#endif
+
+#include <iostream>
+
+#include "harness.h"
+#include "harness_assert.h"
+
+#include "tbb/concurrent_queue.h"
+#include "tbb/flow_graph.h"
+#include "tbb/tbb_thread.h"
+
+using namespace tbb::flow;
+
+//--------------------------------------------------------------------------------
+//--------------------------------TEST HELPERS------------------------------------
+//--------------------------------------------------------------------------------
+
+template <typename ...A>
+struct tuples_equal : std::false_type { };
+
+template <typename ...A>
+struct tuples_equal<std::tuple<A...>, std::tuple<>> : std::false_type { };
+
+template <typename ...B>
+struct tuples_equal<std::tuple<>, std::tuple<B...>> : std::false_type { };
+
+template <>
+struct tuples_equal<std::tuple<>, std::tuple<>> : std::true_type { };
+
+template <typename A1, typename ...Aother, typename B1, typename ...Bother>
+struct tuples_equal<std::tuple<A1, Aother...>, std::tuple<B1, Bother...>>
+{
+    static const bool value = std::is_same<A1, B1>::value && tuples_equal<std::tuple<Aother...>, std::tuple<Bother...>>::value;
+};
+
+template<typename...A>
+struct first_variadic {
+    template<typename...B>
+    static void is_equal_to_second()
+    {
+        ASSERT((tuples_equal< std::tuple<A...>, std::tuple<B...> >::value), "Unexpected variadic types");
+    }
+};
+
+//--------------------------------------------------------------------------------
+
+template<typename T>
+class factory_msg : public async_msg<T> {
+public:
+
+    factory_msg() {}
+    factory_msg(const T& input_data) : m_data(input_data) {}
+
+    const T& data() const { return m_data; }
+    void update_data(T value) { m_data = value; }
+
+private:
+    T m_data;
+};
+
+//--------------------------------------------------------------------------------
+
+class base_streaming_factory : NoCopy {
+public:
+
+    typedef int device_type;
+    typedef int kernel_type;
+
+    template<typename T> using async_msg_type = factory_msg<T>;
+
+    base_streaming_factory() : devices_list(1) {}
+
+    std::vector<device_type> devices() {
+        return devices_list;
+    }
+
+    template <typename ...Args>
+    void send_result_forward(Args&... args) {
+        deviceResult = doDeviceWork();
+        send_result(args...);
+    }
+
+    void clear_factory() {
+        arguments_list.clear();
+    }
+
+    void process_arg_list() {}
+
+    template <typename T, typename ...Rest>
+    void process_arg_list(T& arg, Rest&... args) {
+        process_one_arg(arg);
+        process_arg_list(args...);
+    }
+
+private:
+
+    int doDeviceWork() {
+        int result = 0;
+        for (size_t i = 0; i < arguments_list.size(); i++)
+            result += arguments_list[i];
+        return result;
+    }
+
+    // Pass calculation result to the next node
+    template <typename ...Args>
+    void set_result(Args...) {}
+
+    template <typename T>
+    void set_result(async_msg_type<T>& msg) {
+        msg.set(deviceResult);
+    }
+
+    // Variadic functions for result processing
+    // and sending them to all async_msgs
+    void send_result() {}
+
+    template <typename T, typename ...Rest>
+    void send_result(T& arg, Rest&... args) {
+        set_result(arg);
+        send_result(args...);
+    }
+
+    // Retrieve values from async_msg objects
+    // and store them in vector
+    template <typename T>
+    void process_one_arg(async_msg_type<T>& msg) {
+        arguments_list.push_back(msg.data());
+    }
+
+    template <typename T>
+    void process_one_arg(const async_msg_type<T>& msg) {
+        arguments_list.push_back(msg.data());
+    }
+
+    std::vector<device_type> devices_list;
+    std::vector<int> arguments_list;
+
+    int deviceResult;
+};
+
+template<typename ...ExpectedArgs>
+class test_streaming_factory : public base_streaming_factory {
+public:
+
+    template <typename ...Args>
+    void send_data(device_type /*device*/, Args&... /*args*/) {}
+
+    template <typename ...Args>
+    void send_kernel(device_type /*device*/, const kernel_type& /*kernel*/, Args&... args) {
+        check_arguments(args...);
+        process_arg_list(args...);
+        send_result_forward(args...);
+        clear_factory();
+    }
+
+    template <typename FinalizeFn, typename ...Args>
+    void finalize(device_type /*device*/, FinalizeFn fn, Args&... args) {
+        check_arguments(args...);
+        fn();
+    }
+
+    template<typename ...Args>
+    void check_arguments(Args&... /*args*/) {
+        first_variadic< Args... >::template is_equal_to_second< ExpectedArgs... >();
+    }
+};
+
+//--------------------------------------------------------------------------------
+
+template<typename Factory>
+class device_selector {
+public:
+    device_selector() : my_state(DEFAULT_INITIALIZED) {}
+    device_selector(const device_selector&) : my_state(COPY_INITIALIZED) {}
+    device_selector(device_selector&&) : my_state(COPY_INITIALIZED) {}
+    ~device_selector() { my_state = DELETED; }
+
+    typename Factory::device_type operator()(Factory &f) {
+        ASSERT(my_state == COPY_INITIALIZED, NULL);
+        ASSERT(!f.devices().empty(), NULL);
+        return *(f.devices().begin());
+    }
+
+private:
+    enum state {
+        DEFAULT_INITIALIZED,
+        COPY_INITIALIZED,
+        DELETED
+    };
+    state my_state;
+};
+
+//--------------------------------------------------------------------------------
+
+void TestWithoutSetArgs() {
+    graph g;
+
+    typedef test_streaming_factory< factory_msg<int>, factory_msg<int> > device_factory;
+
+    device_factory factory;
+    device_selector<device_factory> device_selector;
+    device_factory::kernel_type kernel(0);
+
+    int expected_result;
+    split_node < tuple<int, int> > split_n(g);
+    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);
+    function_node< int > function_n(g, unlimited, [&expected_result](const int& result) {
+        ASSERT(expected_result == result, "Validation has failed");
+    });
+
+    make_edge(output_port<0>(split_n), input_port<0>(streaming_n));
+    make_edge(output_port<1>(split_n), input_port<1>(streaming_n));
+
+    const int first_arg = 10;
+    const int second_arg = 20;
+    std::tuple<int, int> args_tuple = std::make_tuple(first_arg, second_arg);
+
+    // test finalize function
+    split_n.try_put(args_tuple);
+    g.wait_for_all();
+
+    make_edge(output_port<0>(streaming_n), function_n);
+    expected_result = 30;
+    split_n.try_put(args_tuple);
+    g.wait_for_all();
+}
+
+//--------------------------------------------------------------------------------
+
+void TestSetArgsOnly() {
+    graph g;
+
+    typedef test_streaming_factory< const factory_msg<int> > device_factory;
+
+    device_factory factory;
+    device_selector<device_factory> device_selector;
+    device_factory::kernel_type kernel(0);
+
+    split_node < tuple<int, int> > split_n(g);
+    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);
+
+    make_edge(output_port<0>(split_n), input_port<0>(streaming_n));
+    make_edge(output_port<1>(split_n), input_port<1>(streaming_n));
+
+    const int first_arg = 10;
+    const int second_arg = 20;
+    std::tuple<int, int> args_tuple = std::make_tuple(first_arg, second_arg);
+
+    streaming_n.set_args(100);
+    split_n.try_put(args_tuple);
+    g.wait_for_all();
+}
+
+//--------------------------------------------------------------------------------
+
+void TestSetPortRefOnly() {
+    graph g;
+
+    typedef test_streaming_factory< factory_msg<int>, factory_msg<int> > device_factory;
+
+    device_factory factory;
+    device_selector<device_factory> device_selector;
+    device_factory::kernel_type kernel(0);
+
+    int expected_result;
+    split_node < tuple<int, int> > split_n(g);
+    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);
+    function_node< int > function_n(g, unlimited, [&expected_result](const int& result) {
+        ASSERT(expected_result == result, "Validation has failed");
+    });
+
+    make_edge(output_port<0>(split_n), input_port<0>(streaming_n));
+    make_edge(output_port<1>(split_n), input_port<1>(streaming_n));
+
+    const int first_arg = 10;
+    const int second_arg = 20;
+    std::tuple<int, int> args_tuple = std::make_tuple(first_arg, second_arg);
+
+    streaming_n.set_args(port_ref<0, 1>);
+
+    // test finalize function
+    split_n.try_put(args_tuple);
+    g.wait_for_all();
+
+    make_edge(output_port<0>(streaming_n), function_n);
+    expected_result = 30;
+    split_n.try_put(args_tuple);
+    g.wait_for_all();
+}
+
+//--------------------------------------------------------------------------------
+
+void TestSetArgsAndPortRef1() {
+    graph g;
+
+    typedef test_streaming_factory< const factory_msg<int>, factory_msg<int>, factory_msg<int> > device_factory;
+
+    device_factory factory;
+    device_selector<device_factory> device_selector;
+    device_factory::kernel_type kernel(0);
+
+    int expected_result;
+    split_node < tuple<int, int> > split_n(g);
+    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);
+    function_node< int > function_n(g, unlimited, [&expected_result](const int& result) {
+        ASSERT(expected_result == result, "Validation has failed");
+    });
+
+    make_edge(output_port<0>(split_n), input_port<0>(streaming_n));
+    make_edge(output_port<1>(split_n), input_port<1>(streaming_n));
+
+    const int first_arg = 10;
+    const int second_arg = 20;
+    std::tuple<int, int> args_tuple = std::make_tuple(first_arg, second_arg);
+
+    streaming_n.set_args(100, port_ref<0, 1>);
+
+    // test finalize function
+    split_n.try_put(args_tuple);
+    g.wait_for_all();
+
+    make_edge(output_port<0>(streaming_n), function_n);
+    expected_result = 130;
+    split_n.try_put(args_tuple);
+    g.wait_for_all();
+}
+
+//--------------------------------------------------------------------------------
+
+void TestSetArgsAndPortRef2() {
+    graph g;
+
+    typedef test_streaming_factory< const factory_msg<int>, factory_msg<int>,
+                                    const factory_msg<int>, factory_msg<int> > device_factory;
+
+    device_factory factory;
+    device_selector<device_factory> device_selector;
+    device_factory::kernel_type kernel(0);
+
+    int expected_result;
+    split_node < tuple<int, int> > split_n(g);
+    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);
+    function_node< int > function_n(g, unlimited, [&expected_result](const int& result) {
+        ASSERT(expected_result == result, "Validation has failed");
+    });
+
+    make_edge(output_port<0>(split_n), input_port<0>(streaming_n));
+    make_edge(output_port<1>(split_n), input_port<1>(streaming_n));
+
+    const int first_arg = 10;
+    const int second_arg = 20;
+    std::tuple<int, int> args_tuple = std::make_tuple(first_arg, second_arg);
+
+    streaming_n.set_args(100, port_ref<0>, 200, port_ref<1>);
+
+    // test finalize function
+    split_n.try_put(args_tuple);
+    g.wait_for_all();
+
+    make_edge(output_port<0>(streaming_n), function_n);
+    expected_result = 330;
+    split_n.try_put(args_tuple);
+    g.wait_for_all();
+}
+
+//--------------------------------------------------------------------------------
+
+template <typename ...ExpectedArgs>
+class send_data_factory : public base_streaming_factory {
+public:
+
+    send_data_factory() : send_data_counter(0) {}
+
+    template <typename ...Args>
+    void send_data(device_type /*device*/, Args&... /*args*/) {
+        switch (send_data_counter) {
+            case 0:
+                first_variadic< Args... >::template is_equal_to_second< ExpectedArgs... >();
+                break;
+            case 1:
+                first_variadic< Args... >::template is_equal_to_second< factory_msg<int> >();
+                break;
+            case 2:
+                first_variadic< Args... >::template is_equal_to_second< factory_msg<int> >();
+                break;
+            default: 
+                break;
+        }
+        send_data_counter++;
+    }
+
+    template <typename ...Args>
+    void send_kernel(device_type /*device*/, const kernel_type& /*kernel*/, Args&... /*args*/) {
+        ASSERT(send_data_counter == 3, "send_data() was called not enough times");
+        send_data_counter = 0;
+    }
+
+    template <typename FinalizeFn, typename ...Args>
+    void finalize(device_type /*device*/, FinalizeFn fn, Args&... /*args*/) {
+        fn();
+    }
+
+private:
+    int send_data_counter;
+};
+
+void TestSendData_withoutSetArgs() {
+    graph g;
+
+    typedef send_data_factory< tbb::flow::interface9::internal::port_ref_impl<0,1> > device_factory;
+
+    device_factory factory;
+    device_selector<device_factory> device_selector;
+    device_factory::kernel_type kernel(0);
+
+    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);
+
+    input_port<0>(streaming_n).try_put(10);
+    input_port<1>(streaming_n).try_put(20);
+    g.wait_for_all();
+}
+
+//--------------------------------------------------------------------------------
+
+void TestSendData_setArgsOnly() {
+    graph g;
+
+    typedef send_data_factory< factory_msg<int> > device_factory;
+
+    device_factory factory;
+    device_selector<device_factory> device_selector;
+    device_factory::kernel_type kernel(0);
+
+    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);
+
+    streaming_n.set_args(100);
+    input_port<0>(streaming_n).try_put(10);
+    input_port<1>(streaming_n).try_put(20);
+    g.wait_for_all();
+}
+
+//--------------------------------------------------------------------------------
+
+void TestSendData_portRefOnly() {
+    graph g;
+
+    typedef send_data_factory< tbb::flow::interface9::internal::port_ref_impl<0,1>(*)() > device_factory;
+
+    device_factory factory;
+    device_selector<device_factory> device_selector;
+    device_factory::kernel_type kernel(0);
+
+    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);
+
+    streaming_n.set_args(port_ref<0, 1>);
+    input_port<0>(streaming_n).try_put(10);
+    input_port<1>(streaming_n).try_put(20);
+    g.wait_for_all();
+}
+
+//--------------------------------------------------------------------------------
+
+void TestSendData_setArgsAndPortRef1() {
+    graph g;
+
+    typedef send_data_factory< factory_msg<int>, tbb::flow::interface9::internal::port_ref_impl<0, 1>(*)() > device_factory;
+
+    device_factory factory;
+    device_selector<device_factory> device_selector;
+    device_factory::kernel_type kernel(0);
+
+    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);
+
+    streaming_n.set_args(100, port_ref<0,1>);
+    input_port<0>(streaming_n).try_put(10);
+    input_port<1>(streaming_n).try_put(20);
+    g.wait_for_all();
+}
+
+//--------------------------------------------------------------------------------
+
+void TestSendData_setArgsAndPortRef2() {
+    graph g;
+
+    typedef send_data_factory< factory_msg<int>, tbb::flow::interface9::internal::port_ref_impl<0,0>(*)(),
+                               factory_msg<int>, tbb::flow::interface9::internal::port_ref_impl<1,1>(*)() > device_factory;
+
+    device_factory factory;
+    device_selector<device_factory> device_selector;
+    device_factory::kernel_type kernel(0);
+
+    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);
+
+    streaming_n.set_args(100, port_ref<0>, 200, port_ref<1>);
+    input_port<0>(streaming_n).try_put(10);
+    input_port<1>(streaming_n).try_put(20);
+    g.wait_for_all();
+}
+
+//--------------------------------------------------------------------------------
+
+void TestArgumentsPassing() {
+    REMARK("TestArgumentsPassing: ");
+    TestWithoutSetArgs();
+    TestSetArgsOnly();
+    TestSetPortRefOnly();
+    TestSetArgsAndPortRef1();
+    TestSetArgsAndPortRef2();
+
+    TestSendData_withoutSetArgs();
+    TestSendData_setArgsOnly();
+    TestSendData_portRefOnly();
+    TestSendData_setArgsAndPortRef1();
+    TestSendData_setArgsAndPortRef2();
+    REMARK("done\n");
+}
+
+//--------------------------------------------------------------------------------
+
+template<typename... ExpectedArgs>
+class range_streaming_factory : public base_streaming_factory {
+public:
+
+    typedef std::array<int, 2> range_type;
+
+    template <typename ...Args>
+    void send_data(device_type /*device*/, Args&... /*args*/) {
+    }
+
+    template <typename ...Args>
+    void send_kernel(device_type /*device*/, const kernel_type& /*kernel*/, const range_type& work_size, Args&... args) {
+        ASSERT(work_size[0] == 1024, "Range was set incorrectly");
+        ASSERT(work_size[1] == 720, "Range was set incorrectly");
+        first_variadic< Args... >::template is_equal_to_second< ExpectedArgs... >();
+        process_arg_list(args...);
+        send_result_forward(args...);
+        clear_factory();
+    }
+
+    template <typename FinalizeFn, typename ...Args>
+    void finalize(device_type /*device*/, FinalizeFn fn, Args&... /*args*/) {
+        first_variadic< Args... >::template is_equal_to_second< ExpectedArgs... >();
+        fn();
+    }
+
+};
+
+void TestSetRange() {
+    REMARK("TestSetRange: ");
+
+    graph g;
+
+    typedef range_streaming_factory< const factory_msg<int>, factory_msg<int>,
+                                     const factory_msg<int>, factory_msg<int> > device_factory;
+
+    device_factory factory;
+    device_selector<device_factory> device_selector;
+    device_factory::kernel_type kernel(0);
+
+    int expected_result;
+    split_node < tuple<int, int> > split_n(g);
+    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);
+    function_node< int > function_n(g, unlimited, [&expected_result](const int& result) {
+        ASSERT(expected_result == result, "Validation has failed");
+    });
+
+    make_edge(output_port<0>(split_n), input_port<0>(streaming_n));
+    make_edge(output_port<1>(split_n), input_port<1>(streaming_n));
+
+    const int first_arg = 10;
+    const int second_arg = 20;
+    std::tuple<int, int> args_tuple = std::make_tuple(first_arg, second_arg);
+
+    streaming_n.set_args(100, port_ref<0>, 200, port_ref<1>);
+
+// test version for GCC <= 4.7.2 (unsupported conversion from initializer_list to std::array)
+#if __GNUC__ < 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ <= 7 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2)))
+    std::array<int, 2> device_range;
+    device_range[0] = 1024;
+    device_range[1] = 720;
+    streaming_n.set_range(device_range);
+#else
+    std::array<int, 2> device_range = { 1024,720 };
+    streaming_n.set_range(device_range);
+#endif
+
+    split_n.try_put(args_tuple);
+    g.wait_for_all();
+
+    make_edge(output_port<0>(streaming_n), function_n);
+    expected_result = 330;
+    split_n.try_put(args_tuple);
+    g.wait_for_all();
+    
+    REMARK("done\n");
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------
+
+template <typename T>
+class user_async_msg : public tbb::flow::async_msg<T>
+{
+public:
+    typedef tbb::flow::async_msg<T> base;
+
+    user_async_msg() : base() {}
+    user_async_msg(T value) : m_data(value) {}
+
+    void finalize() const __TBB_override;
+
+private:
+    T m_data;
+};
+
+class user_async_activity { // Async activity singleton
+public:
+    static user_async_activity* instance() {
+        if (s_Activity == NULL) {
+            s_Activity = new user_async_activity();
+        }
+        return s_Activity;
+    }
+
+    static void destroy() {
+        ASSERT(s_Activity != NULL, "destroyed twice");
+        s_Activity->myThread.join();
+        delete s_Activity;
+        s_Activity = NULL;
+    }
+
+    static void finish(const user_async_msg<int>& msg) {
+        ASSERT(user_async_activity::s_Activity != NULL, "activity must be alive");
+        user_async_activity::s_Activity->finishTaskQueue(msg);
+    }
+
+    void addWork(int addValue, int timeout = 0) {
+        myQueue.push(my_task(addValue, timeout));
+    }
+
+    void finishTaskQueue(const user_async_msg<int>& msg) {
+        myMsg = msg;
+        myQueue.push(my_task(0, 0, true));
+    }
+
+private:
+
+    struct my_task {
+        my_task(int addValue = 0, int timeout = 0, bool finishFlag = false)
+            : myAddValue(addValue), myTimeout(timeout), myFinishFlag(finishFlag) {}
+
+        int     myAddValue;
+        int     myTimeout;
+        bool    myFinishFlag;
+    };
+
+    static void threadFunc(user_async_activity* activity) {
+        for(;;) {
+            my_task work;
+            activity->myQueue.pop(work);
+            Harness::Sleep(work.myTimeout);
+            if (work.myFinishFlag) {
+                break;
+            }
+            activity->myQueueSum += work.myAddValue;
+        }
+        activity->myMsg.set(activity->myQueueSum);
+    }
+
+    user_async_activity() : myQueueSum(0), myThread(&user_async_activity::threadFunc, this) {}
+
+private:
+    tbb::concurrent_bounded_queue<my_task>   myQueue;
+    int                                      myQueueSum;
+    user_async_msg<int>                      myMsg;
+    tbb::tbb_thread                          myThread;
+
+    static user_async_activity*              s_Activity;
+};
+
+user_async_activity* user_async_activity::s_Activity = NULL;
+
+template <typename T>
+void user_async_msg<T>::finalize() const {
+    user_async_activity::finish(*this);
+}
+
+class data_streaming_factory {
+public:
+
+    typedef int device_type;
+    typedef int kernel_type;
+
+    template<typename T> using async_msg_type = user_async_msg<T>;
+
+    data_streaming_factory() : devices_list(1) {}
+
+    template <typename ...Args>
+    void send_data(device_type /*device*/, Args&... /*args*/) {}
+
+    template <typename ...Args>
+    void send_kernel(device_type /*device*/, const kernel_type& /*kernel*/, Args&... args) {
+        process_arg_list(args...);
+    }
+
+    template <typename FinalizeFn, typename ...Args>
+    void finalize(device_type /*device*/, FinalizeFn /*fn*/, Args&... /*args*/) {}
+
+    // Retrieve values from async_msg objects
+    // and store them in vector
+    void process_arg_list() {}
+
+    template <typename T, typename ...Rest>
+    void process_arg_list(T& arg, Rest&... args) {
+        process_one_arg(arg);
+        process_arg_list(args...);
+    }
+
+    template <typename T>
+    void process_one_arg(async_msg_type<T>& /*msg*/) {
+        user_async_activity::instance()->addWork(1, 10);
+    }
+
+    template <typename ...Args>
+    void process_one_arg(Args&... /*args*/) {}
+
+    std::vector<device_type> devices() {
+        return devices_list;
+    }
+
+private:
+    std::vector<device_type> devices_list;
+};
+
+void TestChaining() {
+    REMARK("TestChaining: ");
+
+    graph g;
+
+    typedef data_streaming_factory device_factory;
+    typedef streaming_node< tuple<int>, queueing, device_factory > streaming_node_type;
+    typedef std::vector< streaming_node_type > nodes_vector_type;
+
+    device_factory factory;
+    device_selector<device_factory> device_selector;
+    device_factory::kernel_type kernel(0);
+
+    const int STREAMING_GRAPH_CHAIN_LENGTH = 1000;
+    nodes_vector_type nodes_vector;
+    for (int i = 0; i < STREAMING_GRAPH_CHAIN_LENGTH; i++) {
+        nodes_vector.emplace_back(g, kernel, device_selector, factory);
+    }
+
+    function_node< int, int > source_n(g, unlimited, [&g](const int& value) -> int {
+        g.increment_wait_count();
+        return value;
+    });
+
+    function_node< int > destination_n(g, unlimited, [&g, &STREAMING_GRAPH_CHAIN_LENGTH](const int& result) {
+        g.decrement_wait_count();
+        ASSERT(result == STREAMING_GRAPH_CHAIN_LENGTH, "calculation chain result is wrong");
+    });
+
+    make_edge(source_n, input_port<0>(nodes_vector.front()));
+    for (size_t i = 0; i < nodes_vector.size() - 1; i++) {
+        make_edge(output_port<0>(nodes_vector[i]), input_port<0>(nodes_vector[i + 1]));
+        nodes_vector[i].set_args(port_ref<0>);
+    }
+    nodes_vector.back().set_args(port_ref<0>);
+    make_edge(output_port<0>(nodes_vector.back()), destination_n);
+
+    source_n.try_put(0);
+    g.wait_for_all();
+    user_async_activity::destroy();
+
+    REMARK("done\n");
+}
+
+//--------------------------------------------------------------------------------
+
+void TestCopyConstructor() {
+    REMARK("TestCopyConstructor: ");
+
+    graph g;
+
+    typedef test_streaming_factory< factory_msg<int>, factory_msg<int> > device_factory;
+
+    device_factory factory;
+    device_selector<device_factory> device_selector;
+    device_factory::kernel_type kernel(0);
+
+    int expected_result;
+    split_node < tuple<int, int> > split_n(g);
+    function_node< int > function_n(g, unlimited, [&expected_result](const int& result) {
+        ASSERT(expected_result == result, "Validation has failed");
+    });
+    
+    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);
+    
+    // Testing copy constructor
+    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n_copied(streaming_n);
+
+    make_edge(output_port<0>(split_n), input_port<0>(streaming_n_copied));
+    make_edge(output_port<1>(split_n), input_port<1>(streaming_n_copied));
+    make_edge(output_port<0>(streaming_n_copied), function_n);
+
+    std::tuple<int, int> args_tuple = std::make_tuple(10, 20);
+    expected_result = 30;
+    split_n.try_put(args_tuple);
+    g.wait_for_all();
+
+    REMARK("done\n");
+}
+
+void TestMoveConstructor() {
+    REMARK("TestMoveConstructor: ");
+
+    graph g;
+
+    typedef test_streaming_factory< factory_msg<int>, factory_msg<int> > device_factory;
+
+    device_factory factory;
+    device_selector<device_factory> device_selector;
+    device_factory::kernel_type kernel(0);
+
+    int expected_result;
+    split_node < tuple<int, int> > split_n(g);
+    function_node< int > function_n(g, unlimited, [&expected_result](const int& result) {
+        ASSERT(expected_result == result, "Validation has failed");
+    });
+
+    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);
+
+    // Testing move constructor
+    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n_moved(std::move(streaming_n));
+
+    make_edge(output_port<0>(split_n), input_port<0>(streaming_n_moved));
+    make_edge(output_port<1>(split_n), input_port<1>(streaming_n_moved));
+    make_edge(output_port<0>(streaming_n_moved), function_n);
+
+    std::tuple<int, int> args_tuple = std::make_tuple(10, 20);
+    expected_result = 30;
+    split_n.try_put(args_tuple);
+    g.wait_for_all();
+
+    REMARK("done\n");
+}
+
+void TestConstructor() {
+    TestCopyConstructor();
+    TestMoveConstructor();
+}
+
+//--------------------------------------------------------------------------------
+
+int TestMain() {
+    TestArgumentsPassing();
+    TestSetRange();
+    TestChaining();
+    TestConstructor();
+    return Harness::Done;
+}
+#else
+#define HARNESS_SKIP_TEST 1
+#include "harness.h"
+#endif
diff --git a/src/test/test_tagged_msg.cpp b/src/test/test_tagged_msg.cpp
index b951312..882ef1e 100644
--- a/src/test/test_tagged_msg.cpp
+++ b/src/test/test_tagged_msg.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #define _VARIADIC_MAX 10   // Visual Studio 2012
@@ -52,30 +52,31 @@ typedef tbb::flow::tagged_msg<size_t, int, char, double, odd_array_type, odder_a
 
 // test base of tagged_msg
 void TestWrapper() {
-    tbb::flow::interface7::internal::Wrapper<int> wi(42);
-    const tbb::flow::interface7::internal::Wrapper<int> wic(23);
+    using tbb::flow::interface9::internal::Wrapper;
+    Wrapper<int> wi(42);
+    Wrapper<int> wic(23);
 
     REMARK("Value of wic is %d\n", wic.value());
 
     // pointer-type creation
     int point_to_me = 23;
-    tbb::flow::interface7::internal::Wrapper<int_ptr> wip(&point_to_me);
+    Wrapper<int_ptr> wip(&point_to_me);
     ASSERT(*(wip.value()) == 23, "Error in wip value");
 
     odd_array_type ww;
     for(int ii = 0; ii < 15; ++ii) { ww[ii] = char('0' + ii); } ww[14] = 0;
 
-    tbb::flow::interface7::internal::Wrapper<odd_array_type> ci(ww);
+    Wrapper<odd_array_type> ci(ww);
     ASSERT(!strncmp(ci.value(), ww, 14), "odd_array_type ci not properly-constructed" );
 
-    tbb::flow::interface7::internal::Wrapper<odd_array_type> ci2(ci);
+    Wrapper<odd_array_type> ci2(ci);
 
     ASSERT(!strncmp(ci2.value(), ww, 14), "odd_array_type ci2 not properly-constructed" );
 
     d_vector di;
     di.clear();
     di.push_back(2.0);
-    tbb::flow::interface7::internal::Wrapper<d_vector> dvec(di);
+    Wrapper<d_vector> dvec(di);
     ASSERT(dvec.value()[0] == 2.0, "incorrect value in vector");
 
     // test array of non-PODs.
@@ -84,17 +85,17 @@ void TestWrapper() {
     oia[1].clear();
     oia[0].push_back(3);
     oia[1].push_back(2);
-    tbb::flow::interface7::internal::Wrapper<i_vector_array> ia(oia);
+    Wrapper<i_vector_array> ia(oia);
     ASSERT((ia.value()[1])[0] == 2, "integer vector array element[1] misbehaved");
     ASSERT((ia.value()[0])[0] == 3, "integer vector array element[0] misbehaved");
-    tbb::flow::interface7::internal::Wrapper<i_vector_array> iac(ia);
+    Wrapper<i_vector_array> iac(ia);
     ASSERT((iac.value()[1])[0] == 2, "integer vector array element[1] misbehaved");
     ASSERT((iac.value()[0])[0] == 3, "integer vector array element[0] misbehaved");
 
     // counted_array
     counted_array_type cat_orig;
     for(int i = 0; i < 12; ++i) cat_orig[i] = i + 1;
-    tbb::flow::interface7::internal::Wrapper<counted_array_type> cat(cat_orig);
+    Wrapper<counted_array_type> cat(cat_orig);
     for(int j = 0; j < 12; ++j)
         ASSERT(1 + j == cat.value()[j], "Error in cat array");
 
@@ -134,7 +135,7 @@ void RunTests() {
     ASSERT(ref_i == 4, "assign to i did not affect ref_i");
 
     ASSERT( z == 3, "Error retrieving value from i");
-    
+
     //updating and retrieving tags
     ASSERT(j.tag() == 2, "Error retrieving tag for j");
     j.set_tag(10);
@@ -144,7 +145,7 @@ void RunTests() {
     k.set_tag('b');
     ASSERT(k.tag() == 'b', "Error updating char tag");
 
-    tagged_msg_type double_tagged_msg(3, 8.0);  
+    tagged_msg_type double_tagged_msg(3, 8.0);
     ASSERT(is_a<double>(double_tagged_msg), "Wrong type for double_tagged_msg (== double)");
     ASSERT(!is_a<char>(double_tagged_msg), "Wrong type for double_tagged_msg (!= char)");
     ASSERT(!is_a<int>(double_tagged_msg), "Wrong type for double_tagged_msg (!= int)");
@@ -152,7 +153,7 @@ void RunTests() {
     ASSERT(is_a<double>(copytype), "Wrong type for double_tagged_msg (== double)");
     ASSERT(!is_a<char>(copytype), "Wrong type for double_tagged_msg (!= char)");
     ASSERT(!is_a<int>(copytype), "Wrong type for double_tagged_msg (!= int)");
-    tagged_msg_type default_tagged_msg;   
+    tagged_msg_type default_tagged_msg;
     ASSERT(!(is_a<double>(default_tagged_msg)), "wrong type for default ( != double)");
     ASSERT(!(is_a<int>(default_tagged_msg)), "wrong type for default ( != int)");
     ASSERT(!(is_a<bool>(default_tagged_msg)), "wrong type for default ( != bool)");
diff --git a/src/test/test_task.cpp b/src/test/test_task.cpp
index ddb380f..dab5ab1 100644
--- a/src/test/test_task.cpp
+++ b/src/test/test_task.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "harness_task.h"
@@ -45,8 +45,7 @@ public:
         , m_GoAhead(true)
     {}
 
-    /*override*/
-    tbb::task* execute() {
+    tbb::task* execute() __TBB_override {
         // Using large padding array speeds up reaching stealing limit
         const int paddingSize = 16 * 1024;
         volatile char padding[paddingSize];
@@ -92,7 +91,7 @@ class RecursiveTask: public tbb::task {
     }
 public:
     RecursiveTask( int child_count, int depth_ ) : m_ChildCount(child_count), m_Depth(depth_) {}
-    /*override*/ tbb::task* execute() {
+    tbb::task* execute() __TBB_override {
         ++Count;
         if( m_Depth>0 ) {
             tbb::task_list list;
@@ -188,11 +187,11 @@ struct AffinityTask: public tbb::task {
         ASSERT( 0u-expected_affinity_id>0u, "affinity_id not an unsigned integral type?" );
         ASSERT( affinity()==expected_affinity_id, NULL );
     }
-    /*override*/ tbb::task* execute() {
+    tbb::task* execute() __TBB_override {
         ++TotalCount;
         return NULL;
     }
-    /*override*/ void note_affinity( affinity_id id ) {
+    void note_affinity( affinity_id id ) __TBB_override {
         // There is no guarantee in TBB that a task runs on its affinity thread.
         // However, the current implementation does accidentally guarantee it
         // under certain conditions, such as the conditions here.
@@ -241,10 +240,10 @@ struct NoteAffinityTask: public tbb::task {
     ~NoteAffinityTask () {
         ASSERT (noted, "note_affinity has not been called");
     }
-    /*override*/ tbb::task* execute() {
+    tbb::task* execute() __TBB_override {
         return NULL;
     }
-    /*override*/ void note_affinity( affinity_id /*id*/ ) {
+    void note_affinity( affinity_id /*id*/ ) __TBB_override {
         noted = true;
         ASSERT ( &self() == (tbb::task*)this, "Wrong innermost running task" );
     }
@@ -309,7 +308,7 @@ struct UnconstructibleTask: public tbb::empty_task {
 
 template<size_t N>
 struct RootTaskForTestUnconstructibleTask: public tbb::task {
-    tbb::task* execute() {
+    tbb::task* execute() __TBB_override {
         tbb::task* original_parent = parent();
         ASSERT( original_parent!=NULL, NULL );
         int original_ref_count = ref_count();
@@ -348,7 +347,7 @@ class TaskWithMember: public tbb::task {
     T x;
     T y;
     unsigned char count;
-    /*override*/ tbb::task* execute() {
+    tbb::task* execute() __TBB_override {
         x = y;
         if( count>0 ) {
             set_ref_count(2);
@@ -403,7 +402,7 @@ struct RightFibTask: public tbb::task {
     int* y;
     const int n;
     RightFibTask( int* y_, int n_ ) : y(y_), n(n_) {}
-    task* execute() {
+    task* execute() __TBB_override {
         *y = Fib(n-1);
         return 0;
     }
@@ -454,7 +453,7 @@ class DagTask: public tbb::task {
 public:
     DagTask *successor_to_below, *successor_to_right;
     DagTask( int i_, int j_ ) : i(i_), j(j_), sum_from_left(0), sum_from_above(0) {}
-    task* execute() {
+    task* execute() __TBB_override {
         ASSERT( ref_count()==0, NULL );
         number_t sum = i==0 && j==0 ? 1 : sum_from_left+sum_from_above;
         check_sum(sum);
@@ -514,7 +513,7 @@ class RelaxedOwnershipTask: public tbb::task {
               &m_taskToExecute;
     static Harness::SpinBarrier m_barrier;
 
-    tbb::task* execute () {
+    tbb::task* execute () __TBB_override {
         tbb::task &p = *parent();
         tbb::task &r = *new( allocate_root() ) tbb::empty_task;
         r.set_ref_count( 1 );
@@ -596,8 +595,7 @@ public:
         , m_GoAhead(false)
     {}
 
-    /*override*/
-    tbb::task* execute() {
+    tbb::task* execute() __TBB_override {
         m_GoAhead = true;
         if ( m_Depth > 0 ) {
             TaskWithChildToSteal &t = *new( allocate_child() ) TaskWithChildToSteal(m_Depth - 1);
@@ -664,7 +662,7 @@ using tbb::internal::spin_wait_until_eq;
 class LongRunningTask : public tbb::task {
     volatile bool& m_CanProceed;
 
-    tbb::task* execute() {
+    tbb::task* execute() __TBB_override {
         spin_wait_until_eq( m_CanProceed, true );
         return NULL;
     }
@@ -703,7 +701,7 @@ struct MasterBody : NoAssign, Harness::NoAfterlife {
         volatile bool& m_Started;
         volatile bool& m_CanProceed;
 
-        tbb::task* execute() {
+        tbb::task* execute() __TBB_override {
             m_Started = true;
             spin_wait_until_eq( m_CanProceed, true );
             volatile int k = 0;
@@ -719,7 +717,7 @@ struct MasterBody : NoAssign, Harness::NoAfterlife {
     class BinaryRecursiveTask : public tbb::task {
         int m_Depth;
 
-        tbb::task* execute() {
+        tbb::task* execute() __TBB_override {
             if( !m_Depth )
                 return NULL;
             set_ref_count(3);
@@ -729,7 +727,7 @@ struct MasterBody : NoAssign, Harness::NoAfterlife {
             return NULL;
         }
 
-        void note_affinity( affinity_id ) {
+        void note_affinity( affinity_id ) __TBB_override {
             ASSERT( false, "These tasks cannot be stolen" );
         }
     public:
@@ -776,7 +774,7 @@ void TestMastersIsolation ( int p ) {
 }
 
 struct waitable_task : tbb::task {
-    tbb::task* execute() {
+    tbb::task* execute() __TBB_override {
         recycle_as_safe_continuation(); // do not destroy the task after execution
         set_parent(this);               // decrement its own ref_count after completion
         __TBB_Yield();
diff --git a/src/test/test_task_arena.cpp b/src/test/test_task_arena.cpp
index 0c9400b..45714fa 100644
--- a/src/test/test_task_arena.cpp
+++ b/src/test/test_task_arena.cpp
@@ -1,25 +1,28 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
-// undefine __TBB_CPF_BUILD to simulate user's setup
-#undef __TBB_CPF_BUILD
+#if __TBB_CPF_BUILD
+    #define TBB_PREVIEW_TASK_ISOLATION 1
+    // undefine __TBB_CPF_BUILD to simulate user's setup
+    #undef __TBB_CPF_BUILD
+#endif
 
 #define TBB_PREVIEW_LOCAL_OBSERVER 1
 #define __TBB_EXTRA_DEBUG 1
@@ -41,6 +44,14 @@
 
 #include "harness_fp.h"
 
+#if __TBB_TASK_ISOLATION
+// Whitebox stuff for TestIsolatedExecuteNS::ContinuationTest().
+// TODO: Consider better approach instead of the whitebox approach.
+#define private public
+#include "tbb/task.h"
+#undef private
+#endif /* __TBB_TASK_ISOLATION */
+
 #include "tbb/task_arena.h"
 #include "tbb/task_scheduler_observer.h"
 #include "tbb/task_scheduler_init.h"
@@ -57,8 +68,9 @@
     #pragma comment(lib, __TBB_STRING(__TBB_LIB_NAME))
 #endif
 
-//! Test that task_arena::initialize and task_arena::terminate work when doing nothing else.
-/** maxthread is treated as the biggest possible concurrency level. */
+//--------------------------------------------------//
+// Test that task_arena::initialize and task_arena::terminate work when doing nothing else.
+/* maxthread is treated as the biggest possible concurrency level. */
 void InitializeAndTerminate( int maxthread ) {
     __TBB_TRY {
         for( int i=0; i<200; ++i ) {
@@ -67,7 +79,6 @@ void InitializeAndTerminate( int maxthread ) {
                 // Explicit initialization can either keep the original values or change those.
                 // Arena termination can be explicit or implicit (in the destructor).
                 // TODO: extend with concurrency level checks if such a method is added.
-                // TODO: test for different master slot reservation values (perhaps in another function)
                 default: {
                     tbb::task_arena arena( std::rand() % maxthread + 1 );
                     ASSERT(!arena.is_active(), "arena should not be active until initialized");
@@ -77,7 +88,7 @@ void InitializeAndTerminate( int maxthread ) {
                     ASSERT(!arena.is_active(), "arena should not be active; it was terminated");
                     break;
                 }
-                case 0: {   
+                case 0: {
                     tbb::task_arena arena( 1 );
                     ASSERT(!arena.is_active(), "arena should not be active until initialized");
                     arena.initialize( std::rand() % maxthread + 1 ); // change the parameters
@@ -109,55 +120,54 @@ void InitializeAndTerminate( int maxthread ) {
     }
 }
 
+//--------------------------------------------------//
+// Definitions used in more than one test
 typedef tbb::blocked_range<int> Range;
 
-Harness::SpinBarrier our_barrier;
+// slot_id value: -1 is reserved by current_slot(), -2 is set in on_scheduler_exit() below
+static tbb::enumerable_thread_specific<int> local_id, old_id, slot_id(-3);
 
-static tbb::enumerable_thread_specific<int> local_id, old_id, slot_id(-1);
 void ResetTLS() {
     local_id.clear();
     old_id.clear();
     slot_id.clear();
 }
 
-class ConcurrencyTrackingBody {
-public:
-    void operator() ( const Range& ) const {
-        ASSERT(slot_id.local() == tbb::task_arena::current_thread_index(), NULL);
-        for ( volatile int i = 0; i < 50000; ++i )
-            ;
-    }
-};
-
 class ArenaObserver : public tbb::task_scheduler_observer {
-    int myId;
-    /*override*/
-    void on_scheduler_entry( bool is_worker ) {
+    int myId;               // unique observer/arena id within a test
+    int myMaxConcurrency;   // concurrency of the associated arena
+    int myNumReservedSlots; // reserved slots in the associated arena
+    void on_scheduler_entry( bool is_worker ) __TBB_override {
+        int current_index = tbb::this_task_arena::current_thread_index();
         REMARK("a %s #%p is entering arena %d from %d on slot %d\n", is_worker?"worker":"master",
-                &local_id.local(), myId, local_id.local(),
-                tbb::task_arena::current_thread_index());
-        ASSERT(!old_id.local(), "double-call to on_scheduler_entry");
+                &local_id.local(), myId, local_id.local(), current_index );
+        ASSERT(current_index<(myMaxConcurrency>1?myMaxConcurrency:2), NULL);
+        if(is_worker) ASSERT(current_index>=myNumReservedSlots, NULL);
+
+        ASSERT(!old_id.local(), "double call to on_scheduler_entry");
         old_id.local() = local_id.local();
-        ASSERT(old_id.local() != myId, "double-entry to the same arena");
+        ASSERT(old_id.local() != myId, "double entry to the same arena");
         local_id.local() = myId;
-        slot_id.local() = tbb::task_arena::current_thread_index();
-        if(is_worker) ASSERT(tbb::task_arena::current_thread_index()>0, NULL);
-        else ASSERT(tbb::task_arena::current_thread_index()==0, NULL);
+        slot_id.local() = current_index;
     }
-    /*override*/
-    void on_scheduler_exit( bool is_worker ) {
+    void on_scheduler_exit( bool is_worker ) __TBB_override {
         REMARK("a %s #%p is leaving arena %d to %d\n", is_worker?"worker":"master",
                 &local_id.local(), myId, old_id.local());
         ASSERT(local_id.local() == myId, "nesting of arenas is broken");
+        ASSERT(slot_id.local() == tbb::this_task_arena::current_thread_index(), NULL);
+         //!deprecated, remove when tbb::task_arena::current_thread_index is removed.
         ASSERT(slot_id.local() == tbb::task_arena::current_thread_index(), NULL);
-        slot_id.local() = -1;
+        slot_id.local() = -2;
         local_id.local() = old_id.local();
         old_id.local() = 0;
     }
 public:
-    ArenaObserver(tbb::task_arena &a, int id) : tbb::task_scheduler_observer(a) {
-        ASSERT(id, NULL);
-        myId = id;
+    ArenaObserver(tbb::task_arena &a, int maxConcurrency, int numReservedSlots, int id)
+        : tbb::task_scheduler_observer(a)
+        , myId(id)
+        , myMaxConcurrency(maxConcurrency)
+        , myNumReservedSlots(numReservedSlots) {
+        ASSERT(myId, NULL);
         observe(true);
     }
     ~ArenaObserver () {
@@ -165,6 +175,16 @@ public:
     }
 };
 
+struct IndexTrackingBody { // Must be used together with ArenaObserver
+    void operator() ( const Range& ) const {
+        ASSERT(slot_id.local() == tbb::this_task_arena::current_thread_index(), NULL);
+        //!deprecated, remove when tbb::task_arena::current_thread_index is removed.
+        ASSERT(slot_id.local() == tbb::task_arena::current_thread_index(), NULL);
+        for ( volatile int i = 0; i < 50000; ++i )
+            ;
+    }
+};
+
 struct AsynchronousWork : NoAssign {
     Harness::SpinBarrier &my_barrier;
     bool my_is_blocking;
@@ -172,19 +192,21 @@ struct AsynchronousWork : NoAssign {
     : my_barrier(a_barrier), my_is_blocking(blocking) {}
     void operator()() const {
         ASSERT(local_id.local() != 0, "not in explicit arena");
-        tbb::parallel_for(Range(0,500), ConcurrencyTrackingBody(), tbb::simple_partitioner(), *tbb::task::self().group());
+        tbb::parallel_for(Range(0,500), IndexTrackingBody(), tbb::simple_partitioner(), *tbb::task::self().group());
         if(my_is_blocking) my_barrier.timed_wait(10); // must be asynchronous to master thread
         else my_barrier.signal_nowait();
     }
 };
 
-void TestConcurrentArenas(int p) {
-    //Harness::ConcurrencyTracker::Reset();
+//--------------------------------------------------//
+// Test that task_arenas might be created and used from multiple application threads.
+// Also tests arena observers. The parameter p is the index of an app thread running this test.
+void TestConcurrentArenasFunc(int idx) {
     tbb::task_arena a1;
     a1.initialize(1,0);
-    ArenaObserver o1(a1, p*2+1);
+    ArenaObserver o1(a1, 1, 0, idx*2+1); // the last argument is a "unique" observer/arena id for the test
     tbb::task_arena a2(2,1);
-    ArenaObserver o2(a2, p*2+2);
+    ArenaObserver o2(a2, 2, 1, idx*2+2);
     Harness::SpinBarrier barrier(2);
     AsynchronousWork work(barrier);
     a1.enqueue(work); // put async work
@@ -195,11 +217,18 @@ void TestConcurrentArenas(int p) {
     a2.debug_wait_until_empty();
 }
 
-class MultipleMastersBody : NoAssign {
+void TestConcurrentArenas(int p) {
+    ResetTLS();
+    NativeParallelFor( p, &TestConcurrentArenasFunc );
+}
+
+//--------------------------------------------------//
+// Test multiple application threads working with a single arena at the same time.
+class MultipleMastersPart1 : NoAssign {
     tbb::task_arena &my_a;
     Harness::SpinBarrier &my_b1, &my_b2;
 public:
-    MultipleMastersBody( tbb::task_arena &a, Harness::SpinBarrier &b1, Harness::SpinBarrier &b2)
+    MultipleMastersPart1( tbb::task_arena &a, Harness::SpinBarrier &b1, Harness::SpinBarrier &b2)
         : my_a(a), my_b1(b1), my_b2(b2) {}
     void operator()(int) const {
         my_a.execute(AsynchronousWork(my_b2, /*blocking=*/false));
@@ -306,13 +335,13 @@ public:
         check();
         tbb::task_arena nested(1,1);
         nested.execute(NestedChecker(*this)); // change arena
-        tbb::parallel_for(tbb::blocked_range<int>(0,1),*this); // change group context only
+        tbb::parallel_for(Range(0,1),*this); // change group context only
         my_b.timed_wait(10);
         my_a.execute(check);
         check();
     }
     // parallel_for's functor
-    void operator()(const tbb::blocked_range<int> &) const {
+    void operator()(const Range &) const {
         NestedChecker(*this)();
         my_a.execute(Checker(my_ag)); // restore arena context
     }
@@ -321,17 +350,19 @@ public:
 void TestMultipleMasters(int p) {
     {
         REMARK("multiple masters, part 1\n");
+        ResetTLS();
         tbb::task_arena a(1,0);
         a.initialize();
-        ArenaObserver o(a, 1);
+        ArenaObserver o(a, 1, 0, 1);
         Harness::SpinBarrier barrier1(p), barrier2(2*p+1); // each of p threads will submit two tasks signaling the barrier
-        NativeParallelFor( p, MultipleMastersBody(a, barrier1, barrier2) );
+        NativeParallelFor( p, MultipleMastersPart1(a, barrier1, barrier2) );
         barrier2.timed_wait(10);
         a.debug_wait_until_empty();
     } {
         REMARK("multiple masters, part 2\n");
+        ResetTLS();
         tbb::task_arena a(2,1);
-        ArenaObserver o(a, 2);
+        ArenaObserver o(a, 2, 1, 2);
         Harness::SpinBarrier barrier(p+2);
         a.enqueue(AsynchronousWork(barrier, /*blocking=*/true)); // occupy the worker, a regression test for bug 1981
         NativeParallelFor( p, MultipleMastersPart2(a, barrier) );
@@ -348,8 +379,9 @@ void TestMultipleMasters(int p) {
     } {
         int c = p%3? (p%2? p : 2) : 3;
         REMARK("multiple masters, part 4: contexts, arena(%d)\n", c);
+        ResetTLS();
         tbb::task_arena a(c, 1);
-        ArenaObserver o(a, c);
+        ArenaObserver o(a, c, 1, c);
         Harness::SpinBarrier barrier(c);
         MultipleMastersPart4 test(a, barrier);
         NativeParallelFor(p, test);
@@ -357,6 +389,8 @@ void TestMultipleMasters(int p) {
     }
 }
 
+//--------------------------------------------------//
+// TODO: explain what TestArenaEntryConsistency does
 #include <sstream>
 #if TBB_USE_EXCEPTIONS
 #include <stdexcept>
@@ -380,12 +414,12 @@ struct TestArenaEntryBody : FPModeContext {
     void operator()() { // inside task_arena::execute()
         // synchronize with other stages
         int stage = my_stage++;
-        int slot = tbb::task_arena::current_thread_index();
+        int slot = tbb::this_task_arena::current_thread_index();
         ASSERT(slot >= 0 && slot <= 1, "master or the only worker");
         // wait until the third stage is delegated and then starts on slot 0
         while(my_stage < 2+slot) __TBB_Yield();
         // deduct its entry type and put it into id, it helps to find source of a problem
-        my_id << (stage < 3 ? (tbb::task_arena::current_thread_index()?
+        my_id << (stage < 3 ? (tbb::this_task_arena::current_thread_index()?
                               "delegated_to_worker" : stage < 2? "direct" : "delegated_to_master")
                             : stage == 3? "nested_same_ctx" : "nested_alien_ctx");
         REMARK("running %s\n", my_id.str().c_str());
@@ -470,17 +504,660 @@ void TestArenaEntryConsistency() {
         body.test(i);
 }
 
+//--------------------------------------------------
+// Test that the requested degree of concurrency for task_arena is achieved in various conditions
+class TestArenaConcurrencyBody : NoAssign {
+    tbb::task_arena &my_a;
+    int my_max_concurrency;
+    int my_reserved_slots;
+    Harness::SpinBarrier *my_barrier;
+    Harness::SpinBarrier *my_worker_barrier;
+public:
+    TestArenaConcurrencyBody( tbb::task_arena &a, int max_concurrency, int reserved_slots, Harness::SpinBarrier *b = NULL, Harness::SpinBarrier *wb = NULL )
+    : my_a(a), my_max_concurrency(max_concurrency), my_reserved_slots(reserved_slots), my_barrier(b), my_worker_barrier(wb) {}
+    // NativeParallelFor's functor
+    void operator()( int ) const {
+        ASSERT( local_id.local() == 0, "TLS was not cleaned?" );
+        local_id.local() = 1;
+        my_a.execute( *this );
+    }
+    // Arena's functor
+    void operator()() const {
+        ASSERT( tbb::task_arena::current_thread_index() == tbb::this_task_arena::current_thread_index(), NULL );
+        int idx = tbb::this_task_arena::current_thread_index();
+        ASSERT( idx < (my_max_concurrency > 1 ? my_max_concurrency : 2), NULL );
+        ASSERT( my_a.max_concurrency() == tbb::this_task_arena::max_concurrency(), NULL );
+        int max_arena_concurrency = tbb::this_task_arena::max_concurrency();
+        ASSERT( max_arena_concurrency == my_max_concurrency, NULL );
+        if ( my_worker_barrier ) {
+            if ( local_id.local() == 1 ) {
+                // Master thread in a reserved slot
+                ASSERT( idx < my_reserved_slots, "Masters are supposed to use only reserved slots in this test" );
+            } else {
+                // Worker thread
+                ASSERT( idx >= my_reserved_slots, NULL );
+                my_worker_barrier->timed_wait( 10 );
+            }
+        } else if ( my_barrier )
+            ASSERT( local_id.local() == 1, "Workers are not supposed to enter the arena in this test" );
+        if ( my_barrier ) my_barrier->timed_wait( 10 );
+        else Harness::Sleep( 10 );
+    }
+};
+
+void TestArenaConcurrency( int p ) {
+    for ( int reserved = 0; reserved <= p; ++reserved ) {
+        REMARK("TestArenaConcurrency: %d slots, %d reserved\n", p, reserved);
+        tbb::task_arena a( p, reserved );
+        { // Check concurrency with worker & reserved master threads.
+            ResetTLS();
+            Harness::SpinBarrier b( p );
+            Harness::SpinBarrier wb( p-reserved );
+            TestArenaConcurrencyBody test( a, p, reserved, &b, &wb );
+            for ( int i = reserved; i < p; ++i )
+                a.enqueue( test );
+            if ( reserved==1 )
+                test( 0 ); // calls execute()
+            else
+                NativeParallelFor( reserved, test );
+            a.debug_wait_until_empty();
+        } { // Check if multiple masters alone can achieve maximum concurrency.
+            ResetTLS();
+            Harness::SpinBarrier b( p );
+            NativeParallelFor( p, TestArenaConcurrencyBody( a, p, reserved, &b ) );
+            a.debug_wait_until_empty();
+        } { // Check oversubscription by masters.
+            ResetTLS();
+            NativeParallelFor( 2*p, TestArenaConcurrencyBody( a, p, reserved ) );
+            a.debug_wait_until_empty();
+        }
+    }
+}
+
+//--------------------------------------------------//
+// Test creation/initialization of a task_arena that references an existing arena (aka attach).
+// This part of the test uses the knowledge of task_arena internals
+
+typedef tbb::interface7::internal::task_arena_base task_arena_internals;
+
+struct TaskArenaValidator : public task_arena_internals {
+    int my_slot_at_construction;
+    TaskArenaValidator( const task_arena_internals& other )
+    : task_arena_internals(other) /*copies the internal state of other*/ {
+        my_slot_at_construction = tbb::this_task_arena::current_thread_index();
+    }
+    // Inspect the internal state
+    int concurrency() { return my_max_concurrency; }
+    int reserved_for_masters() { return (int)my_master_slots; }
+
+    // This method should be called in task_arena::execute() for a captured arena
+    // by the same thread that created the validator.
+    void operator()() {
+        ASSERT( tbb::this_task_arena::current_thread_index()==my_slot_at_construction,
+                "Current thread index has changed since the validator construction" );
+        //!deprecated
+        ASSERT( tbb::task_arena::current_thread_index()==my_slot_at_construction,
+                "Current thread index has changed since the validator construction" );
+    }
+};
+
+void ValidateAttachedArena( tbb::task_arena& arena, bool expect_activated,
+                            int expect_concurrency, int expect_masters ) {
+    ASSERT( arena.is_active()==expect_activated, "Unexpected activation state" );
+    if( arena.is_active() ) {
+        TaskArenaValidator validator( arena );
+        ASSERT( validator.concurrency()==expect_concurrency, "Unexpected arena size" );
+        ASSERT( validator.reserved_for_masters()==expect_masters, "Unexpected # of reserved slots" );
+        if ( tbb::this_task_arena::current_thread_index() != tbb::task_arena::not_initialized ) {
+            ASSERT( tbb::task_arena::current_thread_index() >= 0 && 
+                tbb::this_task_arena::current_thread_index() >= 0, NULL);
+            // for threads already in arena, check that the thread index remains the same
+            arena.execute( validator );
+        } else { // not_initialized
+            // Test the deprecated method
+            ASSERT( tbb::task_arena::current_thread_index()==-1, NULL);
+        }
+        
+        // Ideally, there should be a check for having the same internal arena object,
+        // but that object is not easily accessible for implicit arenas.
+    }
+}
+
+struct TestAttachBody : NoAssign {
+    mutable int my_idx; // safe to modify and use within the NativeParallelFor functor
+    const int maxthread;
+    TestAttachBody( int max_thr ) : maxthread(max_thr) {}
+
+    // The functor body for NativeParallelFor
+    void operator()( int idx ) const {
+        my_idx = idx;
+        int default_threads = tbb::task_scheduler_init::default_num_threads();
+
+        tbb::task_arena arena = tbb::task_arena( tbb::task_arena::attach() );
+        ValidateAttachedArena( arena, false, -1, -1 ); // Nothing yet to attach to
+
+        { // attach to an arena created via task_scheduler_init
+            tbb::task_scheduler_init init( idx+1 );
+
+            tbb::task_arena arena2 = tbb::task_arena( tbb::task_arena::attach() );
+            ValidateAttachedArena( arena2, true, idx+1, 1 );
+
+            arena.initialize( tbb::task_arena::attach() );
+        }
+        ValidateAttachedArena( arena, true, idx+1, 1 );
+
+        arena.terminate();
+        ValidateAttachedArena( arena, false, -1, -1 );
+
+        // Check default behavior when attach cannot succeed
+        switch (idx%2) {
+        case 0:
+            { // construct as attached, then initialize
+                tbb::task_arena arena2 = tbb::task_arena( tbb::task_arena::attach() );
+                ValidateAttachedArena( arena2, false, -1, -1 );
+                arena2.initialize(); // must be initialized with default parameters
+                ValidateAttachedArena( arena2, true, default_threads, 1 );
+            }
+            break;
+        case 1:
+            { // default-construct, then initialize as attached
+                tbb::task_arena arena2;
+                ValidateAttachedArena( arena2, false, -1, -1 );
+                arena2.initialize( tbb::task_arena::attach() ); // must use default parameters
+                ValidateAttachedArena( arena2, true, default_threads, 1 );
+            }
+            break;
+        } // switch
+
+        // attach to an auto-initialized arena
+        tbb::empty_task& tsk = *new (tbb::task::allocate_root()) tbb::empty_task;
+        tbb::task::spawn_root_and_wait(tsk);
+        tbb::task_arena arena2 = tbb::task_arena( tbb::task_arena::attach() );
+        ValidateAttachedArena( arena2, true, default_threads, 1 );
+
+        // attach to another task_arena
+        arena.initialize( maxthread, min(maxthread,idx) );
+        arena.execute( *this );
+    }
+
+    // The functor body for task_arena::execute above
+    void operator()() const {
+        tbb::task_arena arena2 = tbb::task_arena( tbb::task_arena::attach() );
+        ValidateAttachedArena( arena2, true, maxthread, min(maxthread,my_idx) );
+    }
+
+    // The functor body for tbb::parallel_for
+    void operator()( const Range& r ) const {
+        for( int i = r.begin(); i<r.end(); ++i ) {
+            tbb::task_arena arena2 = tbb::task_arena( tbb::task_arena::attach() );
+            ValidateAttachedArena( arena2, true, maxthread+1, 1 ); // +1 to match initialization in TestMain
+        }
+    }
+};
+
+void TestAttach( int maxthread ) {
+    REMARK( "Testing attached task_arenas\n" );
+    // Externally concurrent, but no concurrency within a thread
+    NativeParallelFor( max(maxthread,4), TestAttachBody( maxthread ) );
+    // Concurrent within the current arena; may also serve as a stress test
+    tbb::parallel_for( Range(0,10000*maxthread), TestAttachBody( maxthread ) );
+}
+
+//--------------------------------------------------//
+// Test that task_arena::enqueue does not tolerate a non-const functor.
+// TODO: can it be reworked as SFINAE-based compile-time check?
+struct test_functor_t {
+    void operator()() { ASSERT( false, "Non-const operator called" ); }
+    void operator()() const { /* library requires this overload only */ }
+};
+
+void TestConstantFunctorRequirement() {
+    tbb::task_arena a;
+    test_functor_t tf;
+    a.enqueue( tf );
+#if __TBB_TASK_PRIORITY
+    a.enqueue( tf, tbb::priority_normal );
+#endif
+}
+//--------------------------------------------------//
+#if __TBB_TASK_ISOLATION
+#include "tbb/parallel_reduce.h"
+// Test this_task_arena::isolate
+namespace TestIsolatedExecuteNS {
+    //--------------------------------------------------//
+    template <typename NestedPartitioner>
+    class NestedParFor : NoAssign {
+    public:
+        NestedParFor() {}
+        void operator()() const {
+            NestedPartitioner p;
+            tbb::parallel_for( 0, 10, Harness::DummyBody( 10 ), p );
+        }
+    };
+
+    template <typename NestedPartitioner>
+    class ParForBody : NoAssign {
+        bool myOuterIsolation;
+        tbb::enumerable_thread_specific<int> &myEts;
+        tbb::atomic<bool> &myIsStolen;
+    public:
+        ParForBody( bool outer_isolation, tbb::enumerable_thread_specific<int> &ets, tbb::atomic<bool> &is_stolen )
+            : myOuterIsolation( outer_isolation ), myEts( ets ), myIsStolen( is_stolen ) {}
+        void operator()( int ) const {
+            int &e = myEts.local();
+            if ( e++ > 0 ) myIsStolen = true;
+            if ( myOuterIsolation )
+                NestedParFor<NestedPartitioner>()();
+            else
+                tbb::this_task_arena::isolate( NestedParFor<NestedPartitioner>() );
+            --e;
+        }
+    };
+
+    template <typename OuterPartitioner, typename NestedPartitioner>
+    class OuterParFor : NoAssign {
+        bool myOuterIsolation;
+        tbb::atomic<bool> &myIsStolen;
+    public:
+        OuterParFor( bool outer_isolation, tbb::atomic<bool> &is_stolen ) : myOuterIsolation( outer_isolation ), myIsStolen( is_stolen ) {}
+        void operator()() const {
+            tbb::enumerable_thread_specific<int> ets( 0 );
+            OuterPartitioner p;
+            tbb::parallel_for( 0, 1000, ParForBody<NestedPartitioner>( myOuterIsolation, ets, myIsStolen ), p );
+        }
+    };
+
+    template <typename OuterPartitioner, typename NestedPartitioner>
+    void TwoLoopsTest( bool outer_isolation ) {
+        tbb::atomic<bool> is_stolen;
+        is_stolen = false;
+        const int max_repeats = 100;
+        if ( outer_isolation ) {
+            for ( int i = 0; i <= max_repeats; ++i ) {
+                tbb::this_task_arena::isolate( OuterParFor<OuterPartitioner, NestedPartitioner>( outer_isolation, is_stolen ) );
+                if ( is_stolen ) break;
+            }
+            ASSERT_WARNING( is_stolen, "isolate() should not block stealing on nested levels without isolation" );
+        } else {
+            for ( int i = 0; i <= max_repeats; ++i ) {
+                OuterParFor<OuterPartitioner, NestedPartitioner>( outer_isolation, is_stolen )();
+            }
+            ASSERT( !is_stolen, "isolate() on nested levels should prevent stealing from outer leves" );
+        }
+    }
+
+    void TwoLoopsTest( bool outer_isolation ) {
+        TwoLoopsTest<tbb::simple_partitioner, tbb::simple_partitioner>( outer_isolation );
+        TwoLoopsTest<tbb::simple_partitioner, tbb::affinity_partitioner>( outer_isolation );
+        TwoLoopsTest<tbb::affinity_partitioner, tbb::simple_partitioner>( outer_isolation );
+        TwoLoopsTest<tbb::affinity_partitioner, tbb::affinity_partitioner>( outer_isolation );
+    }
+
+    void TwoLoopsTest() {
+        TwoLoopsTest( true );
+        TwoLoopsTest( false );
+    }
+    //--------------------------------------------------//
+    class HeavyMixTestBody {
+        tbb::enumerable_thread_specific<Harness::FastRandom>& myRandom;
+        tbb::enumerable_thread_specific<int>& myIsolatedLevel;
+        int myNestedLevel;
+        bool myHighPriority;
+
+        template <typename Partitioner>
+        class IsolatedBody {
+            const HeavyMixTestBody &myHeavyMixTestBody;
+            Partitioner &myPartitioner;
+        public:
+            IsolatedBody( const HeavyMixTestBody &body, Partitioner &partitioner )
+                : myHeavyMixTestBody( body ), myPartitioner( partitioner ) {}
+            void operator()() const {
+                tbb::parallel_for( 0, 2,
+                    HeavyMixTestBody( myHeavyMixTestBody.myRandom, myHeavyMixTestBody.myIsolatedLevel,
+                        myHeavyMixTestBody.myNestedLevel + 1, myHeavyMixTestBody.myHighPriority ),
+                    myPartitioner );
+            }
+        };
+
+        template <typename Partitioner>
+        void RunNextLevel( Harness::FastRandom& rnd, int &isolated_level ) const {
+            Partitioner p;
+            switch ( rnd.get() % 3 ) {
+                case 0: {
+                    // No features
+                    tbb::task_group_context ctx;
+                    if ( myHighPriority )
+                        ctx.set_priority( tbb::priority_high );
+                    tbb::parallel_for( 0, 2, HeavyMixTestBody( myRandom, myIsolatedLevel, myNestedLevel + 1, myHighPriority ), p, ctx );
+                    break;
+                }
+                case 1: {
+                    // High priority
+                    tbb::task_group_context ctx;
+                    ctx.set_priority( tbb::priority_high );
+                    tbb::parallel_for( 0, 2, HeavyMixTestBody( myRandom, myIsolatedLevel, myNestedLevel + 1, true ), p, ctx );
+                    break;
+                }
+                case 2: {
+                    // Isolation
+                    int previous_isolation = isolated_level;
+                    isolated_level = myNestedLevel;
+                    tbb::this_task_arena::isolate( IsolatedBody<Partitioner>( *this, p ) );
+                    isolated_level = previous_isolation;
+                    break;
+                }
+            }
+        }
+    public:
+        HeavyMixTestBody( tbb::enumerable_thread_specific<Harness::FastRandom>& random, 
+            tbb::enumerable_thread_specific<int>& isolated_level, int nested_level, bool high_priority )
+            : myRandom( random ), myIsolatedLevel( isolated_level )
+            , myNestedLevel( nested_level ), myHighPriority( high_priority ) {}
+        void operator()( int ) const {
+            int &isolated_level = myIsolatedLevel.local();
+            ASSERT( myNestedLevel > isolated_level, "The outer-level task should not be stolen on isolated level" );
+            if ( myNestedLevel == 20 )
+                return;
+            Harness::FastRandom &rnd = myRandom.local();
+            if ( rnd.get() % 2 == 1 ) {
+                RunNextLevel<tbb::auto_partitioner>( rnd, isolated_level );
+            } else {
+                RunNextLevel<tbb::affinity_partitioner>( rnd, isolated_level );
+            }
+        }
+    };
+
+    struct RandomInitializer {
+        Harness::FastRandom operator()() {
+            return Harness::FastRandom( tbb::this_task_arena::current_thread_index() );
+        }
+    };
+
+    void HeavyMixTest() {
+        tbb::task_scheduler_init init( tbb::task_scheduler_init::default_num_threads() < 3 ? 3 : tbb::task_scheduler_init::automatic );
+        RandomInitializer init_random;
+        tbb::enumerable_thread_specific<Harness::FastRandom> random( init_random );
+        tbb::enumerable_thread_specific<int> isolated_level( 0 );
+        for ( int i = 0; i < 5; ++i ) {
+            HeavyMixTestBody b( random, isolated_level, 1, false );
+            b( 0 );
+            REMARK( "\rHeavyMixTest: %d of 10", i+1 );
+        }
+        REMARK( "\n" );
+    }
+    //--------------------------------------------------//
+    struct ContinuationTestReduceBody : NoAssign {
+        tbb::internal::isolation_tag myIsolation;
+        ContinuationTestReduceBody( tbb::internal::isolation_tag isolation ) : myIsolation( isolation ) {}
+        ContinuationTestReduceBody( ContinuationTestReduceBody& b, tbb::split ) : myIsolation( b.myIsolation ) {}
+        void operator()( tbb::blocked_range<int> ) {}
+        void join( ContinuationTestReduceBody& ) {
+            tbb::internal::isolation_tag isolation = tbb::task::self().prefix().isolation;
+            ASSERT( isolation == myIsolation, "The continuations should preserve children's isolation" );
+        }
+    };
+    struct ContinuationTestIsolated {
+        void operator()() const {
+            ContinuationTestReduceBody b( tbb::task::self().prefix().isolation );
+            tbb::parallel_deterministic_reduce( tbb::blocked_range<int>( 0, 100 ), b );
+        }
+    };
+    struct ContinuationTestParForBody : NoAssign {
+        tbb::enumerable_thread_specific<int> &myEts;
+    public:
+        ContinuationTestParForBody( tbb::enumerable_thread_specific<int> &ets ) : myEts( ets ){}
+        void operator()( int ) const {
+            int &e = myEts.local();
+            ++e;
+            ASSERT( e==1, "The task is stolen on isolated level" );
+            tbb::this_task_arena::isolate( ContinuationTestIsolated() );
+            --e;
+        }
+    };
+    void ContinuationTest() {
+        for ( int i = 0; i < 5; ++i ) {
+            tbb::enumerable_thread_specific<int> myEts;
+            tbb::parallel_for( 0, 100, ContinuationTestParForBody( myEts ), tbb::simple_partitioner() );
+        }
+    }
+    //--------------------------------------------------//
+#if TBB_USE_EXCEPTIONS
+    struct MyException {};
+    struct IsolatedBodyThrowsException {
+        void operator()() const {
+            __TBB_THROW( MyException() );
+        }
+    };
+    struct ExceptionTestBody : NoAssign {
+        tbb::enumerable_thread_specific<int>& myEts;
+        tbb::atomic<bool>& myIsStolen;
+        ExceptionTestBody( tbb::enumerable_thread_specific<int>& ets, tbb::atomic<bool>& is_stolen )
+            : myEts( ets ), myIsStolen( is_stolen ) {}
+        void operator()( int i ) const {
+            try {
+                tbb::this_task_arena::isolate( IsolatedBodyThrowsException() );
+                ASSERT( false, "The exception has been lost" );
+            }
+            catch ( MyException ) {}
+            catch ( ... ) {
+                ASSERT( false, "Unexpected exception" );
+            }
+            // Check that nested algorithms can steal outer-level tasks
+            int &e = myEts.local();
+            if ( e++ > 0 ) myIsStolen = true;
+            // work imbalance increases chances for stealing
+            tbb::parallel_for( 0, 10+i, Harness::DummyBody( 10 ) );
+            --e;
+        }
+    };
+
+#endif /* TBB_USE_EXCEPTIONS */
+    void ExceptionTest() {
+#if TBB_USE_EXCEPTIONS
+        tbb::enumerable_thread_specific<int> ets;
+        tbb::atomic<bool> is_stolen;
+        is_stolen = false;
+        for ( int i = 0; i<10; ++i ) {
+            tbb::parallel_for( 0, 1000, ExceptionTestBody( ets, is_stolen ) );
+            if ( is_stolen ) break;
+        }
+        ASSERT( is_stolen, "isolate should not affect non-isolated work" );
+#endif /* TBB_USE_EXCEPTIONS */
+    }
+}
+
+void TestIsolatedExecute() {
+    // At least 3 threads (owner + 2 thieves) are required to reproduce a situation when the owner steals outer
+    // level task on a nested level. If we have only one thief then it will execute outer level tasks first and
+    // the owner will not have a possibility to steal outer level tasks.
+    int num_threads = min( tbb::task_scheduler_init::default_num_threads(), 3 );
+    {
+        // Too many threads require too many work to reproduce the stealing from outer level.
+        tbb::task_scheduler_init init( max(num_threads, 7) );
+        TestIsolatedExecuteNS::TwoLoopsTest();
+        TestIsolatedExecuteNS::HeavyMixTest();
+        TestIsolatedExecuteNS::ContinuationTest();
+        TestIsolatedExecuteNS::ExceptionTest();
+    }
+    tbb::task_scheduler_init init(num_threads);
+    TestIsolatedExecuteNS::HeavyMixTest();
+    TestIsolatedExecuteNS::ContinuationTest();
+}
+#endif /* __TBB_TASK_ISOLATION */
+//--------------------------------------------------//
+//--------------------------------------------------//
+
+class TestDelegatedSpawnWaitBody : NoAssign {
+    tbb::task_arena &my_a;
+    Harness::SpinBarrier &my_b1, &my_b2;
+
+    struct Spawner : NoAssign {
+        tbb::task* const a_task;
+        Spawner(tbb::task* const t) : a_task(t) {}
+        void operator()() const {
+            tbb::task::spawn( *new(a_task->allocate_child()) tbb::empty_task );
+        }
+    };
+
+    struct Waiter : NoAssign {
+        tbb::task* const a_task;
+        Waiter(tbb::task* const t) : a_task(t) {}
+        void operator()() const {
+            a_task->wait_for_all();
+        }
+    };
+
+public:
+    TestDelegatedSpawnWaitBody( tbb::task_arena &a, Harness::SpinBarrier &b1, Harness::SpinBarrier &b2)
+        : my_a(a), my_b1(b1), my_b2(b2) {}
+    // NativeParallelFor's functor
+    void operator()(int idx) const {
+        if ( idx==0 ) { // thread 0 works in the arena, thread 1 waits for it (to prevent test hang)
+            for( int i=0; i<2; ++i ) my_a.enqueue(*this); // tasks to sync with workers
+            tbb::empty_task* root_task = new(tbb::task::allocate_root()) tbb::empty_task;
+            root_task->set_ref_count(100001);
+            my_b1.timed_wait(10); // sync with the workers
+            for( int i=0; i<100000; ++i) {
+                my_a.execute(Spawner(root_task));
+            }
+            my_a.execute(Waiter(root_task));
+            tbb::task::destroy(*root_task);
+        }
+        my_b2.timed_wait(10); // sync both threads
+    }
+    // Arena's functor
+    void operator()() const {
+        my_b1.timed_wait(10); // sync with the arena master
+    }
+};
+
+void TestDelegatedSpawnWait() {
+    // Regression test for a bug with missed wakeup notification from a delegated task
+    REMARK( "Testing delegated spawn & wait\n" );
+    tbb::task_arena a(2,0);
+    a.initialize();
+    Harness::SpinBarrier barrier1(3), barrier2(2);
+    NativeParallelFor( 2, TestDelegatedSpawnWaitBody(a, barrier1, barrier2) );
+    a.debug_wait_until_empty();
+}
+
+class TestMultipleWaitsArenaWait {
+public:
+    TestMultipleWaitsArenaWait( int idx, int bunch_size, int num_tasks, tbb::task** waiters, tbb::atomic<int>& processed )
+        : my_idx( idx ), my_bunch_size( bunch_size ), my_num_tasks(num_tasks), my_waiters( waiters ), my_processed( processed ) {}
+    void operator()() const {
+        ++my_processed;
+        // Wait for all tasks
+        if ( my_idx < my_num_tasks )
+            my_waiters[my_idx]->wait_for_all();
+        // Signal waiting tasks
+        if ( my_idx >= my_bunch_size )
+            my_waiters[my_idx-my_bunch_size]->decrement_ref_count();
+    }
+private:
+    int my_idx;
+    int my_bunch_size;
+    int my_num_tasks;
+    tbb::task** my_waiters;
+    tbb::atomic<int>& my_processed;
+};
+
+class TestMultipleWaitsThreadBody {
+public:
+    TestMultipleWaitsThreadBody( int bunch_size, int num_tasks, tbb::task_arena& a, tbb::task** waiters, tbb::atomic<int>& processed )
+        : my_bunch_size( bunch_size ), my_num_tasks( num_tasks ), my_arena( a ), my_waiters( waiters ), my_processed( processed ) {}
+    void operator()( int idx ) const {
+        my_arena.execute( TestMultipleWaitsArenaWait( idx, my_bunch_size, my_num_tasks, my_waiters, my_processed ) );
+        --my_processed;
+    }
+private:
+    int my_bunch_size;
+    int my_num_tasks;
+    tbb::task_arena& my_arena;
+    tbb::task** my_waiters;
+    tbb::atomic<int>& my_processed;
+};
+
+#include "tbb/tbb_thread.h"
+
+void TestMultipleWaits( int num_threads, int num_bunches, int bunch_size ) {
+    tbb::task_arena a( num_threads );
+    const int num_tasks = (num_bunches-1)*bunch_size;
+    tbb::task** tasks = new tbb::task*[num_tasks];
+    for ( int i = 0; i<num_tasks; ++i )
+        tasks[i] = new (tbb::task::allocate_root()) tbb::empty_task();
+    tbb::atomic<int> processed;
+    processed = 0;
+    for ( int repeats = 0; repeats<10; ++repeats ) {
+        int idx = 0;
+        for ( int bunch = 0; bunch < num_bunches-1; ++bunch ) {
+            // Sync with the previous bunch of tasks to prevent "false" nested dependicies (when a nested task waits for an outer task).
+            while ( processed < bunch*bunch_size ) __TBB_Yield();
+            // Run the bunch of threads/tasks that depend on the next bunch of threads/tasks.
+            for ( int i = 0; i<bunch_size; ++i ) {
+                tasks[idx]->set_ref_count( 2 );
+                tbb::tbb_thread( TestMultipleWaitsThreadBody( bunch_size, num_tasks, a, tasks, processed ), idx++ ).detach();
+            }
+        }
+        // No sync because the threads of the last bunch do not call wait_for_all.
+        // Run the last bunch of threads.
+        for ( int i = 0; i<bunch_size; ++i )
+            tbb::tbb_thread( TestMultipleWaitsThreadBody( bunch_size, num_tasks, a, tasks, processed ), idx++ ).detach();
+        while ( processed ) __TBB_Yield();
+    }
+    for ( int i = 0; i<num_tasks; ++i )
+        tbb::task::destroy( *tasks[i] );
+    delete[] tasks;
+}
+
+void TestMultipleWaits() {
+    REMARK( "Testing multiple waits\n" );
+    // Limit the number of threads to prevent heavy oversubscription.
+    const int max_threads = min( 16, tbb::task_scheduler_init::default_num_threads() );
+
+    Harness::FastRandom rnd(1234);
+    for ( int threads = 1; threads <= max_threads; threads += max( threads/2, 1 ) ) {
+        for ( int i = 0; i<3; ++i ) {
+            const int num_bunches = 3 + rnd.get()%3;
+            const int bunch_size = max_threads + rnd.get()%max_threads;
+            TestMultipleWaits( threads, num_bunches, bunch_size );
+        }
+    }
+}
+//--------------------------------------------------//
+#define TBB_PREVIEW_GLOBAL_CONTROL 1
+#include "tbb/global_control.h"
+
+void TestSmallStackSize() {
+    tbb::task_scheduler_init init(tbb::task_scheduler_init::automatic,
+        tbb::global_control::active_value(tbb::global_control::thread_stack_size) / 2 );
+    // The test produces the warning (not a error) if fails. So the test is run many times
+    // to make the log annoying (to force to consider it as an error).
+    for (int i = 0; i < 100; ++i) {
+        tbb::task_arena a;
+        a.initialize();
+    }
+}
+//--------------------------------------------------//
 int TestMain () {
-    // TODO: a workaround for temporary p-1 issue in market
+#if __TBB_TASK_ISOLATION
+    TestIsolatedExecute();
+#endif /* __TBB_TASK_ISOLATION */
+    TestSmallStackSize();
+    // The test uses up to MaxThread workers (in arenas with no master thread),
+    // so the runtime should be initialized appropriately.
     tbb::task_scheduler_init init_market_p_plus_one(MaxThread+1);
     InitializeAndTerminate(MaxThread);
     for( int p=MinThread; p<=MaxThread; ++p ) {
         REMARK("testing with %d threads\n", p );
-        NativeParallelFor( p, &TestConcurrentArenas );
-        ResetTLS();
+        TestConcurrentArenas( p );
         TestMultipleMasters( p );
-        ResetTLS();
+        TestArenaConcurrency( p );
     }
     TestArenaEntryConsistency();
+    TestAttach(MaxThread);
+    TestConstantFunctorRequirement();
+    TestDelegatedSpawnWait();
+    TestMultipleWaits();
     return Harness::Done;
 }
diff --git a/src/test/test_task_assertions.cpp b/src/test/test_task_assertions.cpp
index b139fef..6172dde 100644
--- a/src/test/test_task_assertions.cpp
+++ b/src/test/test_task_assertions.cpp
@@ -1,26 +1,26 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Test correctness of forceful TBB initialization before any dynamic initialization
 // of static objects inside the library took place.
-namespace tbb { 
+namespace tbb {
 namespace internal {
     // Forward declaration of the TBB general initialization routine from task.cpp
     void DoOneTimeInitializations();
@@ -55,7 +55,7 @@ struct AbuseOneTask {
         // spawn_root_and_wait over empty list should vacuously succeed.
         tbb::task::spawn_root_and_wait(list);
 
-        // Check that spawn_root_and_wait fails on non-empty list. 
+        // Check that spawn_root_and_wait fails on non-empty list.
         list.push_back(*AbusedTask);
 
         // Try abusing recycle_as_continuation
diff --git a/src/test/test_task_auto_init.cpp b/src/test/test_task_auto_init.cpp
index b8e36f9..1ef3059 100644
--- a/src/test/test_task_auto_init.cpp
+++ b/src/test/test_task_auto_init.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // Testing automatic initialization of TBB task scheduler, so do not use task_scheduler_init anywhere.
@@ -133,7 +133,7 @@ volatile bool FafStarted   = false,
 
 //! This task is supposed to be executed during termination of an auto-initialized master thread
 class FireAndForgetTask : public tbb::task {
-    tbb::task* execute () {
+    tbb::task* execute () __TBB_override {
         // Let another master thread proceed requesting new TLS keys
         FafStarted = true;
         UseAFewNewTlsKeys();
diff --git a/src/test/test_task_enqueue.cpp b/src/test/test_task_enqueue.cpp
index 4273ef1..cd592db 100644
--- a/src/test/test_task_enqueue.cpp
+++ b/src/test/test_task_enqueue.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "harness_task.h"
@@ -34,7 +34,7 @@ class EnqueuedTask : public tbb::task {
     task* my_successor;
     int my_enqueue_order;
     int* my_track;
-    tbb::task* execute() {
+    tbb::task* execute() __TBB_override {
         // Capture execution order in the very beginning
         int execution_order = 2 - my_successor->decrement_ref_count();
         // Create some local work.
@@ -166,7 +166,7 @@ void TestEnqueue( int p ) {
 ////////////////////////////////////////////////////////////////////////////////
 // Tests for Fire-And-Forget scheduling functionality
 
-const int NumRepeats = 200;
+int NumRepeats = 200;
 const int MaxNumThreads = 16;
 static volatile bool Finished[MaxNumThreads] = {};
 
@@ -174,8 +174,8 @@ static volatile bool CanStart;
 
 //! Custom user task interface
 class ITask {
-public: 
-    virtual ~ITask() {} 
+public:
+    virtual ~ITask() {}
     virtual void Execute() = 0;
     virtual void Release() { delete this; }
 };
@@ -185,7 +185,7 @@ class TestTask : public ITask {
 public:
     TestTask ( volatile bool *pDone ) : m_pDone(pDone) {}
 
-    /* override */ void Execute() {
+    void Execute() __TBB_override {
         *m_pDone = true;
     }
 };
@@ -195,7 +195,7 @@ class CarrierTask : public tbb::task {
 public:
     CarrierTask(ITask* pTask) : m_pTask(pTask) {}
 
-    /*override*/ task* execute() {
+    task* execute() __TBB_override {
         m_pTask->Execute();
         m_pTask->Release();
         return NULL;
@@ -207,7 +207,7 @@ class SpawnerTask : public ITask {
 public:
     SpawnerTask(ITask* job) : m_taskToSpawn(job) {}
 
-    void Execute() {
+    void Execute() __TBB_override {
         while ( !CanStart )
             __TBB_Yield();
         Harness::Sleep(10); // increases probability of the bug
@@ -256,7 +256,7 @@ void TestCascadedEnqueue () {
 
 class DummyTask : public tbb::task {
 public:
-    task *execute() {
+    task *execute() __TBB_override {
         Harness::Sleep(1);
         return NULL;
     }
@@ -273,10 +273,10 @@ public:
 };
 
 //! Test for enqueuing children of the same root from different master threads
-void TestSharedRoot ( int p ) { 
+void TestSharedRoot ( int p ) {
     REMARK("Testing enqueuing siblings from different masters\n");
     tbb::task_scheduler_init init(p);
-    tbb::task *root =  new ( tbb::task::allocate_root() ) tbb::empty_task; 
+    tbb::task *root =  new ( tbb::task::allocate_root() ) tbb::empty_task;
     root->set_ref_count(1);
     for( int n = MinThread; n <= MaxThread; ++n ) {
         REMARK("%d masters, %d requested workers\r", n, p-1);
@@ -290,7 +290,7 @@ void TestSharedRoot ( int p ) {
 class BlockingTask : public tbb::task {
     Harness::SpinBarrier &m_Barrier;
 
-    tbb::task* execute () {
+    tbb::task* execute () __TBB_override {
         m_Barrier.wait();
         return 0;
     }
@@ -305,10 +305,10 @@ void TestDequeueByMaster () {
     REMARK("Testing task dequeuing by master\n");
     tbb::task_scheduler_init init(1);
     Harness::SpinBarrier bar(2);
-    tbb::task &r = *new ( tbb::task::allocate_root() ) tbb::empty_task; 
+    tbb::task &r = *new ( tbb::task::allocate_root() ) tbb::empty_task;
     r.set_ref_count(3);
-    tbb::task::enqueue( *new(r.allocate_child()) BlockingTask(bar) ); 
-    tbb::task::enqueue( *new(r.allocate_child()) BlockingTask(bar) ); 
+    tbb::task::enqueue( *new(r.allocate_child()) BlockingTask(bar) );
+    tbb::task::enqueue( *new(r.allocate_child()) BlockingTask(bar) );
     r.wait_for_all();
     tbb::task::destroy(r);
 }
@@ -325,7 +325,7 @@ struct Functor : NoAssign
 {
     Harness::SpinBarrier &my_barrier;
     Functor(Harness::SpinBarrier &a_barrier) : my_barrier(a_barrier) { }
-    void operator()(const tbb::blocked_range<int>& r) const 
+    void operator()(const tbb::blocked_range<int>& r) const
     {
         ASSERT(r.size() == 1, NULL);
         // allocate_root() uses current context of parallel_for which is destroyed when it finishes.
@@ -356,13 +356,26 @@ void TestWakeups()
         tbb::parallel_for(tbb::blocked_range<int>(0, NUM_TASKS), Functor(barrier)); // auto
 }
 
+#define TBB_PREVIEW_GLOBAL_CONTROL 1
+#include "tbb/global_control.h"
+
 int TestMain () {
+
     TestWakeups();         // 1st because requests oversubscription
-    TestCascadedEnqueue(); // needs oversubscription
-    TestDequeueByMaster(); // no oversubscription needed
-    for( int p=MinThread; p<=MaxThread; ++p ) {
-        TestEnqueue(p);
-        TestSharedRoot(p);
+    for (int i=0; i<2; i++) {
+        tbb::global_control *c = i?
+            new tbb::global_control(tbb::global_control::max_allowed_parallelism, 1) : NULL;
+        if (i) // decrease workload for max_allowed_parallelism == 1
+            NumRepeats = 10;
+
+        TestCascadedEnqueue(); // needs oversubscription
+        if (!c)
+            TestDequeueByMaster(); // no oversubscription needed
+        for( int p=MinThread; p<=MaxThread; ++p ) {
+            TestEnqueue(p);
+            TestSharedRoot(p);
+        }
+        delete c;
     }
     return Harness::Done;
 }
diff --git a/src/test/test_task_group.cpp b/src/test/test_task_group.cpp
index 87b59e2..55ba3a8 100644
--- a/src/test/test_task_group.cpp
+++ b/src/test/test_task_group.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "harness_defs.h"
@@ -519,7 +519,7 @@ class test_exception : public std::exception
 public:
     test_exception ( const char* descr ) : m_strDescription(descr) {}
 
-    const char* what() const throw() { return m_strDescription; }
+    const char* what() const throw() __TBB_override { return m_strDescription; }
 };
 
 #if TBB_USE_CAPTURED_EXCEPTION
@@ -810,6 +810,18 @@ void TestStructuredWait () {
     sg.wait();
 }
 
+struct test_functor_t {
+    void operator()() { ASSERT( false, "Non-const operator called" ); }
+    void operator()() const { /* library requires this overload only */ }
+};
+
+void TestConstantFunctorRequirement() {
+    tbb::task_group g;
+    test_functor_t tf;
+    g.run( tf ); g.wait();
+    g.run_and_wait( tf );
+}
+
 int TestMain () {
     REMARK ("Testing %s task_group functionality\n", TBBTEST_USE_TBB ? "TBB" : "PPL");
     for( int p=MinThread; p<=MaxThread; ++p ) {
@@ -845,7 +857,7 @@ int TestMain () {
         TestEh2();
         TestStructuredWait();
         TestStructuredCancellation2<true>();
-#if !__TBB_THROW_FROM_DTOR_BROKEN
+#if !(__TBB_THROW_FROM_DTOR_BROKEN || __TBB_STD_UNCAUGHT_EXCEPTION_BROKEN)
         TestStructuredCancellation2<false>();
 #else
         REPORT("Known issue: TestStructuredCancellation2<false>() is skipped.\n");
@@ -855,6 +867,7 @@ int TestMain () {
         s->Release();
 #endif
     }
+    TestConstantFunctorRequirement();
 #if __TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN
     REPORT("Known issue: exception handling tests are skipped.\n");
 #endif
diff --git a/src/test/test_task_leaks.cpp b/src/test/test_task_leaks.cpp
index 5e75736..d39820c 100644
--- a/src/test/test_task_leaks.cpp
+++ b/src/test/test_task_leaks.cpp
@@ -1,32 +1,32 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
-/*  The test uses "single produces multiple consumers" (SPMC )pattern to check 
-    if the memory of the tasks stolen by consumer threads is returned to the 
+/*  The test uses "single produces multiple consumers" (SPMC )pattern to check
+    if the memory of the tasks stolen by consumer threads is returned to the
     producer thread and is reused.
 
     The test consists of a series of iterations, which execute a task tree.
     the test fails is the memory consumption is not stabilized during some
     number of iterations.
 
-    After the memory consumption stabilized the memory state is perturbed by 
+    After the memory consumption stabilized the memory state is perturbed by
     switching producer thread, and the check is repeated.
 */
 
@@ -68,7 +68,7 @@ using namespace tbb::internal;
 
 class ChangeProducer: public tbb::task {
 public:
-    /*override*/ tbb::task* execute() {
+    tbb::task* execute() __TBB_override {
         if( is_stolen_task() ) {
             Producer = internal::governor::local_scheduler();
         }
@@ -83,7 +83,7 @@ public:
     TaskGenerator(int child_count, int d) : my_child_count(child_count), my_depth(d) {
         ASSERT(my_child_count>1, "The TaskGenerator should produce at least two children");
     }
-    /*override*/ tbb::task* execute() {
+    tbb::task* execute() __TBB_override {
         if( my_depth>0 ) {
             int child_count = my_child_count;
             scheduler* my_sched = internal::governor::local_scheduler();
@@ -158,7 +158,7 @@ class TaskList: public tbb::task {
     const int my_num_childs;
 public:
     TaskList(const int num_childs) : my_num_childs(num_childs) {}
-    tbb::task* execute() {
+    tbb::task* execute() __TBB_override {
         tbb::task_list list;
         for (int i=0; i<my_num_childs; ++i)
         {
@@ -227,7 +227,7 @@ void TestTaskReclamation() {
     int     last_error_iteration = 0,
             producer_switch_iteration = 0,
             producer_switches = 0;
-    bool    switchProducer = false, 
+    bool    switchProducer = false,
             checkProducer = false;
     for( int i=0; i < MaxIterations; ++i ) {
         // These iterations check for excessive memory use and unreasonable task count
diff --git a/src/test/test_task_priority.cpp b/src/test/test_task_priority.cpp
index 033ad4c..68d9926 100644
--- a/src/test/test_task_priority.cpp
+++ b/src/test/test_task_priority.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/tbb_config.h"
@@ -46,7 +46,7 @@ int BaseDepth = 0;
 const int DesiredNumThreads = 12;
 
 const int NumTests = 8;
-const int TestRepeats = 4;
+int TestSwitchBetweenMastersRepeats = 4;
 
 int g_NumMasters = 0;
 volatile intptr_t *g_LeavesExecuted = NULL;
@@ -66,8 +66,8 @@ namespace tbb {
 }
 #endif /* __TBB_TASK_PRIORITY */
 
-tbb::priority_t Low = tbb::priority_normal,
-                High = tbb::priority_high;
+tbb::priority_t Low,
+                High;
 int PreemptionActivatorId = 1;
 
 enum Options {
@@ -106,7 +106,7 @@ class LeafTask : public tbb::task {
     int m_tid;
     uintptr_t m_opts;
 
-    tbb::task* execute () {
+    tbb::task* execute () __TBB_override {
         volatile int anchor = 0;
         for ( int i = 0; i < NumIterations; ++i )
             anchor += i;
@@ -151,7 +151,7 @@ protected:
         parent_node->set_ref_count(NumLeafTasks + 1);
         --m_depth;
         for ( int i = 0; i < NumLeafTasks; ++i ) {
-            task *t = m_depth ? (task*) new(parent_node->allocate_child()) NodeType(m_tid, m_depth, m_opts, m_root) 
+            task *t = m_depth ? (task*) new(parent_node->allocate_child()) NodeType(m_tid, m_depth, m_opts, m_root)
                               : (task*) new(parent_node->allocate_child()) LeafTask(m_tid, m_opts);
             task::spawn(*t);
         }
@@ -164,7 +164,7 @@ public:
 };
 
 class NestedGroupNodeTask : public NodeTask<NestedGroupNodeTask> {
-    task* execute () {
+    task* execute () __TBB_override {
         tbb::task_group_context ctx; // Use bound context
         tbb::empty_task &r = *new( task::allocate_root(ctx) ) tbb::empty_task;
         SpawnChildren(&r);
@@ -179,7 +179,7 @@ public:
 };
 
 class BlockingNodeTask : public NodeTask<BlockingNodeTask> {
-    task* execute () {
+    task* execute () __TBB_override {
         SpawnChildren(this);
         wait_for_all();
         return NULL;
@@ -190,7 +190,7 @@ public:
 };
 
 class NonblockingNodeTask : public NodeTask<NonblockingNodeTask> {
-    task* execute () {
+    task* execute () __TBB_override {
         if ( m_depth < 0 )
             return NULL; // I'm just a continuation now
         recycle_as_safe_continuation();
@@ -298,9 +298,10 @@ void TestPrioritySwitchBetweenTwoMasters () {
         REPORT_ONCE( "Known issue: TestPrioritySwitchBetweenTwoMasters is skipped for big number of threads\n" );
         return;
     }
+    tbb::task_scheduler_init init; // keeps the market alive to reduce the amount of TBB warnings
     REMARK( "Stress tests: %s / %s \n", Low == tbb::priority_low ? "Low" : "Normal", High == tbb::priority_normal ? "Normal" : "High" );
     PrepareGlobals( 2 );
-    for ( int i = 0; i < TestRepeats; ++i ) {
+    for ( int i = 0; i < TestSwitchBetweenMastersRepeats; ++i ) {
         for ( BaseDepth = MinBaseDepth; BaseDepth <= MaxBaseDepth; ++BaseDepth ) {
             RunPrioritySwitchBetweenTwoMasters<BlockingNodeTask>( 0, NoPriorities );
             RunPrioritySwitchBetweenTwoMasters<BlockingNodeTask>( 1, TestPreemption );
@@ -315,7 +316,7 @@ void TestPrioritySwitchBetweenTwoMasters () {
         }
     }
 #if __TBB_TASK_PRIORITY
-    const int NumRuns = TestRepeats * (MaxBaseDepth - MinBaseDepth + 1);
+    const int NumRuns = TestSwitchBetweenMastersRepeats * (MaxBaseDepth - MinBaseDepth + 1);
     for ( int i = 0; i < NumTests; ++i ) {
         if ( g_TestFailures[i] )
             REMARK( "Test %d: %d failures in %d runs\n", i, g_TestFailures[i], NumRuns );
@@ -331,7 +332,7 @@ void TestPrioritySwitchBetweenTwoMasters () {
 }
 
 class SingleChildRootTask : public tbb::task {
-    tbb::task* execute () {
+    tbb::task* execute () __TBB_override {
         set_ref_count(2);
         spawn ( *new(allocate_child()) tbb::empty_task );
         wait_for_all();
@@ -370,6 +371,9 @@ void EmulateWork( int ) {
 
 class PeriodicActivitiesBody {
 public:
+    static const int parallelIters[2];
+    static const int seqIters[2];
+    static int mode;
     void operator() ( int id ) const {
         tbb::task_group_context ctx;
 #if __TBB_TASK_PRIORITY
@@ -377,13 +381,17 @@ public:
 #else /* !__TBB_TASK_PRIORITY */
         (void)id;
 #endif /* !__TBB_TASK_PRIORITY */
-        for ( int i = 0; i < 5; ++i ) {
+        for ( int i = 0; i < seqIters[mode]; ++i ) {
             tbb::task_scheduler_init init;
-            tbb::parallel_for( 1, 10000, &EmulateWork, ctx );
+            tbb::parallel_for( 1, parallelIters[mode], &EmulateWork, ctx );
         }
     }
 };
 
+const int PeriodicActivitiesBody::parallelIters[] = {10000, 100};
+const int PeriodicActivitiesBody::seqIters[] = {5, 2};
+int PeriodicActivitiesBody::mode = 0;
+
 void TestPeriodicConcurrentActivities () {
     REMARK( "TestPeriodicConcurrentActivities: %s / %s \n", Low == tbb::priority_low ? "Low" : "Normal", High == tbb::priority_normal ? "Normal" : "High" );
     NativeParallelFor ( 2, PeriodicActivitiesBody() );
@@ -394,6 +402,7 @@ void TestPeriodicConcurrentActivities () {
 void TestPriorityAssertions () {
 #if TRY_BAD_EXPR_ENABLED && __TBB_TASK_PRIORITY
     REMARK( "TestPriorityAssertions\n" );
+    tbb::task_scheduler_init init; // to avoid autoinit that'd affect subsequent tests
     tbb::priority_t bad_low_priority = tbb::priority_t( tbb::priority_low - 1 ),
                     bad_high_priority = tbb::priority_t( tbb::priority_high + 1 );
     tbb::task_group_context ctx;
@@ -411,11 +420,16 @@ void TestPriorityAssertions () {
 
 tbb::atomic<tbb::priority_t> g_order;
 tbb::atomic<bool> g_order_established;
+tbb::atomic<int> g_num_tasks;
+tbb::atomic<bool> g_all_tasks_enqueued;
+int g_failures;
 class OrderedTask : public tbb::task {
     tbb::priority_t my_priority;
 public:
-    OrderedTask(tbb::priority_t p) : my_priority(p) {}
-    tbb::task* execute() {
+    OrderedTask(tbb::priority_t p) : my_priority(p) {
+        ++g_num_tasks;
+    }
+    tbb::task* execute() __TBB_override {
         tbb::priority_t prev = g_order.fetch_and_store(my_priority);
         if( my_priority != prev) {
             REMARK("prev:%s --> new:%s\n", PriorityName(prev), PriorityName(my_priority));
@@ -426,12 +440,18 @@ public:
                     g_order_established = true;
                 else ASSERT(my_priority == tbb::priority_normal && prev == tbb::priority_low, NULL);
             } else { //transition path allowed high->normal->low
-                if(prev == tbb::priority_high) ASSERT( my_priority == tbb::priority_normal, "previous priority is high - bad order");
-                else if(prev == tbb::priority_normal) ASSERT( my_priority == tbb::priority_low, "previous priority is normal - bad order");
-                else ASSERT(!g_order_established, "transition from low priority but not during initialization");
+                bool fail = prev==tbb::priority_high && my_priority!=tbb::priority_normal; // previous priority is high - bad order
+                fail |= prev==tbb::priority_normal && my_priority!=tbb::priority_low; // previous priority is normal - bad order
+                fail |= prev==tbb::priority_low; // transition from low priority but not during initialization
+                if ( fail ) {
+                    if ( g_all_tasks_enqueued )
+                        REPORT_ONCE( "ERROR: Bad order: prev = %s, my_priority = %s\n", PriorityName( prev ), PriorityName( my_priority ) );
+                    ++g_failures;
+                }
             }
         }
         EmulateWork(0);
+        --g_num_tasks;
         return NULL;
     }
     static void start(int i) {
@@ -447,10 +467,21 @@ void TestEnqueueOrder () {
     tbb::task_scheduler_init init(1); // to simplify transition checks only one extra worker for enqueue
     g_order = tbb::priority_low;
     g_order_established = false;
+    g_all_tasks_enqueued = false;
+    g_failures = 0;
     for( int i = 0; i < 1000; i++)
         OrderedTask::start(i);
-    while( g_order == tbb::priority_low ) __TBB_Yield();
-    while( g_order != tbb::priority_low ) __TBB_Yield();
+    if ( int curr_num_tasks = g_num_tasks ) {
+        // Sync with worker not to set g_all_tasks_enqueued too early.
+        while ( curr_num_tasks == g_num_tasks ) __TBB_Yield();
+    }
+    g_all_tasks_enqueued = true;
+    while( g_order == tbb::priority_low && g_num_tasks>0 ) __TBB_Yield();
+    while( g_order != tbb::priority_low && g_num_tasks>0 ) __TBB_Yield();
+    // We cannot differentiate if this misbehavior is caused by the test or by the implementation.
+    // Howerever, we do not promise mandatory priorities so we can state that the misbehavior in less
+    // than 1% cases is our best effort.
+    ASSERT( g_failures < 5, "Too many failures" );
 }
 
 namespace test_propagation {
@@ -469,7 +500,7 @@ class TestSetPriorityTask : public tbb::task {
     const int m_tree, m_i;
 public:
     TestSetPriorityTask(int t, int i) : m_tree(t), m_i(i) {}
-    tbb::task* execute() {
+    tbb::task* execute() __TBB_override {
         if( !m_i ) { // the first task creates two trees
             g_default_ctx = group();
             for( int i = 0; i <= 1; ++i ) {
@@ -497,6 +528,11 @@ public:
 void TestSetPriority() {
     REMARK("Testing set_priority() with existing forest\n");
     const int workers = last*2+1; // +1 is worker thread executing the first task
+    const int max_workers = 4*tbb::task_scheduler_init::default_num_threads();
+    if ( workers+1 > max_workers ) {
+        REPORT( "Known issue: TestSetPriority requires %d threads but due to 4P hard limit the maximum number of threads is %d\n", workers+1, max_workers );
+        return;
+    }
     tbb::task_scheduler_init init(workers+1); // +1 is master thread
     g_barrier = workers;
     is_finished = false;
@@ -511,7 +547,7 @@ void TestSetPriority() {
     for (int t = 0; t < 2; ++t)
         for (int i = first; i <= last; ++i) {
             REMARK("\r                    \rTask %i... ", i);
-            ASSERT(g_trees[t][i]->priority() == expected_priority[t][i]? tbb::priority_high : tbb::priority_normal, NULL);
+            ASSERT(g_trees[t][i]->priority() == (expected_priority[t][i]? tbb::priority_high : tbb::priority_normal), NULL);
             REMARK("OK");
         }
     REMARK("\r                    \r");
@@ -538,20 +574,50 @@ void TestSetPriority() {
             delete g_trees[t][i];
 }
 }//namespace test_propagation
+
+struct OuterParFor {
+    void operator()(int) const {
+        tbb::affinity_partitioner ap;
+        tbb::task_group_context ctx;
+        ctx.set_priority(tbb::priority_high);
+        tbb::parallel_for(0, 100, Harness::DummyBody(1000), ap, ctx);
+    }
+};
+
+// Test priorities with affinity tasks.
+void TestAffinityTasks() {
+    REMARK("Test priorities with affinity tasks\n");
+    tbb::task_scheduler_init init;
+    tbb::affinity_partitioner ap;
+    for (int i = 0; i < 10; ++i)
+        tbb::parallel_for(0, 100, OuterParFor(), ap);
+}
+
+namespace regression {
+// This is a regression test for a bug with task_group_context used from a thread that created its local scheduler but not the implicit arena
+class TestTGContext {
+public:
+    void operator() (int) const {
+        tbb::task_group_context ctx;
+        ctx.cancel_group_execution();   // initializes the local weak scheduler on the thread
+        ctx.set_priority(tbb::priority_high);
+    }
+};
+
+void TestTGContextOnNewThread() {
+    REMARK("Testing a regression for a bug with task_group_context\n");
+    TestTGContext body;
+    NativeParallelFor(1, body);
+}
+}//namespace regression_priorities
 #endif /* __TBB_TASK_PRIORITY */
 
 #if !__TBB_TEST_SKIP_AFFINITY
 #include "harness_concurrency.h"
 #endif
 
-int TestMain () {
-#if !__TBB_TEST_SKIP_AFFINITY
-    Harness::LimitNumberOfThreads( DesiredNumThreads );
-#endif
-#if !__TBB_TASK_PRIORITY
-    REMARK( "Priorities disabled: Running as just yet another task scheduler test\n" );
-#else
-    test_propagation::TestSetPriority(); // TODO: move down when bug 1996 is fixed
+int RunTests () {
+#if __TBB_TASK_PRIORITY
     TestEnqueueOrder();
 #endif /* __TBB_TASK_PRIORITY */
     TestPriorityAssertions();
@@ -561,6 +627,8 @@ int TestMain () {
     REMARK( "The number of threads: %d\n", P );
     if ( P < 3 )
         return Harness::Skipped;
+    Low = tbb::priority_normal;
+    High = tbb::priority_high;
     TestPeriodicConcurrentActivities();
     TestPrioritySwitchBetweenTwoMasters();
     Low = tbb::priority_low;
@@ -573,9 +641,32 @@ int TestMain () {
     TestPrioritySwitchBetweenTwoMasters();
     PreemptionActivatorId = 1;
     TestPrioritySwitchBetweenTwoMasters();
+    TestAffinityTasks();
+    regression::TestTGContextOnNewThread();
+
     return Harness::Done;
 }
 
+#define TBB_PREVIEW_GLOBAL_CONTROL 1
+#include "tbb/global_control.h"
+
+int TestMain () {
+#if !__TBB_TEST_SKIP_AFFINITY
+    Harness::LimitNumberOfThreads( DesiredNumThreads );
+#endif
+#if !__TBB_TASK_PRIORITY
+    REMARK( "Priorities disabled: Running as just yet another task scheduler test\n" );
+#else
+    test_propagation::TestSetPriority(); // TODO: move down when bug 1996 is fixed
+#endif /* __TBB_TASK_PRIORITY */
+
+    RunTests();
+    tbb::global_control c(tbb::global_control::max_allowed_parallelism, 1);
+    PeriodicActivitiesBody::mode = 1;
+    TestSwitchBetweenMastersRepeats = 1;
+    return RunTests();
+}
+
 #else /* !__TBB_TASK_GROUP_CONTEXT */
 
 int TestMain () {
diff --git a/src/test/test_task_scheduler_init.cpp b/src/test/test_task_scheduler_init.cpp
index 13b1aef..06d1238 100644
--- a/src/test/test_task_scheduler_init.cpp
+++ b/src/test/test_task_scheduler_init.cpp
@@ -1,23 +1,29 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
+// We want to test waiting for workers feature with non-preview binaries. However,
+// we want to have some testing of task_scheduler_init without this macro.
+#if !__TBB_CPF_BUILD
+#define TBB_PREVIEW_WAITING_FOR_WORKERS 1
+#endif
+
 #include "tbb/task_scheduler_init.h"
 #include <cstdlib>
 #include "harness_assert.h"
@@ -30,14 +36,26 @@
     #pragma warning (disable: 4530)
 #endif
 
+#if TBB_USE_EXCEPTIONS
 #include <stdexcept>
+#endif
 
 #if !TBB_USE_EXCEPTIONS && _MSC_VER
     #pragma warning (pop)
 #endif
 
+#if _MSC_VER
+#pragma warning (push)
+    // MSVC discovers that ASSERT(false) inside TestBlockingTerminateNS::ExceptionTest2::Body makes the code
+    // in parallel_for after the body call unreachable. So supress the warning.
+#pragma warning (disable: 4702)
+#endif
+#include "tbb/parallel_for.h"
+#if _MSC_VER
+#pragma warning (pop)
+#endif
+
 #include "harness_concurrency_tracker.h"
-#include "harness_concurrency_checker.h"
 #include "harness_task.h"
 #include "harness.h"
 
@@ -48,7 +66,7 @@ size_t __TBB_EXPORTED_FUNC get_initial_auto_partitioner_divisor();
 }}
 
 int ArenaConcurrency() {
-    return tbb::internal::get_initial_auto_partitioner_divisor()/4; // TODO: expose through task_arena interface?
+    return int(tbb::internal::get_initial_auto_partitioner_divisor()/4); // TODO: expose through task_arena interface?
 }
 
 // Generally, TBB does not guarantee mandatory parallelism. This test uses some whitebox knowledge about when all the threads can be available
@@ -64,16 +82,18 @@ void InitializeAndTerminate( int maxthread ) {
                 default: {
                     tbb::task_scheduler_init init( threads );
                     ASSERT(init.is_active(), NULL);
-                    ASSERT(ArenaConcurrency()==threads, NULL);
-                    ASSERT(!test_mandatory_parallelism || Harness::CanReachConcurrencyLevel(threads), NULL);
+                    ASSERT(ArenaConcurrency()==(threads==1?2:threads), NULL);
+                    if (test_mandatory_parallelism)
+                        Harness::ExactConcurrencyLevel::check(threads, Harness::ExactConcurrencyLevel::Serialize);
                     if(i&0x20) tbb::task::enqueue( (*new( tbb::task::allocate_root() ) TaskGenerator(2,6)) ); // a work deferred to workers
                     break;
                 }
                 case 0: {
                     tbb::task_scheduler_init init;
                     ASSERT(init.is_active(), NULL);
-                    ASSERT(ArenaConcurrency()==init.default_num_threads(), NULL);
-                    ASSERT(!test_mandatory_parallelism || Harness::CanReachConcurrencyLevel(init.default_num_threads()), NULL);
+                    ASSERT(ArenaConcurrency()==(DefaultThreads==1?2:init.default_num_threads()), NULL);
+                    if (test_mandatory_parallelism)
+                        Harness::ExactConcurrencyLevel::check(init.default_num_threads(), Harness::ExactConcurrencyLevel::Serialize);
                     if(i&0x40) tbb::task::enqueue( (*new( tbb::task::allocate_root() ) TaskGenerator(3,5)) ); // a work deferred to workers
                     break;
                 }
@@ -82,8 +102,9 @@ void InitializeAndTerminate( int maxthread ) {
                     ASSERT(!init.is_active(), "init should not be active; initialization was deferred");
                     init.initialize( threads );
                     ASSERT(init.is_active(), NULL);
-                    ASSERT(ArenaConcurrency()==threads, NULL);
-                    ASSERT(!test_mandatory_parallelism || Harness::CanReachConcurrencyLevel(threads), NULL);
+                    ASSERT(ArenaConcurrency()==(threads==1?2:threads), NULL);
+                    if (test_mandatory_parallelism)
+                        Harness::ExactConcurrencyLevel::check(threads, Harness::ExactConcurrencyLevel::Serialize);
                     init.terminate();
                     ASSERT(!init.is_active(), "init should not be active; it was terminated");
                     break;
@@ -91,8 +112,9 @@ void InitializeAndTerminate( int maxthread ) {
                 case 2: {
                     tbb::task_scheduler_init init( tbb::task_scheduler_init::automatic );
                     ASSERT(init.is_active(), NULL);
-                    ASSERT(ArenaConcurrency()==init.default_num_threads(), NULL);
-                    ASSERT(!test_mandatory_parallelism || Harness::CanReachConcurrencyLevel(init.default_num_threads()), NULL);
+                    ASSERT(ArenaConcurrency()==(DefaultThreads==1?2:init.default_num_threads()), NULL);
+                    if (test_mandatory_parallelism)
+                        Harness::ExactConcurrencyLevel::check(init.default_num_threads(), Harness::ExactConcurrencyLevel::Serialize);
                     break;
                 }
             }
@@ -121,30 +143,196 @@ struct ThreadedInit {
 #include <tchar.h>
 #endif /* _MSC_VER */
 
-#include "tbb/parallel_for.h"
-#include "tbb/blocked_range.h"
+/** The test will fail in particular if task_scheduler_init mistakenly hooks up
+    auto-initialization mechanism. **/
+void AssertExplicitInitIsNotSupplanted () {
+    tbb::task_scheduler_init init(1);
 
-typedef tbb::blocked_range<int> Range;
+    Harness::ExactConcurrencyLevel::check(1);
+}
+
+struct TestNoWorkerSurplusRun {
+    void operator() (int) const {
+        const unsigned THREADS = tbb::tbb_thread::hardware_concurrency()*2/3;
+        for (int j=0; j<10; j++) {
+            tbb::task_scheduler_init t(THREADS);
+            Harness::ExactConcurrencyLevel::Combinable unique;
 
-class ConcurrencyTrackingBody {
-public:
-    void operator() ( const Range& ) const {
-        Harness::ConcurrencyTracker ct;
-        for ( volatile int i = 0; i < 1000000; ++i )
-            ;
+            for (int i=0; i<50; i++)
+                Harness::ExactConcurrencyLevel::checkLessOrEqual(THREADS, &unique);
+        }
     }
 };
 
-/** The test will fail in particular if task_scheduler_init mistakenly hooks up 
-    auto-initialization mechanism. **/
-void AssertExplicitInitIsNotSupplanted () {
-    int hardwareConcurrency = tbb::task_scheduler_init::default_num_threads();
-    tbb::task_scheduler_init init(1);
-    Harness::ConcurrencyTracker::Reset();
-    tbb::parallel_for( Range(0, hardwareConcurrency * 2, 1), ConcurrencyTrackingBody(), tbb::simple_partitioner() );
-    ASSERT( Harness::ConcurrencyTracker::PeakParallelism() == 1, 
-            "Manual init provided more threads than requested. See also the comment at the beginning of main()." );
+void TestNoWorkerSurplus () {
+    // Run the test in a special thread because otherwise the surplus issue
+    // is not observed for some hardware configurations
+    NativeParallelFor( 1, TestNoWorkerSurplusRun() );
+}
+
+#if TBB_PREVIEW_WAITING_FOR_WORKERS
+#include "tbb/task_group.h"
+#include "tbb/task_arena.h"
+
+namespace TestBlockingTerminateNS {
+    struct EmptyBody {
+        void operator()() const {}
+        void operator()( int ) const {}
+    };
+
+    struct TestAutoInitBody {
+        void operator()( int ) const {
+            tbb::parallel_for( 0, 100, EmptyBody() );
+        }
+    };
+
+    static tbb::atomic<int> gSeed;
+    static tbb::atomic<int> gNumSuccesses;
+
+    class TestMultpleWaitBody {
+        bool myAutoInit;
+    public:
+        TestMultpleWaitBody( bool autoInit = false ) : myAutoInit( autoInit ) {}
+        void operator()( int ) const {
+            tbb::task_scheduler_init init( tbb::task_scheduler_init::deferred );
+            if ( !myAutoInit )
+                init.initialize( tbb::task_scheduler_init::automatic );
+            Harness::FastRandom rnd( ++gSeed );
+            // In case of auto init sub-tests we skip
+            //  - case #4 to avoid recursion
+            //  - case #5 because it is explicit initialization
+            const int numCases = myAutoInit ? 4 : 6;
+            switch ( rnd.get() % numCases ) {
+            case 0: {
+                tbb::task_arena a;
+                a.enqueue( EmptyBody() );
+                break;
+            }
+            case 1: {
+                tbb::task_group tg;
+                tg.run( EmptyBody() );
+                tg.wait();
+                break;
+            }
+            case 2:
+                tbb::parallel_for( 0, 100, EmptyBody() );
+                break;
+            case 3:
+                /* do nothing */
+                break;
+            case 4:
+                // Create and join several threads with auto initialized scheduler.
+                NativeParallelFor( rnd.get() % 5 + 1, TestMultpleWaitBody( true ) );
+                break;
+            case 5:
+                {
+                    tbb::task_scheduler_init init2;
+                    bool res = init2.blocking_terminate( std::nothrow );
+                    ASSERT( !res, NULL );
+                }
+                break;
+            }
+            if ( !myAutoInit && init.blocking_terminate( std::nothrow ) )
+                ++gNumSuccesses;
+        }
+    };
+
+    void TestMultpleWait() {
+        const int minThreads = 1;
+        const int maxThreads = 16;
+        const int numRepeats = 5;
+        // Initialize seed with different values on different machines.
+        gSeed = tbb::task_scheduler_init::default_num_threads();
+        for ( int repeats = 0; repeats<numRepeats; ++repeats ) {
+            for ( int threads = minThreads; threads<maxThreads; ++threads ) {
+                gNumSuccesses = 0;
+                NativeParallelFor( threads, TestMultpleWaitBody() );
+                ASSERT( gNumSuccesses > 0, "At least one blocking terminate must return 'true'" );
+            }
+        }
+    }
+
+#if TBB_USE_EXCEPTIONS
+    template <typename F>
+    void TestException( F &f ) {
+        Harness::suppress_unused_warning( f );
+        bool caught = false;
+        try {
+            f();
+            ASSERT( false, NULL );
+        }
+        catch ( const std::runtime_error& ) {
+            caught = true;
+        }
+#if TBB_USE_CAPTURED_EXCEPTION
+        catch ( const tbb::captured_exception& ) {
+            caught = true;
+        }
+#endif
+        catch ( ... ) {
+            ASSERT( false, NULL );
+        }
+        ASSERT( caught, NULL );
+    }
+
+    class ExceptionTest1 {
+        tbb::task_scheduler_init tsi1;
+        int myIndex;
+    public:
+        ExceptionTest1( int index ) : myIndex( index ) {}
+
+        void operator()() {
+            tbb::task_scheduler_init tsi2;
+            (myIndex == 0 ? tsi1 : tsi2).blocking_terminate();
+            ASSERT( false, "Blocking terminate did not throw the exception" );
+        }
+    };
+
+    struct ExceptionTest2 {
+        class Body {
+            Harness::SpinBarrier& myBarrier;
+        public:
+            Body( Harness::SpinBarrier& barrier ) : myBarrier( barrier ) {}
+            void operator()( int ) const {
+                myBarrier.wait();
+                tbb::task_scheduler_init init;
+                init.blocking_terminate();
+                ASSERT( false, "Blocking terminate did not throw the exception inside the parallel region" );
+            }
+        };
+        void operator()() {
+            const int numThreads = 4;
+            tbb::task_scheduler_init init( numThreads );
+            Harness::SpinBarrier barrier( numThreads );
+            tbb::parallel_for( 0, numThreads, Body( barrier ) );
+            ASSERT( false, "Parallel loop did not throw the exception" );
+        }
+    };
+#endif /* TBB_USE_EXCEPTIONS */
+
+    void TestExceptions() {
+        for ( int i = 0; i<2; ++i ) {
+            tbb::task_scheduler_init tsi[2];
+            bool res1 = tsi[i].blocking_terminate( std::nothrow );
+            ASSERT( !res1, NULL );
+            bool res2 = tsi[1-i].blocking_terminate( std::nothrow );
+            ASSERT( res2, NULL );
+        }
+#if TBB_USE_EXCEPTIONS
+        ExceptionTest1 Test1(0), Test2(1);
+        TestException( Test1 );
+        TestException( Test2 );
+        ExceptionTest2 Test3;
+        TestException( Test3 );
+#endif
+    }
+}
+
+void TestBlockingTerminate() {
+    TestBlockingTerminateNS::TestExceptions();
+    TestBlockingTerminateNS::TestMultpleWait();
 }
+#endif /* TBB_PREVIEW_WAITING_FOR_WORKERS */
 
 int TestMain () {
     // Do not use tbb::task_scheduler_init directly in the scope of main's body,
@@ -160,11 +348,11 @@ int TestMain () {
 #endif /* _MSC_VER && !__TBB_NO_IMPLICIT_LINKAGE && !__TBB_LIB_NAME */
     std::srand(2);
     REMARK("testing master thread\n");
-    int override = DefaultThreads*2;
+    int threads = DefaultThreads*2;
     {   // work-around shared RML
-        tbb::task_scheduler_init init( override );
-        if( !Harness::CanReachConcurrencyLevel( override, 3. ) ) {
-            override = DefaultThreads;
+        tbb::task_scheduler_init init( threads );
+        if( !Harness::ExactConcurrencyLevel::isEqual( threads ) ) {
+            threads = DefaultThreads;
             if( MaxThread > DefaultThreads )
                 MaxThread = DefaultThreads;
 #if RML_USE_WCRM
@@ -175,7 +363,7 @@ int TestMain () {
 #endif
         }
     }
-    InitializeAndTerminate( override ); // test initialization of more than default number of threads
+    InitializeAndTerminate( threads ); // test initialization of more than default number of threads
     for( int p=MinThread; p<=MaxThread; ++p ) {
         REMARK("testing with %d threads\n", p );
         // protect market with excess threads from default initializations
@@ -188,5 +376,8 @@ int TestMain () {
         NativeParallelFor( p, ThreadedInit() );
     }
     AssertExplicitInitIsNotSupplanted();
+#if TBB_PREVIEW_WAITING_FOR_WORKERS
+    TestBlockingTerminate();
+#endif
     return Harness::Done;
 }
diff --git a/src/test/test_task_scheduler_observer.cpp b/src/test/test_task_scheduler_observer.cpp
index 93ceec2..69449bb 100644
--- a/src/test/test_task_scheduler_observer.cpp
+++ b/src/test/test_task_scheduler_observer.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #if __TBB_CPF_BUILD
@@ -118,8 +118,7 @@ class MyObserver : public tbb::task_scheduler_observer, public ObserverStats {
     tbb::atomic<int> m_leave_ticket;
     tbb::atomic<bool> m_dying;
 
-    /*override*/
-    void on_scheduler_entry( bool is_worker ) {
+    void on_scheduler_entry( bool is_worker ) __TBB_override {
         ThreadState& state = ThreadState::get();
         ASSERT( is_worker==!state.m_isMaster, NULL );
         if ( theTestMode & tmLeavingControl )
@@ -150,8 +149,7 @@ class MyObserver : public tbb::task_scheduler_observer, public ObserverStats {
         if ( is_worker )
             ++m_workerEntries;
     }
-    /*override*/
-    void on_scheduler_exit( bool is_worker ) {
+    void on_scheduler_exit( bool is_worker ) __TBB_override {
         ThreadState& state = ThreadState::get();
         ASSERT( is_worker==!state.m_isMaster, NULL );
         if ( m_dying && state.m_dyingObserver ) {
@@ -165,8 +163,7 @@ class MyObserver : public tbb::task_scheduler_observer, public ObserverStats {
         if ( is_worker )
             ++m_workerExits;
     }
-    /*override*/
-    bool may_sleep() {
+    bool may_sleep() __TBB_override {
         ThreadState& state = ThreadState::get();
         ++state.m_maySleepCalls;
         Harness::Sleep(10);     // helps to reproduce the issues
@@ -265,7 +262,7 @@ class FibTask : public tbb::task {
 public:
     FibTask( int n, uintptr_t flags, MyObserver &obs ) : N(n), m_flag(flags), m_observer(obs) {}
 
-    /*override*/ tbb::task* execute() {
+    tbb::task* execute() __TBB_override {
         ThreadState& s = ThreadState::get();
         ASSERT( !(~s.m_flags & m_flag), NULL );
         if( N < 2 )
@@ -357,7 +354,7 @@ void TestObserver( int M, int T, uintptr_t testMode ) {
     theTestMode = testMode;
     NativeParallelFor( M, TestBody(T) );
     // When T (number of threads in arena, i.e. master + workers) is less than P
-    // (hardware concurrency), more than T-1 workers can visit the same arena. This 
+    // (hardware concurrency), more than T-1 workers can visit the same arena. This
     // is possible in case of imbalance or when other arenas are activated/deactivated
     // concurrently).
     ASSERT( !theNumObservers, "Unexpected alive observer(s)" );
diff --git a/src/test/test_task_steal_limit.cpp b/src/test/test_task_steal_limit.cpp
index d41fb4a..6cf6a74 100644
--- a/src/test/test_task_steal_limit.cpp
+++ b/src/test/test_task_steal_limit.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 #include "tbb/task.h"
@@ -34,7 +34,7 @@ using tbb::task;
 // that the stealing limiting heuristic used by the task scheduler does not
 // switch off stealing when a large amount of TLS data is reserved.
 #if _MSC_VER
-__declspec(thread) 
+__declspec(thread)
 #elif __linux__ || ((__MINGW32__ || __MINGW64__) && __TBB_GCC_VERSION >= 40500)
 __thread
 #endif
@@ -43,7 +43,7 @@ __thread
 class TestTask : public task {
 public:
     static volatile int completed;
-    task* execute() {
+    task* execute() __TBB_override {
         completed = 1;
         return NULL;
     };
diff --git a/src/test/test_tbb_condition_variable.cpp b/src/test/test_tbb_condition_variable.cpp
index 696a2e0..150663b 100644
--- a/src/test/test_tbb_condition_variable.cpp
+++ b/src/test/test_tbb_condition_variable.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/tbb_config.h"
diff --git a/src/test/test_tbb_fork.cpp b/src/test/test_tbb_fork.cpp
index 823c51f..434a290 100644
--- a/src/test/test_tbb_fork.cpp
+++ b/src/test/test_tbb_fork.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #define TBB_PREVIEW_WAITING_FOR_WORKERS 1
@@ -73,7 +73,7 @@ static TidTableType tidTable;
 
 #include "tbb/tick_count.h"
 
-static void SigHandler(int) { }
+void SigHandler(int) { }
 
 #endif // _WIN32||_WIN64
 
@@ -98,6 +98,12 @@ public:
     AllocTask() {}
 };
 
+void CallParallelFor()
+{
+    tbb::parallel_for(tbb::blocked_range<int>(0, 10000, 1), AllocTask(),
+                      tbb::simple_partitioner());
+}
+
 /* Regression test against data race between termination of workers
    and setting blocking terination mode in main thread. */
 class RunWorkersBody : NoAssign {
@@ -105,9 +111,12 @@ class RunWorkersBody : NoAssign {
 public:
     RunWorkersBody(bool waitWorkers) : wait_workers(waitWorkers) {}
     void operator()(const int /*threadID*/) const {
-        tbb::task_scheduler_init sch(MaxThread, 0, wait_workers);
-            tbb::parallel_for(tbb::blocked_range<int>(0, 10000, 1), AllocTask(),
-                              tbb::simple_partitioner());
+        tbb::task_scheduler_init sch(MaxThread);
+        CallParallelFor();
+        if (wait_workers) {
+            bool ok = sch.blocking_terminate(std::nothrow);
+            ASSERT(ok, NULL);
+        }
     }
 };
 
@@ -120,11 +129,111 @@ void TestBlockNonblock()
     }
 }
 
+class RunInNativeThread : NoAssign {
+    bool create_tsi,
+        blocking;
+public:
+    RunInNativeThread(bool create_tsi_, bool blocking_) :
+        create_tsi(create_tsi_), blocking(blocking_) {}
+    void operator()(const int /*threadID*/) const {
+        // nested TSI or auto-initialized TSI can be terminated when
+        // wait_workers is true (deferred TSI means auto-initialization)
+        tbb::task_scheduler_init tsi(create_tsi? 2 : tbb::task_scheduler_init::deferred);
+        CallParallelFor();
+        if (blocking) {
+            bool ok = tsi.blocking_terminate(std::nothrow);
+            // all usages are nested
+            ASSERT(!ok, "Nested blocking terminate must fail.");
+        }
+    }
+};
+
+void TestTasksInThread()
+{
+    tbb::task_scheduler_init sch(2);
+    CallParallelFor();
+    for (int i=0; i<2; i++)
+        NativeParallelFor(2, RunInNativeThread(/*create_tsi=*/1==i, /*blocking=*/false));
+    bool ok = sch.blocking_terminate(std::nothrow);
+    ASSERT(ok, NULL);
+}
+
+#include "harness_memory.h"
+
+// check for memory leak during TBB task scheduler init/terminate life cycle
+// TODO: move to test_task_scheduler_init after workers waiting productization
+void TestSchedulerMemLeaks()
+{
+    const int ITERS = 10;
+    int it;
+
+    for (it=0; it<ITERS; it++) {
+        size_t memBefore = GetMemoryUsage();
+#if _MSC_VER && _DEBUG
+        // _CrtMemCheckpoint() and _CrtMemDifference are non-empty only in _DEBUG
+        _CrtMemState stateBefore, stateAfter, diffState;
+        _CrtMemCheckpoint(&stateBefore);
+#endif
+        for (int i=0; i<100; i++) {
+            tbb::task_scheduler_init sch(1);
+            for (int k=0; k<10; k++) {
+                tbb::empty_task *t = new( tbb::task::allocate_root() ) tbb::empty_task();
+                tbb::task::enqueue(*t);
+            }
+            bool ok = sch.blocking_terminate(std::nothrow);
+            ASSERT(ok, NULL);
+        }
+#if _MSC_VER && _DEBUG
+        _CrtMemCheckpoint(&stateAfter);
+        int ret = _CrtMemDifference(&diffState, &stateBefore, &stateAfter);
+        ASSERT(!ret, "It must be no memory leaks at this point.");
+#endif
+        if (GetMemoryUsage() <= memBefore)
+            break;
+    }
+    ASSERT(it < ITERS, "Memory consumption has not stabilized. Memory Leak?");
+}
+
+void TestNestingTSI()
+{
+    // nesting with and without blocking is possible
+    for (int i=0; i<2; i++) {
+        tbb::task_scheduler_init schBlock(2);
+        CallParallelFor();
+        tbb::task_scheduler_init schBlock1(2);
+        CallParallelFor();
+        if (i)
+            schBlock1.terminate();
+        else {
+            bool ok = schBlock1.blocking_terminate(std::nothrow);
+            ASSERT(!ok, "Nested blocking terminate must fail.");
+        }
+        bool ok = schBlock.blocking_terminate(std::nothrow);
+        ASSERT(ok, NULL);
+    }
+    {
+        tbb::task_scheduler_init schBlock(2);
+        NativeParallelFor(1, RunInNativeThread(/*create_tsi=*/true, /*blocking=*/true));
+        bool ok = schBlock.blocking_terminate(std::nothrow);
+        ASSERT(ok, NULL);
+    }
+}
+
+void TestAutoInit()
+{
+    CallParallelFor(); // autoinit
+    // creation of blocking scheduler is possible, but one is not block
+    NativeParallelFor(1, RunInNativeThread(/*create_tsi=*/true, /*blocking=*/true));
+}
+
 int TestMain()
 {
     using namespace Harness;
 
+    TestNestingTSI();
     TestBlockNonblock();
+    TestTasksInThread();
+    TestSchedulerMemLeaks();
 
     bool child = false;
 #if _WIN32||_WIN64
@@ -152,13 +261,15 @@ int TestMain()
             if (!child)
                 REMARK("\rThreads %d %d ", threads, i);
             {
-                tbb::task_scheduler_init sch(threads, 0, /*wait_workers=*/true);
+                tbb::task_scheduler_init sch(threads);
+                bool ok = sch.blocking_terminate(std::nothrow);
+                ASSERT(ok, NULL);
             }
-            tbb::task_scheduler_init sch(threads, 0, /*wait_workers=*/true);
+            tbb::task_scheduler_init sch(threads);
 
-            tbb::parallel_for(tbb::blocked_range<int>(0, 10000, 1), AllocTask(),
-                              tbb::simple_partitioner());
-            sch.terminate();
+            CallParallelFor();
+            bool ok = sch.blocking_terminate(std::nothrow);
+            ASSERT(ok, NULL);
 
 #if _WIN32||_WIN64
             // check that there is no alive threads after terminate()
@@ -211,17 +322,8 @@ int TestMain()
 #endif // _WIN32||_WIN64
         }
     }
-    REMARK("\n");
-#if TBB_USE_EXCEPTIONS
-    REMARK("Testing exceptions\n");
-    try {
-        {
-            tbb::task_scheduler_init schBlock(2, 0, /*wait_workers=*/true);
-            tbb::task_scheduler_init schBlock1(2, 0, /*wait_workers=*/true);
-        }
-        ASSERT(0, "Nesting of blocking schedulers is impossible.");
-    } catch (...) {}
-#endif
+    // auto initialization at this point
+    TestAutoInit();
 
     return Harness::Done;
 }
diff --git a/src/test/test_tbb_header.cpp b/src/test/test_tbb_header.cpp
index 088b4e6..d5adc8a 100644
--- a/src/test/test_tbb_header.cpp
+++ b/src/test/test_tbb_header.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 /**
@@ -29,9 +29,49 @@
 #define TBB_PREVIEW_AGGREGATOR 1
 #define TBB_PREVIEW_CONCURRENT_LRU_CACHE 1
 #define TBB_PREVIEW_VARIADIC_PARALLEL_INVOKE 1
-#define TBB_PREVIEW_FLOW_GRAPH_NODES 1 
+#define TBB_PREVIEW_FLOW_GRAPH_NODES 1
+#define TBB_PREVIEW_GLOBAL_CONTROL 1
 #endif
 
+#if __TBB_TEST_SECONDARY
+    // Test _DEBUG macro custom definitions.
+    #if TBB_USE_DEBUG
+        #ifdef _DEBUG
+            #undef _DEBUG
+        #endif /* _DEBUG */
+        // Check that empty value successfully enables the debug mode.
+        #define _DEBUG
+        static bool isDebugExpected = true;
+    #else
+        // Check that zero value does not enable the debug mode.
+        #define _DEBUG 0x0
+        static bool isDebugExpected = false;
+    #endif /* TBB_USE_DEBUG */
+    #define DO_TEST_DEBUG_MACRO 1
+#else
+    // Test default definitions of _DEBUG.
+    #if _DEBUG
+        static bool isDebugExpected = true;
+        #define DO_TEST_DEBUG_MACRO 1
+    #elif _MSC_VER
+        // for MSVC, _DEBUG not defined indicates a release mode.
+        static bool isDebugExpected = false;
+        #define DO_TEST_DEBUG_MACRO 1
+    #endif /* _DEBUG */
+#endif /* __TBB_TEST_SECONDARY */
+
+#if DO_TEST_DEBUG_MACRO
+// Reset TBB_USE_DEBUG defined in makefiles.
+#undef TBB_USE_DEBUG
+#endif /* DO_TEST_DEBUG_MACRO */
+#include "tbb/tbb_config.h"
+
+#if !TBB_USE_DEBUG && defined(_DEBUG)
+// TBB_USE_DEBUG is 0 but _DEBUG is defined, it means that _DEBUG is 0
+// MSVC C++ headers consider any definition of _DEBUG, including 0, as debug mode
+#undef _DEBUG
+#endif /* !TBB_USE_DEBUG && defined(_DEBUG) */
+
 #include "harness_defs.h"
 #if !(__TBB_TEST_SECONDARY && __TBB_CPP11_STD_PLACEHOLDERS_LINKAGE_BROKEN)
 
@@ -95,7 +135,7 @@ struct Body3 {
 
 template <typename E>
 void TestExceptionClassExports ( const E& exc, tbb::internal::exception_id eid ) {
-    // The assertion here serves to shut up warnings about "eid not used". 
+    // The assertion here serves to shut up warnings about "eid not used".
     ASSERT( eid<tbb::internal::eid_max, NULL );
 #if TBB_USE_EXCEPTIONS
     for ( int i = 0; i < 2; ++i ) {
@@ -151,18 +191,21 @@ static void TestPreviewNames() {
     TestTypeDefinitionPresence( aggregator );
     TestTypeDefinitionPresence( aggregator_ext<Handler> );
     TestTypeDefinitionPresence2(concurrent_lru_cache<int, int> );
-    #if __TBB_PREVIEW_COMPOSITE_NODE
-    TestTypeDefinitionPresence2( composite_node<tbb::flow::tuple<int>, tbb::flow::tuple<int> > );
+    #if __TBB_FLOW_GRAPH_CPP11_FEATURES
+    TestTypeDefinitionPresence2( flow::composite_node<tbb::flow::tuple<int>, tbb::flow::tuple<int> > );
     #endif
+    TestTypeDefinitionPresence( static_partitioner );
 }
 #endif
 
 #if __TBB_TEST_SECONDARY
-/* This mode is used to produce a secondary object file that is linked with 
+/* This mode is used to produce a secondary object file that is linked with
    the main one in order to detect "multiple definition" linker error.
 */
-void secondary()
+#include "harness_assert.h"
+bool Secondary()
 #else
+bool Secondary();
 int TestMain ()
 #endif
 {
@@ -203,6 +246,9 @@ int TestMain ()
     TestTypeDefinitionPresence( flow::priority_queue_node<int> );
     TestTypeDefinitionPresence( flow::limiter_node<int> );
     TestTypeDefinitionPresence2(flow::indexer_node<int, int> );
+#if __TBB_FLOW_GRAPH_CPP11_FEATURES
+    TestTypeDefinitionPresence2( flow::composite_node<tbb::flow::tuple<int>, tbb::flow::tuple<int> > );
+#endif
     using tbb::flow::queueing;
     TestTypeDefinitionPresence2( flow::join_node< intpair, queueing > );
     /* Mutex names */
@@ -254,13 +300,28 @@ int TestMain ()
     TestTypeDefinitionPresence( tbb_allocator<int> );
     TestTypeDefinitionPresence( zero_allocator<int> );
     TestTypeDefinitionPresence( tick_count );
+#if TBB_PREVIEW_GLOBAL_CONTROL
+    TestTypeDefinitionPresence( global_control );
+#endif
+    TestFuncDefinitionPresence( parallel_for, (int, int, int, const Body1&, const tbb::static_partitioner&), void );
+    TestFuncDefinitionPresence( parallel_reduce, (const tbb::blocked_range<int>&, Body2&, const tbb::static_partitioner&), void );
 
 #if __TBB_CPF_BUILD
     TestPreviewNames();
 #endif
-#if !__TBB_TEST_SECONDARY
+#ifdef DO_TEST_DEBUG_MACRO
+#if TBB_USE_DEBUG
+    ASSERT( isDebugExpected, "Debug mode is observed while release mode is expected." );
+#else
+    ASSERT( !isDebugExpected, "Release mode is observed while debug mode is expected." );
+#endif /* TBB_USE_DEBUG */
+#endif /* DO_TEST_DEBUG_MACRO */
+#if __TBB_TEST_SECONDARY
+    return true;
+#else
     TestExceptionClassesExports();
+    Secondary();
     return Harness::Done;
-#endif
+#endif /* __TBB_TEST_SECONDARY */
 }
 #endif //!(__TBB_TEST_SECONDARY && __TBB_CPP11_STD_PLACEHOLDERS_LINKING_BROKEN)
diff --git a/src/test/test_tbb_thread.cpp b/src/test/test_tbb_thread.cpp
index b7f82d4..272a2a0 100644
--- a/src/test/test_tbb_thread.cpp
+++ b/src/test/test_tbb_thread.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/tbb_thread.h"
diff --git a/src/test/test_tbb_version.cpp b/src/test/test_tbb_version.cpp
index 0d7ccd3..76c1b03 100644
--- a/src/test/test_tbb_version.cpp
+++ b/src/test/test_tbb_version.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 #include "tbb/tbb_stddef.h"
@@ -55,7 +55,9 @@ int TestMain() {
 
 #if defined (_WIN32) || defined (_WIN64)
 #define TEST_SYSTEM_COMMAND "test_tbb_version.exe @"
-#define putenv _putenv
+#elif __APPLE__
+// DYLD_LIBRARY_PATH is purged for OS X 10.11, set it again
+#define TEST_SYSTEM_COMMAND "DYLD_LIBRARY_PATH=. ./test_tbb_version.exe @"
 #else
 #define TEST_SYSTEM_COMMAND "./test_tbb_version.exe @"
 #endif
@@ -163,7 +165,7 @@ int main(int argc, char *argv[] ) {
 
         //Setting TBB_VERSION in case it is not set
         if ( !getenv("TBB_VERSION") ){
-            putenv(const_cast<char*>("TBB_VERSION=1"));
+            Harness::SetEnv("TBB_VERSION","1");
         }
 
         if( ( system(TEST_SYSTEM_COMMAND) ) != 0 ){
@@ -195,7 +197,7 @@ int main(int argc, char *argv[] ) {
             REPORT( "Error (step 1):Internal test error (stderr open)\n" );
             exit( 1 );
         }
-        
+
         while( !feof( stream_err ) ) {
             if( fgets( psBuffer, psBuffer_len, stream_err ) != NULL ){
                 if (strstr( psBuffer, "TBBmalloc: " )) {
@@ -234,19 +236,21 @@ int main(int argc, char *argv[] ) {
 }
 
 
-// Fill dictionary with version strings for platforms 
+// Fill dictionary with version strings for platforms
 void initialize_strings_vector(std::vector <string_pair>* vector)
 {
-    vector->push_back(string_pair("TBB: VERSION\t\t4.3", required));          // check TBB_VERSION
-    vector->push_back(string_pair("TBB: INTERFACE VERSION\t8006", required)); // check TBB_INTERFACE_VERSION
+    vector->push_back(string_pair("TBB: VERSION\t\t2017.0", required));       // check TBB_VERSION
+    vector->push_back(string_pair("TBB: INTERFACE VERSION\t9107", required)); // check TBB_INTERFACE_VERSION
     vector->push_back(string_pair("TBB: BUILD_DATE", required));
     vector->push_back(string_pair("TBB: BUILD_HOST", required));
     vector->push_back(string_pair("TBB: BUILD_OS", required));
 #if _WIN32||_WIN64
 #if !__MINGW32__
     vector->push_back(string_pair("TBB: BUILD_CL", required));
-#endif
     vector->push_back(string_pair("TBB: BUILD_COMPILER", required));
+#else
+    vector->push_back(string_pair("TBB: BUILD_GCC", required));
+#endif
 #elif __APPLE__
     vector->push_back(string_pair("TBB: BUILD_KERNEL", required));
     vector->push_back(string_pair("TBB: BUILD_CLANG", required));
@@ -260,14 +264,17 @@ void initialize_strings_vector(std::vector <string_pair>* vector)
 #if !__ANDROID__
     vector->push_back(string_pair("TBB: BUILD_KERNEL", required));
 #endif
-    vector->push_back(string_pair("TBB: BUILD_GCC", required));
+    vector->push_back(string_pair("TBB: BUILD_GCC", optional));
+    vector->push_back(string_pair("TBB: BUILD_CLANG", optional));
+    vector->push_back(string_pair("TBB: BUILD_TARGET_CXX", optional));
     vector->push_back(string_pair("TBB: BUILD_COMPILER", optional)); //if( getenv("COMPILER_VERSION") )
 #if __ANDROID__
     vector->push_back(string_pair("TBB: BUILD_NDK", optional));
+    vector->push_back(string_pair("TBB: BUILD_LD", optional));
 #else
     vector->push_back(string_pair("TBB: BUILD_LIBC", required));
-#endif // !__ANDROID__
     vector->push_back(string_pair("TBB: BUILD_LD", required));
+#endif // !__ANDROID__
 #endif // OS
     vector->push_back(string_pair("TBB: BUILD_TARGET", required));
     vector->push_back(string_pair("TBB: BUILD_COMMAND", required));
diff --git a/src/test/test_thread.h b/src/test/test_thread.h
index be9a1ad..35efbb2 100644
--- a/src/test/test_thread.h
+++ b/src/test/test_thread.h
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/atomic.h"
@@ -27,6 +27,19 @@
 #include "harness_report.h"
 #include "harness_assert.h"
 
+bool CheckSignatures() {
+    // Checks that thread ids can be compared, in the way users would do it
+    THREAD::id id1, id2;
+    bool result = id1 == id2;
+    result |= id1 != id2;
+    result |= id1 < id2;
+    result |= id1 > id2;
+    result |= id1 <= id2;
+    result |= id1 >= id2;
+    tbb::tbb_hash<THREAD::id> hash;
+    return result |= hash(id1)==hash(id2);
+}
+
 static const int THRDS = 3;
 static const int THRDS_DETACH = 2;
 static tbb::atomic<int> sum;
@@ -41,9 +54,9 @@ class Base {
 protected:
     Base() : copy_throws(100) {++BaseCount;}
     Base( const Base& c ) : copy_throws(c.copy_throws) {
-        if( --copy_throws<=0 ) 
+        if( --copy_throws<=0 )
             __TBB_THROW(0);
-        ++BaseCount; 
+        ++BaseCount;
     }
     ~Base() {--BaseCount;}
 };
@@ -71,7 +84,7 @@ public:
     void operator()(){
         real_ids[0] = THIS_THREAD::get_id();
         init_barrier.wait();
-        
+
         sum.fetch_and_add(1);
     }
     void operator()(int num){
@@ -80,7 +93,7 @@ public:
 
         sum.fetch_and_add(num);
     }
-    void operator()(int num, Data<0> dx) { 
+    void operator()(int num, Data<0> dx) {
         real_ids[num] = THIS_THREAD::get_id();
 
         const double WAIT = .1;
@@ -125,7 +138,7 @@ void CheckRelations( const THREAD::id ids[], int n, bool duplicates_allowed ) {
             for( int k=0; k<n; ++k ) {
                 const THREAD::id z = ids[j];
                 ASSERT( !(x<y && y<z) || x<z, "< is not transitive" );
-            }    
+            }
         }
     }
 }
@@ -139,13 +152,13 @@ public:
 };
 
 #if TBB_USE_EXCEPTIONS
-void CheckExceptionSafety() { 
+void CheckExceptionSafety() {
     int original_count = BaseCount;
-    // d loops over number of copies before throw occurs 
+    // d loops over number of copies before throw occurs
     for( int d=1; d<=3; ++d ) {
         // Try all combinations of throw/nothrow for f, x, and y's copy constructor.
         for( int i=0; i<8; ++i ) {
-            { 
+            {
                 const AnotherThreadFunc f = AnotherThreadFunc();
                 if( i&1 ) f.copy_throws = d;
                 const Data<1> x(0);
@@ -154,7 +167,7 @@ void CheckExceptionSafety() {
                 if( i&4 ) y.copy_throws = d;
                 bool exception_caught = false;
                 for( int j=0; j<3; ++j ) {
-                    try { 
+                    try {
                         switch(j) {
                             case 0: {THREAD t(f); t.join();} break;
                             case 1: {THREAD t(f,x); t.join();} break;
@@ -162,7 +175,7 @@ void CheckExceptionSafety() {
                         }
                     } catch(...) {
                         exception_caught = true;
-                    } 
+                    }
                     ASSERT( !exception_caught||(i&((1<<(j+1))-1))!=0, NULL );
                 }
             }
@@ -175,9 +188,8 @@ void CheckExceptionSafety() {
 #include <cstdio>
 
 #if __TBB_CPP11_RVALUE_REF_PRESENT
-
-tbb::tbb_thread returnThread() {
-    return tbb::tbb_thread();
+THREAD returnThread() {
+    return THREAD();
 }
 #endif
 
@@ -187,13 +199,13 @@ void RunTests() {
     Data<0> d100(100), d1(1), d0(0);
     const THREAD::id id_zero;
     THREAD::id id0, uniq_ids[THRDS];
-    
+
     THREAD thrs[THRDS];
     THREAD thr;
     THREAD thr0(t);
     THREAD thr1(t, 2);
     THREAD thr2(t, 1, d100);
-    
+
     ASSERT( thr0.get_id() != id_zero, NULL );
     id0 = thr0.get_id();
     tbb::move(thrs[0], thr0);
@@ -258,11 +270,11 @@ void RunTests() {
     ASSERT( BaseCount==4, "object leak detected" );
 
 #if TBB_USE_EXCEPTIONS
-    CheckExceptionSafety(); 
+    CheckExceptionSafety();
 #endif
 
     // Note: all tests involving BaseCount should be put before the tests
-    // involing detached threads, because there is no way of knowing when 
+    // involing detached threads, because there is no way of knowing when
     // a detached thread destroys its arguments.
 
     THREAD thr_detach_0(t, d0);
@@ -295,15 +307,3 @@ void RunTests() {
 
     ASSERT( THREAD::hardware_concurrency() > 0, NULL);
 }
-
-typedef bool (*id_relation)( THREAD::id, THREAD::id );
-
-id_relation CheckSignatures() {
-    id_relation r[6] = {&tbb::operator==,
-                        &tbb::operator!=,
-                        &tbb::operator<,
-                        &tbb::operator>,
-                        &tbb::operator<=,
-                        &tbb::operator>=};
-    return r[1];
-}
diff --git a/src/test/test_tick_count.cpp b/src/test/test_tick_count.cpp
index 5143dd1..487c04e 100644
--- a/src/test/test_tick_count.cpp
+++ b/src/test/test_tick_count.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "tbb/tick_count.h"
@@ -180,13 +180,17 @@ void TestResolution() {
     REMARK("avg_diff = %g ticks, max_diff = %g ticks\n", avg_diff, max_diff);
 }
 
-#include <tbb/compat/thread>
+#include "tbb/tbb_thread.h"
 
 int TestMain () {
+    // Increased tolerance for Virtual Machines
+    double tolerance_multiplier = Harness::GetEnv( "VIRTUAL_MACHINE" ) ? 50. : 1.;
+    REMARK( "tolerance_multiplier = %g \n", tolerance_multiplier );
+
     tbb::tick_count t0 = tbb::tick_count::now();
-    TestSimpleDelay(/*ntrial=*/1000000,/*duration=*/0,    /*tolerance=*/2E-6);
+    TestSimpleDelay(/*ntrial=*/1000000,/*duration=*/0,    /*tolerance=*/2E-6 * tolerance_multiplier);
     tbb::tick_count t1 = tbb::tick_count::now();
-    TestSimpleDelay(/*ntrial=*/1000,   /*duration=*/0.001,/*tolerance=*/5E-6);
+    TestSimpleDelay(/*ntrial=*/1000,   /*duration=*/0.001,/*tolerance=*/5E-6 * tolerance_multiplier);
     tbb::tick_count t2 = tbb::tick_count::now();
     TestArithmetic(t0,t1,t2);
 
diff --git a/src/test/test_tuple.cpp b/src/test/test_tuple.cpp
index 1813175..ff23b60 100644
--- a/src/test/test_tuple.cpp
+++ b/src/test/test_tuple.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 // tbb::flow::tuple (implementation used in tbb::flow)
@@ -68,7 +68,7 @@ void RunOneComparisonTest() {
     ASSERT(!(t_tuple((T1)2,(T2)1,(T3)1) == u_tuple((U1)1,(U2)1,(U3)1)),NULL);
     ASSERT(!(t_tuple((T1)1,(T2)2,(T3)1) == u_tuple((U1)1,(U2)1,(U3)1)),NULL);
     ASSERT(!(t_tuple((T1)1,(T2)1,(T3)2) == u_tuple((U1)1,(U2)1,(U3)1)),NULL);
-    
+
     ASSERT(!(t_tuple((T1)1,(T2)1,(T3)1) <  u_tuple((U1)1,(U2)1,(U3)1)),NULL);
     ASSERT(!(t_tuple((T1)1,(T2)1,(T3)1) >  u_tuple((U1)1,(U2)1,(U3)1)),NULL);
     ASSERT(!(t_tuple((T1)1,(T2)1,(T3)1) !=  u_tuple((U1)1,(U2)1,(U3)1)),NULL);
@@ -78,6 +78,8 @@ void RunOneComparisonTest() {
 
 }
 
+#include "harness_defs.h"
+
 void RunTests() {
 
 #if __TESTING_STD_TUPLE__
@@ -158,34 +160,36 @@ void RunTests() {
     ASSERT(int_tuple_type(1,1,1) >= int_tuple_type(1,0,0),NULL);
     ASSERT(int_tuple_type(0,1,1) >= int_tuple_type(0,1,1),NULL);
 
+#if !__TBB_TUPLE_COMPARISON_COMPILATION_BROKEN
     typedef tuple<int,float,double,char> mixed_tuple_left;
     typedef tuple<float,int,char,double> mixed_tuple_right;
 
-    ASSERT(mixed_tuple_left(1,1.f,1,1) == mixed_tuple_right(1.f,1,1,1),NULL);
-    ASSERT(mixed_tuple_left(1,0.f,1,1) <  mixed_tuple_right(1.f,1,1,1),NULL);
-    ASSERT(mixed_tuple_left(1,1.f,1,1) >  mixed_tuple_right(1.f,1,0,1),NULL);
-    ASSERT(mixed_tuple_left(1,1.f,1,0) != mixed_tuple_right(1.f,1,1,1),NULL);
-    ASSERT(mixed_tuple_left(1,0.f,1,1) <= mixed_tuple_right(1.f,1,0,1),NULL);
-    ASSERT(mixed_tuple_left(1,0.f,0,1) <= mixed_tuple_right(1.f,0,0,1),NULL);
-    ASSERT(mixed_tuple_left(1,1.f,1,0) >= mixed_tuple_right(1.f,0,1,1),NULL);
-    ASSERT(mixed_tuple_left(0,1.f,1,0) >= mixed_tuple_right(0.f,1,1,0),NULL);
-
-    ASSERT(!(mixed_tuple_left(2,1.f,1,1) == mixed_tuple_right(1.f,1,1,1)),NULL);
-    ASSERT(!(mixed_tuple_left(1,2.f,1,1) == mixed_tuple_right(1.f,1,1,1)),NULL);
-    ASSERT(!(mixed_tuple_left(1,1.f,2,1) == mixed_tuple_right(1.f,1,1,1)),NULL);
-    ASSERT(!(mixed_tuple_left(1,1.f,1,2) == mixed_tuple_right(1.f,1,1,1)),NULL);
-    
-    ASSERT(!(mixed_tuple_left(1,1.f,1,1) <  mixed_tuple_right(1.f,1,1,1)),NULL);
-    ASSERT(!(mixed_tuple_left(1,1.f,1,1) >  mixed_tuple_right(1.f,1,1,1)),NULL);
-    ASSERT(!(mixed_tuple_left(1,1.f,1,1) !=  mixed_tuple_right(1.f,1,1,1)),NULL);
-
-    ASSERT(mixed_tuple_left(1,1.f,1,1) <= mixed_tuple_right(1.f,1,1,1),NULL);
-    ASSERT(mixed_tuple_left(1,1.f,1,1) >= mixed_tuple_right(1.f,1,1,1),NULL);
+    ASSERT(mixed_tuple_left(1,1.f,1,char(1)) == mixed_tuple_right(1.f,1,char(1),1),NULL);
+    ASSERT(mixed_tuple_left(1,0.f,1,char(1)) <  mixed_tuple_right(1.f,1,char(1),1),NULL);
+    ASSERT(mixed_tuple_left(1,1.f,1,char(1)) >  mixed_tuple_right(1.f,1,char(0),1),NULL);
+    ASSERT(mixed_tuple_left(1,1.f,1,char(0)) != mixed_tuple_right(1.f,1,char(1),1),NULL);
+    ASSERT(mixed_tuple_left(1,0.f,1,char(1)) <= mixed_tuple_right(1.f,1,char(0),1),NULL);
+    ASSERT(mixed_tuple_left(1,0.f,0,char(1)) <= mixed_tuple_right(1.f,0,char(0),1),NULL);
+    ASSERT(mixed_tuple_left(1,1.f,1,char(0)) >= mixed_tuple_right(1.f,0,char(1),1),NULL);
+    ASSERT(mixed_tuple_left(0,1.f,1,char(0)) >= mixed_tuple_right(0.f,1,char(1),0),NULL);
+
+    ASSERT(!(mixed_tuple_left(2,1.f,1,char(1)) == mixed_tuple_right(1.f,1,char(1),1)),NULL);
+    ASSERT(!(mixed_tuple_left(1,2.f,1,char(1)) == mixed_tuple_right(1.f,1,char(1),1)),NULL);
+    ASSERT(!(mixed_tuple_left(1,1.f,2,char(1)) == mixed_tuple_right(1.f,1,char(1),1)),NULL);
+    ASSERT(!(mixed_tuple_left(1,1.f,1,char(2)) == mixed_tuple_right(1.f,1,char(1),1)),NULL);
+
+    ASSERT(!(mixed_tuple_left(1,1.f,1,char(1)) <  mixed_tuple_right(1.f,1,char(1),1)),NULL);
+    ASSERT(!(mixed_tuple_left(1,1.f,1,char(1)) >  mixed_tuple_right(1.f,1,char(1),1)),NULL);
+    ASSERT(!(mixed_tuple_left(1,1.f,1,char(1)) != mixed_tuple_right(1.f,1,char(1),1)),NULL);
+
+    ASSERT(mixed_tuple_left(1,1.f,1,char(1)) <= mixed_tuple_right(1.f,1,char(1),1),NULL);
+    ASSERT(mixed_tuple_left(1,1.f,1,char(1)) >= mixed_tuple_right(1.f,1,char(1),1),NULL);
 
     RunOneComparisonTest<int,float,char,float,char,int>();
     RunOneComparisonTest<double,float,char,float,double,int>();
     RunOneComparisonTest<int,float,char,short,char,short>();
     RunOneComparisonTest<double,float,short,float,char,int>();
+#endif /* __TBB_TUPLE_COMPARISON_COMPILATION_BROKEN */
 
 
     // the following should result in a syntax error
diff --git a/src/test/test_write_once_node.cpp b/src/test/test_write_once_node.cpp
index cb21a60..5308935 100644
--- a/src/test/test_write_once_node.cpp
+++ b/src/test/test_write_once_node.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
-
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+
+
 */
 
 #include "harness_graph.h"
@@ -23,7 +23,7 @@
 #include "tbb/task_scheduler_init.h"
 
 #define N 300
-#define T 4 
+#define T 4
 #define M 4
 
 template< typename R >
@@ -48,7 +48,7 @@ void simple_read_write_tests() {
         for (int i = 0; i < M; ++i) {
            tbb::flow::make_edge( n, r[i] );
         }
-      
+
         if ( t%2 ) {
             for (int i = 0; i < M; ++i) {
                  size_t c = r[i].my_count;
@@ -60,7 +60,7 @@ void simple_read_write_tests() {
             R v1(static_cast<R>(i));
 
             bool result = n.try_put( v1 );
-            if ( !(t%2) && i == 1 ) 
+            if ( !(t%2) && i == 1 )
                 ASSERT( result == true, NULL );
             else
                 ASSERT( result == false, NULL );
@@ -70,9 +70,9 @@ void simple_read_write_tests() {
             for (int j = 0; j < N; ++j ) {
                 R v2(0);
                 ASSERT( n.try_get( v2 ), NULL );
-                if ( t%2 ) 
+                if ( t%2 )
                     ASSERT( R(N+1) == v2, NULL );
-                else 
+                else
                     ASSERT( R(1) == v2, NULL );
             }
         }
@@ -152,7 +152,7 @@ void parallel_read_write_tests() {
     }
 }
 
-int TestMain() { 
+int TestMain() {
     simple_read_write_tests<int>();
     simple_read_write_tests<float>();
     for( int p=MinThread; p<=MaxThread; ++p ) {
diff --git a/src/test/test_yield.cpp b/src/test/test_yield.cpp
index 4c95c90..6ef79dc 100644
--- a/src/test/test_yield.cpp
+++ b/src/test/test_yield.cpp
@@ -1,21 +1,21 @@
 /*
-    Copyright 2005-2015 Intel Corporation.  All Rights Reserved.
+    Copyright (c) 2005-2017 Intel Corporation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
-    This file is part of Threading Building Blocks. Threading Building Blocks is free software;
-    you can redistribute it and/or modify it under the terms of the GNU General Public License
-    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks 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 Threading Building Blocks; if not, write to the
-    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA
 
-    As a special exception,  you may use this file  as part of a free software library without
-    restriction.  Specifically,  if other files instantiate templates  or use macros or inline
-    functions from this file, or you compile this file and link it with other files to produce
-    an executable,  this file does not by itself cause the resulting executable to be covered
-    by the GNU General Public License. This exception does not however invalidate any other
-    reasons why the executable file might be covered by the GNU General Public License.
 */
 
 // Test that __TBB_Yield works.
@@ -38,7 +38,7 @@ struct RoundRobin: NoAssign {
     void operator()( long k ) const {
         tbb::tick_count t0 = tbb::tick_count::now();
         for( long i=0; i<10000; ++i ) {
-            // Wait for previous thread to notify us 
+            // Wait for previous thread to notify us
             for( int j=0; CyclicCounter!=k && !Quit; ++j ) {
                 __TBB_Yield();
                 if( j%100==0 ) {
@@ -50,7 +50,7 @@ struct RoundRobin: NoAssign {
                     }
                 }
             }
-            // Notify next thread that it can run            
+            // Notify next thread that it can run
             CyclicCounter = (k+1)%number_of_threads;
         }
     }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/tbb.git



More information about the debian-science-commits mailing list